예제 #1
0
        public void SerializesAndDeserializesHttpResponseOrException()
        {
            // ARRANGE
            var expected = new HttpResponseOrException
            {
                Response = new HttpResponse
                {
                    Version       = "1.1",
                    StatusCode    = 200,
                    ReasonPhrease = "OK",
                    Headers       = new[]
                    {
                        new HttpHeader {
                            Name = "Server", Value = "ProtocolBufferSerializer"
                        },
                        new HttpHeader {
                            Name = "Content-Type", Value = "text/plain"
                        }
                    },
                    HasContent = true,
                    Content    = new MemoryStream(new byte[0])
                },
                ExceptionString = "exception"
            };

            // ACT
            var actual = SerializeAndDeserialize(expected);

            // ASSERT
            actual.Should().NotBe(expected);
            actual.ShouldBeEquivalentTo(expected, o => o.Excluding(x => x.Response.Content));
            actual.Response.Content.Should().BeNull();
        }
예제 #2
0
            public TestState()
            {
                // dependencies
                Store      = new Mock <IStore>();
                Mapper     = new Mock <IHttpMessageMapper>();
                Serializer = new Mock <IProtocolBufferSerializer>();

                // data
                CancellationToken = new CancellationToken();
                ExchangeId        = new ExchangeId(new DateTimeOffset(2000, 1, 1, 0, 0, 0, TimeSpan.Zero), new Guid("4ae0fbbaaeba4db1bd98d106ece1a6e0"));
                RequestMessage    = new HttpRequestMessage
                {
                    Content = new StreamContent(Stream.Null)
                    {
                        Headers =
                        {
                            { "Content-Type",   "text/plain" },
                            { "Content-Length", "7"          }
                        }
                    }
                };
                Request = new HttpRequest
                {
                    Method  = "POST",
                    Url     = "http://example/path",
                    Version = "1.1",
                    Headers = new[]
                    {
                        new HttpHeader {
                            Name = "User-Agent", Value = "HttpMessageStore"
                        },
                        new HttpHeader {
                            Name = "Content-Type", Value = "text/plain"
                        },
                        new HttpHeader {
                            Name = "Content-Length", Value = "1"
                        }
                    },
                    HasContent = true,
                    Content    = GetStream("original-request")
                };
                ResponseMessage = new HttpResponseMessage
                {
                    Content = new StreamContent(Stream.Null)
                    {
                        Headers =
                        {
                            { "Content-Type",   "text/plain" },
                            { "Content-Length", "8"          }
                        }
                    }
                };
                Response = new HttpResponse
                {
                    Version       = "1.1",
                    StatusCode    = 200,
                    ReasonPhrease = "OK",
                    Headers       = new[]
                    {
                        new HttpHeader {
                            Name = "Server", Value = "HttpMessageStore"
                        },
                        new HttpHeader {
                            Name = "Content-Type", Value = "text/plain"
                        },
                        new HttpHeader {
                            Name = "Content-Length", Value = "2"
                        }
                    },
                    HasContent = true,
                    Content    = GetStream("original-response")
                };
                Exception           = new Exception("some exception");
                ResponseOrException = new HttpResponseOrException {
                    Response = Response, ExceptionString = null
                };

                // setup
                Store
                .Setup(x => x.GetAsync(It.Is <string>(k => k.EndsWith("request")), It.IsAny <CancellationToken>()))
                .Returns(() => Task.FromResult(GetStream("store-request")));
                Store
                .Setup(x => x.GetAsync(It.Is <string>(k => k.EndsWith("request-content")), It.IsAny <CancellationToken>()))
                .Returns(() => Task.FromResult(GetStream("store-request-content")));
                Store
                .Setup(x => x.GetAsync(It.Is <string>(k => k.EndsWith("response")), It.IsAny <CancellationToken>()))
                .Returns(() => Task.FromResult(GetStream("store-response")));
                Store
                .Setup(x => x.GetAsync(It.Is <string>(k => k.EndsWith("response-content")), It.IsAny <CancellationToken>()))
                .Returns(() => Task.FromResult(GetStream("store-response-content")));
                Mapper
                .Setup(x => x.ToHttpAsync(It.IsAny <HttpRequestMessage>(), It.IsAny <CancellationToken>()))
                .Returns(() => Task.FromResult(Request));
                Mapper
                .Setup(x => x.ToHttpMessage(It.IsAny <HttpRequest>()))
                .Returns(() => RequestMessage);
                Mapper
                .Setup(x => x.ToHttpAsync(It.IsAny <HttpResponseMessage>(), It.IsAny <CancellationToken>()))
                .Returns(() => Task.FromResult(Response));
                Mapper
                .Setup(x => x.ToHttpMessage(It.IsAny <HttpResponse>()))
                .Returns(() => ResponseMessage);
                Serializer
                .Setup(x => x.Serialize(It.IsAny <Stream>(), It.IsAny <HttpRequest>()))
                .Callback <Stream, HttpRequest>((s, r) => WriteToStream(s, "serialized"));
                Serializer
                .Setup(x => x.Deserialize <HttpRequest>(It.IsAny <Stream>()))
                .Returns(() => Request);
                Serializer
                .Setup(x => x.Serialize(It.IsAny <Stream>(), It.IsAny <HttpResponseOrException>()))
                .Callback <Stream, HttpResponseOrException>((s, r) => WriteToStream(s, "serialized"));
                Serializer
                .Setup(x => x.Deserialize <HttpResponseOrException>(It.IsAny <Stream>()))
                .Returns(() => ResponseOrException);

                Target = new HttpMessageStore(Store.Object, Mapper.Object, Serializer.Object);
            }