Move KubernetesDiscoveryProperties to record (#1096)
This commit is contained in:
@@ -94,11 +94,11 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi
|
||||
public List<ServiceInstance> getInstances(String serviceId) {
|
||||
Assert.notNull(serviceId, "[Assertion failed] - the object argument must not be null");
|
||||
|
||||
if (!StringUtils.hasText(namespace) && !properties.isAllNamespaces()) {
|
||||
if (!StringUtils.hasText(namespace) && !properties.allNamespaces()) {
|
||||
log.warn("Namespace is null or empty, this may cause issues looking up services");
|
||||
}
|
||||
|
||||
V1Service service = properties.isAllNamespaces() ? this.serviceLister.list().stream()
|
||||
V1Service service = properties.allNamespaces() ? this.serviceLister.list().stream()
|
||||
.filter(svc -> serviceId.equals(svc.getMetadata().getName())).findFirst().orElse(null)
|
||||
: this.serviceLister.namespace(this.namespace).get(serviceId);
|
||||
if (service == null || !matchServiceLabels(service)) {
|
||||
@@ -107,20 +107,20 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi
|
||||
}
|
||||
|
||||
Map<String, String> svcMetadata = new HashMap<>();
|
||||
if (this.properties.getMetadata() != null) {
|
||||
if (this.properties.getMetadata().addLabels()) {
|
||||
if (this.properties.metadata() != null) {
|
||||
if (this.properties.metadata().addLabels()) {
|
||||
if (service.getMetadata() != null && service.getMetadata().getLabels() != null) {
|
||||
String labelPrefix = this.properties.getMetadata().labelsPrefix() != null
|
||||
? this.properties.getMetadata().labelsPrefix() : "";
|
||||
String labelPrefix = this.properties.metadata().labelsPrefix() != null
|
||||
? this.properties.metadata().labelsPrefix() : "";
|
||||
service.getMetadata().getLabels().entrySet().stream()
|
||||
.filter(e -> e.getKey().startsWith(labelPrefix))
|
||||
.forEach(e -> svcMetadata.put(e.getKey(), e.getValue()));
|
||||
}
|
||||
}
|
||||
if (this.properties.getMetadata().addAnnotations()) {
|
||||
if (this.properties.metadata().addAnnotations()) {
|
||||
if (service.getMetadata() != null && service.getMetadata().getAnnotations() != null) {
|
||||
String annotationPrefix = this.properties.getMetadata().annotationsPrefix() != null
|
||||
? this.properties.getMetadata().annotationsPrefix() : "";
|
||||
String annotationPrefix = this.properties.metadata().annotationsPrefix() != null
|
||||
? this.properties.metadata().annotationsPrefix() : "";
|
||||
service.getMetadata().getAnnotations().entrySet().stream()
|
||||
.filter(e -> e.getKey().startsWith(annotationPrefix))
|
||||
.forEach(e -> svcMetadata.put(e.getKey(), e.getValue()));
|
||||
@@ -140,13 +140,13 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi
|
||||
discoveredPrimaryPortName = Optional
|
||||
.ofNullable(service.getMetadata().getLabels().get(PRIMARY_PORT_NAME_LABEL_KEY));
|
||||
}
|
||||
final String primaryPortName = discoveredPrimaryPortName.orElse(this.properties.getPrimaryPortName());
|
||||
final String primaryPortName = discoveredPrimaryPortName.orElse(this.properties.primaryPortName());
|
||||
|
||||
return ep.getSubsets().stream().filter(subset -> subset.getPorts() != null && subset.getPorts().size() > 0) // safeguard
|
||||
.flatMap(subset -> {
|
||||
Map<String, String> metadata = new HashMap<>(svcMetadata);
|
||||
List<V1EndpointPort> endpointPorts = subset.getPorts();
|
||||
if (this.properties.getMetadata() != null && this.properties.getMetadata().addPorts()) {
|
||||
if (this.properties.metadata() != null && this.properties.metadata().addPorts()) {
|
||||
endpointPorts.forEach(
|
||||
p -> metadata.put(StringUtils.hasText(p.getName()) ? p.getName() : UNSET_PORT_NAME,
|
||||
Integer.toString(p.getPort())));
|
||||
@@ -155,7 +155,7 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi
|
||||
if (addresses == null) {
|
||||
addresses = new ArrayList<>();
|
||||
}
|
||||
if (this.properties.isIncludeNotReadyAddresses()
|
||||
if (this.properties.includeNotReadyAddresses()
|
||||
&& !CollectionUtils.isEmpty(subset.getNotReadyAddresses())) {
|
||||
addresses.addAll(subset.getNotReadyAddresses());
|
||||
}
|
||||
@@ -205,7 +205,7 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi
|
||||
|
||||
@Override
|
||||
public List<String> getServices() {
|
||||
List<V1Service> services = this.properties.isAllNamespaces() ? this.serviceLister.list()
|
||||
List<V1Service> services = this.properties.allNamespaces() ? this.serviceLister.list()
|
||||
: this.serviceLister.namespace(this.namespace).list();
|
||||
return services.stream().filter(this::matchServiceLabels).map(s -> s.getMetadata().getName())
|
||||
.collect(Collectors.toList());
|
||||
@@ -214,12 +214,11 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
this.sharedInformerFactory.startAllRegisteredInformers();
|
||||
if (!Wait.poll(Duration.ofSeconds(1), Duration.ofSeconds(this.properties.getCacheLoadingTimeoutSeconds()),
|
||||
() -> {
|
||||
log.info("Waiting for the cache of informers to be fully loaded..");
|
||||
return this.informersReadyFunc.get();
|
||||
})) {
|
||||
if (this.properties.isWaitCacheReady()) {
|
||||
if (!Wait.poll(Duration.ofSeconds(1), Duration.ofSeconds(this.properties.cacheLoadingTimeoutSeconds()), () -> {
|
||||
log.info("Waiting for the cache of informers to be fully loaded..");
|
||||
return this.informersReadyFunc.get();
|
||||
})) {
|
||||
if (this.properties.waitCacheReady()) {
|
||||
throw new IllegalStateException(
|
||||
"Timeout waiting for informers cache to be ready, is the kubernetes service up?");
|
||||
}
|
||||
@@ -235,8 +234,8 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi
|
||||
private boolean matchServiceLabels(V1Service service) {
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Kubernetes Service Label Properties:");
|
||||
if (this.properties.getServiceLabels() != null) {
|
||||
this.properties.getServiceLabels().forEach((key, value) -> log.debug(key + ":" + value));
|
||||
if (this.properties.serviceLabels() != null) {
|
||||
this.properties.serviceLabels().forEach((key, value) -> log.debug(key + ":" + value));
|
||||
}
|
||||
log.debug("Service " + service.getMetadata().getName() + " labels:");
|
||||
if (service.getMetadata() != null && service.getMetadata().getLabels() != null) {
|
||||
@@ -247,13 +246,13 @@ public class KubernetesInformerDiscoveryClient implements DiscoveryClient, Initi
|
||||
if (service.getMetadata() == null) {
|
||||
return false;
|
||||
}
|
||||
if (properties.getServiceLabels() == null || properties.getServiceLabels().isEmpty()) {
|
||||
if (properties.serviceLabels() == null || properties.serviceLabels().isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
return properties.getServiceLabels().keySet().stream()
|
||||
return properties.serviceLabels().keySet().stream()
|
||||
.allMatch(k -> service.getMetadata().getLabels() != null
|
||||
&& service.getMetadata().getLabels().containsKey(k)
|
||||
&& service.getMetadata().getLabels().get(k).equals(properties.getServiceLabels().get(k)));
|
||||
&& service.getMetadata().getLabels().get(k).equals(properties.serviceLabels().get(k)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.springframework.cloud.kubernetes.client.discovery;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import io.kubernetes.client.informer.SharedInformerFactory;
|
||||
import io.kubernetes.client.informer.cache.Cache;
|
||||
@@ -39,9 +40,6 @@ import org.springframework.cloud.kubernetes.commons.discovery.DefaultKubernetesS
|
||||
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class KubernetesInformerDiscoveryClientTests {
|
||||
@@ -49,9 +47,6 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
@Mock
|
||||
private SharedInformerFactory sharedInformerFactory;
|
||||
|
||||
@Mock
|
||||
private KubernetesDiscoveryProperties kubernetesDiscoveryProperties;
|
||||
|
||||
private static final V1Service testService1 = new V1Service()
|
||||
.metadata(new V1ObjectMeta().name("test-svc-1").namespace("namespace1"))
|
||||
.spec(new V1ServiceSpec().loadBalancerIP("1.1.1.1")).status(new V1ServiceStatus());
|
||||
@@ -112,8 +107,8 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
Lister<V1Service> serviceLister = setupServiceLister(testService1);
|
||||
Lister<V1Endpoints> endpointsLister = setupEndpointsLister(testEndpointWithUnsetPortName);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(true);
|
||||
when(kubernetesDiscoveryProperties.getMetadata()).thenReturn(KubernetesDiscoveryProperties.Metadata.DEFAULT);
|
||||
KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, true,
|
||||
true, 60, false, null, Set.of(), Map.of(), null, KubernetesDiscoveryProperties.Metadata.DEFAULT, 0);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("",
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties);
|
||||
@@ -129,15 +124,12 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
public void testDiscoveryGetServicesAllNamespaceShouldWork() {
|
||||
Lister<V1Service> serviceLister = setupServiceLister(testService1, testService2);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(true);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("",
|
||||
sharedInformerFactory, serviceLister, null, null, null, kubernetesDiscoveryProperties);
|
||||
sharedInformerFactory, serviceLister, null, null, null, KubernetesDiscoveryProperties.DEFAULT);
|
||||
|
||||
assertThat(discoveryClient.getServices().toArray()).containsOnly(testService1.getMetadata().getName(),
|
||||
testService2.getMetadata().getName());
|
||||
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -148,14 +140,14 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
labels.put("k8s", "true");
|
||||
labels.put("spring", "true");
|
||||
|
||||
when(kubernetesDiscoveryProperties.getServiceLabels()).thenReturn(labels);
|
||||
KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, true,
|
||||
true, 60, false, null, Set.of(), labels, null, null, 0);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("",
|
||||
sharedInformerFactory, serviceLister, null, null, null, kubernetesDiscoveryProperties);
|
||||
|
||||
assertThat(discoveryClient.getServices().toArray()).containsOnly(testService3.getMetadata().getName());
|
||||
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -167,8 +159,8 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
labels.put("k8s", "true");
|
||||
labels.put("spring", "true");
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(true);
|
||||
when(kubernetesDiscoveryProperties.getServiceLabels()).thenReturn(labels);
|
||||
KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, true,
|
||||
true, 60, false, null, Set.of(), labels, null, null, 0);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("",
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties);
|
||||
@@ -183,14 +175,11 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
public void testDiscoveryGetServicesOneNamespaceShouldWork() {
|
||||
Lister<V1Service> serviceLister = setupServiceLister(testService1, testService2);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1",
|
||||
sharedInformerFactory, serviceLister, null, null, null, kubernetesDiscoveryProperties);
|
||||
sharedInformerFactory, serviceLister, null, null, null, KubernetesDiscoveryProperties.DEFAULT);
|
||||
|
||||
assertThat(discoveryClient.getServices().toArray()).containsOnly(testService1.getMetadata().getName());
|
||||
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -198,16 +187,14 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
Lister<V1Service> serviceLister = setupServiceLister(testService1, testService2);
|
||||
Lister<V1Endpoints> endpointsLister = setupEndpointsLister(testEndpoints1);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(true);
|
||||
KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, true,
|
||||
true, 60, false, null, Set.of(), null, null, null, 0);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("",
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties);
|
||||
|
||||
assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("",
|
||||
"test-svc-1", "2.2.2.2", 8080, new HashMap<>(), false, "namespace1", null));
|
||||
|
||||
verify(kubernetesDiscoveryProperties, times(2)).isAllNamespaces();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -215,15 +202,14 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
Lister<V1Service> serviceLister = setupServiceLister(testService1, testService2);
|
||||
Lister<V1Endpoints> endpointsLister = setupEndpointsLister(testEndpoints1);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false);
|
||||
KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false,
|
||||
true, 60, false, null, Set.of(), null, null, null, 0);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1",
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties);
|
||||
|
||||
assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("",
|
||||
"test-svc-1", "2.2.2.2", 8080, new HashMap<>(), false, "namespace1", null));
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -231,15 +217,11 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
Lister<V1Service> serviceLister = setupServiceLister(testService1);
|
||||
Lister<V1Endpoints> endpointsLister = setupEndpointsLister(testEndpointWithoutReadyAddresses);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1",
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties);
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null,
|
||||
KubernetesDiscoveryProperties.DEFAULT);
|
||||
|
||||
assertThat(discoveryClient.getInstances("test-svc-1")).isEmpty();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isIncludeNotReadyAddresses();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -247,17 +229,14 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
Lister<V1Service> serviceLister = setupServiceLister(testService1);
|
||||
Lister<V1Endpoints> endpointsLister = setupEndpointsLister(testEndpointWithoutReadyAddresses);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false);
|
||||
when(kubernetesDiscoveryProperties.isIncludeNotReadyAddresses()).thenReturn(true);
|
||||
KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false,
|
||||
true, 60, true, null, Set.of(), null, null, null, 0);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1",
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties);
|
||||
|
||||
assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("",
|
||||
"test-svc-1", "2.2.2.2", 8080, new HashMap<>(), false, "namespace1", null));
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isIncludeNotReadyAddresses();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -265,13 +244,11 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
Lister<V1Service> serviceLister = setupServiceLister(testService1);
|
||||
Lister<V1Endpoints> endpointsLister = setupEndpointsLister();
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1",
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties);
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null,
|
||||
KubernetesDiscoveryProperties.DEFAULT);
|
||||
|
||||
assertThat(discoveryClient.getInstances("test-svc-1")).isEmpty();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -279,13 +256,11 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
Lister<V1Service> serviceLister = setupServiceLister(testService1);
|
||||
Lister<V1Endpoints> endpointsLister = setupEndpointsLister(testEndpointWithoutPorts);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1",
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties);
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null,
|
||||
KubernetesDiscoveryProperties.DEFAULT);
|
||||
|
||||
assertThat(discoveryClient.getInstances("test-svc-1")).isEmpty();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -295,17 +270,14 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
.namespace("namespace1").putLabelsItem("primary-port-name", "https")));
|
||||
Lister<V1Endpoints> endpointsLister = setupEndpointsLister(testEndpointWithMultiplePorts);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false);
|
||||
KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false,
|
||||
true, 60, false, null, Set.of(), null, null, null, 0);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1",
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties);
|
||||
|
||||
assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("",
|
||||
"test-svc-1", "1.1.1.1", 443, new HashMap<>(), false, "namespace1", null));
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isIncludeNotReadyAddresses();
|
||||
// Reset metadata
|
||||
testService1.metadata(oldMetadata);
|
||||
}
|
||||
|
||||
@@ -317,16 +289,14 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
Lister<V1Endpoints> endpointsLister = setupEndpointsLister(
|
||||
testEndpointWithMultiplePortsWithoutSupportedPortNames);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false);
|
||||
KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false,
|
||||
true, 60, false, null, Set.of(), null, null, null, 0);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1",
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties);
|
||||
|
||||
assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("",
|
||||
"test-svc-1", "1.1.1.1", 80, new HashMap<>(), false, "namespace1", null));
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName();
|
||||
// Reset testService1 metadata
|
||||
testService1.metadata(oldMetadata);
|
||||
}
|
||||
|
||||
@@ -335,17 +305,14 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
Lister<V1Service> serviceLister = setupServiceLister(testService1);
|
||||
Lister<V1Endpoints> endpointsLister = setupEndpointsLister(testEndpointWithMultiplePorts);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false);
|
||||
when(kubernetesDiscoveryProperties.getPrimaryPortName()).thenReturn("https");
|
||||
KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false,
|
||||
true, 60, false, null, Set.of(), null, "https", null, 0);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1",
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties);
|
||||
|
||||
assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("",
|
||||
"test-svc-1", "1.1.1.1", 443, new HashMap<>(), false, "namespace1", null));
|
||||
verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isIncludeNotReadyAddresses();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -354,16 +321,14 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
Lister<V1Endpoints> endpointsLister = setupEndpointsLister(
|
||||
testEndpointWithMultiplePortsWithoutSupportedPortNames);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false);
|
||||
when(kubernetesDiscoveryProperties.getPrimaryPortName()).thenReturn("oops");
|
||||
KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false,
|
||||
true, 60, false, null, Set.of(), null, "oops", null, 0);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1",
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties);
|
||||
|
||||
assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("",
|
||||
"test-svc-1", "1.1.1.1", 80, new HashMap<>(), false, "namespace1", null));
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -371,15 +336,14 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
Lister<V1Service> serviceLister = setupServiceLister(testService1);
|
||||
Lister<V1Endpoints> endpointsLister = setupEndpointsLister(testEndpointWithMultiplePorts);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false);
|
||||
KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false,
|
||||
true, 60, false, null, Set.of(), null, null, null, 0);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1",
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties);
|
||||
|
||||
assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("",
|
||||
"test-svc-1", "1.1.1.1", 443, new HashMap<>(), false, "namespace1", null));
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -387,15 +351,14 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
Lister<V1Service> serviceLister = setupServiceLister(testService1);
|
||||
Lister<V1Endpoints> endpointsLister = setupEndpointsLister(testEndpointWithMultiplePortsWithoutHttps);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false);
|
||||
KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false,
|
||||
true, 60, false, null, Set.of(), null, null, null, 0);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1",
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties);
|
||||
|
||||
assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("",
|
||||
"test-svc-1", "1.1.1.1", 80, new HashMap<>(), false, "namespace1", null));
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -404,15 +367,14 @@ public class KubernetesInformerDiscoveryClientTests {
|
||||
Lister<V1Endpoints> endpointsLister = setupEndpointsLister(
|
||||
testEndpointWithMultiplePortsWithoutSupportedPortNames);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false);
|
||||
KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false,
|
||||
true, 60, false, null, Set.of(), null, null, null, 0);
|
||||
|
||||
KubernetesInformerDiscoveryClient discoveryClient = new KubernetesInformerDiscoveryClient("namespace1",
|
||||
sharedInformerFactory, serviceLister, endpointsLister, null, null, kubernetesDiscoveryProperties);
|
||||
|
||||
assertThat(discoveryClient.getInstances("test-svc-1")).containsOnly(new DefaultKubernetesServiceInstance("",
|
||||
"test-svc-1", "1.1.1.1", 80, new HashMap<>(), false, "namespace1", null));
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
verify(kubernetesDiscoveryProperties, times(1)).getPrimaryPortName();
|
||||
}
|
||||
|
||||
private Lister<V1Service> setupServiceLister(V1Service... services) {
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package org.springframework.cloud.kubernetes.client.discovery.reactive;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Set;
|
||||
|
||||
import io.kubernetes.client.informer.SharedInformerFactory;
|
||||
import io.kubernetes.client.informer.cache.Cache;
|
||||
@@ -41,8 +42,6 @@ import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscover
|
||||
import org.springframework.mock.env.MockEnvironment;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
/**
|
||||
@@ -54,9 +53,6 @@ public class KubernetesInformerReactiveDiscoveryClientTests {
|
||||
@Mock
|
||||
private SharedInformerFactory sharedInformerFactory;
|
||||
|
||||
@Mock
|
||||
private KubernetesDiscoveryProperties kubernetesDiscoveryProperties;
|
||||
|
||||
private static final V1Service testService1 = new V1Service()
|
||||
.metadata(new V1ObjectMeta().name("test-svc-1").namespace("namespace1"))
|
||||
.spec(new V1ServiceSpec().loadBalancerIP("1.1.1.1")).status(new V1ServiceStatus());
|
||||
@@ -74,35 +70,29 @@ public class KubernetesInformerReactiveDiscoveryClientTests {
|
||||
public void testDiscoveryGetServicesAllNamespaceShouldWork() {
|
||||
Lister<V1Service> serviceLister = setupServiceLister(testService1, testService2);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(true);
|
||||
|
||||
KubernetesInformerReactiveDiscoveryClient discoveryClient = new KubernetesInformerReactiveDiscoveryClient(
|
||||
new KubernetesNamespaceProvider(new MockEnvironment()), sharedInformerFactory, serviceLister, null,
|
||||
null, null, kubernetesDiscoveryProperties);
|
||||
null, null, KubernetesDiscoveryProperties.DEFAULT);
|
||||
|
||||
StepVerifier.create(discoveryClient.getServices())
|
||||
.expectNext(testService1.getMetadata().getName(), testService2.getMetadata().getName()).expectComplete()
|
||||
.verify();
|
||||
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDiscoveryGetServicesOneNamespaceShouldWork() {
|
||||
Lister<V1Service> serviceLister = setupServiceLister(testService1, testService2);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false);
|
||||
|
||||
KubernetesNamespaceProvider kubernetesNamespaceProvider = mock(KubernetesNamespaceProvider.class);
|
||||
when(kubernetesNamespaceProvider.getNamespace()).thenReturn("namespace1");
|
||||
KubernetesInformerReactiveDiscoveryClient discoveryClient = new KubernetesInformerReactiveDiscoveryClient(
|
||||
kubernetesNamespaceProvider, sharedInformerFactory, serviceLister, null, null, null,
|
||||
kubernetesDiscoveryProperties);
|
||||
KubernetesDiscoveryProperties.DEFAULT);
|
||||
|
||||
StepVerifier.create(discoveryClient.getServices()).expectNext(testService1.getMetadata().getName())
|
||||
.expectComplete().verify();
|
||||
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -110,7 +100,8 @@ public class KubernetesInformerReactiveDiscoveryClientTests {
|
||||
Lister<V1Service> serviceLister = setupServiceLister(testService1, testService2);
|
||||
Lister<V1Endpoints> endpointsLister = setupEndpointsLister(testEndpoints1);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(true);
|
||||
KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, true,
|
||||
true, 60, false, null, Set.of(), null, null, null, 0);
|
||||
|
||||
KubernetesInformerReactiveDiscoveryClient discoveryClient = new KubernetesInformerReactiveDiscoveryClient(
|
||||
new KubernetesNamespaceProvider(new MockEnvironment()), sharedInformerFactory, serviceLister,
|
||||
@@ -121,7 +112,6 @@ public class KubernetesInformerReactiveDiscoveryClientTests {
|
||||
"test-svc-1", "2.2.2.2", 8080, new HashMap<>(), false, "namespace1", null))
|
||||
.expectComplete().verify();
|
||||
|
||||
verify(kubernetesDiscoveryProperties, times(2)).isAllNamespaces();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -129,7 +119,9 @@ public class KubernetesInformerReactiveDiscoveryClientTests {
|
||||
Lister<V1Service> serviceLister = setupServiceLister(testService1, testService2);
|
||||
Lister<V1Endpoints> endpointsLister = setupEndpointsLister(testEndpoints1);
|
||||
|
||||
when(kubernetesDiscoveryProperties.isAllNamespaces()).thenReturn(false);
|
||||
KubernetesDiscoveryProperties kubernetesDiscoveryProperties = new KubernetesDiscoveryProperties(true, false,
|
||||
true, 60, false, null, Set.of(), null, null, null, 0);
|
||||
|
||||
KubernetesNamespaceProvider kubernetesNamespaceProvider = mock(KubernetesNamespaceProvider.class);
|
||||
when(kubernetesNamespaceProvider.getNamespace()).thenReturn("namespace1");
|
||||
KubernetesInformerReactiveDiscoveryClient discoveryClient = new KubernetesInformerReactiveDiscoveryClient(
|
||||
@@ -141,7 +133,6 @@ public class KubernetesInformerReactiveDiscoveryClientTests {
|
||||
"test-svc-1", "2.2.2.2", 8080, new HashMap<>(), false, "namespace1", null))
|
||||
.expectComplete().verify();
|
||||
|
||||
verify(kubernetesDiscoveryProperties, times(1)).isAllNamespaces();
|
||||
}
|
||||
|
||||
private Lister<V1Service> setupServiceLister(V1Service... services) {
|
||||
|
||||
Reference in New Issue
Block a user