Kubernetes API client live test class.

Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/15c73fd8
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/15c73fd8
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/15c73fd8

Branch: refs/heads/master
Commit: 15c73fd806541c8e51c945d35f4c082c49fbec1a
Parents: 553d220
Author: Nirmal Fernando <[email protected]>
Authored: Mon Nov 3 14:19:51 2014 +0100
Committer: Nirmal Fernando <[email protected]>
Committed: Mon Nov 3 14:19:51 2014 +0100

----------------------------------------------------------------------
 .../live/KubernetesApiClientLiveTest.java       | 339 +++++++++++++++++++
 1 file changed, 339 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/15c73fd8/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
 
b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
new file mode 100644
index 0000000..eadb4ca
--- /dev/null
+++ 
b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
@@ -0,0 +1,339 @@
+/*
+ *
+ * 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.stratos.kubernetes.client.live;
+
+import junit.framework.TestCase;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.kubernetes.client.KubernetesApiClient;
+import 
org.apache.stratos.kubernetes.client.exceptions.KubernetesClientException;
+import org.apache.stratos.kubernetes.client.model.Container;
+import org.apache.stratos.kubernetes.client.model.Label;
+import org.apache.stratos.kubernetes.client.model.Manifest;
+import org.apache.stratos.kubernetes.client.model.Pod;
+import org.apache.stratos.kubernetes.client.model.Port;
+import org.apache.stratos.kubernetes.client.model.ReplicationController;
+import org.apache.stratos.kubernetes.client.model.Selector;
+import org.apache.stratos.kubernetes.client.model.Service;
+import org.apache.stratos.kubernetes.client.model.State;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category(org.apache.stratos.kubernetes.client.LiveTests.class)
+public class KubernetesApiClientLiveTest extends TestCase{
+
+    private static final Log log = 
LogFactory.getLog(KubernetesApiClientLiveTest.class);
+    private KubernetesApiClient client;
+    private String dockerImage;
+    
+       @Before
+       public void setUp() {
+           String endpoint = System.getProperty("kubernetes.api.endpoint");
+           if (endpoint == null) {
+               endpoint = "http://192.168.1.100:8080/api/v1beta1/";;
+           }
+        log.info("Provided Kubernetes endpoint using system property 
[kubernetes.api.endpoint] : " +endpoint);
+           client = new KubernetesApiClient(endpoint);
+           
+           // image should be pre-downloaded for ease of testing.
+           dockerImage = System.getProperty("docker.image");
+           if (dockerImage == null) {
+               dockerImage = "gurpartap/redis";
+           }
+       }
+       
+       @Test
+       public void testPods() throws Exception { 
+           log.info("Testing Pods ....");
+           String podId = "nirmal-test-pod";
+        Pod pod = new Pod();
+        pod.setApiVersion("v1beta1");
+        pod.setId(podId);
+        pod.setKind("Pod");
+        Label l = new Label();
+        l.setName("nirmal");
+        pod.setLabels(l);
+        State desiredState = new State();
+        Manifest m = new Manifest();
+        m.setId(podId);
+        m.setVersion("v1beta1");
+        Container c = new Container();
+        c.setName("master");
+        c.setImage(dockerImage);
+        Port p = new Port();
+        p.setContainerPort(8379);
+        p.setHostPort(8379);
+        c.setPorts(new Port[] { p });
+        m.setContainers(new Container[] { c });
+        desiredState.setManifest(m);
+        pod.setDesiredState(desiredState);
+        if (log.isDebugEnabled()) {
+            log.debug("Creating a Pod "+pod);
+        }
+        client.createPod(pod);
+           assertNotNull(client.getPod(podId));
+           
+           // give 2s to download the image
+           Thread.sleep(2000);
+           
+           // test recreation from same id
+           client.createPod(pod);
+           assertNotNull(client.getPod(podId));
+           
+           String bogusPodId = "nirmal";
+           // create an invalid Pod
+           Pod pod3 = new Pod();
+           pod3.setId(bogusPodId);
+           try {
+               client.createPod(pod3);
+           } catch (Exception e) {
+               assertEquals(true, e instanceof KubernetesClientException);
+           }
+           
+           try {
+               client.getPod(bogusPodId);
+           } catch (Exception e) {
+               assertEquals(true, e instanceof KubernetesClientException);
+               assertEquals("Pod ["+bogusPodId+"] doesn't exist.", 
e.getMessage());
+           }
+           
+           if (log.isDebugEnabled()) {
+            log.debug("Get all Pods ");
+        }
+           Pod[] currentPods = client.getAllPods();
+           boolean match = false;
+           for (Pod pod2 : currentPods) {
+            if (podId.equals(pod2.getId())) {
+                match = true;
+                break;
+            }
+        }
+           assertEquals(true, match);
+           
+           Pod[] selectedPods = client.getSelectedPods(new Label[]{l});
+           assertEquals(1, selectedPods.length);
+           
+           if (log.isDebugEnabled()) {
+               log.debug("Deleting a Pod "+pod);
+           }
+           client.deletePod(podId);
+           try {
+               client.getPod(podId);
+           } catch(Exception e) {
+               assertEquals(true, e instanceof KubernetesClientException);
+           }
+           
+           // delete a non-existing pod
+           try {
+               client.deletePod(bogusPodId);
+           } catch (Exception e) {
+               assertEquals(true, e instanceof KubernetesClientException);
+           }
+           
+           selectedPods = client.getSelectedPods(new Label[]{l});
+        assertEquals(0, selectedPods.length);
+        
+        Label ll = new Label();
+        ll.setName("nirmal2");
+        selectedPods = client.getSelectedPods(new Label[]{l, ll});
+        assertEquals(0, selectedPods.length);
+        
+        selectedPods = client.getSelectedPods(new Label[]{});
+        assertEquals(0, selectedPods.length);
+       }
+       
+       @Test
+    public void testReplicationControllers() throws Exception { 
+           String id = "nirmalController";
+           int replicas = 2;
+           
+        ReplicationController contr = new ReplicationController();
+        contr.setId(id);
+        contr.setKind("ReplicationController");
+        contr.setApiVersion("v1beta1");
+        State desiredState = new State();
+        desiredState.setReplicas(replicas);
+        Selector selector = new Selector();
+        selector.setName("nirmal");
+        desiredState.setReplicaSelector(selector);
+
+        Pod podTemplate = new Pod();
+        State podState = new State();
+        Manifest manifest = new Manifest();
+        manifest.setVersion("v1beta1");
+        manifest.setId(id);
+        Container container = new Container();
+        container.setName("nirmal-php");
+        container.setImage(dockerImage);
+        Port p = new Port();
+        p.setContainerPort(80);
+        container.setPorts(new Port[] { p });
+        manifest.setContainers(new Container[] { container });
+        podState.setManifest(manifest);
+        podTemplate.setDesiredState(podState);
+        Label l1 = new Label();
+        l1.setName("nirmal");
+        podTemplate.setLabels(l1);
+
+        desiredState.setPodTemplate(podTemplate);
+        contr.setDesiredState(desiredState);
+        Label l2 = new Label();
+        l2.setName("nirmal");
+        contr.setLabels(l2);
+        if (log.isDebugEnabled()) {
+            log.debug("Creating a Replication Controller: "+contr);
+        }
+        client.createReplicationController(contr);
+        assertNotNull(client.getReplicationController(id));
+        
+        // wait 10s for Pods to be created
+        Thread.sleep(10000);
+        
+        // test recreation using same id
+        client.createReplicationController(contr);
+        assertNotNull(client.getReplicationController(id));
+        
+        assertEquals(1, client.getAllReplicationControllers().length);
+        
+        Pod[] pods = client.getSelectedPods(new Label[]{l1});
+        assertEquals(replicas, pods.length);
+        
+        // test incorrect replica count
+        replicas = -1;
+        try {
+            client.updateReplicationController(id, replicas);
+        } catch (Exception e) {
+            assertEquals(true, e instanceof KubernetesClientException);
+            assertEquals(true, e.getMessage().contains("update failed"));
+        }
+        
+        replicas = 0;
+        client.updateReplicationController(id, replicas);
+        
+        Thread.sleep(10000);
+        
+        pods = client.getSelectedPods(new Label[]{l1});
+        assertEquals(replicas, pods.length);
+        
+        client.deleteReplicationController(id);
+        try {
+            client.getReplicationController(id);
+        } catch (Exception e) {
+            assertEquals(true, e instanceof KubernetesClientException);
+        }
+        
+        String bogusContrId = "nirmal";
+        // create an invalid Controller
+        ReplicationController bogusContr = new ReplicationController();
+        bogusContr.setId(bogusContrId);
+        try {
+            client.createReplicationController(bogusContr);
+        } catch (Exception e) {
+            assertEquals(true, e instanceof KubernetesClientException);
+        }
+        
+        try {
+            client.getReplicationController(bogusContrId);
+        } catch (Exception e) {
+            assertEquals(true, e instanceof KubernetesClientException);
+            assertEquals("Replication Controller ["+bogusContrId+"] doesn't 
exist.", e.getMessage());
+        }
+        
+        try {
+            client.updateReplicationController(bogusContrId, 3);
+        } catch (Exception e) {
+            assertEquals(true, e instanceof KubernetesClientException);
+            assertEquals("Replication Controller ["+bogusContrId+"] doesn't 
exist.", e.getMessage());
+        }
+        
+        try {
+            client.deleteReplicationController(bogusContrId);
+        } catch (Exception e) {
+            assertEquals(true, e instanceof KubernetesClientException);
+            assertEquals("Replication Controller ["+bogusContrId+"] doesn't 
exist.", e.getMessage());
+        }
+       }
+       
+       @Test
+    public void testServices() throws Exception { 
+           String serviceId = "nirmal-service";
+           Service serv = new Service();
+           serv.setApiVersion("v1beta1");
+           serv.setContainerPort("8379");
+           serv.setPort(5000);
+           serv.setId(serviceId);
+           serv.setKind("Service");
+           
+           Label l = new Label();
+           l.setName("nirmal");
+           
+           serv.setLabels(l);
+           serv.setName("nirmal-service");
+           Selector selector = new Selector();
+           selector.setName(l.getName());
+           serv.setSelector(selector);
+           
+           if (log.isDebugEnabled()) {
+            log.debug("Creating a Service Proxy: "+serv);
+        }
+        client.createService(serv);
+        assertNotNull(client.getService(serviceId));
+        
+        // test recreation using same id
+        client.createService(serv);
+        assertNotNull(client.getService(serviceId));
+        
+        assertEquals(1, client.getAllServices().length);
+        
+        client.deleteService(serviceId);
+        try {
+            client.getService(serviceId);
+        } catch (Exception e) {
+            assertEquals(true, e instanceof KubernetesClientException);
+        }
+        
+        String bogusServId = "nirmal";
+        // create an invalid Service
+        Service bogusServ = new Service();
+        bogusServ.setId(bogusServId);
+        try {
+            client.createService(bogusServ);
+        } catch (Exception e) {
+            assertEquals(true, e instanceof KubernetesClientException);
+        }
+        
+        try {
+            client.getService(bogusServId);
+        } catch (Exception e) {
+            assertEquals(true, e instanceof KubernetesClientException);
+            assertEquals("Service ["+bogusServId+"] doesn't exist.", 
e.getMessage());
+        }
+        
+        try {
+            client.deleteService(bogusServId);
+        } catch (Exception e) {
+            assertEquals(true, e instanceof KubernetesClientException);
+            assertEquals("Service ["+bogusServId+"] doesn't exist.", 
e.getMessage());
+        }
+       }
+}

Reply via email to