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());
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        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);
        }
示例#9
0
        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);
        }
示例#12
0
        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));
        }