Merge "Introduced mocked SO workflows in VID FE"
authorIttay Stern <ittay.stern@att.com>
Mon, 18 Feb 2019 13:05:06 +0000 (13:05 +0000)
committerGerrit Code Review <gerrit@onap.org>
Mon, 18 Feb 2019 13:05:06 +0000 (13:05 +0000)
deliveries/pom.xml
epsdk-app-onap/pom.xml
vid-app-common/src/main/java/org/onap/vid/aai/PombaClientImpl.java
vid-app-common/src/main/java/org/onap/vid/controller/WebConfig.java
vid-app-common/src/main/java/org/onap/vid/services/AaiServiceImpl.java
vid-app-common/src/main/webapp/WEB-INF/conf/features.properties
vid-app-common/src/test/java/org/onap/vid/aai/PombaClientImplTest.java [new file with mode: 0644]
vid-app-common/src/test/java/org/onap/vid/controller/LocalWebConfig.java
vid-app-common/src/test/java/org/onap/vid/services/AaiServiceImplTest.java
vid-app-common/src/test/resources/pomba_request.json [new file with mode: 0644]

index 1b89e1e..13db1c7 100755 (executable)
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\r
-    <modelVersion>4.0.0</modelVersion>\r
-\r
-    <parent>\r
-        <groupId>org.onap.vid</groupId>\r
-        <artifactId>vid-parent</artifactId>\r
-        <version>4.0.0-SNAPSHOT</version>\r
-    </parent>\r
-\r
-    <packaging>pom</packaging>\r
-    <artifactId>vid-deliveries</artifactId>\r
-\r
-    <name>VID Deliveries</name>\r
-    <description>ONAP VID Deliveries</description>\r
-    <properties>\r
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\r
-        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\r
-        <docker.push.registry>${docker_registry}</docker.push.registry>\r
-        <docker.verbose>true</docker.verbose>\r
-    </properties>\r
-\r
-    <profiles>\r
-\r
-        <profile>\r
-            <id>docker-proxy</id>\r
-            <!-- activate profile if environment variable `http_proxy` is set -->\r
-            <activation>\r
-                <property>\r
-                    <name>env.http_proxy</name>\r
-                </property>\r
-            </activation>\r
-            <properties>\r
-                <docker.buildArg.http_proxy>${env.http_proxy}</docker.buildArg.http_proxy>\r
-            </properties>\r
-        </profile>\r
-\r
-    </profiles>\r
-\r
-    <build>\r
-        <finalName>${project.artifactId}-${project.version}</finalName>\r
-        <plugins>\r
-            <plugin>\r
-                <groupId>io.fabric8</groupId>\r
-                <artifactId>docker-maven-plugin</artifactId>\r
-                <version>0.28.0</version>\r
-\r
-                <configuration>\r
-                    <verbose>true</verbose>\r
-                    <apiVersion>1.23</apiVersion>\r
-                    <images>\r
-                        <image>\r
-                            <name>onap/vid:${project.version}</name>\r
-                            <build>\r
-                                <cleanup>remove</cleanup>\r
-                                <dockerFileDir>docker-files</dockerFileDir>\r
-                                <assembly>\r
-                                    <basedir>/</basedir>\r
-                                    <user>vidadmin:vidadmin:vidadmin</user>\r
-                                    <descriptor>assembly/assembly-for-plugin.xml</descriptor>\r
-                                </assembly>\r
-                                <tags>\r
-                                    <tag>4.0-STAGING-latest</tag>\r
-                                    <tag>latest</tag>\r
-                                </tags>\r
-\r
-                            </build>\r
-                        </image>\r
-                    </images>\r
-                </configuration>\r
-\r
-                <executions>\r
-                    <execution>\r
-                        <id>generate-image</id>\r
-                        <phase>package</phase>\r
-                        <goals>\r
-                            <goal>build</goal>\r
-                        </goals>\r
-                    </execution>\r
-\r
-                    <execution>\r
-                        <id>push-image</id>\r
-                        <phase>deploy</phase>\r
-                        <goals>\r
-                            <goal>build</goal>\r
-                            <goal>push</goal>\r
-                        </goals>\r
-                    </execution>\r
-                </executions>\r
-\r
-            </plugin>\r
-\r
-            <plugin>\r
-                <groupId>org.apache.maven.plugins</groupId>\r
-                <artifactId>maven-deploy-plugin</artifactId>\r
-                <version>2.8</version>\r
-                <configuration>\r
-                    <skip>true</skip>\r
-                </configuration>\r
-            </plugin>\r
-        </plugins>\r
-    </build>\r
-\r
-</project>\r
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.vid</groupId>
+        <artifactId>vid-parent</artifactId>
+        <version>4.0.0-SNAPSHOT</version>
+    </parent>
+
+    <packaging>pom</packaging>
+    <artifactId>vid-deliveries</artifactId>
+
+    <name>VID Deliveries</name>
+    <description>ONAP VID Deliveries</description>
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <docker.push.registry>${docker_registry}</docker.push.registry>
+        <docker.verbose>true</docker.verbose>
+        <docker.tag>${project.version}-${maven.build.timestamp}</docker.tag>
+        <docker.latest.tag>${project.version}-latest</docker.latest.tag>
+
+        <maven.build.timestamp.format>yyyyMMdd'T'HHmmss'Z'</maven.build.timestamp.format>
+    </properties>
+
+    <profiles>
+
+        <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>
+
+    <build>
+        <finalName>${project.artifactId}-${project.version}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>io.fabric8</groupId>
+                <artifactId>docker-maven-plugin</artifactId>
+                <version>0.28.0</version>
+
+                <configuration>
+                    <verbose>true</verbose>
+                    <apiVersion>1.23</apiVersion>
+                    <images>
+                        <image>
+                            <name>onap/vid:${project.version}</name>
+                            <build>
+                                <cleanup>remove</cleanup>
+                                <dockerFileDir>docker-files</dockerFileDir>
+                                <assembly>
+                                    <basedir>/</basedir>
+                                    <user>vidadmin:vidadmin:vidadmin</user>
+                                    <descriptor>assembly/assembly-for-plugin.xml</descriptor>
+                                </assembly>
+                                <tags>
+                                    <tag>4.0-STAGING-latest</tag>
+                                    <tag>latest</tag>
+                                    <tag>${docker.tag}</tag>
+                                    <tag>${docker.latest.tag}</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>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <version>2.8</version>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
index f2441b3..bf09f32 100755 (executable)
@@ -18,6 +18,7 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <epsdk.version>2.4.0</epsdk.version>
+        <jackson.version>2.9.7</jackson.version>
         <springframework.version>4.2.9.RELEASE</springframework.version>
         <hibernate.version>4.3.11.Final</hibernate.version>
         <!-- Skip assembling the zip; assemble via mvn -Dskipassembly=false .. -->
                 </dependencies>
             </plugin>
             <plugin>
