Skip to content

Commit 6b4abf1

Browse files
committed
adding unit tests
1 parent 226534f commit 6b4abf1

File tree

1 file changed

+82
-9
lines changed

1 file changed

+82
-9
lines changed

test/WebJobs.Script.Tests/ScriptStartupTypeDiscovererTests.cs

Lines changed: 82 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -392,10 +392,63 @@ public async Task GetExtensionsStartupTypes_LegacyBundles_UsesExtensionBundleBin
392392
}
393393
}
394394

395+
[Fact]
396+
public async Task GetExtensionsStartupTypes_WorkerRuntimeNotSetForNodeApp_LoadsExtensionBundle()
397+
{
398+
var vars = new Dictionary<string, string>();
399+
400+
using (var directory = GetTempDirectory())
401+
using (var env = new TestScopedEnvironmentVariable(vars))
402+
{
403+
var binPath = Path.Combine(directory.Path, "bin");
404+
TestMetricsLogger testMetricsLogger = new TestMetricsLogger();
405+
TestLoggerProvider testLoggerProvider = new TestLoggerProvider();
406+
LoggerFactory factory = new LoggerFactory();
407+
factory.AddProvider(testLoggerProvider);
408+
var testLogger = factory.CreateLogger<ScriptStartupTypeLocator>();
409+
410+
var mockExtensionBundleManager = new Mock<IExtensionBundleManager>();
411+
mockExtensionBundleManager.Setup(e => e.IsExtensionBundleConfigured()).Returns(true);
412+
mockExtensionBundleManager.Setup(e => e.GetExtensionBundleBinPathAsync()).Returns(Task.FromResult(binPath));
413+
mockExtensionBundleManager.Setup(e => e.IsLegacyExtensionBundle()).Returns(false);
414+
mockExtensionBundleManager.Setup(e => e.GetExtensionBundleDetails()).Returns(Task.FromResult(GetV2BundleDetails()));
415+
416+
RpcWorkerConfig nodeWorkerConfig = new RpcWorkerConfig() { Description = TestHelpers.GetTestWorkerDescription("node", "none", false) };
417+
RpcWorkerConfig dotnetIsolatedWorkerConfig = new RpcWorkerConfig() { Description = TestHelpers.GetTestWorkerDescription("dotnet-isolated", "none", false) };
418+
419+
var tempOptions = new LanguageWorkerOptions();
420+
tempOptions.WorkerConfigs = new List<RpcWorkerConfig>();
421+
tempOptions.WorkerConfigs.Add(nodeWorkerConfig);
422+
tempOptions.WorkerConfigs.Add(dotnetIsolatedWorkerConfig);
423+
424+
var optionsMonitor = new TestOptionsMonitor<LanguageWorkerOptions>(tempOptions);
425+
var mockFunctionMetadataManager = GetTestFunctionMetadataManager(optionsMonitor, hasNodeFunctions: true);
426+
427+
var languageWorkerOptions = new TestOptionsMonitor<LanguageWorkerOptions>(tempOptions);
428+
429+
var discoverer = new ScriptStartupTypeLocator(directory.Path, testLogger, mockExtensionBundleManager.Object, mockFunctionMetadataManager, testMetricsLogger, languageWorkerOptions);
430+
431+
// Act
432+
var types = await discoverer.GetExtensionsStartupTypesAsync();
433+
434+
//Assert
435+
var traces = testLoggerProvider.GetAllLogMessages();
436+
var traceMessage = traces.FirstOrDefault(val => val.EventId.Name.Equals("ScriptStartNotLoadingExtensionBundle"));
437+
bool loadingExtensionBundle = traceMessage == null;
438+
439+
Assert.True(loadingExtensionBundle);
440+
AreExpectedMetricsGenerated(testMetricsLogger);
441+
Assert.Single(types);
442+
Assert.Equal(typeof(AzureStorageWebJobsStartup).FullName, types.Single().FullName);
443+
}
444+
}
445+
395446
[Theory]
396-
[InlineData(true)]
397-
[InlineData(false)]
398-
public async Task GetExtensionsStartupTypes_DotnetIsolated_ExtensionBundleConfigured(bool isLogicApp)
447+
[InlineData(true, true)]
448+
[InlineData(true, false)]
449+
[InlineData(false, true)]
450+
[InlineData(false, false)]
451+
public async Task GetExtensionsStartupTypes_DotnetIsolated_ExtensionBundleConfigured(bool isLogicApp, bool workerRuntimeSet)
399452
{
400453
var vars = new Dictionary<string, string>();
401454

@@ -404,6 +457,11 @@ public async Task GetExtensionsStartupTypes_DotnetIsolated_ExtensionBundleConfig
404457
vars.Add(EnvironmentSettingNames.AppKind, ScriptConstants.WorkFlowAppKind);
405458
}
406459

