Merge branch '3.0.x'

This commit is contained in:
Ryan Baxter
2023-08-10 13:59:50 -04:00
2 changed files with 37 additions and 13 deletions

View File

@@ -50,6 +50,8 @@ import org.springframework.core.log.LogAccessor;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import static org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryConstants.UNSET_PORT_NAME;
/**
* @author wind57
*/
@@ -199,20 +201,12 @@ final class Fabric8KubernetesDiscoveryClientUtils {
static LinkedHashMap<String, Integer> endpointSubsetPortsData(EndpointSubset endpointSubset) {
LinkedHashMap<String, Integer> result = new LinkedHashMap<>();
List<EndpointPort> endpointPorts = endpointSubset.getPorts();
// this is most probably not a needed if statement, but it preserves the
// previous logic before I refactored the code. In particular, this takes care of
// the fact that an EndpointsPort name could be missing.
if (endpointPorts.size() == 1) {
result.put(endpointPorts.get(0).getName(), endpointPorts.get(0).getPort());
return result;
}
endpointSubset.getPorts().forEach(port -> {
if (StringUtils.hasText(port.getName())) {
result.put(port.getName(), port.getPort());
}
// a service is allowed to not set a port name for a single entry.
// two ports without name can not be deployed, as this in an error
String portName = StringUtils.hasText(port.getName()) ? port.getName() : UNSET_PORT_NAME;
Integer portNumber = port.getPort();
result.put(portName, portNumber);
});
return result;
}

View File

@@ -16,6 +16,7 @@
package org.springframework.cloud.kubernetes.fabric8.discovery;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -36,6 +37,7 @@ import org.springframework.cloud.kubernetes.commons.KubernetesNamespaceProvider;
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
import org.springframework.mock.env.MockEnvironment;
import static org.springframework.cloud.kubernetes.fabric8.discovery.Fabric8KubernetesDiscoveryClientUtils.endpointSubsetPortsData;
import static org.springframework.cloud.kubernetes.fabric8.discovery.Fabric8KubernetesDiscoveryClientUtils.services;
/**
@@ -310,6 +312,34 @@ class Fabric8KubernetesDiscoveryClientUtilsTests {
Assertions.assertEquals(portsData.get("http"), "8081");
}
@Test
void endpointSubsetPortsDataWithoutPorts() {
EndpointSubset endpointSubset = new EndpointSubsetBuilder().build();
LinkedHashMap<String, Integer> result = endpointSubsetPortsData(endpointSubset);
Assertions.assertEquals(result.size(), 0);
}
@Test
void endpointSubsetPortsDataSinglePort() {
EndpointSubset endpointSubset = new EndpointSubsetBuilder()
.withPorts(new EndpointPortBuilder().withName("name").withPort(80).build()).build();
LinkedHashMap<String, Integer> result = endpointSubsetPortsData(endpointSubset);
Assertions.assertEquals(result.size(), 1);
Assertions.assertEquals(result.get("name"), 80);
}
@Test
void endpointSubsetPortsDataSinglePortNoName() {
EndpointSubset endpointSubset = new EndpointSubsetBuilder()
.withPorts(new EndpointPortBuilder().withPort(80).build()).build();
LinkedHashMap<String, Integer> result = endpointSubsetPortsData(endpointSubset);
Assertions.assertEquals(result.size(), 1);
Assertions.assertEquals(result.get("<unset>"), 80);
}
private void service(String name, String namespace, Map<String, String> labels) {
Service service = new ServiceBuilder().withNewMetadata().withName(name).withLabels(labels)
.withNamespace(namespace).and().build();