Пример #1
0
        public void Given_that_request_is_present_When_sending_Then_request_status_code_is_set()
        {
            var content      = "some response content";
            var statusCode   = 201;
            var mockResponse = new HttpResponseBuilder()
                               .SetStatusCode(statusCode)
                               .SetStatusDescriptor("OK")
                               .SetResponse(content)
                               .Build();

            var mockSocket = new Mock <IHttpSocket>();

            mockSocket
            .Setup(s => s.Request(It.IsAny <HttpRequest>()))
            .Returns(mockResponse);

            var mockRequest = new HttpRequest("");

            var target = new HttpClient(mockSocket.Object);

            // execution

            var result = target.Send(mockRequest);

            // assertion
            Assert.AreEqual(statusCode, mockRequest.StatusCode, "The request status code is not correct");
        }
Пример #2
0
        public void Given_that_http_status_code_2xx_And_http_headers_are_returned_When_sending_Then_response_is_returned()
        {
            var content      = "some response content";
            var mockResponse = new HttpResponseBuilder()
                               .SetStatusCode(200)
                               .SetStatusDescriptor("OK")
                               .SetResponse(content)
                               .AddHeader("Header-one: header stuff")
                               .AddHeader("Second-header: more header stuff")
                               .Build();

            var mockSocket = new Mock <IHttpSocket>();

            mockSocket
            .Setup(s => s.Request(It.IsAny <HttpRequest>()))
            .Returns(mockResponse);

            var target = new HttpClient(mockSocket.Object);

            // execution
            var result = target.Send(new HttpRequest(""));

            // assertion
            Assert.AreEqual(content, result, "The http reponse was not correct");
        }
Пример #3
0
        public void Given_that_request_is_present_and_status_code_indicates_error_When_sending_Then_request_Success_is_set_false()
        {
            var content      = "some response content";
            var mockResponse = new HttpResponseBuilder()
                               .SetStatusCode(404)
                               .SetStatusDescriptor("OK")
                               .SetResponse(content)
                               .Build();

            var mockSocket = new Mock <IHttpSocket>();

            mockSocket
            .Setup(s => s.Request(It.IsAny <HttpRequest>()))
            .Returns(mockResponse);

            var mockRequest = new HttpRequest("");

            var target = new HttpClient(mockSocket.Object);

            // execution/assertion
            TestDelegate method    = () => target.Send(mockRequest);
            var          exception = (HttpRequestException)Assert.Throws(typeof(HttpRequestException), method,
                                                                         "Correct exception not thrown");

            Assert.IsFalse(exception.Request.Success, "The request success property is not correct");
        }
Пример #4
0
        public void Given_that_request_is_present_and_status_code_indicates_success_When_sending_Then_request_Success_is_set_true()
        {
            var content      = "some response content";
            var mockResponse = new HttpResponseBuilder()
                               .SetStatusCode(200)
                               .SetStatusDescriptor("OK")
                               .SetResponse(content)
                               .Build();

            var mockSocket = new Mock <IHttpSocket>();

            mockSocket
            .Setup(s => s.Request(It.IsAny <HttpRequest>()))
            .Returns(mockResponse);

            var mockRequest = new HttpRequest("");

            var target = new HttpClient(mockSocket.Object);

            // execution

            var result = target.Send(mockRequest);

            // assertion
            Assert.IsTrue(mockRequest.Success, "The request success property is not correct");
        }
Пример #5
0
        public async Task InvokeAsync(PipelineContext context, PipelineDelegate next)
        {
            await next.Invoke();

            if (context.GetFirst(out HttpResponseMessage httpResponseMessage))
            {
                var code = (int)httpResponseMessage.StatusCode;
                if ((Sanitize500s && Between(code, 500, 599)) ||
                    (Sanitize400s && Between(code, 400, 499)) ||
                    (Sanitize300s && Between(code, 300, 399)) ||
                    SanitizeResponseCodes.Contains(code))
                {
                    if (SaveOriginalContent)
                    {
                        var originalResponse = new ResponseSanitizerContent();
                        originalResponse.Copy(httpResponseMessage);
                        context.Add(originalResponse);
                    }

                    HttpResponseBuilder.HttpResponseMessage(httpResponseMessage)
                    .WithNoContent()
                    .WithReasonPhrase(string.Empty)
                    .If(ReturnErrorReference,
                        resp => resp.WithStringContent($"{{\"errorReference\":\"{context.Id}\"}}"))
                    .If(ReplacementResponseCode.HasValue,
                        resp => resp.WithStatusCode(ReplacementResponseCode.Value));
                }
            }
        }
