public async Task Invoke_WithNonMatchingPath_IgnoresRequest() { var contextMock = GetMockContext("/nonmatchingpath"); RequestDelegate next = _ => { return(Task.FromResult <object>(null)); }; var options = new Mock <IOptions <HealthCheckOptions> >(); options.SetupGet(o => o.Value) .Returns(new HealthCheckOptions() { Path = "/healthcheck" }); var loggerFactory = new LoggerFactory(); var healthService = new Mock <IHealthCheckService>(); healthService.Setup(s => s.CheckHealthAsync(It.IsAny <HealthCheckPolicy>())) .ReturnsAsync(HealthCheckResponse.Empty); var defaultPolicy = new HealthCheckPolicy(new HealthCheckSettingsCollection()); var policyProvider = new DefaultHealthCheckPolicyProvider(defaultPolicy); var authZService = new Mock <IAuthorizationService>(); var healthCheckMiddleware = new HealthCheckMiddleware(next, options.Object, loggerFactory, healthService.Object, policyProvider, authZService.Object); await healthCheckMiddleware.Invoke(contextMock.Object); healthService.Verify(s => s.CheckHealthAsync(It.IsAny <HealthCheckPolicy>()), Times.Never()); }
public async Task Invoke_ServerHealthy_Returns200() { var contextMock = GetMockContext("/healthcheck"); RequestDelegate next = _ => { return(Task.FromResult <object>(null)); }; var options = new Mock <IOptions <HealthCheckOptions> >(); options.SetupGet(o => o.Value) .Returns(new HealthCheckOptions() { Path = "/healthcheck" }); var loggerFactory = new LoggerFactory(); var healthService = new Mock <IHealthCheckService>(); healthService.Setup(s => s.CheckHealthAsync(It.IsAny <HealthCheckPolicy>())) .ReturnsAsync(new HealthCheckResponse(new HealthCheckResult[] { new HealthCheckResult { Status = HealthStatus.Healthy } })); var defaultPolicy = new HealthCheckPolicy(new HealthCheckSettingsCollection()); var policyProvider = new DefaultHealthCheckPolicyProvider(defaultPolicy); var authZService = new Mock <IAuthorizationService>(); var healthCheckMiddleware = new HealthCheckMiddleware(next, options.Object, loggerFactory, healthService.Object, policyProvider, authZService.Object); await healthCheckMiddleware.Invoke(contextMock.Object); healthService.Verify(s => s.CheckHealthAsync(It.IsAny <HealthCheckPolicy>()), Times.Once()); Assert.Equal(StatusCodes.Status200OK, contextMock.Object.Response.StatusCode); }
public MachinePolicy ToModel() { return(new MachinePolicy( ToModelName(), Description, HealthCheckPolicy.ToModel(), ConnectivityPolicy.ToModel(), UpdatePolicy.ToModel(), CleanupPolicy.ToModel())); }
public async Task Invoke_AuthZPolicyFailed_DelegateToNextMiddleware() { var contextMock = GetMockContext("/canary"); RequestDelegate next = _ => { _.Response.StatusCode = 404; return(Task.FromResult <object>(null)); }; var options = new Mock <IOptions <CanaryOptions> >(); options.SetupGet(o => o.Value) .Returns(new CanaryOptions() { Path = "/canary", AuthorizationPolicy = new AuthorizationPolicyBuilder().RequireClaim("invalid").Build() }); var loggerFactory = new LoggerFactory(); var healthService = new Mock <IHealthCheckService>(); healthService.Setup(s => s.CheckHealthAsync(It.IsAny <HealthCheckPolicy>())) .ReturnsAsync(new HealthCheckResponse(new HealthCheckResult[] { new HealthCheckResult { Status = HealthStatus.Healthy } })); var defaultPolicy = new HealthCheckPolicy(new HealthCheckSettingsCollection()); var policyProvider = new DefaultHealthCheckPolicyProvider(defaultPolicy); var serverSwitch = new Mock <IServerSwitch>(); serverSwitch.Setup(s => s.CheckServerStateAsync(It.IsAny <ServerSwitchContext>())) .Returns(Task.FromResult(0)); var authZService = new Mock <IAuthorizationService>(); authZService .Setup(s => s.AuthorizeAsync(It.IsAny <ClaimsPrincipal>(), It.IsAny <object>(), It.IsAny <IEnumerable <IAuthorizationRequirement> >())) .ReturnsAsync(false); var canaryMiddleware = new CanaryMiddleware(next, options.Object, loggerFactory, healthService.Object, policyProvider, serverSwitch.Object, authZService.Object); await canaryMiddleware.Invoke(contextMock.Object); serverSwitch.Verify(s => s.CheckServerStateAsync(It.IsAny <ServerSwitchContext>()), Times.Never()); healthService.Verify(s => s.CheckHealthAsync(It.IsAny <HealthCheckPolicy>()), Times.Never()); Assert.Equal(404, contextMock.Object.Response.StatusCode); }
public async Task Invoke_ServerDisabled_Returns503() { var contextMock = GetMockContext("/canary"); RequestDelegate next = _ => { return(Task.FromResult <object>(null)); }; var options = new Mock <IOptions <CanaryOptions> >(); options.SetupGet(o => o.Value) .Returns(new CanaryOptions() { Path = "/canary" }); var loggerFactory = new LoggerFactory(); var healthService = new Mock <IHealthCheckService>(); healthService.Setup(s => s.CheckHealthAsync(It.IsAny <HealthCheckPolicy>())) .ReturnsAsync(HealthCheckResponse.Empty); var defaultPolicy = new HealthCheckPolicy(new HealthCheckSettingsCollection()); var policyProvider = new DefaultHealthCheckPolicyProvider(defaultPolicy); var serverSwitch = new Mock <IServerSwitch>(); serverSwitch.Setup(s => s.CheckServerStateAsync(It.IsAny <ServerSwitchContext>())) .Callback <ServerSwitchContext>(c => c.Disable()) .Returns(Task.FromResult(0)); var authZService = new Mock <IAuthorizationService>(); var canaryMiddleware = new CanaryMiddleware(next, options.Object, loggerFactory, healthService.Object, policyProvider, serverSwitch.Object, authZService.Object); await canaryMiddleware.Invoke(contextMock.Object); serverSwitch.Verify(s => s.CheckServerStateAsync(It.IsAny <ServerSwitchContext>()), Times.Once()); healthService.Verify(s => s.CheckHealthAsync(It.IsAny <HealthCheckPolicy>()), Times.Never()); Assert.Equal(StatusCodes.Status503ServiceUnavailable, contextMock.Object.Response.StatusCode); }