public SecretManagerProviderTests() { var mockIdProvider = new Mock <IHostIdProvider>(); _options = new ScriptApplicationHostOptions { SecretsPath = Path.Combine("c:", "path1") }; var factory = new TestOptionsFactory <ScriptApplicationHostOptions>(_options); _tokenSource = new TestChangeTokenSource <ScriptApplicationHostOptions>(); var changeTokens = new[] { _tokenSource }; var optionsMonitor = new OptionsMonitor <ScriptApplicationHostOptions>(factory, changeTokens, factory); var config = TestHelpers.GetTestConfiguration(); mockIdProvider.Setup(p => p.GetHostIdAsync(It.IsAny <CancellationToken>())) .ReturnsAsync("testhostid"); IEnvironment environment = new TestEnvironment(); environment.SetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteHostName, "test.azurewebsites.net"); var loggerProvider = new TestLoggerProvider(); var loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(loggerProvider); var hostNameProvider = new HostNameProvider(environment); var azureBlobStorageProvider = TestHelpers.GetAzureBlobStorageProvider(config); _provider = new DefaultSecretManagerProvider(optionsMonitor, mockIdProvider.Object, new TestEnvironment(), NullLoggerFactory.Instance, new TestMetricsLogger(), hostNameProvider, new StartupContextProvider(environment, loggerFactory.CreateLogger <StartupContextProvider>()), azureBlobStorageProvider); }
private void MinimumLevelNullSetsToMinimum() { var config = TestOptionsFactory.CreateMemoryConfig("myApp", "http://localhost", "index", null); var options = LogstashOptionsReader.Read(config); Assert.Equal(0, (int)options.MinimumLevel); // the levels are changed in RC2, so this test will probably need to be updated }
private void IndexWhitespaceRaisesInvalidOptionException() { var config = TestOptionsFactory.CreateMemoryConfig("myApp", "http://localhost", " ", LogLevel.Error); var ex = Assert.Throws <InvalidOptionException>(() => LogstashOptionsReader.Read(config)); Assert.Equal(Defaults.ConfigKeys.Index, ex.OptionKey); Assert.Equal(" ", ex.OptionValue); }
private void InvalidUriRaisesInvalidOptionException() { var config = TestOptionsFactory.CreateMemoryConfig("myApp", "abcdefg", "index", LogLevel.Error); var ex = Assert.Throws <InvalidOptionException>(() => LogstashOptionsReader.Read(config)); Assert.Equal(Defaults.ConfigKeys.Url, ex.OptionKey); Assert.Equal("abcdefg", ex.OptionValue); }
public WebFunctionsManagerTests() { _testRootScriptPath = Path.GetTempPath(); _testHostConfigFilePath = Path.Combine(_testRootScriptPath, ScriptConstants.HostMetadataFileName); FileUtility.DeleteFileSafe(_testHostConfigFilePath); _hostOptions = new ScriptApplicationHostOptions { ScriptPath = @"x:\root", IsSelfHost = false, LogPath = @"x:\tmp\log", SecretsPath = @"x:\secrets", TestDataPath = @"x:\test" }; string functionsPath = Path.Combine(Environment.CurrentDirectory, @"..\..\..\..\..\sample"); var fileSystem = CreateFileSystem(_hostOptions); var loggerFactory = MockNullLoggerFactory.CreateLoggerFactory(); var contentBuilder = new StringBuilder(); var httpClient = CreateHttpClient(contentBuilder); var factory = new TestOptionsFactory <ScriptApplicationHostOptions>(_hostOptions); var tokenSource = new TestChangeTokenSource <ScriptApplicationHostOptions>(); var changeTokens = new[] { tokenSource }; var optionsMonitor = new OptionsMonitor <ScriptApplicationHostOptions>(factory, changeTokens, factory); var secretManagerProviderMock = new Mock <ISecretManagerProvider>(MockBehavior.Strict); var secretManagerMock = new Mock <ISecretManager>(MockBehavior.Strict); secretManagerProviderMock.SetupGet(p => p.Current).Returns(secretManagerMock.Object); var hostSecretsInfo = new HostSecretsInfo(); secretManagerMock.Setup(p => p.GetHostSecretsAsync()).ReturnsAsync(hostSecretsInfo); Dictionary <string, string> functionSecrets = new Dictionary <string, string>(); secretManagerMock.Setup(p => p.GetFunctionSecretsAsync("httptrigger", false)).ReturnsAsync(functionSecrets); var configurationMock = new Mock <IConfiguration>(MockBehavior.Strict); var hostIdProviderMock = new Mock <IHostIdProvider>(MockBehavior.Strict); var mockWebHostEnvironment = new Mock <IScriptWebHostEnvironment>(MockBehavior.Strict); mockWebHostEnvironment.SetupGet(p => p.InStandbyMode).Returns(false); _mockEnvironment = new Mock <IEnvironment>(MockBehavior.Strict); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteContainerReady)).Returns("1"); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.CoreToolsEnvironment)).Returns((string)null); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteHostName)).Returns(TestHostName); var hostNameProvider = new HostNameProvider(_mockEnvironment.Object, loggerFactory.CreateLogger <HostNameProvider>()); var workerOptions = new LanguageWorkerOptions(); FileUtility.Instance = fileSystem; _fileSystem = fileSystem; var languageWorkerOptions = new OptionsWrapper <LanguageWorkerOptions>(CreateLanguageWorkerConfigSettings()); var metadataProvider = new FunctionMetadataProvider(optionsMonitor, languageWorkerOptions, NullLogger <FunctionMetadataProvider> .Instance, new TestMetricsLogger()); var functionsSyncManager = new FunctionsSyncManager(configurationMock.Object, hostIdProviderMock.Object, optionsMonitor, loggerFactory.CreateLogger <FunctionsSyncManager>(), httpClient, secretManagerProviderMock.Object, mockWebHostEnvironment.Object, _mockEnvironment.Object, hostNameProvider, metadataProvider); _webFunctionsManager = new WebFunctionsManager(optionsMonitor, new OptionsWrapper <LanguageWorkerOptions>(CreateLanguageWorkerConfigSettings()), loggerFactory, httpClient, secretManagerProviderMock.Object, functionsSyncManager, hostNameProvider, metadataProvider); }
public TestComponentContainer() { Application = new Application(); Application.Session.Logon(); _testComWrapperFactoryWrapper = new TestComWrapperFactoryWrapper(new TestComWrapperFactory(null)); ComponentContainer = new ComponentContainer(Application, new InMemoryGeneralOptionsDataAccess(), _testComWrapperFactoryWrapper, new TestExceptionHandlingStrategy()); SynchronizerFactory = ComponentContainer.GetSynchronizerFactory(); TestOptionsFactory = new TestOptionsFactory(new OutlookSession(Application.Session), ComponentContainer.GetOptionsDataAccess()); }
private void IndexWhitespaceRaisesInvalidOptionException() { var setupAction = TestOptionsFactory.CreateSetupAction("myApp", "http://localhost", " ", LogLevel.Information); var ex = Assert.Throws <InvalidOptionException>(() => LogstashOptionsReader.Read(setupAction)); Assert.Equal(Defaults.ConfigKeys.Index, ex.OptionKey); Assert.Equal(" ", ex.OptionValue); }
private void AppIdNullRaisesInvalidOptionException() { var config = TestOptionsFactory.CreateMemoryConfig(null, "http://localhost", "index", LogLevel.Error); var ex = Assert.Throws <InvalidOptionException>(() => LogstashOptionsReader.Read(config)); Assert.Equal(Defaults.ConfigKeys.AppId, ex.OptionKey); Assert.Equal("(null)", ex.OptionValue); }
private void InvalidUriRaisesInvalidOptionException() { var setupAction = TestOptionsFactory.CreateSetupAction("myApp", "abcde", "index", LogLevel.Information); var ex = Assert.Throws <InvalidOptionException>(() => LogstashOptionsReader.Read(setupAction)); Assert.Equal(Defaults.ConfigKeys.Url, ex.OptionKey); Assert.Equal("abcde", ex.OptionValue); }
private void AppIdNullRaisesInvalidOptionException() { var setupAction = TestOptionsFactory.CreateSetupAction(null, "http://localhost", "index", LogLevel.Information); var ex = Assert.Throws <InvalidOptionException>(() => LogstashOptionsReader.Read(setupAction)); Assert.Equal(Defaults.ConfigKeys.AppId, ex.OptionKey); Assert.Equal("(null)", ex.OptionValue); }
public FunctionsSyncManagerTests() { _testRootScriptPath = Path.GetTempPath(); _testHostConfigFilePath = Path.Combine(_testRootScriptPath, ScriptConstants.HostMetadataFileName); FileUtility.DeleteFileSafe(_testHostConfigFilePath); _hostOptions = new ScriptApplicationHostOptions { ScriptPath = @"x:\root", IsSelfHost = false, LogPath = @"x:\tmp\log", SecretsPath = @"x:\secrets", TestDataPath = @"x:\test" }; _vars = new Dictionary <string, string> { { EnvironmentSettingNames.WebSiteAuthEncryptionKey, TestHelpers.GenerateKeyHexString() }, { EnvironmentSettingNames.AzureWebsiteHostName, "appName.azurewebsites.net" } }; ResetMockFileSystem(); _loggerProvider = new TestLoggerProvider(); var loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(_loggerProvider); _contentBuilder = new StringBuilder(); _mockHttpHandler = new MockHttpHandler(_contentBuilder); var httpClient = CreateHttpClient(_mockHttpHandler); var factory = new TestOptionsFactory <ScriptApplicationHostOptions>(_hostOptions); var tokenSource = new TestChangeTokenSource(); var changeTokens = new[] { tokenSource }; var optionsMonitor = new OptionsMonitor <ScriptApplicationHostOptions>(factory, changeTokens, factory); var secretManagerProviderMock = new Mock <ISecretManagerProvider>(MockBehavior.Strict); var secretManagerMock = new Mock <ISecretManager>(MockBehavior.Strict); secretManagerProviderMock.SetupGet(p => p.Current).Returns(secretManagerMock.Object); var configuration = ScriptSettingsManager.BuildDefaultConfiguration(); var hostIdProviderMock = new Mock <IHostIdProvider>(MockBehavior.Strict); hostIdProviderMock.Setup(p => p.GetHostIdAsync(CancellationToken.None)).ReturnsAsync("testhostid123"); _mockWebHostEnvironment = new Mock <IScriptWebHostEnvironment>(MockBehavior.Strict); _mockWebHostEnvironment.SetupGet(p => p.InStandbyMode).Returns(false); _mockEnvironment = new Mock <IEnvironment>(MockBehavior.Strict); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteContainerReady)).Returns("1"); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.CoreToolsEnvironment)).Returns((string)null); _functionsSyncManager = new FunctionsSyncManager(configuration, hostIdProviderMock.Object, optionsMonitor, new OptionsWrapper <LanguageWorkerOptions>(CreateLanguageWorkerConfigSettings()), loggerFactory, httpClient, secretManagerProviderMock.Object, _mockWebHostEnvironment.Object, _mockEnvironment.Object); _expectedSyncTriggersPayload = "[{\"authLevel\":\"anonymous\",\"type\":\"httpTrigger\",\"direction\":\"in\",\"name\":\"req\",\"functionName\":\"function1\"}," + "{\"name\":\"myQueueItem\",\"type\":\"orchestrationTrigger\",\"direction\":\"in\",\"queueName\":\"myqueue-items\",\"connection\":\"DurableStorage\",\"functionName\":\"function2\",\"taskHubName\":\"TestHubValue\"}," + "{\"name\":\"myQueueItem\",\"type\":\"activityTrigger\",\"direction\":\"in\",\"queueName\":\"myqueue-items\",\"connection\":\"DurableStorage\",\"functionName\":\"function3\",\"taskHubName\":\"TestHubValue\"}]"; }
public DebugStateProviderTests() { _options = new ScriptApplicationHostOptions { LogPath = Path.Combine(Directory.GetCurrentDirectory(), "DebugPath1") }; var factory = new TestOptionsFactory <ScriptApplicationHostOptions>(_options); _tokenSource = new TestChangeTokenSource <ScriptApplicationHostOptions>(); var changeTokens = new[] { _tokenSource }; var optionsMonitor = new OptionsMonitor <ScriptApplicationHostOptions>(factory, changeTokens, factory); _provider = new DebugStateProvider(optionsMonitor, new ScriptEventManager()); }
private static IServiceCollection AddFunctionMetadataManager(this IServiceCollection services, ScriptApplicationHostOptions options, IMetricsLogger metricsLogger) { var factory = new TestOptionsFactory <ScriptApplicationHostOptions>(options); var source = new TestChangeTokenSource <ScriptApplicationHostOptions>(); var changeTokens = new[] { source }; var optionsMonitor = new OptionsMonitor <ScriptApplicationHostOptions>(factory, changeTokens, factory); var metadataProvider = new FunctionMetadataProvider(optionsMonitor, NullLogger <FunctionMetadataProvider> .Instance, metricsLogger); var metadataManager = TestFunctionMetadataManager.GetFunctionMetadataManager(new OptionsWrapper <ScriptJobHostOptions>(new ScriptJobHostOptions()), metadataProvider, new List <IFunctionProvider>(), new OptionsWrapper <HttpWorkerOptions>(new HttpWorkerOptions()), new NullLoggerFactory(), new OptionsWrapper <LanguageWorkerOptions>(TestHelpers.GetTestLanguageWorkerOptions())); services.AddSingleton <IFunctionMetadataManager>(metadataManager); services.AddSingleton <IFunctionMetadataProvider>(metadataProvider); return(services); }
private static IServiceCollection AddFunctionMetadataProvider(this IServiceCollection services, ScriptApplicationHostOptions options) { var factory = new TestOptionsFactory <ScriptApplicationHostOptions>(options); var source = new TestChangeTokenSource(); var changeTokens = new[] { source }; var optionsMonitor = new OptionsMonitor <ScriptApplicationHostOptions>(factory, changeTokens, factory); var workerOptions = new LanguageWorkerOptions { WorkerConfigs = TestHelpers.GetTestWorkerConfigs() }; var metadataProvider = new FunctionMetadataProvider(optionsMonitor, new OptionsWrapper <LanguageWorkerOptions>(workerOptions), NullLogger <FunctionMetadataProvider> .Instance); return(services.AddSingleton <IFunctionMetadataProvider>(metadataProvider)); }
public InstanceManagerTests() { _httpClient = new HttpClient(); _loggerProvider = new TestLoggerProvider(); var loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(_loggerProvider); _environment = new TestEnvironment(); _scriptWebEnvironment = new ScriptWebHostEnvironment(_environment); var optionsFactory = new TestOptionsFactory <ScriptApplicationHostOptions>(new ScriptApplicationHostOptions()); _instanceManager = new InstanceManager(optionsFactory, _httpClient, _scriptWebEnvironment, _environment, loggerFactory.CreateLogger <InstanceManager>()); }
public void Configuration(IAppBuilder app) { app.Map("/core", coreApp => { var factory = TestOptionsFactory.Create( issuerUri: "https://idsrv3.com", siteName: "Thinktecture IdentityServer v3 - preview 1", publicHostAddress: "http://localhost:3333"); var opts = new IdentityServerCoreOptions { Factory = factory, }; coreApp.UseIdentityServerCore(opts); }); }
public void Configuration(IAppBuilder app) { app.Map("/core", coreApp => { var factory = TestOptionsFactory.Create( issuerUri: "https://idsrv3.com", siteName: "Thinktecture IdentityServer v3 - preview 1 (WAWS)", publicHostAddress: "http://idsrv3.azurewebsites.net"); var options = new IdentityServerCoreOptions { Factory = factory, SocialIdentityProviderConfiguration = ConfigureSocialIdentityProviders }; coreApp.UseIdentityServerCore(options); }); }
public virtual async Task InitializeAsync() { _config = new HttpConfiguration(); _settingsManager = ScriptSettingsManager.Instance; HostOptions = new ScriptApplicationHostOptions { IsSelfHost = true, ScriptPath = Path.Combine(Environment.CurrentDirectory, @"..\..\..\..\..\sample"), LogPath = Path.Combine(Path.GetTempPath(), @"Functions"), SecretsPath = Path.Combine(Path.GetTempPath(), @"FunctionsTests\Secrets"), HasParentScope = true }; var factory = new TestOptionsFactory <ScriptApplicationHostOptions>(HostOptions); var optionsMonitor = new OptionsMonitor <ScriptApplicationHostOptions>(factory, Array.Empty <IOptionsChangeTokenSource <ScriptApplicationHostOptions> >(), factory); var webHostBuilder = new WebHostBuilder() .ConfigureServices(services => { services.Replace(ServiceDescriptor.Singleton <IServiceProviderFactory <IServiceCollection> >(new WebHostServiceProviderFactory())); services.AddSingleton <IOptions <ScriptApplicationHostOptions> >(new OptionsWrapper <ScriptApplicationHostOptions>(HostOptions)); services.Replace(new ServiceDescriptor(typeof(IOptionsMonitor <ScriptApplicationHostOptions>), optionsMonitor)); }) .ConfigureAppConfiguration((builderContext, config) => { config.Add(new WebScriptHostConfigurationSource { IsAppServiceEnvironment = SystemEnvironment.Instance.IsAppServiceEnvironment(), IsLinuxContainerEnvironment = SystemEnvironment.Instance.IsLinuxContainerEnvironment() }); }) .UseStartup <Startup>() .ConfigureAppConfiguration(c => c.AddEnvironmentVariables()); ConfigureWebHostBuilder(webHostBuilder); HttpServer = new TestServer(webHostBuilder); HttpClient = HttpServer.CreateClient(); HttpClient.BaseAddress = new Uri("https://localhost/"); var manager = HttpServer.Host.Services.GetService <IScriptHostManager>(); await manager.DelayUntilHostReady(); }
public void ReadFunctionsMetadataSucceeds() { string functionsPath = Path.Combine(Environment.CurrentDirectory, @"..\..\..\..\..\sample"); // Setup var fileSystem = CreateFileSystem(_hostOptions.ScriptPath); var loggerFactory = MockNullLoggerFactory.CreateLoggerFactory(); var contentBuilder = new StringBuilder(); var httpClient = CreateHttpClient(contentBuilder); var factory = new TestOptionsFactory <ScriptApplicationHostOptions>(_hostOptions); var tokenSource = new TestChangeTokenSource(); var changeTokens = new[] { tokenSource }; var optionsMonitor = new OptionsMonitor <ScriptApplicationHostOptions>(factory, changeTokens, factory); var secretManagerProviderMock = new Mock <ISecretManagerProvider>(MockBehavior.Strict); var secretManagerMock = new Mock <ISecretManager>(MockBehavior.Strict); secretManagerProviderMock.SetupGet(p => p.Current).Returns(secretManagerMock.Object); var hostSecretsInfo = new HostSecretsInfo(); secretManagerMock.Setup(p => p.GetHostSecretsAsync()).ReturnsAsync(hostSecretsInfo); Dictionary <string, string> functionSecrets = new Dictionary <string, string>(); secretManagerMock.Setup(p => p.GetFunctionSecretsAsync("httptrigger", false)).ReturnsAsync(functionSecrets); var configurationMock = new Mock <IConfiguration>(MockBehavior.Strict); var hostIdProviderMock = new Mock <IHostIdProvider>(MockBehavior.Strict); var mockWebHostEnvironment = new Mock <IScriptWebHostEnvironment>(MockBehavior.Strict); mockWebHostEnvironment.SetupGet(p => p.InStandbyMode).Returns(false); var mockEnvironment = new Mock <IEnvironment>(MockBehavior.Strict); mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteContainerReady)).Returns("1"); mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.CoreToolsEnvironment)).Returns((string)null); var functionsSyncManager = new FunctionsSyncManager(configurationMock.Object, hostIdProviderMock.Object, optionsMonitor, new OptionsWrapper <LanguageWorkerOptions>(CreateLanguageWorkerConfigSettings()), loggerFactory, httpClient, secretManagerProviderMock.Object, mockWebHostEnvironment.Object, mockEnvironment.Object); var webManager = new WebFunctionsManager(optionsMonitor, new OptionsWrapper <LanguageWorkerOptions>(CreateLanguageWorkerConfigSettings()), loggerFactory, httpClient, secretManagerProviderMock.Object, functionsSyncManager); FileUtility.Instance = fileSystem; IEnumerable <FunctionMetadata> metadata = webManager.GetFunctionsMetadata(); var jsFunctions = metadata.Where(funcMetadata => funcMetadata.Language == LanguageWorkerConstants.NodeLanguageWorkerName).ToList(); var unknownFunctions = metadata.Where(funcMetadata => string.IsNullOrEmpty(funcMetadata.Language)).ToList(); Assert.Equal(2, jsFunctions.Count()); Assert.Equal(1, unknownFunctions.Count()); }
public SecretManagerProviderTests() { var mockIdProvider = new Mock <IHostIdProvider>(); _options = new ScriptApplicationHostOptions { SecretsPath = "c:\\path1" }; var factory = new TestOptionsFactory <ScriptApplicationHostOptions>(_options); _tokenSource = new TestChangeTokenSource(); var changeTokens = new[] { _tokenSource }; var optionsMonitor = new OptionsMonitor <ScriptApplicationHostOptions>(factory, changeTokens, factory); var config = new ConfigurationBuilder() .AddEnvironmentVariables() .Build(); _provider = new DefaultSecretManagerProvider(optionsMonitor, mockIdProvider.Object, config, new TestEnvironment(), NullLoggerFactory.Instance); }
public void Configuration(IAppBuilder app) { app.Map("/core", coreApp => { var factory = TestOptionsFactory.Create( issuerUri: "https://idsrv3.com", siteName: "Thinktecture IdentityServer v3 - preview 1", publicHostAddress: "http://localhost:3333/core"); //factory.UserService = Thinktecture.IdentityServer.MembershipReboot.UserServiceFactory.Factory; //factory.UserService = Thinktecture.IdentityServer.AspNetIdentity.UserServiceFactory.Factory; var options = new IdentityServerCoreOptions { Factory = factory, SocialIdentityProviderConfiguration = ConfigureSocialIdentityProviders }; coreApp.UseIdentityServerCore(options); }); }
public SecretManagerProviderTests() { var mockIdProvider = new Mock <IHostIdProvider>(); _options = new ScriptApplicationHostOptions { SecretsPath = "c:\\path1" }; var factory = new TestOptionsFactory <ScriptApplicationHostOptions>(_options); _tokenSource = new TestChangeTokenSource(); var changeTokens = new[] { _tokenSource }; var optionsMonitor = new OptionsMonitor <ScriptApplicationHostOptions>(factory, changeTokens, factory); var config = TestHelpers.GetTestConfiguration(); mockIdProvider.Setup(p => p.GetHostIdAsync(It.IsAny <CancellationToken>())) .ReturnsAsync("testhostid"); _provider = new DefaultSecretManagerProvider(optionsMonitor, mockIdProvider.Object, config, new TestEnvironment(), NullLoggerFactory.Instance); }
public async Task VerifyDurableTaskHubNameIsAdded() { var vars = new Dictionary <string, string> { { EnvironmentSettingNames.WebSiteAuthEncryptionKey, TestHelpers.GenerateKeyHexString() }, { EnvironmentSettingNames.AzureWebsiteHostName, "appName.azurewebsites.net" } }; using (var env = new TestScopedEnvironmentVariable(vars)) { // Setup const string expectedSyncTriggersPayload = "[{\"authLevel\":\"anonymous\",\"type\":\"httpTrigger\",\"direction\":\"in\",\"name\":\"req\",\"functionName\":\"function1\"}," + "{\"name\":\"myQueueItem\",\"type\":\"orchestrationTrigger\",\"direction\":\"in\",\"queueName\":\"myqueue-items\",\"connection\":\"DurableStorage\",\"functionName\":\"function2\",\"taskHubName\":\"TestHubValue\"}," + "{\"name\":\"myQueueItem\",\"type\":\"activityTrigger\",\"direction\":\"in\",\"queueName\":\"myqueue-items\",\"connection\":\"DurableStorage\",\"functionName\":\"function3\",\"taskHubName\":\"TestHubValue\"}]"; var options = CreateApplicationHostOptions(); var fileSystem = CreateFileSystem(options.ScriptPath); var loggerFactory = MockNullLogerFactory.CreateLoggerFactory(); var contentBuilder = new StringBuilder(); var httpClient = CreateHttpClient(contentBuilder); var factory = new TestOptionsFactory <ScriptApplicationHostOptions>(options); var tokenSource = new TestChangeTokenSource(); var changeTokens = new[] { tokenSource }; var optionsMonitor = new OptionsMonitor <ScriptApplicationHostOptions>(factory, changeTokens, factory); var webManager = new WebFunctionsManager(optionsMonitor, new OptionsWrapper <LanguageWorkerOptions>(CreateLanguageWorkerConfigSettings()), loggerFactory, httpClient); FileUtility.Instance = fileSystem; // Act (var success, var error) = await webManager.TrySyncTriggers(); var content = contentBuilder.ToString(); // Assert Assert.True(success, "SyncTriggers should return success true"); Assert.True(string.IsNullOrEmpty(error), "Error should be null or empty"); Assert.Equal(expectedSyncTriggersPayload, content); } }
public static void ReadFunctionsMetadataSucceeds() { string functionsPath = Path.Combine(Environment.CurrentDirectory, @"..\..\..\..\..\sample"); // Setup var options = CreateApplicationHostOptions(); var fileSystem = CreateFileSystem(options.ScriptPath); var loggerFactory = MockNullLogerFactory.CreateLoggerFactory(); var contentBuilder = new StringBuilder(); var httpClient = CreateHttpClient(contentBuilder); var factory = new TestOptionsFactory <ScriptApplicationHostOptions>(options); var tokenSource = new TestChangeTokenSource(); var changeTokens = new[] { tokenSource }; var optionsMonitor = new OptionsMonitor <ScriptApplicationHostOptions>(factory, changeTokens, factory); var webManager = new WebFunctionsManager(optionsMonitor, new OptionsWrapper <LanguageWorkerOptions>(CreateLanguageWorkerConfigSettings()), loggerFactory, httpClient); FileUtility.Instance = fileSystem; IEnumerable <FunctionMetadata> metadata = webManager.GetFunctionsMetadata(); var jsFunctions = metadata.Where(funcMetadata => funcMetadata.Language == LanguageWorkerConstants.NodeLanguageWorkerName).ToList(); var unknownFunctions = metadata.Where(funcMetadata => string.IsNullOrEmpty(funcMetadata.Language)).ToList(); Assert.Equal(2, jsFunctions.Count()); Assert.Equal(1, unknownFunctions.Count()); }
public async Task InitializeAsync() { InitializeFiles(); LoggerProvider = new TestLoggerProvider(); var optionsFactory = new TestOptionsFactory <ScriptApplicationHostOptions>(ApplicationOptions); var optionsMonitor = new OptionsMonitor <ScriptApplicationHostOptions>(optionsFactory, Array.Empty <IOptionsChangeTokenSource <ScriptApplicationHostOptions> >(), optionsFactory); TestServer = new TestServer(AspNetCore.WebHost.CreateDefaultBuilder() .ConfigureLogging(b => { b.AddProvider(LoggerProvider); }) .UseStartup <Startup>() .ConfigureServices(services => { services.Replace(new ServiceDescriptor(typeof(IOptions <ScriptApplicationHostOptions>), new OptionsWrapper <ScriptApplicationHostOptions>(ApplicationOptions))); services.Replace(new ServiceDescriptor(typeof(ISecretManager), new TestSecretManager())); services.Replace(new ServiceDescriptor(typeof(IOptionsMonitor <ScriptApplicationHostOptions>), optionsMonitor)); services.AddSingleton <IConfigureBuilder <ILoggingBuilder> >(new DelegatedConfigureBuilder <ILoggingBuilder>(b => b.AddProvider(LoggerProvider))); services.AddSingleton <IConfigureBuilder <IWebJobsBuilder> >(new DelegatedConfigureBuilder <IWebJobsBuilder>(b => { b.AddAzureStorage(); b.Services.Configure <ScriptJobHostOptions>(o => o.Functions = new[] { "TimerTrigger", "Invalid" }); })); })); var scriptConfig = TestServer.Host.Services.GetService <IOptions <ScriptJobHostOptions> >().Value; HttpClient = TestServer.CreateClient(); HttpClient.BaseAddress = new Uri("https://localhost/"); Host = TestServer.Host; await ScriptHostManager.DelayUntilHostReady(); }
public FunctionsSyncManagerTests() { _testRootScriptPath = Path.GetTempPath(); _testHostConfigFilePath = Path.Combine(_testRootScriptPath, ScriptConstants.HostMetadataFileName); FileUtility.DeleteFileSafe(_testHostConfigFilePath); _hostOptions = new ScriptApplicationHostOptions { ScriptPath = @"x:\root", IsSelfHost = false, LogPath = @"x:\tmp\log", SecretsPath = @"x:\secrets", TestDataPath = @"x:\sampledata" }; var jobHostOptions = new ScriptJobHostOptions { RootScriptPath = _hostOptions.ScriptPath, RootLogPath = _hostOptions.LogPath }; string testHostName = "appName.azurewebsites.net"; _vars = new Dictionary <string, string> { { EnvironmentSettingNames.WebSiteAuthEncryptionKey, TestHelpers.GenerateKeyHexString() }, { EnvironmentSettingNames.AzureWebsiteHostName, testHostName } }; ResetMockFileSystem(); _loggerProvider = new TestLoggerProvider(); var loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(_loggerProvider); _contentBuilder = new StringBuilder(); _mockHttpHandler = new MockHttpHandler(_contentBuilder); var httpClient = CreateHttpClient(_mockHttpHandler); var factory = new TestOptionsFactory <ScriptApplicationHostOptions>(_hostOptions); var tokenSource = new TestChangeTokenSource <ScriptApplicationHostOptions>(); var changeTokens = new[] { tokenSource }; var optionsMonitor = new OptionsMonitor <ScriptApplicationHostOptions>(factory, changeTokens, factory); var secretManagerProviderMock = new Mock <ISecretManagerProvider>(MockBehavior.Strict); var secretManagerMock = new Mock <ISecretManager>(MockBehavior.Strict); secretManagerProviderMock.SetupGet(p => p.Current).Returns(secretManagerMock.Object); var hostSecretsInfo = new HostSecretsInfo(); hostSecretsInfo.MasterKey = "aaa"; hostSecretsInfo.FunctionKeys = new Dictionary <string, string> { { "TestHostFunctionKey1", "aaa" }, { "TestHostFunctionKey2", "bbb" } }; hostSecretsInfo.SystemKeys = new Dictionary <string, string> { { "TestSystemKey1", "aaa" }, { "TestSystemKey2", "bbb" } }; secretManagerMock.Setup(p => p.GetHostSecretsAsync()).ReturnsAsync(hostSecretsInfo); Dictionary <string, string> functionSecretsResponse = new Dictionary <string, string>() { { "TestFunctionKey1", "aaa" }, { "TestFunctionKey2", "bbb" } }; secretManagerMock.Setup(p => p.GetFunctionSecretsAsync("function1", false)).ReturnsAsync(functionSecretsResponse); var configuration = ScriptSettingsManager.BuildDefaultConfiguration(); var hostIdProviderMock = new Mock <IHostIdProvider>(MockBehavior.Strict); hostIdProviderMock.Setup(p => p.GetHostIdAsync(CancellationToken.None)).ReturnsAsync("testhostid123"); _mockWebHostEnvironment = new Mock <IScriptWebHostEnvironment>(MockBehavior.Strict); _mockWebHostEnvironment.SetupGet(p => p.InStandbyMode).Returns(false); _mockEnvironment = new Mock <IEnvironment>(MockBehavior.Strict); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteArmCacheEnabled)).Returns("1"); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteContainerReady)).Returns("1"); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.CoreToolsEnvironment)).Returns((string)null); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.WebSiteAuthEncryptionKey)).Returns("1"); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteInstanceId)).Returns("1"); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteHostName)).Returns(testHostName); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.SkipSslValidation)).Returns((string)null); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebJobsSecretStorageType)).Returns("blob"); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.KubernetesServiceHost)).Returns(""); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.PodNamespace)).Returns(""); _hostNameProvider = new HostNameProvider(_mockEnvironment.Object); var functionMetadataProvider = new FunctionMetadataProvider(optionsMonitor, NullLogger <FunctionMetadataProvider> .Instance, new TestMetricsLogger()); var functionMetadataManager = TestFunctionMetadataManager.GetFunctionMetadataManager(new OptionsWrapper <ScriptJobHostOptions>(jobHostOptions), functionMetadataProvider, null, new OptionsWrapper <HttpWorkerOptions>(new HttpWorkerOptions()), loggerFactory, new OptionsWrapper <LanguageWorkerOptions>(CreateLanguageWorkerConfigSettings())); _functionsSyncManager = new FunctionsSyncManager(configuration, hostIdProviderMock.Object, optionsMonitor, loggerFactory.CreateLogger <FunctionsSyncManager>(), httpClient, secretManagerProviderMock.Object, _mockWebHostEnvironment.Object, _mockEnvironment.Object, _hostNameProvider, functionMetadataManager); }