From: sebdet Date: Wed, 20 Jan 2021 22:02:17 +0000 (+0100) Subject: First integration of Policy model PdpGroups X-Git-Tag: 6.0.1~16^2 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=078c34d0c2e439d8a148a2cd4d7545c6b7f56acb;p=policy%2Fclamp.git First integration of Policy model PdpGroups Replacement of the PdpGroups clamp code by the one from policy model dependency. Issue-ID: POLICY-2924 Signed-off-by: sebdet Change-Id: I12c77704bba1c769dc2f307d91b759a3b645013f Signed-off-by: sebdet --- diff --git a/pom.xml b/pom.xml index 99f8c05ed..6125e686d 100644 --- a/pom.xml +++ b/pom.xml @@ -21,1217 +21,1236 @@ =================================================================== --> - 4.0.0 - org.onap.policy - clamp - 6.0.0-SNAPSHOT - policy-clamp + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + org.onap.policy + clamp + 6.0.0-SNAPSHOT + policy-clamp - org.onap.policy.parent - integration - 3.3.0-SNAPSHOT - + org.onap.policy.parent + integration + 3.3.0-SNAPSHOT + - - This is the MAVEN project that builds everything for ONAP POLICY-CLAMP. - Docker engine is normally requires to perfom all possible tasks (including integration tests) + + This is the MAVEN project that builds everything for ONAP POLICY-CLAMP. + Docker engine is normally requires to perfom all possible tasks (including integration tests) - It can build: - - The ONAP POLICY-CLAMP JAR that contains CLAMP back-end code. - - The DOCKER images for: - * POLICY-CLAMP backend (Java Spring) - * POLICY-CLAMP frontend (Javscript React) + It can build: + - The ONAP POLICY-CLAMP JAR that contains CLAMP back-end code. + - The DOCKER images for: + * POLICY-CLAMP backend (Java Spring) + * POLICY-CLAMP frontend (Javscript React) - It can test: - - The POLICY-CLAMP backend, JAVA unit testing - - The POLICY-CLAMP backend, JAVA integration tests (with Spring + docker mariadb database + docker policy/dcae emulator written in python) - - The POLICY-CLAMP frontend, Javascrip tests (NodeJS(NPM) + JEST + Enzyme fro React) + It can test: + - The POLICY-CLAMP backend, JAVA unit testing + - The POLICY-CLAMP backend, JAVA integration tests (with Spring + docker mariadb database + docker policy/dcae + emulator written in python) + - The POLICY-CLAMP frontend, Javascrip tests (NodeJS(NPM) + JEST and Enzyme for React) - The test coverage for dev's can be found after a "clean install" build in: - - Clamp backend: target/jacoco-dev.exec (unit tests + integration tests merged) - or separately target/coverage-reports/jacoco.exec and target/coverage-reports/jacoco-it.exec - - Clamp frontend: target/ui-react/coverage + The test coverage for dev's can be found after a "clean install" build in: + - Clamp backend: target/jacoco-dev.exec (unit tests + integration tests merged) + or separately target/coverage-reports/jacoco.exec and target/coverage-reports/jacoco-it.exec + - Clamp frontend: target/ui-react/coverage - Useful mvn commands: - - mvn clean install: Build Clamp backend JAR + unit tests + integration tests + NPM tests (+coverage for all) - - mvn clean install -DskipITs=true: Build Clamp backend JAR + unit tests + NPM tests (+coverage for all), it does not require a DOCKER engine - - mvn clean install -DskipTests -P docker: Build Clamp backend JAR + all docker images + Useful mvn commands: + - mvn clean install: Build Clamp backend JAR + unit tests + integration tests + NPM tests (+coverage for all) + - mvn clean install -DskipITs=true: Build Clamp backend JAR + unit tests + NPM tests (+coverage for all), it + does not require a DOCKER engine + - mvn clean install -DskipTests -P docker: Build Clamp backend JAR + all docker images - To start POLICY-CLAMP (Build it before): - - Use docker-compose file in ./extra/docker/clamp/docker-compose.yml - - Use the script located in ./extra/bin/start-backend.sh + start-frontend.sh - - Use your IDE to use the Jar or start NVM/NPM + To start POLICY-CLAMP (Build it before): + - Use docker-compose file in ./extra/docker/clamp/docker-compose.yml + - Use the script located in ./extra/bin/start-backend.sh + start-frontend.sh + - Use your IDE to use the Jar or start NVM/NPM - + - - yyyyMMdd'T'HHmmss'Z' - ${project.version} - ${maven.build.timestamp} - UTF-8 - UTF-8 + + yyyyMMdd'T'HHmmss'Z' + ${project.version} + ${maven.build.timestamp} + UTF-8 + UTF-8 - 1.0.0 - 2.25.2 - 2.2.10.RELEASE + 1.0.0 + 2.25.2 + 2.2.10.RELEASE - jacoco - ${project.build.directory}/surefire-reports - ${project.build.directory}/jacoco-html-xml-reports/jacoco.xml - ${project.version} - DEBUG - ${project.build.directory}/${ui.react.src}/node/node - true - src/main,${project.build.directory}/${ui.react.src}/src - src/main/resources/** - true - ${project.build.directory}/${ui.react.src}/coverage/lcov.info - src/main/resources/**,target/ui-react/src/**/*.test.js,target/ui-react/src/setupTests.js - localhost:5000 - nexus3.onap.org:10001 - true - true - true - false - - 9.0.37 - ui-react - ui-react-lib - https://nexus3.onap.org/repository/npm.snapshot/ - + jacoco + ${project.build.directory}/surefire-reports + ${project.build.directory}/jacoco-html-xml-reports/jacoco.xml + + ${project.version} + DEBUG + ${project.build.directory}/${ui.react.src}/node/node + true + src/main,${project.build.directory}/${ui.react.src}/src + src/main/resources/** + true + ${project.build.directory}/${ui.react.src}/coverage/lcov.info + + + src/main/resources/**,target/ui-react/src/**/*.test.js,target/ui-react/src/setupTests.js + + localhost:5000 + nexus3.onap.org:10001 + true + true + true + false + + 9.0.37 + ui-react + ui-react-lib + https://nexus3.onap.org/repository/npm.snapshot/ + - - - - without-test - - - maven.test.skip - true - - - - true - true - - - - without-IT-only - - - skipITs - true - - - - true - true - - - - without-IT-only2 - - - skipTests - true - - - - true - true - - - - - docker - - true - false - false - false - false - - - + + + + without-test + + + maven.test.skip + true + + + + true + true + + + + without-IT-only + + + skipITs + true + + + + true + true + + + + without-IT-only2 + + + skipTests + true + + + + true + true + + + + + docker + + true + false + false + false + false + + + - - - ecomp-releases - ONAP Release Repository - https://nexus.onap.org/content/repositories/releases/ - - - ecomp-snapshots - ONAP Snapshot Repository - https://nexus.onap.org/content/repositories/snapshots/ - - - ecomp-site - dav:https://nexus.onap.org/content/sites/site/org/onap/policy/clamp/${project.version} - - + + + ecomp-releases + ONAP Release Repository + https://nexus.onap.org/content/repositories/releases/ + + + ecomp-snapshots + ONAP Snapshot Repository + https://nexus.onap.org/content/repositories/snapshots/ + + + ecomp-site + dav:https://nexus.onap.org/content/sites/site/org/onap/policy/clamp/${project.version} + + - - - onap-public - onap-public - https://nexus.onap.org/content/repositories/public/ - - true - - - false - - - - ecomp-releases - ONAP Release Repository - https://nexus.onap.org/content/repositories/releases/ - - - ecomp-staging - ONAP Staging Repository - https://nexus.onap.org/content/repositories/staging/ - - - ecomp-snapshots - ONAP Snapshot Repository - https://nexus.onap.org/content/repositories/snapshots/ - - true - - - false - - - - central - http://repo1.maven.org/maven2/ - - - - - onap-public - onap-public - https://nexus.onap.org/content/repositories/public/ - - true - - - false - - - - central - http://repo1.maven.org/maven2/ - - + + + onap-public + onap-public + https://nexus.onap.org/content/repositories/public/ + + true + + + false + + + + ecomp-releases + ONAP Release Repository + https://nexus.onap.org/content/repositories/releases/ + + + ecomp-staging + ONAP Staging Repository + https://nexus.onap.org/content/repositories/staging/ + + + ecomp-snapshots + ONAP Snapshot Repository + https://nexus.onap.org/content/repositories/snapshots/ + + true + + + false + + + + central + http://repo1.maven.org/maven2/ + + + + + onap-public + onap-public + https://nexus.onap.org/content/repositories/public/ + + true + + + false + + + + central + http://repo1.maven.org/maven2/ + + - - - - - org.springframework.boot - spring-boot-dependencies - ${springboot.version} - pom - import - - - - org.apache.camel - camel-spring-boot-dependencies - ${camel.version} - pom - import - - - + + + + + org.springframework.boot + spring-boot-dependencies + ${springboot.version} + pom + import + + + + org.apache.camel + camel-spring-boot-dependencies + ${camel.version} + pom + import + + + - - - com.att.eelf - eelf-core - ${eelf.core.version} - - - org.powermock - powermock-module-junit4 - - - org.powermock - powermock-api-mockito - - - - - org.codehaus.janino - janino - 3.0.8 - - - org.apache.tomcat.embed - tomcat-embed-core - ${tomcat.version} - - - org.apache.tomcat.embed - tomcat-embed-el - ${tomcat.version} - - - org.apache.tomcat.embed - tomcat-embed-websocket - ${tomcat.version} - - - org.apache.tomcat - tomcat-annotations-api - ${tomcat.version} - - - - org.apache.camel - camel-http4-starter - - - org.apache.camel - camel-spring-boot-starter - - - org.apache.camel - camel-jaxb-starter - - - org.apache.camel - camel-servlet-starter - - - org.apache.camel - camel-gson-starter - - - org.apache.camel - camel-swagger-java-starter - - - javax.ws.rs - jsr311-api - - - org.slf4j - slf4j-ext - - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-json - - - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.springframework - spring-jdbc - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-autoconfigure - - - org.springframework.boot - spring-boot-starter-test - test - - - com.vaadin.external.google - android-json - - - - - org.springframework.boot - spring-boot-starter-data-jpa - - - - - javax.xml.ws - jaxws-api - 2.3.1 - - - org.onap.aaf.authz - aaf-cadi-aaf - 2.1.15 - - - javax.servlet - servlet-api - - - log4j - log4j - - - - - ch.qos.logback - logback-core - 1.2.3 - - - ch.qos.logback - logback-classic - 1.2.3 - - - commons-io - commons-io - 2.6 - - - com.googlecode.json-simple - json-simple - 1.1.1 - - - org.apache.commons - commons-vfs2 - 2.2 - - - org.slf4j - slf4j-api - - - javax.transaction - jta - 1.1 - - - javax.persistence - persistence-api - 1.0.2 - - - - commons-codec - commons-codec - 1.14 - - - org.springframework.security - spring-security-web - 5.2.3.RELEASE - - - org.codehaus.plexus - plexus-utils - 3.0.24 - - - org.jboss.spec.javax.ws.rs - jboss-jaxrs-api_2.0_spec - 1.0.1.Final - - - com.google.guava - guava - 27.0-jre - + + + com.att.eelf + eelf-core + ${eelf.core.version} + + + org.powermock + powermock-module-junit4 + + + org.powermock + powermock-api-mockito + + + + + org.codehaus.janino + janino + 3.0.8 + + + org.apache.tomcat.embed + tomcat-embed-core + ${tomcat.version} + + + org.apache.tomcat.embed + tomcat-embed-el + ${tomcat.version} + + + org.apache.tomcat.embed + tomcat-embed-websocket + ${tomcat.version} + + + org.apache.tomcat + tomcat-annotations-api + ${tomcat.version} + + + + org.apache.camel + camel-http4-starter + + + org.apache.camel + camel-spring-boot-starter + + + org.apache.camel + camel-jaxb-starter + + + org.apache.camel + camel-servlet-starter + + + org.apache.camel + camel-gson-starter + + + org.apache.camel + camel-swagger-java-starter + + + javax.ws.rs + jsr311-api + + + org.slf4j + slf4j-ext + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-json + + + + + org.springframework.boot + spring-boot-starter-tomcat + + + org.springframework + spring-jdbc + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-autoconfigure + + + org.springframework.boot + spring-boot-starter-test + test + + + com.vaadin.external.google + android-json + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + org.onap.policy.models + policy-models-pdp + 2.3.5 + - - - org.mariadb.jdbc - mariadb-java-client - 2.6.2 - - - - org.onap.sdc.sdc-distribution-client - sdc-distribution-client - 1.4.1 - - - org.onap.sdc.sdc-tosca - sdc-tosca - 1.5.1 - - - com.fasterxml.jackson.core - jackson-databind - - - - - org.yaml - snakeyaml - 1.26 - - - org.dom4j - dom4j - 2.1.3 - + + + + javax.xml.ws + jaxws-api + 2.3.1 + + + org.onap.aaf.authz + aaf-cadi-aaf + 2.1.15 + + + javax.servlet + servlet-api + + + log4j + log4j + + + + + ch.qos.logback + logback-core + 1.2.3 + + + ch.qos.logback + logback-classic + 1.2.3 + + + commons-io + commons-io + 2.6 + + + com.googlecode.json-simple + json-simple + 1.1.1 + + + org.apache.commons + commons-vfs2 + 2.2 + + + org.slf4j + slf4j-api + + + javax.transaction + jta + 1.1 + + + javax.persistence + persistence-api + 1.0.2 + + + + commons-codec + commons-codec + 1.14 + + + org.springframework.security + spring-security-web + 5.2.3.RELEASE + + + org.codehaus.plexus + plexus-utils + 3.0.24 + + + org.jboss.spec.javax.ws.rs + jboss-jaxrs-api_2.0_spec + 1.0.1.Final + + + com.google.guava + guava + 27.0-jre + - - - junit - junit - test - - - org.assertj - assertj-core - 3.10.0 - test - - - org.mockito - mockito-core - 2.28.2 - test - - - org.powermock - powermock-api-mockito2 - 2.0.4 - test - - - org.powermock - powermock-module-junit4 - 2.0.4 - test - - - com.github.docker-java - docker-java-core - 3.2.1 - test - - - com.fasterxml.jackson.core - jackson-databind - - - - - com.github.docker-java - docker-java - 3.2.1 - test - - + + + org.mariadb.jdbc + mariadb-java-client + 2.6.2 + + + + org.onap.sdc.sdc-distribution-client + sdc-distribution-client + 1.4.1 + + + org.onap.sdc.sdc-tosca + sdc-tosca + 1.5.1 + + + com.fasterxml.jackson.core + jackson-databind + + + + + org.yaml + snakeyaml + 1.26 + + + org.dom4j + dom4j + 2.1.3 + - - policy-clamp-backend + + + junit + junit + test + + + org.assertj + assertj-core + 3.10.0 + test + + + org.mockito + mockito-core + 2.28.2 + test + + + org.powermock + powermock-api-mockito2 + 2.0.4 + test + + + org.powermock + powermock-module-junit4 + 2.0.4 + test + + + com.github.docker-java + docker-java-core + 3.2.1 + test + + + com.fasterxml.jackson.core + jackson-databind + + + + + com.github.docker-java + docker-java + 3.2.1 + test + + - - - src/main/resources - true - - clds/aaf/** - - - - src/main/resources - false - - clds/aaf/** - - - - src/test/resources - - **/*.jks - **/*.csar - - true - - - src/test/resources/https - - **.jks - - false - https - - - src/test/resources/example/sdc - - **.csar - - false - example/sdc - - - - - - src/main/resources - true - - clds/aaf/** - - - - src/main/resources - false - - clds/aaf/** - - - - ${ui.react.src} - - node_modules - - - src/** - public/** - package.json - package-lock.json - - true - ${project.build.directory}/${ui.react.src} - - - ${ui.react.src} - - src/** - - - **/__snapshots__/** - **/**.test.js - - true - ${project.build.directory}/${ui.react.lib.src} - - - ${ui.react.lib.src} - - ** - - - node_modules/** - package-lock.json - - true - ${project.build.directory}/${ui.react.lib.src} - - + + policy-clamp-backend - - - de.jpdigital - hibernate52-ddl-maven-plugin - 2.2.0 - - - javax.xml.bind - jaxb-api - 2.3.0 - - - - - process-classes - - gen-ddl - - - - org.onap.policy.clamp - - - MARIADB53 - - ${project.basedir}/extra/sql/bulkload/ - create-tables - - true - - - + + + src/main/resources + true + + clds/aaf/** + + + + src/main/resources + false + + clds/aaf/** + + + + src/test/resources + + **/*.jks + **/*.csar + + true + + + src/test/resources/https + + **.jks + + false + https + + + src/test/resources/example/sdc + + **.csar + + false + example/sdc + + + + + + src/main/resources + true + + clds/aaf/** + + + + src/main/resources + false + + clds/aaf/** + + + + ${ui.react.src} + + node_modules + + + src/** + public/** + package.json + package-lock.json + + true + ${project.build.directory}/${ui.react.src} + + + ${ui.react.src} + + src/** + + + **/__snapshots__/** + **/**.test.js + + true + ${project.build.directory}/${ui.react.lib.src} + + + ${ui.react.lib.src} + + ** + + + node_modules/** + package-lock.json + + true + ${project.build.directory}/${ui.react.lib.src} + + - - - - io.github.swagger2markup - swagger2markup-maven-plugin - 1.3.3 - - - io.github.swagger2markup - swagger2markup-import-files-ext - 1.3.3 - - - io.github.swagger2markup - swagger2markup-spring-restdocs-ext - 1.3.3 - - - - ${project.basedir}/docs/swagger/swagger.json - ${project.build.directory}/asciidoc/generated - - ASCIIDOC - - - - - post-integration-test - - convertSwagger2markup - - - - + + + de.jpdigital + hibernate52-ddl-maven-plugin + 2.2.0 + + + javax.xml.bind + jaxb-api + 2.3.0 + + + + + process-classes + + gen-ddl + + + + org.onap.policy.clamp + + + MARIADB53 + + ${project.basedir}/extra/sql/bulkload/ + create-tables + + true + + + - - - org.asciidoctor - asciidoctor-maven-plugin - 1.5.7.1 - - - org.asciidoctor - asciidoctorj-pdf - 1.5.0-alpha.10.1 - - - - ${project.basedir}/src/main/resources/asciidoc - swagger.adoc - - book - left - 3 - - - - - ${project.build.directory}/asciidoc/generated - - + + + + io.github.swagger2markup + swagger2markup-maven-plugin + 1.3.3 + + + io.github.swagger2markup + swagger2markup-import-files-ext + 1.3.3 + + + io.github.swagger2markup + swagger2markup-spring-restdocs-ext + 1.3.3 + + + + ${project.basedir}/docs/swagger/swagger.json + ${project.build.directory}/asciidoc/generated + + ASCIIDOC + + + + + post-integration-test + + convertSwagger2markup + + + + - - - output-html - post-integration-test - - process-asciidoc - - - html5 - ${project.basedir}/docs/swagger - ${project.basedir}/src/main/resources/META-INF/resources/ - - - - output-pdf - post-integration-test - - process-asciidoc - - - pdf - ${project.basedir}/docs/swagger - - - - - - org.codehaus.groovy.maven - gmaven-plugin - 1.0 - - - docker-tags - validate - - execute - - - ${project.basedir}/src/main/script/TagVersion.groovy - - - - npm-repos-selection - validate - - execute - - - ${project.basedir}/src/main/script/SelectNpmRepo.groovy - - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.0.2 - - - jar-with-only-classes - package - - jar - - - classes - - org/** - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - 3.0.0 - - - - attach-artifact - - package - - - - ${project.build.directory}/policy-clamp-backend-classes.jar - jar - classes - - - - - - reserve-port-for-tests - process-resources - - reserve-network-port - - - - docker.mariadb.port.host - docker.http-cache.port.host - clamp.it.tests.http-redirected - clamp.it.tests.robotframework.http - clamp.it.tests.https - clamp.it.tests.http - - - - - + + + org.asciidoctor + asciidoctor-maven-plugin + 1.5.7.1 + + + org.asciidoctor + asciidoctorj-pdf + 1.5.0-alpha.10.1 + + + + ${project.basedir}/src/main/resources/asciidoc + swagger.adoc + + book + left + 3 + + + + + ${project.build.directory}/asciidoc/generated + + - - org.springframework.boot - spring-boot-maven-plugin - ${springboot.version} - - - - repackage - - package - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.22.2 - - 1C - true - false - ${surefireArgLine} - - + + + output-html + post-integration-test + + process-asciidoc + + + html5 + ${project.basedir}/docs/swagger + ${project.basedir}/src/main/resources/META-INF/resources/ + + + + output-pdf + post-integration-test + + process-asciidoc + + + pdf + ${project.basedir}/docs/swagger + + + + + + org.codehaus.groovy.maven + gmaven-plugin + 1.0 + + + docker-tags + validate + + execute + + + ${project.basedir}/src/main/script/TagVersion.groovy + + + + npm-repos-selection + validate + + execute + + + ${project.basedir}/src/main/script/SelectNpmRepo.groovy + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.0.2 + + + jar-with-only-classes + package + + jar + + + classes + + org/** + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.0.0 + + + + attach-artifact + + package + + + + ${project.build.directory}/policy-clamp-backend-classes.jar + jar + classes + + + + + + reserve-port-for-tests + process-resources + + reserve-network-port + + + + docker.mariadb.port.host + docker.http-cache.port.host + clamp.it.tests.http-redirected + clamp.it.tests.robotframework.http + clamp.it.tests.https + clamp.it.tests.http + + + + + - - org.apache.maven.plugins - maven-failsafe-plugin - 2.22.2 - - - integration-tests - - integration-test - verify - - - - ${project.build.directory}/classes - - - **/*ItCase.java - - 1C - true - false - ${failsafeArgLine} - - - - - - io.fabric8 - docker-maven-plugin - 0.31.0 - - - org.apache.httpcomponents - httpclient - 4.5.5 - - - - true - 1.35 - - - docker.io/mariadb:10.5.4 - mariadb - - - strong_pitchou - - mariadb - - - ${project.basedir}/extra/sql/:/docker-entrypoint-initdb.d:rw - ${project.basedir}/extra/docker/mariadb/conf1:/etc/mysql/conf.d - - - - socket: '/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution - - - /docker-entrypoint-initdb.d/dump/backup-data-only.sh - - - - ${docker.mariadb.port.host}:3306 - - - bridge - - - - - docker.io/python:2-slim - python - - python - - - ${project.basedir}/src/test/resources/http-cache/:/usr/src/http-cache-app - ${project.basedir}/src/test/resources/http-cache/example/:/usr/src/http-cache-app/data-cache - - - - - - 8080 - - direct - - - - - ${docker.http-cache.port.host}:8080 - - /usr/src/http-cache-app - - ./start_http_cache.sh ${python.http.proxy.param} - --python_proxyaddress=localhost:${docker.http-cache.port.host} - - - bridge - - - - - onap/policy-clamp-backend - onap-policy-clamp-backend - - true - - - true - - latest - ${project.docker.latesttagtimestamp.version} - ${project.docker.latesttag.version} - - - backend/Dockerfile - - backend/backend-files.xml - onap-policy-clamp-backend - - - - - onap/policy-clamp-frontend - onap-policy-clamp-frontend - - true - - - true - - latest - ${project.docker.latesttagtimestamp.version} - ${project.docker.latesttag.version} - - - frontend/Dockerfile - - frontend/frontend-files.xml - onap-policy-clamp-frontend - - - - - + + org.springframework.boot + spring-boot-maven-plugin + ${springboot.version} + + + + repackage + + package + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.2 + + 1C + true + false + ${surefireArgLine} + + - - - generate-images - install - - build - - - - push-images - deploy - - push - - - - docker-start-for-it - pre-integration-test - - start - - - - docker-stop-for-it - post-integration-test - - stop - - - - + + org.apache.maven.plugins + maven-failsafe-plugin + 2.22.2 + + + integration-tests + + integration-test + verify + + + + ${project.build.directory}/classes + + + + **/*ItCase.java + + 1C + true + false + ${failsafeArgLine} + + + + + + io.fabric8 + docker-maven-plugin + 0.31.0 + + + org.apache.httpcomponents + httpclient + 4.5.5 + + + + true + 1.35 + + + docker.io/mariadb:10.5.4 + mariadb + + + strong_pitchou + + mariadb + + + ${project.basedir}/extra/sql/:/docker-entrypoint-initdb.d:rw + ${project.basedir}/extra/docker/mariadb/conf1:/etc/mysql/conf.d + + + + socket: '/run/mysqld/mysqld.sock' + + + /docker-entrypoint-initdb.d/dump/backup-data-only.sh + + + + ${docker.mariadb.port.host}:3306 + + + bridge + + + + + docker.io/python:2-slim + python + + python + + + + ${project.basedir}/src/test/resources/http-cache/:/usr/src/http-cache-app + + + ${project.basedir}/src/test/resources/http-cache/example/:/usr/src/http-cache-app/data-cache + + + + + + + 8080 + + direct + + + + + ${docker.http-cache.port.host}:8080 + + /usr/src/http-cache-app + + ./start_http_cache.sh ${python.http.proxy.param} + --python_proxyaddress=localhost:${docker.http-cache.port.host} + + + + bridge + + + + + onap/policy-clamp-backend + onap-policy-clamp-backend + + true + + + true + + latest + ${project.docker.latesttagtimestamp.version} + ${project.docker.latesttag.version} + + + backend/Dockerfile + + backend/backend-files.xml + onap-policy-clamp-backend + + + + + onap/policy-clamp-frontend + onap-policy-clamp-frontend + + true + + + true + + latest + ${project.docker.latesttagtimestamp.version} + ${project.docker.latesttag.version} + + + frontend/Dockerfile + + frontend/frontend-files.xml + onap-policy-clamp-frontend + + + + + - - org.jacoco - jacoco-maven-plugin - 0.8.5 - - true - true - - org/onap/policy/clamp/** - - - - - pre-unit-test - - prepare-agent - - - ${project.build.directory}/coverage-reports/jacoco.exec - surefireArgLine - - - - - pre-integration-test - pre-integration-test - - prepare-agent - - - ${project.build.directory}/coverage-reports/jacoco-it.exec - failsafeArgLine - - - false - - - - - merge - - post-integration-test - - - - ${project.build.directory}/coverage-reports - - *.exec - - - - ${project.build.directory}/jacoco.exec - - - - report-xml - - report - - - - ${project.build.directory}/jacoco.exec - ${project.build.directory}/jacoco-html-xml-reports - - - - + + + generate-images + install + + build + + + + push-images + deploy + + push + + + + docker-start-for-it + pre-integration-test + + start + + + + docker-stop-for-it + post-integration-test + + stop + + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.5 + + true + true + + org/onap/policy/clamp/** + + + + + pre-unit-test + + prepare-agent + + + ${project.build.directory}/coverage-reports/jacoco.exec + surefireArgLine + + + + + pre-integration-test + pre-integration-test + + prepare-agent + + + ${project.build.directory}/coverage-reports/jacoco-it.exec + failsafeArgLine + + + false + + + + + merge + + post-integration-test + + + + ${project.build.directory}/coverage-reports + + *.exec + + + + ${project.build.directory}/jacoco.exec + + + + report-xml + + report + + + + ${project.build.directory}/jacoco.exec + ${project.build.directory}/jacoco-html-xml-reports + + + + - - - org.codehaus.mojo - versions-maven-plugin - 1.3.1 - + + + org.codehaus.mojo + versions-maven-plugin + 1.3.1 + - - com.github.eirslett - frontend-maven-plugin - 1.8.0 - - ${project.build.directory}/${ui.react.src} - - - - install_node_and_npm - - install-node-and-npm - - generate-sources - - v12.13.0 - 6.13.0 - - - - npm_install - - npm - - compile - - ${project.build.directory}/${ui.react.src} - install - - - - npm_test - - npm - - test - - ${maven.test.skip} - run-script test:coverage - ${project.build.directory}/${ui.react.src} - - - - npm_install_lib - - npm - - deploy - - ${project.build.directory}/${ui.react.lib.src} - install - - - - npm_build_lib - - npm - - deploy - - ${project.build.directory}/${ui.react.lib.src} - run build - - - - npm_publish - - npm - - deploy - - ${project.build.directory}/${ui.react.lib.src} - publish - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - 11 - 11 - - - - org.sonarsource.scanner.maven - sonar-maven-plugin - 3.7.0.1746 - + + com.github.eirslett + frontend-maven-plugin + 1.8.0 + + ${project.build.directory}/${ui.react.src} + + + + install_node_and_npm + + install-node-and-npm + + generate-sources + + v12.13.0 + 6.13.0 + + + + npm_install + + npm + + compile + + ${project.build.directory}/${ui.react.src} + install + + + + npm_test + + npm + + test + + ${maven.test.skip} + run-script test:coverage + ${project.build.directory}/${ui.react.src} + + + + npm_install_lib + + npm + + deploy + + ${project.build.directory}/${ui.react.lib.src} + install + + + + npm_build_lib + + npm + + deploy + + ${project.build.directory}/${ui.react.lib.src} + run build + + + + npm_publish + + npm + + deploy + + ${project.build.directory}/${ui.react.lib.src} + publish + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 11 + 11 + + + + org.sonarsource.scanner.maven + sonar-maven-plugin + 3.7.0.1746 + org.codehaus.mojo exec-maven-plugin - 1.3.2 - + 1.3.2 + libIndexCheck validate @@ -1246,7 +1265,7 @@ ${project.basedir}/src/main/script/checkLibIndex.sh - - - + + + diff --git a/src/main/docker/frontend/nginx/default.conf b/src/main/docker/frontend/nginx/default.conf index b15429c74..570806034 100644 --- a/src/main/docker/frontend/nginx/default.conf +++ b/src/main/docker/frontend/nginx/default.conf @@ -6,7 +6,7 @@ server { ssl_certificate_key /etc/ssl/clamp.key; ssl_verify_client optional_no_ca; location /restservices/clds/ { - proxy_pass https://clamp-backend:8443; + proxy_pass https://policy-clamp-backend:8443; proxy_set_header X-SSL-Cert $ssl_client_escaped_cert; } diff --git a/src/main/java/org/onap/policy/clamp/clds/client/PolicyEngineServices.java b/src/main/java/org/onap/policy/clamp/clds/client/PolicyEngineServices.java index bc6a68286..46c55ea45 100644 --- a/src/main/java/org/onap/policy/clamp/clds/client/PolicyEngineServices.java +++ b/src/main/java/org/onap/policy/clamp/clds/client/PolicyEngineServices.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights + * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -39,7 +39,8 @@ import org.onap.policy.clamp.clds.sdc.controller.installer.BlueprintMicroService import org.onap.policy.clamp.clds.util.JsonUtils; import org.onap.policy.clamp.loop.template.PolicyModel; import org.onap.policy.clamp.loop.template.PolicyModelsService; -import org.onap.policy.clamp.policy.pdpgroup.PdpGroup; +import org.onap.policy.models.pdp.concepts.PdpGroup; +import org.onap.policy.models.pdp.concepts.PdpGroups; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.yaml.snakeyaml.DumperOptions; @@ -50,6 +51,8 @@ import org.yaml.snakeyaml.Yaml; * The class implements the communication with the Policy Engine to retrieve * policy models (tosca). It mainly delegates the physical calls to Camel * engine. + * It supports a retry mechanism for these calls, configurations can be specified in the + * application.properties "policy.retry.interval"(default 0) and "policy.retry.limit"(default 1). */ @Component public class PolicyEngineServices { @@ -192,18 +195,7 @@ public class PolicyEngineServices { return; } - JsonObject jsonObj = JsonUtils.GSON.fromJson(responseBody, JsonObject.class); - - List pdpGroupList = new LinkedList<>(); - JsonArray itemsArray = (JsonArray) jsonObj.get("groups"); - - for (com.google.gson.JsonElement jsonElement : itemsArray) { - JsonObject item = (JsonObject) jsonElement; - PdpGroup pdpGroup = JsonUtils.GSON.fromJson(item.toString(), PdpGroup.class); - pdpGroupList.add(pdpGroup); - } - - policyModelsService.updatePdpGroupInfo(pdpGroupList); + policyModelsService.updatePdpGroupInfo(JsonUtils.GSON.fromJson(responseBody, PdpGroups.class)); } private String callCamelRoute(Exchange exchange, String camelFlow, String logMsg) { diff --git a/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java b/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java index 8670ab73e..f0830360e 100644 --- a/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java +++ b/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights + * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -30,13 +30,18 @@ import java.util.Collections; import java.util.List; import org.onap.policy.clamp.clds.tosca.ToscaSchemaConstants; import org.onap.policy.clamp.clds.tosca.ToscaYamlToJsonConvertor; -import org.onap.policy.clamp.policy.pdpgroup.PdpGroup; +import org.onap.policy.clamp.policy.pdpgroup.PdpGroupsAnalyzer; import org.onap.policy.clamp.util.SemanticVersioning; +import org.onap.policy.models.pdp.concepts.PdpGroup; +import org.onap.policy.models.pdp.concepts.PdpGroups; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +/** + * This class contains the methods to access the policyModel object in db. + */ @Service public class PolicyModelsService { private final PolicyModelsRepository policyModelsRepository; @@ -44,7 +49,7 @@ public class PolicyModelsService { @Autowired public PolicyModelsService(PolicyModelsRepository policyModelrepo, - ToscaYamlToJsonConvertor convertor) { + ToscaYamlToJsonConvertor convertor) { policyModelsRepository = policyModelrepo; toscaYamlToJsonConvertor = convertor; } @@ -78,31 +83,31 @@ public class PolicyModelsService { public PolicyModel createNewPolicyModelFromTosca(String policyModelTosca) { JsonObject jsonObject = toscaYamlToJsonConvertor.validateAndConvertToJson(policyModelTosca); String policyModelTypeFromTosca = toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject, - ToscaSchemaConstants.METADATA_POLICY_MODEL_TYPE); + ToscaSchemaConstants.METADATA_POLICY_MODEL_TYPE); Iterable models = getAllPolicyModelsByType(policyModelTypeFromTosca); Collections.sort((List) models); PolicyModel newPolicyModel = new PolicyModel(policyModelTypeFromTosca, policyModelTosca, - SemanticVersioning.incrementMajorVersion(((ArrayList) models).isEmpty() ? null - : ((ArrayList) models).get(0).getVersion()), - toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject, - ToscaSchemaConstants.METADATA_ACRONYM)); + SemanticVersioning.incrementMajorVersion(((ArrayList) models).isEmpty() ? null + : ((ArrayList) models).get(0).getVersion()), + toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject, + ToscaSchemaConstants.METADATA_ACRONYM)); return saveOrUpdatePolicyModel(newPolicyModel); } /** * Update an existing Tosca Policy Model. * - * @param policyModelType The policy Model type in Tosca yaml + * @param policyModelType The policy Model type in Tosca yaml * @param policyModelVersion The policy Version to update - * @param policyModelTosca The Policy Model tosca + * @param policyModelTosca The Policy Model tosca * @return The Policy Model updated */ public PolicyModel updatePolicyModelTosca(String policyModelType, String policyModelVersion, - String policyModelTosca) { + String policyModelTosca) { JsonObject jsonObject = toscaYamlToJsonConvertor.validateAndConvertToJson(policyModelTosca); PolicyModel thePolicyModel = getPolicyModel(policyModelType, policyModelVersion); thePolicyModel.setPolicyAcronym(toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject, - ToscaSchemaConstants.METADATA_ACRONYM)); + ToscaSchemaConstants.METADATA_ACRONYM)); thePolicyModel.setPolicyModelTosca(policyModelTosca); return saveOrUpdatePolicyModel(thePolicyModel); } @@ -126,13 +131,13 @@ public class PolicyModelsService { /** * Retrieves the Tosca model Yaml string. * - * @param type The Policy Model Type + * @param type The Policy Model Type * @param version The policy model version * @return The Tosca model Yaml string */ public String getPolicyModelTosca(String type, String version) { return policyModelsRepository.findById(new PolicyModelId(type, version)) - .orElse(new PolicyModel()).getPolicyModelTosca(); + .orElse(new PolicyModel()).getPolicyModelTosca(); } /** @@ -148,26 +153,11 @@ public class PolicyModelsService { /** * Update the Pdp Group info in Policy Model DB. * - * @param pdpGroupList The list of Pdp Group info received from Policy Engine + * @param pdpGroups The list of Pdp Group info received from Policy Engine */ - public void updatePdpGroupInfo(List pdpGroupList) { - List policyModelList = policyModelsRepository.findAll(); - for (PolicyModel policyModel : policyModelList) { - JsonArray supportedPdpGroups = new JsonArray(); - for (PdpGroup pdpGroup : pdpGroupList) { - JsonObject supportedPdpGroup = pdpGroup.getSupportedSubgroups( - policyModel.getPolicyModelType(), policyModel.getVersion()); - if (supportedPdpGroup != null) { - supportedPdpGroups.add(supportedPdpGroup); - } - } - - if (supportedPdpGroups.size() > 0) { - JsonObject supportedPdpJson = new JsonObject(); - supportedPdpJson.add("supportedPdpGroups", supportedPdpGroups); - policyModel.setPolicyPdpGroup(supportedPdpJson); - policyModelsRepository.saveAndFlush(policyModel); - } - } + public void updatePdpGroupInfo(PdpGroups pdpGroups) { + List policyModelsList = policyModelsRepository.findAll(); + PdpGroupsAnalyzer.updatePdpGroup(policyModelsList, pdpGroups); + this.policyModelsRepository.saveAll(policyModelsList); } } diff --git a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroup.java b/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroup.java deleted file mode 100644 index 9cbeec109..000000000 --- a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroup.java +++ /dev/null @@ -1,92 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed 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. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.policy.pdpgroup; - -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import com.google.gson.annotations.Expose; -import java.util.List; - -/** - * This class maps the get Pdp Group response to a nice pojo. - */ -public class PdpGroup { - - @Expose - private String name; - - @Expose - private String pdpGroupState; - - @Expose - private List pdpSubgroups; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getPdpGroupState() { - return pdpGroupState; - } - - public void setPdpGroupState(String pdpGroupState) { - this.pdpGroupState = pdpGroupState; - } - - public List getPdpSubgroups() { - return pdpSubgroups; - } - - public void setPdpSubgroups(List pdpSubgroups) { - this.pdpSubgroups = pdpSubgroups; - } - - /** - * Get supported subGroups based on the defined policy type and version. - * @param policyType The policy type - * @param version The version - * @return The supported subGroup list in Json format - */ - public JsonObject getSupportedSubgroups(String policyType, String version) { - if (!pdpGroupState.equalsIgnoreCase("ACTIVE")) { - return null; - } - JsonArray supportedSubgroups = new JsonArray(); - for (PdpSubgroup subGroup : pdpSubgroups) { - if (subGroup.getSupportedPolicyTypes().contains(new PolicyModelKey(policyType, version))) { - supportedSubgroups.add(subGroup.getPdpType()); - } - } - if (supportedSubgroups.size() > 0) { - JsonObject supportedPdpGroup = new JsonObject(); - supportedPdpGroup.add(this.name, supportedSubgroups); - return supportedPdpGroup; - } - return null; - } -} diff --git a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroupsAnalyzer.java b/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroupsAnalyzer.java new file mode 100644 index 000000000..51cdb149e --- /dev/null +++ b/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroupsAnalyzer.java @@ -0,0 +1,94 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2021 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.policy.pdpgroup; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import org.onap.policy.clamp.loop.template.PolicyModel; +import org.onap.policy.models.pdp.concepts.PdpGroup; +import org.onap.policy.models.pdp.concepts.PdpGroups; +import org.onap.policy.models.pdp.concepts.PdpSubGroup; +import org.onap.policy.models.pdp.enums.PdpState; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier; +import org.onap.sdc.toscaparser.api.elements.PolicyType; + +/** + * This is an utility class to do searching in pdp groups. + */ +public class PdpGroupsAnalyzer { + /** + * Get supported subGroups based on the defined policy type and version for s specific PDPgroup. + * It returns null if the Group is not ACTIVE or if the policytype/version has not been found in the PDPSubgroups. + * + * @param pdpGroup The pdpGroup that must be analyzed + * @param policyType The policy type + * @param version The version + * @return The supported subGroups list in Json format + * @see org.onap.policy.models.pdp.concepts.PdpGroup + * @see org.onap.policy.models.pdp.enums.PdpState + */ + private static JsonObject getSupportedSubgroups(PdpGroup pdpGroup, String policyType, String version) { + if (!PdpState.ACTIVE.equals(pdpGroup.getPdpGroupState())) { + return null; + } + JsonObject supportedPdpGroup = new JsonObject(); + JsonArray supportedSubgroups = new JsonArray(); + supportedPdpGroup.add(pdpGroup.getName(), supportedSubgroups); + pdpGroup.getPdpSubgroups().stream().forEach(pdpSubGroup -> { + if (pdpSubGroup.getSupportedPolicyTypes().stream().anyMatch(policyTypeIdentifier -> + policyType.matches(policyTypeIdentifier.getName().replace(".", "\\.").replace("*", ".*")) + && version.equals(policyTypeIdentifier.getVersion()))) { + supportedSubgroups.add(pdpSubGroup.getPdpType()); + } + }); + if (supportedSubgroups.size() == 0) { + return null; + } + return supportedPdpGroup; + } + + /** + * This method updates each element in the policyModelsList given in argument based on the pdpGroups given. + * + * @param policyModelsList The list of Policy Models where each PolicyModel will be updated + * @param pdpGroups The PdpGroups containing all PDP group definition + */ + public static void updatePdpGroup(List policyModelsList, PdpGroups pdpGroups) { + policyModelsList.parallelStream().forEach(policyModel -> { + JsonObject jsonResult = new JsonObject(); + JsonArray supportedPdpGroups = new JsonArray(); + jsonResult.add("supportedPdpGroups", supportedPdpGroups); + policyModel.setPolicyPdpGroup(jsonResult); + pdpGroups.getGroups().stream().map(pdpGroup -> PdpGroupsAnalyzer.getSupportedSubgroups(pdpGroup, + policyModel.getPolicyModelType(), policyModel.getVersion())).filter(Objects::nonNull) + .forEach(jsonPdpGroup -> supportedPdpGroups.add(jsonPdpGroup)); + if (supportedPdpGroups.size() == 0) { + policyModel.setPolicyPdpGroup(null); + } + }); + } +} \ No newline at end of file diff --git a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpSubgroup.java b/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpSubgroup.java deleted file mode 100644 index 890f90775..000000000 --- a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpSubgroup.java +++ /dev/null @@ -1,56 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed 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. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.policy.pdpgroup; - -import com.google.gson.annotations.Expose; -import java.util.List; - -/** - * This class maps the Policy get PDP Group response to a nice pojo. - */ -public class PdpSubgroup { - - @Expose - private String pdpType; - - @Expose - private List supportedPolicyTypes; - - public String getPdpType() { - return pdpType; - } - - public void setPdpType(String pdpType) { - this.pdpType = pdpType; - } - - public List getSupportedPolicyTypes() { - return supportedPolicyTypes; - } - - public void setSupportedPolicyTypes(List supportedPolicyTypes) { - this.supportedPolicyTypes = supportedPolicyTypes; - } - -} diff --git a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PolicyModelKey.java b/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PolicyModelKey.java deleted file mode 100644 index df92bfdf9..000000000 --- a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PolicyModelKey.java +++ /dev/null @@ -1,125 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed 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. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.policy.pdpgroup; - -import com.google.gson.annotations.Expose; -import java.io.Serializable; - -public class PolicyModelKey implements Serializable { - - /** - * The serial version ID. - */ - private static final long serialVersionUID = 3307410842013230886L; - - @Expose - private String name; - - @Expose - private String version; - - /** - * Constructor. - */ - public PolicyModelKey(String name, String version) { - this.name = name; - this.version = version; - } - - /** - * name getter. - * - * @return the name - */ - public String getName() { - return name; - } - - /** - * name setter. - * - * @param name the name to set - */ - public void setName(String name) { - this.name = name; - } - - /** - * version getter. - * - * @return the version - */ - public String getVersion() { - return version; - } - - /** - * version setter. - * - * @param version the version to set - */ - public void setVersion(String version) { - this.version = version; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); - result = prime * result + ((version == null) ? 0 : version.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - PolicyModelKey other = (PolicyModelKey) obj; - if (name == null) { - if (other.name != null) { - return false; - } - } else if (!name.equals(other.name)) { - if (!name.matches(other.name)) { - return false; - } - } - if (version == null) { - if (other.version != null) { - return false; - } - } else if (!version.equals(other.version)) { - return false; - } - return true; - } -} diff --git a/src/main/resources/clds/camel/routes/policy-flows.xml b/src/main/resources/clds/camel/routes/policy-flows.xml index 0ee386eb4..4d1eba614 100644 --- a/src/main/resources/clds/camel/routes/policy-flows.xml +++ b/src/main/resources/clds/camel/routes/policy-flows.xml @@ -109,7 +109,7 @@ + uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/policies/deployed/${exchangeProperty[policyName]}/1.0.0?bridgeEndpoint=true&useSystemProperties=true&throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&authMethod=Basic&authUsername={{clamp.config.policy.pap.userName}}&authPassword={{clamp.config.policy.pap.password}}&httpClient.connectTimeout=10000&httpClient.socketTimeout=20000&authenticationPreemptive=true&connectionClose=true"/> java.lang.Exception @@ -427,7 +427,41 @@ + uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/pdps?bridgeEndpoint=true&useSystemProperties=true&throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&authMethod=Basic&authUsername={{clamp.config.policy.pap.userName}}&authPassword={{clamp.config.policy.pap.password}}&httpClient.connectTimeout=10000&httpClient.socketTimeout=20000&authenticationPreemptive=true&connectionClose=true"/> + + + + + + + + + + + + + + GET + + + ${exchangeProperty[X-ONAP-RequestID]} + + + + ${exchangeProperty[X-ONAP-InvocationID]} + + + + ${exchangeProperty[X-ONAP-PartnerName]} + + + + diff --git a/src/test/java/org/onap/policy/clamp/loop/PolicyModelServiceItCase.java b/src/test/java/org/onap/policy/clamp/loop/PolicyModelServiceItCase.java index e7df80cd8..a98291be0 100644 --- a/src/test/java/org/onap/policy/clamp/loop/PolicyModelServiceItCase.java +++ b/src/test/java/org/onap/policy/clamp/loop/PolicyModelServiceItCase.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP CLAMP * ================================================================================ - * Copyright (C) 2019 AT&T Intellectual Property. All rights + * Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights * reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -43,9 +43,11 @@ import org.onap.policy.clamp.loop.template.PolicyModel; import org.onap.policy.clamp.loop.template.PolicyModelId; import org.onap.policy.clamp.loop.template.PolicyModelsRepository; import org.onap.policy.clamp.loop.template.PolicyModelsService; -import org.onap.policy.clamp.policy.pdpgroup.PdpGroup; -import org.onap.policy.clamp.policy.pdpgroup.PdpSubgroup; -import org.onap.policy.clamp.policy.pdpgroup.PolicyModelKey; +import org.onap.policy.models.pdp.concepts.PdpGroup; +import org.onap.policy.models.pdp.concepts.PdpGroups; +import org.onap.policy.models.pdp.concepts.PdpSubGroup; +import org.onap.policy.models.pdp.enums.PdpState; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @@ -242,54 +244,54 @@ public class PolicyModelServiceItCase { @Test @Transactional public void shouldAddPdpGroupInfo() { - PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_1, "yaml", - POLICY_MODEL_TYPE_1_VERSION_1, "TEST", "VARIANT", "user"); - policyModelsService.saveOrUpdatePolicyModel(policyModel1); - PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", - POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user"); - policyModelsService.saveOrUpdatePolicyModel(policyModel2); - PolicyModel policyModel3 = getPolicyModel(POLICY_MODEL_TYPE_3, "yaml", - POLICY_MODEL_TYPE_3_VERSION_1, "TEST", "VARIANT", "user"); - policyModelsService.saveOrUpdatePolicyModel(policyModel3); + policyModelsService.saveOrUpdatePolicyModel(getPolicyModel(POLICY_MODEL_TYPE_1, "yaml", + POLICY_MODEL_TYPE_1_VERSION_1, "TEST", "VARIANT", "user")); + policyModelsService.saveOrUpdatePolicyModel(getPolicyModel(POLICY_MODEL_TYPE_2, "yaml", + POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user")); + policyModelsService.saveOrUpdatePolicyModel(getPolicyModel(POLICY_MODEL_TYPE_3, "yaml", + POLICY_MODEL_TYPE_3_VERSION_1, "TEST", "VARIANT", "user")); - PolicyModelKey type1 = new PolicyModelKey("org.onap.testos", "1.0.0"); - PolicyModelKey type2 = new PolicyModelKey("org.onap.testos2", "2.0.0"); + ToscaPolicyTypeIdentifier type1 = new ToscaPolicyTypeIdentifier("org.onap.testos", "1.0.0"); + ToscaPolicyTypeIdentifier type2 = new ToscaPolicyTypeIdentifier("org.onap.testos2", "2.0.0"); - PdpSubgroup pdpSubgroup1 = new PdpSubgroup(); + PdpSubGroup pdpSubgroup1 = new PdpSubGroup(); pdpSubgroup1.setPdpType("subGroup1"); - List pdpTypeList = new LinkedList(); + List pdpTypeList = new LinkedList<>(); pdpTypeList.add(type1); pdpTypeList.add(type2); pdpSubgroup1.setSupportedPolicyTypes(pdpTypeList); - PolicyModelKey type3 = new PolicyModelKey("org.onap.testos3", "2.0.0"); - PdpSubgroup pdpSubgroup2 = new PdpSubgroup(); + ToscaPolicyTypeIdentifier type3 = new ToscaPolicyTypeIdentifier("org.onap.testos3", "2.0.0"); + PdpSubGroup pdpSubgroup2 = new PdpSubGroup(); pdpSubgroup2.setPdpType("subGroup2"); - List pdpTypeList2 = new LinkedList(); + List pdpTypeList2 = new LinkedList<>(); pdpTypeList2.add(type2); pdpTypeList2.add(type3); pdpSubgroup2.setSupportedPolicyTypes(pdpTypeList2); - List pdpSubgroupList = new LinkedList(); + List pdpSubgroupList = new LinkedList<>(); pdpSubgroupList.add(pdpSubgroup1); PdpGroup pdpGroup1 = new PdpGroup(); pdpGroup1.setName("pdpGroup1"); - pdpGroup1.setPdpGroupState("ACTIVE"); + pdpGroup1.setPdpGroupState(PdpState.ACTIVE); pdpGroup1.setPdpSubgroups(pdpSubgroupList); - List pdpSubgroupList2 = new LinkedList(); + List pdpSubgroupList2 = new LinkedList<>(); pdpSubgroupList2.add(pdpSubgroup1); pdpSubgroupList2.add(pdpSubgroup2); PdpGroup pdpGroup2 = new PdpGroup(); pdpGroup2.setName("pdpGroup2"); - pdpGroup2.setPdpGroupState("ACTIVE"); + pdpGroup2.setPdpGroupState(PdpState.ACTIVE); pdpGroup2.setPdpSubgroups(pdpSubgroupList2); - List pdpGroupList = new LinkedList(); - pdpGroupList.add(pdpGroup1); - pdpGroupList.add(pdpGroup2); - policyModelsService.updatePdpGroupInfo(pdpGroupList); + List pdpGroupsList = new LinkedList<>(); + pdpGroupsList.add(pdpGroup1); + pdpGroupsList.add(pdpGroup2); + + PdpGroups pdpGroups = new PdpGroups(); + pdpGroups.setGroups(pdpGroupsList); + policyModelsService.updatePdpGroupInfo(pdpGroups); JsonObject res1 = policyModelsService.getPolicyModel("org.onap.testos", "1.0.0").getPolicyPdpGroup(); diff --git a/src/test/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroupAnalyzerTest.java b/src/test/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroupAnalyzerTest.java new file mode 100644 index 000000000..1af048da5 --- /dev/null +++ b/src/test/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroupAnalyzerTest.java @@ -0,0 +1,130 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2021 AT&T Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.policy.clamp.policy.pdpgroup; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; +import javax.transaction.Transactional; +import org.junit.Test; +import org.onap.policy.clamp.clds.util.JsonUtils; +import org.onap.policy.clamp.loop.template.PolicyModel; +import org.onap.policy.models.pdp.concepts.PdpGroup; +import org.onap.policy.models.pdp.concepts.PdpGroups; +import org.onap.policy.models.pdp.concepts.PdpSubGroup; +import org.onap.policy.models.pdp.enums.PdpState; +import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier; + +/** + * This test class validates the PdpGroupAnalyzer class. + */ +public class PdpGroupAnalyzerTest { + + private PolicyModel createPolicyModel(String policyType, String policyModelTosca, String version, + String policyAcronym, String policyVariant, String createdBy) { + PolicyModel policyModel = new PolicyModel(); + policyModel.setCreatedBy(createdBy); + policyModel.setPolicyAcronym(policyAcronym); + policyModel.setPolicyModelTosca(policyModelTosca); + policyModel.setPolicyModelType(policyType); + policyModel.setUpdatedBy(createdBy); + policyModel.setVersion(version); + return policyModel; + } + + /** + * This tests the pdpgroup GSON encode/decode and saving. + */ + @Test + @Transactional + public void testUpdatePdpGroup() { + // Create policyModel + PolicyModel policyModel = new PolicyModel(); + policyModel.setCreatedBy("user"); + policyModel.setPolicyAcronym("TEST"); + policyModel.setPolicyModelTosca("yaml"); + policyModel.setPolicyModelType("org.onap.test"); + policyModel.setUpdatedBy("user"); + policyModel.setVersion("1.0.0"); + + // Create Pdp Groups + // Those that do not work first + PdpSubGroup pdpSubgroupBad = new PdpSubGroup(); + pdpSubgroupBad.setPdpType("subGroupBad"); + pdpSubgroupBad.setSupportedPolicyTypes(Arrays.asList(new ToscaPolicyTypeIdentifier("org.onap.test", "2.0.0"), + new ToscaPolicyTypeIdentifier("org.onap.test.*", "1.0.0"), + new ToscaPolicyTypeIdentifier("org.onip.testos", "1.0.0"), + new ToscaPolicyTypeIdentifier("org.onap.testos3", "2.0.0"), + new ToscaPolicyTypeIdentifier("org.onap.tes", "1.0.0"), + new ToscaPolicyTypeIdentifier("org.onap", "1.0.0") + )); + + + PdpSubGroup pdpSubgroup1 = new PdpSubGroup(); + pdpSubgroup1.setPdpType("subGroup1"); + pdpSubgroup1.setSupportedPolicyTypes( + Arrays.asList(new ToscaPolicyTypeIdentifier("org.onap.*", "1.0.0"))); + + PdpSubGroup pdpSubgroup2 = new PdpSubGroup(); + pdpSubgroup2.setPdpType("subGroup2"); + pdpSubgroup2.setSupportedPolicyTypes(Arrays.asList(new ToscaPolicyTypeIdentifier("org.onap.test", "1.0.0"))); + + PdpSubGroup pdpSubgroup3 = new PdpSubGroup(); + pdpSubgroup3.setPdpType("subGroup3"); + pdpSubgroup3.setSupportedPolicyTypes(Arrays.asList(new ToscaPolicyTypeIdentifier("org.onap.test*", "1.0.0"))); + + + PdpGroup pdpGroup1 = new PdpGroup(); + pdpGroup1.setName("pdpGroup1"); + pdpGroup1.setPdpGroupState(PdpState.ACTIVE); + pdpGroup1.setPdpSubgroups(Arrays.asList(pdpSubgroup1, pdpSubgroupBad)); + + PdpGroup pdpGroup2 = new PdpGroup(); + pdpGroup2.setName("pdpGroup2"); + pdpGroup2.setPdpGroupState(PdpState.ACTIVE); + pdpGroup2.setPdpSubgroups(Arrays.asList(pdpSubgroup1, pdpSubgroup2, pdpSubgroup3, pdpSubgroupBad)); + + PdpGroup pdpGroup3 = new PdpGroup(); + pdpGroup3.setName("pdpGroup3"); + pdpGroup3.setPdpGroupState(PdpState.ACTIVE); + pdpGroup3.setPdpSubgroups(Arrays.asList(pdpSubgroupBad)); + + PdpGroup pdpGroup4 = new PdpGroup(); + pdpGroup4.setName("pdpGroup4"); + pdpGroup4.setPdpGroupState(PdpState.PASSIVE); + pdpGroup4.setPdpSubgroups(Arrays.asList(pdpSubgroup1)); + + PdpGroups pdpGroups = new PdpGroups(); + pdpGroups.setGroups(Arrays.asList(pdpGroup1, pdpGroup2, pdpGroup3, pdpGroup4)); + PdpGroupsAnalyzer.updatePdpGroup(Arrays.asList(policyModel), pdpGroups); + + assertThat(policyModel.getPolicyPdpGroup().toString()).isEqualTo( + "{\"supportedPdpGroups\":[{\"pdpGroup1\":[\"subGroup1\"]}," + + "{\"pdpGroup2\":[\"subGroup1\",\"subGroup2\",\"subGroup3\"]}]}"); + } +} diff --git a/src/test/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroupTest.java b/src/test/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroupTest.java deleted file mode 100644 index 699693de0..000000000 --- a/src/test/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroupTest.java +++ /dev/null @@ -1,86 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed 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. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.policy.pdpgroup; - -import static org.assertj.core.api.Assertions.assertThat; - -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; -import java.io.IOException; -import java.util.LinkedList; -import java.util.List; -import org.junit.Test; - -public class PdpGroupTest { - - - @Test - public void testGetSupportedSubgroups() throws IOException { - PdpGroup pdpGroup1 = new PdpGroup(); - pdpGroup1.setName("pdpGroup1"); - pdpGroup1.setPdpGroupState("INACTIVE"); - assertThat(pdpGroup1.getSupportedSubgroups("test", "1.0.0")).isNull(); - - PdpGroup pdpGroup2 = new PdpGroup(); - pdpGroup2.setName("pdpGroup2"); - pdpGroup2.setPdpGroupState("ACTIVE"); - - PolicyModelKey type1 = new PolicyModelKey("type1", "1.0.0"); - PolicyModelKey type2 = new PolicyModelKey("type2", "2.0.0"); - - PdpSubgroup pdpSubgroup1 = new PdpSubgroup(); - pdpSubgroup1.setPdpType("subGroup1"); - List pdpTypeList = new LinkedList(); - pdpTypeList.add(type1); - pdpTypeList.add(type2); - pdpSubgroup1.setSupportedPolicyTypes(pdpTypeList); - - PolicyModelKey type3 = new PolicyModelKey("type3", "1.0.0"); - PdpSubgroup pdpSubgroup2 = new PdpSubgroup(); - pdpSubgroup2.setPdpType("subGroup2"); - List pdpTypeList2 = new LinkedList(); - pdpTypeList2.add(type2); - pdpTypeList2.add(type3); - pdpSubgroup2.setSupportedPolicyTypes(pdpTypeList2); - - List pdpSubgroupList = new LinkedList(); - pdpSubgroupList.add(pdpSubgroup1); - pdpSubgroupList.add(pdpSubgroup2); - pdpGroup2.setPdpSubgroups(pdpSubgroupList); - - JsonObject res1 = pdpGroup2.getSupportedSubgroups("type2", "2.0.0"); - assertThat(res1.get("pdpGroup2")).isNotNull(); - JsonArray resSubList = res1.getAsJsonArray("pdpGroup2"); - assertThat(resSubList.size()).isEqualTo(2); - assertThat(resSubList.toString().contains("subGroup1")).isTrue(); - assertThat(resSubList.toString().contains("subGroup2")).isTrue(); - - JsonObject res2 = pdpGroup2.getSupportedSubgroups("type1", "1.0.0"); - assertThat(res2.get("pdpGroup2")).isNotNull(); - JsonArray resSubList2 = res2.getAsJsonArray("pdpGroup2"); - assertThat(resSubList2.size()).isEqualTo(1); - - assertThat(pdpGroup2.getSupportedSubgroups("type3", "1.0.1")).isNull(); - } -} diff --git a/src/test/java/org/onap/policy/clamp/policy/pdpgroup/PolicyModelKeyTest.java b/src/test/java/org/onap/policy/clamp/policy/pdpgroup/PolicyModelKeyTest.java deleted file mode 100644 index d4cf27392..000000000 --- a/src/test/java/org/onap/policy/clamp/policy/pdpgroup/PolicyModelKeyTest.java +++ /dev/null @@ -1,55 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2020 AT&T Intellectual Property. All rights - * reserved. - * ================================================================================ - * Licensed 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. - * ============LICENSE_END============================================ - * =================================================================== - * - */ - -package org.onap.policy.clamp.policy.pdpgroup; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.io.IOException; -import org.junit.Test; - -public class PolicyModelKeyTest { - - @Test - public void testEqualsMethod() throws IOException { - PolicyModelKey key1 = new PolicyModelKey("name1", "1.0.0"); - PolicyModelKey key2 = new PolicyModelKey(null, "1.0.0"); - PolicyModelKey key3 = new PolicyModelKey("name1", null); - - assertThat(key1.equals(null)).isFalse(); - assertThat(key1.equals("key2")).isFalse(); - - assertThat(key2.equals(key1)).isFalse(); - assertThat(key3.equals(key1)).isFalse(); - - PolicyModelKey key4 = new PolicyModelKey("name2", "1.0.0"); - PolicyModelKey key5 = new PolicyModelKey("name1", "2.0.0"); - assertThat(key1.equals(key4)).isFalse(); - assertThat(key1.equals(key5)).isFalse(); - - PolicyModelKey key6 = new PolicyModelKey("name(.*)", "1.0.0"); - PolicyModelKey key7 = new PolicyModelKey("name1", "1.0.0"); - assertThat(key1.equals(key6)).isTrue(); - assertThat(key1.equals(key7)).isTrue(); - } -} diff --git a/src/test/resources/http-cache/example/policy/api/v1/policies/.file b/src/test/resources/http-cache/example/policy/api/v1/policies/.file index 431de3e7c..91c3c87de 100644 --- a/src/test/resources/http-cache/example/policy/api/v1/policies/.file +++ b/src/test/resources/http-cache/example/policy/api/v1/policies/.file @@ -19,7 +19,7 @@ "thresholdValue": 200, "closedLoopEventStatus": "ONSET", "closedLoopControlName": "LOOP_test", - "direction": "LESS_OR_ElsQUAL", + "direction": "LESS_OR_EQUAL", "fieldPath": "$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta" } ],