Fix 513 (#1262)
This commit is contained in:
@@ -116,6 +116,11 @@ public record DefaultKubernetesServiceInstance(String instanceId, String service
|
||||
if (port == -1) {
|
||||
return URI.create(host);
|
||||
}
|
||||
|
||||
// assume an endpoint without ports
|
||||
if (port == 0) {
|
||||
return URI.create(scheme + "://" + host);
|
||||
}
|
||||
return URI.create(scheme + "://" + host + ":" + port);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,6 +79,12 @@ final class KubernetesDiscoveryClientUtils {
|
||||
Service service) {
|
||||
|
||||
List<EndpointPort> endpointPorts = endpointSubset.getPorts();
|
||||
|
||||
if (endpointPorts.size() == 0) {
|
||||
LOG.debug(() -> "no ports found for service : " + serviceId + ", will return zero");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (endpointPorts.size() == 1) {
|
||||
int port = endpointPorts.get(0).getPort();
|
||||
LOG.debug(() -> "endpoint ports has a single entry, using port : " + port);
|
||||
|
||||
@@ -157,6 +157,23 @@ class KubernetesDiscoveryClientUtilsTests {
|
||||
Assertions.assertTrue(output.getOut().contains("will use primaryPortName : http for service with ID = abc"));
|
||||
}
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* - EndpointSubset has no ports.
|
||||
* </pre>
|
||||
*/
|
||||
@Test
|
||||
void testEndpointsPortNoPorts(CapturedOutput output) {
|
||||
EndpointSubset endpointSubset = new EndpointSubsetBuilder().build();
|
||||
String serviceId = "spring-k8s";
|
||||
KubernetesDiscoveryProperties properties = KubernetesDiscoveryProperties.DEFAULT;
|
||||
Service service = new ServiceBuilder().build();
|
||||
|
||||
Integer port = KubernetesDiscoveryClientUtils.endpointsPort(endpointSubset, serviceId, properties, service);
|
||||
Assertions.assertEquals(port, 0);
|
||||
Assertions.assertTrue(output.getOut().contains("no ports found for service : spring-k8s, will return zero"));
|
||||
}
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* - EndpointSubset has a single entry in getPorts.
|
||||
@@ -739,6 +756,30 @@ class KubernetesDiscoveryClientUtilsTests {
|
||||
Assertions.assertNull(defaultInstance.getCluster());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testNoPortsServiceInstance() {
|
||||
Service service = new ServiceBuilder()
|
||||
.withSpec(new ServiceSpecBuilder().withType("ClusterIP").build())
|
||||
.withMetadata(new ObjectMetaBuilder().withUid("123").build()).build();
|
||||
|
||||
EndpointAddress endpointAddress = new EndpointAddressBuilder().withIp("127.0.0.1").build();
|
||||
|
||||
ServiceInstance serviceInstance = KubernetesDiscoveryClientUtils.serviceInstance(null, service,
|
||||
endpointAddress, 0, "my-service", Map.of("a", "b"), "k8s", KubernetesDiscoveryProperties.DEFAULT, null);
|
||||
Assertions.assertTrue(serviceInstance instanceof DefaultKubernetesServiceInstance);
|
||||
DefaultKubernetesServiceInstance defaultInstance = (DefaultKubernetesServiceInstance) serviceInstance;
|
||||
Assertions.assertEquals(defaultInstance.getInstanceId(), "123");
|
||||
Assertions.assertEquals(defaultInstance.getServiceId(), "my-service");
|
||||
Assertions.assertEquals(defaultInstance.getHost(), "127.0.0.1");
|
||||
Assertions.assertEquals(defaultInstance.getScheme(), "http");
|
||||
Assertions.assertEquals(defaultInstance.getPort(), 0);
|
||||
Assertions.assertFalse(defaultInstance.isSecure());
|
||||
Assertions.assertEquals(defaultInstance.getUri().toASCIIString(), "http://127.0.0.1");
|
||||
Assertions.assertEquals(defaultInstance.getMetadata(), Map.of("a", "b"));
|
||||
Assertions.assertEquals(defaultInstance.getNamespace(), "k8s");
|
||||
Assertions.assertNull(defaultInstance.getCluster());
|
||||
}
|
||||
|
||||
private String filterOnK8sNamespaceAndType(Map<String, String> result) {
|
||||
return result.entrySet().stream().filter(en -> !en.getKey().contains("k8s_namespace"))
|
||||
.filter(en -> !en.getKey().equals("type"))
|
||||
|
||||
Reference in New Issue
Block a user