From 6788f1bd2b21bb27afd7b15207e1a5dc1e895670 Mon Sep 17 00:00:00 2001 From: StuartFerguson Date: Mon, 21 Sep 2026 21:05:40 +0100 Subject: [PATCH] Skip unregistered dependency mappings --- .../HealthMonitoringRegistrationClient.cs | 11 +++++++- ...HealthMonitoringRegistrationClientTests.cs | 26 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/HealthMonitoring/HealthMonitoring.Client/HealthMonitoringRegistrationClient.cs b/HealthMonitoring/HealthMonitoring.Client/HealthMonitoringRegistrationClient.cs index fec5e8e..4e61af8 100644 --- a/HealthMonitoring/HealthMonitoring.Client/HealthMonitoringRegistrationClient.cs +++ b/HealthMonitoring/HealthMonitoring.Client/HealthMonitoringRegistrationClient.cs @@ -98,7 +98,16 @@ public async Task SetDependencyMappingsAsync(string serviceId, IEnumerable string.Equals(link.DependencyName.Trim(), mapping.DependencyName.Trim(), StringComparison.OrdinalIgnoreCase)); using var response = current is null diff --git a/HealthMonitoring/HealthMonitoring.Tests/Client/HealthMonitoringRegistrationClientTests.cs b/HealthMonitoring/HealthMonitoring.Tests/Client/HealthMonitoringRegistrationClientTests.cs index 5380fec..d055bbd 100644 --- a/HealthMonitoring/HealthMonitoring.Tests/Client/HealthMonitoringRegistrationClientTests.cs +++ b/HealthMonitoring/HealthMonitoring.Tests/Client/HealthMonitoringRegistrationClientTests.cs @@ -149,6 +149,32 @@ await client.SetDependencyMappingsAsync("payments-api", new[] Assert.EndsWith($"/api/services/{PaymentsApiServiceId}/dependency-links/{linkId}", handler.Requests[2].RequestUri!.ToString()); } + [Fact] + public async Task SetDependencyMappingsAsync_skips_dependencies_that_are_not_registered() + { + var targetId = Guid.Parse("55555555-5555-5555-5555-555555555555"); + var handler = new QueueHandler( + JsonResponse(HttpStatusCode.OK, Array.Empty()), + JsonResponse(HttpStatusCode.NotFound, new { message = "service not found" }), + JsonResponse(HttpStatusCode.OK, new { id = targetId, serviceId = SecurityServiceId, name = SecurityServiceName }), + JsonResponse(HttpStatusCode.Created, new { })); + var logger = new RecordingLogger(); + var client = new HealthMonitoringRegistrationClient( + new HttpClient(handler) { BaseAddress = new Uri(MonitoringBaseUrl) }, + logger); + + await client.SetDependencyMappingsAsync(PaymentsApiServiceId, new[] + { + new DependencyMappingOptions("Missing Service", "missing-service"), + new DependencyMappingOptions(SecurityServiceName, SecurityServiceId) + }); + + Assert.Equal(4, handler.Requests.Count); + Assert.Equal($"{MonitoringBaseUrl}/api/services/{SecurityServiceId}", handler.Requests[2].RequestUri!.ToString()); + Assert.Equal(HttpMethod.Post, handler.Requests[3].Method); + Assert.Contains(logger.Messages, message => message.Contains("missing-service", StringComparison.OrdinalIgnoreCase)); + } + private static HealthMonitoringRegistrationClient CreateClient(HttpMessageHandler handler) => new(new HttpClient(handler) { BaseAddress = new Uri(MonitoringBaseUrl) });