Пример #6
0
        /**
         * Fetch data, retrying in the event that that the service provider returns an error and we think
         * we can recover by restarting the protocol flow.
         */
        private HttpResponseBuilder fetchWithRetry()
        {
            int  attempts = 0;
            bool retry;
            HttpResponseBuilder response = null;

            do
            {
                retry = false;
                ++attempts;
                try
                {
                    response = attemptFetch();
                }
                catch (OAuthProtocolException pe)
                {
                    retry = handleProtocolException(pe, attempts);
                    if (!retry)
                    {
                        if (pe.getProblemCode() != null)
                        {
                            throw responseParams.oauthRequestException(pe.getProblemCode(),
                                                                       "Service provider rejected request", pe);
                        }

                        throw responseParams.oauthRequestException(OAuthError.UNKNOWN_PROBLEM,
                                                                   "Service provider rejected request", pe);
                    }
                }
            } while (retry);
            return(response);
        }
 public override void OnAuthorization(HttpActionContext actionContext)
 {
     if (IsAuthenticated(actionContext))
     {
         base.OnAuthorization(actionContext);
     }
     else
     {
         actionContext.Response = HttpResponseBuilder.CreateUnauthorizedResponse(actionContext.Request);
     }
 }
Пример #8
0
        /// <summary>
        /// Builds an HttpResponse out of the given underlying response
        /// </summary>
        /// <param name="underlyingResponse">The underlying HttpWebResponse to copy values from</param>
        /// <returns>An HttpResponse based on the given underlying response</returns>
        private HttpResponseData BuildResponse(HttpWebResponse underlyingResponse)
        {
            ExceptionUtilities.CheckArgumentNotNull(underlyingResponse, "underlyingResponse");

            using (Stream underlyingStream = underlyingResponse.GetResponseStream())
            {
                return(HttpResponseBuilder.BuildResponse(
                           underlyingResponse.StatusCode,
                           underlyingResponse.Headers.AllKeys.ToDictionary(k => k, k => underlyingResponse.Headers[k]),
                           underlyingStream));
            }
        }
        public HttpResponseMessage GetToken(string username, string password)
        {
            String userId = String.Empty;

            if (IsAuthenticated(username, password, out userId))
            {
                String token = new AuthenticationHelper().GenerateJwtToken(username, userId);
                return(HttpResponseBuilder.CreateOKResponse(Request, token));
            }

            return(HttpResponseBuilder.CreateUnauthorizedResponse(Request));
        }
Пример #10
0
        /**
         * Access token data is returned to the gadget as json key/value pairs:
         *
         *    { "user_id": "12345678" }
         */
        private HttpResponseBuilder formatAccessTokenData()
        {
            HttpResponseBuilder builder = new HttpResponseBuilder();

            builder.setHeader("Content-Type", "application/json; charset=utf-8");
            builder.setHttpStatusCode((int)HttpStatusCode.OK);
            // no need to cache this, these requests should be fairly rare, and the results should be
            // cached in gadget.
            builder.setStrictNoCache();
            JsonObject json = new JsonObject(accessTokenData);

            builder.setResponseString(json.ToString());
            return(builder);
        }
        public static HttpHandlerBuilder ReturnDocs(this HttpResponseBuilder builder, IEnumerable <object> documents)
        {
            var docs     = documents.ToList();
            var response = new
            {
                hits = new
                {
                    hits  = docs.Select(doc => new { _source = doc }).ToList(),
                    total = docs.Count
                }
            };

            return(builder.Respond(response));
        }
