コード例 #1
0
        public TestFunctionHost(string scriptPath, string logPath,
                                Action <IServiceCollection> configureWebHostServices               = null,
                                Action <IWebJobsBuilder> configureScriptHostWebJobsBuilder         = null,
                                Action <IConfigurationBuilder> configureScriptHostAppConfiguration = null,
                                Action <ILoggingBuilder> configureScriptHostLogging     = null,
                                Action <IServiceCollection> configureScriptHostServices = null)
        {
            _appRoot = scriptPath;

            _hostOptions = new ScriptApplicationHostOptions
            {
                IsSelfHost     = true,
                ScriptPath     = _appRoot,
                LogPath        = logPath,
                SecretsPath    = Environment.CurrentDirectory, // not used
                HasParentScope = true
            };

            var optionsMonitor  = TestHelpers.CreateOptionsMonitor(_hostOptions);
            var serviceProvider = new TestServiceProvider(_hostOptions, optionsMonitor);

            _hostOptions.RootServiceProvider = serviceProvider;

            var builder = new WebHostBuilder()
                          .ConfigureLogging(b =>
            {
                b.AddProvider(_webHostLoggerProvider);
            })
                          .ConfigureServices(services =>
            {
                services.Replace(new ServiceDescriptor(typeof(ISecretManagerProvider), new TestSecretManagerProvider(new TestSecretManager())));
                services.Replace(ServiceDescriptor.Singleton <IServiceProviderFactory <IServiceCollection> >(new WebHostServiceProviderFactory()));
                services.Replace(new ServiceDescriptor(typeof(IOptions <ScriptApplicationHostOptions>), new OptionsWrapper <ScriptApplicationHostOptions>(_hostOptions)));
                services.Replace(new ServiceDescriptor(typeof(IOptionsMonitor <ScriptApplicationHostOptions>), optionsMonitor));
                services.Replace(new ServiceDescriptor(typeof(IExtensionBundleManager), new TestExtensionBundleManager()));


                // Allows us to configure services as the last step, thereby overriding anything
                services.AddSingleton(new PostConfigureServices(configureWebHostServices));
            })
                          .ConfigureScriptHostWebJobsBuilder(scriptHostWebJobsBuilder =>
            {
                scriptHostWebJobsBuilder.AddAzureStorage();
                configureScriptHostWebJobsBuilder?.Invoke(scriptHostWebJobsBuilder);
            })
                          .ConfigureScriptHostAppConfiguration(scriptHostConfigurationBuilder =>
            {
                scriptHostConfigurationBuilder.AddTestSettings();
                configureScriptHostAppConfiguration?.Invoke(scriptHostConfigurationBuilder);
            })
                          .ConfigureScriptHostLogging(scriptHostLoggingBuilder =>
            {
                scriptHostLoggingBuilder.AddProvider(_scriptHostLoggerProvider);
                scriptHostLoggingBuilder.AddFilter <TestLoggerProvider>(_ => true);
                configureScriptHostLogging?.Invoke(scriptHostLoggingBuilder);
            })
                          .ConfigureScriptHostServices(scriptHostServices =>
            {
                configureScriptHostServices?.Invoke(scriptHostServices);
            })
                          .UseStartup <TestStartup>();

            _testServer = new TestServer(builder);

            HttpClient = new HttpClient(new UpdateContentLengthHandler(_testServer.CreateHandler()))
            {
                BaseAddress = new Uri("https://localhost/")
            };

            var manager = _testServer.Host.Services.GetService <IScriptHostManager>();

            _hostService = manager as WebJobsScriptHostService;
            StartAsync().GetAwaiter().GetResult();
        }
コード例 #2
0
        public async Task QueueTriggerToBlobTest()
        {
            TestHelpers.ClearFunctionLogs("QueueTriggerToBlob");

            string            id             = Guid.NewGuid().ToString();
            string            messageContent = string.Format("{{ \"id\": \"{0}\" }}", id);
            CloudQueueMessage message        = new CloudQueueMessage(messageContent);

            await Fixture.TestQueue.AddMessageAsync(message);

            var    resultBlob = Fixture.TestOutputContainer.GetBlockBlobReference(id);
            string result     = await TestHelpers.WaitForBlobAndGetStringAsync(resultBlob);

            Assert.Equal(TestHelpers.RemoveByteOrderMarkAndWhitespace(messageContent), TestHelpers.RemoveByteOrderMarkAndWhitespace(result));

            TraceEvent traceEvent = await WaitForTraceAsync(p => p.Message.Contains(id));

            Assert.Equal(TraceLevel.Info, traceEvent.Level);

            string trace = traceEvent.Message;

            Assert.True(trace.Contains("script processed queue message"));
            Assert.True(trace.Replace(" ", string.Empty).Contains(messageContent.Replace(" ", string.Empty)));
        }