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(); }
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); }