public async Task HostInitialization_OnInitializationException_MaintainsErrorInformation()
        {
            var options = new ScriptApplicationHostOptions
            {
                ScriptPath = @"c:\tests",
                LogPath    = @"c:\tests\logs",
            };

            var monitor = new ScriptApplicationHostOptionsMonitor(options);

            var services = new ServiceCollection()
                           .AddLogging()
                           .BuildServiceProvider();

            var host = new Mock <IHost>();

            host.Setup(h => h.Services)
            .Returns(services);
            host.SetupSequence(h => h.StartAsync(It.IsAny <CancellationToken>()))
            .Throws(new HostInitializationException("boom"))
            .Returns(Task.CompletedTask);

            var hostBuilder = new Mock <IScriptHostBuilder>();

            hostBuilder.Setup(b => b.BuildHost(It.IsAny <bool>(), It.IsAny <bool>()))
            .Returns(host.Object);

            var mockRootServiceProvider      = new Mock <IServiceProvider>();
            var mockRootScopeFactory         = new Mock <IServiceScopeFactory>();
            var mockScriptWebHostEnvironment = new Mock <IScriptWebHostEnvironment>();
            var mockEnvironment        = new Mock <IEnvironment>();
            var healthMonitorOptions   = new OptionsWrapper <HostHealthMonitorOptions>(new HostHealthMonitorOptions());
            var hostPerformanceManager = new HostPerformanceManager(mockEnvironment.Object, healthMonitorOptions);

            var hostService = new WebJobsScriptHostService(
                monitor, hostBuilder.Object, NullLoggerFactory.Instance, mockRootServiceProvider.Object, mockRootScopeFactory.Object,
                mockScriptWebHostEnvironment.Object, mockEnvironment.Object, hostPerformanceManager, healthMonitorOptions);

            await hostService.StartAsync(CancellationToken.None);

            Assert.Equal(ScriptHostState.Error, hostService.State);
            Assert.IsType <HostInitializationException>(hostService.LastError);
        }
        public WebJobsScriptHostServiceTests()
        {
            var options = new ScriptApplicationHostOptions
            {
                ScriptPath = @"c:\tests",
                LogPath    = @"c:\tests\logs",
            };

            _monitor       = new ScriptApplicationHostOptionsMonitor(options);
            _loggerFactory = new LoggerFactory();
            _loggerFactory.AddProvider(_webHostLoggerProvider);

            _host = CreateMockHost();

            _mockRootServiceProvider      = new Mock <IServiceProvider>();
            _mockRootScopeFactory         = new Mock <IServiceScopeFactory>();
            _mockScriptWebHostEnvironment = new Mock <IScriptWebHostEnvironment>();
            _mockEnvironment        = new Mock <IEnvironment>();
            _healthMonitorOptions   = new OptionsWrapper <HostHealthMonitorOptions>(new HostHealthMonitorOptions());
            _hostPerformanceManager = new HostPerformanceManager(_mockEnvironment.Object, _healthMonitorOptions);
        }
        public WebJobsScriptHostServiceTests()
        {
            var options = new ScriptApplicationHostOptions
            {
                ScriptPath = @"c:\tests",
                LogPath    = @"c:\tests\logs",
            };

            _monitor       = new ScriptApplicationHostOptionsMonitor(options);
            _loggerFactory = new LoggerFactory();
            _loggerFactory.AddProvider(_webHostLoggerProvider);

            _host = CreateMockHost();

            _mockScriptWebHostEnvironment = new Mock <IScriptWebHostEnvironment>();
            _mockEnvironment      = new Mock <IEnvironment>();
            _healthMonitorOptions = new OptionsWrapper <HostHealthMonitorOptions>(new HostHealthMonitorOptions());
            var serviceProviderMock = new Mock <IServiceProvider>(MockBehavior.Strict);

            _hostPerformanceManager = new HostPerformanceManager(_mockEnvironment.Object, _healthMonitorOptions, serviceProviderMock.Object);
            _mockConfig             = new Mock <IConfiguration>().Object;
        }