예제 #1
0
        private async Task<List<ApplicationHealthModel>> CreateApplicationHealthModelTasksAsync(IList<Models.PathModel> paths)
        {
            var bearerToken = User.Identity.IsAuthenticated ? await bearerTokenRetriever.GetToken(HttpContext).ConfigureAwait(false) : null;

            var applicationHealthModels = new List<ApplicationHealthModel>();

            foreach (var path in paths)
            {
                logger.LogInformation($"{nameof(Action)}: Getting child Health for: {path.Path}");

                var applicationBaseUrl = await GetPathBaseUrlFromBodyRegionAsync(path.Path).ConfigureAwait(false);

                var applicationHealthModel = new ApplicationHealthModel
                {
                    Path = path.Path,
                    BearerToken = bearerToken,
                    HealthUrl = $"{applicationBaseUrl}/health",
                };

                applicationHealthModel.RetrievalTask = applicationHealthService.GetAsync(applicationHealthModel);

                applicationHealthModels.Add(applicationHealthModel);
            }

            return applicationHealthModels;
        }
        public async Task <IEnumerable <HealthItemModel> > GetAsync(ApplicationHealthModel model)
        {
            if (model == null)
            {
                return(null);
            }

            var responseTask = await CallHttpClientJsonAsync(model).ConfigureAwait(false);

            return(responseTask);
        }
예제 #3
0
        public async Task GetAsyncReturnsHealthTextWhenApiReturnsHealthText()
        {
            // Arrange
            var expectedResponse = new List <HealthItemModel>
            {
                new HealthItemModel
                {
                    Service = "A service 1",
                    Message = "A message 1",
                },
                new HealthItemModel
                {
                    Service = "A service 2",
                    Message = "A message 2",
                },
            };
            string expectedResponseString = JsonConvert.SerializeObject(expectedResponse);
            var    httpResponse           = new HttpResponseMessage
            {
                StatusCode = HttpStatusCode.OK,
                Content    = new StringContent(expectedResponseString),
            };

            var fakeHttpRequestSender = A.Fake <IFakeHttpRequestSender>();

            A.CallTo(() => fakeHttpRequestSender.Send(A <HttpRequestMessage> .Ignored)).Returns(httpResponse);

            var fakeHttpMessageHandler = new FakeHttpMessageHandler(fakeHttpRequestSender);
            var httpClient             = new HttpClient(fakeHttpMessageHandler)
            {
                BaseAddress = new Uri("http://SomeDummyUrl")
            };

            var healthService = new ApplicationHealthService(httpClient, logger);
            var model         = new ApplicationHealthModel {
                BearerToken = "SomeBearerToken"
            };

            // Act
            var result = await healthService.GetAsync(model);

            // Assert
            string resultString = JsonConvert.SerializeObject(result);

            Assert.Equal(expectedResponseString, resultString);

            httpResponse.Dispose();
            httpClient.Dispose();
            fakeHttpMessageHandler.Dispose();
        }
예제 #4
0
        private async Task <IEnumerable <HealthItemModel> > CallHttpClientJsonAsync(ApplicationHealthModel model)
        {
            logger.LogInformation($"{nameof(CallHttpClientJsonAsync)}: Loading health data from {model.HealthUrl}");

            var request = new HttpRequestMessage(HttpMethod.Get, model.HealthUrl);

            if (!string.IsNullOrWhiteSpace(model.BearerToken))
            {
                request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", model.BearerToken);
            }

            request.Headers.Accept.Clear();
            request.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(MediaTypeNames.Application.Json));

            var response = await httpClient.SendAsync(request).ConfigureAwait(false);

            if (response.StatusCode == System.Net.HttpStatusCode.OK)
            {
                var responseString = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                var result = JsonSerializer.Deserialize <List <HealthItemModel> >(responseString);

                logger.LogInformation($"{nameof(CallHttpClientJsonAsync)}: Loaded health data from {model.HealthUrl}");

                return(result);
            }
            else
            {
                logger.LogError($"{nameof(CallHttpClientJsonAsync)}: Error loading health data from {model.HealthUrl}: {response.StatusCode}");

                var result = new List <HealthItemModel>
                {
                    new HealthItemModel
                    {
                        Service = model.Path,
                        Message = $"No health response from {model.HealthUrl} app",
                    },
                };

                return(result);
            }
        }