Loading pom.xml +2 −2 Original line number Diff line number Diff line Loading @@ -19,15 +19,15 @@ <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- <spring.boot-version>3.2.2</spring.boot-version> <spring.boot.fabric8-version>3.1.0</spring.boot.fabric8-version> <fabric8.version>6.10.0</fabric8.version> --> <!-- <spring.boot-version>${spring-boot-version}</spring.boot-version> <spring.boot.fabric8-version>3.0.5</spring.boot.fabric8-version> <fabric8.version>6.6.2</fabric8.version> --> <camel.version>4.0.0-RC1</camel.version> <slf4j-api.version>1.7.5</slf4j-api.version> Loading src/main/resources/application.yml +0 −3 Original line number Diff line number Diff line spring: config: activate: on-profile: "default" application: name: cridge main: Loading src/test/java/org/etsi/osl/cridge/CridgeIntegrationTest.java +172 −172 Original line number Diff line number Diff line Loading @@ -176,139 +176,139 @@ public class CridgeIntegrationTest { } // @Test // public void testCRDEPLOY() throws Exception { // logger.info("===============TEST testCRDEPLOY ============================="); // // // // CustomResourceDefinition cronTabCrd = routesPreparation.kubernetesClient.apiextensions().v1() // // .customResourceDefinitions() // // .load(new BufferedInputStream(new FileInputStream("src/test/resources/crontab-crd.yaml"))) // // .item(); // // // // prepare CR_SPEC request // CustomResourceDefinition crdMyCalc = v1CRDFromCustomResourceType(MyCalculator.class).build(); // // // // Map<String, Object> map = new HashMap<>(); // map.put("currentContextCluster", "testCluster"); // map.put("clusterMasterURL", server.getHostName()); // map.put("org.etsi.osl.serviceId", "sid-xxx-xxx-xxx"); // map.put("org.etsi.osl.resourceId", "rid-xxx-xxx-xxx"); // map.put("org.etsi.osl.prefixName", "crrid12345"); // map.put("org.etsi.osl.serviceOrderId", "orderid-xxx-xxx-xxx"); // map.put("org.etsi.osl.namespace", "orderid-xxx-xxx-xxx"); // map.put("org.etsi.osl.statusCheckFieldName", "_CR_CHECK_FIELD"); // map.put("org.etsi.osl.statusCheckValueStandby", "_CR_CHECKVAL_STANDBY"); // map.put("org.etsi.osl.statusCheckValueAlarm", "_CR_CHECKVAL_ALARM"); // map.put("org.etsi.osl.statusCheckValueAvailable", "_CR_CHECKVAL_AVAILABLE"); // map.put("org.etsi.osl.statusCheckValueReserved", "_CR_CHECKVAL_RESERVED"); // map.put("org.etsi.osl.statusCheckValueUnknown", "_CR_CHECKVAL_UNKNOWN"); // map.put("org.etsi.osl.statusCheckValueSuspended", "_CR_CHECKVAL_SUSPENDED"); // // // String _CR_SPEC = Serialization.asYaml(getMyCalculator("test-resource")); // // // First check for an invalid context cluster // String response = kubernetesClientResource.deployCR(map, _CR_SPEC); // assertEquals("SEE OTHER", response); // // // // Now try for the correct context cluster // map.put("currentContextCluster", // kubernetesClientResource.getKubernetesContextDefinition().getCurrentContextCluster()); // map.put("clusterMasterURL", // kubernetesClientResource.getKubernetesContextDefinition().getMasterURL()); // // // // server api expectations // server.expect().get() // .withPath("/api/v1/namespaces/orderid-xxx-xxx-xxx/secrets?resourceVersion=0") // .andReturn(HttpURLConnection.HTTP_OK, crdMyCalc).once(); // // server.expect().get().withPath( // "/api/v1/namespaces/orderid-xxx-xxx-xxx/secrets?allowWatchBookmarks=true&timeoutSeconds=600&watch=true") // .andReturn(HttpURLConnection.HTTP_OK, crdMyCalc).once(); // // server.expect().get() // .withPath("/apis/stable.example.com/v1/namespaces/orderid-xxx-xxx-xxx/mycalculators") // .andReturn(HttpURLConnection.HTTP_OK, crdMyCalc).once(); // // server.expect().get().withPath( // "/apis/stable.example.com/v1/namespaces/orderid-xxx-xxx-xxx/mycalculators/amycalculator") // .andReturn(HttpURLConnection.HTTP_OK, crdMyCalc).once(); // // server.expect().post().withPath("/api/v1/namespaces/orderid-xxx-xxx-xxx/mycalculators") // .andReturn(HttpURLConnection.HTTP_CREATED, crdMyCalc).once(); // // server.expect().post() // .withPath( // "/apis/examples.osl.etsi.org/v1alpha1/namespaces/orderid-xxx-xxx-xxx/mycalculators") // .andReturn(HttpURLConnection.HTTP_CREATED, crdMyCalc).once(); // // // register the resource handler // KubernetesClient client = routesPreparation.kubernetesClient; // // client.getKubernetesSerialization().registerKubernetesResource("examples.osl.etsi.org/v1alpha1", // "MyCalculator", MyCalculator.class); // // // make the deployment test! // response = kubernetesClientResource.deployCR(map, _CR_SPEC); // // assertEquals("OK", response); // // } @Test public void testCRDEPLOY() throws Exception { logger.info("===============TEST testCRDEPLOY ============================="); // @Test // public void testCRWithWatch() throws Exception { // // useful blog // // https://itnext.io/mock-kubernetes-api-server-in-java-using-fabric8-kubernetes-mock-server-81a75cf6c47c // // // Given // KubernetesClient client = routesPreparation.kubernetesClient; // // server.expect().withPath( // "/apis/examples.osl.etsi.org/v1alpha1/namespaces/orderid-xxx-xxx-xxx/mycalculators?allowWatchBookmarks=true&watch=true") // .andUpgradeToWebSocket().open().waitFor(10L) // .andEmit(new WatchEvent(getMyCalculator("amycalculator"), "ADDED")).waitFor(20L) // .andEmit(new WatchEventBuilder().withNewStatusObject() // .withMessage("410 - the event requested is outdated") // .withCode(HttpURLConnection.HTTP_GONE).endStatusObject().build()) // .done().always(); // // MixedOperation<MyCalculator, KubernetesResourceList<MyCalculator>, Resource<MyCalculator>> userAclClient = // client.resources(MyCalculator.class); // // // // When // CountDownLatch eventRecieved = new CountDownLatch(1); // client.getKubernetesSerialization().registerKubernetesResource("examples.osl.etsi.org/v1alpha1", // "MyCalculator", MyCalculator.class); // // Watch watch = // userAclClient.inNamespace("orderid-xxx-xxx-xxx").watch(new Watcher<MyCalculator>() { // @Override // public void eventReceived(Action action, MyCalculator calc) { // if (action.name().contains("ADDED")) { // eventRecieved.countDown(); // logger.info( // "===============CountDownLatch eventRecieved.countDown ADDED {}=============================", // Serialization.asYaml(calc)); // } // } // // @Override // public void onClose(WatcherException e) {} // }); // // // Then // eventRecieved.await(30, TimeUnit.SECONDS); // Assertions.assertEquals(0, eventRecieved.getCount()); // watch.close(); // // } // CustomResourceDefinition cronTabCrd = routesPreparation.kubernetesClient.apiextensions().v1() // .customResourceDefinitions() // .load(new BufferedInputStream(new FileInputStream("src/test/resources/crontab-crd.yaml"))) // .item(); // prepare CR_SPEC request CustomResourceDefinition crdMyCalc = v1CRDFromCustomResourceType(MyCalculator.class).build(); Map<String, Object> map = new HashMap<>(); map.put("currentContextCluster", "testCluster"); map.put("clusterMasterURL", server.getHostName()); map.put("org.etsi.osl.serviceId", "sid-xxx-xxx-xxx"); map.put("org.etsi.osl.resourceId", "rid-xxx-xxx-xxx"); map.put("org.etsi.osl.prefixName", "crrid12345"); map.put("org.etsi.osl.serviceOrderId", "orderid-xxx-xxx-xxx"); map.put("org.etsi.osl.namespace", "orderid-xxx-xxx-xxx"); map.put("org.etsi.osl.statusCheckFieldName", "_CR_CHECK_FIELD"); map.put("org.etsi.osl.statusCheckValueStandby", "_CR_CHECKVAL_STANDBY"); map.put("org.etsi.osl.statusCheckValueAlarm", "_CR_CHECKVAL_ALARM"); map.put("org.etsi.osl.statusCheckValueAvailable", "_CR_CHECKVAL_AVAILABLE"); map.put("org.etsi.osl.statusCheckValueReserved", "_CR_CHECKVAL_RESERVED"); map.put("org.etsi.osl.statusCheckValueUnknown", "_CR_CHECKVAL_UNKNOWN"); map.put("org.etsi.osl.statusCheckValueSuspended", "_CR_CHECKVAL_SUSPENDED"); String _CR_SPEC = Serialization.asYaml(getMyCalculator("test-resource")); // First check for an invalid context cluster String response = kubernetesClientResource.deployCR(map, _CR_SPEC); assertEquals("SEE OTHER", response); // Now try for the correct context cluster map.put("currentContextCluster", kubernetesClientResource.getKubernetesContextDefinition().getCurrentContextCluster()); map.put("clusterMasterURL", kubernetesClientResource.getKubernetesContextDefinition().getMasterURL()); // server api expectations server.expect().get() .withPath("/api/v1/namespaces/orderid-xxx-xxx-xxx/secrets?resourceVersion=0") .andReturn(HttpURLConnection.HTTP_OK, crdMyCalc).once(); server.expect().get().withPath( "/api/v1/namespaces/orderid-xxx-xxx-xxx/secrets?allowWatchBookmarks=true&timeoutSeconds=600&watch=true") .andReturn(HttpURLConnection.HTTP_OK, crdMyCalc).once(); server.expect().get() .withPath("/apis/stable.example.com/v1/namespaces/orderid-xxx-xxx-xxx/mycalculators") .andReturn(HttpURLConnection.HTTP_OK, crdMyCalc).once(); server.expect().get().withPath( "/apis/stable.example.com/v1/namespaces/orderid-xxx-xxx-xxx/mycalculators/amycalculator") .andReturn(HttpURLConnection.HTTP_OK, crdMyCalc).once(); server.expect().post().withPath("/api/v1/namespaces/orderid-xxx-xxx-xxx/mycalculators") .andReturn(HttpURLConnection.HTTP_CREATED, crdMyCalc).once(); server.expect().post() .withPath( "/apis/examples.osl.etsi.org/v1alpha1/namespaces/orderid-xxx-xxx-xxx/mycalculators") .andReturn(HttpURLConnection.HTTP_CREATED, crdMyCalc).once(); // register the resource handler KubernetesClient client = routesPreparation.kubernetesClient; client.getKubernetesSerialization().registerKubernetesResource("examples.osl.etsi.org/v1alpha1", "MyCalculator", MyCalculator.class); // make the deployment test! response = kubernetesClientResource.deployCR(map, _CR_SPEC); assertEquals("OK", response); } @Test public void testCRWithWatch() throws Exception { // useful blog // https://itnext.io/mock-kubernetes-api-server-in-java-using-fabric8-kubernetes-mock-server-81a75cf6c47c // Given KubernetesClient client = routesPreparation.kubernetesClient; server.expect().withPath( "/apis/examples.osl.etsi.org/v1alpha1/namespaces/orderid-xxx-xxx-xxx/mycalculators?allowWatchBookmarks=true&watch=true") .andUpgradeToWebSocket().open().waitFor(10L) .andEmit(new WatchEvent(getMyCalculator("amycalculator"), "ADDED")).waitFor(20L) .andEmit(new WatchEventBuilder().withNewStatusObject() .withMessage("410 - the event requested is outdated") .withCode(HttpURLConnection.HTTP_GONE).endStatusObject().build()) .done().always(); MixedOperation<MyCalculator, KubernetesResourceList<MyCalculator>, Resource<MyCalculator>> userAclClient = client.resources(MyCalculator.class); // When CountDownLatch eventRecieved = new CountDownLatch(1); client.getKubernetesSerialization().registerKubernetesResource("examples.osl.etsi.org/v1alpha1", "MyCalculator", MyCalculator.class); Watch watch = userAclClient.inNamespace("orderid-xxx-xxx-xxx").watch(new Watcher<MyCalculator>() { @Override public void eventReceived(Action action, MyCalculator calc) { if (action.name().contains("ADDED")) { eventRecieved.countDown(); logger.info( "===============CountDownLatch eventRecieved.countDown ADDED {}=============================", Serialization.asYaml(calc)); } } @Override public void onClose(WatcherException e) {} }); // Then eventRecieved.await(30, TimeUnit.SECONDS); Assertions.assertEquals(0, eventRecieved.getCount()); watch.close(); } private KubernetesResource getMyCalculator(String resourceName) { Loading @@ -332,47 +332,47 @@ public class CridgeIntegrationTest { } // @Test // public void testKubernetesCRD2OpensliceCRD() throws FileNotFoundException { // // logger.info("===============TEST testCRDRegister ============================="); // // CustomResourceDefinition crdMyCalc = v1CRDFromCustomResourceType(MyCalculator.class).build(); // CustomResourceDefinition cronTabCrd = // routesPreparation.kubernetesClient.apiextensions().v1().customResourceDefinitions() // .load( // new BufferedInputStream(new FileInputStream("src/test/resources/crontab-crd.yaml"))) // .item(); // // List<KubernetesCRDV1> value = kubernetesClientResource.KubernetesCRD2OpensliceCRD(cronTabCrd); // // assertEquals(1, value.size()); // assertEquals("CronTab", value.get(0).getKind()); // assertEquals("v1", value.get(0).getVersion()); // assertEquals("stable.example.com", value.get(0).getApiGroup()); // // // } @Test public void testKubernetesCRD2OpensliceCRD() throws FileNotFoundException { // @Test // public void testKubernetesCRDOpensliceCR() throws FileNotFoundException { // // // logger.info("===============TEST testCRRegister ============================="); // // ResourceDefinitionContext resourceDefinitionContext = new ResourceDefinitionContext.Builder() // .withGroup("stable.example.com").withVersion("v1").withPlural("crontabs").build(); // // GenericKubernetesResource cronTabCr = // routesPreparation.kubernetesClient.genericKubernetesResources(resourceDefinitionContext) // .load(new FileInputStream("src/test/resources/crontab-cr.yaml")).item(); // // // KubernetesCRV1 value = kubernetesClientResource.KubernetesCR2OpensliceCR(cronTabCr); // // assertEquals("CronTab", value.getKind()); // // // } logger.info("===============TEST testCRDRegister ============================="); // CustomResourceDefinition crdMyCalc = v1CRDFromCustomResourceType(MyCalculator.class).build(); CustomResourceDefinition cronTabCrd = routesPreparation.kubernetesClient.apiextensions().v1().customResourceDefinitions() .load( new BufferedInputStream(new FileInputStream("src/test/resources/crontab-crd.yaml"))) .item(); List<KubernetesCRDV1> value = kubernetesClientResource.KubernetesCRD2OpensliceCRD(cronTabCrd); assertEquals(1, value.size()); assertEquals("CronTab", value.get(0).getKind()); assertEquals("v1", value.get(0).getVersion()); assertEquals("stable.example.com", value.get(0).getApiGroup()); } @Test public void testKubernetesCRDOpensliceCR() throws FileNotFoundException { logger.info("===============TEST testCRRegister ============================="); ResourceDefinitionContext resourceDefinitionContext = new ResourceDefinitionContext.Builder() .withGroup("stable.example.com").withVersion("v1").withPlural("crontabs").build(); GenericKubernetesResource cronTabCr = routesPreparation.kubernetesClient.genericKubernetesResources(resourceDefinitionContext) .load(new FileInputStream("src/test/resources/crontab-cr.yaml")).item(); KubernetesCRV1 value = kubernetesClientResource.KubernetesCR2OpensliceCR(cronTabCr); assertEquals("CronTab", value.getKind()); } @Test public void testKubernetesSecret2OpensliceResource() throws FileNotFoundException { Loading Loading
pom.xml +2 −2 Original line number Diff line number Diff line Loading @@ -19,15 +19,15 @@ <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- <spring.boot-version>3.2.2</spring.boot-version> <spring.boot.fabric8-version>3.1.0</spring.boot.fabric8-version> <fabric8.version>6.10.0</fabric8.version> --> <!-- <spring.boot-version>${spring-boot-version}</spring.boot-version> <spring.boot.fabric8-version>3.0.5</spring.boot.fabric8-version> <fabric8.version>6.6.2</fabric8.version> --> <camel.version>4.0.0-RC1</camel.version> <slf4j-api.version>1.7.5</slf4j-api.version> Loading
src/main/resources/application.yml +0 −3 Original line number Diff line number Diff line spring: config: activate: on-profile: "default" application: name: cridge main: Loading
src/test/java/org/etsi/osl/cridge/CridgeIntegrationTest.java +172 −172 Original line number Diff line number Diff line Loading @@ -176,139 +176,139 @@ public class CridgeIntegrationTest { } // @Test // public void testCRDEPLOY() throws Exception { // logger.info("===============TEST testCRDEPLOY ============================="); // // // // CustomResourceDefinition cronTabCrd = routesPreparation.kubernetesClient.apiextensions().v1() // // .customResourceDefinitions() // // .load(new BufferedInputStream(new FileInputStream("src/test/resources/crontab-crd.yaml"))) // // .item(); // // // // prepare CR_SPEC request // CustomResourceDefinition crdMyCalc = v1CRDFromCustomResourceType(MyCalculator.class).build(); // // // // Map<String, Object> map = new HashMap<>(); // map.put("currentContextCluster", "testCluster"); // map.put("clusterMasterURL", server.getHostName()); // map.put("org.etsi.osl.serviceId", "sid-xxx-xxx-xxx"); // map.put("org.etsi.osl.resourceId", "rid-xxx-xxx-xxx"); // map.put("org.etsi.osl.prefixName", "crrid12345"); // map.put("org.etsi.osl.serviceOrderId", "orderid-xxx-xxx-xxx"); // map.put("org.etsi.osl.namespace", "orderid-xxx-xxx-xxx"); // map.put("org.etsi.osl.statusCheckFieldName", "_CR_CHECK_FIELD"); // map.put("org.etsi.osl.statusCheckValueStandby", "_CR_CHECKVAL_STANDBY"); // map.put("org.etsi.osl.statusCheckValueAlarm", "_CR_CHECKVAL_ALARM"); // map.put("org.etsi.osl.statusCheckValueAvailable", "_CR_CHECKVAL_AVAILABLE"); // map.put("org.etsi.osl.statusCheckValueReserved", "_CR_CHECKVAL_RESERVED"); // map.put("org.etsi.osl.statusCheckValueUnknown", "_CR_CHECKVAL_UNKNOWN"); // map.put("org.etsi.osl.statusCheckValueSuspended", "_CR_CHECKVAL_SUSPENDED"); // // // String _CR_SPEC = Serialization.asYaml(getMyCalculator("test-resource")); // // // First check for an invalid context cluster // String response = kubernetesClientResource.deployCR(map, _CR_SPEC); // assertEquals("SEE OTHER", response); // // // // Now try for the correct context cluster // map.put("currentContextCluster", // kubernetesClientResource.getKubernetesContextDefinition().getCurrentContextCluster()); // map.put("clusterMasterURL", // kubernetesClientResource.getKubernetesContextDefinition().getMasterURL()); // // // // server api expectations // server.expect().get() // .withPath("/api/v1/namespaces/orderid-xxx-xxx-xxx/secrets?resourceVersion=0") // .andReturn(HttpURLConnection.HTTP_OK, crdMyCalc).once(); // // server.expect().get().withPath( // "/api/v1/namespaces/orderid-xxx-xxx-xxx/secrets?allowWatchBookmarks=true&timeoutSeconds=600&watch=true") // .andReturn(HttpURLConnection.HTTP_OK, crdMyCalc).once(); // // server.expect().get() // .withPath("/apis/stable.example.com/v1/namespaces/orderid-xxx-xxx-xxx/mycalculators") // .andReturn(HttpURLConnection.HTTP_OK, crdMyCalc).once(); // // server.expect().get().withPath( // "/apis/stable.example.com/v1/namespaces/orderid-xxx-xxx-xxx/mycalculators/amycalculator") // .andReturn(HttpURLConnection.HTTP_OK, crdMyCalc).once(); // // server.expect().post().withPath("/api/v1/namespaces/orderid-xxx-xxx-xxx/mycalculators") // .andReturn(HttpURLConnection.HTTP_CREATED, crdMyCalc).once(); // // server.expect().post() // .withPath( // "/apis/examples.osl.etsi.org/v1alpha1/namespaces/orderid-xxx-xxx-xxx/mycalculators") // .andReturn(HttpURLConnection.HTTP_CREATED, crdMyCalc).once(); // // // register the resource handler // KubernetesClient client = routesPreparation.kubernetesClient; // // client.getKubernetesSerialization().registerKubernetesResource("examples.osl.etsi.org/v1alpha1", // "MyCalculator", MyCalculator.class); // // // make the deployment test! // response = kubernetesClientResource.deployCR(map, _CR_SPEC); // // assertEquals("OK", response); // // } @Test public void testCRDEPLOY() throws Exception { logger.info("===============TEST testCRDEPLOY ============================="); // @Test // public void testCRWithWatch() throws Exception { // // useful blog // // https://itnext.io/mock-kubernetes-api-server-in-java-using-fabric8-kubernetes-mock-server-81a75cf6c47c // // // Given // KubernetesClient client = routesPreparation.kubernetesClient; // // server.expect().withPath( // "/apis/examples.osl.etsi.org/v1alpha1/namespaces/orderid-xxx-xxx-xxx/mycalculators?allowWatchBookmarks=true&watch=true") // .andUpgradeToWebSocket().open().waitFor(10L) // .andEmit(new WatchEvent(getMyCalculator("amycalculator"), "ADDED")).waitFor(20L) // .andEmit(new WatchEventBuilder().withNewStatusObject() // .withMessage("410 - the event requested is outdated") // .withCode(HttpURLConnection.HTTP_GONE).endStatusObject().build()) // .done().always(); // // MixedOperation<MyCalculator, KubernetesResourceList<MyCalculator>, Resource<MyCalculator>> userAclClient = // client.resources(MyCalculator.class); // // // // When // CountDownLatch eventRecieved = new CountDownLatch(1); // client.getKubernetesSerialization().registerKubernetesResource("examples.osl.etsi.org/v1alpha1", // "MyCalculator", MyCalculator.class); // // Watch watch = // userAclClient.inNamespace("orderid-xxx-xxx-xxx").watch(new Watcher<MyCalculator>() { // @Override // public void eventReceived(Action action, MyCalculator calc) { // if (action.name().contains("ADDED")) { // eventRecieved.countDown(); // logger.info( // "===============CountDownLatch eventRecieved.countDown ADDED {}=============================", // Serialization.asYaml(calc)); // } // } // // @Override // public void onClose(WatcherException e) {} // }); // // // Then // eventRecieved.await(30, TimeUnit.SECONDS); // Assertions.assertEquals(0, eventRecieved.getCount()); // watch.close(); // // } // CustomResourceDefinition cronTabCrd = routesPreparation.kubernetesClient.apiextensions().v1() // .customResourceDefinitions() // .load(new BufferedInputStream(new FileInputStream("src/test/resources/crontab-crd.yaml"))) // .item(); // prepare CR_SPEC request CustomResourceDefinition crdMyCalc = v1CRDFromCustomResourceType(MyCalculator.class).build(); Map<String, Object> map = new HashMap<>(); map.put("currentContextCluster", "testCluster"); map.put("clusterMasterURL", server.getHostName()); map.put("org.etsi.osl.serviceId", "sid-xxx-xxx-xxx"); map.put("org.etsi.osl.resourceId", "rid-xxx-xxx-xxx"); map.put("org.etsi.osl.prefixName", "crrid12345"); map.put("org.etsi.osl.serviceOrderId", "orderid-xxx-xxx-xxx"); map.put("org.etsi.osl.namespace", "orderid-xxx-xxx-xxx"); map.put("org.etsi.osl.statusCheckFieldName", "_CR_CHECK_FIELD"); map.put("org.etsi.osl.statusCheckValueStandby", "_CR_CHECKVAL_STANDBY"); map.put("org.etsi.osl.statusCheckValueAlarm", "_CR_CHECKVAL_ALARM"); map.put("org.etsi.osl.statusCheckValueAvailable", "_CR_CHECKVAL_AVAILABLE"); map.put("org.etsi.osl.statusCheckValueReserved", "_CR_CHECKVAL_RESERVED"); map.put("org.etsi.osl.statusCheckValueUnknown", "_CR_CHECKVAL_UNKNOWN"); map.put("org.etsi.osl.statusCheckValueSuspended", "_CR_CHECKVAL_SUSPENDED"); String _CR_SPEC = Serialization.asYaml(getMyCalculator("test-resource")); // First check for an invalid context cluster String response = kubernetesClientResource.deployCR(map, _CR_SPEC); assertEquals("SEE OTHER", response); // Now try for the correct context cluster map.put("currentContextCluster", kubernetesClientResource.getKubernetesContextDefinition().getCurrentContextCluster()); map.put("clusterMasterURL", kubernetesClientResource.getKubernetesContextDefinition().getMasterURL()); // server api expectations server.expect().get() .withPath("/api/v1/namespaces/orderid-xxx-xxx-xxx/secrets?resourceVersion=0") .andReturn(HttpURLConnection.HTTP_OK, crdMyCalc).once(); server.expect().get().withPath( "/api/v1/namespaces/orderid-xxx-xxx-xxx/secrets?allowWatchBookmarks=true&timeoutSeconds=600&watch=true") .andReturn(HttpURLConnection.HTTP_OK, crdMyCalc).once(); server.expect().get() .withPath("/apis/stable.example.com/v1/namespaces/orderid-xxx-xxx-xxx/mycalculators") .andReturn(HttpURLConnection.HTTP_OK, crdMyCalc).once(); server.expect().get().withPath( "/apis/stable.example.com/v1/namespaces/orderid-xxx-xxx-xxx/mycalculators/amycalculator") .andReturn(HttpURLConnection.HTTP_OK, crdMyCalc).once(); server.expect().post().withPath("/api/v1/namespaces/orderid-xxx-xxx-xxx/mycalculators") .andReturn(HttpURLConnection.HTTP_CREATED, crdMyCalc).once(); server.expect().post() .withPath( "/apis/examples.osl.etsi.org/v1alpha1/namespaces/orderid-xxx-xxx-xxx/mycalculators") .andReturn(HttpURLConnection.HTTP_CREATED, crdMyCalc).once(); // register the resource handler KubernetesClient client = routesPreparation.kubernetesClient; client.getKubernetesSerialization().registerKubernetesResource("examples.osl.etsi.org/v1alpha1", "MyCalculator", MyCalculator.class); // make the deployment test! response = kubernetesClientResource.deployCR(map, _CR_SPEC); assertEquals("OK", response); } @Test public void testCRWithWatch() throws Exception { // useful blog // https://itnext.io/mock-kubernetes-api-server-in-java-using-fabric8-kubernetes-mock-server-81a75cf6c47c // Given KubernetesClient client = routesPreparation.kubernetesClient; server.expect().withPath( "/apis/examples.osl.etsi.org/v1alpha1/namespaces/orderid-xxx-xxx-xxx/mycalculators?allowWatchBookmarks=true&watch=true") .andUpgradeToWebSocket().open().waitFor(10L) .andEmit(new WatchEvent(getMyCalculator("amycalculator"), "ADDED")).waitFor(20L) .andEmit(new WatchEventBuilder().withNewStatusObject() .withMessage("410 - the event requested is outdated") .withCode(HttpURLConnection.HTTP_GONE).endStatusObject().build()) .done().always(); MixedOperation<MyCalculator, KubernetesResourceList<MyCalculator>, Resource<MyCalculator>> userAclClient = client.resources(MyCalculator.class); // When CountDownLatch eventRecieved = new CountDownLatch(1); client.getKubernetesSerialization().registerKubernetesResource("examples.osl.etsi.org/v1alpha1", "MyCalculator", MyCalculator.class); Watch watch = userAclClient.inNamespace("orderid-xxx-xxx-xxx").watch(new Watcher<MyCalculator>() { @Override public void eventReceived(Action action, MyCalculator calc) { if (action.name().contains("ADDED")) { eventRecieved.countDown(); logger.info( "===============CountDownLatch eventRecieved.countDown ADDED {}=============================", Serialization.asYaml(calc)); } } @Override public void onClose(WatcherException e) {} }); // Then eventRecieved.await(30, TimeUnit.SECONDS); Assertions.assertEquals(0, eventRecieved.getCount()); watch.close(); } private KubernetesResource getMyCalculator(String resourceName) { Loading @@ -332,47 +332,47 @@ public class CridgeIntegrationTest { } // @Test // public void testKubernetesCRD2OpensliceCRD() throws FileNotFoundException { // // logger.info("===============TEST testCRDRegister ============================="); // // CustomResourceDefinition crdMyCalc = v1CRDFromCustomResourceType(MyCalculator.class).build(); // CustomResourceDefinition cronTabCrd = // routesPreparation.kubernetesClient.apiextensions().v1().customResourceDefinitions() // .load( // new BufferedInputStream(new FileInputStream("src/test/resources/crontab-crd.yaml"))) // .item(); // // List<KubernetesCRDV1> value = kubernetesClientResource.KubernetesCRD2OpensliceCRD(cronTabCrd); // // assertEquals(1, value.size()); // assertEquals("CronTab", value.get(0).getKind()); // assertEquals("v1", value.get(0).getVersion()); // assertEquals("stable.example.com", value.get(0).getApiGroup()); // // // } @Test public void testKubernetesCRD2OpensliceCRD() throws FileNotFoundException { // @Test // public void testKubernetesCRDOpensliceCR() throws FileNotFoundException { // // // logger.info("===============TEST testCRRegister ============================="); // // ResourceDefinitionContext resourceDefinitionContext = new ResourceDefinitionContext.Builder() // .withGroup("stable.example.com").withVersion("v1").withPlural("crontabs").build(); // // GenericKubernetesResource cronTabCr = // routesPreparation.kubernetesClient.genericKubernetesResources(resourceDefinitionContext) // .load(new FileInputStream("src/test/resources/crontab-cr.yaml")).item(); // // // KubernetesCRV1 value = kubernetesClientResource.KubernetesCR2OpensliceCR(cronTabCr); // // assertEquals("CronTab", value.getKind()); // // // } logger.info("===============TEST testCRDRegister ============================="); // CustomResourceDefinition crdMyCalc = v1CRDFromCustomResourceType(MyCalculator.class).build(); CustomResourceDefinition cronTabCrd = routesPreparation.kubernetesClient.apiextensions().v1().customResourceDefinitions() .load( new BufferedInputStream(new FileInputStream("src/test/resources/crontab-crd.yaml"))) .item(); List<KubernetesCRDV1> value = kubernetesClientResource.KubernetesCRD2OpensliceCRD(cronTabCrd); assertEquals(1, value.size()); assertEquals("CronTab", value.get(0).getKind()); assertEquals("v1", value.get(0).getVersion()); assertEquals("stable.example.com", value.get(0).getApiGroup()); } @Test public void testKubernetesCRDOpensliceCR() throws FileNotFoundException { logger.info("===============TEST testCRRegister ============================="); ResourceDefinitionContext resourceDefinitionContext = new ResourceDefinitionContext.Builder() .withGroup("stable.example.com").withVersion("v1").withPlural("crontabs").build(); GenericKubernetesResource cronTabCr = routesPreparation.kubernetesClient.genericKubernetesResources(resourceDefinitionContext) .load(new FileInputStream("src/test/resources/crontab-cr.yaml")).item(); KubernetesCRV1 value = kubernetesClientResource.KubernetesCR2OpensliceCR(cronTabCr); assertEquals("CronTab", value.getKind()); } @Test public void testKubernetesSecret2OpensliceResource() throws FileNotFoundException { Loading