public async Task GetContentWhenRegionReturnsRedirectResponseThenFollowRedirect() { var redirectHttpResponse = new HttpResponseMessage { StatusCode = HttpStatusCode.Redirect, Content = new StringContent(DummyChildAppContent), }; redirectHttpResponse.Headers.Location = new Uri("http://SomeLocation"); var fakeHttpRequestSender = A.Fake <IFakeHttpRequestSender>(); A.CallTo(() => fakeHttpRequestSender.Send(A <HttpRequestMessage> .Ignored)).Returns(redirectHttpResponse); var fakeRedirectHttpMessageHandler = new FakeHttpMessageHandler(fakeHttpRequestSender); var redirectHttpClient = new HttpClient(fakeRedirectHttpMessageHandler) { BaseAddress = new Uri("http://SomeRegionBaseAddress"), }; var model = new RegionModel { IsHealthy = true, }; var service = new ContentRetriever(redirectHttpClient, logger, appRegistryDataService, httpResponseMessageHandler, markupMessages); await service.GetContent("someUrl", "path", model, true, "baseUrl").ConfigureAwait(false); A.CallTo(() => httpResponseMessageHandler.Process(null)).MustHaveHappened(); fakeRedirectHttpMessageHandler.Dispose(); redirectHttpResponse.Dispose(); redirectHttpClient.Dispose(); }
private async Task <string> GetContent_WithoutCaching(string url, string path, RegionModel regionModel, bool followRedirects, string requestBaseUrl, IHeaderDictionary headers) { const int MaxRedirections = 10; _ = regionModel ?? throw new ArgumentNullException(nameof(regionModel)); string results = null; try { if (regionModel.IsHealthy) { logger.LogInformation($"{nameof(GetContent)}: Getting child response from: {url}"); var response = await GetContentIfRedirectedAsync(requestBaseUrl, url, followRedirects, MaxRedirections, regionModel, headers); if (response != null && !response.IsSuccessStatusCode) { throw new EnhancedHttpException(response.StatusCode, response.ReasonPhrase, url); } responseHandler.Process(response); if (response != null) { results = await response.Content.ReadAsStringAsync(); } logger.LogInformation($"{nameof(GetContent)}: Received child response from: {url}"); } else { results = !string.IsNullOrWhiteSpace(regionModel.OfflineHtml) ? regionModel.OfflineHtml : markupMessages.GetRegionOfflineHtml(regionModel.PageRegion); } } catch (BrokenCircuitException ex) { logger.LogError(ex, $"{nameof(ContentRetriever)}: BrokenCircuit: {url} - {ex.Message}"); if (regionModel.HealthCheckRequired) { await appRegistryDataService.SetRegionHealthState(path, regionModel.PageRegion, false); } results = !string.IsNullOrWhiteSpace(regionModel.OfflineHtml) ? regionModel.OfflineHtml : markupMessages.GetRegionOfflineHtml(regionModel.PageRegion); } return(results); }
public async Task <string> GetContent(string url, RegionModel regionModel, bool followRedirects, string requestBaseUrl) { const int MaxRedirections = 10; if (regionModel == null) { throw new ArgumentNullException(nameof(regionModel)); } string results = null; try { if (regionModel.IsHealthy) { logger.LogInformation($"{nameof(GetContent)}: Getting child response from: {url}"); var response = await GetContentIfRedirectedAsync(requestBaseUrl, url, followRedirects, MaxRedirections).ConfigureAwait(false); if (response != null && !response.IsSuccessStatusCode) { throw new EnhancedHttpException(response.StatusCode, response.ReasonPhrase, url); } responseHandler.Process(response); if (response != null) { results = await response.Content.ReadAsStringAsync().ConfigureAwait(false); } logger.LogInformation($"{nameof(GetContent)}: Received child response from: {url}"); } else if (!string.IsNullOrWhiteSpace(regionModel.OfflineHTML)) { results = regionModel.OfflineHTML; } } catch (BrokenCircuitException ex) { logger.LogError(ex, $"{nameof(ContentRetriever)}: BrokenCircuit: {url} - {ex.Message}"); if (regionModel.HealthCheckRequired) { await regionService.SetRegionHealthState(regionModel.Path, regionModel.PageRegion, false).ConfigureAwait(false); } results = regionModel.OfflineHTML; } return(results); }
public async Task GetContentWhenRegionReturnsRedirectResponseThenFollowRedirect() { using var redirectHttpResponse = new HttpResponseMessage { StatusCode = HttpStatusCode.Redirect, Content = new StringContent(DummyChildAppContent), }; redirectHttpResponse.Headers.Location = new Uri("http://someUrl"); var fakeHttpRequestSender = A.Fake <IFakeHttpRequestSender>(); A.CallTo(() => fakeHttpRequestSender.Send(A <HttpRequestMessage> .Ignored)).Returns(redirectHttpResponse); using var fakeRedirectHttpMessageHandler = new FakeHttpMessageHandler(fakeHttpRequestSender); using var redirectHttpClient = new HttpClient(fakeRedirectHttpMessageHandler) { BaseAddress = new Uri("http://SomeRegionBaseAddress"), }; var model = new RegionModel { IsHealthy = true, }; using var httpHandler = new MockHttpMessageHandler(); httpHandler.When(HttpMethod.Get, "http://someUrl").Respond(_ => redirectHttpResponse); var localHttpClientFactory = A.Fake <IUriSpecifcHttpClientFactory>(); A.CallTo(() => localHttpClientFactory.GetClientForRegionEndpoint(A <string> .Ignored)).Returns(httpHandler.ToHttpClient()); var service = new ContentRetriever(localHttpClientFactory, logger, appRegistryDataService, httpResponseMessageHandler, markupMessages, memoryCache, passOnHeaderSettings); await service.GetContent("http://someUrl", "path", model, true, baseUri, new HeaderDictionary()); A.CallTo(() => httpResponseMessageHandler.Process(null)).MustHaveHappened(); }