예제 #1
0
        // Creates an IAzureBlobStorageProvider without reacting to Specialization and ActiveHost change. To test the specialization logic, please refer to
        // Microsoft.Azure.WebJobs.Script.Tests.SpecializationE2ETests.
        public static IAzureBlobStorageProvider GetAzureBlobStorageProvider(IConfiguration webHostConfiguration, IConfiguration jobHostConfiguration = null, JobHostInternalStorageOptions storageOptions = null, IScriptHostManager scriptHostManager = null)
        {
            IHost tempHost = new HostBuilder()
                             .ConfigureServices(services =>
            {
                AddTestAzureBlobStorageProvider(services, jobHostConfiguration ?? webHostConfiguration, scriptHostManager: scriptHostManager);
            })
                             .ConfigureAppConfiguration(c =>
            {
                c.AddConfiguration(webHostConfiguration);
            })
                             .Build();

            var azureBlobStorageProvider = tempHost.Services.GetRequiredService <IAzureBlobStorageProvider>();

            return(azureBlobStorageProvider);
        }
예제 #2
0
        public static IServiceCollection AddTestAzureBlobStorageProvider(IServiceCollection services, IConfiguration configuration, JobHostInternalStorageOptions storageOptions = null, IScriptHostManager scriptHostManager = null)
        {
            // Adds necessary Azure services to create clients
            services.AddAzureClientsCore();

            if (scriptHostManager == null)
            {
                scriptHostManager = new TestScriptHostService(configuration);
            }

            services.AddSingleton <IScriptHostManager>(scriptHostManager);
            if (storageOptions != null)
            {
                services.AddTransient <IOptions <JobHostInternalStorageOptions> >(s => new OptionsWrapper <JobHostInternalStorageOptions>(storageOptions));
            }

            services.AddSingleton <IAzureBlobStorageProvider, HostAzureBlobStorageProvider>();

            return(services);
        }
예제 #3
0
        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 httpClientFactory         = CreateHttpClientFactory(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);

            configurationMock.Setup(p => p.GetReloadToken()).Returns(new Mock <IChangeToken>().Object);

            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);

            var workerOptions = new LanguageWorkerOptions();

            FileUtility.Instance = fileSystem;
            _fileSystem          = fileSystem;
            var metadataProvider        = new HostFunctionMetadataProvider(optionsMonitor, NullLogger <HostFunctionMetadataProvider> .Instance, new TestMetricsLogger());
            var functionMetadataManager = TestFunctionMetadataManager.GetFunctionMetadataManager(new OptionsWrapper <ScriptJobHostOptions>(new ScriptJobHostOptions()), metadataProvider, null, new OptionsWrapper <HttpWorkerOptions>(new HttpWorkerOptions()), loggerFactory, new OptionsWrapper <LanguageWorkerOptions>(TestHelpers.GetTestLanguageWorkerOptions()));

            var emptyOptions             = new JobHostInternalStorageOptions();
            var azureBlobStorageProvider = TestHelpers.GetAzureBlobStorageProvider(configurationMock.Object, storageOptions: emptyOptions);
            var functionsSyncManager     = new FunctionsSyncManager(configurationMock.Object, hostIdProviderMock.Object, optionsMonitor, loggerFactory.CreateLogger <FunctionsSyncManager>(), httpClientFactory, secretManagerProviderMock.Object, mockWebHostEnvironment.Object, _mockEnvironment.Object, hostNameProvider, functionMetadataManager, azureBlobStorageProvider);

            _webFunctionsManager = new WebFunctionsManager(optionsMonitor, loggerFactory, httpClientFactory, secretManagerProviderMock.Object, functionsSyncManager, hostNameProvider, functionMetadataManager);
        }