This is an automated email from the ASF dual-hosted git repository. orpiske pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push: new 47009b5 CAMEL-16839: fixed camel-kubernetes consumer tests (#5927) 47009b5 is described below commit 47009b5554d686d672149c8e1208c375c2d597a1 Author: Otavio Rodolfo Piske <orpi...@users.noreply.github.com> AuthorDate: Wed Aug 4 19:04:14 2021 +0200 CAMEL-16839: fixed camel-kubernetes consumer tests (#5927) - fixed namespaces consumer test - fixed config maps consumer test - fixed nodes consumer test - fixed pods consumer test - fixed replication controllers consumer test - fixed services consumer test - refactored custom resources consumer test - fixed usages of invalid query parameters in camel-kubernetes - converted to integration tests --- components/camel-kubernetes/README.md | 32 ++++++ .../kubernetes/KubernetesTestSupport.java | 16 ++- .../consumer/KubernetesNodesConsumerTest.java | 126 --------------------- .../KubernetesConfigMapsConsumerIT.java} | 97 +++++++++++----- .../KubernetesCustomResourcesConsumerIT.java} | 42 ++++--- .../KubernetesNamespacesConsumerIT.java} | 63 +++++++---- .../integration/KubernetesNodesConsumerIT.java | 91 +++++++++++++++ .../KubernetesPodsConsumerIT.java} | 104 ++++++++++------- ...ubernetesReplicationControllersConsumerIT.java} | 44 ++++--- .../KubernetesServicesConsumerIT.java} | 41 ++++--- 10 files changed, 386 insertions(+), 270 deletions(-) diff --git a/components/camel-kubernetes/README.md b/components/camel-kubernetes/README.md new file mode 100644 index 0000000..272c160 --- /dev/null +++ b/components/camel-kubernetes/README.md @@ -0,0 +1,32 @@ +# Camel Kubernetes + +# Running the tests + +This component contains unit and integration tests. Some of them - like the consumer ones - require a Kubernetes environment. + +It is possible to run the tests using Kind. To do so, follow these steps: + +1. Create a cluster: + +``` +kind cluster create +``` + +2. Get the auth token: + +``` +export KUBE_TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='default')].data.token}"|base64 --decode) +``` + +4. Get the host: + +``` +export KIND_PORT=$(docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}}{{(index $conf 0).HostPort}} {{end}}' kind-control-plane) +export KUBE_HOST=https://localhost:$KIND_PORT +``` + +5. Run the test: +``` +mvn -Dtest=KubernetesConfigMapsConsumerTest -Dkubernetes.test.auth="$KUBE_TOKEN" -Dkubernetes.test.host=$KUBE_HOST -Dkubernetes.test.host.k8s=true clean verify +``` + diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/KubernetesTestSupport.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/KubernetesTestSupport.java index b1a408b..ba8253c 100644 --- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/KubernetesTestSupport.java +++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/KubernetesTestSupport.java @@ -30,17 +30,21 @@ public class KubernetesTestSupport extends CamelTestSupport { protected String host; protected Logger log = LoggerFactory.getLogger(getClass()); - // The Camel-Kubernetes tests are based on vagrant fabric8-image - // https://github.com/fabric8io/fabric8-installer/tree/master/vagrant/openshift - // by running the vagrant image you'll have an environment with - // Openshift/Kubernetes installed + /* + * NOTE: The Camel-Kubernetes tests were originally meant to be run along with the vagrant fabric8-image + * https://github.com/fabric8io/fabric8-installer/tree/master/vagrant/openshift which would provide an + * environment with Openshift/Kubernetes installed. + * + * However, since that image is deprecated, you can also run the tests with kind. See the README.md file + * on the root of the component directory for details. + */ @Override @BeforeEach public void setUp() throws Exception { // INSERT credentials and host here - authToken = ""; - host = "https://192.168.99.100:8443"; + authToken = System.getProperty("kubernetes.test.auth"); + host = System.getProperty("kubernetes.test.host"); super.setUp(); } diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesNodesConsumerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesNodesConsumerTest.java deleted file mode 100644 index 7c2d168..0000000 --- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesNodesConsumerTest.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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 - * - * http://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.apache.camel.component.kubernetes.consumer; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import io.fabric8.kubernetes.api.model.Container; -import io.fabric8.kubernetes.api.model.ContainerPort; -import io.fabric8.kubernetes.api.model.Node; -import io.fabric8.kubernetes.api.model.PodSpec; -import org.apache.camel.EndpointInject; -import org.apache.camel.Exchange; -import org.apache.camel.Message; -import org.apache.camel.Processor; -import org.apache.camel.builder.RouteBuilder; -import org.apache.camel.component.kubernetes.KubernetesConstants; -import org.apache.camel.component.kubernetes.KubernetesTestSupport; -import org.apache.camel.component.mock.MockEndpoint; -import org.apache.camel.util.ObjectHelper; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertTrue; - -@Disabled("Requires a running Kubernetes Cluster") -public class KubernetesNodesConsumerTest extends KubernetesTestSupport { - - @EndpointInject("mock:result") - protected MockEndpoint mockResultEndpoint; - - @Test - public void createAndDeletePod() throws Exception { - if (ObjectHelper.isEmpty(authToken)) { - return; - } - - mockResultEndpoint.expectedMessageCount(1); - mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_EVENT_ACTION, "MODIFIED"); - Exchange ex = template.request("direct:createPod", exchange -> { - exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default"); - exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_POD_NAME, "test"); - Map<String, String> labels = new HashMap<>(); - labels.put("this", "rocks"); - exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_PODS_LABELS, labels); - PodSpec podSpec = new PodSpec(); - podSpec.setHostname("localhost"); - Container cont = new Container(); - cont.setImage("docker.io/jboss/wildfly:latest"); - cont.setName("pippo"); - - List<ContainerPort> containerPort = new ArrayList<>(); - ContainerPort port = new ContainerPort(); - port.setHostIP("0.0.0.0"); - port.setHostPort(8080); - port.setContainerPort(8080); - - containerPort.add(port); - - cont.setPorts(containerPort); - - List<Container> list = new ArrayList<>(); - list.add(cont); - - podSpec.setContainers(list); - - exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_POD_SPEC, podSpec); - }); - - ex = template.request("direct:deletePod", exchange -> { - exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default"); - exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_POD_NAME, "test"); - }); - - boolean podDeleted = ex.getMessage().getBody(Boolean.class); - - assertTrue(podDeleted); - - Thread.sleep(3000); - - mockResultEndpoint.assertIsSatisfied(); - } - - @Override - protected RouteBuilder createRouteBuilder() throws Exception { - return new RouteBuilder() { - @Override - public void configure() throws Exception { - from("direct:list").toF("kubernetes-pods://%s?oauthToken=%s&operation=listPods", host, authToken); - from("direct:listByLabels").toF("kubernetes-pods://%s?oauthToken=%s&operation=listPodsByLabels", host, - authToken); - from("direct:getPod").toF("kubernetes-pods://%s?oauthToken=%s&operation=getPod", host, authToken); - from("direct:createPod").toF("kubernetes-pods://%s?oauthToken=%s&operation=createPod", host, authToken); - from("direct:deletePod").toF("kubernetes-pods://%s?oauthToken=%s&operation=deletePod", host, authToken); - fromF("kubernetes-nodes://%s?oauthToken=%s&resourceName=minikube", host, authToken) - .process(new KubernetesProcessor()).to(mockResultEndpoint); - } - }; - } - - public class KubernetesProcessor implements Processor { - @Override - public void process(Exchange exchange) throws Exception { - Message in = exchange.getIn(); - Node node = exchange.getIn().getBody(Node.class); - log.info("Got event with node name: " + node.getMetadata().getName() + " and action " - + in.getHeader(KubernetesConstants.KUBERNETES_EVENT_ACTION)); - } - } -} diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesConfigMapsConsumerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesConfigMapsConsumerIT.java similarity index 59% rename from components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesConfigMapsConsumerTest.java rename to components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesConfigMapsConsumerIT.java index be029b2..c72c4e2 100644 --- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesConfigMapsConsumerTest.java +++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesConfigMapsConsumerIT.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.component.kubernetes.consumer; +package org.apache.camel.component.kubernetes.consumer.integration; import java.util.HashMap; import java.util.Map; @@ -28,27 +28,46 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.kubernetes.KubernetesConstants; import org.apache.camel.component.kubernetes.KubernetesTestSupport; import org.apache.camel.component.mock.MockEndpoint; -import org.apache.camel.util.ObjectHelper; -import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.junit.jupiter.api.condition.EnabledIfSystemProperties; +import org.junit.jupiter.api.condition.EnabledIfSystemProperty; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -@Disabled("Requires a running Kubernetes Cluster") -public class KubernetesConfigMapsConsumerTest extends KubernetesTestSupport { +@EnabledIfSystemProperties({ + @EnabledIfSystemProperty(named = "kubernetes.test.auth", matches = ".*", disabledReason = "Requires kubernetes"), + @EnabledIfSystemProperty(named = "kubernetes.test.host", matches = ".*", disabledReason = "Requires kubernetes"), + @EnabledIfSystemProperty(named = "kubernetes.test.host.k8s", matches = "true", disabledReason = "Requires kubernetes"), +}) +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class KubernetesConfigMapsConsumerIT extends KubernetesTestSupport { @EndpointInject("mock:result") protected MockEndpoint mockResultEndpoint; - @Test - public void createAndDeleteConfigMap() throws Exception { - if (ObjectHelper.isEmpty(authToken)) { - return; - } - + public void configureMock() { mockResultEndpoint.expectedMessageCount(3); mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_EVENT_ACTION, "ADDED", "MODIFIED", "MODIFIED"); + } + + @BeforeEach + public void waitForSettle() throws InterruptedException { + Thread.sleep(1000); + } + + @Test + @Order(1) + public void createConfigMapWithProperties() throws Exception { + configureMock(); + Exchange ex = template.request("direct:createConfigmap", exchange -> { exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default"); exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_NAME, "test"); @@ -60,7 +79,18 @@ public class KubernetesConfigMapsConsumerTest extends KubernetesTestSupport { exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_DATA, configMapData); }); - ex = template.request("direct:createConfigmap", exchange -> { + Message message = ex.getMessage(); + + assertNotNull(message); + assertNotNull(message.getBody()); + } + + @Test + @Order(2) + public void createConfigMap() throws Exception { + configureMock(); + + Exchange ex = template.request("direct:createConfigmap", exchange -> { exchange.getIn().removeHeader(KubernetesConstants.KUBERNETES_CONFIGMAPS_LABELS); exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default"); exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_NAME, "test1"); @@ -69,23 +99,29 @@ public class KubernetesConfigMapsConsumerTest extends KubernetesTestSupport { exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_DATA, configMapData); }); - ex = template.request("direct:deleteConfigmap", exchange -> { - exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default"); - exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_NAME, "test"); - }); + Message message = ex.getMessage(); - ex = template.request("direct:deleteConfigmap", exchange -> { + assertNotNull(message); + assertNotNull(message.getBody()); + } + + @ParameterizedTest + @Order(3) + @ValueSource(strings = { "test", "test1" }) + public void deleteConfigMaps(String configMapName) throws Exception { + Exchange ex = template.request("direct:deleteConfigmap", exchange -> { exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default"); - exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_NAME, "test1"); + exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CONFIGMAP_NAME, configMapName); }); - boolean cmDeleted = ex.getMessage().getBody(Boolean.class); + Message message = ex.getMessage(); - assertTrue(cmDeleted); - - Thread.sleep(3000); + assertNotNull(message); - mockResultEndpoint.assertIsSatisfied(); + // To avoid a NPE if unable to convert for any reason + assertNotNull(message.getBody()); + boolean cmDeleted = message.getBody(Boolean.class); + assertTrue(cmDeleted); } @Override @@ -93,11 +129,15 @@ public class KubernetesConfigMapsConsumerTest extends KubernetesTestSupport { return new RouteBuilder() { @Override public void configure() throws Exception { - from("direct:createConfigmap").toF("kubernetes-config-maps://%s?oauthToken=%s&operation=createConfigMap", host, - authToken); - from("direct:deleteConfigmap").toF("kubernetes-config-maps://%s?oauthToken=%s&operation=deleteConfigMap", host, - authToken); - fromF("kubernetes-config-maps://%s?oauthToken=%s&namespace=default&resourceName=test", host, authToken) + from("direct:createConfigmap") + .toF("kubernetes-config-maps://%s?oauthToken=%s&operation=createConfigMap", host, + authToken); + + from("direct:deleteConfigmap") + .toF("kubernetes-config-maps://%s?oauthToken=%s&operation=deleteConfigMap", host, + authToken); + + fromF("kubernetes-config-maps://%s?oauthToken=%s&operation=listConfigMaps", host, authToken) .process(new KubernetesProcessor()).to(mockResultEndpoint); } }; @@ -108,6 +148,7 @@ public class KubernetesConfigMapsConsumerTest extends KubernetesTestSupport { public void process(Exchange exchange) throws Exception { Message in = exchange.getIn(); ConfigMap cm = exchange.getIn().getBody(ConfigMap.class); + log.info("Got event with configmap name: " + cm.getMetadata().getName() + " and action " + in.getHeader(KubernetesConstants.KUBERNETES_EVENT_ACTION)); } diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesCustomResourcesConsumerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesCustomResourcesConsumerIT.java similarity index 84% rename from components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesCustomResourcesConsumerTest.java rename to components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesCustomResourcesConsumerIT.java index 11c0893..d9d727e 100644 --- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesCustomResourcesConsumerTest.java +++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesCustomResourcesConsumerIT.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.component.kubernetes.consumer; +package org.apache.camel.component.kubernetes.consumer.integration; import org.apache.camel.EndpointInject; import org.apache.camel.Exchange; @@ -24,14 +24,18 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.kubernetes.KubernetesConstants; import org.apache.camel.component.kubernetes.KubernetesTestSupport; import org.apache.camel.component.mock.MockEndpoint; -import org.apache.camel.util.ObjectHelper; import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; @Disabled("Requires a running Kubernetes Cluster") -public class KubernetesCustomResourcesConsumerTest extends KubernetesTestSupport { +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class KubernetesCustomResourcesConsumerIT extends KubernetesTestSupport { @EndpointInject("mock:result") protected MockEndpoint mockResultEndpoint; @@ -61,11 +65,8 @@ public class KubernetesCustomResourcesConsumerTest extends KubernetesTestSupport "}"; @Test - public void createAndDeleteCustomResource() throws Exception { - if (ObjectHelper.isEmpty(authToken)) { - return; - } - + @Order(1) + public void createCustomResource() throws Exception { mockResultEndpoint.expectedMessageCount(2); mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_EVENT_ACTION, "ADDED", "MODIFIED"); @@ -80,7 +81,18 @@ public class KubernetesCustomResourcesConsumerTest extends KubernetesTestSupport exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_INSTANCE, gitHubSourceString); }); - ex = template.request("direct:deleteCustomResource", exchange -> { + // Maybe knative is not available + assertNotNull(ex.getMessage()); + assertNotNull(ex.getMessage().getBody()); + } + + @Test + @Order(2) + public void deleteCustomResource() throws Exception { + mockResultEndpoint.expectedMessageCount(2); + mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_EVENT_ACTION, "ADDED", + "MODIFIED"); + Exchange ex = template.request("direct:deleteCustomResource", exchange -> { exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_INSTANCE_NAME, "createtest"); exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test"); exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_NAME, "githubsources.sources.knative.dev"); @@ -90,13 +102,13 @@ public class KubernetesCustomResourcesConsumerTest extends KubernetesTestSupport exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_CRD_PLURAL, "githubsources"); }); - boolean cmDeleted = ex.getMessage().getBody(Boolean.class); + Message message = ex.getMessage(); - assertTrue(cmDeleted); + assertNotNull(message); + assertNotNull(message.getBody()); - Thread.sleep(3000); - - mockResultEndpoint.assertIsSatisfied(); + boolean cmDeleted = message.getBody(Boolean.class); + assertTrue(cmDeleted); } @Override @@ -109,7 +121,7 @@ public class KubernetesCustomResourcesConsumerTest extends KubernetesTestSupport from("direct:deleteCustomResource") .toF("kubernetes-custom-resources://%s/?oauthToken=%s&operation=deleteCustomResource", host, authToken); fromF("kubernetes-custom-resources://%s/?oauthToken=%s&namespace=test" + - "&crdName=githubsources.sources.knative.dev&crdGroup=sources.knative.dev&crdScope=Namespaced&crdVersion=v1alpha1&crdPlural=githubsources", + "&crdName=githubsources.sources.knative.dev&crdGroup=sources.knative.dev&crdScope=Namespaced&crdVersion=v1alpha1&crdPlural=githubsources&namespace=test", host, authToken) .process(new KubernetesProcessor()).to(mockResultEndpoint); } diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesNamespacesConsumerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNamespacesConsumerIT.java similarity index 67% rename from components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesNamespacesConsumerTest.java rename to components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNamespacesConsumerIT.java index de876b6..a4e7893 100644 --- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesNamespacesConsumerTest.java +++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNamespacesConsumerIT.java @@ -14,12 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.component.kubernetes.consumer; +package org.apache.camel.component.kubernetes.consumer.integration; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; import io.fabric8.kubernetes.api.model.Namespace; import org.apache.camel.EndpointInject; @@ -30,31 +31,38 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.kubernetes.KubernetesConstants; import org.apache.camel.component.kubernetes.KubernetesTestSupport; import org.apache.camel.component.mock.MockEndpoint; -import org.apache.camel.util.ObjectHelper; -import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.junit.jupiter.api.condition.EnabledIfSystemProperties; +import org.junit.jupiter.api.condition.EnabledIfSystemProperty; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -@Disabled("Requires a running Kubernetes Cluster") -public class KubernetesNamespacesConsumerTest extends KubernetesTestSupport { +@EnabledIfSystemProperties({ + @EnabledIfSystemProperty(named = "kubernetes.test.auth", matches = ".*", disabledReason = "Requires kubernetes"), + @EnabledIfSystemProperty(named = "kubernetes.test.host", matches = ".*", disabledReason = "Requires kubernetes"), + @EnabledIfSystemProperty(named = "kubernetes.test.host.k8s", matches = "true", disabledReason = "Requires kubernetes"), +}) +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class KubernetesNamespacesConsumerIT extends KubernetesTestSupport { + private static final String TEST_NAME_SPACE = "test" + ThreadLocalRandom.current().nextInt(1, 100); @EndpointInject("mock:result") protected MockEndpoint mockResultEndpoint; @Test - public void createAndDeletePod() throws Exception { - if (ObjectHelper.isEmpty(authToken)) { - return; - } - + @Order(1) + public void createPod() throws Exception { mockResultEndpoint.expectedMessageCount(5); mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_EVENT_ACTION, "ADDED", "MODIFIED", "MODIFIED", "MODIFIED", "DELETED"); Exchange ex = template.request("direct:createNamespace", exchange -> { - exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test"); + exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, TEST_NAME_SPACE); Map<String, String> labels = new HashMap<>(); labels.put("this", "rocks"); exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_LABELS, labels); @@ -62,9 +70,14 @@ public class KubernetesNamespacesConsumerTest extends KubernetesTestSupport { Namespace ns = ex.getMessage().getBody(Namespace.class); - assertEquals("test", ns.getMetadata().getName()); + assertNotNull(ns); + assertEquals(TEST_NAME_SPACE, ns.getMetadata().getName()); + } - ex = template.request("direct:listByLabels", exchange -> { + @Test + @Order(2) + public void listByLabels() throws Exception { + Exchange ex = template.request("direct:listByLabels", exchange -> { Map<String, String> labels = new HashMap<>(); labels.put("this", "rocks"); exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_LABELS, labels); @@ -72,28 +85,34 @@ public class KubernetesNamespacesConsumerTest extends KubernetesTestSupport { List<Namespace> result = ex.getMessage().getBody(List.class); - boolean testExists = false; + boolean testNamespaceExists = false; Iterator<Namespace> it = result.iterator(); while (it.hasNext()) { Namespace namespace = it.next(); - if ("test".equalsIgnoreCase(namespace.getMetadata().getName())) { - testExists = true; + if (TEST_NAME_SPACE.equalsIgnoreCase(namespace.getMetadata().getName())) { + testNamespaceExists = true; } } - assertTrue(testExists); + assertTrue(testNamespaceExists); + } + + @Test + @Order(3) + public void deletePod() throws Exception { + Exchange ex = template.request("direct:deleteNamespace", + exchange -> exchange.getIn() + .setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, TEST_NAME_SPACE)); - ex = template.request("direct:deleteNamespace", - exchange -> exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "test")); + Object body = ex.getMessage().getBody(); + assertNotNull(body); boolean nsDeleted = ex.getMessage().getBody(Boolean.class); assertTrue(nsDeleted); - Thread.sleep(3000); - - mockResultEndpoint.assertIsSatisfied(); + mockResultEndpoint.assertIsSatisfied(5100); } @Override diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNodesConsumerIT.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNodesConsumerIT.java new file mode 100644 index 0000000..956885b --- /dev/null +++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesNodesConsumerIT.java @@ -0,0 +1,91 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 + * + * http://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.apache.camel.component.kubernetes.consumer.integration; + +import io.fabric8.kubernetes.api.model.Node; +import org.apache.camel.EndpointInject; +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.Processor; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.kubernetes.KubernetesConstants; +import org.apache.camel.component.kubernetes.KubernetesTestSupport; +import org.apache.camel.component.mock.MockEndpoint; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.junit.jupiter.api.condition.EnabledIfSystemProperties; +import org.junit.jupiter.api.condition.EnabledIfSystemProperty; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@EnabledIfSystemProperties({ + @EnabledIfSystemProperty(named = "kubernetes.test.auth", matches = ".*", disabledReason = "Requires kubernetes"), + @EnabledIfSystemProperty(named = "kubernetes.test.host", matches = ".*", disabledReason = "Requires kubernetes"), + @EnabledIfSystemProperty(named = "kubernetes.test.host.k8s", matches = "true", disabledReason = "Requires kubernetes"), +}) +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class KubernetesNodesConsumerIT extends KubernetesTestSupport { + + @EndpointInject("mock:result") + protected MockEndpoint mockResultEndpoint; + + @Test + @Order(1) + public void listNode() throws Exception { + configureMock(); + Exchange ex = template.request("direct:listNode", exchange -> { + + }); + + Message message = ex.getMessage(); + + assertNotNull(message); + assertNotNull(message.getBody()); + + mockResultEndpoint.assertIsSatisfied(); + } + + private void configureMock() { + mockResultEndpoint.expectedMessageCount(1); + mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_EVENT_ACTION, + "ADDED"); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:listNode").toF("kubernetes-nodes://%s?oauthToken=%s&operation=listNodes", host, authToken); + fromF("kubernetes-nodes://%s?oauthToken=%s&operation=listNodes", host, authToken) + .process(new KubernetesProcessor()).to(mockResultEndpoint); + } + }; + } + + public class KubernetesProcessor implements Processor { + @Override + public void process(Exchange exchange) throws Exception { + Message in = exchange.getIn(); + Node node = exchange.getIn().getBody(Node.class); + log.info("Got event with node name: " + node.getMetadata().getName() + " and action " + + in.getHeader(KubernetesConstants.KUBERNETES_EVENT_ACTION)); + } + } +} diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesPodsConsumerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesPodsConsumerIT.java similarity index 53% rename from components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesPodsConsumerTest.java rename to components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesPodsConsumerIT.java index 09bfaa8..b343881 100644 --- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesPodsConsumerTest.java +++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesPodsConsumerIT.java @@ -14,12 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.component.kubernetes.consumer; +package org.apache.camel.component.kubernetes.consumer.integration; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; import io.fabric8.kubernetes.api.model.Container; import io.fabric8.kubernetes.api.model.ContainerPort; @@ -33,68 +34,87 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.kubernetes.KubernetesConstants; import org.apache.camel.component.kubernetes.KubernetesTestSupport; import org.apache.camel.component.mock.MockEndpoint; -import org.apache.camel.util.ObjectHelper; -import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.junit.jupiter.api.condition.EnabledIfSystemProperties; +import org.junit.jupiter.api.condition.EnabledIfSystemProperty; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -@Disabled("Requires a running Kubernetes Cluster") -public class KubernetesPodsConsumerTest extends KubernetesTestSupport { +@EnabledIfSystemProperties({ + @EnabledIfSystemProperty(named = "kubernetes.test.auth", matches = ".*", disabledReason = "Requires kubernetes"), + @EnabledIfSystemProperty(named = "kubernetes.test.host", matches = ".*", disabledReason = "Requires kubernetes"), + @EnabledIfSystemProperty(named = "kubernetes.test.host.k8s", matches = "true", disabledReason = "Requires kubernetes"), +}) +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class KubernetesPodsConsumerIT extends KubernetesTestSupport { + private static final String TEST_POD_NAME = "test" + ThreadLocalRandom.current().nextInt(1, 100); @EndpointInject("mock:result") protected MockEndpoint mockResultEndpoint; - @Test - public void createAndDeletePod() throws Exception { - if (ObjectHelper.isEmpty(authToken)) { - return; - } + private void setupPod(Exchange exchange) { + exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default"); + exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_POD_NAME, TEST_POD_NAME); + Map<String, String> labels = new HashMap<>(); + labels.put("this", "rocks"); + exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_PODS_LABELS, labels); + PodSpec podSpec = new PodSpec(); + podSpec.setHostname("localhost"); + Container cont = new Container(); + cont.setImage("docker.io/jboss/wildfly:latest"); + cont.setName("pippo"); - mockResultEndpoint.expectedMessageCount(3); - mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_EVENT_ACTION, "ADDED", - "MODIFIED", "MODIFIED"); - Exchange ex = template.request("direct:createPod", exchange -> { - exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default"); - exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_POD_NAME, "test"); - Map<String, String> labels = new HashMap<>(); - labels.put("this", "rocks"); - exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_PODS_LABELS, labels); - PodSpec podSpec = new PodSpec(); - podSpec.setHostname("localhost"); - Container cont = new Container(); - cont.setImage("docker.io/jboss/wildfly:latest"); - cont.setName("pippo"); + List<ContainerPort> containerPort = new ArrayList<>(); + ContainerPort port = new ContainerPort(); + port.setHostIP("0.0.0.0"); + port.setHostPort(8080); + port.setContainerPort(8080); - List<ContainerPort> containerPort = new ArrayList<>(); - ContainerPort port = new ContainerPort(); - port.setHostIP("0.0.0.0"); - port.setHostPort(8080); - port.setContainerPort(8080); + containerPort.add(port); - containerPort.add(port); + cont.setPorts(containerPort); - cont.setPorts(containerPort); + List<Container> list = new ArrayList<>(); + list.add(cont); - List<Container> list = new ArrayList<>(); - list.add(cont); + podSpec.setContainers(list); - podSpec.setContainers(list); + exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_POD_SPEC, podSpec); + } - exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_POD_SPEC, podSpec); - }); + @Test + @Order(1) + public void createPod() throws Exception { + mockResultEndpoint.expectedMessageCount(2); + mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_EVENT_ACTION, "ADDED", + "MODIFIED"); + Exchange ex = template.request("direct:createPod", this::setupPod); + + assertNotNull(ex); + assertNotNull(ex.getMessage()); + assertNotNull(ex.getMessage().getBody()); - ex = template.request("direct:deletePod", exchange -> { + mockResultEndpoint.assertIsSatisfied(); + } + + @Test + @Order(2) + public void deletePod() throws Exception { + mockResultEndpoint.expectedMessageCount(1); + mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_EVENT_ACTION, "ADDED"); + Exchange ex = template.request("direct:deletePod", exchange -> { exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default"); - exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_POD_NAME, "test"); + exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_POD_NAME, TEST_POD_NAME); }); boolean podDeleted = ex.getMessage().getBody(Boolean.class); assertTrue(podDeleted); - Thread.sleep(3000); - mockResultEndpoint.assertIsSatisfied(); } @@ -103,10 +123,6 @@ public class KubernetesPodsConsumerTest extends KubernetesTestSupport { return new RouteBuilder() { @Override public void configure() throws Exception { - from("direct:list").toF("kubernetes-pods://%s?oauthToken=%s&operation=listPods", host, authToken); - from("direct:listByLabels").toF("kubernetes-pods://%s?oauthToken=%s&operation=listPodsByLabels", host, - authToken); - from("direct:getPod").toF("kubernetes-pods://%s?oauthToken=%s&operation=getPod", host, authToken); from("direct:createPod").toF("kubernetes-pods://%s?oauthToken=%s&operation=createPod", host, authToken); from("direct:deletePod").toF("kubernetes-pods://%s?oauthToken=%s&operation=deletePod", host, authToken); fromF("kubernetes-pods://%s?oauthToken=%s&namespace=default&labelKey=this&labelValue=rocks", host, authToken) diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesReplicationControllersConsumerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesReplicationControllersConsumerIT.java similarity index 80% rename from components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesReplicationControllersConsumerTest.java rename to components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesReplicationControllersConsumerIT.java index 14a9c53..75bc4e4 100644 --- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesReplicationControllersConsumerTest.java +++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesReplicationControllersConsumerIT.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.component.kubernetes.consumer; +package org.apache.camel.component.kubernetes.consumer.integration; import java.util.HashMap; import java.util.Map; @@ -31,27 +31,39 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.kubernetes.KubernetesConstants; import org.apache.camel.component.kubernetes.KubernetesTestSupport; import org.apache.camel.component.mock.MockEndpoint; -import org.apache.camel.util.ObjectHelper; -import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.junit.jupiter.api.condition.EnabledIfSystemProperties; +import org.junit.jupiter.api.condition.EnabledIfSystemProperty; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -@Disabled("Requires a running Kubernetes Cluster") -public class KubernetesReplicationControllersConsumerTest extends KubernetesTestSupport { +@EnabledIfSystemProperties({ + @EnabledIfSystemProperty(named = "kubernetes.test.auth", matches = ".*", disabledReason = "Requires kubernetes"), + @EnabledIfSystemProperty(named = "kubernetes.test.host", matches = ".*", disabledReason = "Requires kubernetes"), + @EnabledIfSystemProperty(named = "kubernetes.test.host.k8s", matches = "true", disabledReason = "Requires kubernetes"), +}) +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class KubernetesReplicationControllersConsumerIT extends KubernetesTestSupport { @EndpointInject("mock:result") protected MockEndpoint mockResultEndpoint; - @Test - public void createAndDeleteReplicationController() throws Exception { - if (ObjectHelper.isEmpty(authToken)) { - return; - } + @BeforeEach + public void waitForSettle() throws InterruptedException { + Thread.sleep(1000); + } + @Test + @Order(1) + public void createReplicationController() throws Exception { mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_EVENT_ACTION, "ADDED", - "DELETED", "MODIFIED", "MODIFIED", "MODIFIED"); + "MODIFIED", "MODIFIED", "MODIFIED", "MODIFIED"); + Exchange ex = template.request("direct:createReplicationController", exchange -> { exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default"); exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_NAME, "test"); @@ -76,7 +88,13 @@ public class KubernetesReplicationControllersConsumerTest extends KubernetesTest assertEquals("test", rc.getMetadata().getName()); - ex = template.request("direct:deleteReplicationController", exchange -> { + mockResultEndpoint.assertIsSatisfied(); + } + + @Test + @Order(2) + public void deleteReplicationController() throws Exception { + Exchange ex = template.request("direct:deleteReplicationController", exchange -> { exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default"); exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_REPLICATION_CONTROLLER_NAME, "test"); }); @@ -85,8 +103,6 @@ public class KubernetesReplicationControllersConsumerTest extends KubernetesTest assertTrue(rcDeleted); - Thread.sleep(3000); - mockResultEndpoint.assertIsSatisfied(); } diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesServicesConsumerTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesServicesConsumerIT.java similarity index 79% rename from components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesServicesConsumerTest.java rename to components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesServicesConsumerIT.java index b0dbfce..26c7465 100644 --- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/KubernetesServicesConsumerTest.java +++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/consumer/integration/KubernetesServicesConsumerIT.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.component.kubernetes.consumer; +package org.apache.camel.component.kubernetes.consumer.integration; import java.util.ArrayList; import java.util.HashMap; @@ -33,28 +33,33 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.kubernetes.KubernetesConstants; import org.apache.camel.component.kubernetes.KubernetesTestSupport; import org.apache.camel.component.mock.MockEndpoint; -import org.apache.camel.util.ObjectHelper; -import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.junit.jupiter.api.condition.EnabledIfSystemProperties; +import org.junit.jupiter.api.condition.EnabledIfSystemProperty; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -@Disabled("Requires a running Kubernetes Cluster") -public class KubernetesServicesConsumerTest extends KubernetesTestSupport { +@EnabledIfSystemProperties({ + @EnabledIfSystemProperty(named = "kubernetes.test.auth", matches = ".*", disabledReason = "Requires kubernetes"), + @EnabledIfSystemProperty(named = "kubernetes.test.host", matches = ".*", disabledReason = "Requires kubernetes"), + @EnabledIfSystemProperty(named = "kubernetes.test.host.k8s", matches = "true", disabledReason = "Requires kubernetes"), +}) +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class KubernetesServicesConsumerIT extends KubernetesTestSupport { @EndpointInject("mock:result") protected MockEndpoint mockResultEndpoint; @Test - public void createAndDeleteService() throws Exception { - if (ObjectHelper.isEmpty(authToken)) { - return; - } + @Order(1) + public void createService() throws Exception { + mockResultEndpoint.expectedMessageCount(1); + mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_EVENT_ACTION, "ADDED"); - mockResultEndpoint.expectedMessageCount(2); - mockResultEndpoint.expectedHeaderValuesReceivedInAnyOrder(KubernetesConstants.KUBERNETES_EVENT_ACTION, "ADDED", - "DELETED"); Exchange ex = template.request("direct:createService", exchange -> { exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default"); exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SERVICE_NAME, "test"); @@ -79,7 +84,15 @@ public class KubernetesServicesConsumerTest extends KubernetesTestSupport { assertEquals("test", serv.getMetadata().getName()); - ex = template.request("direct:deleteService", exchange -> { + mockResultEndpoint.assertIsSatisfied(); + } + + @Test + @Order(2) + public void deleteService() throws Exception { + mockResultEndpoint.expectedMessageCount(2); + + Exchange ex = template.request("direct:deleteService", exchange -> { exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_NAMESPACE_NAME, "default"); exchange.getIn().setHeader(KubernetesConstants.KUBERNETES_SERVICE_NAME, "test"); }); @@ -88,8 +101,6 @@ public class KubernetesServicesConsumerTest extends KubernetesTestSupport { assertTrue(servDeleted); - Thread.sleep(3000); - mockResultEndpoint.assertIsSatisfied(); }