diff options
74 files changed, 2172 insertions, 2099 deletions
diff --git a/.gitignore b/.gitignore index 978c4cbd7..fd4dc01bf 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,8 @@ deliveries/target/ /vid-automation/.settings/org.eclipse.jdt.core.prefs /vid-automation/.settings/org.eclipse.m2e.core.prefs /vid-ext-services-simulator/.gitignore +.idea/ +epsdk-app-onap/overlays/ +vid-app-common/overlays/ +vid-ext-services-simulator/target/ + diff --git a/INFO.yaml b/INFO.yaml new file mode 100644 index 000000000..234ab81c5 --- /dev/null +++ b/INFO.yaml @@ -0,0 +1,58 @@ +--- +project: 'vid' +project_creation_date: '2017-02-02' +project_category: '' +lifecycle_state: 'Incubation' +project_lead: &onap_vid_ptl + name: 'Ofir Sonsino' + email: 'os0695@att.com' + id: 'os0695' + company: 'ATT' + timezone: 'Israel/Lod' +primary_contact: *onap_vid_ptl +issue_tracking: + type: 'jira' + url: 'https://jira.onap.org/projects/VID' + key: 'VID' +mailing_list: + type: 'groups.io' + url: 'lists.onap.org' + tag: '<[vid]>' +realtime_discussion: '' +meetings: + - type: 'zoom' + agenda: 'https://wiki.onap.org/display/DW/VID+Weekly+Meeting+Minutes' + url: 'https://wiki.onap.org/display/DW/Virtual+Infrastructure+Deployment+Project' + server: 'n/a' + channel: 'n/a' + repeats: 'weekly' + time: '13:00 UTC' +repositories: + - 'vid' +committers: + - <<: *onap_vid_ptl + - name: 'Amichai Hemli' + email: 'ah0398@intl.att.com' + company: 'ATT' + id: 'ahemli' + timezone: 'Asia/Jerusalem' + - name: 'Wojciech Sliwka' + email: 'wojciech.sliwka@nokia.com' + company: 'Nokia' + id: 'wsliwka' + timezone: 'Europe/Warsaw' + - name: 'Ittay Stern' + email: 'is9613@att.com' + company: 'ATT' + id: 'ittays' + timezone: 'Asia/Jerusalem' +tsc: + approval: 'https://lists.onap.org/pipermail/onap-tsc' + changes: + - type: 'Addition' + name: 'Wojciech Sliwka' + name: 'Ittay Stern' + link: 'https://lists.onap.org/g/onap-tsc/message/4257' + - type: 'Removal' + name: 'Daniel Rose' + link: 'https://lists.onap.org/g/onap-tsc/message/4257' diff --git a/deliveries/.gitignore b/deliveries/.gitignore new file mode 100644 index 000000000..54a4f4f69 --- /dev/null +++ b/deliveries/.gitignore @@ -0,0 +1,2 @@ +# provide developers possibility to add or override custom properties in compose without polluting code base +docker-compose.override.yml
\ No newline at end of file diff --git a/deliveries/pom.xml b/deliveries/pom.xml index e36697432..f096c2b62 100755 --- a/deliveries/pom.xml +++ b/deliveries/pom.xml @@ -5,7 +5,7 @@ <parent>
<groupId>org.onap.vid</groupId>
<artifactId>vid-parent</artifactId>
- <version>1.1.0-SNAPSHOT</version>
+ <version>4.0.0-SNAPSHOT</version>
</parent>
<packaging>pom</packaging>
diff --git a/deliveries/src/main/docker/docker-files/Dockerfile b/deliveries/src/main/docker/docker-files/Dockerfile index 4b04e22cf..a115b5f02 100755 --- a/deliveries/src/main/docker/docker-files/Dockerfile +++ b/deliveries/src/main/docker/docker-files/Dockerfile @@ -26,8 +26,7 @@ ENV LOG4J_LOGLEVEL INFO ENV LOG4J_APPENDER rollingfile
ENV LOG4J_LOGS_DIRECTORY ${ROOT_DIR}/logs
-ENV VID_AAI_HOST aai.api.simpledemo.onap.org
-ENV VID_AAI_PORT 8443
+ENV VID_AAI_URL https://aai.api.simpledemo.onap.org:8443
ENV VID_APP_DISPLAY_NAME VID
ENV VID_ECOMP_SHARED_CONTEXT_REST_URL https://portal.api.simpledemo.onap.org:8080/onapportal/context
ENV VID_MSO_SERVER_URL http://vm1.mso.simpledemo.onap.org:8080/onap/so/infra
diff --git a/deliveries/src/main/docker/docker-files/docker-compose.yml b/deliveries/src/main/docker/docker-files/docker-compose.yml index 644590191..eedf7322e 100755 --- a/deliveries/src/main/docker/docker-files/docker-compose.yml +++ b/deliveries/src/main/docker/docker-files/docker-compose.yml @@ -1,15 +1,21 @@ -version: '3.1'
+version: '3.2'
+
+# Please note this configuration is provided for local development. Do not use it on production.
services:
vid-server:
- image: nexus3.onap.org:10001/onap/vid
+ image: onap/vid:latest
ports:
- "8080:8080"
- links:
- - vid-mariadb:vid-mariadb-docker-instance
environment:
VID_MYSQL_DBNAME: vid_openecomp_epsdk
VID_MYSQL_PASS: YOUR_PASSWORD
+ VID_MYSQL_HOST: vid-mariadb
+ ASDC_CLIENT_REST_PROTOCOL: http
+ ASDC_CLIENT_REST_HOST: vid-simulator
+ ASDC_CLIENT_REST_PORT: 1080
+ VID_AAI_URL: http://vid-simulator:1080
+ VID_MSO_SERVER_URL: http://vid-simulator:1080
vid-mariadb:
image: mariadb:10
@@ -22,4 +28,7 @@ services: MYSQL_DATABASE: vid_openecomp_epsdk
MYSQL_USER: vidadmin
MYSQL_PASSWORD: YOUR_PASSWORD
- MYSQL_ROOT_PASSWORD: ROOT_PASSWORD
\ No newline at end of file + MYSQL_ROOT_PASSWORD: ROOT_PASSWORD
+
+ vid-simulator:
+ image: onap/vid-simulator:latest
\ No newline at end of file diff --git a/deliveries/src/main/scripts/localize_system.sh b/deliveries/src/main/scripts/localize_system.sh index 0947d49ea..a7e6cd3ba 100755 --- a/deliveries/src/main/scripts/localize_system.sh +++ b/deliveries/src/main/scripts/localize_system.sh @@ -13,8 +13,7 @@ sed -e 's/${VID_MYSQL_HOST}/'${VID_MYSQL_HOST}'/g' \ -e 's/${VID_MYSQL_DBNAME}/'${VID_MYSQL_DBNAME}'/g' \ -e 's/${VID_MYSQL_USER}/'${VID_MYSQL_USER}'/g' \ -e 's/${VID_MYSQL_PASS}/'${VID_MYSQL_PASS}'/g' \ - -e 's/${VID_AAI_HOST}/'${VID_AAI_HOST}'/g' \ - -e 's/${VID_AAI_PORT}/'${VID_AAI_PORT}'/g' \ + -e 's ${VID_AAI_URL} '${VID_AAI_URL}' g' \ -e 's/${AAI_USE_CLIENT_CERT}/'${AAI_USE_CLIENT_CERT}'/g' \ -e 's/${AAI_VID_UID}/'${AAI_VID_UID}'/g' \ -e 's/${AAI_VID_PASSWD_X}/'${AAI_VID_PASSWD_X}'/g' \ diff --git a/docs/administration.rst b/docs/administration.rst index 7227e702d..1eec480ce 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -23,4 +23,7 @@ Actions | ``curl -X POST 'http://vid.api.simpledemo.onap.org:8080/vid/change-management/vnf_workflow_relation' -H 'Accept-Encoding: gzip, deflate' -H 'Content-Type:application/json' -d '{"workflowsDetails":[{"workflowName":"VNF In Place Software Update","vnfDetails":{"UUID":"X-X-X-X","invariantUUID":"Y-Y-Y-Y"}}, {"workflowName":"VNF Scale Out","vnfDetails":{"UUID":"X-X-X-X","invariantUUID":"Y-Y-Y-Y"}}]}'`` - | **VoLTE E2E services deployment support** - | VID supports VoLTE E2E services deployment. In order to trigger the E2E flow, the service category in the model (as SDC generates it) has to be set to "E2E Service".
\ No newline at end of file + | VID supports VoLTE E2E services deployment. In order to trigger the E2E flow, the service category in the model (as SDC generates it) has to be set to "E2E Service". + +- | **Role management support** + | VID supports role management for its users with AAF integration. This feature is turned off by default. In order to activate it, update "role_management_activated" value in system.properties to "true".
\ No newline at end of file diff --git a/docs/configuration.rst b/docs/configuration.rst index 6357d5aac..ab757387c 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -18,6 +18,9 @@ system.properties file ``db.password`` The password for the VID database +``role_management_activated`` + Role management activation flag, "false" by defauly. Change to "true" in order to activate this feature. + ``aai.server.url.base`` Base URL for the A&AI server diff --git a/docs/installation.rst b/docs/installation.rst index 040baf284..f9d12e8b8 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -17,7 +17,7 @@ Please follow the instructions given below, for installing VID using a Docker im docker pull mariadb:10 docker login -u docker -p docker nexus3.onap.org:10001 - docker pull nexus3.onap.org:10001/onap/vid:3.1.0 + docker pull nexus3.onap.org:10001/onap/vid:3.2.1 2. Install by running following command (Use the path for the lf_config folder under the VID git repository as CONFIG_PATH) @@ -27,7 +27,7 @@ Please follow the instructions given below, for installing VID using a Docker im docker run --name vid-mariadb -e MYSQL_DATABASE=vid_openecomp_epsdk -e MYSQL_USER=vidadmin -e MYSQL_PASSWORD=YOUR_PASSWORD -e MYSQL_ROOT_PASSWORD=ROOT_PASSWORD -v CONFIG_PATH/vid-my.cnf:/etc/mysql/my.cnf -v /var/lib/mysql -d mariadb:10 #start VID server - docker run -e VID_MYSQL_DBNAME=vid_openecomp_epsdk -e VID_MYSQL_PASS=YOUR_PASSWORD --name vid-server -p 8080:8080 --link vid-mariadb:vid-mariadb-docker-instance -d nexus3.onap.org:10001/onap/vid:3.1.0 + docker run -e VID_MYSQL_DBNAME=vid_openecomp_epsdk -e VID_MYSQL_PASS=YOUR_PASSWORD --name vid-server -p 8080:8080 --link vid-mariadb:vid-mariadb-docker-instance -d nexus3.onap.org:10001/onap/vid:3.2.1 Or use docker-compose: diff --git a/docs/release-notes.rst b/docs/release-notes.rst index d1e39eb4b..962fe1b07 100644 --- a/docs/release-notes.rst +++ b/docs/release-notes.rst @@ -3,10 +3,10 @@ VID Release Notes ================= -Version: 3.2.0 +Version: 3.2.2 -------------- -:Release Date: 2018-11-15 +:Release Date: 2018-11-30 New Features ------------ @@ -52,13 +52,13 @@ New Features **Security Notes** -VID code has been formally scanned during build time using NexusIQ and all Critical vulnerabilities have been addressed, items that remain open have been assessed for risk and determined to be false positive. The VID open Critical security vulnerabilities and their risk assessment have been documented as part of the `project <https://wiki.onap.org/pages/viewpage.action?pageId=28378623>`_. +VID code has been formally scanned during build time using NexusIQ and all Critical vulnerabilities have been addressed, items that remain open have been assessed for risk and determined to be false positive. The VID open Critical security vulnerabilities and their risk assessment have been documented as part of the `project <https://wiki.onap.org/pages/viewpage.action?pageId=45300871>`_. Quick Links: - `VID project page <https://wiki.onap.org/display/DW/Virtual+Infrastructure+Deployment+Project>`_ - `Passing Badge information for VID <https://bestpractices.coreinfrastructure.org/en/projects/1658>`_ -- `Project Vulnerability Review Table for VID <https://wiki.onap.org/pages/viewpage.action?pageId=28378623>`_ +- `Project Vulnerability Review Table for VID <https://wiki.onap.org/pages/viewpage.action?pageId=45300871>`_ **Other** diff --git a/epsdk-app-onap/pom.xml b/epsdk-app-onap/pom.xml index 9b0136f0c..85731d1b9 100755 --- a/epsdk-app-onap/pom.xml +++ b/epsdk-app-onap/pom.xml @@ -319,6 +319,10 @@ <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>com.lowagie</groupId>
+ <artifactId>itext</artifactId>
+ </exclusion>
</exclusions>
</dependency>
<dependency>
diff --git a/epsdk-app-onap/src/main/resources/vid-data.sql b/epsdk-app-onap/src/main/resources/vid-data.sql index e2af216e6..9c48f853b 100755 --- a/epsdk-app-onap/src/main/resources/vid-data.sql +++ b/epsdk-app-onap/src/main/resources/vid-data.sql @@ -625,6 +625,12 @@ REPLACE INTO `fn_restricted_url` VALUES ('serviceModels.htm','menu_servicemodels --
INSERT INTO `fn_role` VALUES (1,'System Administrator','Y',1) ON DUPLICATE KEY UPDATE ROLE_NAME='System Administrator', ACTIVE_YN='Y', PRIORITY=1;
INSERT INTO `fn_role` VALUES (16,'Standard User','Y',5) ON DUPLICATE KEY UPDATE ROLE_NAME='Standard User', ACTIVE_YN='Y', PRIORITY=5;
+INSERT INTO `fn_role` VALUES (17,'Demonstration___vFWCL','Y',5) ON DUPLICATE KEY UPDATE ROLE_NAME='Demonstration___vFWCL', ACTIVE_YN='Y', PRIORITY=5;
+INSERT INTO `fn_role` VALUES (18,'Demonstration___vFW','Y',5) ON DUPLICATE KEY UPDATE ROLE_NAME='Demonstration___vFW', ACTIVE_YN='Y', PRIORITY=5;
+INSERT INTO `fn_role` VALUES (19,'Demonstration___vCPE','Y',5) ON DUPLICATE KEY UPDATE ROLE_NAME='Demonstration___vCPE', ACTIVE_YN='Y', PRIORITY=5;
+INSERT INTO `fn_role` VALUES (20,'Demonstration___vIMS','Y',5) ON DUPLICATE KEY UPDATE ROLE_NAME='Demonstration___vIMS', ACTIVE_YN='Y', PRIORITY=5;
+INSERT INTO `fn_role` VALUES (21,'Demonstration___vLB','Y',5) ON DUPLICATE KEY UPDATE ROLE_NAME='Demonstration___vLB', ACTIVE_YN='Y', PRIORITY=5;
+INSERT INTO `fn_role` VALUES (22,'Demonstration___gNB','Y',5) ON DUPLICATE KEY UPDATE ROLE_NAME='Demonstration___gNB', ACTIVE_YN='Y', PRIORITY=5;
--
-- Dumping data for table `fn_role_composite`
@@ -735,3 +741,10 @@ INSERT IGNORE `fn_user_role` VALUES (2,1,NULL,1); INSERT IGNORE `fn_user_role` VALUES (3,1,NULL,1);
INSERT IGNORE `fn_user_role` VALUES (4,1,NULL,1);
INSERT IGNORE `fn_user_role` VALUES (5,1,NULL,1);
+INSERT IGNORE `fn_user_role` VALUES (1,17,NULL,1);
+INSERT IGNORE `fn_user_role` VALUES (1,18,NULL,1);
+INSERT IGNORE `fn_user_role` VALUES (1,19,NULL,1);
+INSERT IGNORE `fn_user_role` VALUES (1,20,NULL,1);
+INSERT IGNORE `fn_user_role` VALUES (1,21,NULL,1);
+INSERT IGNORE `fn_user_role` VALUES (1,22,NULL,1);
+
diff --git a/epsdk-app-onap/src/main/webapp/WEB-INF/conf/system_template.properties b/epsdk-app-onap/src/main/webapp/WEB-INF/conf/system_template.properties index 06a2e6b53..149ad99ed 100755 --- a/epsdk-app-onap/src/main/webapp/WEB-INF/conf/system_template.properties +++ b/epsdk-app-onap/src/main/webapp/WEB-INF/conf/system_template.properties @@ -64,10 +64,10 @@ element_map_file_path = /tmp element_map_icon_path = app/vid/icons/
#aai related properties
-aai.server.url.base=https://${VID_AAI_HOST}:${VID_AAI_PORT}/aai/
-aai.server.url=https://${VID_AAI_HOST}:${VID_AAI_PORT}/aai/v13/
-aai.oldserver.url.base=https://${VID_AAI_HOST}:${VID_AAI_PORT}/aai/servers/
-aai.oldserver.url=https://${VID_AAI_HOST}:${VID_AAI_PORT}/aai/servers/v3/
+aai.server.url.base=${VID_AAI_URL}/aai/
+aai.server.url=${VID_AAI_URL}/aai/v13/
+aai.oldserver.url.base=${VID_AAI_URL}/aai/servers/
+aai.oldserver.url=${VID_AAI_URL}/aai/servers/v3/
aai.truststore.filename=${AAI_TRUSTSTORE_FILENAME}
aai.truststore.passwd.x=${AAI_TRUSTSTORE_PASSWD_X}
aai.keystore.filename=${AAI_KEYSTORE_FILENAME}
@@ -3,6 +3,7 @@ <modelVersion>4.0.0</modelVersion>
<groupId>org.onap.vid</groupId>
<artifactId>vid-parent</artifactId>
+ <version>4.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>vid</name>
@@ -268,5 +269,4 @@ <version>4.5.3</version>
</dependency>
</dependencies>
- <version>4.0.0-SNAPSHOT</version>
</project>
diff --git a/vid-app-common/pom.xml b/vid-app-common/pom.xml index 479510368..658bf71d5 100755 --- a/vid-app-common/pom.xml +++ b/vid-app-common/pom.xml @@ -1,583 +1,595 @@ -<?xml version="1.0"?>
-<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
-
- <!-- This is the Maven project object model (POM) file for VID web application
- based on the ECOMP SDK distribution. This file stands alone; it does not
- inherit from a parent maven module. -->
- <groupId>org.onap.vid</groupId>
- <artifactId>vid-app-common</artifactId>
- <version>4.0.0-SNAPSHOT</version>
- <packaging>war</packaging>
- <name>VID Common</name>
- <description>VID Common code for opensource version</description>
-
- <properties>
- <encoding>UTF-8</encoding>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <epsdk.version>2.4.0</epsdk.version>
- <springframework.version>4.2.9.RELEASE</springframework.version>
- <hibernate.version>4.3.11.Final</hibernate.version>
- <!-- Skip assembling the zip by default -->
- <skipassembly>true</skipassembly>
- <!-- Tests usually require some setup that maven cannot do, so skip. -->
- <skiptests>false</skiptests>
- <nexusproxy>https://nexus.onap.org</nexusproxy>
- <snapshotNexusPath>/content/repositories/snapshots/</snapshotNexusPath>
- <releaseNexusPath>/content/repositories/releases/</releaseNexusPath>
- <stagingNexusPath>/content/repositories/staging/</stagingNexusPath>
- <sitePath>/content/sites/site/org/onap/vid/${project.version}</sitePath>
- </properties>
-
-
- <!-- this should be commented for local debugging -->
- <!-- <deployenv>local</deployenv> -->
-
- <repositories>
- <repository>
- <id>ecomp-releases</id>
- <name>VID Release Repository</name>
- <url>${nexusproxy}${releaseNexusPath}</url>
- </repository>
- <repository>
- <id>ecomp-snapshots</id>
- <name>VID Snapshot Repository</name>
- <url>${nexusproxy}${snapshotNexusPath}</url>
- </repository>
- <repository>
- <id>ecomp-staging</id>
- <name>VID Staging Repository</name>
- <url>${nexusproxy}${stagingNexusPath}</url>
- </repository>
- <repository>
- <!-- Snapshots repository has ECOMP snapshot artifacts -->
- <id>oss-snapshots</id>
- <name>oss Central - Snapshots</name>
- <url>https://oss.sonatype.org/service/local/repositories/releases/content/</url>
- </repository>
-
- </repositories>
- <distributionManagement>
- <repository>
- <id>ecomp-releases</id>
- <name>VID Release Repository</name>
- <url>${nexusproxy}/${releaseNexusPath}</url>
- </repository>
- <snapshotRepository>
- <id>ecomp-snapshots</id>
- <name>VID Snapshot Repository</name>
- <url>${nexusproxy}/${snapshotNexusPath}</url>
- </snapshotRepository>
- <!-- added for javadoc -->
- <site>
- <id>ecomp-site</id>
- <url>dav:${nexusproxy}${sitePath}</url>
- </site>
- </distributionManagement>
-
- <build>
- <finalName>vid-common</finalName>
-
- <plugins>
- <plugin>
- <groupId>org.sonatype.plugins</groupId>
- <artifactId>nexus-staging-maven-plugin</artifactId>
- <version>1.6.7</version>
- <extensions>true</extensions>
- <configuration>
- <nexusUrl>${nexusproxy}</nexusUrl>
- <stagingProfileId>176c31dfe190a</stagingProfileId>
- <serverId>ecomp-staging</serverId>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.jacoco</groupId>
- <artifactId>jacoco-maven-plugin</artifactId>
- <version>0.7.9</version>
- <executions>
- <execution>
- <id>default-prepare-agent</id>
- <goals>
- <goal>prepare-agent</goal>
- </goals>
- </execution>
- <execution>
- <id>default-report</id>
- <goals>
- <goal>report</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.tomcat.maven</groupId>
- <artifactId>tomcat6-maven-plugin</artifactId>
- <version>2.2</version>
- </plugin>
- <plugin>
- <groupId>org.apache.tomcat.maven</groupId>
- <artifactId>tomcat7-maven-plugin</artifactId>
- <version>2.2</version>
- </plugin>
-
- <!-- Generate POJOs from MSO json schema -->
- <plugin>
- <groupId>org.jsonschema2pojo</groupId>
- <artifactId>jsonschema2pojo-maven-plugin</artifactId>
- <version>0.4.23</version>
- <configuration>
- <sourceDirectory>${basedir}/src/main/resources/json/mso</sourceDirectory>
- <targetPackage>org.onap.vid.domain.mso</targetPackage>
- <outputDirectory>${project.build.directory}/generated-sources</outputDirectory>
- </configuration>
- <executions>
- <execution>
- <goals>
- <goal>generate</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.1</version>
- <configuration>
- <source>1.8</source>
- <target>1.8</target>
- </configuration>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>2.19.1</version>
- <configuration>
- <skipTests>${skiptests}</skipTests>
- <includes>
- <include>**/Test*.java</include>
- <include>**/*Test.java</include>
- <include>**/*TestCase.java</include>
- </includes>
- <excludes>
- <exclude>**/selenium/*.java</exclude>
- <exclude>**/integrationTest/*.java</exclude>
- </excludes>
- <additionalClasspathElements>
- <additionalClasspathElement>${basedir}/war</additionalClasspathElement>
- </additionalClasspathElements>
- <systemPropertyVariables>
- <container.classpath>classpath:</container.classpath>
- </systemPropertyVariables>
- </configuration>
- </plugin>
-
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <configuration>
- <skipAssembly>${skipassembly}</skipAssembly>
- <descriptors>
- <descriptor>${basedir}/distribution.xml</descriptor>
- </descriptors>
- </configuration>
- <executions>
- <execution>
- <id>make-assembly</id>
- <phase>package</phase>
- <goals>
- <goal>single</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
-
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-war-plugin</artifactId>
- <version>3.0.0</version>
- <configuration>
- <!-- Build a jar with all the Java classes -->
- <attachClasses>true</attachClasses>
- <!-- Do not put any jars in the war -->
- <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-site-plugin</artifactId>
- <version>3.6</version>
- <dependencies>
- <dependency>
- <groupId>org.apache.maven.wagon</groupId>
- <artifactId>wagon-webdav-jackrabbit</artifactId>
- <version>2.10</version>
- </dependency>
- </dependencies>
- </plugin>
- <plugin>
- <groupId>pl.project13.maven</groupId>
- <artifactId>git-commit-id-plugin</artifactId>
- <version>2.2.4</version>
- <executions>
- <execution>
- <id>get-the-git-infos</id>
- <goals>
- <goal>revision</goal>
- </goals>
- </execution>
- </executions>
- <configuration>
- <dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
- <dateFormat>yyyy-MM-dd'T'HH:mm:ssZ</dateFormat>
- <dateFormatTimeZone>${user.timezone}</dateFormatTimeZone>
- <generateGitPropertiesFile>true</generateGitPropertiesFile>
- <generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
- <includeOnlyProperties>
- <includeOnlyProperty>^git.commit.id$</includeOnlyProperty>
- <includeOnlyProperty>^git.commit.message.short$</includeOnlyProperty>
- <includeOnlyProperty>^git.commit.time$</includeOnlyProperty>
- </includeOnlyProperties>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
- <reporting>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-javadoc-plugin</artifactId>
- <version>2.10.4</version>
- <configuration>
- <failOnError>false</failOnError>
- <doclet>org.umlgraph.doclet.UmlGraphDoc</doclet>
- <docletArtifact>
- <groupId>org.umlgraph</groupId>
- <artifactId>umlgraph</artifactId>
- <version>5.6</version>
- </docletArtifact>
- <additionalparam>-views</additionalparam>
- <useStandardDocletOptions>true</useStandardDocletOptions>
- </configuration>
- </plugin>
- </plugins>
- </reporting>
-
- <dependencies>
-
- <dependency>
- <groupId>com.opencsv</groupId>
- <artifactId>opencsv</artifactId>
- <version>4.1</version>
- </dependency>
-
- <!-- HTTP client -->
-
- <dependency>
- <groupId>io.joshworks.unirest</groupId>
- <artifactId>unirest-java</artifactId>
- <version>0.2.1</version>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpclient</artifactId>
- <version>4.3.6</version>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpasyncclient</artifactId>
- <version>4.0.2</version>
- </dependency>
- <dependency>
- <groupId>org.apache.httpcomponents</groupId>
- <artifactId>httpmime</artifactId>
- <version>4.3.6</version>
- </dependency>
- <dependency>
- <groupId>com.xebialabs.restito</groupId>
- <artifactId>restito</artifactId>
- <version>0.9.3</version>
- <scope>test</scope>
- </dependency>
-
- <!-- Helpers -->
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>1.18.2</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>io.vavr</groupId>
- <artifactId>vavr</artifactId>
- <version>0.9.2</version>
- </dependency>
-
- <!-- SDK overlay war -->
- <dependency>
- <groupId>org.onap.portal.sdk</groupId>
- <artifactId>epsdk-app-overlay</artifactId>
- <version>${epsdk.version}</version>
- <type>war</type>
- </dependency>
- <dependency>
- <groupId>org.onap.portal.sdk</groupId>
- <artifactId>epsdk-app-common</artifactId>
- <version>${epsdk.version}</version>
- <type>jar</type>
- </dependency>
-
- <dependency>
- <groupId>org.onap.portal.sdk</groupId>
- <artifactId>epsdk-core</artifactId>
- <version>${epsdk.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onap.portal.sdk</groupId>
- <artifactId>epsdk-analytics</artifactId>
- <version>${epsdk.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onap.portal.sdk</groupId>
- <artifactId>epsdk-workflow</artifactId>
- <version>${epsdk.version}</version>
- </dependency>
- <dependency>
- <groupId>com.att.eelf</groupId>
- <artifactId>eelf-core</artifactId>
- <version>1.0.0</version>
- </dependency>
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-core</artifactId>
- <version>1.2.3</version>
- </dependency>
- <dependency>
- <groupId>ch.qos.logback</groupId>
- <artifactId>logback-classic</artifactId>
- <version>1.2.3</version>
- </dependency>
-
- <!-- Mapper -->
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-annotations</artifactId>
- <version>2.6.3</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-core</artifactId>
- <version>2.8.6</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <version>2.6.7.1</version>
- </dependency>
- <dependency>
- <groupId>org.codehaus.jackson</groupId>
- <artifactId>jackson-mapper-asl</artifactId>
- <version>1.9.13</version>
- </dependency>
- <dependency>
- <groupId>com.mchange</groupId>
- <artifactId>c3p0</artifactId>
- <version>0.9.5.2</version>
- </dependency>
- <dependency>
- <groupId>io.searchbox</groupId>
- <artifactId>jest</artifactId>
- <version>2.0.0</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-api</artifactId>
- <version>3.1.0</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.12</version>
- </dependency>
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- <version>2.4</version>
- <!--<scope>test</scope>-->
- </dependency>
- <dependency>
- <groupId>com.google.code.bean-matchers</groupId>
- <artifactId>bean-matchers</artifactId>
- <version>0.11</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.json</groupId>
- <artifactId>json</artifactId>
- <version>20160212</version>
- </dependency>
- <dependency>
- <groupId>org.quartz-scheduler</groupId>
- <artifactId>quartz</artifactId>
- <version>2.2.1</version>
- <exclusions>
- <!-- exclude 0.9.1.1 to avoid dupe of com.mchange:c3p0:0.9.2.1 -->
- <exclusion>
- <groupId>c3p0</groupId>
- <artifactId>c3p0</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <!-- bridge to implement commons-logging using slf4j -->
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- <version>1.7.12</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context-support</artifactId>
- <version>${springframework.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-core</artifactId>
- <version>${springframework.version}</version>
- <exclusions>
- <exclusion>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- <version>${springframework.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-tx</artifactId>
- <version>${springframework.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-web</artifactId>
- <version>${springframework.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>${springframework.version}</version>
- </dependency>
- <dependency>
- <groupId>org.glassfish.jersey.core</groupId>
- <artifactId>jersey-client</artifactId>
- <version>2.23.1</version>
- </dependency>
- <dependency>
- <groupId>org.glassfish.jersey.connectors</groupId>
- <artifactId>jersey-jetty-connector</artifactId>
- <version>2.23.1</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.jaxrs</groupId>
- <artifactId>jackson-jaxrs-json-provider</artifactId>
- <version>2.6.3</version>
- </dependency>
- <dependency>
- <groupId>commons-beanutils</groupId>
- <artifactId>commons-beanutils</artifactId>
- <version>1.9.3</version>
- </dependency>
- <dependency>
- <groupId>com.googlecode.json-simple</groupId>
- <artifactId>json-simple</artifactId>
- <version>1.1.1</version>
- </dependency>
- <dependency>
- <groupId>org.seleniumhq.selenium</groupId>
- <artifactId>selenium-java</artifactId>
- <version>2.53.1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.seleniumhq.selenium</groupId>
- <artifactId>selenium-api</artifactId>
- <version>2.53.1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.testng</groupId>
- <artifactId>testng</artifactId>
- <version>6.8</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.seleniumhq.selenium</groupId>
- <artifactId>selenium-firefox-driver</artifactId>
- <version>2.53.1</version>
- </dependency>
- <dependency>
- <groupId>xml-apis</groupId>
- <artifactId>xml-apis</artifactId>
- <version>1.4.01</version>
- </dependency>
- <dependency>
- <groupId>org.yaml</groupId>
- <artifactId>snakeyaml</artifactId>
- <version>1.16</version>
- </dependency>
- <dependency>
- <groupId>org.skyscreamer</groupId>
- <artifactId>jsonassert</artifactId>
- <version>1.5.0</version>
- </dependency>
- <dependency>
- <groupId>org.onap.sdc.sdc-tosca</groupId>
- <artifactId>sdc-tosca</artifactId>
- <version>1.4.1</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>net.javacrumbs.json-unit</groupId>
- <artifactId>json-unit</artifactId>
- <version>1.23.0</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-text</artifactId>
- <version>1.1</version>
- </dependency>
- <dependency>
- <groupId>org.hamcrest</groupId>
- <artifactId>java-hamcrest</artifactId>
- <version>2.0.0.0</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.togglz</groupId>
- <artifactId>togglz-spring-core</artifactId>
- <version>2.5.0.Final</version>
- </dependency>
- <dependency>
- <groupId>org.assertj</groupId>
- <artifactId>assertj-core</artifactId>
- <version>3.10.0</version>
- <scope>compile</scope>
- </dependency>
- </dependencies>
-</project>
+<?xml version="1.0"?> +<project + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" + xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <modelVersion>4.0.0</modelVersion> + + <!-- This is the Maven project object model (POM) file for VID web application + based on the ECOMP SDK distribution. This file stands alone; it does not + inherit from a parent maven module. --> + <groupId>org.onap.vid</groupId> + <artifactId>vid-app-common</artifactId> + <version>4.0.0-SNAPSHOT</version> + <packaging>war</packaging> + <name>VID Common</name> + <description>VID Common code for opensource version</description> + + <properties> + <encoding>UTF-8</encoding> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> + <epsdk.version>2.4.0</epsdk.version> + <springframework.version>4.2.9.RELEASE</springframework.version> + <hibernate.version>4.3.11.Final</hibernate.version> + <!-- Skip assembling the zip by default --> + <skipassembly>true</skipassembly> + <!-- Tests usually require some setup that maven cannot do, so skip. --> + <skiptests>false</skiptests> + <nexusproxy>https://nexus.onap.org</nexusproxy> + <snapshotNexusPath>/content/repositories/snapshots/</snapshotNexusPath> + <releaseNexusPath>/content/repositories/releases/</releaseNexusPath> + <stagingNexusPath>/content/repositories/staging/</stagingNexusPath> + <sitePath>/content/sites/site/org/onap/vid/${project.version}</sitePath> + </properties> + + + <!-- this should be commented for local debugging --> + <!-- <deployenv>local</deployenv> --> + + <repositories> + <repository> + <id>ecomp-releases</id> + <name>VID Release Repository</name> + <url>${nexusproxy}${releaseNexusPath}</url> + </repository> + <repository> + <id>ecomp-snapshots</id> + <name>VID Snapshot Repository</name> + <url>${nexusproxy}${snapshotNexusPath}</url> + </repository> + <repository> + <id>ecomp-staging</id> + <name>VID Staging Repository</name> + <url>${nexusproxy}${stagingNexusPath}</url> + </repository> + <repository> + <!-- Snapshots repository has ECOMP snapshot artifacts --> + <id>oss-snapshots</id> + <name>oss Central - Snapshots</name> + <url>https://oss.sonatype.org/service/local/repositories/releases/content/</url> + </repository> + + </repositories> + <distributionManagement> + <repository> + <id>ecomp-releases</id> + <name>VID Release Repository</name> + <url>${nexusproxy}/${releaseNexusPath}</url> + </repository> + <snapshotRepository> + <id>ecomp-snapshots</id> + <name>VID Snapshot Repository</name> + <url>${nexusproxy}/${snapshotNexusPath}</url> + </snapshotRepository> + <!-- added for javadoc --> + <site> + <id>ecomp-site</id> + <url>dav:${nexusproxy}${sitePath}</url> + </site> + </distributionManagement> + + <build> + <finalName>vid-common</finalName> + + <plugins> + <plugin> + <groupId>org.sonatype.plugins</groupId> + <artifactId>nexus-staging-maven-plugin</artifactId> + <version>1.6.7</version> + <extensions>true</extensions> + <configuration> + <nexusUrl>${nexusproxy}</nexusUrl> + <stagingProfileId>176c31dfe190a</stagingProfileId> + <serverId>ecomp-staging</serverId> + </configuration> + </plugin> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>0.7.9</version> + <executions> + <execution> + <id>default-prepare-agent</id> + <goals> + <goal>prepare-agent</goal> + </goals> + </execution> + <execution> + <id>default-report</id> + <goals> + <goal>report</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.tomcat.maven</groupId> + <artifactId>tomcat6-maven-plugin</artifactId> + <version>2.2</version> + </plugin> + <plugin> + <groupId>org.apache.tomcat.maven</groupId> + <artifactId>tomcat7-maven-plugin</artifactId> + <version>2.2</version> + </plugin> + + <!-- Generate POJOs from MSO json schema --> + <plugin> + <groupId>org.jsonschema2pojo</groupId> + <artifactId>jsonschema2pojo-maven-plugin</artifactId> + <version>0.4.23</version> + <configuration> + <sourceDirectory>${basedir}/src/main/resources/json/mso</sourceDirectory> + <targetPackage>org.onap.vid.domain.mso</targetPackage> + <outputDirectory>${project.build.directory}/generated-sources</outputDirectory> + </configuration> + <executions> + <execution> + <goals> + <goal>generate</goal> + </goals> + </execution> + </executions> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.1</version> + <configuration> + <source>1.8</source> + <target>1.8</target> + </configuration> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <version>2.19.1</version> + <configuration> + <skipTests>${skiptests}</skipTests> + <includes> + <include>**/Test*.java</include> + <include>**/*Test.java</include> + <include>**/*TestCase.java</include> + </includes> + <excludes> + <exclude>**/selenium/*.java</exclude> + <exclude>**/integrationTest/*.java</exclude> + </excludes> + <additionalClasspathElements> + <additionalClasspathElement>${basedir}/war</additionalClasspathElement> + </additionalClasspathElements> + <systemPropertyVariables> + <container.classpath>classpath:</container.classpath> + </systemPropertyVariables> + </configuration> + </plugin> + + <plugin> + <artifactId>maven-assembly-plugin</artifactId> + <configuration> + <skipAssembly>${skipassembly}</skipAssembly> + <descriptors> + <descriptor>${basedir}/distribution.xml</descriptor> + </descriptors> + </configuration> + <executions> + <execution> + <id>make-assembly</id> + <phase>package</phase> + <goals> + <goal>single</goal> + </goals> + </execution> + </executions> + </plugin> + + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-war-plugin</artifactId> + <version>3.0.0</version> + <configuration> + <!-- Build a jar with all the Java classes --> + <attachClasses>true</attachClasses> + <!-- Do not put any jars in the war --> + <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-site-plugin</artifactId> + <version>3.6</version> + <dependencies> + <dependency> + <groupId>org.apache.maven.wagon</groupId> + <artifactId>wagon-webdav-jackrabbit</artifactId> + <version>2.10</version> + </dependency> + </dependencies> + </plugin> + <plugin> + <groupId>pl.project13.maven</groupId> + <artifactId>git-commit-id-plugin</artifactId> + <version>2.2.4</version> + <executions> + <execution> + <id>get-the-git-infos</id> + <goals> + <goal>revision</goal> + </goals> + </execution> + </executions> + <configuration> + <dotGitDirectory>${project.basedir}/.git</dotGitDirectory> + <dateFormat>yyyy-MM-dd'T'HH:mm:ssZ</dateFormat> + <dateFormatTimeZone>${user.timezone}</dateFormatTimeZone> + <generateGitPropertiesFile>true</generateGitPropertiesFile> + <generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename> + <includeOnlyProperties> + <includeOnlyProperty>^git.commit.id$</includeOnlyProperty> + <includeOnlyProperty>^git.commit.message.short$</includeOnlyProperty> + <includeOnlyProperty>^git.commit.time$</includeOnlyProperty> + </includeOnlyProperties> + </configuration> + </plugin> + </plugins> + </build> + + <reporting> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-javadoc-plugin</artifactId> + <version>2.10.4</version> + <configuration> + <failOnError>false</failOnError> + <doclet>org.umlgraph.doclet.UmlGraphDoc</doclet> + <docletArtifact> + <groupId>org.umlgraph</groupId> + <artifactId>umlgraph</artifactId> + <version>5.6</version> + </docletArtifact> + <additionalparam>-views</additionalparam> + <useStandardDocletOptions>true</useStandardDocletOptions> + </configuration> + </plugin> + </plugins> + </reporting> + + <dependencies> + + <dependency> + <groupId>com.opencsv</groupId> + <artifactId>opencsv</artifactId> + <version>4.1</version> + </dependency> + + <!-- HTTP client --> + + <dependency> + <groupId>io.joshworks.unirest</groupId> + <artifactId>unirest-java</artifactId> + <version>0.2.1</version> + </dependency> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpclient</artifactId> + <version>4.3.6</version> + </dependency> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpasyncclient</artifactId> + <version>4.0.2</version> + </dependency> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpmime</artifactId> + <version>4.3.6</version> + </dependency> + <dependency> + <groupId>com.xebialabs.restito</groupId> + <artifactId>restito</artifactId> + <version>0.9.3</version> + <scope>test</scope> + </dependency> + + <!-- Helpers --> + <dependency> + <groupId>io.vavr</groupId> + <artifactId>vavr</artifactId> + <version>0.9.2</version> + </dependency> + + <!-- SDK overlay war --> + <dependency> + <groupId>org.onap.portal.sdk</groupId> + <artifactId>epsdk-app-overlay</artifactId> + <version>${epsdk.version}</version> + <type>war</type> + </dependency> + <dependency> + <groupId>org.onap.portal.sdk</groupId> + <artifactId>epsdk-app-common</artifactId> + <version>${epsdk.version}</version> + <type>jar</type> + </dependency> + + <dependency> + <groupId>org.onap.portal.sdk</groupId> + <artifactId>epsdk-core</artifactId> + <version>${epsdk.version}</version> + </dependency> + <dependency> + <groupId>org.onap.portal.sdk</groupId> + <artifactId>epsdk-analytics</artifactId> + <version>${epsdk.version}</version> + <exclusions> + <exclusion> + <groupId>com.lowagie</groupId> + <artifactId>itext</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.onap.portal.sdk</groupId> + <artifactId>epsdk-workflow</artifactId> + <version>${epsdk.version}</version> + </dependency> + <dependency> + <groupId>com.att.eelf</groupId> + <artifactId>eelf-core</artifactId> + <version>1.0.0</version> + <exclusions> + <exclusion> + <artifactId>powermock-api-mockito</artifactId> + <groupId>org.powermock</groupId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-core</artifactId> + <version>1.2.3</version> + </dependency> + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-classic</artifactId> + <version>1.2.3</version> + </dependency> + + <!-- Mapper --> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-annotations</artifactId> + <version>2.6.3</version> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-core</artifactId> + <version>2.8.6</version> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.core</groupId> + <artifactId>jackson-databind</artifactId> + <version>2.6.7.1</version> + </dependency> + <dependency> + <groupId>org.codehaus.jackson</groupId> + <artifactId>jackson-mapper-asl</artifactId> + <version>1.9.13</version> + </dependency> + <dependency> + <groupId>com.mchange</groupId> + <artifactId>c3p0</artifactId> + <version>0.9.5.2</version> + </dependency> + <dependency> + <groupId>io.searchbox</groupId> + <artifactId>jest</artifactId> + <version>2.0.0</version> + <exclusions> + <exclusion> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>javax.servlet-api</artifactId> + <version>3.1.0</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.12</version> + </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + <version>2.4</version> + <!--<scope>test</scope>--> + </dependency> + <dependency> + <groupId>com.google.code.bean-matchers</groupId> + <artifactId>bean-matchers</artifactId> + <version>0.11</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.json</groupId> + <artifactId>json</artifactId> + <version>20160212</version> + </dependency> + <dependency> + <groupId>org.quartz-scheduler</groupId> + <artifactId>quartz</artifactId> + <version>2.2.1</version> + <exclusions> + <!-- exclude 0.9.1.1 to avoid dupe of com.mchange:c3p0:0.9.2.1 --> + <exclusion> + <groupId>c3p0</groupId> + <artifactId>c3p0</artifactId> + </exclusion> + </exclusions> + </dependency> + <!-- bridge to implement commons-logging using slf4j --> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>jcl-over-slf4j</artifactId> + <version>1.7.12</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-context-support</artifactId> + <version>${springframework.version}</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-core</artifactId> + <version>${springframework.version}</version> + <exclusions> + <exclusion> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-test</artifactId> + <version>${springframework.version}</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-tx</artifactId> + <version>${springframework.version}</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-web</artifactId> + <version>${springframework.version}</version> + </dependency> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-webmvc</artifactId> + <version>${springframework.version}</version> + </dependency> + <dependency> + <groupId>org.glassfish.jersey.core</groupId> + <artifactId>jersey-client</artifactId> + <version>2.23.1</version> + </dependency> + <dependency> + <groupId>org.glassfish.jersey.connectors</groupId> + <artifactId>jersey-jetty-connector</artifactId> + <version>2.23.1</version> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.jaxrs</groupId> + <artifactId>jackson-jaxrs-json-provider</artifactId> + <version>2.6.3</version> + </dependency> + <dependency> + <groupId>commons-beanutils</groupId> + <artifactId>commons-beanutils</artifactId> + <version>1.9.3</version> + </dependency> + <dependency> + <groupId>com.googlecode.json-simple</groupId> + <artifactId>json-simple</artifactId> + <version>1.1.1</version> + </dependency> + <dependency> + <groupId>org.seleniumhq.selenium</groupId> + <artifactId>selenium-java</artifactId> + <version>2.53.1</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.seleniumhq.selenium</groupId> + <artifactId>selenium-api</artifactId> + <version>2.53.1</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testng</groupId> + <artifactId>testng</artifactId> + <version>6.8</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-core</artifactId> + <version>2.23.0</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.seleniumhq.selenium</groupId> + <artifactId>selenium-firefox-driver</artifactId> + <version>2.53.1</version> + </dependency> + <dependency> + <groupId>xml-apis</groupId> + <artifactId>xml-apis</artifactId> + <version>1.4.01</version> + </dependency> + <dependency> + <groupId>org.yaml</groupId> + <artifactId>snakeyaml</artifactId> + <version>1.16</version> + </dependency> + <dependency> + <groupId>org.skyscreamer</groupId> + <artifactId>jsonassert</artifactId> + <version>1.5.0</version> + </dependency> + <dependency> + <groupId>org.onap.sdc.sdc-tosca</groupId> + <artifactId>sdc-tosca</artifactId> + <version>1.4.1</version> + <scope>compile</scope> + </dependency> + <dependency> + <groupId>net.javacrumbs.json-unit</groupId> + <artifactId>json-unit</artifactId> + <version>1.23.0</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-text</artifactId> + <version>1.1</version> + </dependency> + <dependency> + <groupId>org.hamcrest</groupId> + <artifactId>java-hamcrest</artifactId> + <version>2.0.0.0</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.togglz</groupId> + <artifactId>togglz-spring-core</artifactId> + <version>2.5.0.Final</version> + </dependency> + <dependency> + <groupId>org.assertj</groupId> + <artifactId>assertj-core</artifactId> + <version>3.10.0</version> + <scope>compile</scope> + </dependency> + </dependencies> +</project> diff --git a/vid-app-common/src/main/java/org/onap/vid/aai/AaiClient.java b/vid-app-common/src/main/java/org/onap/vid/aai/AaiClient.java index 06e0f0174..baf92b880 100644 --- a/vid-app-common/src/main/java/org/onap/vid/aai/AaiClient.java +++ b/vid-app-common/src/main/java/org/onap/vid/aai/AaiClient.java @@ -8,16 +8,17 @@ import org.codehaus.jackson.map.ObjectMapper; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.onap.vid.aai.model.AaiGetAicZone.AicZones; import org.onap.vid.aai.model.*; import org.onap.vid.aai.model.AaiGetNetworkCollectionDetails.*; import org.onap.vid.aai.model.AaiGetOperationalEnvironments.OperationalEnvironmentList; import org.onap.vid.aai.model.AaiGetPnfs.Pnf; import org.onap.vid.aai.model.AaiGetServicesRequestModel.GetServicesAAIRespone; -import org.onap.vid.aai.model.AaiGetTenatns.GetTenantsResponse; import org.onap.vid.aai.model.Relationship; import org.onap.vid.aai.model.RelationshipData; import org.onap.vid.aai.model.RelationshipList; +import org.onap.vid.aai.model.AaiGetTenatns.GetTenantsResponse; import org.onap.vid.aai.util.AAIRestInterface; import org.onap.vid.aai.util.VidObjectMapperType; import org.onap.vid.exceptions.GenericUncheckedException; @@ -26,7 +27,6 @@ import org.onap.vid.model.probes.ErrorMetadata; import org.onap.vid.model.probes.ExternalComponentStatus; import org.onap.vid.model.probes.HttpRequestMetadata; import org.onap.vid.utils.Logging; -import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.springframework.web.util.UriUtils; import javax.inject.Inject; @@ -37,7 +37,10 @@ import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.Date; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.UUID; import static java.util.Collections.emptyList; import static org.apache.commons.lang3.ObjectUtils.defaultIfNull; @@ -297,6 +300,10 @@ public class AaiClient implements AaiClientInterface { @Override public Response getVersionByInvariantId(List<String> modelInvariantId) { + if (modelInvariantId.isEmpty()) { + throw new GenericUncheckedException("Zero invariant-ids provided to getVersionByInvariantId; request is rejected as this will cause full models listing"); + } + StringBuilder sb = new StringBuilder(); for (String id : modelInvariantId){ sb.append(MODEL_INVARIANT_ID); diff --git a/vid-app-common/src/main/java/org/onap/vid/aai/AaiOverTLSClient.java b/vid-app-common/src/main/java/org/onap/vid/aai/AaiOverTLSClient.java new file mode 100644 index 000000000..6e25e2715 --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/aai/AaiOverTLSClient.java @@ -0,0 +1,101 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2018 Nokia 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.vid.aai; + +import static org.onap.vid.aai.AaiOverTLSClientInterface.HEADERS.ACCEPT; +import static org.onap.vid.aai.AaiOverTLSClientInterface.HEADERS.CONTENT_TYPE; +import static org.onap.vid.aai.AaiOverTLSClientInterface.HEADERS.FROM_APP_ID_HEADER; +import static org.onap.vid.aai.AaiOverTLSClientInterface.HEADERS.REQUEST_ID; +import static org.onap.vid.aai.AaiOverTLSClientInterface.HEADERS.TRANSACTION_ID_HEADER; + +import io.joshworks.restclient.http.HttpResponse; +import io.vavr.collection.HashMap; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.Collections; +import java.util.Map; +import javax.ws.rs.core.MediaType; +import org.onap.portalsdk.core.util.SystemProperties; +import org.onap.vid.aai.model.AaiNodeQueryResponse; +import org.onap.vid.aai.model.ResourceType; +import org.onap.vid.aai.util.AAIProperties; +import org.onap.vid.client.SyncRestClientInterface; +import org.onap.vid.model.SubscriberList; + +public class AaiOverTLSClient implements AaiOverTLSClientInterface { + + private final AaiOverTLSPropertySupplier propertySupplier; + private SyncRestClientInterface syncRestClient; + private boolean useClientCert; + private static final String CALLER_APP_ID = "VidAaiController"; + private String urlBase; + + public AaiOverTLSClient(SyncRestClientInterface syncRestClient, AaiOverTLSPropertySupplier propertySupplier) { + this(syncRestClient, propertySupplier, SystemProperties.getProperty(AAIProperties.AAI_SERVER_URL)); + } + + AaiOverTLSClient(SyncRestClientInterface syncRestClient, AaiOverTLSPropertySupplier propertySupplier, String baseUrl) { + this.syncRestClient = syncRestClient; + this.propertySupplier = propertySupplier; + this.urlBase = baseUrl; + } + + @Override + public void setUseClientCert(boolean useClientCert) { + this.useClientCert = useClientCert; + } + + @Override + public HttpResponse<AaiNodeQueryResponse> searchNodeTypeByName(String name, ResourceType type) { + String uri = urlBase + String.format(URIS.NODE_TYPE_BY_NAME, type.getAaiFormat(), type.getNameFilter(), name); + return syncRestClient.get(uri, getRequestHeaders(), Collections.emptyMap(), AaiNodeQueryResponse.class); + } + + @Override + public HttpResponse<SubscriberList> getAllSubscribers() { + String uri = urlBase + String.format(URIS.SUBSCRIBERS, 0); + return syncRestClient.get(uri, getRequestHeaders(), Collections.emptyMap(), SubscriberList.class); + } + + private Map<String, String> getRequestHeaders() { + Map<String, String> result = HashMap.of( + TRANSACTION_ID_HEADER, propertySupplier.getRandomUUID(), + FROM_APP_ID_HEADER, CALLER_APP_ID, + CONTENT_TYPE, MediaType.APPLICATION_JSON, + REQUEST_ID, propertySupplier.getRequestId(), + ACCEPT, MediaType.APPLICATION_JSON) + .toJavaMap(); + result.putAll(getAuthorizationHeader()); + return result; + } + + private Map<String, String> getAuthorizationHeader() { + if (!useClientCert) { + String vidUsername = propertySupplier.getUsername(); + String vidPassword = propertySupplier.getPassword(); + String encoded = Base64.getEncoder() + .encodeToString((vidUsername + ":" + vidPassword).getBytes(StandardCharsets.UTF_8)); + return HashMap.of("Authorization", "Basic " + encoded).toJavaMap(); + } + return HashMap.<String, String>empty().toJavaMap(); + } + +} diff --git a/vid-app-common/src/main/java/org/onap/vid/aai/AaiOverTLSClientInterface.java b/vid-app-common/src/main/java/org/onap/vid/aai/AaiOverTLSClientInterface.java new file mode 100644 index 000000000..ad43746ca --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/aai/AaiOverTLSClientInterface.java @@ -0,0 +1,51 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2018 Nokia. 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.vid.aai; + +import io.joshworks.restclient.http.HttpResponse; +import org.onap.portalsdk.core.util.SystemProperties; +import org.onap.vid.aai.model.AaiNodeQueryResponse; +import org.onap.vid.aai.model.ResourceType; +import org.onap.vid.model.SubscriberList; + +public interface AaiOverTLSClientInterface { + + class URIS { + + static final String SUBSCRIBERS = "business/customers?subscriber-type=INFRA&depth=%s"; + static final String NODE_TYPE_BY_NAME = "search/nodes-query?search-node-type=%s&filter=%s:EQUALS:%s"; + } + + class HEADERS { + static final String TRANSACTION_ID_HEADER = "X-TransactionId"; + static final String FROM_APP_ID_HEADER = "X-FromAppId"; + static final String CONTENT_TYPE = "Content-Type"; + static final String REQUEST_ID = SystemProperties.ECOMP_REQUEST_ID; + static final String ACCEPT = "Accept"; + } + + void setUseClientCert(boolean useClientCert); + + HttpResponse<AaiNodeQueryResponse> searchNodeTypeByName(String name, ResourceType type); + + HttpResponse<SubscriberList> getAllSubscribers(); + +} diff --git a/vid-app-common/src/main/java/org/onap/vid/aai/AaiOverTLSPropertySupplier.java b/vid-app-common/src/main/java/org/onap/vid/aai/AaiOverTLSPropertySupplier.java new file mode 100644 index 000000000..33b44b159 --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/aai/AaiOverTLSPropertySupplier.java @@ -0,0 +1,47 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2018 Nokia 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.vid.aai; + +import java.util.UUID; +import org.eclipse.jetty.util.security.Password; +import org.onap.portalsdk.core.util.SystemProperties; +import org.onap.vid.aai.util.AAIProperties; +import org.onap.vid.utils.Logging; + +public class AaiOverTLSPropertySupplier { + + public String getUsername() { + return SystemProperties.getProperty(AAIProperties.AAI_VID_USERNAME); + } + + public String getPassword() { + return Password.deobfuscate(SystemProperties.getProperty(AAIProperties.AAI_VID_PASSWD_X)); + } + + public String getRequestId() { + return Logging.extractOrGenerateRequestId(); + } + + public String getRandomUUID(){ + return UUID.randomUUID().toString(); + } + +} diff --git a/vid-app-common/src/main/java/org/onap/vid/aai/exceptions/InvalidAAIResponseException.java b/vid-app-common/src/main/java/org/onap/vid/aai/exceptions/InvalidAAIResponseException.java index f80cae504..0e403697b 100644 --- a/vid-app-common/src/main/java/org/onap/vid/aai/exceptions/InvalidAAIResponseException.java +++ b/vid-app-common/src/main/java/org/onap/vid/aai/exceptions/InvalidAAIResponseException.java @@ -1,3 +1,24 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2018 Nokia. 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.vid.aai.exceptions; import org.onap.vid.aai.AaiResponse; @@ -10,4 +31,8 @@ public class InvalidAAIResponseException extends GenericUncheckedException { public InvalidAAIResponseException(AaiResponse aaiResponse) { super(String.format("errorCode: %d, raw: %s", aaiResponse.getHttpCode(), aaiResponse.getErrorMessage())); } + + public InvalidAAIResponseException(int statusCode, String message) { + super(String.format("errorCode: %d, raw: %s", statusCode, message)); + } } diff --git a/vid-app-common/src/main/java/org/onap/vid/aai/model/ServiceInstance.java b/vid-app-common/src/main/java/org/onap/vid/aai/model/ServiceInstance.java deleted file mode 100644 index 381f9bc25..000000000 --- a/vid-app-common/src/main/java/org/onap/vid/aai/model/ServiceInstance.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.onap.vid.aai.model; - -import org.codehaus.jackson.annotate.JsonProperty; - -public class ServiceInstance { - - @JsonProperty("service-instance-id") - public String serviceInstanceId; - - @JsonProperty("service-instance-name") - public String serviceInstanceName; - - @JsonProperty("persona-model-id") - public String personaModelId; - - @JsonProperty("persona-model-version") - public String personaModelVersion; - - @JsonProperty("resource-version") - public String resourceVersion; - - @JsonProperty("orchestration-status") - public String orchestrationStatus; - - -} diff --git a/vid-app-common/src/main/java/org/onap/vid/aai/model/ServiceInstances.java b/vid-app-common/src/main/java/org/onap/vid/aai/model/ServiceInstances.java deleted file mode 100644 index 0fced4c57..000000000 --- a/vid-app-common/src/main/java/org/onap/vid/aai/model/ServiceInstances.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.onap.vid.aai.model; - -import java.util.List; - -import org.codehaus.jackson.annotate.JsonProperty; - -public class ServiceInstances { - - @JsonProperty("service-instance") - public List<ServiceInstance> serviceInstance; - -} diff --git a/vid-app-common/src/main/java/org/onap/vid/aai/model/ServiceSubscription.java b/vid-app-common/src/main/java/org/onap/vid/aai/model/ServiceSubscription.java deleted file mode 100644 index 91582e816..000000000 --- a/vid-app-common/src/main/java/org/onap/vid/aai/model/ServiceSubscription.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.onap.vid.aai.model; - -import org.codehaus.jackson.annotate.JsonProperty; - -public class ServiceSubscription { - - @JsonProperty("service-type") - public String serviceType; - - @JsonProperty("resource-version") - public String resourceVersion; - - @JsonProperty("service-instances") - public ServiceInstances serviceInstances; - - -} diff --git a/vid-app-common/src/main/java/org/onap/vid/aai/model/Services.java b/vid-app-common/src/main/java/org/onap/vid/aai/model/Services.java deleted file mode 100644 index 3ba4b22d0..000000000 --- a/vid-app-common/src/main/java/org/onap/vid/aai/model/Services.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.onap.vid.aai.model; - -import java.util.List; - -import org.codehaus.jackson.annotate.JsonProperty; - -public class Services { - @JsonProperty("global-customer-id") - public String globalCustomerId; - - @JsonProperty("subscriber-name") - public String subscriberName; - - @JsonProperty("subscriber-type") - public String subscriberType; - - @JsonProperty("resource-version") - public String resourceVersion; - - @JsonProperty("service-subscriptions") - public List<ServiceSubscription> serviceSubscriptions; - - -} diff --git a/vid-app-common/src/main/java/org/onap/vid/asdc/parser/ToscaParserImpl2.java b/vid-app-common/src/main/java/org/onap/vid/asdc/parser/ToscaParserImpl2.java index 17fb29b59..57d80ce9d 100644 --- a/vid-app-common/src/main/java/org/onap/vid/asdc/parser/ToscaParserImpl2.java +++ b/vid-app-common/src/main/java/org/onap/vid/asdc/parser/ToscaParserImpl2.java @@ -1,7 +1,6 @@ package org.onap.vid.asdc.parser; -import org.onap.vid.asdc.beans.Service; -import org.onap.vid.model.*; +import org.apache.commons.lang3.StringUtils; import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException; import org.onap.sdc.tosca.parser.impl.FilterType; @@ -11,6 +10,8 @@ import org.onap.sdc.toscaparser.api.Group; import org.onap.sdc.toscaparser.api.*; import org.onap.sdc.toscaparser.api.elements.Metadata; import org.onap.sdc.toscaparser.api.parameters.Input; +import org.onap.vid.asdc.beans.Service; +import org.onap.vid.model.*; import java.nio.file.Path; import java.util.*; @@ -417,7 +418,22 @@ public class ToscaParserImpl2 { private boolean isInputMatchesToGroup(List<Property> annotationProperties, org.onap.vid.model.Group group){ for(Property property: annotationProperties){ if(property.getName().equals(VF_MODULE_LABEL)){ - return getPropertyValueAsString(property).equals(group.getProperties().getVfModuleLabel()); + final Object values = property.getValue(); + final String vfModuleLabel = group.getProperties().getVfModuleLabel(); + if (values instanceof List) { + if (listContainsAsString((List) values, vfModuleLabel)) return true; + } else { + return getPropertyValueAsString(property).equals(vfModuleLabel); + } + } + } + return false; + } + + private boolean listContainsAsString(List list, String value) { + for (Object v : list) { + if (StringUtils.equals(v.toString(), value)) { + return true; } } return false; @@ -428,7 +444,7 @@ public class ToscaParserImpl2 { } private String removeSquareBrackets(String stringWithSquareBrackets){ - return stringWithSquareBrackets.substring(1, stringWithSquareBrackets.length()-1); + return stringWithSquareBrackets.replaceAll("(^\\[|\\]$)", ""); } private GroupProperties extractVfModuleProperties(Group group, ISdcCsarHelper csarHelper){ @@ -507,7 +523,10 @@ public class ToscaParserImpl2 { for (Property property : properties) { //special handling to necessary sub-property "ecomp_generated_naming" if(property.getName().equals("nf_naming")){ - propertiesMap.put(removeSquareBrackets(((LinkedHashMap)(property.getValue())).keySet().toString()) ,((LinkedHashMap)(property.getValue())).get("ecomp_generated_naming").toString()); + final Object ecompGeneratedNaming = ((Map) (property.getValue())).get("ecomp_generated_naming"); + if (ecompGeneratedNaming != null) { + propertiesMap.put("ecomp_generated_naming", ecompGeneratedNaming.toString()); + } } propertiesMap.put(property.getName(), property.getValue().toString()); } diff --git a/vid-app-common/src/main/java/org/onap/vid/client/SyncRestClient.java b/vid-app-common/src/main/java/org/onap/vid/client/SyncRestClient.java index a3ff5f923..9e50c4456 100644 --- a/vid-app-common/src/main/java/org/onap/vid/client/SyncRestClient.java +++ b/vid-app-common/src/main/java/org/onap/vid/client/SyncRestClient.java @@ -25,42 +25,33 @@ import io.joshworks.restclient.http.JsonNode; import io.joshworks.restclient.http.RestClient; import io.joshworks.restclient.http.exceptions.RestClientException; import io.joshworks.restclient.http.mapper.ObjectMapper; -import org.apache.http.impl.client.CloseableHttpClient; -import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import io.joshworks.restclient.request.GetRequest; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLContexts; import org.apache.http.conn.ssl.TrustSelfSignedStrategy; -import org.eclipse.jetty.util.security.Password; +import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; -import org.apache.http.conn.ssl.SSLContexts; -import io.vavr.CheckedFunction1; -import lombok.SneakyThrows; -import lombok.val; +import org.eclipse.jetty.util.security.Password; +import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.onap.portalsdk.core.util.SystemProperties; +import org.onap.vid.properties.VidProperties; -import java.security.UnrecoverableKeyException; -import java.security.NoSuchAlgorithmException; -import java.security.KeyManagementException; -import java.security.cert.CertificateException; -import javax.net.ssl.SSLException; -import java.security.KeyStoreException; -import java.text.SimpleDateFormat; import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLException; +import java.io.File; import java.io.FileInputStream; -import java.security.KeyStore; -import java.text.DateFormat; -import java.io.InputStream; import java.io.IOException; -import java.util.Date; +import java.io.InputStream; +import java.security.KeyManagementException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; +import java.security.cert.CertificateException; import java.util.Map; -import java.io.File; -import org.onap.portalsdk.core.util.SystemProperties; -import org.onap.vid.properties.VidProperties; public class SyncRestClient implements SyncRestClientInterface { - - private static final String CANNOT_INITIALIZE_CUSTOM_HTTP_CLIENT = "Cannot initialize custom http client from current configuration. Using default one."; - private static final String TRY_TO_CALL_OVER_HTTP = "SSL Handshake problem occured. Will try to retry over Http."; private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SyncRestClient.class); - private static final DateFormat DATE_FORMAT = new SimpleDateFormat("HH:mm:ss:SSSS"); private static final String[] SUPPORTED_SSL_VERSIONS = {"TLSv1", "TLSv1.2"}; private static final String HTTPS_SCHEMA = "https://"; private static final String HTTP_SCHEMA = "http://"; @@ -91,13 +82,13 @@ public class SyncRestClient implements SyncRestClientInterface { @Override public <T> HttpResponse<T> post(String url, Map<String, String> headers, Object body, Class<T> responseClass) { return callWithRetryOverHttp(url, - url2 -> restClient.post(url2).headers(headers).body(body).asObject(responseClass)); + url2 -> restClient.post(url2).headers(headers).body(body).asObject(responseClass)); } @Override public HttpResponse<JsonNode> get(String url, Map<String, String> headers, Map<String, String> routeParams) { return callWithRetryOverHttp(url, url2 -> { - val getRequest = restClient.get(url2).headers(headers); + GetRequest getRequest = restClient.get(url2).headers(headers); routeParams.forEach(getRequest::routeParam); return getRequest.asJson(); }); @@ -105,9 +96,9 @@ public class SyncRestClient implements SyncRestClientInterface { @Override public <T> HttpResponse<T> get(String url, Map<String, String> headers, Map<String, String> routeParams, - Class<T> responseClass) { + Class<T> responseClass) { return callWithRetryOverHttp(url, url2 -> { - val getRequest = restClient.get(url2).headers(headers); + GetRequest getRequest = restClient.get(url2).headers(headers); routeParams.forEach(getRequest::routeParam); return getRequest.asObject(responseClass); }); @@ -115,9 +106,9 @@ public class SyncRestClient implements SyncRestClientInterface { @Override public HttpResponse<InputStream> getStream(String url, Map<String, String> headers, - Map<String, String> routeParams) { + Map<String, String> routeParams) { return callWithRetryOverHttp(url, url2 -> { - val getRequest = restClient.get(url2).headers(headers); + GetRequest getRequest = restClient.get(url2).headers(headers); routeParams.forEach(getRequest::routeParam); return getRequest.asBinary(); }); @@ -131,7 +122,7 @@ public class SyncRestClient implements SyncRestClientInterface { @Override public <T> HttpResponse<T> put(String url, Map<String, String> headers, Object body, Class<T> responseClass) { return callWithRetryOverHttp(url, - url2 -> restClient.put(url2).headers(headers).body(body).asObject(responseClass)); + url2 -> restClient.put(url2).headers(headers).body(body).asObject(responseClass)); } @Override @@ -154,81 +145,100 @@ public class SyncRestClient implements SyncRestClientInterface { restClient.shutdown(); } - @SneakyThrows - private <T> HttpResponse<T> callWithRetryOverHttp(String url, - CheckedFunction1<String, HttpResponse<T>> httpRequest) { + private <T> HttpResponse<T> callWithRetryOverHttp(String url, HttpRequest<T> httpRequest) { + try { + return callWithRetryOverHttpThrows(url, httpRequest); + } catch (IOException e) { + throw new SyncRestClientException("IOException while calling rest service", e); + } + } + + private <T> HttpResponse<T> callWithRetryOverHttpThrows(String url, HttpRequest<T> httpRequest) throws IOException { try { return httpRequest.apply(url); } catch (RestClientException e) { - if (e.getCause() instanceof SSLException) { - logger.warn(EELFLoggerDelegate.debugLogger, - DATE_FORMAT.format(new Date()) + TRY_TO_CALL_OVER_HTTP, e); + if (causedBySslHandshakeError(e)) { + logger.warn(EELFLoggerDelegate.debugLogger, "SSL Handshake problem occured. Will try to retry over Http.", e); return httpRequest.apply(url.replaceFirst(HTTPS_SCHEMA, HTTP_SCHEMA)); } throw e; } } + private boolean causedBySslHandshakeError(RestClientException exception) { + return exception.getCause() instanceof SSLException; + } + private ObjectMapper defaultObjectMapper() { - val objectMapper = new org.codehaus.jackson.map.ObjectMapper(); + org.codehaus.jackson.map.ObjectMapper objectMapper = new org.codehaus.jackson.map.ObjectMapper(); return new ObjectMapper() { @Override - @SneakyThrows public <T> T readValue(String value, Class<T> aClass) { - return objectMapper.readValue(value, aClass); + try { + return objectMapper.readValue(value, aClass); + } catch (IOException e) { + throw new SyncRestClientException("IOException while reading value", e); + } } @Override - @SneakyThrows public String writeValue(Object value) { - return objectMapper.writeValueAsString(value); + try { + return objectMapper.writeValueAsString(value); + } catch (IOException e) { + throw new SyncRestClientException("IOException while writing value", e); + } } }; } private CloseableHttpClient defaultHttpClient() { try { - val trustStorePath = SystemProperties.getProperty(VidProperties.VID_TRUSTSTORE_FILENAME); - val trustStorePass = SystemProperties.getProperty(VidProperties.VID_TRUSTSTORE_PASSWD_X); - val decryptedTrustStorePass = Password.deobfuscate(trustStorePass); + String trustStorePath = SystemProperties.getProperty(VidProperties.VID_TRUSTSTORE_FILENAME); + String trustStorePass = SystemProperties.getProperty(VidProperties.VID_TRUSTSTORE_PASSWD_X); + String decryptedTrustStorePass = Password.deobfuscate(trustStorePass); - val trustStore = loadTruststore(trustStorePath, decryptedTrustStorePass); - val sslContext = trustOwnCACerts(decryptedTrustStorePass, trustStore); - val sslSf = allowTLSProtocols(sslContext); + KeyStore trustStore = loadTruststore(trustStorePath, decryptedTrustStorePass); + SSLContext sslContext = trustOwnCACerts(decryptedTrustStorePass, trustStore); + SSLConnectionSocketFactory sslSf = allowTLSProtocols(sslContext); return HttpClients.custom().setSSLSocketFactory(sslSf).build(); } catch (IOException | CertificateException | UnrecoverableKeyException | NoSuchAlgorithmException | KeyStoreException | KeyManagementException e) { - logger.warn(EELFLoggerDelegate.debugLogger, - DATE_FORMAT.format(new Date()) + CANNOT_INITIALIZE_CUSTOM_HTTP_CLIENT, e); + logger.warn(EELFLoggerDelegate.debugLogger, "Cannot initialize custom http client from current configuration. Using default one.", e); return HttpClients.createDefault(); } } private SSLConnectionSocketFactory allowTLSProtocols(SSLContext sslcontext) { return new SSLConnectionSocketFactory( - sslcontext, - SUPPORTED_SSL_VERSIONS, - null, - SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); + sslcontext, + SUPPORTED_SSL_VERSIONS, + null, + SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); } private SSLContext trustOwnCACerts(String trustStorePass, KeyStore trustStore) - throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException { + throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException { return SSLContexts.custom() - .useTLS() - .loadKeyMaterial(trustStore, trustStorePass.toCharArray()) - .loadTrustMaterial(trustStore, new TrustSelfSignedStrategy()) - .build(); + .useTLS() + .loadKeyMaterial(trustStore, trustStorePass.toCharArray()) + .loadTrustMaterial(trustStore, new TrustSelfSignedStrategy()) + .build(); } private KeyStore loadTruststore(String trustStorePath, String trustStorePass) - throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException { - val trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); + throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException { + KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); try (FileInputStream instream = new FileInputStream(new File(trustStorePath))) { trustStore.load(instream, trustStorePass.toCharArray()); } return trustStore; } + @FunctionalInterface + private interface HttpRequest<T> { + HttpResponse<T> apply(String url) throws IOException; + } + } diff --git a/vid-app-common/src/main/java/org/onap/vid/client/SyncRestClientException.java b/vid-app-common/src/main/java/org/onap/vid/client/SyncRestClientException.java new file mode 100644 index 000000000..2a4f093b1 --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/client/SyncRestClientException.java @@ -0,0 +1,7 @@ +package org.onap.vid.client; + +public class SyncRestClientException extends RuntimeException { + public SyncRestClientException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/vid-app-common/src/main/java/org/onap/vid/controllers/VidController.java b/vid-app-common/src/main/java/org/onap/vid/controllers/VidController.java index 39a1f2bf5..b9d67b6df 100644 --- a/vid-app-common/src/main/java/org/onap/vid/controllers/VidController.java +++ b/vid-app-common/src/main/java/org/onap/vid/controllers/VidController.java @@ -71,9 +71,7 @@ public class VidController extends RestrictedBaseController { SecureServices secureServices = new SecureServices(); List<Role> roles = roleProvider.getUserRoles(request); secureServices.setServices(aaiService.getServicesByDistributionStatus()); - //Disable roles until AAF integration finishes - //secureServices.setReadOnly(roleProvider.userPermissionIsReadOnly(roles)); - secureServices.setReadOnly(false); + secureServices.setReadOnly(roleProvider.userPermissionIsReadOnly(roles)); return secureServices; } diff --git a/vid-app-common/src/main/java/org/onap/vid/controllers/WebConfig.java b/vid-app-common/src/main/java/org/onap/vid/controllers/WebConfig.java index 0f4b536a1..56dce9ac7 100644 --- a/vid-app-common/src/main/java/org/onap/vid/controllers/WebConfig.java +++ b/vid-app-common/src/main/java/org/onap/vid/controllers/WebConfig.java @@ -21,9 +21,14 @@ package org.onap.vid.controllers; -import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.core.JsonProcessingException; +import io.joshworks.restclient.http.mapper.ObjectMapper; +import java.io.IOException; import org.onap.vid.aai.AaiClient; import org.onap.vid.aai.AaiClientInterface; +import org.onap.vid.aai.AaiOverTLSClient; +import org.onap.vid.aai.AaiOverTLSClientInterface; +import org.onap.vid.aai.AaiOverTLSPropertySupplier; import org.onap.vid.aai.AaiResponseTranslator; import org.onap.vid.aai.PombaClientImpl; import org.onap.vid.aai.PombaClientInterface; @@ -48,7 +53,6 @@ import org.onap.vid.services.VidService; import org.onap.vid.services.VidServiceImpl; import org.onap.vid.scheduler.SchedulerRestInterface; import org.onap.vid.scheduler.SchedulerRestInterfaceIfc; -import org.onap.vid.services.*; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -66,8 +70,8 @@ public class WebConfig { * @return the object mapper */ @Bean - public ObjectMapper getObjectMapper() { - return new ObjectMapper(); + public com.fasterxml.jackson.databind.ObjectMapper getObjectMapper() { + return new com.fasterxml.jackson.databind.ObjectMapper(); } @@ -161,4 +165,62 @@ public class WebConfig { public SchedulerRestInterfaceIfc getSchedulerRestInterface(){ return new SchedulerRestInterface(); } + + @Bean(name = "aaiClientForFasterXmlMapping") + public AaiOverTLSClientInterface getAaiClientForFasterXmlMapping(){ + ObjectMapper objectMapper = new ObjectMapper() { + + com.fasterxml.jackson.databind.ObjectMapper om = new com.fasterxml.jackson.databind.ObjectMapper(); + + @Override + public <T> T readValue(String s, Class<T> aClass) { + try { + return om.readValue(s, aClass); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public String writeValue(Object o) { + try { + return om.writeValueAsString(o); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + }; + + return new AaiOverTLSClient(new SyncRestClient(objectMapper), new AaiOverTLSPropertySupplier()); + } + + + @Bean(name = "aaiClientForCodehausMapping") + public AaiOverTLSClientInterface getAaiClientForCodehausMapping() { + + ObjectMapper objectMapper = new ObjectMapper() { + + org.codehaus.jackson.map.ObjectMapper om = new org.codehaus.jackson.map.ObjectMapper(); + + @Override + public <T> T readValue(String s, Class<T> aClass) { + try { + return om.readValue(s, aClass); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public String writeValue(Object o) { + try { + return om.writeValueAsString(o); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + }; + + return new AaiOverTLSClient(new SyncRestClient(objectMapper), new AaiOverTLSPropertySupplier()); + } } diff --git a/vid-app-common/src/main/java/org/onap/vid/mso/MsoException.java b/vid-app-common/src/main/java/org/onap/vid/mso/MsoException.java new file mode 100644 index 000000000..02d54c354 --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/mso/MsoException.java @@ -0,0 +1,7 @@ +package org.onap.vid.mso; + +public class MsoException extends RuntimeException { + public MsoException(Throwable cause) { + super(cause); + } +} diff --git a/vid-app-common/src/main/java/org/onap/vid/mso/MsoInterface.java b/vid-app-common/src/main/java/org/onap/vid/mso/MsoInterface.java index 834f80885..7c8ab89c1 100644 --- a/vid-app-common/src/main/java/org/onap/vid/mso/MsoInterface.java +++ b/vid-app-common/src/main/java/org/onap/vid/mso/MsoInterface.java @@ -20,13 +20,15 @@ */ package org.onap.vid.mso; +import com.fasterxml.jackson.core.JsonProcessingException; import io.joshworks.restclient.http.HttpResponse; import io.joshworks.restclient.http.mapper.ObjectMapper; -import lombok.SneakyThrows; import org.onap.vid.aai.util.CustomJacksonJaxBJsonProvider; import org.onap.vid.changeManagement.RequestDetailsWrapper; import org.onap.vid.mso.rest.RequestDetails; +import java.io.IOException; + /** * Created by pickjonathan on 21/06/2017. */ @@ -123,16 +125,22 @@ public interface MsoInterface { return new ObjectMapper() { CustomJacksonJaxBJsonProvider mapper = new CustomJacksonJaxBJsonProvider(); - @SneakyThrows @Override public <T> T readValue(String s, Class<T> aClass) { - return mapper.getMapper().readValue(s, aClass); + try { + return mapper.getMapper().readValue(s, aClass); + } catch (IOException e) { + throw new MsoException(e); + } } - @SneakyThrows @Override public String writeValue(Object o) { - return mapper.getMapper().writeValueAsString(o); + try { + return mapper.getMapper().writeValueAsString(o); + } catch (JsonProcessingException e) { + throw new MsoException(e); + } } }; } diff --git a/vid-app-common/src/main/java/org/onap/vid/roles/RoleProvider.java b/vid-app-common/src/main/java/org/onap/vid/roles/RoleProvider.java index 90b9a8250..b83f751fe 100644 --- a/vid-app-common/src/main/java/org/onap/vid/roles/RoleProvider.java +++ b/vid-app-common/src/main/java/org/onap/vid/roles/RoleProvider.java @@ -2,7 +2,8 @@ * ============LICENSE_START======================================================= * VID * ================================================================================ - * Modifications Copyright 2018 Nokia + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2018 Nokia. 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. @@ -22,6 +23,7 @@ package org.onap.vid.roles; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import io.joshworks.restclient.http.HttpResponse; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.onap.portalsdk.core.web.support.UserUtils; import org.onap.vid.aai.AaiResponse; @@ -58,8 +60,8 @@ public class RoleProvider { public void init() { LOG.debug(EELFLoggerDelegate.debugLogger, "Role provider => init method started"); - AaiResponse<SubscriberList> subscribersResponse = aaiService.getFullSubscriberList(); - subscribers = subscribersResponse.getT(); + HttpResponse<SubscriberList> subscribersResponse = aaiService.getFullSubscriberList(); + subscribers = subscribersResponse.getBody(); LOG.debug(EELFLoggerDelegate.debugLogger, "Role provider => init method finished"); } @@ -69,10 +71,10 @@ public class RoleProvider { LOG.debug(EELFLoggerDelegate.debugLogger, logPrefix + "Entering to get user role for user " + UserUtils.getUserId(request)); List<Role> roleList = new ArrayList<>(); - //Disable roles until AAF integration finishes - /*HashMap roles = UserUtils.getRoles(request); + + Map roles = UserUtils.getRoles(request); for (Object role : roles.keySet()) { - org.openecomp.portalsdk.core.domain.Role sdkRol = (org.openecomp.portalsdk.core.domain.Role) roles.get(role); + org.onap.portalsdk.core.domain.Role sdkRol = (org.onap.portalsdk.core.domain.Role) roles.get(role); LOG.debug(EELFLoggerDelegate.debugLogger, logPrefix + "Role " + sdkRol.getName() + " is being proccessed"); try { @@ -85,11 +87,11 @@ public class RoleProvider { roleList.add(createRoleFromStringArr(roleParts, logPrefix)); String msg = String.format(logPrefix + " User %s got permissions %s", UserUtils.getUserId(request), Arrays.toString(roleParts)); LOG.debug(EELFLoggerDelegate.debugLogger, msg); - } catch (RoleParsingException e) { + } catch (Exception e) { LOG.error(logPrefix + " Failed to parse permission"); } - }*/ + } return roleList; } diff --git a/vid-app-common/src/main/java/org/onap/vid/services/AaiService.java b/vid-app-common/src/main/java/org/onap/vid/services/AaiService.java index f3e0bfdab..d2ee32cbc 100644 --- a/vid-app-common/src/main/java/org/onap/vid/services/AaiService.java +++ b/vid-app-common/src/main/java/org/onap/vid/services/AaiService.java @@ -1,5 +1,27 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2018 Nokia. 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.vid.services; +import io.joshworks.restclient.http.HttpResponse; import org.onap.vid.aai.AaiResponse; import org.onap.vid.aai.AaiResponseTranslator; import org.onap.vid.aai.SubscriberFilteredResults; @@ -28,7 +50,7 @@ public interface AaiService { AaiResponse getServiceInstanceSearchResults(String subscriberId, String instanceIdentifier, RoleValidator roleProvider, List<String> owningEntities, List<String> projects); - AaiResponse<SubscriberList> getFullSubscriberList(); + HttpResponse<SubscriberList> getFullSubscriberList(); AaiResponse getServices(RoleValidator roleValidator); diff --git a/vid-app-common/src/main/java/org/onap/vid/services/AaiServiceImpl.java b/vid-app-common/src/main/java/org/onap/vid/services/AaiServiceImpl.java index 4de2cc740..acdf0afb5 100644 --- a/vid-app-common/src/main/java/org/onap/vid/services/AaiServiceImpl.java +++ b/vid-app-common/src/main/java/org/onap/vid/services/AaiServiceImpl.java @@ -1,5 +1,27 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2018 Nokia. 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.vid.services; +import io.joshworks.restclient.http.HttpResponse; import org.apache.http.HttpStatus; import org.codehaus.jackson.JsonNode; import org.onap.vid.aai.*; @@ -30,6 +52,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Qualifier; /** * Created by Oren on 7/4/17. @@ -45,6 +68,10 @@ public class AaiServiceImpl implements AaiService { private AaiClientInterface aaiClient; @Autowired + @Qualifier("aaiClientForCodehausMapping") + private AaiOverTLSClientInterface aaiOverTLSClient; + + @Autowired private AaiResponseTranslator aaiResponseTranslator; private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(AaiServiceImpl.class); @@ -162,11 +189,13 @@ public class AaiServiceImpl implements AaiService { @Override public SubscriberFilteredResults getFullSubscriberList(RoleValidator roleValidator) { - AaiResponse<SubscriberList> subscriberResponse = aaiClient.getAllSubscribers(); - - return new SubscriberFilteredResults(roleValidator, subscriberResponse.getT(), - subscriberResponse.getErrorMessage(), - subscriberResponse.getHttpCode()); + HttpResponse<SubscriberList> allSubscribers = aaiOverTLSClient.getAllSubscribers(); + return new SubscriberFilteredResults( + roleValidator, + allSubscribers.getBody(), + allSubscribers.getStatusText(), + allSubscribers.getStatus() + ); } @Override @@ -175,8 +204,8 @@ public class AaiServiceImpl implements AaiService { } @Override - public AaiResponse<SubscriberList> getFullSubscriberList() { - return aaiClient.getAllSubscribers(); + public HttpResponse<SubscriberList> getFullSubscriberList() { + return aaiOverTLSClient.getAllSubscribers(); } @Override @@ -206,8 +235,7 @@ public class AaiServiceImpl implements AaiService { resultList.add(getServicesByProjectNames(projects, roleValidator)); } if (!resultList.isEmpty()) { - Intersection<ServiceInstanceSearchResult> intersection = new Intersection<>(); - serviceInstancesSearchResults.serviceInstances = intersection.intersectMultipileArray(resultList); + serviceInstancesSearchResults.serviceInstances = Intersection.of(resultList); } return new AaiResponse<>(serviceInstancesSearchResults, null, HttpStatus.SC_OK); diff --git a/vid-app-common/src/main/java/org/onap/vid/services/AsyncInstantiationBusinessLogicImpl.java b/vid-app-common/src/main/java/org/onap/vid/services/AsyncInstantiationBusinessLogicImpl.java index 7259301a8..df8e92d66 100644 --- a/vid-app-common/src/main/java/org/onap/vid/services/AsyncInstantiationBusinessLogicImpl.java +++ b/vid-app-common/src/main/java/org/onap/vid/services/AsyncInstantiationBusinessLogicImpl.java @@ -1,10 +1,35 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2018 Nokia. 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.vid.services; import com.google.common.collect.ImmutableMap; +import io.joshworks.restclient.http.HttpResponse; +import java.io.IOException; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.hibernate.SessionFactory; import org.onap.vid.aai.AaiClientInterface; +import org.onap.vid.aai.AaiOverTLSClientInterface; import org.onap.vid.aai.AaiResponse; import org.onap.vid.aai.exceptions.InvalidAAIResponseException; import org.onap.vid.aai.model.AaiNodeQueryResponse; @@ -35,6 +60,7 @@ import org.onap.vid.utils.DaoUtils; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.onap.portalsdk.core.service.DataAccessService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import java.sql.Timestamp; @@ -50,7 +76,7 @@ public class AsyncInstantiationBusinessLogicImpl implements AsyncInstantiationBu private static final int MAX_RETRIES_GETTING_COUNTER = 100; private static final int MAX_RETRIES_GETTING_FREE_NAME_FROM_AAI = 10000; - public static final String NAME_FOR_CHECK_AAI_STATUS = "NAME_FOR_CHECK_AAI_STATUS"; + private static final String NAME_FOR_CHECK_AAI_STATUS = "NAME_FOR_CHECK_AAI_STATUS"; private final DataAccessService dataAccessService; @@ -60,60 +86,62 @@ public class AsyncInstantiationBusinessLogicImpl implements AsyncInstantiationBu private SessionFactory sessionFactory; - private AaiClientInterface aaiClient; + private AaiOverTLSClientInterface aaiOverTLSClient; private int maxRetriesGettingFreeNameFromAai = MAX_RETRIES_GETTING_FREE_NAME_FROM_AAI; - private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AsyncInstantiationBusinessLogicImpl.class); + private static final EELFLoggerDelegate logger = EELFLoggerDelegate + .getLogger(AsyncInstantiationBusinessLogicImpl.class); private Map<String, JobStatus> msoStateToJobStatusMap = ImmutableMap.<String, JobStatus>builder() - .put("inprogress", JobStatus.IN_PROGRESS) - .put("failed", JobStatus.FAILED) - .put("pause", JobStatus.PAUSE) - .put("paused", JobStatus.PAUSE) - .put("complete", JobStatus.COMPLETED) - .put("pending", JobStatus.IN_PROGRESS) - .put("pendingmanualtask", JobStatus.PAUSE) - .put("unlocked", JobStatus.IN_PROGRESS) - .build(); + .put("inprogress", JobStatus.IN_PROGRESS) + .put("failed", JobStatus.FAILED) + .put("pause", JobStatus.PAUSE) + .put("paused", JobStatus.PAUSE) + .put("complete", JobStatus.COMPLETED) + .put("pending", JobStatus.IN_PROGRESS) + .put("pendingmanualtask", JobStatus.PAUSE) + .put("unlocked", JobStatus.IN_PROGRESS) + .build(); @Autowired public AsyncInstantiationBusinessLogicImpl(DataAccessService dataAccessService, - JobAdapter jobAdapter, - JobsBrokerService jobService, - SessionFactory sessionFactory, - AaiClientInterface aaiClient) { + JobAdapter jobAdapter, + JobsBrokerService jobService, + SessionFactory sessionFactory, + @Qualifier("aaiClientForFasterXmlMapping") AaiOverTLSClientInterface aaiOverTLSClient) { this.dataAccessService = dataAccessService; this.jobAdapter = jobAdapter; this.jobService = jobService; this.sessionFactory = sessionFactory; - this.aaiClient = aaiClient; + this.aaiOverTLSClient = aaiOverTLSClient; } @Override public List<ServiceInfo> getAllServicesInfo() { - return dataAccessService.getList(ServiceInfo.class, filterByCreationDateAndNotDeleted(), orderByCreatedDateAndStatus(), null); + return dataAccessService + .getList(ServiceInfo.class, filterByCreationDateAndNotDeleted(), orderByCreatedDateAndStatus(), null); } private String filterByCreationDateAndNotDeleted() { LocalDateTime minus3Months = LocalDateTime.now().minusMonths(3); Timestamp filterDate = Timestamp.valueOf(minus3Months); return " where" + - " hidden = false" + - " and deleted_at is null" + // don't fetch deleted - " and created >= '" + filterDate + "' "; + " hidden = false" + + " and deleted_at is null" + // don't fetch deleted + " and created >= '" + filterDate + "' "; } private String orderByCreatedDateAndStatus() { return " createdBulkDate DESC ,\n" + - " (CASE jobStatus\n" + - " WHEN 'COMPLETED' THEN 0\n" + - " WHEN 'FAILED' THEN 0\n" + - " WHEN 'IN_PROGRESS' THEN 1\n" + - " WHEN 'PAUSE' THEN 2\n" + - " WHEN 'PENDING' THEN 3\n" + - " WHEN 'STOPPED' THEN 3 END),\n" + - " statusModifiedDate "; + " (CASE jobStatus\n" + + " WHEN 'COMPLETED' THEN 0\n" + + " WHEN 'FAILED' THEN 0\n" + + " WHEN 'IN_PROGRESS' THEN 1\n" + + " WHEN 'PAUSE' THEN 2\n" + + " WHEN 'PENDING' THEN 3\n" + + " WHEN 'STOPPED' THEN 3 END),\n" + + " statusModifiedDate "; } @Override @@ -125,77 +153,87 @@ public class AsyncInstantiationBusinessLogicImpl implements AsyncInstantiationBu for (int i = 0; i < bulkSize; i++) { Job job = jobAdapter.createJob(JobType.ServiceInstantiation, request, templateId, userId, i); UUID jobId = jobService.add(job); - auditVidStatus(jobId,job.getStatus()); + auditVidStatus(jobId, job.getStatus()); uuids.add(jobId); - dataAccessService.saveDomainObject(createServiceInfo(userId, request, jobId, templateId, createdBulkDate), DaoUtils.getPropsMap()); + dataAccessService.saveDomainObject(createServiceInfo(userId, request, jobId, templateId, createdBulkDate), + DaoUtils.getPropsMap()); } return uuids; } - private ServiceInfo createServiceInfo(String userId, ServiceInstantiation serviceInstantiation, UUID jobId, UUID templateId, Date createdBulkDate) { + private ServiceInfo createServiceInfo(String userId, ServiceInstantiation serviceInstantiation, UUID jobId, + UUID templateId, Date createdBulkDate) { return new ServiceInfo( - userId, Job.JobStatus.PENDING, serviceInstantiation.isPause(), jobId, templateId, - serviceInstantiation.getOwningEntityId(), - serviceInstantiation.getOwningEntityName(), - serviceInstantiation.getProjectName(), - serviceInstantiation.getAicZoneId(), - serviceInstantiation.getAicZoneName(), - serviceInstantiation.getTenantId(), - serviceInstantiation.getTenantName(), - serviceInstantiation.getLcpCloudRegionId(), - null, - serviceInstantiation.getSubscriptionServiceType(), - serviceInstantiation.getSubscriberName(), - null, - serviceInstantiation.getInstanceName(), - serviceInstantiation.getModelInfo().getModelInvariantId(), - serviceInstantiation.getModelInfo().getModelName(), - serviceInstantiation.getModelInfo().getModelVersion(), - createdBulkDate + userId, Job.JobStatus.PENDING, serviceInstantiation.isPause(), jobId, templateId, + serviceInstantiation.getOwningEntityId(), + serviceInstantiation.getOwningEntityName(), + serviceInstantiation.getProjectName(), + serviceInstantiation.getAicZoneId(), + serviceInstantiation.getAicZoneName(), + serviceInstantiation.getTenantId(), + serviceInstantiation.getTenantName(), + serviceInstantiation.getLcpCloudRegionId(), + null, + serviceInstantiation.getSubscriptionServiceType(), + serviceInstantiation.getSubscriberName(), + null, + serviceInstantiation.getInstanceName(), + serviceInstantiation.getModelInfo().getModelInvariantId(), + serviceInstantiation.getModelInfo().getModelName(), + serviceInstantiation.getModelInfo().getModelVersion(), + createdBulkDate ); } @Override - public RequestDetailsWrapper<ServiceInstantiationRequestDetails> generateServiceInstantiationRequest(UUID jobId, ServiceInstantiation payload, String userId) { + public RequestDetailsWrapper<ServiceInstantiationRequestDetails> generateServiceInstantiationRequest(UUID jobId, + ServiceInstantiation payload, String userId) { - ServiceInstantiationRequestDetails.ServiceInstantiationOwningEntity owningEntity = new ServiceInstantiationRequestDetails.ServiceInstantiationOwningEntity(payload.getOwningEntityId(), payload.getOwningEntityName()); + ServiceInstantiationRequestDetails.ServiceInstantiationOwningEntity owningEntity = new ServiceInstantiationRequestDetails.ServiceInstantiationOwningEntity( + payload.getOwningEntityId(), payload.getOwningEntityName()); SubscriberInfo subscriberInfo = new SubscriberInfo(); subscriberInfo.setGlobalSubscriberId(payload.getGlobalSubscriberId()); String serviceInstanceName = null; - if(payload.isUserProvidedNaming()) { + if (payload.isUserProvidedNaming()) { serviceInstanceName = getUniqueName(payload.getInstanceName(), ResourceType.SERVICE_INSTANCE); String finalServiceInstanceName = serviceInstanceName; updateServiceInfo(jobId, x -> x.setServiceInstanceName(finalServiceInstanceName)); } ServiceInstantiationRequestDetails.RequestInfo requestInfo = new ServiceInstantiationRequestDetails.RequestInfo( - serviceInstanceName, - payload.getProductFamilyId(), - "VID", - payload.isRollbackOnFailure(), - userId); + serviceInstanceName, + payload.getProductFamilyId(), + "VID", + payload.isRollbackOnFailure(), + userId); List<ServiceInstantiationRequestDetails.ServiceInstantiationService> serviceInstantiationService = new LinkedList<>(); - List<Map<String, String>> unFilteredInstanceParams = payload.getInstanceParams() != null ? payload.getInstanceParams() : new LinkedList<>(); + List<Map<String, String>> unFilteredInstanceParams = + payload.getInstanceParams() != null ? payload.getInstanceParams() : new LinkedList<>(); List<Map<String, String>> filteredInstanceParams = removeUnNeededParams(unFilteredInstanceParams); ServiceInstantiationRequestDetails.ServiceInstantiationService serviceInstantiationService1 = new ServiceInstantiationRequestDetails.ServiceInstantiationService( - payload.getModelInfo(), - serviceInstanceName, - filteredInstanceParams, - createServiceInstantiationVnfList(payload) + payload.getModelInfo(), + serviceInstanceName, + filteredInstanceParams, + createServiceInstantiationVnfList(payload) ); serviceInstantiationService.add(serviceInstantiationService1); - ServiceInstantiationRequestDetails.RequestParameters requestParameters = new ServiceInstantiationRequestDetails.RequestParameters(payload.getSubscriptionServiceType(), false, serviceInstantiationService); + ServiceInstantiationRequestDetails.RequestParameters requestParameters = new ServiceInstantiationRequestDetails.RequestParameters( + payload.getSubscriptionServiceType(), false, serviceInstantiationService); - ServiceInstantiationRequestDetails.Project project = payload.getProjectName() != null ? new ServiceInstantiationRequestDetails.Project(payload.getProjectName()) : null; + ServiceInstantiationRequestDetails.Project project = + payload.getProjectName() != null ? new ServiceInstantiationRequestDetails.Project(payload.getProjectName()) + : null; - ServiceInstantiationRequestDetails requestDetails = new ServiceInstantiationRequestDetails(payload.getModelInfo(), owningEntity, subscriberInfo, - project, requestInfo, requestParameters); + ServiceInstantiationRequestDetails requestDetails = new ServiceInstantiationRequestDetails( + payload.getModelInfo(), owningEntity, subscriberInfo, + project, requestInfo, requestParameters); - RequestDetailsWrapper<ServiceInstantiationRequestDetails> requestDetailsWrapper = new RequestDetailsWrapper(requestDetails); + RequestDetailsWrapper<ServiceInstantiationRequestDetails> requestDetailsWrapper = new RequestDetailsWrapper( + requestDetails); debugRequestDetails(requestDetailsWrapper, logger); return requestDetailsWrapper; } @@ -204,10 +242,11 @@ public class AsyncInstantiationBusinessLogicImpl implements AsyncInstantiationBu List<String> keysToRemove = new ArrayList<>(); if (instanceParams != null && !instanceParams.isEmpty()) { for (String key : instanceParams.get(0).keySet()) { - for (String paramToIgnore : PARAMS_TO_IGNORE) + for (String paramToIgnore : PARAMS_TO_IGNORE) { if ((key.equalsIgnoreCase(paramToIgnore))) { keysToRemove.add(key); } + } } for (String key : keysToRemove) { instanceParams.get(0).remove(key); @@ -220,7 +259,8 @@ public class AsyncInstantiationBusinessLogicImpl implements AsyncInstantiationBu return instanceParams; } - private ServiceInstantiationRequestDetails.ServiceInstantiationVnfList createServiceInstantiationVnfList(ServiceInstantiation payload) { + private ServiceInstantiationRequestDetails.ServiceInstantiationVnfList createServiceInstantiationVnfList( + ServiceInstantiation payload) { CloudConfiguration cloudConfiguration = new CloudConfiguration(); cloudConfiguration.setTenantId(payload.getTenantId()); cloudConfiguration.setLcpCloudRegionId(payload.getLcpCloudRegionId()); @@ -230,16 +270,17 @@ public class AsyncInstantiationBusinessLogicImpl implements AsyncInstantiationBu for (Vnf vnf : vnfs.values()) { Map<String, Map<String, VfModule>> vfModules = vnf.getVfModules(); List<VfModule> convertedUnFilteredVfModules = convertVfModuleMapToList(vfModules); - List<VfModule> filteredVfModules = filterInstanceParamsFromVfModuleAndUniqueNames(convertedUnFilteredVfModules, vnf.isUserProvidedNaming()); + List<VfModule> filteredVfModules = filterInstanceParamsFromVfModuleAndUniqueNames( + convertedUnFilteredVfModules, vnf.isUserProvidedNaming()); ServiceInstantiationRequestDetails.ServiceInstantiationVnf serviceInstantiationVnf = new ServiceInstantiationRequestDetails.ServiceInstantiationVnf( - vnf.getModelInfo(), - cloudConfiguration, - vnf.getPlatformName(), - vnf.getLineOfBusiness(), - payload.getProductFamilyId(), - removeUnNeededParams(vnf.getInstanceParams()), - filteredVfModules, - vnf.isUserProvidedNaming() ? getUniqueName(vnf.getInstanceName(), ResourceType.GENERIC_VNF) : null + vnf.getModelInfo(), + cloudConfiguration, + vnf.getPlatformName(), + vnf.getLineOfBusiness(), + payload.getProductFamilyId(), + removeUnNeededParams(vnf.getInstanceParams()), + filteredVfModules, + vnf.isUserProvidedNaming() ? getUniqueName(vnf.getInstanceName(), ResourceType.GENERIC_VNF) : null ); vnfList.add(serviceInstantiationVnf); } @@ -251,27 +292,29 @@ public class AsyncInstantiationBusinessLogicImpl implements AsyncInstantiationBu return vfModules.values().stream().flatMap(vfModule -> vfModule.values().stream()).collect(Collectors.toList()); } - private List<VfModule> filterInstanceParamsFromVfModuleAndUniqueNames(List<VfModule> unFilteredVfModules, boolean isUserProvidedNaming) { + private List<VfModule> filterInstanceParamsFromVfModuleAndUniqueNames(List<VfModule> unFilteredVfModules, + boolean isUserProvidedNaming) { return unFilteredVfModules.stream().map(vfModule -> - new VfModule( - vfModule.getModelInfo(), - getUniqueNameIfNeeded(isUserProvidedNaming, vfModule.getInstanceName(), ResourceType.VF_MODULE), - getUniqueNameIfNeeded(isUserProvidedNaming, vfModule.getVolumeGroupInstanceName(), ResourceType.VOLUME_GROUP), - removeUnNeededParams(vfModule.getInstanceParams()))) - .collect(Collectors.toList()); + new VfModule( + vfModule.getModelInfo(), + getUniqueNameIfNeeded(isUserProvidedNaming, vfModule.getInstanceName(), ResourceType.VF_MODULE), + getUniqueNameIfNeeded(isUserProvidedNaming, vfModule.getVolumeGroupInstanceName(), + ResourceType.VOLUME_GROUP), + removeUnNeededParams(vfModule.getInstanceParams()))) + .collect(Collectors.toList()); } private String getUniqueNameIfNeeded(boolean isUserProvidedNaming, String name, ResourceType resourceType) { return isUserProvidedNaming && !StringUtils.isEmpty(name) ? - getUniqueName(name, resourceType) : null; + getUniqueName(name, resourceType) : null; } @Override public String getServiceInstantiationPath(ServiceInstantiation serviceInstantiationRequest) { //in case pause flag is true - use assign , else - use create. return MsoBusinessLogicImpl.validateEndpointPath( - serviceInstantiationRequest.isPause() ? - "mso.restapi.serviceInstanceAssign" : "mso.restapi.serviceInstanceCreate" + serviceInstantiationRequest.isPause() ? + "mso.restapi.serviceInstanceAssign" : "mso.restapi.serviceInstanceCreate" ); } @@ -290,7 +333,7 @@ public class AsyncInstantiationBusinessLogicImpl implements AsyncInstantiationBu @Override public ServiceInfo updateServiceInfoAndAuditStatus(UUID jobUuid, JobStatus jobStatus) { - auditVidStatus(jobUuid,jobStatus); + auditVidStatus(jobUuid, jobStatus); return updateServiceInfo(jobUuid, x -> setServiceInfoStatus(x, jobStatus)); } @@ -300,9 +343,12 @@ public class AsyncInstantiationBusinessLogicImpl implements AsyncInstantiationBu } public ServiceInfo getServiceInfoByJobId(UUID jobUUID) { - List<ServiceInfo> serviceInfoList = dataAccessService.getList(ServiceInfo.class, String.format(" where jobId = '%s' ", jobUUID), null, null); + List<ServiceInfo> serviceInfoList = dataAccessService + .getList(ServiceInfo.class, String.format(" where jobId = '%s' ", jobUUID), null, null); if (serviceInfoList.size() != 1) { - throw new GenericUncheckedException("Failed to retrieve job with uuid " + jobUUID + " from ServiceInfo table. Instances found: " + serviceInfoList.size()); + throw new GenericUncheckedException( + "Failed to retrieve job with uuid " + jobUUID + " from ServiceInfo table. Instances found: " + + serviceInfoList.size()); } return serviceInfoList.get(0); } @@ -310,43 +356,46 @@ public class AsyncInstantiationBusinessLogicImpl implements AsyncInstantiationBu public List<JobAuditStatus> getAuditStatuses(UUID jobUUID, JobAuditStatus.SourceStatus source) { return dataAccessService.getList( JobAuditStatus.class, - String.format(" where SOURCE = '%s' and JOB_ID = '%s'",source, jobUUID), + String.format(" where SOURCE = '%s' and JOB_ID = '%s'", source, jobUUID), " CREATED_DATE ", null); } - private JobAuditStatus getLatestAuditStatus(UUID jobUUID, JobAuditStatus.SourceStatus source){ - List<JobAuditStatus> list = getAuditStatuses(jobUUID,source); - return !list.isEmpty() ? list.get(list.size()-1) : null; + private JobAuditStatus getLatestAuditStatus(UUID jobUUID, JobAuditStatus.SourceStatus source) { + List<JobAuditStatus> list = getAuditStatuses(jobUUID, source); + return !list.isEmpty() ? list.get(list.size() - 1) : null; } @Override - public void auditVidStatus(UUID jobUUID, JobStatus jobStatus){ + public void auditVidStatus(UUID jobUUID, JobStatus jobStatus) { JobAuditStatus vidStatus = new JobAuditStatus(jobUUID, jobStatus.toString(), JobAuditStatus.SourceStatus.VID); auditStatus(vidStatus); } @Override - public void auditMsoStatus(UUID jobUUID, AsyncRequestStatus.Request msoRequestStatus){ - auditMsoStatus(jobUUID, msoRequestStatus.requestStatus.getRequestState(), msoRequestStatus.requestId, msoRequestStatus.requestStatus.getStatusMessage()); + public void auditMsoStatus(UUID jobUUID, AsyncRequestStatus.Request msoRequestStatus) { + auditMsoStatus(jobUUID, msoRequestStatus.requestStatus.getRequestState(), msoRequestStatus.requestId, + msoRequestStatus.requestStatus.getStatusMessage()); } @Override - public void auditMsoStatus(UUID jobUUID, String jobStatus, String requestId, String additionalInfo){ + public void auditMsoStatus(UUID jobUUID, String jobStatus, String requestId, String additionalInfo) { JobAuditStatus msoStatus = new JobAuditStatus(jobUUID, jobStatus, JobAuditStatus.SourceStatus.MSO, - requestId != null ? UUID.fromString(requestId) : null, - additionalInfo); + requestId != null ? UUID.fromString(requestId) : null, + additionalInfo); auditStatus(msoStatus); } - private void auditStatus(JobAuditStatus jobAuditStatus){ - JobAuditStatus latestStatus = getLatestAuditStatus(jobAuditStatus.getJobId(),jobAuditStatus.getSource()); - if (latestStatus == null || !latestStatus.equals(jobAuditStatus)) + private void auditStatus(JobAuditStatus jobAuditStatus) { + JobAuditStatus latestStatus = getLatestAuditStatus(jobAuditStatus.getJobId(), jobAuditStatus.getSource()); + if (latestStatus == null || !latestStatus.equals(jobAuditStatus)) { dataAccessService.saveDomainObject(jobAuditStatus, DaoUtils.getPropsMap()); + } } public Job.JobStatus calcStatus(AsyncRequestStatus asyncRequestStatus) { - String msoRequestState = asyncRequestStatus.request.requestStatus.getRequestState().toLowerCase().replaceAll("[^a-z]+", ""); + String msoRequestState = asyncRequestStatus.request.requestStatus.getRequestState().toLowerCase() + .replaceAll("[^a-z]+", ""); JobStatus jobStatus = msoStateToJobStatusMap.get(msoRequestState); return (jobStatus != null ? jobStatus : JobStatus.IN_PROGRESS); } @@ -355,11 +404,11 @@ public class AsyncInstantiationBusinessLogicImpl implements AsyncInstantiationBu public void handleFailedInstantiation(UUID jobUUID) { ServiceInfo serviceInfo = updateServiceInfoAndAuditStatus(jobUUID, JobStatus.FAILED); List<ServiceInfo> serviceInfoList = dataAccessService.getList( - ServiceInfo.class, - String.format(" where templateId = '%s' and jobStatus = '%s'", - serviceInfo.getTemplateId(), - JobStatus.PENDING), - null, null); + ServiceInfo.class, + String.format(" where templateId = '%s' and jobStatus = '%s'", + serviceInfo.getTemplateId(), + JobStatus.PENDING), + null, null); serviceInfoList.forEach(si -> updateServiceInfoAndAuditStatus(si.getJobId(), JobStatus.STOPPED)); } @@ -374,9 +423,9 @@ public class AsyncInstantiationBusinessLogicImpl implements AsyncInstantiationBu public void hideServiceInfo(UUID jobUUID) { ServiceInfo serviceInfo = getServiceInfoByJobId(jobUUID); if (!serviceInfo.getJobStatus().isFinal()) { - String message = String.format( "jobId %s: Service status does not allow hide service, status = %s", - serviceInfo.getJobId(), - serviceInfo.getJobStatus()); + String message = String.format("jobId %s: Service status does not allow hide service, status = %s", + serviceInfo.getJobId(), + serviceInfo.getJobStatus()); logger.error(EELFLoggerDelegate.errorLogger, message); throw new OperationNotAllowedException(message); } @@ -387,31 +436,29 @@ public class AsyncInstantiationBusinessLogicImpl implements AsyncInstantiationBu @Override public int - getCounterForName(String name) { String hqlSelectNC = "from NameCounter where name = :name"; String hqlUpdateCounter = "update NameCounter set counter = :newCounter " + - "where name= :name " + - "and counter= :prevCounter"; + "where name= :name " + + "and counter= :prevCounter"; Integer counter = null; GenericUncheckedException lastException = null; - for (int i = 0; i< MAX_RETRIES_GETTING_COUNTER && counter==null; i++) { + for (int i = 0; i < MAX_RETRIES_GETTING_COUNTER && counter == null; i++) { try { counter = calcCounter(name, hqlSelectNC, hqlUpdateCounter); - } - catch (GenericUncheckedException exception) { + } catch (GenericUncheckedException exception) { lastException = exception; //do nothing, we will try again in the loop } } - if (counter!=null) { + if (counter != null) { return counter; } - throw lastException!=null ? new DbFailureUncheckedException(lastException) : - new DbFailureUncheckedException("Failed to get counter for "+name+" due to unknown error"); + throw lastException != null ? new DbFailureUncheckedException(lastException) : + new DbFailureUncheckedException("Failed to get counter for " + name + " due to unknown error"); } @@ -419,14 +466,14 @@ public class AsyncInstantiationBusinessLogicImpl implements AsyncInstantiationBu Integer counter; counter = DaoUtils.tryWithSessionAndTransaction(sessionFactory, session -> { NameCounter nameCounter = (NameCounter) session.createQuery(hqlSelectNC) - .setText("name", name) - .uniqueResult(); + .setText("name", name) + .uniqueResult(); if (nameCounter != null) { int updatedRows = session.createQuery(hqlUpdateCounter) - .setText("name", nameCounter.getName()) - .setInteger("prevCounter", nameCounter.getCounter()) - .setInteger("newCounter", nameCounter.getCounter() + 1) - .executeUpdate(); + .setText("name", nameCounter.getName()) + .setInteger("prevCounter", nameCounter.getCounter()) + .setInteger("newCounter", nameCounter.getCounter() + 1) + .executeUpdate(); if (updatedRows == 1) { return nameCounter.getCounter() + 1; } @@ -459,7 +506,7 @@ public class AsyncInstantiationBusinessLogicImpl implements AsyncInstantiationBu //Prevents unnecessary increasing of the counter while AAI doesn't response isNameFreeInAai(NAME_FOR_CHECK_AAI_STATUS, resourceType); - for (int i=0; i<getMaxRetriesGettingFreeNameFromAai(); i++) { + for (int i = 0; i < getMaxRetriesGettingFreeNameFromAai(); i++) { int counter = getCounterForName(name); String newName = formatNameAndCounter(name, counter); if (isNameFreeInAai(newName, resourceType)) { @@ -467,7 +514,7 @@ public class AsyncInstantiationBusinessLogicImpl implements AsyncInstantiationBu } } - throw new MaxRetriesException("find unused name for "+name, getMaxRetriesGettingFreeNameFromAai()); + throw new MaxRetriesException("find unused name for " + name, getMaxRetriesGettingFreeNameFromAai()); } //the method is protected so we can call it in the UT @@ -476,11 +523,17 @@ public class AsyncInstantiationBusinessLogicImpl implements AsyncInstantiationBu } private boolean isNameFreeInAai(String name, ResourceType resourceType) throws InvalidAAIResponseException { - AaiResponse<AaiNodeQueryResponse> aaiResponse = aaiClient.searchNodeTypeByName(name, resourceType); - if (aaiResponse.getHttpCode() > 399 || aaiResponse.getT() == null) { - throw new InvalidAAIResponseException(aaiResponse); + HttpResponse<AaiNodeQueryResponse> aaiResponse = aaiOverTLSClient + .searchNodeTypeByName(name, resourceType); + if (aaiResponse.getStatus() > 399 || aaiResponse.getBody() == null) { + try { + String message = IOUtils.toString(aaiResponse.getRawBody(), "UTF-8"); + throw new InvalidAAIResponseException(aaiResponse.getStatus(), message); + } catch (IOException e) { + throw new InvalidAAIResponseException(aaiResponse.getStatus(), aaiResponse.getStatusText()); + } } - return CollectionUtils.isEmpty(aaiResponse.getT().resultData); + return CollectionUtils.isEmpty(aaiResponse.getBody().resultData); } } diff --git a/vid-app-common/src/main/java/org/onap/vid/services/RoleGenaratorServiceImpl.java b/vid-app-common/src/main/java/org/onap/vid/services/RoleGenaratorServiceImpl.java index 635cb4855..500f5ac7f 100644 --- a/vid-app-common/src/main/java/org/onap/vid/services/RoleGenaratorServiceImpl.java +++ b/vid-app-common/src/main/java/org/onap/vid/services/RoleGenaratorServiceImpl.java @@ -1,7 +1,30 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2018 Nokia. 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.vid.services; +import io.joshworks.restclient.http.HttpResponse; import jline.internal.Log; import org.onap.vid.aai.AaiClientInterface; +import org.onap.vid.aai.AaiOverTLSClientInterface; import org.onap.vid.aai.AaiResponse; import org.onap.vid.aai.ServiceSubscription; import org.onap.vid.aai.Services; @@ -9,6 +32,7 @@ import org.onap.vid.model.ModelConstants; import org.onap.vid.model.Subscriber; import org.onap.vid.model.SubscriberList; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import java.util.HashMap; @@ -17,9 +41,14 @@ import java.util.HashMap; public class RoleGenaratorServiceImpl implements RoleGeneratorService { public static final String ROLE_ID_COLUMN = "ROLE_ID"; + @Autowired AaiClientInterface client; + @Autowired + @Qualifier("aaiClientForCodehausMapping") + AaiOverTLSClientInterface aaiOverTLSClient; + public static final String DB_NAME = "vid_portal"; public static final String TBL_NAME = "fn_role"; public static final String TEMP_DELIMITER ="***"; @@ -30,11 +59,11 @@ public class RoleGenaratorServiceImpl implements RoleGeneratorService { String query = "USE " + DB_NAME + ";\r\n" + "SET SQL_SAFE_UPDATES = 0;\r\n"; try { - AaiResponse<SubscriberList> subscribers = client.getAllSubscribers(); + HttpResponse<SubscriberList> allSubscribers = aaiOverTLSClient.getAllSubscribers(); if (firstRun) { - query += replaceRolesToTempDelimiter("subscriber",buildSubscribersValuesForMappingsTable(subscribers.getT())); + query += replaceRolesToTempDelimiter("subscriber",buildSubscribersValuesForMappingsTable(allSubscribers.getBody())); } - query += addAvailableRolesCombination(firstRun, subscribers); + query += addAvailableRolesCombination(firstRun, allSubscribers.getBody()); } catch (Exception e) { @@ -43,10 +72,10 @@ public class RoleGenaratorServiceImpl implements RoleGeneratorService { return query; } - private String addAvailableRolesCombination(Boolean firstRun, AaiResponse<SubscriberList> subscribers) { + private String addAvailableRolesCombination(Boolean firstRun, SubscriberList subscribers) { String query, availableRoles=""; HashMap<String,String> servicesNames = new HashMap<String,String>(); - for (Subscriber subscriber: subscribers.getT().customer) { + for (Subscriber subscriber: subscribers.customer) { AaiResponse<Services> subscriberResponse = client.getSubscriberData(subscriber.globalCustomerId); for(ServiceSubscription service: subscriberResponse.getT().serviceSubscriptions.serviceSubscription) { servicesNames.put(service.serviceType,""); diff --git a/vid-app-common/src/main/java/org/onap/vid/utils/Intersection.java b/vid-app-common/src/main/java/org/onap/vid/utils/Intersection.java index 6e0d1fc25..ed1be5c76 100644 --- a/vid-app-common/src/main/java/org/onap/vid/utils/Intersection.java +++ b/vid-app-common/src/main/java/org/onap/vid/utils/Intersection.java @@ -1,31 +1,48 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2018 Nokia. 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.vid.utils; -import java.util.List; -import java.util.stream.Collectors; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; -/** - * Created by moriya1 on 10/10/2017. - */ -public class Intersection<T> { - public List<T> intersectMultipileArray(List<List<T>> lists) { - if (lists.size() == 1) { - return lists.get(0); - } else { - List<T> intersectResult = intersectTwoArrays(lists.get(0),lists.get(1)); +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Set; - lists.remove(0); - lists.remove(0); - lists.add(0,intersectResult); - return intersectMultipileArray(lists); - } +public class Intersection { + private Intersection() { } - public List<T> intersectTwoArrays(List<T> list1, List<T> list2) { - - List<T> intersect = list1.stream() - .filter(list2::contains) - .collect(Collectors.toList()); - return intersect; + /** + * Returns intersection of given lists. Treats those lists as sets, ignores repetitions. + */ + public static <T> List<T> of(Collection<List<T>> lists) { + return lists + .stream() + .map(elements -> (Set<T>) Sets.newHashSet(elements)) + .reduce(Sets::intersection) + .map(set -> (List<T>) Lists.newArrayList(set)) + .orElse(Collections.emptyList()); } } diff --git a/vid-app-common/src/main/resources/1712_ADIOD.zip b/vid-app-common/src/main/resources/1712_ADIOD.zip Binary files differnew file mode 100644 index 000000000..281ee8aa3 --- /dev/null +++ b/vid-app-common/src/main/resources/1712_ADIOD.zip diff --git a/vid-app-common/src/main/resources/sdcservices.json b/vid-app-common/src/main/resources/sdcservices.json index 1d9d160e3..e300597e5 100644 --- a/vid-app-common/src/main/resources/sdcservices.json +++ b/vid-app-common/src/main/resources/sdcservices.json @@ -71,6 +71,20 @@ "resources": null }, { + "uuid": "90fe6842-aa76-4b68-8329-5c86ff564407", + "invariantUUID": "0311f998-9268-4fd6-bbba-afff15087b72", + "name": "4-27_vMME_Service", + "version": "1.0", + "toscaModelURL": "./1712_ADIOD.zip", + "category": "Mobility", + "lifecycleState": "CERTIFIED", + "lastUpdaterUserId": "rg276b", + "lastUpdaterFullName": null, + "distributionStatus": "DISTRIBUTED", + "artifacts": null, + "resources": null + }, + { "uuid": "73e1322a-8a9a-49dc-9558-b0c5c5770e4a", "invariantUUID": "f430728a-4530-42be-a577-1206b9484cef", "name": "4-27_vMME_Service", diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js b/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js index 6029ed2d7..c6c9edf6e 100644 --- a/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js +++ b/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js @@ -94,14 +94,14 @@ _.forEach(newVNFName.vfModules, function (mdl, key) { mdl.scale = false; //defaults to not scale unless user changes it - if(mdl.properties && mdl.properties.max_vf_module_instances) { + if(mdl.properties && mdl.properties.maxCountInstances) { //how many vf modules of the same customizationId belong to that vnf instance mdl.currentCount = _.filter(vm.vfModules, function(item){ return modulesAaiIds.indexOf(item.id) > -1 && item.properties["model-customization-id"] === mdl.customizationUuid; }).length; - mdl.scalable = mdl.properties.max_vf_module_instances.value - mdl.currentCount > 0; + mdl.scalable = mdl.properties.maxCountInstances - mdl.currentCount > 0; }else{ mdl.scalable = false; } diff --git a/vid-app-common/src/test/java/org/onap/vid/aai/AaiClientTest.java b/vid-app-common/src/test/java/org/onap/vid/aai/AaiClientTest.java index 43ac2899b..201ec0981 100644 --- a/vid-app-common/src/test/java/org/onap/vid/aai/AaiClientTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/aai/AaiClientTest.java @@ -72,15 +72,12 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; +import static org.apache.commons.lang3.StringUtils.equalsIgnoreCase; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalToIgnoringCase; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.*; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; import static org.testng.Assert.*; @ContextConfiguration(classes = {LocalWebConfig.class, SystemProperties.class}) @@ -114,7 +111,7 @@ public class AaiClientTest { when(aaiClientMock.getLogicalLink(any(String.class))).thenCallRealMethod(); aaiClientMock.getLogicalLink(link); - Mockito.verify(aaiClientMock).doAaiGet(argThat(equalToIgnoringCase(expectedUrl)), any(Boolean.class)); + Mockito.verify(aaiClientMock).doAaiGet(argThat(s -> equalsIgnoreCase(s, expectedUrl)), any(Boolean.class)); } @DataProvider @@ -217,7 +214,7 @@ public class AaiClientTest { @Test public void getTenants_Arguments_Are_Null_Or_Empty() { - when(aaiClientMock.getTenants(any(String.class), any(String.class))).thenCallRealMethod(); + when(aaiClientMock.getTenants(any(), any())).thenCallRealMethod(); AaiResponse response = aaiClientMock.getTenants("", ""); diff --git a/vid-app-common/src/test/java/org/onap/vid/aai/AaiOverTLSClientServerTest.java b/vid-app-common/src/test/java/org/onap/vid/aai/AaiOverTLSClientServerTest.java new file mode 100644 index 000000000..d4f59e7da --- /dev/null +++ b/vid-app-common/src/test/java/org/onap/vid/aai/AaiOverTLSClientServerTest.java @@ -0,0 +1,199 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2018 Nokia 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.vid.aai; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.xebialabs.restito.semantics.Action; +import io.joshworks.restclient.http.HttpResponse; +import io.joshworks.restclient.http.mapper.ObjectMapper; +import org.assertj.core.api.Assertions; +import org.glassfish.grizzly.http.util.HttpStatus; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.onap.vid.aai.model.AaiNodeQueryResponse; +import org.onap.vid.aai.model.ResourceType; +import org.onap.vid.client.SyncRestClient; +import org.onap.vid.model.SubscriberList; +import org.onap.vid.testUtils.StubServerUtil; + +import java.io.IOException; + +@RunWith(MockitoJUnitRunner.class) +public class AaiOverTLSClientServerTest { + + @Mock + private AaiOverTLSPropertySupplier propertySupplier; + + private static StubServerUtil serverUtil; + + private String searchNodesQueryResponsePayload = + "{\n" + + "\"result-data\": [\n" + + " {\n" + + "\"resource-type\": \"generic-vnf\",\n" + + "\"resource-link\": \"/aai/v13/network/generic-vnfs/generic-vnf/6eac8e69-c98d-4ac5-ab90-69fe0cabda76\"\n" + + "},\n" + + " {\n" + + "\"resource-type\": \"generic-vnf\",\n" + + "\"resource-link\": \"/aai/v13/network/generic-vnfs/generic-vnf/e3766bc5-40a7-4dbe-9d4a-1d8c8f284913\"\n" + + "},\n" + + " {\n" + + "\"resource-type\": \"generic-vnf\",\n" + + "\"resource-link\": \"/aai/v13/network/generic-vnfs/generic-vnf/6aa153ee-6637-4b49-beb5-a5e756e00393\"\n" + + "},\n" + + " {\n" + + "\"resource-type\": \"generic-vnf\",\n" + + "\"resource-link\": \"/aai/v13/network/generic-vnfs/generic-vnf/5a981c30-de25-4ea9-98fa-ed398f13ea41\"\n" + + "},\n" + + " {\n" + + "\"resource-type\": \"generic-vnf\",\n" + + "\"resource-link\": \"/aai/v13/network/generic-vnfs/generic-vnf/b0ef2271-8ac0-4268-b9a5-09cb50c20c85\"\n" + + "}\n" + + "],\n" + + "}"; + + private String subscribersResponsePayload = + "{\n" + + "\"customer\": [\n" + + " {\n" + + "\"global-customer-id\": \"DemoCust_752df078-d8e9-4731-abf6-8ae7348075bb\",\n" + + "\"subscriber-name\": \"DemoCust_752df078-d8e9-4731-abf6-8ae7348075bb\",\n" + + "\"subscriber-type\": \"INFRA\",\n" + + "\"resource-version\": \"1536158347585\"\n" + + "},\n" + + " {\n" + + "\"global-customer-id\": \"DemoCust_62bf43a3-4888-4c82-ae98-3ebc3d782761\",\n" + + "\"subscriber-name\": \"DemoCust_62bf43a3-4888-4c82-ae98-3ebc3d782761\",\n" + + "\"subscriber-type\": \"INFRA\",\n" + + "\"resource-version\": \"1536240894581\"\n" + + "},\n" + + " {\n" + + "\"global-customer-id\": \"DemoCust_e84256d6-ef3e-4a28-9741-9987019c3a8f\",\n" + + "\"subscriber-name\": \"DemoCust_e84256d6-ef3e-4a28-9741-9987019c3a8f\",\n" + + "\"subscriber-type\": \"INFRA\",\n" + + "\"resource-version\": \"1536330956393\"\n" + + "},\n" + + " {\n" + + "\"global-customer-id\": \"ETE_Customer_377bb124-2638-4025-a315-cdae04f52bce\",\n" + + "\"subscriber-name\": \"ETE_Customer_377bb124-2638-4025-a315-cdae04f52bce\",\n" + + "\"subscriber-type\": \"INFRA\",\n" + + "\"resource-version\": \"1536088625538\"\n" + + "}\n" + + "],\n" + + "}"; + + @BeforeClass + public static void setUpClass(){ + serverUtil = new StubServerUtil(); + serverUtil.runServer(); + } + + @AfterClass + public static void tearDown(){ + serverUtil.stopServer(); + } + + @Test + public void shouldSearchNodeTypeByName() throws IOException, ParseException { + ObjectMapper objectMapper = getFasterXmlObjectMapper(); + AaiOverTLSClient aaiOverTLSClient = new AaiOverTLSClient(new SyncRestClient(objectMapper), propertySupplier, serverUtil.constructTargetUrl("http", "")); + + serverUtil.prepareGetCall("/search/nodes-query", new JSONParser().parse(searchNodesQueryResponsePayload), Action.status(HttpStatus.OK_200)); + + HttpResponse<AaiNodeQueryResponse> aaiNodeQueryResponseHttpResponse = aaiOverTLSClient + .searchNodeTypeByName("any", ResourceType.GENERIC_VNF); + + AaiNodeQueryResponse body = aaiNodeQueryResponseHttpResponse.getBody(); + Assertions.assertThat(body.resultData.size()).isEqualTo(5); + Assertions.assertThat(aaiNodeQueryResponseHttpResponse.getStatus()).isEqualTo(200); + } + + @Test + public void shouldGetSubscribers() throws ParseException, JsonProcessingException { + ObjectMapper objectMapper = getCodehausObjectMapper(); + AaiOverTLSClient aaiOverTLSClient = new AaiOverTLSClient(new SyncRestClient(objectMapper), propertySupplier, serverUtil.constructTargetUrl("http", "")); + + serverUtil.prepareGetCall("/business/customers", new JSONParser().parse(subscribersResponsePayload), Action.status(HttpStatus.OK_200)); + + HttpResponse<SubscriberList> allSubscribers = aaiOverTLSClient.getAllSubscribers(); + + SubscriberList subscriberList = allSubscribers.getBody(); + Assertions.assertThat(subscriberList.customer.size()).isEqualTo(4); + Assertions.assertThat(allSubscribers.getStatus()).isEqualTo(200); + } + + private ObjectMapper getCodehausObjectMapper() { + return new ObjectMapper() { + + org.codehaus.jackson.map.ObjectMapper om = new org.codehaus.jackson.map.ObjectMapper(); + + @Override + public <T> T readValue(String s, Class<T> aClass) { + try { + return om.readValue(s, aClass); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public String writeValue(Object o) { + try { + return om.writeValueAsString(o); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + }; + } + + private ObjectMapper getFasterXmlObjectMapper() { + return new ObjectMapper() { + + com.fasterxml.jackson.databind.ObjectMapper om = new com.fasterxml.jackson.databind.ObjectMapper(); + + @Override + public <T> T readValue(String s, Class<T> aClass) { + try { + return om.readValue(s, aClass); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public String writeValue(Object o) { + try { + return om.writeValueAsString(o); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + }; + } + +} diff --git a/vid-app-common/src/test/java/org/onap/vid/aai/AaiOverTLSClientTest.java b/vid-app-common/src/test/java/org/onap/vid/aai/AaiOverTLSClientTest.java new file mode 100644 index 000000000..f281e84b6 --- /dev/null +++ b/vid-app-common/src/test/java/org/onap/vid/aai/AaiOverTLSClientTest.java @@ -0,0 +1,89 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2018 Nokia 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.vid.aai; + +import com.google.common.collect.ImmutableMap; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; +import org.onap.vid.aai.model.AaiNodeQueryResponse; +import org.onap.vid.aai.model.ResourceType; +import org.onap.vid.client.SyncRestClient; +import org.onap.vid.model.SubscriberList; + +import java.util.Collections; +import java.util.Map; + +import static org.mockito.ArgumentMatchers.contains; +import static org.mockito.ArgumentMatchers.eq; + +@RunWith(MockitoJUnitRunner.class) +public class AaiOverTLSClientTest { + + private static final String SEARCH_NODES_QUERY_SEARCH_NODE_TYPE = "search/nodes-query?search-node-type=generic-vnf&filter=vnf-name:EQUALS:name"; + private static final String SUBSCRIBERS = "business/customers?subscriber-type=INFRA&depth=0"; + private AaiOverTLSClient aaiRestClient; + + @Mock + private SyncRestClient syncRestClient; + @Mock + private AaiOverTLSPropertySupplier propertySupplier; + + @Before + public void setUp() { + aaiRestClient = new AaiOverTLSClient(syncRestClient, propertySupplier); + } + + @Test + public void testSearchNodeTypeByName() { + mockPropertyReader(); + + aaiRestClient.searchNodeTypeByName("name", ResourceType.GENERIC_VNF); + Mockito.verify(syncRestClient).get(contains(SEARCH_NODES_QUERY_SEARCH_NODE_TYPE), + eq(getHeaders()), eq(Collections.emptyMap()), eq(AaiNodeQueryResponse.class)); + } + + @Test + public void testGetAllSubscribers(){ + mockPropertyReader(); + + aaiRestClient.getAllSubscribers(); + Mockito.verify(syncRestClient).get(contains(SUBSCRIBERS), + eq(getHeaders()), eq(Collections.emptyMap()), eq(SubscriberList.class)); + } + + private void mockPropertyReader() { + Mockito.when(propertySupplier.getPassword()).thenReturn("Pass"); + Mockito.when(propertySupplier.getUsername()).thenReturn("User"); + Mockito.when(propertySupplier.getRequestId()).thenReturn("1"); + Mockito.when(propertySupplier.getRandomUUID()).thenReturn("2"); + } + + private Map<String,String> getHeaders(){ + return ImmutableMap.<String, String>builder().put("Authorization", "Basic VXNlcjpQYXNz"). + put("X-FromAppId", "VidAaiController").put("Accept", "application/json").put("X-ECOMP-RequestID", "1"). + put("X-TransactionId", "2").put("Content-Type", "application/json").build(); + } + +}
\ No newline at end of file diff --git a/vid-app-common/src/test/java/org/onap/vid/aai/util/HttpsAuthClientTest.java b/vid-app-common/src/test/java/org/onap/vid/aai/util/HttpsAuthClientTest.java index f000dc801..ce957ab67 100644 --- a/vid-app-common/src/test/java/org/onap/vid/aai/util/HttpsAuthClientTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/aai/util/HttpsAuthClientTest.java @@ -21,21 +21,11 @@ package org.onap.vid.aai.util; -import org.junit.Before; -import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; -import org.onap.vid.aai.exceptions.HttpClientBuilderException; +import org.mockito.junit.MockitoJUnitRunner; import javax.net.ssl.SSLContext; -import java.util.Optional; - -import static org.mockito.Matchers.anyString; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class HttpsAuthClientTest { diff --git a/vid-app-common/src/test/java/org/onap/vid/aai/util/SingleAAIRestInterfaceTest.java b/vid-app-common/src/test/java/org/onap/vid/aai/util/SingleAAIRestInterfaceTest.java index cd2b8ff28..7fad9019c 100644 --- a/vid-app-common/src/test/java/org/onap/vid/aai/util/SingleAAIRestInterfaceTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/aai/util/SingleAAIRestInterfaceTest.java @@ -25,7 +25,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import org.onap.vid.aai.exceptions.InvalidPropertyException; import org.testng.Assert; diff --git a/vid-app-common/src/test/java/org/onap/vid/asdc/parser/ToscaParserImpl2Test.java b/vid-app-common/src/test/java/org/onap/vid/asdc/parser/ToscaParserImpl2Test.java index 1282a6f78..e1c5e923b 100644 --- a/vid-app-common/src/test/java/org/onap/vid/asdc/parser/ToscaParserImpl2Test.java +++ b/vid-app-common/src/test/java/org/onap/vid/asdc/parser/ToscaParserImpl2Test.java @@ -15,8 +15,8 @@ import org.onap.sdc.toscaparser.api.NodeTemplate; import org.onap.vid.asdc.AsdcCatalogException; import org.onap.vid.asdc.AsdcClient; import org.onap.vid.asdc.local.LocalAsdcClient; -import org.onap.vid.model.*; import org.onap.vid.controllers.ToscaParserMockHelper; +import org.onap.vid.model.*; import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -196,6 +196,28 @@ public class ToscaParserImpl2Test { JsonAssert.assertJsonEquals(expectedConfigurations, actualConfigurations); } + @Test + public void modelWithAnnotatedInputWithTwoProperties_vfModuleGetsTheInput() throws Exception { + final ToscaParserMockHelper mockHelper = new ToscaParserMockHelper("90fe6842-aa76-4b68-8329-5c86ff564407", "empty.json"); + final ServiceModel serviceModel = toscaParserImpl2.makeServiceModel(getCsarPath(mockHelper.getUuid()), getServiceByUuid(mockHelper.getUuid())); + + assertJsonStringEqualsIgnoreNulls("{ vfModules: { 201712488_adiodvpe10..201712488AdiodVpe1..ADIOD_vRE_BV..module-1: { inputs: { 201712488_adiodvpe10_availability_zone_0: { } } } } }", om.writeValueAsString(serviceModel)); + } + + @Test + public void modelWithNfNamingWithToValues_ecompGeneratedNamingIsExtracted() throws Exception { + final ToscaParserMockHelper mockHelper = new ToscaParserMockHelper("90fe6842-aa76-4b68-8329-5c86ff564407", "empty.json"); + final ServiceModel serviceModel = toscaParserImpl2.makeServiceModel(getCsarPath(mockHelper.getUuid()), getServiceByUuid(mockHelper.getUuid())); + + assertJsonStringEqualsIgnoreNulls("" + + "{ vnfs: " + + " { \"201712-488_ADIOD-vPE-1 0\": " + + " { properties: { " + + " ecomp_generated_naming: \"true\", " + + " nf_naming: \"{naming_policy=SDNC_Policy.Config_MS_1806SRIOV_VPE_ADIoDJson, ecomp_generated_naming=true}\" " + + "} } } }", om.writeValueAsString(serviceModel)); + } + private void setPprobeServiceProxy(Map<String, PortMirroringConfig> expectedConfigurations){ //Port Mirroring Configuration By Policy 0 doesn't contains pProbe. // But due to sdc design if pProbe not exists parser expects to get it from other source. diff --git a/vid-app-common/src/test/java/org/onap/vid/asdc/rest/SdcRestClientTest.java b/vid-app-common/src/test/java/org/onap/vid/asdc/rest/SdcRestClientTest.java index c1d6ab78a..642569c73 100644 --- a/vid-app-common/src/test/java/org/onap/vid/asdc/rest/SdcRestClientTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/asdc/rest/SdcRestClientTest.java @@ -25,7 +25,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import org.onap.vid.asdc.AsdcCatalogException; import org.onap.vid.asdc.beans.Service; import org.onap.vid.client.SyncRestClient; @@ -37,9 +37,7 @@ import java.util.UUID; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyMapOf; -import static org.mockito.Matchers.matches; +import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) @@ -82,7 +80,7 @@ public class SdcRestClientTest { @Test public void shouldReturnServiceForGivenUUID() throws AsdcCatalogException { String url = String.format(METADATA_URL_REGEX, randomId); - when(mockedSyncRestClient.get(matches(url), anyMapOf(String.class, String.class), anyMapOf(String.class, String.class), any())).thenReturn(httpResponse); + when(mockedSyncRestClient.get(matches(url), anyMap(), anyMap(), any())).thenReturn(httpResponse); when(httpResponse.getBody()).thenReturn(sampleService); Service service = restClient.getService(randomId); @@ -94,7 +92,7 @@ public class SdcRestClientTest { @Test(expected = AsdcCatalogException.class) public void shouldRaiseAsdcExceptionWhenClientFails() throws AsdcCatalogException { String url = String.format(METADATA_URL_REGEX, randomId); - when(mockedSyncRestClient.get(matches(url), anyMapOf(String.class, String.class), anyMapOf(String.class, String.class), any())).thenThrow(new RuntimeException()); + when(mockedSyncRestClient.get(matches(url), anyMap(), anyMap(), any())).thenThrow(new RuntimeException()); restClient.getService(randomId); } @@ -119,7 +117,7 @@ public class SdcRestClientTest { @Test(expected = AsdcCatalogException.class) public void shouldRaiseAsdcExceptionWhenDownloadFails() throws AsdcCatalogException { String url = String.format(MODEL_URL_REGEX, randomId); - when(mockedSyncRestClient.getStream(matches(url), anyMapOf(String.class, String.class), anyMapOf(String.class, String.class))).thenThrow(new RuntimeException()); + when(mockedSyncRestClient.getStream(matches(url), anyMap(), anyMap())).thenThrow(new RuntimeException()); restClient.getServiceToscaModel(randomId); diff --git a/vid-app-common/src/test/java/org/onap/vid/config/JobCommandsConfigWithMockedMso.java b/vid-app-common/src/test/java/org/onap/vid/config/JobCommandsConfigWithMockedMso.java index 56ac28d2e..c1ac6a219 100644 --- a/vid-app-common/src/test/java/org/onap/vid/config/JobCommandsConfigWithMockedMso.java +++ b/vid-app-common/src/test/java/org/onap/vid/config/JobCommandsConfigWithMockedMso.java @@ -21,13 +21,19 @@ package org.onap.vid.config; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.IOException; import org.hibernate.SessionFactory; import org.mockito.Mockito; import org.onap.portalsdk.core.service.DataAccessService; -import org.onap.vid.aai.AaiClientInterface; +import org.onap.vid.aai.AaiOverTLSClient; +import org.onap.vid.aai.AaiOverTLSClientInterface; +import org.onap.vid.aai.AaiOverTLSPropertySupplier; import org.onap.vid.aai.util.HttpsAuthClient; import org.onap.vid.aai.util.SSLContextProvider; import org.onap.vid.aai.util.SystemPropertyHelper; +import org.onap.vid.client.SyncRestClient; import org.onap.vid.job.JobAdapter; import org.onap.vid.job.JobsBrokerService; import org.onap.vid.job.command.InProgressStatusCommand; @@ -84,12 +90,40 @@ public class JobCommandsConfigWithMockedMso { } @Bean + public AaiOverTLSClientInterface AaiOverTLSClient(){ + io.joshworks.restclient.http.mapper.ObjectMapper objectMapper = new io.joshworks.restclient.http.mapper.ObjectMapper() { + + ObjectMapper om = new ObjectMapper(); + + @Override + public <T> T readValue(String s, Class<T> aClass) { + try { + return om.readValue(s, aClass); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public String writeValue(Object o) { + try { + return om.writeValueAsString(o); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + }; + + return new AaiOverTLSClient(new SyncRestClient(objectMapper), new AaiOverTLSPropertySupplier()); + } + + @Bean public AsyncInstantiationBusinessLogic asyncInstantiationBusinessLogic(DataAccessService dataAccessService, JobAdapter jobAdapter, JobsBrokerService jobsBrokerService, SessionFactory sessionFactory, - AaiClientInterface aaiClient) { - return new AsyncInstantiationBusinessLogicImpl(dataAccessService, jobAdapter, jobsBrokerService, sessionFactory, aaiClient); + AaiOverTLSClientInterface aaiOverTLSClientInterface) { + return new AsyncInstantiationBusinessLogicImpl(dataAccessService, jobAdapter, jobsBrokerService, sessionFactory, aaiOverTLSClientInterface); } @Bean diff --git a/vid-app-common/src/test/java/org/onap/vid/controller/ClientCredentialsFilterTest.java b/vid-app-common/src/test/java/org/onap/vid/controller/ClientCredentialsFilterTest.java index 61f18f54a..113bf2bf9 100644 --- a/vid-app-common/src/test/java/org/onap/vid/controller/ClientCredentialsFilterTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/controller/ClientCredentialsFilterTest.java @@ -13,7 +13,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; /** @@ -71,7 +71,7 @@ public class ClientCredentialsFilterTest { FilterChain chain = Mockito.mock(FilterChain.class); - Mockito.when(filter.verifyClientCredentials(any(String.class),any(String.class))).thenReturn(clientVerified); + Mockito.when(filter.verifyClientCredentials(any(),any())).thenReturn(clientVerified); Mockito.doNothing().when(response).sendError(401); Mockito.doCallRealMethod().when(filter).doFilter(request,response,chain); diff --git a/vid-app-common/src/test/java/org/onap/vid/controller/PromiseEcompRequestIdFilterTest.java b/vid-app-common/src/test/java/org/onap/vid/controller/PromiseEcompRequestIdFilterTest.java index 3bcb2d005..4f42171b5 100644 --- a/vid-app-common/src/test/java/org/onap/vid/controller/PromiseEcompRequestIdFilterTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/controller/PromiseEcompRequestIdFilterTest.java @@ -19,11 +19,12 @@ import java.io.IOException; import java.util.*; import java.util.function.Function; +import static org.apache.commons.lang3.StringUtils.equalsIgnoreCase; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.argThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.argThat; import static org.onap.portalsdk.core.util.SystemProperties.ECOMP_REQUEST_ID; @Test @@ -130,8 +131,8 @@ public class PromiseEcompRequestIdFilterTest { private HttpServletRequest createMockedHttpServletRequest(Map<String, String> requestHeaders) { HttpServletRequest servletRequest = Mockito.mock(HttpServletRequest.class); requestHeaders.forEach((k, v) -> { - Mockito.when(servletRequest.getHeader(argThat(equalToIgnoringCase(k)))).thenReturn(v); - Mockito.when(servletRequest.getHeaders(argThat(equalToIgnoringCase(k)))).then(returnEnumerationAnswer(v)); + Mockito.when(servletRequest.getHeader(argThat(s -> equalsIgnoreCase(s, k)))).thenReturn(v); + Mockito.when(servletRequest.getHeaders(argThat(s -> equalsIgnoreCase(s, k)))).then(returnEnumerationAnswer(v)); }); Mockito.when(servletRequest.getHeaderNames()).then(returnEnumerationAnswer(requestHeaders.keySet())); return servletRequest; diff --git a/vid-app-common/src/test/java/org/onap/vid/controllers/ChangeManagementControllerTest.java b/vid-app-common/src/test/java/org/onap/vid/controllers/ChangeManagementControllerTest.java index 317bd978c..58406a662 100644 --- a/vid-app-common/src/test/java/org/onap/vid/controllers/ChangeManagementControllerTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/controllers/ChangeManagementControllerTest.java @@ -1,23 +1,19 @@ package org.onap.vid.controllers; -import java.util.Collection; - -import javax.servlet.http.HttpServletRequest; - -import org.codehaus.jackson.map.ObjectMapper; import org.json.simple.JSONArray; import org.junit.Test; import org.onap.vid.changeManagement.ChangeManagementRequest; import org.onap.vid.changeManagement.GetVnfWorkflowRelationRequest; import org.onap.vid.changeManagement.VnfWorkflowRelationRequest; import org.onap.vid.mso.MsoResponseWrapperInterface; -import org.onap.vid.services.ChangeManagementService; import org.onap.vid.services.ChangeManagementServiceImpl; -import org.onap.vid.services.WorkflowService; import org.onap.vid.services.WorkflowServiceImpl; import org.springframework.http.ResponseEntity; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; +import java.util.Collection; + public class ChangeManagementControllerTest { private ChangeManagementController createTestSubject() { diff --git a/vid-app-common/src/test/java/org/onap/vid/controllers/HealthCheckControllerTest.java b/vid-app-common/src/test/java/org/onap/vid/controllers/HealthCheckControllerTest.java index da9cdaa6e..4894f35ea 100644 --- a/vid-app-common/src/test/java/org/onap/vid/controllers/HealthCheckControllerTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/controllers/HealthCheckControllerTest.java @@ -5,7 +5,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import org.onap.vid.dao.FnAppDoaImpl; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; @@ -13,8 +13,8 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders; import java.sql.SQLException; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.BDDMockito.given; -import static org.mockito.Matchers.anyString; import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR; import static org.springframework.http.HttpStatus.OK; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; diff --git a/vid-app-common/src/test/java/org/onap/vid/controllers/MaintenanceControllerTest.java b/vid-app-common/src/test/java/org/onap/vid/controllers/MaintenanceControllerTest.java index 7bdd6b863..3a9d88f07 100644 --- a/vid-app-common/src/test/java/org/onap/vid/controllers/MaintenanceControllerTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/controllers/MaintenanceControllerTest.java @@ -22,22 +22,8 @@ package org.onap.vid.controllers; * ============LICENSE_END========================================================= */ -import static org.mockito.BDDMockito.given; -import static org.mockito.BDDMockito.then; -import static org.mockito.BDDMockito.willThrow; -import static org.mockito.Matchers.argThat; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.times; -import static org.onap.vid.model.CategoryParameter.Family.PARAMETER_STANDARDIZATION; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import java.util.Collections; -import java.util.function.BiFunction; -import javax.ws.rs.ForbiddenException; import org.apache.log4j.BasicConfigurator; import org.codehaus.jackson.map.ObjectMapper; import org.junit.Before; @@ -45,7 +31,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentMatcher; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import org.onap.vid.category.AddCategoryOptionResponse; import org.onap.vid.category.AddCategoryOptionsRequest; import org.onap.vid.category.CategoryParameterOptionRep; @@ -61,6 +47,19 @@ import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilde import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import javax.ws.rs.ForbiddenException; +import java.util.Collections; +import java.util.function.BiFunction; + +import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.BDDMockito.*; +import static org.mockito.Mockito.times; +import static org.onap.vid.model.CategoryParameter.Family.PARAMETER_STANDARDIZATION; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + @RunWith(MockitoJUnitRunner.class) public class MaintenanceControllerTest { diff --git a/vid-app-common/src/test/java/org/onap/vid/controllers/PromiseEcompRequestIdFilterTest.java b/vid-app-common/src/test/java/org/onap/vid/controllers/PromiseEcompRequestIdFilterTest.java index 77dba37e9..f17403955 100644 --- a/vid-app-common/src/test/java/org/onap/vid/controllers/PromiseEcompRequestIdFilterTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/controllers/PromiseEcompRequestIdFilterTest.java @@ -19,11 +19,12 @@ import java.io.IOException; import java.util.*; import java.util.function.Function; +import static org.apache.commons.lang3.StringUtils.equalsIgnoreCase; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.argThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.argThat; import static org.onap.portalsdk.core.util.SystemProperties.ECOMP_REQUEST_ID; @Test @@ -130,8 +131,8 @@ public class PromiseEcompRequestIdFilterTest { private HttpServletRequest createMockedHttpServletRequest(Map<String, String> requestHeaders) { HttpServletRequest servletRequest = Mockito.mock(HttpServletRequest.class); requestHeaders.forEach((k, v) -> { - Mockito.when(servletRequest.getHeader(argThat(equalToIgnoringCase(k)))).thenReturn(v); - Mockito.when(servletRequest.getHeaders(argThat(equalToIgnoringCase(k)))).then(returnEnumerationAnswer(v)); + Mockito.when(servletRequest.getHeader(argThat(s -> equalsIgnoreCase(s, k)))).thenReturn(v); + Mockito.when(servletRequest.getHeaders(argThat(s -> equalsIgnoreCase(s, k)))).then(returnEnumerationAnswer(v)); }); Mockito.when(servletRequest.getHeaderNames()).then(returnEnumerationAnswer(requestHeaders.keySet())); return servletRequest; diff --git a/vid-app-common/src/test/java/org/onap/vid/controllers/VidControllerTest.java b/vid-app-common/src/test/java/org/onap/vid/controllers/VidControllerTest.java index 168d90090..198680afc 100644 --- a/vid-app-common/src/test/java/org/onap/vid/controllers/VidControllerTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/controllers/VidControllerTest.java @@ -21,26 +21,8 @@ package org.onap.vid.controllers; -import static java.util.stream.Collectors.toMap; -import static org.assertj.core.api.Assertions.assertThat; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.nullValue; -import static org.hamcrest.Matchers.not; -import static org.mockito.BDDMockito.given; -import static org.mockito.BDDMockito.then; -import static org.mockito.Mockito.times; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.stream.IntStream; -import javax.ws.rs.core.MediaType; import org.apache.log4j.BasicConfigurator; import org.codehaus.jackson.map.ObjectMapper; import org.junit.Assert; @@ -49,21 +31,14 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import org.onap.vid.asdc.AsdcCatalogException; import org.onap.vid.asdc.beans.SecureServices; import org.onap.vid.asdc.beans.Service; import org.onap.vid.asdc.beans.ServiceBuilder; -import org.onap.vid.model.CR; -import org.onap.vid.model.Network; -import org.onap.vid.model.Node; +import org.onap.vid.model.*; import org.onap.vid.model.PombaInstance.PombaRequest; import org.onap.vid.model.PombaInstance.ServiceInstance; -import org.onap.vid.model.ServiceModel; -import org.onap.vid.model.ServiceProxy; -import org.onap.vid.model.VNF; -import org.onap.vid.model.VfModule; -import org.onap.vid.model.VolumeGroup; import org.onap.vid.roles.RoleProvider; import org.onap.vid.services.AaiService; import org.onap.vid.services.PombaService; @@ -71,6 +46,25 @@ import org.onap.vid.services.VidService; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import javax.ws.rs.core.MediaType; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.stream.IntStream; + +import static java.util.stream.Collectors.toMap; +import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.hamcrest.Matchers.not; +import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.then; +import static org.mockito.Mockito.times; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + @RunWith(MockitoJUnitRunner.class) public class VidControllerTest { diff --git a/vid-app-common/src/test/java/org/onap/vid/dao/FnAppDoaImplTest.java b/vid-app-common/src/test/java/org/onap/vid/dao/FnAppDoaImplTest.java index 2c2aa89a0..6d60aa18a 100644 --- a/vid-app-common/src/test/java/org/onap/vid/dao/FnAppDoaImplTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/dao/FnAppDoaImplTest.java @@ -1,20 +1,20 @@ package org.onap.vid.dao; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; import static org.assertj.core.api.Java6Assertions.assertThat; import static org.assertj.core.api.Java6Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.BDDMockito.given; -import static org.mockito.Matchers.anyString; @RunWith(MockitoJUnitRunner.class) public class FnAppDoaImplTest { diff --git a/vid-app-common/src/test/java/org/onap/vid/job/impl/JobWorkerTest.java b/vid-app-common/src/test/java/org/onap/vid/job/impl/JobWorkerTest.java index b7e8e35a9..e58b6ba03 100644 --- a/vid-app-common/src/test/java/org/onap/vid/job/impl/JobWorkerTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/job/impl/JobWorkerTest.java @@ -19,7 +19,7 @@ import java.util.UUID; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.*; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; diff --git a/vid-app-common/src/test/java/org/onap/vid/mso/MsoBusinessLogicImplTest.java b/vid-app-common/src/test/java/org/onap/vid/mso/MsoBusinessLogicImplTest.java index 461673224..718e22fb4 100644 --- a/vid-app-common/src/test/java/org/onap/vid/mso/MsoBusinessLogicImplTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/mso/MsoBusinessLogicImplTest.java @@ -20,25 +20,8 @@ */ package org.onap.vid.mso; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.junit.Assert.assertEquals; -import static org.mockito.BDDMockito.given; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.argThat; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.mock; -import static org.onap.vid.mso.MsoBusinessLogicImpl.validateEndpointPath; - import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import java.io.IOException; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.List; -import java.util.stream.Collectors; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -56,6 +39,22 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.togglz.core.manager.FeatureManager; +import java.io.IOException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; +import java.util.stream.Collectors; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.onap.vid.mso.MsoBusinessLogicImpl.validateEndpointPath; + @ContextConfiguration(classes = {SystemProperties.class}) @RunWith(SpringJUnit4ClassRunner.class) public class MsoBusinessLogicImplTest { @@ -287,7 +286,7 @@ public class MsoBusinessLogicImplTest { return new String(Files.readAllBytes(path)); } - private static class MsoRequestWrapperMatcher extends + private static class MsoRequestWrapperMatcher implements ArgumentMatcher<org.onap.vid.changeManagement.RequestDetailsWrapper> { private final org.onap.vid.changeManagement.RequestDetailsWrapper expectedRequest; @@ -297,9 +296,8 @@ public class MsoBusinessLogicImplTest { } @Override - public boolean matches(Object argument) { - org.onap.vid.changeManagement.RequestDetailsWrapper requestDetailsWrapper = (org.onap.vid.changeManagement.RequestDetailsWrapper) argument; - return expectedRequest.requestDetails.equals(requestDetailsWrapper.requestDetails); + public boolean matches(org.onap.vid.changeManagement.RequestDetailsWrapper argument) { + return expectedRequest.requestDetails.equals(argument.requestDetails); } } } diff --git a/vid-app-common/src/test/java/org/onap/vid/mso/rest/OutgoingRequestIdTest.java b/vid-app-common/src/test/java/org/onap/vid/mso/rest/OutgoingRequestIdTest.java index 909975fb8..197bfe75d 100644 --- a/vid-app-common/src/test/java/org/onap/vid/mso/rest/OutgoingRequestIdTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/mso/rest/OutgoingRequestIdTest.java @@ -2,12 +2,7 @@ package org.onap.vid.mso.rest; import com.google.common.collect.ImmutableList; import org.apache.commons.lang3.reflect.FieldUtils; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Matchers; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; +import org.mockito.*; import org.onap.vid.aai.util.AAIRestInterface; import org.onap.vid.changeManagement.RequestDetailsWrapper; import org.onap.vid.controller.filter.PromiseEcompRequestIdFilter; @@ -31,13 +26,9 @@ import java.util.function.Consumer; import java.util.stream.Collectors; import java.util.stream.Stream; +import static org.apache.commons.lang3.StringUtils.equalsIgnoreCase; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.allOf; -import static org.hamcrest.Matchers.equalToIgnoringCase; -import static org.hamcrest.Matchers.hasItem; -import static org.hamcrest.Matchers.hasToString; -import static org.hamcrest.Matchers.instanceOf; -import static org.hamcrest.Matchers.matchesPattern; +import static org.hamcrest.Matchers.*; public class OutgoingRequestIdTest { @@ -130,7 +121,7 @@ public class OutgoingRequestIdTest { ArgumentCaptor<Object> argumentCaptor = ArgumentCaptor.forClass(Object.class); Mockito.verify(fakeBuilder) .header( - Matchers.argThat(equalToIgnoringCase(requestIdHeader)), + Matchers.argThat(s -> equalsIgnoreCase(s, requestIdHeader)), argumentCaptor.capture() ); requestId = argumentCaptor.getValue(); diff --git a/vid-app-common/src/test/java/org/onap/vid/scheduler/SchedulerRestInterfaceTest.java b/vid-app-common/src/test/java/org/onap/vid/scheduler/SchedulerRestInterfaceTest.java index 6390f5800..0655aca9e 100644 --- a/vid-app-common/src/test/java/org/onap/vid/scheduler/SchedulerRestInterfaceTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/scheduler/SchedulerRestInterfaceTest.java @@ -30,7 +30,7 @@ import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import org.onap.vid.exceptions.GenericUncheckedException; import org.onap.vid.testUtils.StubServerUtil; import org.testng.annotations.AfterMethod; diff --git a/vid-app-common/src/test/java/org/onap/vid/services/AaiServiceImplTest.java b/vid-app-common/src/test/java/org/onap/vid/services/AaiServiceImplTest.java index ae6c2ccca..efa12f2c0 100644 --- a/vid-app-common/src/test/java/org/onap/vid/services/AaiServiceImplTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/services/AaiServiceImplTest.java @@ -1,8 +1,28 @@ -package org.onap.vid.services; +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2018 Nokia. 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========================================================= + */ -import java.util.Collection; -import java.util.List; +package org.onap.vid.services; +import com.google.common.collect.ImmutableList; +import io.joshworks.restclient.http.HttpResponse; import org.junit.Assert; import org.junit.Test; import org.onap.vid.aai.AaiResponse; @@ -13,6 +33,8 @@ import org.onap.vid.aai.model.AaiGetTenatns.GetTenantsResponse; import org.onap.vid.model.SubscriberList; import org.onap.vid.roles.RoleValidator; +import java.util.List; + public class AaiServiceImplTest { private AaiServiceImpl createTestSubject() { @@ -55,7 +77,7 @@ public class AaiServiceImplTest { @Test public void testGetFullSubscriberList_1() throws Exception { AaiServiceImpl testSubject; - AaiResponse<SubscriberList> result; + HttpResponse<SubscriberList> result; // default test try { @@ -144,7 +166,7 @@ public class AaiServiceImplTest { @Test public void testGetVersionByInvariantId() throws Exception { AaiServiceImpl testSubject; - List<String> modelInvariantId = null; + List<String> modelInvariantId = ImmutableList.of("some invariant id"); // default test try { diff --git a/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBaseTest.java b/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBaseTest.java index c3d01283d..5ead3fce4 100644 --- a/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBaseTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBaseTest.java @@ -1,8 +1,35 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2018 Nokia. 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.vid.services; import com.google.common.collect.ImmutableMap; +import io.joshworks.restclient.http.HttpResponse; import jersey.repackaged.com.google.common.collect.ImmutableList; -import org.onap.vid.aai.AaiClientInterface; +import org.apache.http.HttpStatus; +import org.apache.http.HttpVersion; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.DefaultHttpResponseFactory; +import org.apache.http.message.BasicStatusLine; +import org.onap.vid.aai.AaiOverTLSClientInterface; import org.onap.vid.aai.AaiResponse; import org.onap.vid.aai.model.AaiNodeQueryResponse; import org.onap.vid.aai.model.ResourceType; @@ -13,15 +40,14 @@ import org.onap.vid.model.serviceInstantiation.VfModule; import org.onap.vid.model.serviceInstantiation.Vnf; import org.onap.vid.mso.RestObject; import org.onap.vid.mso.rest.AsyncRequestStatus; -import org.onap.vid.services.AsyncInstantiationBusinessLogic; -import org.onap.vid.services.AsyncInstantiationBusinessLogicTest; import org.springframework.test.context.testng.AbstractTestNGSpringContextTests; import org.togglz.core.manager.FeatureManager; import javax.inject.Inject; +import java.io.UnsupportedEncodingException; import java.util.*; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; public class AsyncInstantiationBaseTest extends AbstractTestNGSpringContextTests { @@ -48,7 +74,7 @@ public class AsyncInstantiationBaseTest extends AbstractTestNGSpringContextTests protected FeatureManager featureManager; @Inject - protected AaiClientInterface aaiClient; + protected AaiOverTLSClientInterface aaiClient; public ServiceInstantiation generateMockServiceInstantiationPayload(boolean isPause, Map<String, Vnf> vnfs, int bulkSize, boolean isUserProvidedNaming, String projectName, boolean rollbackOnFailure) { ModelInfo modelInfo = createModelInfo(); @@ -174,12 +200,15 @@ public class AsyncInstantiationBaseTest extends AbstractTestNGSpringContextTests return restObject; } - protected void mockAaiClientAnyNameFree() { + protected void mockAaiClientAnyNameFree() throws UnsupportedEncodingException { when(aaiClient.searchNodeTypeByName(any(), any())).thenReturn(aaiNodeQueryResponseNameFree()); } - protected AaiResponse<AaiNodeQueryResponse> aaiNodeQueryResponseNameFree() { - return new AaiResponse<>(new AaiNodeQueryResponse(null),"", 200); + protected HttpResponse<AaiNodeQueryResponse> aaiNodeQueryResponseNameFree() throws UnsupportedEncodingException { + org.apache.http.HttpResponse response = new DefaultHttpResponseFactory().newHttpResponse(new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, null), null); + response.setEntity(new StringEntity("")); + + return HttpResponse.fallback(new AaiNodeQueryResponse(null)); } protected AaiResponse<AaiNodeQueryResponse> aaiNodeQueryBadResponse() { diff --git a/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBusinessLogicTest.java b/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBusinessLogicTest.java index 3f13c9dff..9711fa858 100644 --- a/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBusinessLogicTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBusinessLogicTest.java @@ -1,72 +1,9 @@ package org.onap.vid.services; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import jersey.repackaged.com.google.common.collect.ImmutableList; -import net.javacrumbs.jsonunit.JsonAssert; -import org.apache.commons.io.IOUtils; -import org.hibernate.SessionFactory; -import org.json.JSONException; -import org.mockito.ArgumentCaptor; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.onap.vid.aai.exceptions.InvalidAAIResponseException; -import org.onap.vid.aai.model.ResourceType; -import org.onap.vid.changeManagement.RequestDetailsWrapper; -import org.onap.vid.exceptions.GenericUncheckedException; -import org.onap.vid.exceptions.MaxRetriesException; -import org.onap.vid.exceptions.OperationNotAllowedException; -import org.onap.vid.job.Job; -import org.onap.vid.job.Job.JobStatus; -import org.onap.vid.job.JobAdapter; -import org.onap.vid.job.JobsBrokerService; -import org.onap.vid.job.impl.JobDaoImpl; -import org.onap.vid.model.JobAuditStatus; -import org.onap.vid.model.JobAuditStatus.SourceStatus; -import org.onap.vid.model.NameCounter; -import org.onap.vid.model.ServiceInfo; -import org.onap.vid.model.serviceInstantiation.ServiceInstantiation; -import org.onap.vid.model.serviceInstantiation.Vnf; -import org.onap.vid.mso.model.ServiceInstantiationRequestDetails; -import org.onap.vid.mso.rest.AsyncRequestStatus; -import org.onap.vid.utils.DaoUtils; +import org.onap.portalsdk.core.util.SystemProperties; import org.onap.vid.config.DataSourceConfig; import org.onap.vid.config.MockedAaiClientAndFeatureManagerConfig; -import org.onap.vid.mso.MsoOperationalEnvironmentTest; -import org.onap.vid.services.AsyncInstantiationBaseTest; -import org.onap.portalsdk.core.domain.FusionObject; -import org.onap.portalsdk.core.service.DataAccessService; -import org.onap.portalsdk.core.util.SystemProperties; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; -import org.testng.Assert; -import org.testng.annotations.*; - -import javax.inject.Inject; -import java.io.IOException; -import java.lang.reflect.Method; -import java.net.URL; -import java.time.Instant; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.*; -import java.util.Optional; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.contains; -import static org.hamcrest.Matchers.*; -import static org.hamcrest.core.Every.everyItem; -import static org.hamcrest.core.IsEqual.equalTo; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.*; -import static org.onap.vid.job.Job.JobStatus.*; -import static org.testng.Assert.*; @ContextConfiguration(classes = {DataSourceConfig.class, SystemProperties.class, MockedAaiClientAndFeatureManagerConfig.class}) public class AsyncInstantiationBusinessLogicTest extends AsyncInstantiationBaseTest { diff --git a/vid-app-common/src/test/java/org/onap/vid/services/CategoryParameterServiceImplTest.java b/vid-app-common/src/test/java/org/onap/vid/services/CategoryParameterServiceImplTest.java index 7992cbb17..3492a7547 100644 --- a/vid-app-common/src/test/java/org/onap/vid/services/CategoryParameterServiceImplTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/services/CategoryParameterServiceImplTest.java @@ -20,18 +20,6 @@ */ package org.onap.vid.services; -import static org.mockito.Matchers.anyObject; -import static org.mockito.Matchers.anyString; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.reset; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.MockitoAnnotations.initMocks; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import javax.ws.rs.ForbiddenException; import org.mockito.InjectMocks; import org.mockito.Mock; import org.onap.portalsdk.core.service.DataAccessService; @@ -50,6 +38,16 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.BeforeSuite; import org.testng.annotations.Test; +import javax.ws.rs.ForbiddenException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; +import static org.mockito.MockitoAnnotations.initMocks; + public class CategoryParameterServiceImplTest { private static final String CATEGORY_NAME = "SAMPLE_CATEGORY_NAME"; @@ -89,7 +87,7 @@ public class CategoryParameterServiceImplTest { Assert.assertTrue(result.getErrors().isEmpty());; verify(dataAccessService, times(1)) - .saveDomainObject(anyObject(), anyObject()); + .saveDomainObject(any(), any()); } @Test @@ -164,12 +162,12 @@ public class CategoryParameterServiceImplTest { categoryParameter.addOption(categoryParameterOption); List<CategoryParameter> aList = createCategoryParametersList(categoryParameter); - doReturn(aList).when(dataAccessService).getList(anyObject(), anyString(), anyString(), anyObject()); + doReturn(aList).when(dataAccessService).getList(any(), anyString(), any(), any()); testSubject.deleteCategoryOption(CATEGORY_NAME, categoryParameterOption); verify(dataAccessService, times(1)) - .deleteDomainObject(anyObject(), anyObject()); + .deleteDomainObject(any(), any()); } @Test @@ -181,7 +179,7 @@ public class CategoryParameterServiceImplTest { categoryParameter.addOption(categoryParameterOption); List<CategoryParameter> aList = createCategoryParametersList(categoryParameter); - doReturn(aList).when(dataAccessService).getList(anyObject(), anyString(), anyString(), anyObject()); + doReturn(aList).when(dataAccessService).getList(any(), anyString(), any(), any()); CategoryParametersResponse response = testSubject.getCategoryParameters(Family.PARAMETER_STANDARDIZATION); @@ -189,7 +187,7 @@ public class CategoryParameterServiceImplTest { Assert.assertTrue(response.getCategoryParameters().containsKey(CATEGORY_NAME)); verify(dataAccessService, times(1)) - .getList(anyObject(), anyString(), anyString(), anyObject()); + .getList(any(), anyString(), any(), any()); } @Test @@ -206,7 +204,7 @@ public class CategoryParameterServiceImplTest { AddCategoryOptionResponse result = testSubject.updateCategoryParameterOption(CATEGORY_NAME, optionRepExisting); verify(dataAccessService, times(1)) - .saveDomainObject(anyObject(), anyObject()); + .saveDomainObject(any(), any()); } @Test(expectedExceptions = { ForbiddenException.class }) diff --git a/vid-app-common/src/test/java/org/onap/vid/services/ChangeManagementServiceImplTest.java b/vid-app-common/src/test/java/org/onap/vid/services/ChangeManagementServiceImplTest.java index 157f59c74..00d9e1735 100644 --- a/vid-app-common/src/test/java/org/onap/vid/services/ChangeManagementServiceImplTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/services/ChangeManagementServiceImplTest.java @@ -1,12 +1,12 @@ package org.onap.vid.services; import org.mockito.*; +import org.onap.portalsdk.core.service.DataAccessService; import org.onap.vid.changeManagement.ChangeManagementRequest; import org.onap.vid.changeManagement.RequestDetails; import org.onap.vid.mso.MsoBusinessLogic; import org.onap.vid.mso.MsoResponseWrapperInterface; import org.onap.vid.scheduler.SchedulerRestInterfaceIfc; -import org.onap.portalsdk.core.service.DataAccessService; import org.springframework.http.ResponseEntity; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -54,47 +54,47 @@ public class ChangeManagementServiceImplTest { @Test public void doChangeManagement_requestTypeIsUpdate_MsoUpdateVnfIsCalled() throws Exception { - Mockito.doReturn(Mockito.mock(MsoResponseWrapperInterface.class)).when(msoBusinessLogicMock).updateVnf(Mockito.any(),Mockito.anyString(),Mockito.anyString()); + Mockito.doReturn(Mockito.mock(MsoResponseWrapperInterface.class)).when(msoBusinessLogicMock).updateVnf(Mockito.any(),Mockito.any(),Mockito.any()); RequestDetails requestDetails = callChangeManagement(ChangeManagementRequest.UPDATE); ArgumentCaptor<RequestDetails> argumentCaptor = ArgumentCaptor.forClass(RequestDetails.class); - verify(msoBusinessLogicMock).updateVnf(argumentCaptor.capture(),Mockito.anyString(),Mockito.anyString()); + verify(msoBusinessLogicMock).updateVnf(argumentCaptor.capture(),Mockito.any(),Mockito.any()); assertEquals(argumentCaptor.getValue().getVnfInstanceId(),requestDetails.getVnfInstanceId()); } @Test public void doChangeManagement_requestTypeIsReplace_MsoUpdateVnfIsCalled() throws Exception { - Mockito.doReturn(Mockito.mock(MsoResponseWrapperInterface.class)).when(msoBusinessLogicMock).replaceVnf(Mockito.any(),Mockito.anyString(),Mockito.anyString()); + Mockito.doReturn(Mockito.mock(MsoResponseWrapperInterface.class)).when(msoBusinessLogicMock).replaceVnf(Mockito.any(),Mockito.any(),Mockito.any()); RequestDetails requestDetails = callChangeManagement(ChangeManagementRequest.REPLACE); ArgumentCaptor<RequestDetails> argumentCaptor = ArgumentCaptor.forClass(RequestDetails.class); - verify(msoBusinessLogicMock).replaceVnf(argumentCaptor.capture(),Mockito.anyString(),Mockito.anyString()); + verify(msoBusinessLogicMock).replaceVnf(argumentCaptor.capture(),Mockito.any(),Mockito.any()); assertEquals(argumentCaptor.getValue().getVnfInstanceId(),requestDetails.getVnfInstanceId()); } @Test public void doChangeManagement_requestTypeIsInPlaceSoftwareUpdate_MsoUpdateVnfIsCalled() throws Exception { - Mockito.doReturn(Mockito.mock(MsoResponseWrapperInterface.class)).when(msoBusinessLogicMock).updateVnfSoftware(Mockito.any(),Mockito.anyString(),Mockito.anyString()); + Mockito.doReturn(Mockito.mock(MsoResponseWrapperInterface.class)).when(msoBusinessLogicMock).updateVnfSoftware(Mockito.any(),Mockito.any(),Mockito.any()); RequestDetails requestDetails = callChangeManagement(ChangeManagementRequest.VNF_IN_PLACE_SOFTWARE_UPDATE); ArgumentCaptor<RequestDetails> argumentCaptor = ArgumentCaptor.forClass(RequestDetails.class); - verify(msoBusinessLogicMock).updateVnfSoftware(argumentCaptor.capture(),Mockito.anyString(),Mockito.anyString()); + verify(msoBusinessLogicMock).updateVnfSoftware(argumentCaptor.capture(),Mockito.any(),Mockito.any()); assertEquals(argumentCaptor.getValue().getVnfInstanceId(),requestDetails.getVnfInstanceId()); } @Test public void doChangeManagement_requestTypeIsConfigUpdate_MsoUpdateVnfIsCalled() throws Exception { - Mockito.doReturn(Mockito.mock(MsoResponseWrapperInterface.class)).when(msoBusinessLogicMock).updateVnfConfig(Mockito.any(),Mockito.anyString(),Mockito.anyString()); + Mockito.doReturn(Mockito.mock(MsoResponseWrapperInterface.class)).when(msoBusinessLogicMock).updateVnfConfig(Mockito.any(),Mockito.any(),Mockito.any()); RequestDetails requestDetails = callChangeManagement(ChangeManagementRequest.CONFIG_UPDATE); ArgumentCaptor<RequestDetails> argumentCaptor = ArgumentCaptor.forClass(RequestDetails.class); - verify(msoBusinessLogicMock).updateVnfConfig(argumentCaptor.capture(),Mockito.anyString(),Mockito.anyString()); + verify(msoBusinessLogicMock).updateVnfConfig(argumentCaptor.capture(),Mockito.any(),Mockito.any()); assertEquals(argumentCaptor.getValue().getVnfInstanceId(),requestDetails.getVnfInstanceId()); } @@ -106,8 +106,8 @@ public class ChangeManagementServiceImplTest { updateRequest.setRequestType(requestType); RequestDetails requestDetails = new RequestDetails(); requestDetails.setVnfInstanceId("vnfFakeId"); - Mockito.doReturn("fakeId").when(changeManagementServiceSpied).extractServiceInstanceId(Mockito.anyObject(),Mockito.anyString()); - Mockito.doReturn(requestDetails).when(changeManagementServiceSpied).findRequestByVnfName(Matchers.anyList(),Mockito.anyString()); + Mockito.doReturn("fakeId").when(changeManagementServiceSpied).extractServiceInstanceId(Mockito.any(),Mockito.any()); + Mockito.doReturn(requestDetails).when(changeManagementServiceSpied).findRequestByVnfName(Matchers.any(),Mockito.any()); changeManagementServiceSpied.doChangeManagement(updateRequest,"anyVnfName"); diff --git a/vid-app-common/src/test/java/org/onap/vid/services/ChangeManagementServiceUnitTest.java b/vid-app-common/src/test/java/org/onap/vid/services/ChangeManagementServiceUnitTest.java index 8aafda3f0..d849869b0 100644 --- a/vid-app-common/src/test/java/org/onap/vid/services/ChangeManagementServiceUnitTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/services/ChangeManagementServiceUnitTest.java @@ -24,6 +24,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.joshworks.restclient.http.HttpResponse; import org.apache.commons.io.IOUtils; import org.mockito.ArgumentCaptor; +import org.onap.portalsdk.core.service.DataAccessService; +import org.onap.portalsdk.core.util.SystemProperties; import org.onap.vid.changeManagement.ChangeManagementRequest; import org.onap.vid.changeManagement.RequestDetailsWrapper; import org.onap.vid.client.SyncRestClient; @@ -37,8 +39,6 @@ import org.onap.vid.mso.rest.RequestDetails; import org.onap.vid.properties.AsdcClientConfiguration; import org.onap.vid.scheduler.SchedulerRestInterfaceIfc; import org.onap.vid.testUtils.RegExMatcher; -import org.onap.portalsdk.core.service.DataAccessService; -import org.onap.portalsdk.core.util.SystemProperties; import org.skyscreamer.jsonassert.JSONAssert; import org.skyscreamer.jsonassert.JSONCompareMode; import org.springframework.context.annotation.Bean; @@ -54,8 +54,8 @@ import java.net.URL; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.IsEqual.equalTo; import static org.hamcrest.core.IsInstanceOf.instanceOf; -import static org.mockito.Matchers.anyObject; -import static org.mockito.Matchers.anyString; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.*; @@ -74,7 +74,7 @@ public class ChangeManagementServiceUnitTest extends AbstractTestNGSpringContext void testInPlaceSoftwareUpdateRequest() throws Exception { - doReturn(new HttpResponse<>(anyObject(), RequestReferencesContainer.class, anyObject())).when(restClientUnderTest).post(anyString(), anyObject(), anyObject()); + doReturn(new HttpResponse<>(any(), RequestReferencesContainer.class, any())).when(restClientUnderTest).post(anyString(), any(), any()); URL requestJsonUrl = this.getClass().getResource("/services/change_management_software_update_request.json"); ChangeManagementRequest changeManagementRequest = objectMapper.readValue(requestJsonUrl, ChangeManagementRequest.class); diff --git a/vid-app-common/src/test/java/org/onap/vid/testUtils/IntersectionTest.java b/vid-app-common/src/test/java/org/onap/vid/testUtils/IntersectionTest.java index c766d26f3..dcccab008 100644 --- a/vid-app-common/src/test/java/org/onap/vid/testUtils/IntersectionTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/testUtils/IntersectionTest.java @@ -1,101 +1,108 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2018 Nokia. 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.vid.testUtils; -import org.junit.Assert; import org.junit.Test; import org.onap.vid.utils.Intersection; -import java.util.ArrayList; import java.util.List; -/** - * Created by moriya1 on 10/10/2017. - */ +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.util.Lists.emptyList; +import static org.assertj.core.util.Lists.list; + public class IntersectionTest { @Test - public void testFourArrays(){ - List<String> l1 = new ArrayList<String>(); - l1.add("1"); - l1.add("2"); - - List<String> l2 = new ArrayList<String>(); - l2.add("2"); - l2.add("3"); - - List<String> l3 = new ArrayList<String>(); - l3.add("2"); - l3.add("4"); - - List<String> l4 = new ArrayList<String>(); - l4.add("2"); - l4.add("5"); - - List<List<String>> all = new ArrayList<>(); - all.add(l1); - all.add(l2); - all.add(l3); - all.add(l4); - Intersection<String> m = new Intersection<>(); - List<String> ans = m.intersectMultipileArray(all); - Assert.assertEquals(1,ans.size()); - Assert.assertEquals(ans.get(0),"2"); + public void testFourArrays() { + // given + List<List<String>> input = list( + list("1", "2"), + list("2", "3"), + list("2", "4"), + list("2", "5") + ); + // when + List<String> output = Intersection.of(input); + // then + assertThat(output).containsExactlyInAnyOrder("2"); } - - @Test - public void testTwoArrays(){ - List<String> l1 = new ArrayList<String>(); - l1.add("1"); - l1.add("2"); - - List<String> l2 = new ArrayList<String>(); - l2.add("2"); - l2.add("3"); - - List<List<String>> all = new ArrayList<>(); - all.add(l1); - all.add(l2); - Intersection<String> m = new Intersection<>(); - List<String> l3 = m.intersectMultipileArray(all); - Assert.assertEquals(l3.size(),1); - Assert.assertEquals(l3.get(0),"2"); + public void testTwoArrays() { + // given + List<List<String>> input = list( + list("1", "2"), + list("2", "3") + ); + // when + List<String> output = Intersection.of(input); + // then + assertThat(output).containsExactlyInAnyOrder("2"); } @Test - public void testNoIntersection(){ - List<String> l1 = new ArrayList<String>(); - l1.add("1"); - l1.add("2"); - - List<String> l2 = new ArrayList<String>(); - l2.add("3"); - l2.add("4"); + public void testNoIntersection() { + // given + List<List<String>> input = list( + list("1", "2"), + list("3", "4") + ); + // when + List<String> output = Intersection.of(input); + // then + assertThat(output).isEmpty(); - List<List<String>> all = new ArrayList<>(); - all.add(l1); - all.add(l2); - Intersection<String> m = new Intersection<>(); - List<String> l3 = m.intersectMultipileArray(all); - Assert.assertEquals(l3.size(),0); + } + @Test + public void testOneArray() { + // given + List<List<String>> input = list(list("1", "2")); + // when + List<String> output = Intersection.of(input); + // then + assertThat(output).containsExactlyInAnyOrder("1", "2"); } @Test - public void testOneArrays(){ - List<String> l1 = new ArrayList<String>(); - l1.add("1"); - l1.add("2"); - List<List<String>> all = new ArrayList<>(); - all.add(l1); - Intersection<String> m = new Intersection<>(); - List<String> l3 = m.intersectMultipileArray(all); - Assert.assertEquals(l3.size(),2); - Assert.assertEquals(l3.get(0),"1"); - Assert.assertEquals(l3.get(1),"2"); + public void testEmptyInput() { + // when + List<String> output = Intersection.of(emptyList()); + // then + assertThat(output).isEmpty(); + } + @Test + public void shouldIgnoreRepetitions() { + // when + List<String> output = Intersection.of(list( + list("1", "1"), + list("1", "1") + )); + // then + assertThat(output).containsExactly("1"); } } diff --git a/vid-app-common/src/test/java/org/onap/vid/testUtils/TestUtils.java b/vid-app-common/src/test/java/org/onap/vid/testUtils/TestUtils.java index 0460f5325..b4c7828bc 100644 --- a/vid-app-common/src/test/java/org/onap/vid/testUtils/TestUtils.java +++ b/vid-app-common/src/test/java/org/onap/vid/testUtils/TestUtils.java @@ -22,8 +22,8 @@ import java.util.Iterator; import java.util.List; import static fj.parser.Parser.fail; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; /** diff --git a/vid-app-common/src/test/resources/empty.json b/vid-app-common/src/test/resources/empty.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/vid-app-common/src/test/resources/empty.json @@ -0,0 +1 @@ +{}
\ No newline at end of file diff --git a/vid-automation/src/main/java/vid/automation/test/test/NewServiceInstanceTest.java b/vid-automation/src/main/java/vid/automation/test/test/NewServiceInstanceTest.java index f4d3796ae..173897095 100644 --- a/vid-automation/src/main/java/vid/automation/test/test/NewServiceInstanceTest.java +++ b/vid-automation/src/main/java/vid/automation/test/test/NewServiceInstanceTest.java @@ -115,7 +115,7 @@ public class NewServiceInstanceTest extends CreateInstanceDialogBaseTest { new ArrayList<>(), false, true, true, true, "2017-488_ADIOD-vPE 0", - "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1", 0, 1, new ArrayList<>()); + "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1", 0, 1, ImmutableList.of("Bandwidth", "Bandwidth units")); String serviceInstanceName = deployServiceInstance(serviceData, false); vidBasePage.screenshotDeployDialog(serviceInstanceName); diff --git a/vid-ext-services-simulator/Dockerfile b/vid-ext-services-simulator/Dockerfile new file mode 100644 index 000000000..6cf2d9d0b --- /dev/null +++ b/vid-ext-services-simulator/Dockerfile @@ -0,0 +1,5 @@ +FROM tomcat:jre8-alpine + +RUN apk add --no-cache vim net-tools bash + +ADD target/vidSimulator.war ./webapps
\ No newline at end of file diff --git a/vid-ext-services-simulator/pom.xml b/vid-ext-services-simulator/pom.xml index e8e827bb5..ed6a13c67 100644 --- a/vid-ext-services-simulator/pom.xml +++ b/vid-ext-services-simulator/pom.xml @@ -103,6 +103,20 @@ <coberturaBuildPhase>package</coberturaBuildPhase> </properties> </profile> + + <profile> + <id>docker-proxy</id> + <!-- activate profile if environment variable `http_proxy` is set --> + <activation> + <property> + <name>env.http_proxy</name> + </property> + </activation> + <properties> + <docker.buildArg.http_proxy>${env.http_proxy}</docker.buildArg.http_proxy> + </properties> + </profile> + </profiles> <dependencies> @@ -146,6 +160,49 @@ <target>1.8</target> </configuration> </plugin> + + <plugin> + <groupId>io.fabric8</groupId> + <artifactId>docker-maven-plugin</artifactId> + <version>0.27.2</version> + + <configuration> + <images> + <image> + <name>onap/vid-simulator</name> + <build> + <cleanup>remove</cleanup> + <dockerFileDir>${project.basedir}</dockerFileDir> + <tags> + <tag>${project.version}</tag> + <tag>latest</tag> + </tags> + </build> + </image> + </images> + </configuration> + + <executions> + <execution> + <id>generate-image</id> + <phase>package</phase> + <goals> + <goal>build</goal> + </goals> + </execution> + + <execution> + <id>push-image</id> + <phase>deploy</phase> + <goals> + <goal>build</goal> + <goal>push</goal> + </goals> + </execution> + </executions> + + </plugin> + </plugins> </build> diff --git a/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.service.spec.ts b/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.service.spec.ts deleted file mode 100644 index 02296f728..000000000 --- a/vid-webpack-master/src/app/components/vnf-popup/vnf-popup.service.spec.ts +++ /dev/null @@ -1,827 +0,0 @@ -import {VnfPopupService} from './vnf-popup-service'; -import {ServicePlanningService} from '../../services/service-planning.service'; -import {ServiceNodeTypes} from '../../shared/models/ServiceNodeTypes'; -import {NgRedux} from '@angular-redux/store'; -import {VNFModel} from '../../shared/models/vnfModel'; -import {VfModule} from '../../shared/models/vfModule'; -import {FormControl, FormGroup, Validators} from '@angular/forms'; -import {NumbersLettersUnderscoreValidator} from '../../shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator'; -import {VnfInstanceDetailsService} from './vnf-instance-details/vnf-instance-details.service'; -import {ReflectiveInjector} from '@angular/core'; - -export class MockAppStore<T> { -} - -describe('Vnf popup service', () => { - let injector; - let service: VnfPopupService; - let fg: FormGroup; - let data = generateModelData(); - let servicePopupDataModel = generateServicePopupDataModel(); - let form: FormGroup = generateFormGroup(); - beforeEach(() => { - - let injector = ReflectiveInjector.resolveAndCreate([ - VnfPopupService, - ServicePlanningService, - VnfInstanceDetailsService, - {provide: FormGroup, useClass: MockAppStore}, - {provide: NgRedux, useClass: MockAppStore} - ]); - - service = injector.get(VnfPopupService); - fg = injector.get(FormGroup); - }); - - describe('#updateVnfDataFromModel', () => { - it('update vnf data from model should return new vnf', (done: DoneFn) => { - let vnf: VNFModel = service.getModelFromResponse(data, ServiceNodeTypes.VF, '2017-388_ADIOD-vPE 1'); - - expect(vnf).toEqual(jasmine.any(VNFModel)); - done(); - }); - - it('update wrong vnf data from model should be undefined', (done: DoneFn) => { - let vnf: VNFModel = service.getModelFromResponse(data, ServiceNodeTypes.VF, '2017-388_ADIOD-vPE 3'); - - expect(vnf).toBeUndefined(); - done(); - }); - - it('update vfModule data from model should return new vfModule', (done: DoneFn) => { - let vfModule: VfModule = service.getModelFromResponse(data, ServiceNodeTypes.VFmodule, '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1'); - - expect(vfModule).toEqual(jasmine.any(VfModule)); - done(); - }); - - }); - - - describe('#onControlError', () => { - it('onControlError should return true if instanceName is not legal', (done: DoneFn) => { - form.controls['instanceName'].setValue('aaaa - aaa'); - - let result: boolean = service.onControlError(<any>servicePopupDataModel, form, false, false); - expect(result).toBeTruthy(); - done(); - }); - - it('onControlError should return false if instanceName is legal', (done: DoneFn) => { - - form.controls['instanceName'].setValue('aaaa'); - let result = service.onControlError(<any>servicePopupDataModel, form, false, false); - expect(result).toBeFalsy(); - done(); - }); - - it('onControlError should return true if instanceName is not unique', (done: DoneFn) => { - - form.controls['instanceName'].setValue('aaaa'); - let result = service.onControlError(<any>servicePopupDataModel, form, true, false); - expect(result).toBeTruthy(); - done(); - }); - - it('onControlError should return true if lcpRegions is empty', (done: DoneFn) => { - servicePopupDataModel.vnfPopupDataModel['lcpRegions'] = []; - let result = service.onControlError(<any>servicePopupDataModel, form, true, false); - expect(result).toBeTruthy(); - done(); - }); - - it('onControlError should return true if isNotUniqueVolumeGroupName is true', (done: DoneFn) => { - let result = service.onControlError(<any>servicePopupDataModel, form, true, true); - expect(result).toBeTruthy(); - done(); - }) - }); - - - function generateServicePopupDataModel() { - return { - 'vnfPopupDataModel': JSON.parse('{"tenants" : [1,2,3],"lcpRegions":[1,2,3],"lcpRegionsTenantsMap":{},"productFamilies":[1,2,3],"lineOfBusinesses":[{"id":"ECOMP","name":"ECOMP"},{"id":"zzz1","name":"zzz1"}],"platforms":[{"id":"platform","name":"platform"},{"id":"xxx1","name":"xxx1"}],"rollbackOnFailure":[{"id":"true","name":"Rollback"}]}') - } - } - - function generateFormGroup() { - return new FormGroup({ - productFamilyId: new FormControl(), - lcpCloudRegionId: new FormControl(Validators.required), - tenantId: new FormControl({value: null, disabled: false}, Validators.required), - legacyRegion: new FormControl(), - lineOfBusiness: new FormControl(), - platformName: new FormControl(Validators.required), - instanceName: new FormControl({value: null}, Validators.compose([Validators.required, NumbersLettersUnderscoreValidator.valid])) - }); - } - - function generateModelData() { - return JSON.parse(JSON.stringify( - { - 'service': { - 'uuid': '2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd', - 'invariantUuid': 'e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0', - 'name': 'action-data', - 'version': '1.0', - 'toscaModelURL': null, - 'category': '', - 'serviceType': '', - 'serviceRole': '', - 'description': '', - 'serviceEcompNaming': 'true', - 'instantiationType': 'ClientConfig', - 'inputs': { - '2017488_adiodvpe0_ASN': { - 'type': 'string', - 'description': 'AV/PE', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'AV_vPE' - }, - 'adiodvpe0_bandwidth': { - 'type': 'string', - 'description': 'Requested VPE bandwidth', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': '10' - }, - '2017488_adiodvpe0_vnf_instance_name': { - 'type': 'string', - 'description': 'The hostname assigned to the vpe.', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'mtnj309me6' - }, - '2017488_adiodvpe0_vnf_config_template_version': { - 'type': 'string', - 'description': 'VPE Software Version', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': '17.2' - }, - '2017488_adiodvpe0_AIC_CLLI': { - 'type': 'string', - 'description': 'AIC Site CLLI', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'ATLMY8GA' - }, - 'adiodvpe0_bandwidth_units': { - 'type': 'string', - 'description': 'Units of bandwidth', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'Gbps' - } - } - }, - 'vnfs': { - '2017-388_ADIOD-vPE 1': { - 'uuid': '0903e1c0-8e03-4936-b5c2-260653b96413', - 'invariantUuid': '00beb8f9-6d39-452f-816d-c709b9cbb87d', - 'description': 'Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM', - 'name': '2017-388_ADIOD-vPE', - 'version': '1.0', - 'customizationUuid': '280dec31-f16d-488b-9668-4aae55d6648a', - 'inputs': { - 'vnf_config_template_version': { - 'type': 'string', - 'description': 'VPE Software Version', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': '17.2' - }, - 'bandwidth_units': { - 'type': 'string', - 'description': 'Units of bandwidth', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'Gbps' - }, - 'bandwidth': { - 'type': 'string', - 'description': 'Requested VPE bandwidth', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': '10' - }, - 'AIC_CLLI': { - 'type': 'string', - 'description': 'AIC Site CLLI', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'ATLMY8GA' - }, - 'ASN': { - 'type': 'string', - 'description': 'AV/PE', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'AV_vPE' - }, - 'vnf_instance_name': { - 'type': 'string', - 'description': 'The hostname assigned to the vpe.', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'mtnj309me6' - } - }, - 'commands': { - 'vnf_config_template_version': { - 'displayName': 'vnf_config_template_version', - 'command': 'get_input', - 'inputName': '2017488_adiodvpe0_vnf_config_template_version' - }, - 'bandwidth_units': { - 'displayName': 'bandwidth_units', - 'command': 'get_input', - 'inputName': 'adiodvpe0_bandwidth_units' - }, - 'bandwidth': {'displayName': 'bandwidth', 'command': 'get_input', 'inputName': 'adiodvpe0_bandwidth'}, - 'AIC_CLLI': {'displayName': 'AIC_CLLI', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_AIC_CLLI'}, - 'ASN': {'displayName': 'ASN', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_ASN'}, - 'vnf_instance_name': { - 'displayName': 'vnf_instance_name', - 'command': 'get_input', - 'inputName': '2017488_adiodvpe0_vnf_instance_name' - } - }, - 'properties': { - 'vmxvre_retype': 'RE-VMX', - 'vnf_config_template_version': 'get_input:2017488_adiodvpe0_vnf_config_template_version', - 'sriov44_net_id': '48d399b3-11ee-48a8-94d2-f0ea94d6be8d', - 'int_ctl_net_id': '2f323477-6936-4d01-ac53-d849430281d9', - 'vmxvpfe_sriov41_0_port_mac': '00:11:22:EF:AC:DF', - 'int_ctl_net_name': 'VMX-INTXI', - 'vmx_int_ctl_prefix': '128.0.0.0', - 'sriov43_net_id': 'da349ca1-6de9-4548-be88-2d88e99bfef5', - 'sriov42_net_id': '760669ba-013d-4d9b-b0e7-4151fe2e6279', - 'sriov41_net_id': '25ad52d5-c165-40f8-b3b0-ddfc2373280a', - 'nf_type': 'vPE', - 'vmxvpfe_int_ctl_ip_1': '128.0.0.16', - 'is_AVPN_service': 'false', - 'vmx_RSG_name': 'vREXI-affinity', - 'vmx_int_ctl_forwarding': 'l2', - 'vmxvre_oam_ip_0': '10.40.123.5', - 'vmxvpfe_sriov44_0_port_mac': '00:11:22:EF:AC:DF', - 'vmxvpfe_sriov41_0_port_vlanstrip': 'false', - 'vmxvpfe_sriov42_0_port_vlanfilter': '4001', - 'vmxvpfe_sriov44_0_port_unknownunicastallow': 'true', - 'vmxvre_image_name_0': 'VRE-ENGINE_17.2-S2.1.qcow2', - 'vmxvre_instance': '0', - 'vmxvpfe_sriov43_0_port_mac': '00:11:22:EF:AC:DF', - 'vmxvre_flavor_name': 'ns.c1r16d32.v5', - 'vmxvpfe_volume_size_0': '40.0', - 'vmxvpfe_sriov43_0_port_vlanfilter': '4001', - 'nf_naming': '{ecomp_generated_naming=true}', - 'nf_naming_code': 'Navneet', - 'vmxvre_name_0': 'vREXI', - 'vmxvpfe_sriov42_0_port_vlanstrip': 'false', - 'vmxvpfe_volume_name_0': 'vPFEXI_FBVolume', - 'vmx_RSG_id': 'bd89a33c-13c3-4a04-8fde-1a57eb123141', - 'vmxvpfe_image_name_0': 'VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2', - 'vmxvpfe_sriov43_0_port_unknownunicastallow': 'true', - 'vmxvpfe_sriov44_0_port_unknownmulticastallow': 'true', - 'vmxvre_console': 'vidconsole', - 'vmxvpfe_sriov44_0_port_vlanfilter': '4001', - 'vmxvpfe_sriov42_0_port_mac': '00:11:22:EF:AC:DF', - 'vmxvpfe_volume_id_0': '47cede15-da2f-4397-a101-aa683220aff3', - 'vmxvpfe_sriov42_0_port_unknownmulticastallow': 'true', - 'vmxvpfe_sriov44_0_port_vlanstrip': 'false', - 'vf_module_id': '123', - 'nf_function': 'JAI', - 'vmxvpfe_sriov43_0_port_unknownmulticastallow': 'true', - 'vmxvre_int_ctl_ip_0': '128.0.0.1', - 'AIC_CLLI': 'get_input:2017488_adiodvpe0_AIC_CLLI', - 'vnf_name': 'mtnj309me6vre', - 'vmxvpfe_sriov41_0_port_unknownunicastallow': 'true', - 'vmxvre_volume_type_1': 'HITACHI', - 'vmxvpfe_sriov44_0_port_broadcastallow': 'true', - 'vmxvre_volume_type_0': 'HITACHI', - 'vmxvpfe_volume_type_0': 'HITACHI', - 'vmxvpfe_sriov43_0_port_broadcastallow': 'true', - 'bandwidth_units': 'get_input:adiodvpe0_bandwidth_units', - 'vnf_id': '123', - 'vmxvre_oam_prefix': '24', - 'availability_zone_0': 'mtpocfo-kvm-az01', - 'ASN': 'get_input:2017488_adiodvpe0_ASN', - 'vmxvre_chassis_i2cid': '161', - 'vmxvpfe_name_0': 'vPFEXI', - 'bandwidth': 'get_input:adiodvpe0_bandwidth', - 'availability_zone_max_count': '1', - 'vmxvre_volume_size_0': '45.0', - 'vmxvre_volume_size_1': '50.0', - 'vmxvpfe_sriov42_0_port_broadcastallow': 'true', - 'vmxvre_oam_gateway': '10.40.123.1', - 'vmxvre_volume_name_1': 'vREXI_FAVolume', - 'vmxvre_ore_present': '0', - 'vmxvre_volume_name_0': 'vREXI_FBVolume', - 'vmxvre_type': '0', - 'vnf_instance_name': 'get_input:2017488_adiodvpe0_vnf_instance_name', - 'vmxvpfe_sriov41_0_port_unknownmulticastallow': 'true', - 'oam_net_id': 'b95eeb1d-d55d-4827-abb4-8ebb94941429', - 'vmx_int_ctl_len': '24', - 'vmxvpfe_sriov43_0_port_vlanstrip': 'false', - 'vmxvpfe_sriov41_0_port_broadcastallow': 'true', - 'vmxvre_volume_id_1': '6e86797e-03cd-4fdc-ba72-2957119c746d', - 'vmxvpfe_sriov41_0_port_vlanfilter': '4001', - 'nf_role': 'Testing', - 'vmxvre_volume_id_0': 'f4eacb79-f687-4e9d-b760-21847c8bb15a', - 'vmxvpfe_sriov42_0_port_unknownunicastallow': 'true', - 'vmxvpfe_flavor_name': 'ns.c20r16d25.v5' - }, - 'type': 'VF', - 'modelCustomizationName': '2017-388_ADIOD-vPE 1', - 'vfModules': {}, - 'volumeGroups': {} - }, - '2017-388_ADIOD-vPE 0': { - 'uuid': 'afacccf6-397d-45d6-b5ae-94c39734b168', - 'invariantUuid': '72e465fe-71b1-4e7b-b5ed-9496118ff7a8', - 'description': 'Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM', - 'name': '2017-388_ADIOD-vPE', - 'version': '4.0', - 'customizationUuid': 'b3c76f73-eeb5-4fb6-9d31-72a889f1811c', - 'inputs': { - 'vnf_config_template_version': { - 'type': 'string', - 'description': 'VPE Software Version', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': '17.2' - }, - 'bandwidth_units': { - 'type': 'string', - 'description': 'Units of bandwidth', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'Gbps' - }, - 'bandwidth': { - 'type': 'string', - 'description': 'Requested VPE bandwidth', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': '10' - }, - 'AIC_CLLI': { - 'type': 'string', - 'description': 'AIC Site CLLI', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'ATLMY8GA' - }, - 'ASN': { - 'type': 'string', - 'description': 'AV/PE', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'AV_vPE' - }, - 'vnf_instance_name': { - 'type': 'string', - 'description': 'The hostname assigned to the vpe.', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'mtnj309me6' - } - }, - 'commands': { - 'vnf_config_template_version': { - 'displayName': 'vnf_config_template_version', - 'command': 'get_input', - 'inputName': '2017488_adiodvpe0_vnf_config_template_version' - }, - 'bandwidth_units': { - 'displayName': 'bandwidth_units', - 'command': 'get_input', - 'inputName': 'adiodvpe0_bandwidth_units' - }, - 'bandwidth': {'displayName': 'bandwidth', 'command': 'get_input', 'inputName': 'adiodvpe0_bandwidth'}, - 'AIC_CLLI': {'displayName': 'AIC_CLLI', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_AIC_CLLI'}, - 'ASN': {'displayName': 'ASN', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_ASN'}, - 'vnf_instance_name': { - 'displayName': 'vnf_instance_name', - 'command': 'get_input', - 'inputName': '2017488_adiodvpe0_vnf_instance_name' - } - }, - 'properties': { - 'vmxvre_retype': 'RE-VMX', - 'vnf_config_template_version': 'get_input:2017488_adiodvpe0_vnf_config_template_version', - 'sriov44_net_id': '48d399b3-11ee-48a8-94d2-f0ea94d6be8d', - 'int_ctl_net_id': '2f323477-6936-4d01-ac53-d849430281d9', - 'vmxvpfe_sriov41_0_port_mac': '00:11:22:EF:AC:DF', - 'int_ctl_net_name': 'VMX-INTXI', - 'vmx_int_ctl_prefix': '128.0.0.0', - 'sriov43_net_id': 'da349ca1-6de9-4548-be88-2d88e99bfef5', - 'sriov42_net_id': '760669ba-013d-4d9b-b0e7-4151fe2e6279', - 'sriov41_net_id': '25ad52d5-c165-40f8-b3b0-ddfc2373280a', - 'nf_type': 'vPE', - 'vmxvpfe_int_ctl_ip_1': '128.0.0.16', - 'is_AVPN_service': 'false', - 'vmx_RSG_name': 'vREXI-affinity', - 'vmx_int_ctl_forwarding': 'l2', - 'vmxvre_oam_ip_0': '10.40.123.5', - 'vmxvpfe_sriov44_0_port_mac': '00:11:22:EF:AC:DF', - 'vmxvpfe_sriov41_0_port_vlanstrip': 'false', - 'vmxvpfe_sriov42_0_port_vlanfilter': '4001', - 'vmxvpfe_sriov44_0_port_unknownunicastallow': 'true', - 'vmxvre_image_name_0': 'VRE-ENGINE_17.2-S2.1.qcow2', - 'vmxvre_instance': '0', - 'vmxvpfe_sriov43_0_port_mac': '00:11:22:EF:AC:DF', - 'vmxvre_flavor_name': 'ns.c1r16d32.v5', - 'vmxvpfe_volume_size_0': '40.0', - 'vmxvpfe_sriov43_0_port_vlanfilter': '4001', - 'nf_naming': '{ecomp_generated_naming=true}', - 'nf_naming_code': 'Navneet', - 'vmxvre_name_0': 'vREXI', - 'vmxvpfe_sriov42_0_port_vlanstrip': 'false', - 'vmxvpfe_volume_name_0': 'vPFEXI_FBVolume', - 'vmx_RSG_id': 'bd89a33c-13c3-4a04-8fde-1a57eb123141', - 'vmxvpfe_image_name_0': 'VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2', - 'vmxvpfe_sriov43_0_port_unknownunicastallow': 'true', - 'vmxvpfe_sriov44_0_port_unknownmulticastallow': 'true', - 'vmxvre_console': 'vidconsole', - 'vmxvpfe_sriov44_0_port_vlanfilter': '4001', - 'vmxvpfe_sriov42_0_port_mac': '00:11:22:EF:AC:DF', - 'vmxvpfe_volume_id_0': '47cede15-da2f-4397-a101-aa683220aff3', - 'vmxvpfe_sriov42_0_port_unknownmulticastallow': 'true', - 'vmxvpfe_sriov44_0_port_vlanstrip': 'false', - 'vf_module_id': '123', - 'nf_function': 'JAI', - 'vmxvpfe_sriov43_0_port_unknownmulticastallow': 'true', - 'vmxvre_int_ctl_ip_0': '128.0.0.1', - 'AIC_CLLI': 'get_input:2017488_adiodvpe0_AIC_CLLI', - 'vnf_name': 'mtnj309me6vre', - 'vmxvpfe_sriov41_0_port_unknownunicastallow': 'true', - 'vmxvre_volume_type_1': 'HITACHI', - 'vmxvpfe_sriov44_0_port_broadcastallow': 'true', - 'vmxvre_volume_type_0': 'HITACHI', - 'vmxvpfe_volume_type_0': 'HITACHI', - 'vmxvpfe_sriov43_0_port_broadcastallow': 'true', - 'bandwidth_units': 'get_input:adiodvpe0_bandwidth_units', - 'vnf_id': '123', - 'vmxvre_oam_prefix': '24', - 'availability_zone_0': 'mtpocfo-kvm-az01', - 'ASN': 'get_input:2017488_adiodvpe0_ASN', - 'vmxvre_chassis_i2cid': '161', - 'vmxvpfe_name_0': 'vPFEXI', - 'bandwidth': 'get_input:adiodvpe0_bandwidth', - 'availability_zone_max_count': '1', - 'vmxvre_volume_size_0': '45.0', - 'vmxvre_volume_size_1': '50.0', - 'vmxvpfe_sriov42_0_port_broadcastallow': 'true', - 'vmxvre_oam_gateway': '10.40.123.1', - 'vmxvre_volume_name_1': 'vREXI_FAVolume', - 'vmxvre_ore_present': '0', - 'vmxvre_volume_name_0': 'vREXI_FBVolume', - 'vmxvre_type': '0', - 'vnf_instance_name': 'get_input:2017488_adiodvpe0_vnf_instance_name', - 'vmxvpfe_sriov41_0_port_unknownmulticastallow': 'true', - 'oam_net_id': 'b95eeb1d-d55d-4827-abb4-8ebb94941429', - 'vmx_int_ctl_len': '24', - 'vmxvpfe_sriov43_0_port_vlanstrip': 'false', - 'vmxvpfe_sriov41_0_port_broadcastallow': 'true', - 'vmxvre_volume_id_1': '6e86797e-03cd-4fdc-ba72-2957119c746d', - 'vmxvpfe_sriov41_0_port_vlanfilter': '4001', - 'nf_role': 'Testing', - 'vmxvre_volume_id_0': 'f4eacb79-f687-4e9d-b760-21847c8bb15a', - 'vmxvpfe_sriov42_0_port_unknownunicastallow': 'true', - 'vmxvpfe_flavor_name': 'ns.c20r16d25.v5' - }, - 'type': 'VF', - 'modelCustomizationName': '2017-388_ADIOD-vPE 0', - 'vfModules': {}, - 'volumeGroups': {} - }, - '2017488_ADIODvPE 0': { - 'uuid': '69e09f68-8b63-4cc9-b9ff-860960b5db09', - 'invariantUuid': '72e465fe-71b1-4e7b-b5ed-9496118ff7a8', - 'description': 'Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM', - 'name': '2017488_ADIODvPE', - 'version': '5.0', - 'customizationUuid': '1da7b585-5e61-4993-b95e-8e6606c81e45', - 'inputs': { - 'vnf_config_template_version': { - 'type': 'string', - 'description': 'VPE Software Version', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': '17.2' - }, - 'bandwidth_units': { - 'type': 'string', - 'description': 'Units of bandwidth', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'Gbps' - }, - 'bandwidth': { - 'type': 'string', - 'description': 'Requested VPE bandwidth', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': '10' - }, - 'AIC_CLLI': { - 'type': 'string', - 'description': 'AIC Site CLLI', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'ATLMY8GA' - }, - 'ASN': { - 'type': 'string', - 'description': 'AV/PE', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'AV_vPE' - }, - 'vnf_instance_name': { - 'type': 'string', - 'description': 'The hostname assigned to the vpe.', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'mtnj309me6' - } - }, - 'commands': { - 'vnf_config_template_version': { - 'displayName': 'vnf_config_template_version', - 'command': 'get_input', - 'inputName': '2017488_adiodvpe0_vnf_config_template_version' - }, - 'bandwidth_units': { - 'displayName': 'bandwidth_units', - 'command': 'get_input', - 'inputName': 'adiodvpe0_bandwidth_units' - }, - 'bandwidth': {'displayName': 'bandwidth', 'command': 'get_input', 'inputName': 'adiodvpe0_bandwidth'}, - 'AIC_CLLI': {'displayName': 'AIC_CLLI', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_AIC_CLLI'}, - 'ASN': {'displayName': 'ASN', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_ASN'}, - 'vnf_instance_name': { - 'displayName': 'vnf_instance_name', - 'command': 'get_input', - 'inputName': '2017488_adiodvpe0_vnf_instance_name' - } - }, - 'properties': { - 'vmxvre_retype': 'RE-VMX', - 'vnf_config_template_version': 'get_input:2017488_adiodvpe0_vnf_config_template_version', - 'sriov44_net_id': '48d399b3-11ee-48a8-94d2-f0ea94d6be8d', - 'int_ctl_net_id': '2f323477-6936-4d01-ac53-d849430281d9', - 'vmxvpfe_sriov41_0_port_mac': '00:11:22:EF:AC:DF', - 'int_ctl_net_name': 'VMX-INTXI', - 'vmx_int_ctl_prefix': '128.0.0.0', - 'sriov43_net_id': 'da349ca1-6de9-4548-be88-2d88e99bfef5', - 'sriov42_net_id': '760669ba-013d-4d9b-b0e7-4151fe2e6279', - 'sriov41_net_id': '25ad52d5-c165-40f8-b3b0-ddfc2373280a', - 'nf_type': 'vPE', - 'vmxvpfe_int_ctl_ip_1': '128.0.0.16', - 'is_AVPN_service': 'false', - 'vmx_RSG_name': 'vREXI-affinity', - 'vmx_int_ctl_forwarding': 'l2', - 'vmxvre_oam_ip_0': '10.40.123.5', - 'vmxvpfe_sriov44_0_port_mac': '00:11:22:EF:AC:DF', - 'vmxvpfe_sriov41_0_port_vlanstrip': 'false', - 'vmxvpfe_sriov42_0_port_vlanfilter': '4001', - 'vmxvpfe_sriov44_0_port_unknownunicastallow': 'true', - 'vmxvre_image_name_0': 'VRE-ENGINE_17.2-S2.1.qcow2', - 'vmxvre_instance': '0', - 'vmxvpfe_sriov43_0_port_mac': '00:11:22:EF:AC:DF', - 'vmxvre_flavor_name': 'ns.c1r16d32.v5', - 'vmxvpfe_volume_size_0': '40.0', - 'vmxvpfe_sriov43_0_port_vlanfilter': '4001', - 'nf_naming': '{ecomp_generated_naming=true}', - 'nf_naming_code': 'Navneet', - 'vmxvre_name_0': 'vREXI', - 'vmxvpfe_sriov42_0_port_vlanstrip': 'false', - 'vmxvpfe_volume_name_0': 'vPFEXI_FBVolume', - 'vmx_RSG_id': 'bd89a33c-13c3-4a04-8fde-1a57eb123141', - 'vmxvpfe_image_name_0': 'VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2', - 'vmxvpfe_sriov43_0_port_unknownunicastallow': 'true', - 'vmxvpfe_sriov44_0_port_unknownmulticastallow': 'true', - 'vmxvre_console': 'vidconsole', - 'vmxvpfe_sriov44_0_port_vlanfilter': '4001', - 'vmxvpfe_sriov42_0_port_mac': '00:11:22:EF:AC:DF', - 'vmxvpfe_volume_id_0': '47cede15-da2f-4397-a101-aa683220aff3', - 'vmxvpfe_sriov42_0_port_unknownmulticastallow': 'true', - 'vmxvpfe_sriov44_0_port_vlanstrip': 'false', - 'vf_module_id': '123', - 'nf_function': 'JAI', - 'vmxvpfe_sriov43_0_port_unknownmulticastallow': 'true', - 'vmxvre_int_ctl_ip_0': '128.0.0.1', - 'AIC_CLLI': 'get_input:2017488_adiodvpe0_AIC_CLLI', - 'vnf_name': 'mtnj309me6vre', - 'vmxvpfe_sriov41_0_port_unknownunicastallow': 'true', - 'vmxvre_volume_type_1': 'HITACHI', - 'vmxvpfe_sriov44_0_port_broadcastallow': 'true', - 'vmxvre_volume_type_0': 'HITACHI', - 'vmxvpfe_volume_type_0': 'HITACHI', - 'vmxvpfe_sriov43_0_port_broadcastallow': 'true', - 'bandwidth_units': 'get_input:adiodvpe0_bandwidth_units', - 'vnf_id': '123', - 'vmxvre_oam_prefix': '24', - 'availability_zone_0': 'mtpocfo-kvm-az01', - 'ASN': 'get_input:2017488_adiodvpe0_ASN', - 'vmxvre_chassis_i2cid': '161', - 'vmxvpfe_name_0': 'vPFEXI', - 'bandwidth': 'get_input:adiodvpe0_bandwidth', - 'availability_zone_max_count': '1', - 'vmxvre_volume_size_0': '45.0', - 'vmxvre_volume_size_1': '50.0', - 'vmxvpfe_sriov42_0_port_broadcastallow': 'true', - 'vmxvre_oam_gateway': '10.40.123.1', - 'vmxvre_volume_name_1': 'vREXI_FAVolume', - 'vmxvre_ore_present': '0', - 'vmxvre_volume_name_0': 'vREXI_FBVolume', - 'vmxvre_type': '0', - 'vnf_instance_name': 'get_input:2017488_adiodvpe0_vnf_instance_name', - 'vmxvpfe_sriov41_0_port_unknownmulticastallow': 'true', - 'oam_net_id': 'b95eeb1d-d55d-4827-abb4-8ebb94941429', - 'vmx_int_ctl_len': '24', - 'vmxvpfe_sriov43_0_port_vlanstrip': 'false', - 'vmxvpfe_sriov41_0_port_broadcastallow': 'true', - 'vmxvre_volume_id_1': '6e86797e-03cd-4fdc-ba72-2957119c746d', - 'vmxvpfe_sriov41_0_port_vlanfilter': '4001', - 'nf_role': 'Testing', - 'vmxvre_volume_id_0': 'f4eacb79-f687-4e9d-b760-21847c8bb15a', - 'vmxvpfe_sriov42_0_port_unknownunicastallow': 'true', - 'vmxvpfe_flavor_name': 'ns.c20r16d25.v5' - }, - 'type': 'VF', - 'modelCustomizationName': '2017488_ADIODvPE 0', - 'vfModules': { - '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1': { - 'uuid': '25284168-24bb-4698-8cb4-3f509146eca5', - 'invariantUuid': '7253ff5c-97f0-4b8b-937c-77aeb4d79aa1', - 'customizationUuid': 'f7e7c365-60cf-49a9-9ebf-a1aa11b9d401', - 'description': null, - 'name': '2017488AdiodVpe..ADIOD_vRE_BV..module-1', - 'version': '6', - 'modelCustomizationName': '2017488AdiodVpe..ADIOD_vRE_BV..module-1', - 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0}, - 'commands': {}, - 'volumeGroupAllowed': true, - 'inputs': { - '2017488_adiodvpe0_vnf_config_template_version': { - 'type': 'string', - 'description': 'VPE Software Version', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': '17.2' - }, - '2017488_adiodvpe0_AIC_CLLI': { - 'type': 'string', - 'description': 'AIC Site CLLI', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'ATLMY8GA' - } - } - }, - '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0': { - 'uuid': 'f8360508-3f17-4414-a2ed-6bc71161e8db', - 'invariantUuid': 'b34833bb-6aa9-4ad6-a831-70b06367a091', - 'customizationUuid': 'a55961b2-2065-4ab0-a5b7-2fcee1c227e3', - 'description': null, - 'name': '2017488AdiodVpe..ADIOD_base_vPE_BV..module-0', - 'version': '5', - 'modelCustomizationName': '2017488AdiodVpe..ADIOD_base_vPE_BV..module-0', - 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1}, - 'commands': {}, - 'volumeGroupAllowed': false, - 'inputs': { - '2017488_adiodvpe0_ASN': { - 'type': 'string', - 'description': 'AV/PE', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': 'AV_vPE' - }, - 'adiodvpe0_bandwidth': { - 'type': 'string', - 'description': 'Requested VPE bandwidth', - 'entry_schema': null, - 'constraints': [], - 'required': true, - 'default': '10' - } - } - }, - '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2': { - 'uuid': '0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a', - 'invariantUuid': 'eff8cc59-53a1-4101-aed7-8cf24ecf8339', - 'customizationUuid': '3cd946bb-50e0-40d8-96d3-c9023520b557', - 'description': null, - 'name': '2017488AdiodVpe..ADIOD_vPFE_BV..module-2', - 'version': '6', - 'modelCustomizationName': '2017488AdiodVpe..ADIOD_vPFE_BV..module-2', - 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0}, - 'commands': {}, - 'volumeGroupAllowed': true, - 'inputs': {} - } - }, - 'volumeGroups': { - '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1': { - 'uuid': '25284168-24bb-4698-8cb4-3f509146eca5', - 'invariantUuid': '7253ff5c-97f0-4b8b-937c-77aeb4d79aa1', - 'customizationUuid': 'f7e7c365-60cf-49a9-9ebf-a1aa11b9d401', - 'description': null, - 'name': '2017488AdiodVpe..ADIOD_vRE_BV..module-1', - 'version': '6', - 'modelCustomizationName': '2017488AdiodVpe..ADIOD_vRE_BV..module-1', - 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0} - }, - '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2': { - 'uuid': '0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a', - 'invariantUuid': 'eff8cc59-53a1-4101-aed7-8cf24ecf8339', - 'customizationUuid': '3cd946bb-50e0-40d8-96d3-c9023520b557', - 'description': null, - 'name': '2017488AdiodVpe..ADIOD_vPFE_BV..module-2', - 'version': '6', - 'modelCustomizationName': '2017488AdiodVpe..ADIOD_vPFE_BV..module-2', - 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0} - } - } - } - }, - 'vfModules': { - '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1': { - 'uuid': '25284168-24bb-4698-8cb4-3f509146eca5', - 'invariantUuid': '7253ff5c-97f0-4b8b-937c-77aeb4d79aa1', - 'customizationUuid': 'f7e7c365-60cf-49a9-9ebf-a1aa11b9d401', - 'description': null, - 'name': '2017488AdiodVpe..ADIOD_vRE_BV..module-1', - 'version': '6', - 'modelCustomizationName': '2017488AdiodVpe..ADIOD_vRE_BV..module-1', - 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0}, - 'commands': {}, - 'volumeGroupAllowed': true - }, - '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0': { - 'uuid': 'f8360508-3f17-4414-a2ed-6bc71161e8db', - 'invariantUuid': 'b34833bb-6aa9-4ad6-a831-70b06367a091', - 'customizationUuid': 'a55961b2-2065-4ab0-a5b7-2fcee1c227e3', - 'description': null, - 'name': '2017488AdiodVpe..ADIOD_base_vPE_BV..module-0', - 'version': '5', - 'modelCustomizationName': '2017488AdiodVpe..ADIOD_base_vPE_BV..module-0', - 'properties': {'minCountInstances': 1, 'maxCountInstances': 1, 'initialCount': 1}, - 'commands': {}, - 'volumeGroupAllowed': false - }, - '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2': { - 'uuid': '0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a', - 'invariantUuid': 'eff8cc59-53a1-4101-aed7-8cf24ecf8339', - 'customizationUuid': '3cd946bb-50e0-40d8-96d3-c9023520b557', - 'description': null, - 'name': '2017488AdiodVpe..ADIOD_vPFE_BV..module-2', - 'version': '6', - 'modelCustomizationName': '2017488AdiodVpe..ADIOD_vPFE_BV..module-2', - 'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0}, - 'commands': {}, - 'volumeGroupAllowed': true - } - }, - 'networks': {}, - 'collectionResource': {}, - 'configurations': {}, - 'serviceProxies': {}, - 'pnfs': {} - } - )) - } - -}); |