public TestState()
            {
                Session = new StoredHttpSession {
                    Id = Guid.NewGuid(), Timestamp = DateTimeOffset.UtcNow
                };

                UseCompression = false;

                CloudStorageAccount account = CloudStorageAccount.DevelopmentStorageAccount;

                CloudBlobClient blobClient = account.CreateCloudBlobClient();

                BlobContainer = new DelegatingCloudBlobContainer(blobClient.GetContainerReference(Constants.TestBlobContainerName));

                CloudTableClient tableClient = account.CreateCloudTableClient();

                Table = new DelegatingCloudTable(tableClient.GetTableReference(Constants.TestTableName));

                RequestWithContent = new HttpRequestMessage
                {
                    Method     = HttpMethod.Post,
                    RequestUri = new Uri("http://www.example.com/"),
                    Version    = new Version("1.1"),
                    Content    = new StringContent("request content", Encoding.UTF8, "text/plain")
                };
                RequestWithContent.Headers.Add("X-Request", "request header");
                RequestWithContent.Content.Headers.Add("X-Request-Content", "request content header");

                RequestWithoutContent = new HttpRequestMessage
                {
                    Method     = HttpMethod.Post,
                    RequestUri = new Uri("http://www.example.com/"),
                    Version    = new Version("1.1")
                };
                RequestWithoutContent.Headers.Add("X-Request", "request header");

                ResponseWithContent = new HttpResponseMessage
                {
                    Version      = new Version("1.1"),
                    StatusCode   = (HttpStatusCode)429,
                    ReasonPhrase = "Too Many Requests",
                    Content      = new StringContent("response content", Encoding.UTF8, "text/plain")
                };
                ResponseWithContent.Headers.Add("X-Response", "response header");
                ResponseWithContent.Content.Headers.Add("X-Response-Content", "response content header");

                ResponseWithoutContent = new HttpResponseMessage
                {
                    Version      = new Version("1.1"),
                    StatusCode   = (HttpStatusCode)429,
                    ReasonPhrase = "Too Many Requests"
                };
                ResponseWithoutContent.Headers.Add("X-Response", "response header");
            }
        /// <summary>
        /// Try to get the latest stored HTTP session from a <see cref="HttpRequestMessage" />, generated by <see cref="LoggingHandler" />.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <param name="storedHttpSession">The session.</param>
        /// <returns>Whether or not the session was found.</returns>
        public static bool TryGetStoredHttpSession(this HttpRequestMessage request, out StoredHttpSession storedHttpSession)
        {
            IEnumerable <StoredHttpSession> storedHttpSessions;

            if (TryGetHttpRequestMessageProperty(request, LoggingHandler.StoredHttpSessionKey, out storedHttpSessions))
            {
                storedHttpSession = storedHttpSessions.LastOrDefault();
                return(storedHttpSession != null);
            }

            storedHttpSession = null;
            return(false);
        }
        public async Task StoreRequestAsync_WithAnyRequest_ReturnsAsPopulatedSession()
        {
            // ARRANGE
            var ts = new TestState();
            await ts.Initialize();

            // ACT
            StoredHttpSession session = await ts.Store.StoreRequestAsync(ts.RequestWithoutContent, CancellationToken.None);

            // ASSERT
            session.Should().NotBeNull();
            session.Id.Should().NotBe(default(Guid));
            session.Timestamp.Should().NotBe(default(DateTimeOffset));
        }
Esempio n. 4
0
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            StoredHttpSession session = await _store.StoreRequestAsync(request, cancellationToken);

            IEnumerable <StoredHttpSession> storedHttpSessions;
            var storedHttpSessionList = new List <StoredHttpSession>();

            if (request.TryGetStoredHttpSessions(out storedHttpSessions))
            {
                storedHttpSessionList = storedHttpSessions.ToList();
            }

            storedHttpSessionList.Add(session);
            request.Properties.Remove(StoredHttpSessionKey);
            request.Properties.Add(StoredHttpSessionKey, storedHttpSessionList);

            HttpResponseMessage response = await base.SendAsync(request, cancellationToken);

            await _store.StoreResponseAsync(session, response, cancellationToken);

            return(response);
        }
        private static async Task VerifyGetRequestAsync(TestState ts)
        {
            // ARRANGE
            await ts.Initialize();

            string expectedContent = await ts.RequestWithContent.Content.ReadAsStringAsync();

            KeyValuePair <string, string[]>[] expectedHeaders        = CopyHeaders(ts.RequestWithContent.Headers);
            KeyValuePair <string, string[]>[] expectedContentHeaders = CopyHeaders(ts.RequestWithContent.Content.Headers);
            StoredHttpSession session = await ts.Store.StoreRequestAsync(ts.RequestWithContent, CancellationToken.None);

            // ACT
            HttpRequestMessage request = await ts.Store.GetRequestAsync(session, CancellationToken.None);

            // ASSERT
            request.Method.Should().Be(ts.RequestWithContent.Method);
            request.RequestUri.Should().Be(ts.RequestWithContent.RequestUri);
            request.Version.Should().Be(ts.RequestWithContent.Version);
            request.Headers.ShouldBeEquivalentTo(expectedHeaders);
            request.Content.Headers.ShouldBeEquivalentTo(expectedContentHeaders);
            string actualContent = await request.Content.ReadAsStringAsync();

            actualContent.Should().Be(expectedContent);
        }
        public void TryGetStoredHttpSession_WithValue_ReturnsTrue()
        {
            var session = new StoredHttpSession();

            TryGetHttpRequestMessageProperty_WithValue_ReturnsTrue(HttpRequestMessageExtensions.TryGetStoredHttpSession, LoggingHandler.StoredHttpSessionKey, session, new[] { session });
        }