Пример #12
0
        private HttpResponse RouteRequest()
        {
            var routes = this.Routes
                         .Where(x => Regex.Match(Request.Url, x.UrlRegex).Success)
                         .ToList();

            if (!routes.Any())
            {
                return(HttpResponseBuilder.NotFound());
            }

            var route = routes.FirstOrDefault(x => x.Method == Request.Method);

            if (route == null)
            {
                return new HttpResponse()
                       {
                           StatusCode = ResponseStatusCode.MethodNotAllowed
                       }
            }
            ;

            #region FIleSystemHandler
            // extract the path if there is one
            //var match = Regex.Match(request.Url, route.UrlRegex);
            //if (match.Groups.Count > 1)
            //{
            //    request.Path = match.Groups[1].Value;
            //}
            //else
            //{
            //    request.Path = request.Url;
            //}
            #endregion


            // trigger the route handler...
            try
            {
                return(route.Callable(Request));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
                return(HttpResponseBuilder.InternalServerError());
            }
        }
Пример #13
0
        public void BuildResponseOkTest()
        {
            var request = new HttpRequestMessage();

            request.SetConfiguration(new HttpConfiguration());

            var serviceResponse = new FakeServiceResponse {
                Result = true
            };

            var builder = new HttpResponseBuilder();

            var response = builder.BuildResponse(request, serviceResponse);

            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
            Assert.AreEqual("true", response.Content.ReadAsStringAsync().Result);
        }
Пример #14
0
 private static HttpResponseMessage ExecProductServiceFunc(Func <ProductService, HttpResponseMessage> func, TraceWriter log)
 {
     try
     {
         return(func.Invoke(new ProductService(new ResourceService())));
     }
     catch (CannotGetResourceException e)
     {
         log.Error(e.Message, e);
         return(HttpResponseBuilder <string> .Build(HttpStatusCode.ServiceUnavailable, e.Message));
     }
     catch (System.Exception e)
     {
         log.Error(e.Message, e);
         return(HttpResponseBuilder <string> .Build(HttpStatusCode.InternalServerError, e.Message));
     }
 }
Пример #15
0
        /**
         * Get honest-to-goodness user data.
         *
         * @throws OAuthProtocolException if the service provider returns an OAuth
         * related error instead of user data.
         */
        private HttpResponseBuilder fetchData()
        {
            HttpResponseBuilder builder;

            if (accessTokenData != null)
            {
                // This is a request for access token data, return it.
                builder = formatAccessTokenData();
            }
            else
            {
                sRequest  signed   = sanitizeAndSign(realRequest, null);
                sResponse response = fetchFromServer(signed);
                checkForProtocolProblem(response);
                builder = new HttpResponseBuilder(response);
            }
            return(builder);
        }
Пример #16
0
        public HttpResponse Handle(HttpRequest request)
        {
            this.getParams = WebUtilities.RetrieveGetParameters(request.Url);

            this.postParams = WebUtilities.RetrievePostParameters(request.Content);

            this.requestMethod = request.Method.ToString();

            Tuple <string, string> controllerAndActionNames = this.GetControllerAndActionName(request.Url);

            if (controllerAndActionNames == null)
            {
                return(HttpResponseBuilder.NotFound());
            }

            this.controllerName = controllerAndActionNames.Item1;
            this.actionName     = controllerAndActionNames.Item2;

            MethodInfo method = this.GetControllerMethod(this.controllerName, this.actionName, this.requestMethod);

            if (method == null)
            {
                throw new NotSupportedException("Method not supported!");
            }

            this.SetMethodParameters(method);

            IInvocable actionResult = (IInvocable)this.GetControllerMethod(
                this.controllerName,
                this.actionName,
                this.requestMethod)
                                      .Invoke(
                this.GetController(this.GetControllerTypeName(this.controllerName)),
                this.methodParams);

            string content = actionResult.Invoke();

            HttpResponse response = new HttpResponse()
            {
                ContentAsUTF8 = content
            };

            return(response);
        }
Пример #17
0
        public HttpResponse Handle(HttpRequest request)
        {
            this.Request = request;
            string urlPart;
            // extract the path if there is one

            var match = Regex.Match(request.Url, this.RouteUrlRegex);

            if (match.Groups.Count > 1)
            {
                urlPart = match.Groups[1].Value;
            }
            else
            {
                urlPart = request.Url;
            }
            //var urlPart = request.Path;

            urlPart = SanitarizePath(urlPart);

            // make sure the first part of the path is not "/" or "\"
            if (urlPart.Length > 0)
            {
                var firstChar = urlPart.ElementAt(0);
                if (firstChar == '/' || firstChar == '\\')
                {
                    urlPart = "." + urlPart;
                }
            }
            var localPath = Path.Combine(this.BasePath, urlPart);

            if (Directory.Exists(localPath))
            {
                return(this.HandleDirectory(localPath));
            }
            else if (File.Exists(localPath))
            {
                return(HandleFile(localPath));
            }
            else
            {
                return(HttpResponseBuilder.NotFound());
            }
        }
