public void GetCounters_ReturnsExpectedResult() { var mockEnvironment = new Mock <IEnvironment>(MockBehavior.Strict); string value = string.Empty; var logger = new TestLogger("Test"); mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteAppCountersName)).Returns(() => value); var options = new HostHealthMonitorOptions(); var performanceManager = new HostPerformanceManager(mockEnvironment.Object, new OptionsWrapper <HostHealthMonitorOptions>(options)); value = "{\"userTime\": 30000000,\"kernelTime\": 16562500,\"pageFaults\": 131522,\"processes\": 1,\"processLimit\": 32,\"threads\": 32,\"threadLimit\": 512,\"connections\": 4,\"connectionLimit\": 300,\"activeConnections\": 25,\"activeConnectionLimit\": 600,\"sections\": 3,\"sectionLimit\": 256,\"namedPipes\": 0,\"namedPipeLimit\": 128,\"remoteDirMonitors\": 5,\"remoteDirMonitorLimit\": 500,\"readIoOperations\": 675,\"writeIoOperations\": 18,\"otherIoOperations\": 9721,\"readIoBytes\": 72585119,\"writeIoBytes\": 5446,\"otherIoBytes\": 393926,\"privateBytes\": 33759232,\"handles\": 987,\"contextSwitches\": 15535,\"remoteOpens\": 250}"; var counters = performanceManager.GetPerformanceCounters(logger); Assert.Equal(counters.PageFaults, 131522); // verify garbage characters are trimmed value = value + "猅"; counters = performanceManager.GetPerformanceCounters(logger); Assert.Equal(counters.PageFaults, 131522); value = "{}"; counters = performanceManager.GetPerformanceCounters(logger); Assert.Equal(counters.PageFaults, 0); value = "this is not json"; counters = performanceManager.GetPerformanceCounters(logger); Assert.Null(counters); var error = logger.GetLogMessages().Last(); Assert.Equal("Failed to deserialize application performance counters. JSON Content: \"this is not json\"", error.FormattedMessage); }
public HttpThrottleMiddlewareTests() { _functionDescriptor = new FunctionDescriptor("Test", null, null, new Collection <ParameterDescriptor>(), null, null, null); _scriptHost = new Mock <IScriptJobHost>(MockBehavior.Strict); _metricsLogger = new Mock <IMetricsLogger>(MockBehavior.Strict); _metricsLogger.Setup(p => p.LogEvent(MetricEventNames.FunctionInvokeThrottled, null, null)).Callback(() => { Interlocked.Increment(ref _throttleMetricCount); }); var environment = SystemEnvironment.Instance; var mockServiceProvider = new Mock <IServiceProvider>(MockBehavior.Strict); var healthMonitorOptions = new HostHealthMonitorOptions(); _performanceManager = new Mock <HostPerformanceManager>(MockBehavior.Strict, environment, new OptionsWrapper <HostHealthMonitorOptions>(healthMonitorOptions), mockServiceProvider.Object); _httpOptions = new HttpOptions(); _loggerFactory = new LoggerFactory(); _loggerProvider = new TestLoggerProvider(); _loggerFactory.AddProvider(_loggerProvider); RequestDelegate next = (ctxt) => { ctxt.Response.StatusCode = (int)HttpStatusCode.Accepted; return(Task.CompletedTask); }; _middleware = new HttpThrottleMiddleware(next, _loggerFactory, TimeSpan.FromSeconds(1)); _requestQueue = new HttpRequestQueue(new OptionsWrapper <HttpOptions>(_httpOptions)); }
public void HostHealthMonitorOptions_FormatsCorrectly() { var options = new HostHealthMonitorOptions(); var result = JObject.Parse(options.Format()).ToString(Formatting.None); Assert.Equal("{\"Enabled\":true,\"HealthCheckInterval\":\"00:00:10\",\"HealthCheckWindow\":\"00:02:00\",\"CounterThreshold\":0.8}", result); }
public HostControllerTests() { _scriptPath = Path.GetTempPath(); var applicationHostOptions = new ScriptApplicationHostOptions(); applicationHostOptions.ScriptPath = _scriptPath; var optionsWrapper = new OptionsWrapper <ScriptApplicationHostOptions>(applicationHostOptions); var loggerProvider = new TestLoggerProvider(); var loggerFactory = new LoggerFactory(); loggerFactory.AddProvider(loggerProvider); _mockEnvironment = new Mock <IEnvironment>(MockBehavior.Strict); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(It.IsAny <string>())).Returns <string>(null); _mockScriptHostManager = new Mock <IScriptHostManager>(MockBehavior.Strict); _mockScriptHostManager.SetupGet(p => p.State).Returns(ScriptHostState.Running); _functionsSyncManager = new Mock <IFunctionsSyncManager>(MockBehavior.Strict); _extensionBundleManager = new Mock <IExtensionBundleManager>(MockBehavior.Strict); var mockServiceProvider = new Mock <IServiceProvider>(MockBehavior.Strict); _hostHealthMonitorOptions = new HostHealthMonitorOptions(); var wrappedHealthMonitorOptions = new OptionsWrapper <HostHealthMonitorOptions>(_hostHealthMonitorOptions); _mockHostPerformanceManager = new Mock <HostPerformanceManager>(_mockEnvironment.Object, wrappedHealthMonitorOptions, mockServiceProvider.Object, null); _hostController = new HostController(optionsWrapper, loggerFactory, _mockEnvironment.Object, _mockScriptHostManager.Object, _functionsSyncManager.Object, _mockHostPerformanceManager.Object); _appOfflineFilePath = Path.Combine(_scriptPath, ScriptConstants.AppOfflineFileName); if (File.Exists(_appOfflineFilePath)) { File.Delete(_appOfflineFilePath); } }
public WebJobsScriptHostServiceTests() { // configure the monitor so it will fail within a couple seconds _healthMonitorOptions = new HostHealthMonitorOptions { HealthCheckInterval = TimeSpan.FromMilliseconds(100), HealthCheckWindow = TimeSpan.FromSeconds(1), HealthCheckThreshold = 5 }; var wrappedHealthMonitorOptions = new OptionsWrapper <HostHealthMonitorOptions>(_healthMonitorOptions); _mockApplicationLifetime = new Mock <IApplicationLifetime>(MockBehavior.Loose); _mockApplicationLifetime.Setup(p => p.StopApplication()) .Callback(() => { _shutdownCalled = true; }); _mockEnvironment = new Mock <IEnvironment>(); var mockServiceProvider = new Mock <IServiceProvider>(MockBehavior.Strict); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteInstanceId)).Returns("testapp"); _mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteHostName)).Returns("testapp"); var mockHostPerformanceManager = new Mock <HostPerformanceManager>(_mockEnvironment.Object, wrappedHealthMonitorOptions, mockServiceProvider.Object, null); mockHostPerformanceManager.Setup(p => p.PerformanceCountersExceeded(It.IsAny <Collection <string> >(), It.IsAny <ILogger>())) .Callback <Collection <string>, ILogger>((c, l) => { if (_countersExceeded) { foreach (var counter in _exceededCounters) { c.Add(counter); } } }) .Returns(() => _countersExceeded); _testHost = new TestFunctionHost(TestScriptPath, TestLogPath, configureWebHostServices: services => { services.AddSingleton <IOptions <HostHealthMonitorOptions> >(wrappedHealthMonitorOptions); services.AddSingleton <IApplicationLifetime>(_mockApplicationLifetime.Object); services.AddSingleton <IEnvironment>(_mockEnvironment.Object); services.AddSingleton <HostPerformanceManager>(mockHostPerformanceManager.Object); services.AddSingleton <IConfigureBuilder <IWebJobsBuilder> >(new DelegatedConfigureBuilder <IWebJobsBuilder>(b => { b.UseHostId("1234"); b.Services.Configure <ScriptJobHostOptions>(o => o.Functions = new[] { "ManualTrigger", "Scenarios" }); })); }, configureScriptHostWebJobsBuilder: builder => { builder.AddExtension <TestWebHookExtension>(); }); _scriptHostService = _testHost.JobHostServices.GetService <IScriptHostManager>() as WebJobsScriptHostService; }
public WebJobsScriptHostServiceTests() { string testScriptPath = @"TestScripts\CSharp"; string testLogPath = Path.Combine(TestHelpers.FunctionsTestDirectory, "Logs", Guid.NewGuid().ToString(), @"Functions"); // configure the monitor so it will fail within a couple seconds _healthMonitorOptions = new HostHealthMonitorOptions { HealthCheckInterval = TimeSpan.FromMilliseconds(100), HealthCheckWindow = TimeSpan.FromSeconds(1), HealthCheckThreshold = 5 }; var wrappedHealthMonitorOptions = new OptionsWrapper <HostHealthMonitorOptions>(_healthMonitorOptions); _mockJobHostEnvironment = new Mock <IScriptJobHostEnvironment>(MockBehavior.Strict); _mockJobHostEnvironment.Setup(p => p.Shutdown()) .Callback(() => { _shutdownCalled = true; }); var mockEnvironment = new Mock <IEnvironment>(); mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteInstanceId)).Returns("testapp"); var mockHostPerformanceManager = new Mock <HostPerformanceManager>(mockEnvironment.Object, wrappedHealthMonitorOptions); mockHostPerformanceManager.Setup(p => p.IsUnderHighLoad(It.IsAny <Collection <string> >(), It.IsAny <ILogger>())) .Callback <Collection <string>, ILogger>((c, l) => { if (_underHighLoad) { foreach (var counter in _exceededCounters) { c.Add(counter); } } }) .Returns(() => _underHighLoad); _testHost = new TestFunctionHost(testScriptPath, testLogPath, configureWebHostServices: services => { services.AddSingleton <IOptions <HostHealthMonitorOptions> >(wrappedHealthMonitorOptions); services.AddSingleton <IScriptJobHostEnvironment>(_mockJobHostEnvironment.Object); services.AddSingleton <IEnvironment>(mockEnvironment.Object); services.AddSingleton <HostPerformanceManager>(mockHostPerformanceManager.Object); services.AddSingleton <IConfigureBuilder <IWebJobsBuilder> >(new DelegatedConfigureBuilder <IWebJobsBuilder>(b => { b.UseHostId("1234"); b.Services.Configure <ScriptJobHostOptions>(o => o.Functions = new[] { "ManualTrigger", "Scenarios" }); })); }); _scriptHostService = _testHost.JobHostServices.GetService <IScriptHostManager>() as WebJobsScriptHostService; }
public HostPerformanceManagerTests() { var mockEnvironment = new Mock <IEnvironment>(MockBehavior.Strict); _performanceCountersValue = string.Empty; _logger = new TestLogger("Test"); mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteSku)).Returns(ScriptConstants.DynamicSku); mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.RoleInstanceId)).Returns((string)null); mockEnvironment.Setup(p => p.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteAppCountersName)).Returns(() => _performanceCountersValue); var options = new HostHealthMonitorOptions(); _serviceProviderMock = new Mock <IServiceProvider>(MockBehavior.Strict); _performanceManager = new HostPerformanceManager(mockEnvironment.Object, new OptionsWrapper <HostHealthMonitorOptions>(options), _serviceProviderMock.Object); }