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();
     }
 

Reply via email to