Пример #18
0
        public void BuildResponseEntityInvalidTest()
        {
            var request = new HttpRequestMessage();

            request.SetConfiguration(new HttpConfiguration());

            var serviceResponse = new FakeServiceResponse
            {
                Result    = false,
                Exception = new ValidationException("test")
            };

            var builder = new HttpResponseBuilder();

            var response = builder.BuildResponse(request, serviceResponse);

            Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
            Assert.AreEqual("test", response.Content.ReadAsStringAsync().Result);
        }
Пример #19
0
        public void should_be_able_parse_token_response()
        {
            var content = "{" +
                          "\"access_token\":\"TOKEN_VALUE\"," +
                          "\"token_type\":\"JWT\"," +
                          "\"expires_in\":3600," +
                          "\"refresh_token\":\"tGzv3JOkF0XG5Qx2TlKWIA\"" +
                          "}";
            var response = new HttpResponseBuilder().WithContent(content).Build();

            _sender.SetupResponse(response);
            ActorRequestsForAccessToken();

            var token = _actor.AsksFor(LastResponse.Content <OAuthToken>());

            Check.That(token.AccessToken).IsEqualTo("TOKEN_VALUE");
            Check.That(token.TokenType).IsEqualTo("JWT");
            Check.That(token.ExpiresIn).IsEqualTo(3600);
            Check.That(token.RefreshToken).IsEqualTo("tGzv3JOkF0XG5Qx2TlKWIA");
        }
Пример #20
0
        public HttpResponse Handle(HttpRequest request, string fileDirectory)
        {
            try
            {
                HttpFile     file     = this.ServeFile(request, fileDirectory);
                HttpResponse response = new HttpResponse
                {
                    Content = file.Content,
                    Header  = { ContentType = file.MimeType },
                };

                return(response);
            }
            catch (FileNotFoundException fnfe)
            {
                Console.WriteLine(fnfe.ToString());

                return(HttpResponseBuilder.NotFound());
            }
        }
Пример #21
0
        /**
         * Fetch data and build a response to return to the client.  We try to always return something
         * reasonable to the calling app no matter what kind of madness happens along the way.  If an
         * unchecked exception occurs, well, then the client is out of luck.
         */
        private sResponse fetchNoThrow()
        {
            HttpResponseBuilder response = null;

            try
            {
                accessorInfo = fetcherConfig.getTokenStore().getOAuthAccessor(
                    realRequest.getSecurityToken(), realRequest.getOAuthArguments(), clientState,
                    responseParams);
                response = fetchWithRetry();
            }
            catch (OAuthResponseParams.OAuthRequestException e)
            {
                // No data for us.
                responseParams.logDetailedWarning("OAuth fetch fatal error", e);
                responseParams.setSendTraceToClient(true);
                if (response == null)
                {
                    response = new HttpResponseBuilder()
                               .setHttpStatusCode(sResponse.SC_FORBIDDEN);
                    responseParams.addToResponse(response);
                    return(response.create());
                }
            }

            // OK, got some data back, annotate it as necessary.
            if (response.getHttpStatusCode() >= 400)
            {
                responseParams.logDetailedWarning("OAuth fetch fatal error");
                responseParams.setSendTraceToClient(true);
            }
            else if (responseParams.getAznUrl() != null && responseParams.sawErrorResponse())
            {
                responseParams.logDetailedWarning("OAuth fetch error, reprompting for user approval");
                responseParams.setSendTraceToClient(true);
            }

            responseParams.addToResponse(response);

            return(response.create());
        }
