Skip to content

Commit

Permalink
DYN-6728 feature flags should be controlled by no network mode when c…
Browse files Browse the repository at this point in the history
…reating a dynamo model directly. (#14975) (#14980)

* check network mode

* align disable and networkmode

* add small tests

* remove todo

* review comments

* another test
  • Loading branch information
mjkkirschner authored Feb 27, 2024
1 parent 1cf9f7d commit 4c94153
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/DynamoCore/Models/DynamoModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -699,10 +699,14 @@ protected DynamoModel(IStartConfiguration config)
// Do nothing for now
}
}
//If network traffic is disabled, analytics should also be disabled - this is already done in
//our other entry points(CLI,Sandbox etc) - but
//not all integrators will use those entry points, some may just create a DynamoModel directly.
Analytics.DisableAnalytics = NoNetworkMode || Analytics.DisableAnalytics;

// If user skipped analytics from assembly config, do not try to launch the analytics client
// or the feature flags client for web traffic reason.
if (!IsServiceMode && !areAnalyticsDisabledFromConfig && !Analytics.DisableAnalytics)
if (!IsServiceMode && !areAnalyticsDisabledFromConfig && !Analytics.DisableAnalytics && !NoNetworkMode)
{
HandleAnalytics();

Expand Down
67 changes: 67 additions & 0 deletions test/DynamoCoreTests/Logging/AnalyticsServiceTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -80,5 +80,72 @@ public void DisableAnalytics()
dynamoCLI?.Kill();
}
}

[Test]
[Platform("win")]//nunit attribute for now only run on windows until we know it's useful on linux.
public void DisableAnalyticsViaNoNetWorkMode()
{
var versions = new List<Version>(){

new Version(230, 0,0),
};

var directory = new DirectoryInfo(Assembly.GetExecutingAssembly().Location);
var testDirectory = Path.Combine(directory.Parent.Parent.Parent.FullName, "test");
string openPath = Path.Combine(testDirectory, @"core\Angle.dyn");
//go get a valid asm path.
var locatedPath = string.Empty;
var coreDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
Process dynamoCLI = null;
//TODO an approach we could take to get this running on linux.
//unclear if this needs to be compiled with an ifdef or runtime is ok.
//related to https://jira.autodesk.com/browse/DYN-5705
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
DynamoShapeManager.Utilities.SearchForASMInLibGFallback(versions, ref locatedPath, coreDirectory, out _);
}
else
{
DynamoShapeManager.Utilities.GetInstalledAsmVersion2(versions, ref locatedPath, coreDirectory);
}
try
{
Assert.DoesNotThrow(() =>
{
dynamoCLI = Process.Start(new ProcessStartInfo(Path.Combine(coreDirectory, "DynamoCLI.exe"), $"--GeometryPath \"{locatedPath}\" -k --NoNetworkMode -o \"{openPath}\" ") { UseShellExecute = true });
Thread.Sleep(5000);// Wait 5 seconds to open the dyn
Assert.IsFalse(dynamoCLI.HasExited);
var dt = DataTarget.AttachToProcess(dynamoCLI.Id, false);
var assemblies = dt
.ClrVersions
.Select(dtClrVersion => dtClrVersion.CreateRuntime())
.SelectMany(runtime => runtime.AppDomains.SelectMany(runtimeAppDomain => runtimeAppDomain.Modules))
.Select(clrModule => clrModule.AssemblyName)
.Distinct()
.Where(x => x != null)
.ToList();
var firstASMmodulePath = string.Empty;
foreach (string module in assemblies)
{
if (module.IndexOf("Analytics", StringComparison.OrdinalIgnoreCase) != -1)
{
Assert.Fail("Analytics module was loaded");
}
if (module.IndexOf("AdpSDKCSharpWrapper", StringComparison.OrdinalIgnoreCase) != -1)
{
Assert.Fail("ADP module was loaded");
}
}
});
}
finally
{

dynamoCLI?.Kill();
}
}
}
}
19 changes: 19 additions & 0 deletions test/System/IntegrationTests/DynamoApplicationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
using System.Diagnostics;
using System.IO;
using Dynamo.Applications;
using Dynamo.Logging;
using Dynamo.Models;
using NUnit.Framework;
using static Dynamo.Models.DynamoModel;

namespace IntegrationTests
{
Expand Down Expand Up @@ -64,6 +66,23 @@ public void DynamoMakeModelWithHostName()
var model = Dynamo.Applications.StartupUtils.MakeModel(false, string.Empty, "DynamoFormIt");
Assert.AreEqual(DynamoModel.HostAnalyticsInfo.HostName, "DynamoFormIt");
}
[Test]
public void DynamoModelStartedWithNoNetworkMode_AlsoDisablesAnalytics()
{
var startConfig = new DefaultStartConfiguration() { NoNetworkMode = true };
var model = DynamoModel.Start(startConfig);
Assert.AreEqual(true, Analytics.DisableAnalytics);
model.ShutDown(false);
}
[Test]
public void DynamoModelStartedWithNoNetworkModeFalse_DisablesAnalyticsCanBeTrue()
{
var startConfig = new DefaultStartConfiguration() { NoNetworkMode = false };
Analytics.DisableAnalytics = true;
var model = DynamoModel.Start(startConfig);
Assert.AreEqual(true, Analytics.DisableAnalytics);
model.ShutDown(false);
}

[Test]
public void IfASMPathInvalidExceptionNotThrown()
Expand Down

0 comments on commit 4c94153

Please sign in to comment.