diff --git a/docs/src/main/asciidoc/spring-cloud-kubernetes.adoc b/docs/src/main/asciidoc/spring-cloud-kubernetes.adoc index 83839184..994b8eaf 100644 --- a/docs/src/main/asciidoc/spring-cloud-kubernetes.adoc +++ b/docs/src/main/asciidoc/spring-cloud-kubernetes.adoc @@ -22,6 +22,8 @@ include::pod-health-indicator.adoc[] include::leader-election.adoc[] +include::load-balancer.adoc[] + include::security-service-accounts.adoc[] include::service-registry.adoc[] diff --git a/spring-cloud-kubernetes-dependencies/pom.xml b/spring-cloud-kubernetes-dependencies/pom.xml index 3ed5384a..6262bc1f 100644 --- a/spring-cloud-kubernetes-dependencies/pom.xml +++ b/spring-cloud-kubernetes-dependencies/pom.xml @@ -34,6 +34,7 @@ 1.4.0.Final 1.15.2 + 0.13.0 4.10.3 1.1.1 0.1.2 @@ -142,6 +143,18 @@ ${arquillian-cube.version} test + + io.specto + hoverfly-java-junit5 + ${hoverfly.version} + test + + + io.specto + hoverfly-java + ${hoverfly.version} + test + io.fabric8 diff --git a/spring-cloud-kubernetes-integration-tests/load-balancer/pom.xml b/spring-cloud-kubernetes-integration-tests/load-balancer/pom.xml index 218b288f..a89caea8 100644 --- a/spring-cloud-kubernetes-integration-tests/load-balancer/pom.xml +++ b/spring-cloud-kubernetes-integration-tests/load-balancer/pom.xml @@ -34,13 +34,11 @@ io.specto hoverfly-java-junit5 - 0.13.0 test io.specto hoverfly-java - 0.13.0 test diff --git a/spring-cloud-kubernetes-integration-tests/load-balancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/LoadBalancerAllNamespacesTests.java b/spring-cloud-kubernetes-integration-tests/load-balancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/LoadBalancerAllNamespacesTests.java index aeb17ada..2988f47f 100644 --- a/spring-cloud-kubernetes-integration-tests/load-balancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/LoadBalancerAllNamespacesTests.java +++ b/spring-cloud-kubernetes-integration-tests/load-balancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/LoadBalancerAllNamespacesTests.java @@ -45,7 +45,7 @@ public class LoadBalancerAllNamespacesTests { static KubernetesClient client; @BeforeAll - public static void setup() { + static void setup() { System.setProperty(Config.KUBERNETES_MASTER_SYSTEM_PROPERTY, client.getConfiguration().getMasterUrl()); System.setProperty(Config.KUBERNETES_TRUST_CERT_SYSTEM_PROPERTY, "true"); @@ -57,7 +57,7 @@ public class LoadBalancerAllNamespacesTests { } @Test - public void testLoadBalancerDifferentNamespace() { + void testLoadBalancerDifferentNamespace() { createTestData("service-b", "b"); String response = restTemplate.getForObject("http://service-b/greeting", String.class); diff --git a/spring-cloud-kubernetes-integration-tests/load-balancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/LoadBalancerTests.java b/spring-cloud-kubernetes-integration-tests/load-balancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/LoadBalancerTests.java index 0607ad50..8500cdab 100644 --- a/spring-cloud-kubernetes-integration-tests/load-balancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/LoadBalancerTests.java +++ b/spring-cloud-kubernetes-integration-tests/load-balancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/LoadBalancerTests.java @@ -43,7 +43,7 @@ public class LoadBalancerTests { static KubernetesClient client; @BeforeAll - public static void setup() { + static void setup() { System.setProperty(Config.KUBERNETES_MASTER_SYSTEM_PROPERTY, client.getConfiguration().getMasterUrl()); System.setProperty(Config.KUBERNETES_TRUST_CERT_SYSTEM_PROPERTY, "true"); @@ -55,7 +55,7 @@ public class LoadBalancerTests { } @Test - public void testLoadBalancerSameNamespace() { + void testLoadBalancerSameNamespace() { createTestData("service-a", "test"); String response = restTemplate.getForObject("http://service-a/greeting", String.class); @@ -64,7 +64,7 @@ public class LoadBalancerTests { } @Test - public void testLoadBalancerDifferentNamespace() { + void testLoadBalancerDifferentNamespace() { createTestData("service-b", "b"); Assertions.assertThrows(IllegalStateException.class, () -> restTemplate .getForObject("http://service-b/greeting", String.class)); diff --git a/spring-cloud-kubernetes-integration-tests/load-balancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/LoadBalancerWithServiceTests.java b/spring-cloud-kubernetes-integration-tests/load-balancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/LoadBalancerWithServiceTests.java index 3430a7db..ae1634fb 100644 --- a/spring-cloud-kubernetes-integration-tests/load-balancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/LoadBalancerWithServiceTests.java +++ b/spring-cloud-kubernetes-integration-tests/load-balancer/src/test/java/org/springframework/cloud/kubernetes/loadbalancer/LoadBalancerWithServiceTests.java @@ -1,3 +1,19 @@ +/* + * Copyright 2013-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.springframework.cloud.kubernetes.loadbalancer; import java.util.HashMap; @@ -26,10 +42,8 @@ import static io.specto.hoverfly.junit.dsl.HttpBodyConverter.json; import static io.specto.hoverfly.junit.dsl.ResponseCreators.success; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@TestPropertySource(properties = { - "spring.cloud.kubernetes.loadbalancer.mode=SERVICE", - "spring.cloud.kubernetes.loadbalancer.enabled=true" -}) +@TestPropertySource(properties = { "spring.cloud.kubernetes.loadbalancer.mode=SERVICE", + "spring.cloud.kubernetes.loadbalancer.enabled=true" }) @EnableKubernetesMockClient @ExtendWith(HoverflyExtension.class) public class LoadBalancerWithServiceTests { @@ -40,50 +54,41 @@ public class LoadBalancerWithServiceTests { static KubernetesClient client; @BeforeAll - public static void setup() { + static void setup() { System.setProperty(Config.KUBERNETES_MASTER_SYSTEM_PROPERTY, - client.getConfiguration().getMasterUrl()); + client.getConfiguration().getMasterUrl()); System.setProperty(Config.KUBERNETES_TRUST_CERT_SYSTEM_PROPERTY, "true"); System.setProperty(Config.KUBERNETES_AUTH_TRYKUBECONFIG_SYSTEM_PROPERTY, "false"); System.setProperty(Config.KUBERNETES_AUTH_TRYSERVICEACCOUNT_SYSTEM_PROPERTY, - "false"); + "false"); System.setProperty(Config.KUBERNETES_HTTP2_DISABLE, "true"); System.setProperty(Config.KUBERNETES_NAMESPACE_SYSTEM_PROPERTY, "test"); } @Test - public void testLoadBalancerInServiceMode(Hoverfly hoverfly) { + void testLoadBalancerInServiceMode(Hoverfly hoverfly) { hoverfly.simulate( - dsl(service("http://service-a.test.svc.cluster.local:8080") - .get("/greeting") - .willReturn(success().body("greeting"))), - dsl(service(RequestFieldMatcher.newRegexMatcher("(kubernetes.docker.internal).*")) - .post("/api/v1/namespaces/test/services").anyBody() - .willReturn(success() - .body(json(buildService("service-a", 8080, "test")))) - .get("/api/v1/namespaces/test/services/service-a") - .willReturn(success() - .body(json(buildService("service-a", 8080, "test")))))); + dsl(service("http://service-a.test.svc.cluster.local:8080") + .get("/greeting").willReturn(success().body("greeting"))), + dsl(service(RequestFieldMatcher + .newRegexMatcher("(kubernetes.docker.internal).*")) + .post("/api/v1/namespaces/test/services").anyBody() + .willReturn(success().body( + json(buildService("service-a", 8080, "test")))) + .get("/api/v1/namespaces/test/services/service-a") + .willReturn(success().body( + json(buildService("service-a", 8080, "test")))))); String response = restTemplate.getForObject("http://service-a/greeting", - String.class); + String.class); Assertions.assertNotNull(response); Assertions.assertEquals("greeting", response); } private Service buildService(String name, int port, String namespace) { - return new ServiceBuilder() - .withNewMetadata() - .withName(name) - .withNamespace(namespace) - .withLabels(new HashMap<>()) - .withAnnotations(new HashMap<>()) - .endMetadata() - .withNewSpec() - .addNewPort() - .withPort(port) - .endPort() - .endSpec() - .build(); + return new ServiceBuilder().withNewMetadata().withName(name) + .withNamespace(namespace).withLabels(new HashMap<>()) + .withAnnotations(new HashMap<>()).endMetadata().withNewSpec().addNewPort() + .withPort(port).endPort().endSpec().build(); } }