Пример #22
0
        public static IHttpClientWrapper MockHttpClientWrapper()
        {
            var httpClientWrapper = new Mock <IHttpClientWrapper>();

            httpClientWrapper
            .Setup(x => x.GetAsync(It.IsRegex("competitions$")))
            .Returns(() =>
                     Task.FromResult(HttpResponseBuilder.Build(ServiceResponses.Competitions.All147Competitions)));

            httpClientWrapper
            .Setup(x => x.GetAsync(It.IsRegex("\\/teams")))
            .Returns(() =>
                     Task.FromResult(HttpResponseBuilder.Build(ServiceResponses.Competitions.CompetitionTeams)));

            httpClientWrapper
            .Setup(x => x.GetAsync(It.IsRegex("teams\\/")))
            .Returns(() =>
                     Task.FromResult(HttpResponseBuilder.Build(ServiceResponses.Teams.TeamDetail)));

            return(httpClientWrapper.Object);
        }
        private async Task <HttpResponseModel> Send(HttpRequestModel request)
        {
            using (var reqMsg = HttpRequestMessageBuilder.BuildHttpRequestMessage(request))
            {
                var cancellationToken = GetCancellationToken(request.ResponseTimeoutOverride);
                var transactionId     = GetNextTransactionId();

                var sentAtUtc = DateTimeOffset.UtcNow;
                var respMsg   = await SendNow(reqMsg, cancellationToken);

                var resp = HttpResponseBuilder
                           .BuildHttpResponseModel(
                    transactionId,
                    sentAtUtc,
                    DateTimeOffset.UtcNow,
                    request.ShouldBufferResponseBody,
                    respMsg);

                return(await resp);
            }
        }
Пример #24
0
        public void Given_that_http_status_code_1xx_is_returned_When_sending_Then_HttpUnhandledStatusException_thrown()
        {
            var mockResponse = new HttpResponseBuilder()
                               .SetStatusCode(100)
                               .SetStatusDescriptor("Redirection")
                               .SetResponse("Some response")
                               .Build();

            var mockSocket = new Mock <IHttpSocket>();

            mockSocket
            .Setup(s => s.Request(It.IsAny <HttpRequest>()))
            .Returns(mockResponse);

            var target = new HttpClient(mockSocket.Object);

            // execution/assertion
            TestDelegate testMethod = () => target.Send(new HttpRequest(""));
            var          exception  = Assert.Throws(typeof(HttpRequestException), testMethod);

            Assert.AreEqual("100 Redirection", exception.Message, "Exception message is not correct");
        }
Пример #25
0
        public void Given_url_and_port_and_arguments_are_set_When_sending_Then_request_is_sent_via_socket()
        {
            // setup
            var mockHostname = "www.test.com";
            var mockPath = "/resource.html";
            var mockUrl = mockHostname + mockPath;
            var mockPort = 8080;
            var mockSocket = new Mock<IHttpSocket>();

            var mockRequest = new HttpRequestBuilder()
                .SetUrl(mockUrl)
                .SetPort(mockPort)
                .Build();

            var mockResponse = new HttpResponseBuilder()
                .SetStatusCode(200)
                .SetResponse("response")
                .Build();

            mockSocket
                .Setup(s => s.Request(It.IsAny<HttpRequest>()))
                .Returns(mockResponse);

            var target = new HttpClient(mockSocket.Object);

            // execution
            target.Send(mockRequest);

            // assertion
            mockSocket.Verify(
                s => s.Request(It.Is<HttpRequest>(
                    hr => hr.Hostname == mockHostname &&
                        hr.Path == mockPath &&
                        hr.Port == mockPort &&
                        hr.Method == HttpMethod.GET)),
                Times.Once(),
                "Request not sent via socket");
        }
Пример #26
0
        public async Task InvokeAsync(PipelineContext context, PipelineDelegate next)
        {
            if (context.GetFirst(out HttpRequestMessage httpRequestMessage))
            {
                var redirectUri = FindMatchingRedirect(httpRequestMessage.RequestUri);
                if (redirectUri != null)
                {
                    var redirected = new Redirected(
                        httpRequestMessage, redirectUri);
                    context.Add(redirected);

                    httpRequestMessage.RequestUri = redirectUri;
                }
                else
                {
                    if (Return404IfNotFound)
                    {
                        var response = HttpResponseBuilder
                                       .HttpResponseMessage()
                                       .WithStatusCode(404)
                                       .WithContent(new StringContent(
                                                        "{\"RouteRedirect\": \"No matching route\"}",
                                                        Encoding.ASCII,
                                                        "appliation/json"))
                                       .Build();
                        context.Add(response);

                        return;
                    }
                }

                await next.Invoke();
            }
            else
            {
                throw new PipelineDependencyException <HttpRequestMessage>(this);
            }
        }
