Import k8s client deps, support inject k8s API server config

Change-Id: Iaf246a06462b8a878e93ef3f98da399c3600b129
diff --git a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/web/K8sNodeWebResourceTest.java b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/web/K8sNodeWebResourceTest.java
index 61c2e2d..75d4433 100644
--- a/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/web/K8sNodeWebResourceTest.java
+++ b/apps/k8s-node/app/src/test/java/org/onosproject/k8snode/web/K8sNodeWebResourceTest.java
@@ -23,10 +23,14 @@
 import org.onlab.packet.IpAddress;
 import org.onosproject.codec.CodecService;
 import org.onosproject.codec.impl.CodecManager;
+import org.onosproject.k8snode.api.DefaultK8sApiConfig;
 import org.onosproject.k8snode.api.DefaultK8sNode;
+import org.onosproject.k8snode.api.K8sApiConfig;
+import org.onosproject.k8snode.api.K8sApiConfigAdminService;
 import org.onosproject.k8snode.api.K8sNode;
 import org.onosproject.k8snode.api.K8sNodeAdminService;
 import org.onosproject.k8snode.api.K8sNodeState;
+import org.onosproject.k8snode.codec.K8sApiConfigCodec;
 import org.onosproject.k8snode.codec.K8sNodeCodec;
 import org.onosproject.net.DeviceId;
 import org.onosproject.rest.resources.ResourceTest;