-                               <groupId>org.sonarsource.scanner.maven</groupId>
-                <artifactId>sonar-maven-plugin</artifactId>
-                <version>3.3.0.603</version>
+              <groupId>org.sonarsource.scanner.maven</groupId>
+              <artifactId>sonar-maven-plugin</artifactId>
+              <version>3.3.0.603</version>
             </plugin>
             <plugin>
                 <groupId>org.jacoco</groupId>
             <artifactId>epsdk-app-common</artifactId>
             <version>${epsdk.version}</version>
             <type>jar</type>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.fasterxml.jackson.core</groupId>
-                    <artifactId>jackson-core</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.onap.vid</groupId>
             <artifactId>vid-app-common</artifactId>
             <version>${project.version}</version>
             <type>war</type>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.fasterxml.jackson.core</groupId>
-                    <artifactId>jackson-core</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.onap.vid</groupId>
             <groupId>org.onap.portal.sdk</groupId>
             <artifactId>epsdk-core</artifactId>
             <version>${epsdk.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.fasterxml.jackson.core</groupId>
-                    <artifactId>jackson-core</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.onap.portal.sdk</groupId>
             <artifactId>epsdk-analytics</artifactId>
             <version>${epsdk.version}</version>
             <exclusions>
-                <exclusion>
-                    <groupId>com.fasterxml.jackson.core</groupId>
-                    <artifactId>jackson-core</artifactId>
-                </exclusion>
                 <exclusion>
                     <groupId>com.lowagie</groupId>
                     <artifactId>itext</artifactId>
             <groupId>org.onap.portal.sdk</groupId>
             <artifactId>epsdk-workflow</artifactId>
             <version>${epsdk.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.fasterxml.jackson.core</groupId>
-                    <artifactId>jackson-core</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>com.att.eelf</groupId>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-annotations</artifactId>
-            <version>2.6.3</version>
+            <version>${jackson.version}</version>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-core</artifactId>
-            <version>2.8.6</version>
+            <version>${jackson.version}</version>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
-            <version>2.6.7.1</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.fasterxml.jackson.core</groupId>
-                    <artifactId>jackson-core</artifactId>
-                </exclusion>
-            </exclusions>
+            <version>${jackson.version}</version>
+        </dependency>
+        <!-- jackson-dataformat-* are to override elasticsearch-2.2.0 deps hell -->
+        <!-- (elasticsearch is an epsdk-app-common-2.4.0 dep) -->
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-smile</artifactId>
+            <version>${jackson.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-yaml</artifactId>
+            <version>${jackson.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.dataformat</groupId>
+            <artifactId>jackson-dataformat-cbor</artifactId>
+            <version>${jackson.version}</version>
         </dependency>
         <dependency>
             <groupId>com.mchange</groupId>
index 000628d..15fda82 100644 (file)
@@ -1,13 +1,13 @@
+
 package org.onap.vid.aai;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import javax.servlet.ServletContext;
 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
-import org.onap.portalsdk.core.util.SystemProperties;
 import org.onap.vid.model.PombaInstance.PombaRequest;
+import org.onap.vid.utils.SystemPropertiesWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import javax.servlet.ServletContext;
-
 public class PombaClientImpl implements PombaClientInterface {
 
     protected String fromAppId = "VidAaiController";
@@ -19,13 +19,14 @@ public class PombaClientImpl implements PombaClientInterface {
     @Autowired
     PombaRestInterface pombaRestInterface;
 
+    @Autowired
+    SystemPropertiesWrapper systemPropertiesWrapper;
 
     @Override
     public void verify(PombaRequest request) {
         String methodName = "doAaiPost";
         logger.debug(EELFLoggerDelegate.debugLogger, methodName + " start");
-        String uri = SystemProperties.getProperty("pomba.server.url");
-
+        String uri = systemPropertiesWrapper.getProperty("pomba.server.url");
 
         try {
             pombaRestInterface.RestPost(fromAppId, uri, new ObjectMapper().writeValueAsString(request));
index 68d5b71..8fe7c1f 100644 (file)
@@ -70,8 +70,9 @@ public class WebConfig {
     }
 
     @Bean
-    public AaiService getAaiService() {
-        return new AaiServiceImpl();
+    public AaiService getAaiService(AaiClientInterface aaiClient, AaiOverTLSClientInterface aaiOverTLSClient,
+        AaiResponseTranslator aaiResponseTranslator, AAITreeNodeBuilder aaiTreeNode, AAIServiceTree aaiServiceTree) {
+        return new AaiServiceImpl(aaiClient, aaiOverTLSClient, aaiResponseTranslator, aaiTreeNode, aaiServiceTree);
     }
 
     @Bean
index fe4a661..63da278 100644 (file)
@@ -63,23 +63,29 @@ public class AaiServiceImpl implements AaiService {
     private static final String CLOUD_REGION_NODE_TYPE = "cloud-region";
     private int indexOfSubscriberName = 6;
 
-    @Autowired
     private AaiClientInterface aaiClient;
-
-    @Autowired
     private AaiOverTLSClientInterface aaiOverTLSClient;
-
-    @Autowired
     private AaiResponseTranslator aaiResponseTranslator;
-
-    @Autowired
     private AAITreeNodeBuilder aaiTreeNode;
-
-    @Autowired
     private AAIServiceTree aaiServiceTree;
 
     private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(AaiServiceImpl.class);
 
+    @Autowired
+    public AaiServiceImpl(
+        AaiClientInterface aaiClient,
+        AaiOverTLSClientInterface aaiOverTLSClient,
+        AaiResponseTranslator aaiResponseTranslator,
+        AAITreeNodeBuilder aaiTreeNode,
+        AAIServiceTree aaiServiceTree)
+    {
+        this.aaiClient = aaiClient;
+        this.aaiOverTLSClient = aaiOverTLSClient;
+        this.aaiResponseTranslator = aaiResponseTranslator;
+        this.aaiTreeNode = aaiTreeNode;
+        this.aaiServiceTree = aaiServiceTree;
+    }
+
     private List<Service> convertModelToService(Model model) {
         List<Service> services = new ArrayList<>();
         String category = "";
@@ -332,13 +338,11 @@ public class AaiServiceImpl implements AaiService {
         AaiResponse<GetTenantsResponse[]> aaiGetTenantsResponse = aaiClient.getTenants(globalCustomerId, serviceType);
         GetTenantsResponse[] tenants = aaiGetTenantsResponse.getT();
         if (tenants != null) {
-            for (int i = 0; i < tenants.length; i++) {
-                tenants[i].isPermitted = roleValidator.isTenantPermitted(globalCustomerId, serviceType, tenants[i].tenantName);
+            for (GetTenantsResponse tenant : tenants) {
+                tenant.isPermitted = roleValidator.isTenantPermitted(globalCustomerId, serviceType, tenant.tenantName);
             }
         }
         return aaiGetTenantsResponse;
-
-
     }
 
     @Override
index 87b2d60..36f607f 100644 (file)
 
 FLAG_PNP_INSTANTIATION = true
 
-FLAG_ASYNC_INSTANTIATION = true
-FLAG_ASYNC_JOBS = true
 CREATE_INSTANCE_TEST = false
-EMPTY_DRAWING_BOARD_TEST = false
 FLAG_ADD_MSO_TESTAPI_FIELD = true
 FLAG_UNASSIGN_SERVICE = true
-FLAG_COLLECTION_RESOURCE_SUPPORT = true
-FLAG_NETWORK_TO_ASYNC_INSTANTIATION = false
 FLAG_SERVICE_MODEL_CACHE = true
 FLAG_SHOW_ASSIGNMENTS = true
 FLAG_SHOW_VERIFY_SERVICE = false
-FLAG_DUPLICATE_VNF = true
-FLAG_DEFAULT_VNF = true
-FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD = true
 FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS = true
-FLAG_A_LA_CARTE_AUDIT_INFO=true
-FLAG_5G_IN_NEW_INSTANTIATION_UI = true
 FLAG_PRESENT_PROVIDER_NETWORKS_ASSOCIATIONS = true
-FLAG_ASYNC_ALACARTE_VNF = true
-FLAG_ASYNC_ALACARTE_VFMODULE= true
-FLAG_SHIFT_VFMODULE_PARAMS_TO_VNF = true
-FLAG_EXP_ANY_ALACARTE_NEW_INSTANTIATION_UI=false
 FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST=true
 FLAG_1810_CR_LET_SELECTING_COLLECTOR_TYPE_UNCONDITIONALLY=true
 FLAG_1810_CR_SOFT_DELETE_ALACARTE_VF_MODULE = true
 FLAG_1810_AAI_LOCAL_CACHE = true
-FLAG_1902_NEW_VIEW_EDIT=false
 FLAG_EXP_USE_DEFAULT_HOST_NAME_VERIFIER = false
 
-FLAG_SUPPLEMENTARY_FILE = true
-FLAG_1902_VNF_GROUPING = true
+# Modern UI (Drawing-Board; View/Edit)
+# - - - - - - - - - - - - - - - - - -
+FLAG_COLLECTION_RESOURCE_SUPPORT = false
+FLAG_ASYNC_INSTANTIATION = false
+FLAG_ASYNC_JOBS = false
+EMPTY_DRAWING_BOARD_TEST = false
+FLAG_NETWORK_TO_ASYNC_INSTANTIATION = false
+FLAG_DUPLICATE_VNF = false
+FLAG_DEFAULT_VNF = false
+FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD = false
+FLAG_SHIFT_VFMODULE_PARAMS_TO_VNF = false
+FLAG_A_LA_CARTE_AUDIT_INFO = false
+FLAG_5G_IN_NEW_INSTANTIATION_UI = false
+FLAG_ASYNC_ALACARTE_VNF = false
+FLAG_ASYNC_ALACARTE_VFMODULE = false
+FLAG_EXP_ANY_ALACARTE_NEW_INSTANTIATION_UI = false
+FLAG_SUPPLEMENTARY_FILE = false
+FLAG_1902_NEW_VIEW_EDIT=false
+FLAG_1902_VNF_GROUPING = false
diff --git a/vid-app-common/src/test/java/org/onap/vid/aai/PombaClientImplTest.java b/vid-app-common/src/test/java/org/onap/vid/aai/PombaClientImplTest.java
new file mode 100644 (file)
index 0000000..b1c4139
--- /dev/null
@@ -0,0 +1,93 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright 2019 Nokia
+ * ================================================================================
+ * 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.mockito.BDDMockito.given;
+import static org.mockito.BDDMockito.then;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.Lists;
+import java.io.IOException;
+import java.net.URL;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.vid.model.PombaInstance.PombaRequest;
+import org.onap.vid.model.PombaInstance.ServiceInstance;
+import org.onap.vid.utils.SystemPropertiesWrapper;
+
+@RunWith(MockitoJUnitRunner.class)
+public class PombaClientImplTest {
+
+    @Mock
+    private SystemPropertiesWrapper systemPropertiesWrapper;
+    @Mock
+    private PombaRestInterface pombaRestInterface;
+    @InjectMocks
+    private PombaClientImpl pombaClient;
+
+    @Test
+    public void should_doHttpPost_withGivenPombaRequest() throws IOException {
+        //Given
+        String expectedUrl = "http://localhost/dummyUrl";
+        given(systemPropertiesWrapper.getProperty("pomba.server.url")).willReturn(expectedUrl);
+        String expectedPayload = readExpectedPombaJsonRequest();
+        PombaRequest pombaRequest = createPombaRequest();
+
+        //When
+        pombaClient.verify(pombaRequest);
+
+        //Then
+        then(pombaRestInterface).should().RestPost("VidAaiController", expectedUrl, expectedPayload);
+    }
+
+    private String readExpectedPombaJsonRequest() throws IOException {
+        URL url = PombaClientImplTest.class.getClassLoader().getResource("pomba_request.json");
+        PombaRequest expectedPombaRequest = new ObjectMapper().readValue(url, PombaRequest.class);
+        return new ObjectMapper().writeValueAsString(expectedPombaRequest);
+    }
+
+    private PombaRequest createPombaRequest() {
+        ServiceInstance serviceInstance1 = createServiceInstance("serviceType1", "serviceInstanceId1", "customerId1",
+            "modelVersion1", "modelInvariantId1");
+        ServiceInstance serviceInstance2 = createServiceInstance("serviceType2", "serviceInstanceId2", "customerId2",
+            "modelVersion2", "modelInvariantId2");
+
+        PombaRequest pombaRequest = new PombaRequest();
+        pombaRequest.serviceInstanceList = Lists.newArrayList(serviceInstance1, serviceInstance2);
+        return pombaRequest;
+    }
+
+    private ServiceInstance createServiceInstance(String serviceType, String serviceInstanceId, String customerId,
+        String modelVersionId, String modelInvariantId) {
+        ServiceInstance serviceInstance = new ServiceInstance();
+        serviceInstance.serviceType = serviceType;
+        serviceInstance.serviceInstanceId = serviceInstanceId;
+        serviceInstance.customerId = customerId;
+        serviceInstance.modelInvariantId = modelInvariantId;
+        serviceInstance.modelVersionId = modelVersionId;
+        return serviceInstance;
+    }
+
+}
\ No newline at end of file
index e0ab34c..c66b74d 100644 (file)
@@ -24,12 +24,15 @@ package org.onap.vid.controller;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.onap.vid.aai.AaiClient;
 import org.onap.vid.aai.AaiClientInterface;
+import org.onap.vid.aai.AaiOverTLSClientInterface;
 import org.onap.vid.aai.AaiResponseTranslator;
 import org.onap.vid.aai.model.PortDetailsTranslator;
 import org.onap.vid.aai.util.*;
 import org.onap.vid.asdc.AsdcClient;
 import org.onap.vid.asdc.parser.ToscaParserImpl2;
 import org.onap.vid.asdc.parser.VidNotionsBuilder;
+import org.onap.vid.services.AAIServiceTree;
+import org.onap.vid.services.AAITreeNodeBuilder;
 import org.onap.vid.services.AaiService;
 import org.onap.vid.services.AaiServiceImpl;
 import org.onap.vid.services.VidService;
@@ -62,8 +65,9 @@ public class LocalWebConfig {
     }
 
     @Bean
-    public AaiService getAaiService() {
-        return new AaiServiceImpl();
+    public AaiService getAaiService(AaiClientInterface aaiClient, AaiOverTLSClientInterface aaiOverTLSClient,
+        AaiResponseTranslator aaiResponseTranslator, AAITreeNodeBuilder aaiTreeNode, AAIServiceTree aaiServiceTree) {
+        return new AaiServiceImpl(aaiClient, aaiOverTLSClient, aaiResponseTranslator, aaiTreeNode, aaiServiceTree);
     }
 
     @Bean
index efa12f2..04f47d4 100644 (file)
 
 package org.onap.vid.services;
 
-import com.google.common.collect.ImmutableList;
-import io.joshworks.restclient.http.HttpResponse;
-import org.junit.Assert;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import javax.ws.rs.core.Response;
 import org.junit.Test;
+import org.onap.vid.aai.AaiClientInterface;
+import org.onap.vid.aai.AaiGetVnfResponse;
+import org.onap.vid.aai.AaiOverTLSClientInterface;
 import org.onap.vid.aai.AaiResponse;
-import org.onap.vid.aai.SubscriberFilteredResults;
-import org.onap.vid.aai.model.AaiGetOperationalEnvironments.OperationalEnvironmentList;
-import org.onap.vid.aai.model.AaiGetPnfs.Pnf;
+import org.onap.vid.aai.AaiResponseTranslator;
 import org.onap.vid.aai.model.AaiGetTenatns.GetTenantsResponse;
-import org.onap.vid.model.SubscriberList;
+import org.onap.vid.aai.model.VnfResult;
 import org.onap.vid.roles.RoleValidator;
 
-import java.util.List;
-
 public class AaiServiceImplTest {
 
-    private AaiServiceImpl createTestSubject() {
-        return new AaiServiceImpl();
-    }
+    private AaiClientInterface aaiClient = mock(AaiClientInterface.class);
+    private AaiOverTLSClientInterface aaiSslClient = mock(AaiOverTLSClientInterface.class);
+    private AaiResponseTranslator aaiResponseTranslator = mock(AaiResponseTranslator.class);
+    private AAITreeNodeBuilder aaiTreeNode = mock(AAITreeNodeBuilder.class);
+    private AAIServiceTree aaiServiceTree = mock(AAIServiceTree.class);
 
-    @Test
-    public void testGetFullSubscriberList() throws Exception {
-        AaiServiceImpl testSubject;
-        RoleValidator roleValidator = null;
-        SubscriberFilteredResults result;
-
-        // default test
-        try {
-            testSubject = createTestSubject();
-            result = testSubject.getFullSubscriberList(roleValidator);
-        } catch (
-
-        Exception e) {
-        }
-    }
+    private AaiServiceImpl aaiService = new AaiServiceImpl(
+        aaiClient, aaiSslClient, aaiResponseTranslator, aaiTreeNode, aaiServiceTree
+    );
 
     @Test
-    public void testGetOperationalEnvironments() throws Exception {
-        AaiServiceImpl testSubject;
-        String operationalEnvironmentType = "";
-        String operationalEnvironmentStatus = "";
-        AaiResponse<OperationalEnvironmentList> result;
-
-        // default test
-        try {
-            testSubject = createTestSubject();
-            result = testSubject.getOperationalEnvironments(operationalEnvironmentType, operationalEnvironmentStatus);
-        } catch (
-
-        Exception e) {
-        }
-    }
+    public void shouldRetrievePnf() {
+        // given
+        String globalCustomerId = "global_customer";
+        String serviceType = "service_type";
+        String modelVersionId = "model_version";
+        String modelInvariantId = "model_invariant_id";
+        String cloudRegion = "cloud_region";
+        String equipVendor = "equip_vendor";
+        String equipModel = "equip_model";
 
-    @Test
-    public void testGetFullSubscriberList_1() throws Exception {
-        AaiServiceImpl testSubject;
-        HttpResponse<SubscriberList> result;
-
-        // default test
-        try {
-            testSubject = createTestSubject();
-            result = testSubject.getFullSubscriberList();
-        } catch (
-
-        Exception e) {
-        }
-    }
+        AaiResponse response = mock(AaiResponse.class);
+        when(aaiClient.getPNFData(
+            globalCustomerId, serviceType, modelVersionId, modelInvariantId, cloudRegion, equipVendor, equipModel
+        )).thenReturn(response);
 
-    @Test
-    public void testGetSubscriberData() throws Exception {
-        AaiServiceImpl testSubject;
-        String subscriberId = "";
-        RoleValidator roleValidator = null;
-        AaiResponse result;
-
-        // default test
-        try {
-            testSubject = createTestSubject();
-            result = testSubject.getSubscriberData(subscriberId, roleValidator);
-        } catch (
-
-        Exception e) {
-        }
-    }
+        // when
+        AaiResponse actual = aaiService.getPNFData(
+            globalCustomerId, serviceType, modelVersionId, modelInvariantId, cloudRegion, equipVendor, equipModel
+        );
 
-    @Test
-    public void testGetServiceInstanceSearchResults() throws Exception {
-        AaiServiceImpl testSubject;
-        String subscriberId = "";
-        String instanceIdentifier = "";
-        RoleValidator roleValidator = null;
-        List<String> owningEntities = null;
-        List<String> projects = null;
-        AaiResponse result;
-
-        // test 1
-        testSubject = createTestSubject();
-        subscriberId = null;
-        instanceIdentifier = null;
-        result = testSubject.getServiceInstanceSearchResults(subscriberId, instanceIdentifier, roleValidator,
-                owningEntities, projects);
-        Assert.assertNotEquals(null, result);
-
-        /*/ test 2
-        testSubject = createTestSubject();
-        subscriberId = "";
-        instanceIdentifier = null;
-        result = testSubject.getServiceInstanceSearchResults(subscriberId, instanceIdentifier, roleValidator,
-                owningEntities, projects);
-        Assert.assertNotEquals(null, result);
-
-        // test 3
-        testSubject = createTestSubject();
-        instanceIdentifier = null;
-        subscriberId = null;
-        result = testSubject.getServiceInstanceSearchResults(subscriberId, instanceIdentifier, roleValidator,
-                owningEntities, projects);
-        Assert.assertEquals(null, result);
-
-        // test 4
-        testSubject = createTestSubject();
-        instanceIdentifier = "";
-        subscriberId = null;
-        result = testSubject.getServiceInstanceSearchResults(subscriberId, instanceIdentifier, roleValidator,
-                owningEntities, projects);
-        Assert.assertEquals(null, result);
-
-        // test 5
-        testSubject = createTestSubject();
-        owningEntities = null;
-        result = testSubject.getServiceInstanceSearchResults(subscriberId, instanceIdentifier, roleValidator,
-                owningEntities, projects);
-        Assert.assertEquals(null, result);
-
-        // test 6
-        testSubject = createTestSubject();
-        projects = null;
-        result = testSubject.getServiceInstanceSearchResults(subscriberId, instanceIdentifier, roleValidator,
-                owningEntities, projects);
-        Assert.assertEquals(null, result);*/
+        // then
+        assertThat(response).isEqualTo(actual);
     }
 
     @Test
-    public void testGetVersionByInvariantId() throws Exception {
-        AaiServiceImpl testSubject;
-        List<String> modelInvariantId = ImmutableList.of("some invariant id");
-
-        // default test
-        try {
-            testSubject = createTestSubject();
-            testSubject.getVersionByInvariantId(modelInvariantId);
-        } catch (
-
-        Exception e) {
-        }
-    }
+    @SuppressWarnings("unchecked")
+    public void shouldRetrieveSpecificPnf() {
+        // given
+        String pnfId = "some_pnf_id";
 
-    @Test
-    public void testGetSpecificPnf() throws Exception {
-        AaiServiceImpl testSubject;
-        String pnfId = "";
-        AaiResponse<Pnf> result;
-
-        // default test
-        try {
-            testSubject = createTestSubject();
-            result = testSubject.getSpecificPnf(pnfId);
-        } catch (
-
-        Exception e) {
-        }
-    }
+        AaiResponse response = mock(AaiResponse.class);
+        when(aaiClient.getSpecificPnf(pnfId)).thenReturn(response);
 
-    @Test
-    public void testGetPNFData() throws Exception {
-        AaiServiceImpl testSubject;
-        String globalCustomerId = "";
-        String serviceType = "";
-        String modelVersionId = "";
-        String modelInvariantId = "";
-        String cloudRegion = "";
-        String equipVendor = "";
-        String equipModel = "";
-        AaiResponse result;
-
-        // default test
-        try {
-            testSubject = createTestSubject();
-            result = testSubject.getPNFData(globalCustomerId, serviceType, modelVersionId, modelInvariantId,
-                    cloudRegion, equipVendor, equipModel);
-        } catch (
-
-        Exception e) {
-        }
-    }
+        // when
+        AaiResponse actual = aaiService.getSpecificPnf(pnfId);
 
-    @Test
-    public void testGetServices() throws Exception {
-        AaiServiceImpl testSubject;
-        RoleValidator roleValidator = null;
-        AaiResponse result;
-
-        // default test
-        try {
-            testSubject = createTestSubject();
-            result = testSubject.getServices(roleValidator);
-        } catch (
-
-        Exception e) {
-        }
+        // then
+        assertThat(response).isEqualTo(actual);
     }
 
     @Test
-    public void testGetTenants() throws Exception {
-        AaiServiceImpl testSubject;
-        String globalCustomerId = "";
-        String serviceType = "";
-        RoleValidator roleValidator = null;
-        AaiResponse<GetTenantsResponse[]> result;
-
-        // default test
-        try {
-            testSubject = createTestSubject();
-            result = testSubject.getTenants(globalCustomerId, serviceType, roleValidator);
-        } catch (
-
-        Exception e) {
-        }
-    }
+    public void shouldRetrieveTenantsByInvariantId() {
+        // given
+        List<String> modelInvariantId = new ArrayList<>();
 
-    @Test
-    public void testGetVNFData() throws Exception {
-        AaiServiceImpl testSubject;
-        String globalSubscriberId = "";
-        String serviceType = "";
-        String serviceInstanceId = "";
-        AaiResponse result;
-
-        // default test
-        try {
-            testSubject = createTestSubject();
-            result = testSubject.getVNFData(globalSubscriberId, serviceType, serviceInstanceId);
-        } catch (
-
-        Exception e) {
-        }
-    }
+        Response response = mock(Response.class);
+        when(aaiClient.getVersionByInvariantId(modelInvariantId)).thenReturn(response);
 
-    @Test
-    public void testGetVNFData_1() throws Exception {
-        AaiServiceImpl testSubject;
-        String globalSubscriberId = "";
-        String serviceType = "";
-
-        // default test
-        try {
-            testSubject = createTestSubject();
-            testSubject.getVNFData(globalSubscriberId, serviceType);
-        } catch (
-
-        Exception e) {
-        }
-    }
+        // when
+        Response actual = aaiService.getVersionByInvariantId(modelInvariantId);
 
-    @Test
-    public void testGetAaiZones() throws Exception {
-        AaiServiceImpl testSubject;
-        AaiResponse result;
-
-        // default test
-        try {
-            testSubject = createTestSubject();
-            result = testSubject.getAaiZones();
-        } catch (
-
-        Exception e) {
-        }
+        // then
+        assertThat(response).isEqualTo(actual);
     }
 
     @Test
-    public void testGetAicZoneForPnf() throws Exception {
-        AaiServiceImpl testSubject;
-        String globalCustomerId = "";
-        String serviceType = "";
-        String serviceId = "";
-        AaiResponse result;
-
-        // default test
-        try {
-            testSubject = createTestSubject();
-            result = testSubject.getAicZoneForPnf(globalCustomerId, serviceType, serviceId);
-        } catch (
-
-        Exception e) {
-        }
-    }
+    @SuppressWarnings("unchecked")
+    public void shouldRetrieveTenants() {
+        // given
+        String globalCustomerId = "global_customer";
+        String serviceType = "service_type";
 
-    @Test
-    public void testGetNodeTemplateInstances() throws Exception {
-        AaiServiceImpl testSubject;
-        String globalCustomerId = "";
-        String serviceType = "";
-        String modelVersionId = "";
-        String modelInvariantId = "";
-        String cloudRegion = "";
-        AaiResponse result;
-
-        // default test
-        try {
-            testSubject = createTestSubject();
-            result = testSubject.getNodeTemplateInstances(globalCustomerId, serviceType, modelVersionId,
-                    modelInvariantId, cloudRegion);
-        } catch (
-
-        Exception e) {
-        }
+        GetTenantsResponse permittedTenant = new GetTenantsResponse(
+            "cloud_region", "cloud_owner", "permitted_tenant", "tenant_id", false
+        );
+        GetTenantsResponse unpermittedTenant = new GetTenantsResponse(
+            "cloud_region", "cloud_owner", "unpermitted_tenant", "tenant_id", false
+        );
+
+        AaiResponse<GetTenantsResponse[]> response = mock(AaiResponse.class);
+        when(response.getT()).thenReturn(new GetTenantsResponse[]{ permittedTenant, unpermittedTenant });
+        when(aaiClient.getTenants(globalCustomerId, serviceType)).thenReturn(response);
+
+        RoleValidator roleValidator = mock(RoleValidator.class);
+        when(roleValidator.isTenantPermitted(globalCustomerId, serviceType, "permitted_tenant")).thenReturn(true);
+        when(roleValidator.isTenantPermitted(globalCustomerId, serviceType, "unpermitted_tenant")).thenReturn(false);
+
+        // when
+        AaiResponse actual = aaiService.getTenants(globalCustomerId, serviceType, roleValidator);
+
+        // then
+        assertThat(response).isEqualTo(actual);
+        assertThat(permittedTenant.isPermitted).isTrue();
+        assertThat(unpermittedTenant.isPermitted).isFalse();
     }
 
     @Test
-    public void testGetServicesByDistributionStatus() throws Exception {
-        AaiServiceImpl testSubject;
+    public void shouldRetrieveVNFs() {
+        // given
+        String globalSubscriber = "global_subscriber";
+        String serviceType = "service_type";
+        String serviceInstanceId = "service_instance";
+
+        AaiResponse response = mock(AaiResponse.class);
+        when(aaiClient.getVNFData(globalSubscriber, serviceType, serviceInstanceId)).thenReturn(response);
 
-        // default test
-        try {
-            testSubject = createTestSubject();
-            testSubject.getServicesByDistributionStatus();
-        } catch (
+        // when
+        AaiResponse actual = aaiService.getVNFData(globalSubscriber, serviceType, serviceInstanceId);
 
-        Exception e) {
-        }
+        // then
+        assertThat(response).isEqualTo(actual);
     }
 
     @Test
-    public void testGetServiceInstanceAssociatedPnfs() throws Exception {
-        AaiServiceImpl testSubject;
-        String globalCustomerId = "";
-        String serviceType = "";
-        String serviceInstanceId = "";
-        List<String> result;
-
-        // default test
-        try {
-            testSubject = createTestSubject();
-            result = testSubject.getServiceInstanceAssociatedPnfs(globalCustomerId, serviceType, serviceInstanceId);
-        } catch (
-
-        Exception e) {
-        }
+    @SuppressWarnings("unchecked")
+    public void shouldRetrieveAndFilterVNFsBySubscriberAndServiceType() {
+        // given
+        String globalSubscriber = "global_subscriber";
+        String serviceType = "service_type";
+
+        VnfResult genericVnf = new VnfResult();
+        genericVnf.nodeType = "generic-vnf";
+
+        VnfResult serviceInstance = new VnfResult();
+        serviceInstance.nodeType = "service-instance";
+
+        VnfResult someVnf = new VnfResult();
+        someVnf.nodeType = "some-vnf";
+
+        AaiResponse<AaiGetVnfResponse> response = mock(AaiResponse.class);
+        AaiGetVnfResponse vnfs = new AaiGetVnfResponse();
+        vnfs.results = Arrays.asList(genericVnf, serviceInstance, someVnf);
+        when(response.getT()).thenReturn(vnfs);
+
+        when(aaiClient.getVNFData(globalSubscriber, serviceType)).thenReturn(response);
+
+        // when
+        AaiResponse actual = aaiService.getVNFData(globalSubscriber, serviceType);
+
+        // then
+        assertThat(response).isEqualTo(actual);
+        assertThat(response.getT().results).containsOnly(genericVnf, serviceInstance);
     }
 }
\ No newline at end of file
diff --git a/vid-app-common/src/test/resources/pomba_request.json b/vid-app-common/src/test/resources/pomba_request.json
new file mode 100644 (file)
index 0000000..3d873bf
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "serviceInstanceList": [
+    {
+      "serviceInstanceId": "serviceInstanceId1",
+      "modelVersionId": "modelVersion1",
+      "modelInvariantId": "modelInvariantId1",
+      "customerId": "customerId1",
+      "serviceType": "serviceType1"
+    },
+    {
+      "serviceInstanceId": "serviceInstanceId2",
+      "modelVersionId": "modelVersion2",
+      "modelInvariantId": "modelInvariantId2",
+      "customerId": "customerId2",
+      "serviceType": "serviceType2"
+    }
+  ]
+}
\ No newline at end of file