Пример #27
0
        public void Given_url_and_port_and_arguments_are_set_When_sending_Then_request_is_sent_via_socket()
        {
            // setup
            var mockHostname = "www.test.com";
            var mockPath     = "/resource.html";
            var mockUrl      = mockHostname + mockPath;
            var mockPort     = 8080;
            var mockSocket   = new Mock <IHttpSocket>();

            var mockRequest = new HttpRequestBuilder()
                              .SetUrl(mockUrl)
                              .SetPort(mockPort)
                              .Build();

            var mockResponse = new HttpResponseBuilder()
                               .SetStatusCode(200)
                               .SetResponse("response")
                               .Build();

            mockSocket
            .Setup(s => s.Request(It.IsAny <HttpRequest>()))
            .Returns(mockResponse);

            var target = new HttpClient(mockSocket.Object);

            // execution
            target.Send(mockRequest);

            // assertion
            mockSocket.Verify(
                s => s.Request(It.Is <HttpRequest>(
                                   hr => hr.Hostname == mockHostname &&
                                   hr.Path == mockPath &&
                                   hr.Port == mockPort &&
                                   hr.Method == HttpMethod.GET)),
                Times.Once(),
                "Request not sent via socket");
        }
Пример #28
0
        public async Task InvokeAsync(PipelineContext context, PipelineDelegate next)
        {
            if (context.GetFirst(out HttpRequestMessage httpRequestMessage))
            {
                if (RefusedMethods.Any(x => x == httpRequestMessage.Method))
                {
                    var response = HttpResponseBuilder
                                   .HttpResponseMessage()
                                   .WithReasonPhrase("Method refused")
                                   .WithStatusCode(403);

                    context.Add(response);
                }
                else
                {
                    await next.Invoke();
                }
            }
            else
            {
                throw new PipelineDependencyException <HttpRequestMessage>(this);
            }
        }
Пример #29
0
        public async Task InvokeAsync(PipelineContext context, PipelineDelegate next)
        {
            if (context.GetFirst(out HttpRequestMessage httpRequestMessage))
            {
                if (httpRequestMessage.Content?.Headers.ContentLength > MaxRequestSize)
                {
                    var response = HttpResponseBuilder
                                   .HttpResponseMessage()
                                   .WithReasonPhrase("Content too large")
                                   .WithStatusCode(500);

                    context.Add(response);
                }
                else
                {
                    await next.Invoke();
                }
            }
            else
            {
                throw new PipelineDependencyException <HttpRequestMessage>(this);
            }
        }
Пример #30
0
        private HttpResponse RouteRequest()
        {
            var routes = this.Routes
                         .Where(x => Regex.Match(Request.Url, x.UrlRegex).Success)
                         .ToList();


            if (!routes.Any())
            {
                return(HttpResponseBuilder.NotFound());
            }


            var route = routes.FirstOrDefault(x => x.Method == Request.Method);

            if (route == null)
            {
                return new HttpResponse()
                       {
                           StatusCode = ResponseStatusCode.MethodNotAllowed
                       }
            }
            ;


            // trigger the route handler...
            try
            {
                return(route.Callable(Request));
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
                return(HttpResponseBuilder.InternalServerError());
            }
        }
Пример #31
0
 public void addToResponse(HttpResponseBuilder response)
 {
     if (!newClientState.isEmpty())
     {
         try
         {
             response.setMetadata(CLIENT_STATE, newClientState.getEncryptedState());
         }
         catch (BlobCrypterException e)
         {
             // Configuration error somewhere, this should never happen.
             throw e;
         }
     }
     if (!String.IsNullOrEmpty(aznUrl))
     {
         response.setMetadata(APPROVAL_URL, aznUrl);
     }
     if (error != null)
     {
         response.setMetadata(ERROR_CODE, error);
     }
     if (errorText != null || sendTraceToClient)
     {
         StringBuilder verboseError = new StringBuilder();
         if (errorText != null)
         {
             verboseError.Append(errorText);
         }
         if (sendTraceToClient)
         {
             verboseError.Append('\n');
             verboseError.Append(getRequestTrace());
         }
         response.setMetadata(ERROR_TEXT, verboseError.ToString());
     }
 }
