diff --git a/src/RA.Tests/JsonIpIntegration.cs b/src/RA.Tests/JsonIpIntegration.cs index a530ba7..12f832d 100644 --- a/src/RA.Tests/JsonIpIntegration.cs +++ b/src/RA.Tests/JsonIpIntegration.cs @@ -1,5 +1,4 @@ using NUnit.Framework; -// using RA.Tests.Data; namespace RA.Tests { @@ -13,11 +12,11 @@ public void ResponseShouldShow() .Given() .Name("JsonIP") .When() - .Get("http://geoip.nekudo.com/api/") + .Get("https://api.publicapis.org/entries") .Then() .Debug() - .TestBody("ip exist", x => x.ip != null) - .Assert("ip exist"); + .TestBody("entries exist", x => x.entries != null) + .Assert("entries exist"); } } diff --git a/src/RA.Tests/LoadIntegrationTest.cs b/src/RA.Tests/LoadIntegrationTest.cs index 4f44d99..7bfbde5 100644 --- a/src/RA.Tests/LoadIntegrationTest.cs +++ b/src/RA.Tests/LoadIntegrationTest.cs @@ -14,7 +14,7 @@ public void SingleThread() .When() //one thread for 15 seconds .Load(1, 10) - .Get("http://geoip.nekudo.com/api/") + .Get("https://api.publicapis.org/entries") .Then() .Debug(); } @@ -28,7 +28,7 @@ public void MultiThread() .When() //one thread for 15 seconds .Load(6, 10) - .Get("http://geoip.nekudo.com/api/") + .Get("https://api.publicapis.org/entries") .Then() .Debug(); } diff --git a/src/RA.Tests/MockResponseContextWithJson.cs b/src/RA.Tests/MockResponseContextWithJson.cs index c00eb8c..ddecfef 100644 --- a/src/RA.Tests/MockResponseContextWithJson.cs +++ b/src/RA.Tests/MockResponseContextWithJson.cs @@ -3,7 +3,6 @@ using System.Net; using NUnit.Framework; using RA.Exceptions; -// using RA.Tests.Data; namespace RA.Tests { @@ -32,23 +31,21 @@ public MockResponseContextWithJson() "{\"key\":\"AK\", \"value\":\"Alaska\"}" + "]"; - var header = new Dictionary> + var headers = new Dictionary> { - { - "Content-Type", - new List {"application/json"} - } + {"Content-Type", new List {"application/json"}}, + {"Date", new List {"Fri, 02 Jul 2021 10:29:50 GMT"}} }; var emptyHeader = new Dictionary>(); var loadResults = new List {new LoadResponse(200, 78978078)}; - _responseWithObject = new ResponseContext(HttpStatusCode.OK, responseObjectContent, header, + _responseWithObject = new ResponseContext(HttpStatusCode.OK, responseObjectContent, headers, _mockElapsedTimespan, loadResults); - _responseWithObject2 = new ResponseContext(HttpStatusCode.OK, responseObjectContent, header, + _responseWithObject2 = new ResponseContext(HttpStatusCode.OK, responseObjectContent, headers, _mockElapsedTimespan, loadResults); - _responseWithArray = new ResponseContext(HttpStatusCode.OK, responseArrayContent, header, + _responseWithArray = new ResponseContext(HttpStatusCode.OK, responseArrayContent, headers, _mockElapsedTimespan, loadResults); _responseWithNothing = new ResponseContext(HttpStatusCode.OK, "", emptyHeader, _mockElapsedTimespan, loadResults); @@ -165,6 +162,22 @@ public void TestHeaderWithContentTypeUpperCased() .Assert("content header has app/json upper"); } + [Test] + public void TestHeaderWithDateUpperCased() + { + _responseWithObject + .TestHeader("content header has DATE upper", "DATE", x => x == "Fri, 02 Jul 2021 10:29:50 GMT") + .Assert("content header has date upper"); + } + + [Test] + public void TestHeaderWithDateLowerCased() + { + _responseWithObject + .TestHeader("content header has date upper", "date", x => x == "Fri, 02 Jul 2021 10:29:50 GMT") + .Assert("content header has date upper"); + } + [Test] public void TestLoadforMoreThanTotalCallShouldThrow() { diff --git a/src/RA/ExecutionContext.cs b/src/RA/ExecutionContext.cs index d5c97d0..9e5692d 100644 --- a/src/RA/ExecutionContext.cs +++ b/src/RA/ExecutionContext.cs @@ -21,7 +21,7 @@ public class ExecutionContext private readonly SetupContext _setupContext; private readonly HttpActionContext _httpActionContext; private readonly HttpClient _httpClient; - private ConcurrentQueue _loadReponses = new ConcurrentQueue(); + private ConcurrentQueue _loadResponses = new ConcurrentQueue(); public ExecutionContext(SetupContext setupContext, HttpActionContext httpActionContext) { @@ -272,7 +272,7 @@ public async Task SingleThread(CancellationToken cancellationToken) public async Task MapCall() { var loadResponse = new LoadResponse(-1, -1); - _loadReponses.Enqueue(loadResponse); + _loadResponses.Enqueue(loadResponse); var result = await ExecuteCall(); loadResponse.StatusCode = (int)result.Response.StatusCode; @@ -292,17 +292,29 @@ private async Task ExecuteCall() private ResponseContext BuildFromResponse(HttpResponseMessageWrapper result) { - // var content = AsyncContext.Run(async () => await result.Response.Content.ReadAsStringAsync()); var content = result.Response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); + var headers = GetHeaders(result); return new ResponseContext( result.Response.StatusCode, content, - result.Response.Content.Headers.ToDictionary(x => x.Key.Trim(), x => x.Value), + headers, result.ElaspedExecution, - _loadReponses.ToList() - ); + _loadResponses.ToList()); + } + + private static Dictionary> GetHeaders(HttpResponseMessageWrapper result) + { + var headers = result.Response.Headers.ToDictionary(x => x.Key.Trim(), x => x.Value); + var contentHeaders = result.Response.Content.Headers.ToDictionary(x => x.Key.Trim(), x => x.Value); + + foreach (var contentHeader in contentHeaders) + { + if(!headers.ContainsKey(contentHeader.Key)) + headers.Add(contentHeader.Key, contentHeader.Value); + } + return headers; } ///