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