460+
if (workerRuntimeSet)
461+
{
462+
vars.Add(EnvironmentSettingNames.FunctionWorkerRuntime, "dotnet-isolated");
463+
}
464+
407465
using (var directory = GetTempDirectory())
408466
using (var env = new TestScopedEnvironmentVariable(vars))
409467
{
@@ -424,11 +482,15 @@ public async Task GetExtensionsStartupTypes_DotnetIsolated_ExtensionBundleConfig
424482
var tempOptions = new LanguageWorkerOptions();
425483
tempOptions.WorkerConfigs = new List<RpcWorkerConfig>();
426484
tempOptions.WorkerConfigs.Add(workerConfig);
485+
486+
RpcWorkerConfig nodeWorkerConfig = new RpcWorkerConfig() { Description = TestHelpers.GetTestWorkerDescription("node", "none", false) };
487+
tempOptions.WorkerConfigs.Add(nodeWorkerConfig);
488+
427489
var optionsMonitor = new TestOptionsMonitor<LanguageWorkerOptions>(tempOptions);
428-
var mockFunctionMetadataManager = GetTestFunctionMetadataManager(optionsMonitor);
490+
491+
var mockFunctionMetadataManager = GetTestFunctionMetadataManager(optionsMonitor, hasDotnetIsolatedFunctions: true);
429492

430493
var languageWorkerOptions = new TestOptionsMonitor<LanguageWorkerOptions>(tempOptions);
431-
Environment.SetEnvironmentVariable(EnvironmentSettingNames.FunctionWorkerRuntime, "dotnet-isolated");
432494

433495
var discoverer = new ScriptStartupTypeLocator(directory.Path, testLogger, mockExtensionBundleManager.Object, mockFunctionMetadataManager, testMetricsLogger, languageWorkerOptions);
434496

@@ -437,15 +499,17 @@ public async Task GetExtensionsStartupTypes_DotnetIsolated_ExtensionBundleConfig
437499

438500
//Assert
439501
var traces = testLoggerProvider.GetAllLogMessages();
440-
var expectedTrace = traces.FirstOrDefault(val => val.EventId.Name.Equals("ScriptStartNotLoadingExtensionBundle"));
502+
var traceMessage = traces.FirstOrDefault(val => val.EventId.Name.Equals("ScriptStartNotLoadingExtensionBundle"));
503+
504+
bool loadingExtensionBundle = traceMessage == null;
441505

442506
if (isLogicApp)
443507
{
444-
Assert.Null(expectedTrace);
508+
Assert.True(loadingExtensionBundle);
445509
}
446510
else
447511
{
448-
Assert.NotNull(expectedTrace);
512+
Assert.False(loadingExtensionBundle);
449513
}
450514

451515
AreExpectedMetricsGenerated(testMetricsLogger);
@@ -678,7 +742,7 @@ void CopyToBin(string path)
678742
}
679743
}
680744

681-
private IFunctionMetadataManager GetTestFunctionMetadataManager(IOptionsMonitor<LanguageWorkerOptions> options, ICollection<FunctionMetadata> metadataColection = null, bool hasPrecompiledFunction = false)
745+
private IFunctionMetadataManager GetTestFunctionMetadataManager(IOptionsMonitor<LanguageWorkerOptions> options, ICollection<FunctionMetadata> metadataColection = null, bool hasPrecompiledFunction = false, bool hasNodeFunctions = false, bool hasDotnetIsolatedFunctions = false)
682746
{
683747
var functionMetdata = new FunctionMetadata();
684748
functionMetdata.Bindings.Add(new BindingMetadata() { Type = "blob" });
@@ -687,6 +751,15 @@ private IFunctionMetadataManager GetTestFunctionMetadataManager(IOptionsMonitor<
687751
{
688752
functionMetdata.Language = DotNetScriptTypes.DotNetAssembly;
689753
}
754+
if (hasNodeFunctions)
755+
{
756+
functionMetdata.Language = RpcWorkerConstants.NodeLanguageWorkerName;
757+
}
758+
759+
if (hasDotnetIsolatedFunctions)
760+
{
761+
functionMetdata.Language = RpcWorkerConstants.DotNetIsolatedLanguageWorkerName;
762+
}
690763

691764
var functionMetadataCollection = metadataColection ?? new List<FunctionMetadata>() { functionMetdata };
692765

0 commit comments

Comments
 (0)