Пример #32
0
        public void Given_that_http_status_code_1xx_is_returned_When_sending_Then_HttpUnhandledStatusException_thrown()
        {
            var mockResponse = new HttpResponseBuilder()
                .SetStatusCode(100)
                .SetStatusDescriptor("Redirection")
                .SetResponse("Some response")
                .Build();

            var mockSocket = new Mock<IHttpSocket>();
            mockSocket
                .Setup(s => s.Request(It.IsAny<HttpRequest>()))
                .Returns(mockResponse);

            var target = new HttpClient(mockSocket.Object);

            // execution/assertion
            TestDelegate testMethod = () => target.Send(new HttpRequest(""));
            var exception = Assert.Throws(typeof(HttpRequestException), testMethod);
            Assert.AreEqual("100 Redirection", exception.Message, "Exception message is not correct");
        }
Пример #33
0
        public void Given_that_http_status_code_2xx_And_http_headers_are_returned_When_sending_Then_response_is_returned()
        {
            var content = "some response content";
            var mockResponse = new HttpResponseBuilder()
                .SetStatusCode(200)
                .SetStatusDescriptor("OK")
                .SetResponse(content)
                .AddHeader("Header-one: header stuff")
                .AddHeader("Second-header: more header stuff")
                .Build();

            var mockSocket = new Mock<IHttpSocket>();
            mockSocket
                .Setup(s => s.Request(It.IsAny<HttpRequest>()))
                .Returns(mockResponse);

            var target = new HttpClient(mockSocket.Object);

            // execution
            var result = target.Send(new HttpRequest(""));

            // assertion
            Assert.AreEqual(content, result, "The http reponse was not correct");
        }
Пример #34
0
        public void Given_that_request_is_present_When_sending_Then_request_status_code_is_set()
        {
            var content = "some response content";
            var statusCode = 201;
            var mockResponse = new HttpResponseBuilder()
                .SetStatusCode(statusCode)
                .SetStatusDescriptor("OK")
                .SetResponse(content)
                .Build();

            var mockSocket = new Mock<IHttpSocket>();
            mockSocket
                .Setup(s => s.Request(It.IsAny<HttpRequest>()))
                .Returns(mockResponse);

            var mockRequest = new HttpRequest("");

            var target = new HttpClient(mockSocket.Object);

            // execution
            
            var result = target.Send(mockRequest);

            // assertion
            Assert.AreEqual(statusCode, mockRequest.StatusCode, "The request status code is not correct");
        }
Пример #35
0
        public void Given_that_request_is_present_and_status_code_indicates_error_When_sending_Then_request_Success_is_set_false()
        {
            var content = "some response content";
            var mockResponse = new HttpResponseBuilder()
                .SetStatusCode(404)
                .SetStatusDescriptor("OK")
                .SetResponse(content)
                .Build();

            var mockSocket = new Mock<IHttpSocket>();
            mockSocket
                .Setup(s => s.Request(It.IsAny<HttpRequest>()))
                .Returns(mockResponse);

            var mockRequest = new HttpRequest("");

            var target = new HttpClient(mockSocket.Object);

            // execution/assertion
            TestDelegate method = () => target.Send(mockRequest);
            var exception = (HttpRequestException)Assert.Throws(typeof (HttpRequestException), method,
                "Correct exception not thrown");

            Assert.IsFalse(exception.Request.Success, "The request success property is not correct");
        }
Пример #36
0
        public void Given_that_request_is_present_and_status_code_indicates_success_When_sending_Then_request_Success_is_set_true()
        {
            var content = "some response content";
            var mockResponse = new HttpResponseBuilder()
                .SetStatusCode(200)
                .SetStatusDescriptor("OK")
                .SetResponse(content)
                .Build();

            var mockSocket = new Mock<IHttpSocket>();
            mockSocket
                .Setup(s => s.Request(It.IsAny<HttpRequest>()))
                .Returns(mockResponse);

            var mockRequest = new HttpRequest("");

            var target = new HttpClient(mockSocket.Object);

            // execution

            var result = target.Send(mockRequest);

            // assertion
            Assert.IsTrue(mockRequest.Success, "The request success property is not correct");
        }