diff --git a/src/Discovery/src/Consul/ConsulServiceInstance.cs b/src/Discovery/src/Consul/ConsulServiceInstance.cs index 6c6894d3c5..bb8d5d626b 100644 --- a/src/Discovery/src/Consul/ConsulServiceInstance.cs +++ b/src/Discovery/src/Consul/ConsulServiceInstance.cs @@ -13,6 +13,9 @@ namespace Steeltoe.Discovery.Consul; /// internal sealed class ConsulServiceInstance : IServiceInstance { + private static readonly IReadOnlyList EmptyStringList = Array.Empty(); + private static readonly IReadOnlyDictionary EmptyStringDictionary = new Dictionary().AsReadOnly(); + /// public string ServiceId { get; } @@ -53,9 +56,9 @@ internal ConsulServiceInstance(ServiceEntry serviceEntry) ArgumentNullException.ThrowIfNull(serviceEntry); Host = ConsulServerUtils.FindHost(serviceEntry); - Tags = serviceEntry.Service.Tags; - Metadata = serviceEntry.Service.Meta.AsReadOnly(); - IsSecure = serviceEntry.Service.Meta != null && serviceEntry.Service.Meta.TryGetValue("secure", out string? secureString) && bool.Parse(secureString); + Tags = serviceEntry.Service.Tags ?? EmptyStringList; + Metadata = serviceEntry.Service.Meta?.AsReadOnly() ?? EmptyStringDictionary; + IsSecure = Metadata.TryGetValue("secure", out string? secureString) && secureString != null && bool.Parse(secureString); ServiceId = serviceEntry.Service.Service; InstanceId = serviceEntry.Service.ID; Port = serviceEntry.Service.Port; diff --git a/src/Discovery/test/Consul.Test/Discovery/ConsulServiceInstanceTest.cs b/src/Discovery/test/Consul.Test/Discovery/ConsulServiceInstanceTest.cs index ab4b65505b..a104511460 100644 --- a/src/Discovery/test/Consul.Test/Discovery/ConsulServiceInstanceTest.cs +++ b/src/Discovery/test/Consul.Test/Discovery/ConsulServiceInstanceTest.cs @@ -49,4 +49,24 @@ public void Constructor_Initializes() serviceInstance.NonSecureUri.Should().BeNull(); serviceInstance.SecureUri.Should().Be(serviceInstance.Uri); } + + [Fact] + public void Constructor_accepts_null_tags_and_meta() + { + var healthService = new ServiceEntry + { + Service = new AgentService + { + Service = "ServiceId", + ID = "Instance1", + Address = "foo.bar.com", + Port = 1234 + } + }; + + var serviceInstance = new ConsulServiceInstance(healthService); + + serviceInstance.Tags.Should().BeEmpty(); + serviceInstance.Metadata.Should().BeEmpty(); + } }