public async Task SendAsync_WithCookieContainerWithCookieInResponse_CookiesAddedToContainer()
        {
            var cassette = new Cassette();
            var record   = new CassetteRecord(
                new CassetteRecordRequest(
                    HttpMethod.Get.Method,
                    new Uri("http://*****:*****@"{""a"": 1, ""b"": 2}"));

            cassette.Add(record);

            var cookieContainer             = new CookieContainer();
            var replayingHttpMessageHandler = new PublicReplayingHttpMessageHandler(cassette, cookieContainer);

            var request = new HttpRequestMessage
            {
                Method     = HttpMethod.Get,
                Version    = new Version(1, 1),
                RequestUri = new Uri("http://localhost:8080/test"),
                Content    = null,
            };
            await replayingHttpMessageHandler.SendAsync(request, CancellationToken.None);

            Assert.That(cookieContainer.GetCookies(request.RequestUri)["value"]?.Value, Is.EqualTo("123"));
        }
예제 #2
0
        public void Save_TwoRecord_Success()
        {
            var record = new CassetteRecord(
                new CassetteRecordRequest(
                    HttpMethod.Get.Method,
                    new Uri("http://*****:*****@"{""a"": 1, ""b"": 2}"));
            var yamlCassetteStorage = new YamlCassetteStorage();
            var stringWriter        = new StringWriter();

            yamlCassetteStorage.Save(stringWriter, new[] { record, record });

            var yamlStream = new YamlStream();

            yamlStream.Load(new StringReader(stringWriter.GetStringBuilder().ToString()));

            Assert.That(yamlStream.Documents, Has.Count.EqualTo(2));

            AssertDocument(yamlStream.Documents[0], record);
            AssertDocument(yamlStream.Documents[1], record);
        public async Task SendAsync_PostRequest_Success(Type cassetteBodyType)
        {
            var cassette = new Cassette();
            var record   = new CassetteRecord(
                new CassetteRecordRequest(
                    HttpMethod.Post.Method,
                    new Uri("http://*****:*****@"{""a"": 1, ""b"": 2}"));

            cassette.Add(record);

            var replayingHttpMessageHandler = new PublicReplayingHttpMessageHandler(cassette);
            var contentFactory = new Dictionary <Type, Func <HttpContent> >
            {
                { typeof(StringCassetteBody), () => new StringContent("{}") },
                { typeof(BytesCassetteBody), () => new StreamContent(new MemoryStream(Encoding.UTF8.GetBytes("{}"))) },
            };
            var content = contentFactory[cassetteBodyType]();

            var request = new HttpRequestMessage
            {
                Method  = HttpMethod.Post,
                Headers =
                {
                    { "Cookie", "value=1" },
                },
                Version    = new Version(1, 1),
                RequestUri = new Uri("http://localhost:8080/test"),
                Content    = content,
            };
            var response = await replayingHttpMessageHandler.SendAsync(request, CancellationToken.None);

            Assert.That(response, Is.Not.Null);
            Assert.That(response.Version, Is.EqualTo(record.Response.Version));
            Assert.That(response.StatusCode, Is.EqualTo((HttpStatusCode)record.Response.StatusCode));
            Assert.That(response.ReasonPhrase, Is.EqualTo(record.Response.StatusMessage));
            Assert.That(response.RequestMessage, Is.Not.Null);
            Assert.That(response.Headers.GetValues("Server"), Is.EqualTo(new[] { record.Response.Headers["Server"] }));
        }
        public async Task SendAsync_GetRequest_Success()
        {
            var cassette = new Cassette();
            var record   = new CassetteRecord(
                new CassetteRecordRequest(
                    HttpMethod.Get.Method,
                    new Uri("http://*****:*****@"{""a"": 1, ""b"": 2}"));

            cassette.Add(record);

            var replayingHttpMessageHandler = new PublicReplayingHttpMessageHandler(cassette);

            var request = new HttpRequestMessage
            {
                Method  = HttpMethod.Get,
                Headers =
                {
                    { "Cookie", "value=1" },
                },
                Version    = new Version(1, 1),
                RequestUri = new Uri("http://localhost:8080/test"),
                Content    = null,
            };
            var response = await replayingHttpMessageHandler.SendAsync(request, CancellationToken.None);

            Assert.That(response, Is.Not.Null);
            Assert.That(response.Version, Is.EqualTo(record.Response.Version));
            Assert.That(response.StatusCode, Is.EqualTo((HttpStatusCode)record.Response.StatusCode));
            Assert.That(response.ReasonPhrase, Is.EqualTo(record.Response.StatusMessage));
            Assert.That(response.RequestMessage, Is.Not.Null);
            Assert.That(response.Headers.GetValues("Server"), Is.EqualTo(new[] { record.Response.Headers["Server"] }));
        }
예제 #5
0
        public void AddAndFind_MethodEqualityComparerWithAddedRecords_NoRecords()
        {
            var record0 = new CassetteRecord(
                new CassetteRecordRequest("GET", new Uri("http://localhost:8080/test"), new NameValueCollection()),
                new CassetteRecordResponse(new Version(1, 1), 204, "No Content", new NameValueCollection()));
            var record1 = new CassetteRecord(
                new CassetteRecordRequest("POST", new Uri("http://localhost:8080/test"), new NameValueCollection()),
                new CassetteRecordResponse(new Version(1, 1), 204, "No Content", new NameValueCollection()));

            var cassette = new Cassette(new MethodEqualityComparer());

            cassette.Add(record0);
            cassette.Add(record1);

            Assert.That(cassette.Records, Has.Count.EqualTo(2));
            Assert.That(cassette.Find(new CassetteRecordRequest("GET", new Uri("http://localhost:8080/test123"), new NameValueCollection())), Is.EqualTo(record0));
            Assert.That(cassette.Find(new CassetteRecordRequest("POST", new Uri("http://localhost:8080/test123"), new NameValueCollection())), Is.EqualTo(record1));
        }
예제 #6
0
        public async Task SendAsync_ExistsInCassette_DoesNotCallInnerHttpHandler()
        {
            var cassette = new Cassette();
            var record   = new CassetteRecord(
                new CassetteRecordRequest(
                    HttpMethod.Get.Method,
                    new Uri("http://*****:*****@"{""a"": 1, ""b"": 2}"));

            cassette.Add(record);

            var mockHttpHandler         = new MockHttpRequestHandler();
            var tryReplayMessageHandler = new PublicTryReplayHttpMessageHandler(cassette, mockHttpHandler);

            var request = new HttpRequestMessage
            {
                Method     = HttpMethod.Get,
                RequestUri = new Uri("http://localhost:8080/test"),
            };
            var response = await tryReplayMessageHandler.SendAsync(request);

            Assert.That(mockHttpHandler.Invoked, Is.False);

            Assert.That(response.Version, Is.EqualTo(record.Response.Version));
            Assert.That(response.StatusCode, Is.EqualTo((HttpStatusCode)record.Response.StatusCode));
            Assert.That(response.ReasonPhrase, Is.EqualTo(record.Response.StatusMessage));
            Assert.That(response.RequestMessage, Is.Not.Null);
            Assert.That(response.Headers.GetValues("Server"), Is.EqualTo(new[] { record.Response.Headers["Server"] }));
        }
        public void SendAsync_WrongResponseHeader_ThrowsArgumentException()
        {
            var cassette = new Cassette();
            var record   = new CassetteRecord(
                new CassetteRecordRequest(
                    HttpMethod.Get.Method,
                    new Uri("http://*****:*****@"{""a"": 1, ""b"": 2}"));

            cassette.Add(record);

            var replayingHttpMessageHandler = new PublicReplayingHttpMessageHandler(cassette);

            var request = new HttpRequestMessage
            {
                Method  = HttpMethod.Get,
                Headers =
                {
                    { "Cookie", "value=1" },
                },
                Version    = new Version(1, 1),
                RequestUri = new Uri("http://localhost:8080/test"),
                Content    = null,
            };
            var argumentException = Assert.ThrowsAsync <ArgumentException>(() => replayingHttpMessageHandler.SendAsync(request, CancellationToken.None));

            Assert.That(argumentException.ParamName, Is.Null);
        }
예제 #8
0
            static void AssertDocument(YamlDocument document, CassetteRecord record)
            {
                Assert.That(document.RootNode, Is.TypeOf <YamlMappingNode>());
                var node = (YamlMappingNode)document.RootNode;

                Assert.That(node.Children, Has.Count.EqualTo(2));
                Assert.That(node.Children[new YamlScalarNode("Request")], Is.TypeOf <YamlMappingNode>());

                var requestNode = (YamlMappingNode)node.Children[new YamlScalarNode("Request")];

                Assert.That(requestNode.Children[new YamlScalarNode("Method")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Request.Method));
                Assert.That(requestNode.Children[new YamlScalarNode("Uri")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Request.Uri.ToString()));

                Assert.That(requestNode.Children[new YamlScalarNode("Headers")], Is.TypeOf <YamlSequenceNode>());
                var requestHeaders = (YamlSequenceNode)requestNode.Children[new YamlScalarNode("Headers")];

                Assert.That(requestHeaders.Children, Has.Count.EqualTo(2));
                Assert.That(requestHeaders[0], Is.TypeOf <YamlMappingNode>());
                Assert.That(((YamlMappingNode)requestHeaders[0]).Children[new YamlScalarNode("Content-Type")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("text"));
                Assert.That(requestHeaders[1], Is.TypeOf <YamlMappingNode>());
                Assert.That(((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")], Is.TypeOf <YamlSequenceNode>());
                Assert.That(((YamlSequenceNode)((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")])[0], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("value=1"));
                Assert.That(((YamlSequenceNode)((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")])[1], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("value=2"));

                Assert.That(node.Children[new YamlScalarNode("Response")], Is.TypeOf <YamlMappingNode>());

                var responseNode = (YamlMappingNode)node.Children[new YamlScalarNode("Response")];

                Assert.That(responseNode.Children[new YamlScalarNode("Version")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.Version.ToString()));
                Assert.That(responseNode.Children[new YamlScalarNode("StatusCode")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.StatusCode.ToString()));
                Assert.That(responseNode.Children[new YamlScalarNode("StatusMessage")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.StatusMessage));
                Assert.That(responseNode.Children[new YamlScalarNode("Body")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(((StringCassetteBody)record.Response.Body).Value));

                var responseHeaders = (YamlSequenceNode)responseNode.Children[new YamlScalarNode("Headers")];

                Assert.That(responseHeaders.Children, Has.Count.EqualTo(1));
                Assert.That(responseHeaders[0], Is.TypeOf <YamlMappingNode>());
                Assert.That(((YamlMappingNode)responseHeaders[0]).Children[new YamlScalarNode("Content-Type")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("application/json"));
            }
예제 #9
0
 protected virtual void FilterCassetteRecord(CassetteRecord record)
 {
 }
예제 #10
0
        public void Save_SingleBytesRecord_Success([Values(10, 57 - 1, 57, 57 + 1, 57 * 2 - 1, 57 * 2, 57 * 2 + 1, 200)] int bodyLength)
        {
            var responseBody = Enumerable.Range(0, bodyLength).Select(i => (byte)i).ToArray();
            var record       = new CassetteRecord(
                new CassetteRecordRequest(
                    HttpMethod.Get.Method,
                    new Uri("http://localhost:8080/test"),
                    new NameValueCollection
            {
                { "Content-Type", "text" },
                { "Cookie", "value=1" },
                { "Cookie", "value=2" },
            }),
                new CassetteRecordResponse(
                    new Version(1, 1),
                    200,
                    "OK",
                    new NameValueCollection
            {
                { "Content-Type", "octet/stream" }
            },
                    responseBody));
            var yamlCassetteStorage = new YamlCassetteStorage();
            var stringWriter        = new StringWriter();

            yamlCassetteStorage.Save(stringWriter, new[] { record });

            var yamlStream = new YamlStream();

            yamlStream.Load(new StringReader(stringWriter.GetStringBuilder().ToString()));

            Assert.That(yamlStream.Documents, Has.Count.EqualTo(1));

            var document = yamlStream.Documents[0];

            Assert.That(document.RootNode, Is.TypeOf <YamlMappingNode>());
            var node = (YamlMappingNode)document.RootNode;

            Assert.That(node.Children, Has.Count.EqualTo(2));
            Assert.That(node.Children[new YamlScalarNode("Request")], Is.TypeOf <YamlMappingNode>());

            var requestNode = (YamlMappingNode)node.Children[new YamlScalarNode("Request")];

            Assert.That(requestNode.Children[new YamlScalarNode("Method")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Request.Method));
            Assert.That(requestNode.Children[new YamlScalarNode("Uri")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Request.Uri.ToString()));

            Assert.That(requestNode.Children[new YamlScalarNode("Headers")], Is.TypeOf <YamlSequenceNode>());
            var requestHeaders = (YamlSequenceNode)requestNode.Children[new YamlScalarNode("Headers")];

            Assert.That(requestHeaders.Children, Has.Count.EqualTo(2));
            Assert.That(requestHeaders[0], Is.TypeOf <YamlMappingNode>());
            Assert.That(((YamlMappingNode)requestHeaders[0]).Children[new YamlScalarNode("Content-Type")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("text"));
            Assert.That(requestHeaders[1], Is.TypeOf <YamlMappingNode>());
            Assert.That(((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")], Is.TypeOf <YamlSequenceNode>());
            Assert.That(((YamlSequenceNode)((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")])[0], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("value=1"));
            Assert.That(((YamlSequenceNode)((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")])[1], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("value=2"));

            Assert.That(node.Children[new YamlScalarNode("Response")], Is.TypeOf <YamlMappingNode>());

            var responseNode = (YamlMappingNode)node.Children[new YamlScalarNode("Response")];

            Assert.That(responseNode.Children[new YamlScalarNode("Version")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.Version.ToString()));
            Assert.That(responseNode.Children[new YamlScalarNode("StatusCode")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.StatusCode.ToString()));
            Assert.That(responseNode.Children[new YamlScalarNode("StatusMessage")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.StatusMessage));
            Assert.That(responseNode.Children[new YamlScalarNode("Body")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(Convert.ToBase64String(responseBody, Base64FormattingOptions.InsertLineBreaks).Replace("\r\n", "\n")));

            var responseHeaders = (YamlSequenceNode)responseNode.Children[new YamlScalarNode("Headers")];

            Assert.That(responseHeaders.Children, Has.Count.EqualTo(1));
            Assert.That(responseHeaders[0], Is.TypeOf <YamlMappingNode>());
            Assert.That(((YamlMappingNode)responseHeaders[0]).Children[new YamlScalarNode("Content-Type")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("octet/stream"));
        }
예제 #11
0
        public void Save_SingleRecord_Success()
        {
            var responseBody = @"{""a"": 1, ""b"": 2}";
            var record       = new CassetteRecord(
                new CassetteRecordRequest(
                    HttpMethod.Get.Method,
                    new Uri("http://localhost:8080/test"),
                    new NameValueCollection
            {
                { "Content-Type", "text" },
                { "Cookie", "value=1" },
                { "Cookie", "value=2" },
            }),
                new CassetteRecordResponse(
                    new Version(1, 1),
                    200,
                    "OK",
                    new NameValueCollection
            {
                { "Content-Type", "application/json" }
            },
                    responseBody));
            var yamlCassetteStorage = new YamlCassetteStorage();
            var stringWriter        = new StringWriter();

            yamlCassetteStorage.Save(stringWriter, new[] { record });

            var yamlStream = new YamlStream();

            yamlStream.Load(new StringReader(stringWriter.GetStringBuilder().ToString()));

            Assert.That(yamlStream.Documents, Has.Count.EqualTo(1));

            var document = yamlStream.Documents[0];

            Assert.That(document.RootNode, Is.TypeOf <YamlMappingNode>());
            var node = (YamlMappingNode)document.RootNode;

            Assert.That(node.Children, Has.Count.EqualTo(2));
            Assert.That(node.Children[new YamlScalarNode("Request")], Is.TypeOf <YamlMappingNode>());

            var requestNode = (YamlMappingNode)node.Children[new YamlScalarNode("Request")];

            Assert.That(requestNode.Children[new YamlScalarNode("Method")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Request.Method));
            Assert.That(requestNode.Children[new YamlScalarNode("Uri")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Request.Uri.ToString()));

            Assert.That(requestNode.Children[new YamlScalarNode("Headers")], Is.TypeOf <YamlSequenceNode>());
            var requestHeaders = (YamlSequenceNode)requestNode.Children[new YamlScalarNode("Headers")];

            Assert.That(requestHeaders.Children, Has.Count.EqualTo(2));
            Assert.That(requestHeaders[0], Is.TypeOf <YamlMappingNode>());
            Assert.That(((YamlMappingNode)requestHeaders[0]).Children[new YamlScalarNode("Content-Type")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("text"));
            Assert.That(requestHeaders[1], Is.TypeOf <YamlMappingNode>());
            Assert.That(((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")], Is.TypeOf <YamlSequenceNode>());
            Assert.That(((YamlSequenceNode)((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")])[0], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("value=1"));
            Assert.That(((YamlSequenceNode)((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")])[1], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("value=2"));

            Assert.That(node.Children[new YamlScalarNode("Response")], Is.TypeOf <YamlMappingNode>());

            var responseNode = (YamlMappingNode)node.Children[new YamlScalarNode("Response")];

            Assert.That(responseNode.Children[new YamlScalarNode("Version")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.Version.ToString()));
            Assert.That(responseNode.Children[new YamlScalarNode("StatusCode")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.StatusCode.ToString()));
            Assert.That(responseNode.Children[new YamlScalarNode("StatusMessage")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.StatusMessage));
            Assert.That(responseNode.Children[new YamlScalarNode("Body")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(responseBody));

            var responseHeaders = (YamlSequenceNode)responseNode.Children[new YamlScalarNode("Headers")];

            Assert.That(responseHeaders.Children, Has.Count.EqualTo(1));
            Assert.That(responseHeaders[0], Is.TypeOf <YamlMappingNode>());
            Assert.That(((YamlMappingNode)responseHeaders[0]).Children[new YamlScalarNode("Content-Type")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("application/json"));
        }