public void ReturnNullWhenTargetAddressNotFound() { var ctx = RouteContextBuilder.FromUrl("/").Build(); var actual = Sut(null).HandleAsync(ctx).Result; Assert.Null(actual); }
private static RouteContext GetRouteContext(Action <RouteSpecBuilder> configure) { var builder = new RouteSpecBuilder(); configure(builder); var spec = builder.Build(); return(RouteContextBuilder.FromUrl("/").WithSpec(spec).Build()); }
public void CanValidateRequestWithRequiredQueryParameter() { var spec = TestData.Petstore.Get("/pets").ConfiugureParameter("tags", x => x.Required = true); var ctx = RouteContextBuilder.FromUrl("/pets?tags=test").WithSpec(spec).Build(); var actual = Sut.Validate(ctx); var expected = HttpValidationStatus.Success(); Assert.Equal(expected, actual); }
public void CanInvalidateRequestWithoutRequiredBody() { var spec = TestData.Petstore.Post("/pets"); var ctx = RouteContextBuilder.FromUrl("/pets").WithSpec(spec).Build(); var actual = Sut.Validate(ctx); var expected = ValidationError.BodyRequired().AsStatus(); Assert.Equal(expected, actual); }
public void CanValidateRequestWithBody() { var body = "{\"name\": \"name\", \"tag\": \"tag\"}"; var spec = TestData.Petstore.Post("/pets"); var ctx = RouteContextBuilder.FromUrl("/pets").WithBody(body).WithSpec(spec).Build(); var actual = Sut.Validate(ctx); var expected = HttpValidationStatus.Success(); Assert.Equal(expected, actual); }
public void CanInvalidateRequestWithoutRequiredQueryParameter() { var spec = TestData.Petstore.Get("/pets").ConfiugureParameter("tags", x => x.Required = true); var ctx = RouteContextBuilder.FromUrl("/pets").WithSpec(spec).Build(); var actual = Sut.Validate(ctx); var expected = ValidationError.ParameterRequired("tags").AsStatus(); Assert.Equal(expected, actual); }
public void CanInvalidateRequestWithInvalidBody() { var body = "{\"tag\": \"tag\"}"; var spec = TestData.Petstore.Post("/pets"); var ctx = RouteContextBuilder.FromUrl("/pets").WithBody(body).WithSpec(spec).Build(); var actual = Sut.Validate(ctx); var expected = TestData.GetMissingParameterSchemaError("name", "'', line 1, position 1") .Wrap(x => ValidationError.InvalidBody(x)) .AsStatus(); Assert.Equal(expected, actual); }
public void CanInvalidateRequestWithMistypedParameter() { var spec = TestData.Petstore.Get("/pets"); var ctx = RouteContextBuilder.FromUrl("/pets?limit=false").WithSpec(spec).Build(); var actual = Sut.Validate(ctx); var expected = TestData .GetInvalidParameterTypeSchemaError("Integer", "String") .Wrap(x => ValidationError.InvalidParameter("limit", x)) .AsStatus(); Assert.Equal(expected, actual); }
public void CanValidateRequest() { var ctx = RouteContextBuilder .FromUrl("/pets") .WithSpec(TestData.Petstore.Get("/pets")) .Build(); var actual = Sut.Validate(ctx); var expected = HttpValidationStatus.Success(); Assert.Equal(expected, actual); }
public void CanProxyRequest() { var ctx = RouteContextBuilder.FromUrl("/").Build(); var expected = new ResponseContext { StatusCode = HttpStatusCode.OK, Body = "", ContentType = "application/json; charset=utf-8", Headers = { { "Content-Type", "application/json; charset=utf-8" } } }; var actual = Sut().HandleAsync(ctx)?.Result.RemoveSystemHeader(); DeepAssert.Equal(expected, actual); }
public void CanTakeTargetAddressFromSpec() { var spec = new RouteSpecBuilder().WithServer("http://test").Build(); var ctx = RouteContextBuilder.FromUrl("/").WithSpec(spec).Build(); var expected = new ResponseContext { StatusCode = HttpStatusCode.OK, Body = "", ContentType = "application/json; charset=utf-8", Headers = { { "Content-Type", "application/json; charset=utf-8" } } }; var actual = Sut(null).HandleAsync(ctx).Result?.RemoveSystemHeader(); DeepAssert.Equal(expected, actual); }
public void CanDelayRequest() { const int delayMilliseconds = 10; var sut = new DelayHandler(new DelayHandler.Options { Value = delayMilliseconds }); var ctx = RouteContextBuilder.FromUrl("/").Build(); var stopwatch = new Stopwatch(); stopwatch.Start(); var actual = sut.HandleAsync(ctx).Result; stopwatch.Stop(); Assert.Null(actual); Assert.InRange(stopwatch.ElapsedMilliseconds, delayMilliseconds, long.MaxValue); }
public void CanProxyWithBody() { var ctx = RouteContextBuilder .FromUrl("/", Kestrel.HttpMethod.Post) .WithBody("\"Test\"") .Build(); var expected = new ResponseContext { StatusCode = HttpStatusCode.OK, Body = "Test", ContentType = "application/json; charset=utf-8", Headers = { { "Content-Type", "application/json; charset=utf-8" } } }; var actual = Sut().HandleAsync(ctx).Result?.RemoveSystemHeader(); DeepAssert.Equal(expected, actual); }
public async Task ThrowOnRecursion() { // When proxy is configured to proxy to self, // first it receives request from client. // Then it makes same request to self. // To simulate this behaviour, let's make use of EchoHttpHandler. // Calling proxy second time with response from the first time // Should be equivalent to calling self. var sut = Sut(); var clientRequest = RouteContextBuilder.FromUrl("/").Build(); var proxyFirstResponse = sut.HandleAsync(clientRequest).Result; var proxySelfRequest = RouteContextBuilder .FromUrl("/") .WithHeaders(proxyFirstResponse.Headers) .Build(); await Assert.ThrowsAsync <MockServerConfigurationException>(() => sut.HandleAsync(proxySelfRequest)); }