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