@@ -52,9 +56,13 @@
 public class K8sNodeWebResourceTest extends ResourceTest {
 
     final K8sNodeAdminService mockK8sNodeAdminService = createMock(K8sNodeAdminService.class);
-    private static final String PATH = "configure";
+    final K8sApiConfigAdminService mockK8sApiConfigAdminService =
+            createMock(K8sApiConfigAdminService.class);
+    private static final String NODE_PATH = "configure/node";
+    private static final String API_PATH = "configure/api";
 
     private K8sNode k8sNode;
+    private K8sApiConfig k8sApiConfig;
 
     /**
      * Constructs a kubernetes node resource test instance.
@@ -71,9 +79,11 @@
         final CodecManager codecService = new CodecManager();
         codecService.activate();
         codecService.registerCodec(K8sNode.class, new K8sNodeCodec());
+        codecService.registerCodec(K8sApiConfig.class, new K8sApiConfigCodec());
         ServiceDirectory testDirectory =
                 new TestServiceDirectory()
                 .add(K8sNodeAdminService.class, mockK8sNodeAdminService)
+                .add(K8sApiConfigAdminService.class, mockK8sApiConfigAdminService)
                 .add(CodecService.class, codecService);
         setServiceDirectory(testDirectory);
 
@@ -85,6 +95,16 @@
                 .intgBridge(DeviceId.deviceId("of:00000000000000a1"))
                 .state(K8sNodeState.INIT)
                 .build();
+
+        k8sApiConfig = DefaultK8sApiConfig.builder()
+                .scheme(K8sApiConfig.Scheme.HTTPS)
+                .ipAddress(IpAddress.valueOf("10.134.34.223"))
+                .port(6443)
+                .token("tokenMod")
+                .caCertData("caCertData")
+                .clientCertData("clientCertData")
+                .clientKeyData("clientKeyData")
+                .build();
     }
 
     /**
@@ -99,7 +119,7 @@
         final WebTarget wt = target();
         InputStream jsonStream = K8sNodeWebResourceTest.class
                 .getResourceAsStream("k8s-node-minion-config.json");
-        Response response = wt.path(PATH).request(MediaType.APPLICATION_JSON_TYPE)
+        Response response = wt.path(NODE_PATH).request(MediaType.APPLICATION_JSON_TYPE)
                 .post(Entity.json(jsonStream));
         final int status = response.getStatus();
 
@@ -119,7 +139,7 @@
         final WebTarget wt = target();
         InputStream jsonStream = K8sNodeWebResourceTest.class
                 .getResourceAsStream("k8s-node-minion-config.json");
-        Response response = wt.path(PATH).request(MediaType.APPLICATION_JSON_TYPE)
+        Response response = wt.path(NODE_PATH).request(MediaType.APPLICATION_JSON_TYPE)
                 .post(Entity.json(jsonStream));
         final int status = response.getStatus();
 
@@ -140,7 +160,7 @@
         final WebTarget wt = target();
         InputStream jsonStream = K8sNodeWebResourceTest.class
                 .getResourceAsStream("k8s-node-minion-config.json");
-        Response response = wt.path(PATH).request(MediaType.APPLICATION_JSON_TYPE)
+        Response response = wt.path(NODE_PATH).request(MediaType.APPLICATION_JSON_TYPE)
                 .put(Entity.json(jsonStream));
         final int status = response.getStatus();
 
@@ -160,7 +180,7 @@
         final WebTarget wt = target();
         InputStream jsonStream = K8sNodeWebResourceTest.class
                 .getResourceAsStream("k8s-node-minion-config.json");
-        Response response = wt.path(PATH).request(MediaType.APPLICATION_JSON_TYPE)
+        Response response = wt.path(NODE_PATH).request(MediaType.APPLICATION_JSON_TYPE)
                 .put(Entity.json(jsonStream));
         final int status = response.getStatus();
 
@@ -178,7 +198,7 @@
         expect(mockK8sNodeAdminService.removeNode(anyString())).andReturn(k8sNode).once();
         replay(mockK8sNodeAdminService);
 
-        String location = PATH + "/minion-node";
+        String location = NODE_PATH + "/minion-node";
 
         final WebTarget wt = target();
         Response response = wt.path(location).request(
@@ -199,7 +219,7 @@
         expect(mockK8sNodeAdminService.node(anyString())).andReturn(null).once();
         replay(mockK8sNodeAdminService);
 
-        String location = PATH + "/minion-node";
+        String location = NODE_PATH + "/minion-node";
 
         final WebTarget wt = target();
         Response response = wt.path(location).request(
@@ -211,4 +231,132 @@
 
         verify(mockK8sNodeAdminService);
     }
+
+    /**
+     * Tests the results of the REST API POST method with creating new configs operation.
+     */
+    @Test
+    public void testCreateConfigsWithCreateOperation() {
+        expect(mockK8sApiConfigAdminService.apiConfig(anyString())).andReturn(null).once();
+        mockK8sApiConfigAdminService.createApiConfig(anyObject());
+        replay(mockK8sApiConfigAdminService);
+
+        final WebTarget wt = target();
+        InputStream jsonStream = K8sNodeWebResourceTest.class
+                .getResourceAsStream("k8s-api-config.json");
+        Response response = wt.path(API_PATH).request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream));
+        final int status = response.getStatus();
+
+        assertThat(status, is(201));
+
+        verify(mockK8sApiConfigAdminService);
+    }
+
+    /**
+     * Tests the results of the REST API POST method without creating new configs operation.
+     */
+    @Test
+    public void testCreateConfigsWithoutCreateOperation() {
+        expect(mockK8sApiConfigAdminService.apiConfig(anyString())).andReturn(k8sApiConfig).once();
+        replay(mockK8sApiConfigAdminService);
+
+        final WebTarget wt = target();
+        InputStream jsonStream = K8sNodeWebResourceTest.class
+                .getResourceAsStream("k8s-api-config.json");
+        Response response = wt.path(API_PATH).request(MediaType.APPLICATION_JSON_TYPE)
+                .post(Entity.json(jsonStream));
+        final int status = response.getStatus();
+
+        assertThat(status, is(201));
+
+        verify(mockK8sApiConfigAdminService);
+    }
+
+    /**
+     * Tests the results of the REST API PUT method with modifying the configs.
+     */
+    @Test
+    public void testUpdateConfigsWithModifyOperation() {
+        expect(mockK8sApiConfigAdminService.apiConfig(anyString()))
+                .andReturn(k8sApiConfig).once();
+        mockK8sApiConfigAdminService.updateApiConfig(anyObject());
+        replay(mockK8sApiConfigAdminService);
+
+        final WebTarget wt = target();
+        InputStream jsonStream = K8sNodeWebResourceTest.class
+                .getResourceAsStream("k8s-api-config.json");
+        Response response = wt.path(API_PATH).request(MediaType.APPLICATION_JSON_TYPE)
+                .put(Entity.json(jsonStream));
+        final int status = response.getStatus();
+
+        assertThat(status, is(200));
+
+        verify(mockK8sApiConfigAdminService);
+    }
+
+    /**
+     * Tests the results of the REST API PUT method without modifying the configs.
+     */
+    @Test
+    public void testUpdateConfigsWithoutModifyOperation() {
+        expect(mockK8sApiConfigAdminService.apiConfig(anyString())).andReturn(null).once();
+        replay(mockK8sApiConfigAdminService);
+
+        final WebTarget wt = target();
+        InputStream jsonStream = K8sNodeWebResourceTest.class
+                .getResourceAsStream("k8s-api-config.json");
+        Response response = wt.path(API_PATH).request(MediaType.APPLICATION_JSON_TYPE)
+                .put(Entity.json(jsonStream));
+        final int status = response.getStatus();
+
+        assertThat(status, is(304));
+
+        verify(mockK8sApiConfigAdminService);
+    }
+
+    /**
+     * Tests the results of the REST API DELETE method with deleting the configs.
+     */
+    @Test
+    public void testDeleteConfigsWithDeletionOperation() {
+        expect(mockK8sApiConfigAdminService.apiConfig(anyString()))
+                .andReturn(k8sApiConfig).once();
+        expect(mockK8sApiConfigAdminService.removeApiConfig(anyString()))
+                .andReturn(k8sApiConfig).once();
+        replay(mockK8sApiConfigAdminService);
+
+        String location = API_PATH + "/https://test:8663";
+
+        final WebTarget wt = target();
+        Response response = wt.path(location).request(
+                MediaType.APPLICATION_JSON_TYPE).delete();
+
+        final int status = response.getStatus();
+
+        assertThat(status, is(204));
+
+        verify(mockK8sApiConfigAdminService);
+    }
+
+    /**
+     * Tests the results of the REST API DELETE method without deleting the configs.
+     */
+    @Test
+    public void testDeleteConfigsWithoutDeletionOperation() {
+        expect(mockK8sApiConfigAdminService.apiConfig(anyString())).andReturn(null).once();
+        replay(mockK8sApiConfigAdminService);
+
+        String location = API_PATH + "/https://test:8663";
+
+        final WebTarget wt = target();
+        Response response = wt.path(location).request(
+                MediaType.APPLICATION_JSON_TYPE).delete();
+
+        final int status = response.getStatus();
+
+        assertThat(status, is(304));
+
+        verify(mockK8sApiConfigAdminService);
+    }
 }