Make Actors event-agnostic 75/111575/3
authorJim Hahn <jrh3@att.com>
Fri, 21 Aug 2020 17:43:08 +0000 (13:43 -0400)
committerJim Hahn <jrh3@att.com>
Tue, 27 Oct 2020 18:55:15 +0000 (14:55 -0400)
Removed event and event-context code from the Actor code.  Also removed
the preprocessing steps from the Actor code, giving the application
complete control over any preprocessing.
Also fixed a bug wherein the APPC actor was treating the
AAI_RESOURCE_VNF property as a String instead of as a GenericVnf.

Issue-ID: POLICY-2746-actor
Change-Id: Ibc05fe39ffedc0bc461abf10e6a960861ac70119
Signed-off-by: Jim Hahn <jrh3@att.com>
54 files changed:
models-interactions/model-actors/actor.aai/src/main/java/org/onap/policy/controlloop/actor/aai/AaiCustomQueryOperation.java
models-interactions/model-actors/actor.aai/src/main/java/org/onap/policy/controlloop/actor/aai/AaiGetOperation.java
models-interactions/model-actors/actor.aai/src/test/java/org/onap/policy/controlloop/actor/aai/AaiCustomQueryOperationTest.java
models-interactions/model-actors/actor.aai/src/test/java/org/onap/policy/controlloop/actor/aai/AaiGetOperationTest.java
models-interactions/model-actors/actor.aai/src/test/java/org/onap/policy/controlloop/actor/aai/AaiGetPnfOperationTest.java
models-interactions/model-actors/actor.aai/src/test/java/org/onap/policy/controlloop/actor/aai/AaiGetTenantOperationTest.java
models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/AppcOperation.java
models-interactions/model-actors/actor.appc/src/main/java/org/onap/policy/controlloop/actor/appc/ModifyConfigOperation.java
models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/AppcOperationTest.java
models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/BasicAppcOperation.java
models-interactions/model-actors/actor.appc/src/test/java/org/onap/policy/controlloop/actor/appc/ModifyConfigOperationTest.java
models-interactions/model-actors/actor.appclcm/src/main/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmOperation.java
models-interactions/model-actors/actor.appclcm/src/test/java/org/onap/policy/controlloop/actor/appclcm/AppcLcmOperationTest.java
models-interactions/model-actors/actor.cds/src/main/java/org/onap/policy/controlloop/actor/cds/GrpcOperation.java
models-interactions/model-actors/actor.cds/src/test/java/org/onap/policy/controlloop/actor/cds/GrpcOperationTest.java
models-interactions/model-actors/actor.cds/src/test/java/org/onap/policy/controlloop/actor/cds/GrpcOperatorTest.java
models-interactions/model-actors/actor.sdnc/src/main/java/org/onap/policy/controlloop/actor/sdnc/BandwidthOnDemandOperation.java
models-interactions/model-actors/actor.sdnc/src/main/java/org/onap/policy/controlloop/actor/sdnc/RerouteOperation.java
models-interactions/model-actors/actor.sdnc/src/main/java/org/onap/policy/controlloop/actor/sdnc/SdncOperation.java
models-interactions/model-actors/actor.sdnc/src/test/java/org/onap/policy/controlloop/actor/sdnc/BandwidthOnDemandOperationTest.java
models-interactions/model-actors/actor.sdnc/src/test/java/org/onap/policy/controlloop/actor/sdnc/BasicSdncOperation.java
models-interactions/model-actors/actor.sdnc/src/test/java/org/onap/policy/controlloop/actor/sdnc/RerouteOperationTest.java
models-interactions/model-actors/actor.sdnc/src/test/java/org/onap/policy/controlloop/actor/sdnc/SdncOperationTest.java
models-interactions/model-actors/actor.sdnr/src/main/java/org/onap/policy/controlloop/actor/sdnr/SdnrOperation.java
models-interactions/model-actors/actor.sdnr/src/test/java/org/onap/policy/controlloop/actor/sdnr/BasicSdnrOperation.java
models-interactions/model-actors/actor.sdnr/src/test/java/org/onap/policy/controlloop/actor/sdnr/SdnrOperationTest.java
models-interactions/model-actors/actor.so/src/main/java/org/onap/policy/controlloop/actor/so/SoOperation.java
models-interactions/model-actors/actor.so/src/main/java/org/onap/policy/controlloop/actor/so/VfModuleCreate.java
models-interactions/model-actors/actor.so/src/main/java/org/onap/policy/controlloop/actor/so/VfModuleDelete.java
models-interactions/model-actors/actor.so/src/test/java/org/onap/policy/controlloop/actor/so/BasicSoOperation.java
models-interactions/model-actors/actor.so/src/test/java/org/onap/policy/controlloop/actor/so/SoOperationTest.java
models-interactions/model-actors/actor.so/src/test/java/org/onap/policy/controlloop/actor/so/VfModuleCreateTest.java
models-interactions/model-actors/actor.so/src/test/java/org/onap/policy/controlloop/actor/so/VfModuleDeleteTest.java
models-interactions/model-actors/actor.so/src/test/resources/org/onap/policy/controlloop/actor/so/aai/AaiCqResponseFull.json [deleted file]
models-interactions/model-actors/actor.so/src/test/resources/org/onap/policy/controlloop/actor/so/aai/AaiCqResponseMissing.json [deleted file]
models-interactions/model-actors/actor.so/src/test/resources/org/onap/policy/controlloop/actor/so/aai/AaiNqResponse-Full.json [deleted file]
models-interactions/model-actors/actor.so/src/test/resources/org/onap/policy/controlloop/actor/so/aai/AaiNqResponse-NoBase.json [deleted file]
models-interactions/model-actors/actor.so/src/test/resources/org/onap/policy/controlloop/actor/so/aai/AaiNqResponse-NoNonBase.json [deleted file]
models-interactions/model-actors/actor.test/src/main/java/org/onap/policy/controlloop/actor/test/BasicOperation.java
models-interactions/model-actors/actor.test/src/test/java/org/onap/policy/controlloop/actor/test/BasicBidirectionalTopicOperationTest.java
models-interactions/model-actors/actor.test/src/test/java/org/onap/policy/controlloop/actor/test/BasicHttpOperationTest.java
models-interactions/model-actors/actor.test/src/test/java/org/onap/policy/controlloop/actor/test/BasicOperationTest.java
models-interactions/model-actors/actor.vfc/src/main/java/org/onap/policy/controlloop/actor/vfc/VfcOperation.java
models-interactions/model-actors/actor.vfc/src/test/java/org/onap/policy/controlloop/actor/vfc/RestartTest.java
models-interactions/model-actors/actor.vfc/src/test/java/org/onap/policy/controlloop/actor/vfc/VfcOperationTest.java
models-interactions/model-actors/actorServiceProvider/src/main/java/org/onap/policy/controlloop/actorserviceprovider/OperationProperties.java
models-interactions/model-actors/actorServiceProvider/src/main/java/org/onap/policy/controlloop/actorserviceprovider/controlloop/ControlLoopEventContext.java [deleted file]
models-interactions/model-actors/actorServiceProvider/src/main/java/org/onap/policy/controlloop/actorserviceprovider/impl/OperationPartial.java
models-interactions/model-actors/actorServiceProvider/src/main/java/org/onap/policy/controlloop/actorserviceprovider/parameters/ControlLoopOperationParams.java
models-interactions/model-actors/actorServiceProvider/src/test/java/org/onap/policy/controlloop/actorserviceprovider/controlloop/ControlLoopEventContextTest.java [deleted file]
models-interactions/model-actors/actorServiceProvider/src/test/java/org/onap/policy/controlloop/actorserviceprovider/impl/HttpOperationTest.java
models-interactions/model-actors/actorServiceProvider/src/test/java/org/onap/policy/controlloop/actorserviceprovider/impl/HttpOperatorTest.java
models-interactions/model-actors/actorServiceProvider/src/test/java/org/onap/policy/controlloop/actorserviceprovider/impl/OperationPartialTest.java
models-interactions/model-actors/actorServiceProvider/src/test/java/org/onap/policy/controlloop/actorserviceprovider/parameters/ControlLoopOperationParamsTest.java

index 612fba9..27dd56c 100644 (file)
@@ -29,20 +29,15 @@ import javax.ws.rs.client.Invocation.Builder;
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import org.apache.commons.lang3.StringUtils;
-import org.onap.policy.aai.AaiConstants;
 import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.common.endpoints.utils.NetLoggerUtil.EventType;
-import org.onap.policy.common.utils.coder.StandardCoderObject;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
 import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
 import org.onap.policy.controlloop.actorserviceprovider.impl.HttpOperation;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpConfig;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * A&AI Custom Query. Stores the {@link AaiCqResponse} in the context. In addition, if the
@@ -51,8 +46,6 @@ import org.slf4j.LoggerFactory;
  * applies to the vserver, thus the target entity may be set to an empty string.
  */
 public class AaiCustomQueryOperation extends HttpOperation<String> {
-    private static final Logger logger = LoggerFactory.getLogger(AaiCustomQueryOperation.class);
-
     public static final String NAME = AaiCqResponse.OPERATION;
 
     public static final String VSERVER_VSERVER_NAME = "vserver.vserver-name";
@@ -61,9 +54,6 @@ public class AaiCustomQueryOperation extends HttpOperation<String> {
 
     private static final List<String> PROPERTY_NAMES = List.of(OperationProperties.AAI_VSERVER_LINK);
 
-    // TODO make this configurable
-    private static final String PREFIX = "/aai/v16";
-
     /**
      * Constructs the object.
      *
@@ -74,37 +64,6 @@ public class AaiCustomQueryOperation extends HttpOperation<String> {
         super(params, config, String.class, PROPERTY_NAMES);
     }
 
-    /**
-     * Gets the vserver name from the enrichment data.
-     *
-     * @return the vserver name
-     */
-    protected String getVserver() {
-        String vserver = this.params.getContext().getEnrichment().get(VSERVER_VSERVER_NAME);
-        if (StringUtils.isBlank(vserver)) {
-            throw new IllegalArgumentException("missing " + VSERVER_VSERVER_NAME + " in enrichment data");
-        }
-
-        return vserver;
-    }
-
-    /**
-     * Queries the vserver, if necessary.
-     */
-    @Override
-    protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
-        if (params.isPreprocessed()) {
-            return null;
-        }
-
-        String vserver = getVserver();
-        ControlLoopOperationParams tenantParams =
-                        params.toBuilder().actor(AaiConstants.ACTOR_NAME).operation(AaiGetTenantOperation.NAME)
-                                        .targetEntity(vserver).payload(null).retry(null).timeoutSec(null).build();
-
-        return params.getContext().obtain(AaiGetTenantOperation.getKey(vserver), tenantParams);
-    }
-
     @Override
     public void generateSubRequestId(int attempt) {
         setSubRequestId(String.valueOf(attempt));
@@ -162,24 +121,7 @@ public class AaiCustomQueryOperation extends HttpOperation<String> {
      * @return the vserver link
      */
     protected String getVserverLink() {
-        String resourceLink = getProperty(OperationProperties.AAI_VSERVER_LINK);
-        if (resourceLink != null) {
-            return resourceLink;
-        }
-
-        String vserver = getVserver();
-        StandardCoderObject tenant = params.getContext().getProperty(AaiGetTenantOperation.getKey(vserver));
-        if (tenant == null) {
-            throw new IllegalStateException("cannot perform custom query - cannot determine resource-link");
-        }
-
-        resourceLink = tenant.getString(RESULT_DATA, 0, RESOURCE_LINK);
-        if (resourceLink == null) {
-            throw new IllegalArgumentException("cannot perform custom query - no resource-link");
-        }
-
-        resourceLink = resourceLink.replace(PREFIX, "");
-        return resourceLink;
+        return getRequiredProperty(OperationProperties.AAI_VSERVER_LINK, "vserver link");
     }
 
     @Override
@@ -199,19 +141,4 @@ public class AaiCustomQueryOperation extends HttpOperation<String> {
 
         return outcome;
     }
-
-    /**
-     * Injects the response into the context.
-     */
-    @Override
-    protected CompletableFuture<OperationOutcome> postProcessResponse(OperationOutcome outcome, String url,
-                    Response rawResponse, String response) {
-
-        if (params.getContext() != null) {
-            logger.info("{}: caching response for {}", getFullName(), params.getRequestId());
-            params.getContext().setProperty(AaiCqResponse.CONTEXT_KEY, new AaiCqResponse(response));
-        }
-
-        return super.postProcessResponse(outcome, url, rawResponse, response);
-    }
 }
index 3fb978d..a077223 100644 (file)
@@ -23,18 +23,13 @@ package org.onap.policy.controlloop.actor.aai;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.concurrent.CompletableFuture;
 import javax.ws.rs.client.Invocation.Builder;
 import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.Response;
 import org.onap.policy.common.utils.coder.StandardCoderObject;
-import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
 import org.onap.policy.controlloop.actorserviceprovider.impl.HttpOperation;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpConfig;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Superclass of A&AI operators that use "get" to perform their request and store their
@@ -42,19 +37,10 @@ import org.slf4j.LoggerFactory;
  * which they are stored is ${actor}.${operation}.${targetEntity}.
  */
 public class AaiGetOperation extends HttpOperation<StandardCoderObject> {
-    private static final Logger logger = LoggerFactory.getLogger(AaiGetOperation.class);
-
     public static final int DEFAULT_RETRY = 3;
 
     private static final List<String> PROPERTY_NAMES = List.of(OperationProperties.AAI_TARGET_ENTITY);
 
-
-    /**
-     * Responses that are retrieved from A&AI are placed in the operation context under
-     * the name "${propertyPrefix}.${targetEntity}".
-     */
-    private final String propertyPrefix;
-
     /**
      * Constructs the object.
      *
@@ -63,7 +49,6 @@ public class AaiGetOperation extends HttpOperation<StandardCoderObject> {
      */
     public AaiGetOperation(ControlLoopOperationParams params, HttpConfig config) {
         super(params, config, StandardCoderObject.class, PROPERTY_NAMES);
-        this.propertyPrefix = getFullName() + ".";
     }
 
     @Override
@@ -107,22 +92,6 @@ public class AaiGetOperation extends HttpOperation<StandardCoderObject> {
         return AaiUtil.makeHeaders(params);
     }
 
-    /**
-     * Injects the response into the context.
-     */
-    @Override
-    protected CompletableFuture<OperationOutcome> postProcessResponse(OperationOutcome outcome, String url,
-                    Response rawResponse, StandardCoderObject response) {
-
-        if (params.getContext() != null) {
-            String entity = getTargetEntity();
-            logger.info("{}: caching response of {} for {}", getFullName(), entity, params.getRequestId());
-            params.getContext().setProperty(propertyPrefix + entity, response);
-        }
-
-        return super.postProcessResponse(outcome, url, rawResponse, response);
-    }
-
     /**
      * Provides a default retry value, if none specified.
      */
index 5a5e170..61155ce 100644 (file)
 package org.onap.policy.controlloop.actor.aai;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
-import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.verify;
@@ -44,33 +41,20 @@ import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.mockito.Mock;
 import org.onap.policy.aai.AaiConstants;
 import org.onap.policy.aai.AaiCqResponse;
-import org.onap.policy.common.endpoints.http.client.HttpClientFactory;
 import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance;
 import org.onap.policy.common.utils.coder.StandardCoder;
-import org.onap.policy.common.utils.coder.StandardCoderObject;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
 import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
-import org.onap.policy.controlloop.actorserviceprovider.Util;
-import org.onap.policy.controlloop.actorserviceprovider.impl.HttpOperation;
-import org.onap.policy.controlloop.actorserviceprovider.impl.HttpOperator;
-import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpConfig;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpParams;
-import org.onap.policy.controlloop.actorserviceprovider.spi.Actor;
 
 public class AaiCustomQueryOperationTest extends BasicAaiOperation {
     private static final StandardCoder coder = new StandardCoder();
 
     private static final String MY_LINK = "my-link";
-    private static final String MY_VSERVER = "my-vserver-name";
-    private static final String SIM_VSERVER = "OzVServer";
-
-    @Mock
-    private Actor tenantActor;
 
     private AaiCustomQueryOperation oper;
 
@@ -95,14 +79,8 @@ public class AaiCustomQueryOperationTest extends BasicAaiOperation {
     public void setUp() throws Exception {
         super.setUpBasic();
 
-        params.getContext().getEnrichment().put(AaiCustomQueryOperation.VSERVER_VSERVER_NAME, MY_VSERVER);
-
-        MyTenantOperator tenantOperator = new MyTenantOperator();
-
-        when(service.getActor(AaiConstants.ACTOR_NAME)).thenReturn(tenantActor);
-        when(tenantActor.getOperator(AaiGetTenantOperation.NAME)).thenReturn(tenantOperator);
-
         oper = new AaiCustomQueryOperation(params, config);
+        oper.setProperty(OperationProperties.AAI_VSERVER_LINK, MY_LINK);
     }
 
     /**
@@ -115,7 +93,6 @@ public class AaiCustomQueryOperationTest extends BasicAaiOperation {
 
         params = params.toBuilder().retry(0).timeoutSec(5).executor(blockingExecutor).preprocessed(true).build();
         oper = new AaiCustomQueryOperation(params, config);
-        oper.setProperty(OperationProperties.AAI_TARGET_ENTITY, SIM_VSERVER);
 
         oper.setProperty(OperationProperties.AAI_VSERVER_LINK, MY_LINK);
 
@@ -131,16 +108,6 @@ public class AaiCustomQueryOperationTest extends BasicAaiOperation {
         assertEquals(AaiCustomQueryOperation.NAME, oper.getName());
     }
 
-    @Test
-    public void testGetVserver() {
-        assertEquals(MY_VSERVER, oper.getVserver());
-
-        // try without enrichment data
-        params.getContext().getEnrichment().remove(AaiCustomQueryOperation.VSERVER_VSERVER_NAME);
-        assertThatIllegalArgumentException().isThrownBy(() -> oper.getVserver())
-                        .withMessage("missing " + AaiCustomQueryOperation.VSERVER_VSERVER_NAME + " in enrichment data");
-    }
-
     @Test
     public void testGetPropertyNames() {
         assertThat(oper.getPropertyNames()).isEqualTo(List.of(OperationProperties.AAI_VSERVER_LINK));
@@ -152,18 +119,9 @@ public class AaiCustomQueryOperationTest extends BasicAaiOperation {
         assertEquals("3", oper.getSubRequestId());
     }
 
-    /**
-     * Tests startPreprocessorAsync(), when preprocessing is disabled.
-     */
-    @Test
-    public void testStartPreprocessorAsyncDisabled() {
-        params = params.toBuilder().preprocessed(true).build();
-        assertNull(new AaiCustomQueryOperation(params, config).startPreprocessorAsync());
-    }
-
     @Test
     @SuppressWarnings("unchecked")
-    public void testStartOperationAsync_testStartPreprocessorAsync_testMakeRequest_testPostProcess() throws Exception {
+    public void testStartOperationAsync_testMakeRequest() throws Exception {
         // need two responses
         when(rawResponse.readEntity(String.class)).thenReturn(makeTenantReply()).thenReturn(makeCqReply());
         when(webAsync.get(any(InvocationCallback.class))).thenAnswer(provideResponse(rawResponse));
@@ -173,41 +131,9 @@ public class AaiCustomQueryOperationTest extends BasicAaiOperation {
 
         assertEquals(OperationResult.SUCCESS, getResult(future2));
 
-        // tenant response should have been cached within the context
-        assertNotNull(context.getProperty(AaiGetTenantOperation.getKey(MY_VSERVER)));
-
-        // custom query response should have been cached within the context
-        AaiCqResponse cqData = context.getProperty(AaiCqResponse.CONTEXT_KEY);
-        assertNotNull(cqData);
-
         assertEquals("1", future2.get().getSubRequestId());
     }
 
-    /**
-     * Tests when preprocessor step is not needed.
-     */
-    @Test
-    @SuppressWarnings("unchecked")
-    public void testStartOperationAsync_testStartPreprocessorAsyncNotNeeded() throws Exception {
-        // pre-load the tenant data
-        final StandardCoderObject data = preloadTenantData();
-
-        // only need one response
-        when(rawResponse.readEntity(String.class)).thenReturn(makeCqReply());
-        when(webAsync.put(any(), any(InvocationCallback.class))).thenAnswer(provideResponse(rawResponse, 1));
-
-        CompletableFuture<OperationOutcome> future2 = oper.start();
-
-        assertEquals(OperationResult.SUCCESS, getResult(future2));
-
-        // should not have replaced tenant response
-        assertSame(data, context.getProperty(AaiGetTenantOperation.getKey(MY_VSERVER)));
-
-        // custom query response should have been cached within the context
-        AaiCqResponse cqData = context.getProperty(AaiCqResponse.CONTEXT_KEY);
-        assertNotNull(cqData);
-    }
-
     @Test
     public void testMakeHeaders() {
         verifyHeaders(oper.makeHeaders());
@@ -216,9 +142,6 @@ public class AaiCustomQueryOperationTest extends BasicAaiOperation {
     @Test
     @SuppressWarnings("unchecked")
     public void testMakeRequest_testGetVserverLink() throws Exception {
-        // preload
-        preloadTenantData();
-
         when(rawResponse.readEntity(String.class)).thenReturn(makeCqReply());
         when(webAsync.put(any(), any(InvocationCallback.class))).thenAnswer(provideResponse(rawResponse, 1));
 
@@ -237,26 +160,11 @@ public class AaiCustomQueryOperationTest extends BasicAaiOperation {
     }
 
     @Test
-    public void testGetVserverLinkViaProperty() throws Exception {
+    public void testGetVserverLink() throws Exception {
         oper.setProperty(OperationProperties.AAI_VSERVER_LINK, MY_LINK);
         assertEquals(MY_LINK, oper.getVserverLink());
     }
 
-    @Test
-    public void testGetVserverLinkNoTenantData() throws Exception {
-        assertThatIllegalStateException().isThrownBy(() -> oper.getVserverLink())
-                        .withMessage("cannot perform custom query - cannot determine resource-link");
-    }
-
-    @Test
-    public void testGetVserverLinkNoResourceLink() throws Exception {
-        // pre-load EMPTY tenant data
-        preloadTenantData(new StandardCoderObject());
-
-        assertThatIllegalArgumentException().isThrownBy(() -> oper.getVserverLink())
-                        .withMessage("cannot perform custom query - no resource-link");
-    }
-
     @Test
     public void testSetOutcome() {
         outcome = oper.setOutcome(params.makeOutcome(null), OperationResult.SUCCESS, null, null);
@@ -278,16 +186,6 @@ public class AaiCustomQueryOperationTest extends BasicAaiOperation {
         return "{}";
     }
 
-    private StandardCoderObject preloadTenantData() throws Exception {
-        StandardCoderObject data = coder.decode(makeTenantReply(), StandardCoderObject.class);
-        preloadTenantData(data);
-        return data;
-    }
-
-    private void preloadTenantData(StandardCoderObject data) {
-        context.setProperty(AaiGetTenantOperation.getKey(MY_VSERVER), data);
-        context.setProperty(AaiGetTenantOperation.getKey(SIM_VSERVER), data);
-    }
 
     private OperationResult getResult(CompletableFuture<OperationOutcome> future2)
                     throws InterruptedException, ExecutionException, TimeoutException {
@@ -297,25 +195,4 @@ public class AaiCustomQueryOperationTest extends BasicAaiOperation {
 
         return future2.get().getResult();
     }
-
-    protected class MyTenantOperator extends HttpOperator {
-        public MyTenantOperator() {
-            super(AaiConstants.ACTOR_NAME, AaiGetTenantOperation.NAME);
-
-            HttpParams http = HttpParams.builder().clientName(MY_CLIENT).path(PATH).timeoutSec(1).build();
-
-            configure(Util.translateToMap(AaiGetTenantOperation.NAME, http));
-            start();
-        }
-
-        @Override
-        public HttpOperation<?> buildOperation(ControlLoopOperationParams params) {
-            return new AaiGetTenantOperation(params, getCurrentConfig());
-        }
-
-        @Override
-        protected HttpClientFactory getClientFactory() {
-            return factory;
-        }
-    }
 }
index df0dbff..1cde4c8 100644 (file)
@@ -29,7 +29,6 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import java.util.Map;
-import java.util.concurrent.CompletableFuture;
 import javax.ws.rs.client.Invocation.Builder;
 import javax.ws.rs.client.WebTarget;
 import org.junit.AfterClass;
@@ -37,14 +36,11 @@ import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.onap.policy.aai.AaiConstants;
-import org.onap.policy.common.utils.coder.StandardCoderObject;
-import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 
 public class AaiGetOperationTest extends BasicAaiOperation {
     private static final String MY_NAME = "my-operation-name";
     private static final String PARAM_NAME = "my-param";
     private static final String PARAM_VALUE = "my-value";
-    private static final String MY_URL = "my-url";
 
     private AaiGetOperation oper;
 
@@ -104,15 +100,6 @@ public class AaiGetOperationTest extends BasicAaiOperation {
         verify(bldr).header("hdrB", "valB");
     }
 
-    @Test
-    public void testPostProcessResponse() throws Exception {
-        StandardCoderObject resp = new StandardCoderObject();
-        CompletableFuture<OperationOutcome> future2 = oper.postProcessResponse(outcome, MY_URL, null, resp);
-
-        assertSame(outcome, future2.get());
-        assertSame(resp, context.getProperty("AAI.my-operation-name.my-target"));
-    }
-
     @Test
     public void testGetRetry() {
         // use default if null retry
index 84f2821..fb2b770 100644 (file)
@@ -23,8 +23,6 @@ package org.onap.policy.controlloop.actor.aai;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.when;
@@ -141,11 +139,6 @@ public class AaiGetPnfOperationTest extends BasicAaiOperation {
 
         assertEquals(OperationResult.SUCCESS, future2.get().getResult());
 
-        // data should have been cached within the context
-        StandardCoderObject data = context.getProperty(AaiGetPnfOperation.getKey(TARGET_ENTITY));
-        assertNotNull(data);
-        assertEquals(TEXT, data.getString(INPUT_FIELD));
-
         assertEquals("1", future2.get().getSubRequestId());
     }
 
@@ -168,9 +161,6 @@ public class AaiGetPnfOperationTest extends BasicAaiOperation {
         assertTrue(future2.isDone());
 
         assertEquals(OperationResult.FAILURE, future2.get().getResult());
-
-        // data should NOT have been cached within the context
-        assertNull(context.getProperty(AaiGetPnfOperation.getKey(TARGET_ENTITY)));
     }
 
     @Test
index cf9a7a6..27495d8 100644 (file)
@@ -23,8 +23,6 @@ package org.onap.policy.controlloop.actor.aai;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.when;
@@ -141,11 +139,6 @@ public class AaiGetTenantOperationTest extends BasicAaiOperation {
 
         assertEquals(OperationResult.SUCCESS, future2.get().getResult());
 
-        // data should have been cached within the context
-        StandardCoderObject data = context.getProperty(AaiGetTenantOperation.getKey(TARGET_ENTITY));
-        assertNotNull(data);
-        assertEquals(TEXT, data.getString(INPUT_FIELD));
-
         assertEquals("1", future2.get().getSubRequestId());
     }
 
@@ -168,9 +161,6 @@ public class AaiGetTenantOperationTest extends BasicAaiOperation {
         assertTrue(future2.isDone());
 
         assertEquals(OperationResult.FAILURE, future2.get().getResult());
-
-        // data should NOT have been cached within the context
-        assertNull(context.getProperty(AaiGetTenantOperation.getKey(TARGET_ENTITY)));
     }
 
     @Test
index 70c7082..89d5c4f 100644 (file)
@@ -23,7 +23,7 @@ package org.onap.policy.controlloop.actor.appc;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.concurrent.CompletableFuture;
+import org.onap.aai.domain.yang.GenericVnf;
 import org.onap.policy.appc.CommonHeader;
 import org.onap.policy.appc.Request;
 import org.onap.policy.appc.Response;
@@ -70,14 +70,6 @@ public abstract class AppcOperation extends BidirectionalTopicOperation<Request,
         super(params, config, Response.class, propertyNames);
     }
 
-    /**
-     * Starts the GUARD.
-     */
-    @Override
-    protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
-        return startGuardAsync();
-    }
-
     /**
      * Makes a request, given the target VNF. This is a support function for
      * {@link #makeRequest(int)}.
@@ -86,7 +78,7 @@ public abstract class AppcOperation extends BidirectionalTopicOperation<Request,
      * @param targetVnf target VNF
      * @return a new request
      */
-    protected Request makeRequest(int attempt, String targetVnf) {
+    protected Request makeRequest(int attempt, GenericVnf targetVnf) {
         Request request = new Request();
         request.setCommonHeader(new CommonHeader());
         request.getCommonHeader().setRequestId(params.getRequestId());
@@ -102,7 +94,7 @@ public abstract class AppcOperation extends BidirectionalTopicOperation<Request,
         }
 
         // add/replace specific values
-        request.getPayload().put(VNF_ID_KEY, targetVnf);
+        request.getPayload().put(VNF_ID_KEY, targetVnf.getVnfId());
 
         return request;
     }
index 1f5b9fd..524c797 100644 (file)
 package org.onap.policy.controlloop.actor.appc;
 
 import java.util.List;
-import java.util.concurrent.CompletableFuture;
-import org.onap.aai.domain.yang.GenericVnf;
-import org.onap.policy.aai.AaiConstants;
-import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.appc.Request;
-import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicConfig;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class ModifyConfigOperation extends AppcOperation {
-    private static final Logger logger = LoggerFactory.getLogger(ModifyConfigOperation.class);
-
     public static final String NAME = "ModifyConfig";
 
     private static final List<String> PROPERTY_NAMES = List.of(OperationProperties.AAI_RESOURCE_VNF);
@@ -50,46 +41,8 @@ public class ModifyConfigOperation extends AppcOperation {
         super(params, config, PROPERTY_NAMES);
     }
 
-    /**
-     * Ensures that A&AI customer query has been performed, and then runs the guard query.
-     */
-    @Override
-    @SuppressWarnings("unchecked")
-    protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
-        if (params.isPreprocessed()) {
-            return null;
-        }
-
-        ControlLoopOperationParams cqParams = params.toBuilder().actor(AaiConstants.ACTOR_NAME)
-                        .operation(AaiCqResponse.OPERATION).payload(null).retry(null).timeoutSec(null).build();
-
-        // run Custom Query and Guard, in parallel
-        return allOf(() -> params.getContext().obtain(AaiCqResponse.CONTEXT_KEY, cqParams), this::startGuardAsync);
-    }
-
     @Override
     protected Request makeRequest(int attempt) {
-        return makeRequest(attempt, getVnfId());
-    }
-
-    protected String getVnfId() {
-        GenericVnf vnf = this.getProperty(OperationProperties.AAI_RESOURCE_VNF);
-        if (vnf != null) {
-            return vnf.getVnfId();
-        }
-
-        AaiCqResponse cq = params.getContext().getProperty(AaiCqResponse.CONTEXT_KEY);
-        if (cq == null) {
-            throw new IllegalStateException("target vnf-id could not be determined");
-        }
-
-        GenericVnf genvnf = cq.getGenericVnfByModelInvariantId(params.getTargetEntityIds()
-                .get(ControlLoopOperationParams.PARAMS_ENTITY_RESOURCEID));
-        if (genvnf == null) {
-            logger.info("{}: target entity could not be found for {}", getFullName(), params.getRequestId());
-            throw new IllegalArgumentException("target vnf-id could not be found");
-        }
-
-        return genvnf.getVnfId();
+        return makeRequest(attempt, getRequiredProperty(OperationProperties.AAI_RESOURCE_VNF, "resource VNF"));
     }
 }
index db104b6..72e9065 100644 (file)
@@ -23,7 +23,6 @@ package org.onap.policy.controlloop.actor.appc;
 import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 
 import java.util.Arrays;
@@ -81,27 +80,13 @@ public class AppcOperationTest extends BasicAppcOperation {
         assertEquals(DEFAULT_OPERATION, oper.getName());
     }
 
-    @Test
-    public void testStartPreprocessorAsync() {
-        assertNotNull(oper.startPreprocessorAsync());
-    }
-
-    /**
-     * Tests startPreprocessorAsync(), when preprocessing is disabled.
-     */
-    @Test
-    public void testStartPreprocessorAsyncDisabled() {
-        params = params.toBuilder().preprocessed(true).build();
-        assertNull(new MyOper(params, config).startPreprocessorAsync());
-    }
-
     @Test
     public void testMakeRequest() {
         oper.generateSubRequestId(2);
         String subreq = oper.getSubRequestId();
         assertNotNull(subreq);
 
-        Request request = oper.makeRequest(2, MY_VNF);
+        Request request = oper.makeRequest(2, genvnf);
         assertEquals(DEFAULT_OPERATION, request.getAction());
 
         assertNotNull(request.getPayload());
@@ -112,18 +97,18 @@ public class AppcOperationTest extends BasicAppcOperation {
 
         assertEquals(subreq, header.getSubRequestId());
 
-        request = oper.makeRequest(2, MY_VNF);
+        request = oper.makeRequest(2, genvnf);
         assertEquals(subreq, request.getCommonHeader().getSubRequestId());
 
         // repeat using a null payload
         params = params.toBuilder().payload(null).build();
         oper = new MyOper(params, config);
-        assertEquals(Map.of(AppcOperation.VNF_ID_KEY, MY_VNF), oper.makeRequest(2, MY_VNF).getPayload());
+        assertEquals(Map.of(AppcOperation.VNF_ID_KEY, MY_VNF), oper.makeRequest(2, genvnf).getPayload());
     }
 
     @Test
     public void testConvertPayload() {
-        Request request = oper.makeRequest(2, MY_VNF);
+        Request request = oper.makeRequest(2, genvnf);
 
         // @formatter:off
         assertEquals(
@@ -143,7 +128,7 @@ public class AppcOperationTest extends BasicAppcOperation {
         params = params.toBuilder().payload(payload).build();
 
         oper = new MyOper(params, config);
-        request = oper.makeRequest(2, MY_VNF);
+        request = oper.makeRequest(2, genvnf);
 
         // @formatter:off
         assertEquals(
@@ -164,7 +149,7 @@ public class AppcOperationTest extends BasicAppcOperation {
         params = params.toBuilder().payload(payload).build();
 
         oper = new MyOper(params, config);
-        request = oper.makeRequest(2, MY_VNF);
+        request = oper.makeRequest(2, genvnf);
 
         payload.put(AppcOperation.VNF_ID_KEY, MY_VNF);
         payload.put(KEY1, "abc");
@@ -177,7 +162,7 @@ public class AppcOperationTest extends BasicAppcOperation {
     @Test
     public void testGetExpectedKeyValues() {
         oper.generateSubRequestId(2);
-        Request request = oper.makeRequest(2, MY_VNF);
+        Request request = oper.makeRequest(2, genvnf);
         assertEquals(Arrays.asList(request.getCommonHeader().getSubRequestId()),
                         oper.getExpectedKeyValues(50, request));
     }
@@ -242,7 +227,7 @@ public class AppcOperationTest extends BasicAppcOperation {
         }
     }
 
-    private static class MyOper extends AppcOperation {
+    private class MyOper extends AppcOperation {
 
         public MyOper(ControlLoopOperationParams params, BidirectionalTopicConfig config) {
             super(params, config, Collections.emptyList());
@@ -250,7 +235,7 @@ public class AppcOperationTest extends BasicAppcOperation {
 
         @Override
         protected Request makeRequest(int attempt) {
-            return makeRequest(attempt, MY_VNF);
+            return makeRequest(attempt, genvnf);
         }
     }
 }
index 9d434ce..aed2431 100644 (file)
@@ -20,7 +20,6 @@
 
 package org.onap.policy.controlloop.actor.appc;
 
-import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -32,6 +31,7 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeoutException;
 import java.util.function.BiConsumer;
+import org.onap.aai.domain.yang.GenericVnf;
 import org.onap.policy.appc.Request;
 import org.onap.policy.appc.Response;
 import org.onap.policy.appc.ResponseCode;
@@ -44,12 +44,9 @@ import org.onap.policy.controlloop.actor.test.BasicBidirectionalTopicOperation;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
 import org.onap.policy.controlloop.actorserviceprovider.Util;
-import org.onap.policy.controlloop.actorserviceprovider.impl.OperationMaker;
-import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicConfig;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
 import org.onap.policy.simulators.AppcLegacyTopicServer;
 import org.onap.policy.simulators.TopicServer;
-import org.powermock.reflect.Whitebox;
 
 /**
  * Superclass for various operator tests.
@@ -66,6 +63,7 @@ public abstract class BasicAppcOperation extends BasicBidirectionalTopicOperatio
     protected static final String RESOURCE_ID = "my-resource";
 
     protected Response response;
+    protected GenericVnf genvnf;
 
     /**
      * Constructs the object using a default actor and operation name.
@@ -97,6 +95,9 @@ public abstract class BasicAppcOperation extends BasicBidirectionalTopicOperatio
         response.setStatus(status);
         status.setCode(ResponseCode.SUCCESS.getValue());
         status.setDescription(MY_DESCRIPTION);
+
+        genvnf = new GenericVnf();
+        genvnf.setVnfId(MY_VNF);
     }
 
     public void tearDown() {
@@ -131,25 +132,6 @@ public abstract class BasicAppcOperation extends BasicBidirectionalTopicOperatio
         assertEquals(MY_DESCRIPTION, outcome.getMessage());
     }
 
-    /**
-     * Verifies that an exception is thrown if a field is missing from the enrichment
-     * data.
-     *
-     * @param fieldName name of the field to be removed from the enrichment data
-     * @param expectedText text expected in the exception message
-     */
-    protected void verifyMissing(String fieldName, String expectedText,
-                    OperationMaker<BidirectionalTopicConfig, AppcOperation> maker) {
-
-        makeContext();
-        enrichment.remove(fieldName);
-
-        AppcOperation oper = maker.apply(params, config);
-
-        assertThatIllegalArgumentException().isThrownBy(() -> Whitebox.invokeMethod(oper, "makeRequest", 1))
-                        .withMessageContaining("missing").withMessageContaining(expectedText);
-    }
-
     @Override
     protected void makeContext() {
         super.makeContext();
index 749b6c8..ee3ac02 100644 (file)
 package org.onap.policy.controlloop.actor.appc;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
-import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
 
-import java.util.Arrays;
 import java.util.List;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.atomic.AtomicBoolean;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.mockito.Mock;
-import org.onap.aai.domain.yang.GenericVnf;
-import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.appc.Request;
 import org.onap.policy.appc.Response;
 import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
 import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicConfig;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicParams;
 
 public class ModifyConfigOperationTest extends BasicAppcOperation {
 
-    @Mock
-    private GenericVnf genvnf;
-    @Mock
-    private AaiCqResponse cq;
-
     private ModifyConfigOperation oper;
 
 
@@ -85,8 +63,6 @@ public class ModifyConfigOperationTest extends BasicAppcOperation {
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        when(genvnf.getVnfId()).thenReturn(MY_VNF);
-        when(cq.getGenericVnfByModelInvariantId(any())).thenReturn(genvnf);
 
         oper = new ModifyConfigOperation(params, config);
     }
@@ -106,16 +82,9 @@ public class ModifyConfigOperationTest extends BasicAppcOperation {
                         BidirectionalTopicParams.builder().sinkTopic(MY_SINK).sourceTopic(MY_SINK).build();
         config = new BidirectionalTopicConfig(blockingExecutor, opParams, topicMgr, AppcOperation.SELECTOR_KEYS);
 
-        params.getContext().setProperty(AaiCqResponse.CONTEXT_KEY, cq);
-
         params = params.toBuilder().retry(0).timeoutSec(5).executor(blockingExecutor).preprocessed(true).build();
 
-        oper = new ModifyConfigOperation(params, config) {
-            @Override
-            protected CompletableFuture<OperationOutcome> startGuardAsync() {
-                return null;
-            }
-        };
+        oper = new ModifyConfigOperation(params, config);
 
         oper.setProperty(OperationProperties.AAI_RESOURCE_VNF, genvnf);
 
@@ -135,45 +104,6 @@ public class ModifyConfigOperationTest extends BasicAppcOperation {
         assertThat(oper.getPropertyNames()).isEqualTo(List.of(OperationProperties.AAI_RESOURCE_VNF));
     }
 
-    @Test
-    public void testStartPreprocessorAsync() throws Exception {
-        CompletableFuture<OperationOutcome> future2 = new CompletableFuture<>();
-        context = mock(ControlLoopEventContext.class);
-        when(context.obtain(eq(AaiCqResponse.CONTEXT_KEY), any())).thenReturn(future2);
-        when(context.getEvent()).thenReturn(event);
-        params = params.toBuilder().context(context).build();
-
-        AtomicBoolean guardStarted = new AtomicBoolean();
-
-        oper = new ModifyConfigOperation(params, config) {
-            @Override
-            protected CompletableFuture<OperationOutcome> startGuardAsync() {
-                guardStarted.set(true);
-                return super.startGuardAsync();
-            }
-        };
-
-        CompletableFuture<OperationOutcome> future3 = oper.startPreprocessorAsync();
-        assertNotNull(future3);
-        assertFalse(future.isDone());
-        assertTrue(guardStarted.get());
-        verify(context).obtain(eq(AaiCqResponse.CONTEXT_KEY), any());
-
-        future2.complete(params.makeOutcome(null));
-        assertTrue(executor.runAll(100));
-        assertTrue(future3.isDone());
-        assertEquals(OperationResult.SUCCESS, future3.get().getResult());
-    }
-
-    /**
-     * Tests startPreprocessorAsync(), when preprocessing is disabled.
-     */
-    @Test
-    public void testStartPreprocessorAsyncDisabled() {
-        params = params.toBuilder().preprocessed(true).build();
-        assertNull(new ModifyConfigOperation(params, config).startPreprocessorAsync());
-    }
-
     @Test
     public void testMakeRequest() throws CoderException {
         oper.setProperty(OperationProperties.AAI_RESOURCE_VNF, genvnf);
@@ -185,32 +115,4 @@ public class ModifyConfigOperationTest extends BasicAppcOperation {
 
         verifyRequest("modifyConfig.json", request, IGNORE_FIELDS);
     }
-
-    @Test
-    public void testGetVnfIdViaProperty() throws CoderException {
-        oper.setProperty(OperationProperties.AAI_RESOURCE_VNF, genvnf);
-        assertEquals(MY_VNF, oper.getVnfId());
-    }
-
-    @Test
-    public void testGetVnfId() throws CoderException {
-        // no CQ data
-        assertThatIllegalStateException().isThrownBy(() -> oper.getVnfId())
-                        .withMessage("target vnf-id could not be determined");
-
-        cq = new AaiCqResponse("{}");
-
-        // missing vnf-id
-        params.getContext().setProperty(AaiCqResponse.CONTEXT_KEY, cq);
-        assertThatIllegalArgumentException().isThrownBy(() -> oper.getVnfId())
-                        .withMessage("target vnf-id could not be found");
-
-        // populate the CQ data with a vnf-id
-        genvnf = new GenericVnf();
-        genvnf.setVnfId(MY_VNF);
-        genvnf.setModelInvariantId(RESOURCE_ID);
-        cq.setInventoryResponseItems(Arrays.asList(genvnf));
-
-        assertEquals(MY_VNF, oper.getVnfId());
-    }
 }
index 1d687cd..303067d 100644 (file)
@@ -22,7 +22,6 @@ package org.onap.policy.controlloop.actor.appclcm;
 
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.CompletableFuture;
 import org.onap.policy.appclcm.AppcLcmBody;
 import org.onap.policy.appclcm.AppcLcmCommonHeader;
 import org.onap.policy.appclcm.AppcLcmDmaapWrapper;
@@ -66,15 +65,6 @@ public class AppcLcmOperation extends BidirectionalTopicOperation<AppcLcmDmaapWr
         super(params, config, AppcLcmDmaapWrapper.class, PROPERTY_NAMES);
     }
 
-    /**
-     * Ensures that A&AI customer query has been performed, and then runs the guard query.
-     * Starts the GUARD using startGuardAsync.
-     */
-    @Override
-    protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
-        return startGuardAsync();
-    }
-
     @Override
     protected AppcLcmDmaapWrapper makeRequest(int attempt) {
         String subRequestId = getSubRequestId();
index e707ea9..650c5da 100644 (file)
@@ -28,16 +28,12 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
 
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 import org.junit.After;
 import org.junit.AfterClass;
@@ -56,10 +52,8 @@ import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.controlloop.ControlLoopOperation;
 import org.onap.policy.controlloop.actor.test.BasicBidirectionalTopicOperation;
-import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
 import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
 import org.onap.policy.controlloop.actorserviceprovider.impl.BidirectionalTopicOperation.Status;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicConfig;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicParams;
@@ -123,12 +117,7 @@ public class AppcLcmOperationTest extends BasicBidirectionalTopicOperation<AppcL
 
         params = params.toBuilder().retry(0).timeoutSec(5).executor(blockingExecutor).build();
 
-        oper = new AppcLcmOperation(params, config) {
-            @Override
-            protected CompletableFuture<OperationOutcome> startGuardAsync() {
-                return null;
-            }
-        };
+        oper = new AppcLcmOperation(params, config);
 
         outcome = oper.start().get();
         assertEquals(OperationResult.SUCCESS, outcome.getResult());
@@ -146,33 +135,6 @@ public class AppcLcmOperationTest extends BasicBidirectionalTopicOperation<AppcL
         assertThat(oper.getPropertyNames()).isEqualTo(List.of(OperationProperties.AAI_TARGET_ENTITY));
     }
 
-    @Test
-    public void testStartPreprocessorAsync() throws Exception {
-        context = mock(ControlLoopEventContext.class);
-        when(context.getEvent()).thenReturn(event);
-        params = params.toBuilder().context(context).build();
-
-        AtomicBoolean guardStarted = new AtomicBoolean();
-
-        oper = new AppcLcmOperation(params, config) {
-            @Override
-            protected CompletableFuture<OperationOutcome> startGuardAsync() {
-                guardStarted.set(true);
-                return super.startGuardAsync();
-            }
-        };
-
-        CompletableFuture<OperationOutcome> future2 = oper.startPreprocessorAsync();
-        assertNotNull(future2);
-        assertFalse(future.isDone());
-        assertTrue(guardStarted.get());
-
-        assertTrue(executor.runAll(100));
-        assertTrue(future2.isDone());
-        outcome = future2.get();
-        assertEquals(OperationResult.SUCCESS, outcome.getResult());
-    }
-
     @Test
     public void testMakeRequest() {
         oper.generateSubRequestId(2);
index c04453b..44d5181 100644 (file)
@@ -40,12 +40,8 @@ import org.onap.aai.domain.yang.ServiceInstance;
 import org.onap.ccsdk.cds.controllerblueprints.common.api.ActionIdentifiers;
 import org.onap.ccsdk.cds.controllerblueprints.common.api.CommonHeader;
 import org.onap.ccsdk.cds.controllerblueprints.processing.api.ExecutionServiceInput;
-import org.onap.policy.aai.AaiConstants;
-import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.cds.client.CdsProcessorGrpcClient;
 import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.controlloop.actor.aai.AaiCustomQueryOperation;
-import org.onap.policy.controlloop.actor.aai.AaiGetPnfOperation;
 import org.onap.policy.controlloop.actor.cds.constants.CdsActorConstants;
 import org.onap.policy.controlloop.actor.cds.request.CdsActionRequest;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
@@ -76,11 +72,6 @@ public class GrpcOperation extends OperationPartial {
      */
     private final GrpcConfig config;
 
-    /**
-     * Function to request the A&AI data appropriate to the target type.
-     */
-    private final Supplier<CompletableFuture<OperationOutcome>> aaiRequestor;
-
     /**
      * Function to convert the A&AI data associated with the target type.
      */
@@ -112,11 +103,9 @@ public class GrpcOperation extends OperationPartial {
         this.config = config;
 
         if (TargetType.PNF.equals(params.getTargetType())) {
-            aaiRequestor = this::getPnf;
             aaiConverter = this::convertPnfToAaiProperties;
         } else {
-            aaiRequestor = this::getCq;
-            aaiConverter = this::convertCqToAaiProperties;
+            aaiConverter = this::convertVnfToAaiProperties;
         }
     }
 
@@ -133,44 +122,6 @@ public class GrpcOperation extends OperationPartial {
         return (timeoutSec == null || timeoutSec == 0 ? config.getTimeoutMs() : super.getTimeoutMs(timeoutSec));
     }
 
-    /**
-     * Ensures that A&AI query has been performed, and runs the guard.
-     */
-    @Override
-    @SuppressWarnings("unchecked")
-    protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
-        if (params.isPreprocessed()) {
-            return null;
-        }
-
-        // run A&AI Query and Guard, in parallel
-        return allOf(aaiRequestor, this::startGuardAsync);
-    }
-
-    /**
-     * Requests the A&AI PNF data.
-     *
-     * @return a future to get the PNF data
-     */
-    private CompletableFuture<OperationOutcome> getPnf() {
-        ControlLoopOperationParams pnfParams = params.toBuilder().actor(AaiConstants.ACTOR_NAME)
-                        .operation(AaiGetPnfOperation.NAME).payload(null).retry(null).timeoutSec(null).build();
-
-        return params.getContext().obtain(AaiGetPnfOperation.getKey(params.getTargetEntity()), pnfParams);
-    }
-
-    /**
-     * Requests the A&AI Custom Query data.
-     *
-     * @return a future to get the custom query data
-     */
-    private CompletableFuture<OperationOutcome> getCq() {
-        ControlLoopOperationParams cqParams = params.toBuilder().actor(AaiConstants.ACTOR_NAME)
-                        .operation(AaiCustomQueryOperation.NAME).payload(null).retry(null).timeoutSec(null).build();
-
-        return params.getContext().obtain(AaiCqResponse.CONTEXT_KEY, cqParams);
-    }
-
     /**
      * Converts the A&AI PNF data to a map suitable for passing via the "aaiProperties"
      * field in the CDS request.
@@ -178,13 +129,14 @@ public class GrpcOperation extends OperationPartial {
      * @return a map of the PNF data
      */
     private Map<String, String> convertPnfToAaiProperties() {
-        Map<String, String> result = this.getProperty(OperationProperties.OPT_CDS_GRPC_AAI_PROPERTIES);
+        Map<String, String> result = getProperty(OperationProperties.OPT_CDS_GRPC_AAI_PROPERTIES);
         if (result != null) {
             return result;
         }
 
         // convert PNF data to a Map
-        Map<String, Object> source = Util.translateToMap(getFullName(), getPnfData());
+        Object pnfData = getRequiredProperty(OperationProperties.AAI_PNF, "PNF");
+        Map<String, Object> source = Util.translateToMap(getFullName(), pnfData);
 
         result = new LinkedHashMap<>();
 
@@ -196,33 +148,13 @@ public class GrpcOperation extends OperationPartial {
     }
 
     /**
-     * Gets the PNF from the operation properties, if it exists, or from the context
-     * properties otherwise.
-     *
-     * @return the PNF item
-     */
-    protected Object getPnfData() {
-        Object pnf = getProperty(OperationProperties.AAI_PNF);
-        if (pnf != null) {
-            return pnf;
-        }
-
-        pnf = params.getContext().getProperty(AaiGetPnfOperation.getKey(params.getTargetEntity()));
-        if (pnf == null) {
-            throw new IllegalArgumentException("missing PNF data");
-        }
-
-        return pnf;
-    }
-
-    /**
-     * Converts the A&AI Custom Query data to a map suitable for passing via the
+     * Converts the A&AI VNF data to a map suitable for passing via the
      * "aaiProperties" field in the CDS request.
      *
-     * @return a map of the custom query data
+     * @return a map of the VNF data
      */
-    private Map<String, String> convertCqToAaiProperties() {
-        Map<String, String> result = this.getProperty(OperationProperties.OPT_CDS_GRPC_AAI_PROPERTIES);
+    private Map<String, String> convertVnfToAaiProperties() {
+        Map<String, String> result = getProperty(OperationProperties.OPT_CDS_GRPC_AAI_PROPERTIES);
         if (result != null) {
             return result;
         }
@@ -236,35 +168,13 @@ public class GrpcOperation extends OperationPartial {
     }
 
     protected String getServiceInstanceId() {
-        ServiceInstance serviceInstance = getProperty(OperationProperties.AAI_SERVICE);
-        if (serviceInstance != null) {
-            return serviceInstance.getServiceInstanceId();
-        }
-
-        AaiCqResponse aaicq = params.getContext().getProperty(AaiCqResponse.CONTEXT_KEY);
-
-        serviceInstance = aaicq.getServiceInstance();
-        if (serviceInstance == null) {
-            throw new IllegalArgumentException("Target service instance could not be found");
-        }
-
+        ServiceInstance serviceInstance =
+                        getRequiredProperty(OperationProperties.AAI_SERVICE, "Target service instance");
         return serviceInstance.getServiceInstanceId();
     }
 
     protected String getVnfId() {
-        GenericVnf genericVnf = getProperty(OperationProperties.AAI_RESOURCE_VNF);
-        if (genericVnf != null) {
-            return genericVnf.getVnfId();
-        }
-
-        AaiCqResponse aaicq = params.getContext().getProperty(AaiCqResponse.CONTEXT_KEY);
-
-        genericVnf = aaicq.getGenericVnfByModelInvariantId(params.getTargetEntityIds()
-                .get(ControlLoopOperationParams.PARAMS_ENTITY_RESOURCEID));
-        if (genericVnf == null) {
-            throw new IllegalArgumentException("Target generic vnf could not be found");
-        }
-
+        GenericVnf genericVnf = getRequiredProperty(OperationProperties.AAI_RESOURCE_VNF, "Target generic vnf");
         return genericVnf.getVnfId();
     }
 
@@ -345,7 +255,7 @@ public class GrpcOperation extends OperationPartial {
         request.setAaiProperties(aaiConverter.get());
 
         // Inject any additional event parameters that may be present in the onset event
-        Map<String, String> additionalParams = getAdditionalEventParams();
+        Map<String, String> additionalParams = getProperty(OperationProperties.EVENT_ADDITIONAL_PARAMS);
         if (additionalParams != null) {
             request.setAdditionalEventParams(additionalParams);
         }
@@ -375,14 +285,6 @@ public class GrpcOperation extends OperationPartial {
                         .setPayload(struct.build()).build();
     }
 
-    protected Map<String, String> getAdditionalEventParams() {
-        if (containsProperty(OperationProperties.EVENT_ADDITIONAL_PARAMS)) {
-            return getProperty(OperationProperties.EVENT_ADDITIONAL_PARAMS);
-        }
-
-        return params.getContext().getEvent().getAdditionalEventParams();
-    }
-
     private Map<String, String> convertPayloadMap(Map<String, Object> payload) {
         Map<String, String> convertedPayload = new HashMap<>();
         for (Entry<String, Object> entry : payload.entrySet()) {
index 709e179..da069d8 100644 (file)
@@ -23,13 +23,9 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import java.util.Collections;
@@ -39,11 +35,7 @@ import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executor;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import java.util.concurrent.atomic.AtomicBoolean;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -51,11 +43,9 @@ import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.onap.aai.domain.yang.GenericVnf;
-import org.onap.aai.domain.yang.Pnf;
 import org.onap.aai.domain.yang.ServiceInstance;
 import org.onap.ccsdk.cds.controllerblueprints.processing.api.ExecutionServiceInput;
 import org.onap.ccsdk.cds.controllerblueprints.processing.api.ExecutionServiceOutput;
-import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.cds.client.CdsProcessorGrpcClient;
 import org.onap.policy.cds.properties.CdsServerProperties;
 import org.onap.policy.common.utils.coder.Coder;
@@ -63,15 +53,12 @@ import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.coder.StandardCoderObject;
 import org.onap.policy.common.utils.time.PseudoExecutor;
-import org.onap.policy.controlloop.VirtualControlLoopEvent;
-import org.onap.policy.controlloop.actor.aai.AaiGetPnfOperation;
 import org.onap.policy.controlloop.actor.cds.constants.CdsActorConstants;
 import org.onap.policy.controlloop.actorserviceprovider.ActorService;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
 import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
 import org.onap.policy.controlloop.actorserviceprovider.TargetType;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
 import org.onap.policy.simulators.CdsSimulator;
 import org.onap.policy.simulators.Util;
@@ -96,16 +83,11 @@ public class GrpcOperationTest {
 
     @Mock
     private CdsProcessorGrpcClient cdsClient;
-    @Mock
-    private ControlLoopEventContext context;
     private CdsServerProperties cdsProps;
-    private VirtualControlLoopEvent onset;
     private PseudoExecutor executor;
-    private TargetType targetType;
     private Map<String, String> targetEntityIds;
     private ControlLoopOperationParams params;
     private GrpcConfig config;
-    private CompletableFuture<OperationOutcome> cqFuture;
     private GrpcOperation operation;
 
     @BeforeClass
@@ -136,25 +118,15 @@ public class GrpcOperationTest {
         // Setup cdsClient
         when(cdsClient.sendRequest(any(ExecutionServiceInput.class))).thenReturn(mock(CountDownLatch.class));
 
-        // Setup onset event
-        onset = new VirtualControlLoopEvent();
-        onset.setRequestId(REQUEST_ID);
-
         // Setup executor
         executor = new PseudoExecutor();
 
-        targetType = TargetType.VM;
         targetEntityIds = new HashMap<>();
         targetEntityIds.put(ControlLoopOperationParams.PARAMS_ENTITY_RESOURCEID, RESOURCE_ID);
 
-        cqFuture = new CompletableFuture<>();
-        when(context.obtain(eq(AaiCqResponse.CONTEXT_KEY), any())).thenReturn(cqFuture);
-        when(context.getEvent()).thenReturn(onset);
-
-        params = ControlLoopOperationParams.builder().actor(CdsActorConstants.CDS_ACTOR)
-                .operation(GrpcOperation.NAME).context(context).actorService(new ActorService())
-                .targetEntity(TARGET_ENTITY).targetType(targetType).targetEntityIds(targetEntityIds)
-                .build();
+        params = ControlLoopOperationParams.builder().actor(CdsActorConstants.CDS_ACTOR).operation(GrpcOperation.NAME)
+                        .requestId(REQUEST_ID).actorService(new ActorService()).targetEntity(TARGET_ENTITY)
+                        .build();
     }
 
     /**
@@ -162,49 +134,12 @@ public class GrpcOperationTest {
      */
     @Test
     public void testSuccess() throws Exception {
-        ControlLoopEventContext context = new ControlLoopEventContext(onset);
-        loadCqData(context);
-
         Map<String, Object> payload = Map.of("artifact_name", "my_artifact", "artifact_version", "1.0");
 
         params = ControlLoopOperationParams.builder().actor(CdsActorConstants.CDS_ACTOR).operation("subscribe")
-                        .context(context).actorService(new ActorService()).targetEntity(TARGET_ENTITY)
-                        .targetType(targetType).targetEntityIds(targetEntityIds)
-                        .retry(0).timeoutSec(5).executor(blockingExecutor).payload(payload).build();
-
-        cdsProps.setHost("localhost");
-        cdsProps.setPort(sim.getPort());
-        cdsProps.setTimeout(3);
-
-        GrpcConfig config = new GrpcConfig(blockingExecutor, cdsProps);
-
-        operation = new GrpcOperation(params, config) {
-            @Override
-            protected CompletableFuture<OperationOutcome> startGuardAsync() {
-                // indicate that guard completed successfully
-                return CompletableFuture.completedFuture(params.makeOutcome(null));
-            }
-        };
-
-        OperationOutcome outcome = operation.start().get();
-        assertEquals(OperationResult.SUCCESS, outcome.getResult());
-        assertTrue(outcome.getResponse() instanceof ExecutionServiceOutput);
-    }
-
-    /**
-     * Tests "success" case with simulator using properties.
-     */
-    @Test
-    public void testSuccessViaProperties() throws Exception {
-        ControlLoopEventContext context = new ControlLoopEventContext(onset);
-        loadCqData(context);
-
-        Map<String, Object> payload = Map.of("artifact_name", "my_artifact", "artifact_version", "1.0");
-
-        params = ControlLoopOperationParams.builder().actor(CdsActorConstants.CDS_ACTOR).operation("subscribe")
-                        .context(context).actorService(new ActorService()).targetEntity(TARGET_ENTITY)
-                        .targetType(targetType).targetEntityIds(targetEntityIds)
-                        .retry(0).timeoutSec(5).executor(blockingExecutor).payload(payload).preprocessed(true).build();
+                        .requestId(REQUEST_ID).actorService(new ActorService()).targetEntity(TARGET_ENTITY)
+                        .retry(0).timeoutSec(5).executor(blockingExecutor).payload(payload)
+                        .preprocessed(true).build();
 
         cdsProps.setHost("localhost");
         cdsProps.setPort(sim.getPort());
@@ -254,137 +189,23 @@ public class GrpcOperationTest {
         // @formatter:on
     }
 
-    @Test
-    public void testGetPnf() {
-        ControlLoopEventContext context = new ControlLoopEventContext(onset);
-        params = params.toBuilder().context(context).build();
-        operation = new GrpcOperation(params, config);
-
-        // in neither property nor context
-        assertThatIllegalArgumentException().isThrownBy(() -> operation.getPnfData()).withMessage("missing PNF data");
-
-        // only in context
-        Pnf pnf = new Pnf();
-        params.getContext().setProperty(AaiGetPnfOperation.getKey(params.getTargetEntity()), pnf);
-        assertSame(pnf, operation.getPnfData());
-
-        // both - should choose the property
-        Pnf pnf2 = new Pnf();
-        operation.setProperty(OperationProperties.AAI_PNF, pnf2);
-        assertSame(pnf2, operation.getPnfData());
-    }
-
     @Test
     public void testGetServiceInstanceId() {
-        ControlLoopEventContext context = new ControlLoopEventContext(onset);
-        params = params.toBuilder().context(context).build();
         operation = new GrpcOperation(params, config);
-
-        // in neither property nor custom query
-        context.setProperty(AaiCqResponse.CONTEXT_KEY, mock(AaiCqResponse.class));
-        assertThatIllegalArgumentException().isThrownBy(() -> operation.getServiceInstanceId())
-                        .withMessage("Target service instance could not be found");
-
-        // only in custom query
-        loadCqData(params.getContext());
+        loadVnfData();
         assertEquals(MY_SVC_ID, operation.getServiceInstanceId());
-
-        // both - should choose the property
-        ServiceInstance serviceInstance = new ServiceInstance();
-        serviceInstance.setServiceInstanceId("another-service-id");
-        operation.setProperty(OperationProperties.AAI_SERVICE, serviceInstance);
-        assertEquals("another-service-id", operation.getServiceInstanceId());
     }
 
     @Test
     public void testGetVnfId() {
-        ControlLoopEventContext context = new ControlLoopEventContext(onset);
-        params = params.toBuilder().context(context).build();
         operation = new GrpcOperation(params, config);
-
-        // in neither property nor custom query
-        context.setProperty(AaiCqResponse.CONTEXT_KEY, mock(AaiCqResponse.class));
-        assertThatIllegalArgumentException().isThrownBy(() -> operation.getVnfId())
-                        .withMessage("Target generic vnf could not be found");
-
-        // only in custom query
-        loadCqData(params.getContext());
+        loadVnfData();
         assertEquals(MY_VNF, operation.getVnfId());
-
-        // both - should choose the property
-        GenericVnf vnf = new GenericVnf();
-        vnf.setVnfId("another-vnf-id");
-        operation.setProperty(OperationProperties.AAI_RESOURCE_VNF, vnf);
-        assertEquals("another-vnf-id", operation.getVnfId());
-    }
-
-    @Test
-    public void testStartPreprocessorAsync() throws InterruptedException, ExecutionException, TimeoutException {
-        AtomicBoolean guardStarted = new AtomicBoolean();
-
-        operation = new GrpcOperation(params, config) {
-            @Override
-            protected CompletableFuture<OperationOutcome> startGuardAsync() {
-                guardStarted.set(true);
-                return cqFuture;
-            }
-        };
-
-        CompletableFuture<OperationOutcome> future3 = operation.startPreprocessorAsync();
-        assertNotNull(future3);
-        assertTrue(guardStarted.get());
-        verify(context).obtain(eq(AaiCqResponse.CONTEXT_KEY), any());
-
-        cqFuture.complete(params.makeOutcome(null));
-        assertTrue(executor.runAll(100));
-        assertEquals(OperationResult.SUCCESS, future3.get(2, TimeUnit.SECONDS).getResult());
-        assertTrue(future3.isDone());
-    }
-
-    /**
-     * Tests startPreprocessorAsync() when the target type is PNF.
-     */
-    @Test
-    public void testStartPreprocessorAsyncPnf() throws InterruptedException, ExecutionException, TimeoutException {
-        AtomicBoolean guardStarted = new AtomicBoolean();
-
-        params = params.toBuilder().targetType(TargetType.PNF).build();
-
-        operation = new GrpcOperation(params, config) {
-            @Override
-            protected CompletableFuture<OperationOutcome> startGuardAsync() {
-                guardStarted.set(true);
-                return cqFuture;
-            }
-        };
-
-        CompletableFuture<OperationOutcome> future3 = operation.startPreprocessorAsync();
-        assertNotNull(future3);
-        assertTrue(guardStarted.get());
-        verify(context).obtain(eq(AaiGetPnfOperation.getKey(TARGET_ENTITY)), any());
-
-        cqFuture.complete(params.makeOutcome(null));
-        assertTrue(executor.runAll(100));
-        assertEquals(OperationResult.SUCCESS, future3.get(2, TimeUnit.SECONDS).getResult());
-        assertTrue(future3.isDone());
-    }
-
-    /**
-     * Tests startPreprocessorAsync(), when preprocessing is disabled.
-     */
-    @Test
-    public void testStartPreprocessorAsyncDisabled() {
-        params = params.toBuilder().preprocessed(true).build();
-        assertNull(new GrpcOperation(params, config).startPreprocessorAsync());
     }
 
     @Test
     public void testStartOperationAsync() throws Exception {
-
-        ControlLoopEventContext context = new ControlLoopEventContext(onset);
-        loadCqData(context);
-
-        verifyOperation(context);
+        verifyOperation(TargetType.VNF, this::loadVnfData);
     }
 
     /**
@@ -392,24 +213,7 @@ public class GrpcOperationTest {
      */
     @Test
     public void testStartOperationAsyncPnf() throws Exception {
-
-        targetType = TargetType.PNF;
-
-        ControlLoopEventContext context = new ControlLoopEventContext(onset);
-        loadPnfData(context);
-
-        verifyOperation(context);
-    }
-
-    @Test
-    public void testStartOperationAsyncWithAdditionalParams() throws Exception {
-
-        Map<String, String> additionalParams = new HashMap<>();
-        additionalParams.put("test", "additionalParams");
-        onset.setAdditionalEventParams(additionalParams);
-        ControlLoopEventContext context = new ControlLoopEventContext(onset);
-        loadCqData(context);
-        verifyOperation(context);
+        verifyOperation(TargetType.PNF, this::loadPnfData);
     }
 
     @Test
@@ -419,39 +223,15 @@ public class GrpcOperationTest {
                         .isThrownBy(() -> operation.startOperationAsync(1, params.makeOutcome(null)));
     }
 
-    @Test
-    public void testGetAdditionalEventParams() {
-        operation = new GrpcOperation(params, config);
-
-        // in neither property nor context
-        assertNull(operation.getAdditionalEventParams());
-
-        final Map<String, String> eventParams = Collections.emptyMap();
-
-        // only in context
-        onset.setAdditionalEventParams(eventParams);
-        assertSame(eventParams, operation.getAdditionalEventParams());
-
-        // both - should choose the property, even if it's null
-        operation.setProperty(OperationProperties.EVENT_ADDITIONAL_PARAMS, null);
-        assertNull(operation.getAdditionalEventParams());
-
-        // both - should choose the property
-        final Map<String, String> propParams = Collections.emptyMap();
-        operation.setProperty(OperationProperties.EVENT_ADDITIONAL_PARAMS, propParams);
-        assertSame(propParams, operation.getAdditionalEventParams());
-    }
-
-    private void verifyOperation(ControlLoopEventContext context) {
+    private void verifyOperation(TargetType targetType, Runnable loader) {
 
         Map<String, Object> payloadMap = Map.of(CdsActorConstants.KEY_CBA_NAME, CDS_BLUEPRINT_NAME,
                         CdsActorConstants.KEY_CBA_VERSION, CDS_BLUEPRINT_VERSION, "data",
                         "{\"mapInfo\":{\"key\":\"val\"},\"arrayInfo\":[\"one\",\"two\"],\"paramInfo\":\"val\"}");
 
         ControlLoopOperationParams params = ControlLoopOperationParams.builder().actor(CdsActorConstants.CDS_ACTOR)
-                        .operation(GrpcOperation.NAME).context(context).actorService(new ActorService())
-                        .targetEntity(TARGET_ENTITY).targetType(targetType).targetEntityIds(targetEntityIds)
-                        .payload(payloadMap).build();
+                        .operation(GrpcOperation.NAME).requestId(REQUEST_ID).actorService(new ActorService())
+                        .targetType(targetType).targetEntity(TARGET_ENTITY).payload(payloadMap).build();
 
         GrpcConfig config = new GrpcConfig(executor, cdsProps);
         operation = new GrpcOperation(params, config);
@@ -459,28 +239,31 @@ public class GrpcOperationTest {
         assertEquals(1000, operation.getTimeoutMs(0));
         assertEquals(2000, operation.getTimeoutMs(2));
         operation.generateSubRequestId(1);
+
+        loader.run();
         CompletableFuture<OperationOutcome> future3 = operation.startOperationAsync(1, params.makeOutcome(null));
         assertNotNull(future3);
     }
 
-    private void loadPnfData(ControlLoopEventContext context) throws CoderException {
-        String json = "{'dataA': 'valueA', 'dataB': 'valueB'}".replace('\'', '"');
-        StandardCoderObject sco = coder.decode(json, StandardCoderObject.class);
+    private void loadPnfData() {
+        try {
+            String json = "{'dataA': 'valueA', 'dataB': 'valueB'}".replace('\'', '"');
+            StandardCoderObject sco = coder.decode(json, StandardCoderObject.class);
+
+            operation.setProperty(OperationProperties.AAI_PNF, sco);
 
-        context.setProperty(AaiGetPnfOperation.getKey(TARGET_ENTITY), sco);
+        } catch (CoderException e) {
+            throw new IllegalArgumentException("cannot decode PNF json", e);
+        }
     }
 
-    private void loadCqData(ControlLoopEventContext context) {
+    private void loadVnfData() {
         GenericVnf genvnf = new GenericVnf();
         genvnf.setVnfId(MY_VNF);
+        operation.setProperty(OperationProperties.AAI_RESOURCE_VNF, genvnf);
 
         ServiceInstance serviceInstance = new ServiceInstance();
         serviceInstance.setServiceInstanceId(MY_SVC_ID);
-
-        AaiCqResponse cq = mock(AaiCqResponse.class);
-        when(cq.getGenericVnfByModelInvariantId(any())).thenReturn(genvnf);
-        when(cq.getServiceInstance()).thenReturn(serviceInstance);
-
-        context.setProperty(AaiCqResponse.CONTEXT_KEY, cq);
+        operation.setProperty(OperationProperties.AAI_SERVICE, serviceInstance);
     }
 }
index 11121c0..3e3b1f5 100644 (file)
@@ -25,16 +25,14 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertEquals;
 
 import java.util.Map;
+import java.util.UUID;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.MockitoAnnotations;
 import org.onap.policy.cds.properties.CdsServerProperties;
-import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.actor.cds.constants.CdsActorConstants;
 import org.onap.policy.controlloop.actorserviceprovider.Operation;
-import org.onap.policy.controlloop.actorserviceprovider.TargetType;
 import org.onap.policy.controlloop.actorserviceprovider.Util;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.ParameterValidationRuntimeException;
 
@@ -85,10 +83,8 @@ public class GrpcOperatorTest {
 
     @Test
     public void testBuildOperation() {
-        VirtualControlLoopEvent event = new VirtualControlLoopEvent();
-        ControlLoopEventContext context = new ControlLoopEventContext(event);
         ControlLoopOperationParams params = ControlLoopOperationParams.builder().actor(CdsActorConstants.CDS_ACTOR)
-                        .operation(GrpcOperation.NAME).context(context).targetType(TargetType.VM).build();
+                        .operation(GrpcOperation.NAME).requestId(UUID.randomUUID()).build();
 
         // not configured yet
         assertThatIllegalStateException().isThrownBy(() -> operation.buildOperation(params));
index d2a1536..2946a20 100644 (file)
@@ -66,18 +66,18 @@ public class BandwidthOnDemandOperation extends SdncOperation {
 
     @Override
     protected SdncRequest makeRequest(int attempt) {
-        String serviceInstance = getOptProperty(OperationProperties.ENRICHMENT_SERVICE_ID, SERVICE_ID_KEY);
+        String serviceInstance = getProperty(OperationProperties.ENRICHMENT_SERVICE_ID);
         if (StringUtils.isBlank(serviceInstance)) {
             throw new IllegalArgumentException("missing enrichment data, " + SERVICE_ID_KEY);
         }
 
         SdncHealVfModuleParameter bandwidth = new SdncHealVfModuleParameter();
         bandwidth.setName(BANDWIDTH);
-        bandwidth.setValue(getOptProperty(OperationProperties.ENRICHMENT_BANDWIDTH, BANDWIDTH));
+        bandwidth.setValue(getProperty(OperationProperties.ENRICHMENT_BANDWIDTH));
 
         SdncHealVfModuleParameter timeStamp = new SdncHealVfModuleParameter();
         timeStamp.setName(BANDWIDTH_CHANGE_TIME);
-        timeStamp.setValue(getOptProperty(OperationProperties.ENRICHMENT_BANDWIDTH_CHANGE_TIME, BANDWIDTH_CHANGE_TIME));
+        timeStamp.setValue(getProperty(OperationProperties.ENRICHMENT_BANDWIDTH_CHANGE_TIME));
 
         SdncHealVfModuleParametersInfo vfParametersInfo = new SdncHealVfModuleParametersInfo();
         vfParametersInfo.addParameters(bandwidth);
@@ -102,7 +102,7 @@ public class BandwidthOnDemandOperation extends SdncOperation {
         request.setUrl("/" + getPath());
 
         SdncHealVnfInfo vnfInfo = new SdncHealVnfInfo();
-        vnfInfo.setVnfId(getOptProperty(OperationProperties.ENRICHMENT_VNF_ID, VNF_ID));
+        vnfInfo.setVnfId(getProperty(OperationProperties.ENRICHMENT_VNF_ID));
 
         SdncHealVfModuleInfo vfModuleInfo = new SdncHealVfModuleInfo();
         vfModuleInfo.setVfModuleId("");
index 105a276..02209bb 100644 (file)
@@ -57,14 +57,14 @@ public class RerouteOperation extends SdncOperation {
 
     @Override
     protected SdncRequest makeRequest(int attempt) {
-        String serviceInstance = getOptProperty(OperationProperties.ENRICHMENT_SERVICE_ID, SERVICE_ID_KEY);
+        String serviceInstance = getProperty(OperationProperties.ENRICHMENT_SERVICE_ID);
         if (StringUtils.isBlank(serviceInstance)) {
             throw new IllegalArgumentException("missing enrichment data, " + SERVICE_ID_KEY);
         }
         SdncHealServiceInfo serviceInfo = new SdncHealServiceInfo();
         serviceInfo.setServiceInstanceId(serviceInstance);
 
-        String networkId = getOptProperty(OperationProperties.ENRICHMENT_NETWORK_ID, NETWORK_ID_KEY);
+        String networkId = getProperty(OperationProperties.ENRICHMENT_NETWORK_ID);
         if (StringUtils.isBlank(networkId)) {
             throw new IllegalArgumentException("missing enrichment data, " + NETWORK_ID_KEY);
         }
index defbcfb..d235fb2 100644 (file)
@@ -51,14 +51,6 @@ public abstract class SdncOperation extends HttpOperation<SdncResponse> {
         super(params, config, SdncResponse.class, propertyNames);
     }
 
-    /**
-     * Starts the GUARD.
-     */
-    @Override
-    protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
-        return startGuardAsync();
-    }
-
     @Override
     protected CompletableFuture<OperationOutcome> startOperationAsync(int attempt, OperationOutcome outcome) {
 
@@ -96,21 +88,4 @@ public abstract class SdncOperation extends HttpOperation<SdncResponse> {
     protected boolean isSuccess(Response rawResponse, SdncResponse response) {
         return response.getResponseOutput() != null && "200".equals(response.getResponseOutput().getResponseCode());
     }
-
-    /**
-     * Gets an optional property, first checking the properties, then checking the
-     * enrichment data.
-     *
-     * @param propName property name
-     * @param enrichmentName property name within the enrichment data
-     * @return the property's value, or {@code null} if it is not found
-     */
-    protected String getOptProperty(String propName, String enrichmentName) {
-        if (containsProperty(propName)) {
-            // return the value, even if it's null
-            return getProperty(propName);
-        }
-
-        return params.getContext().getEnrichment().get(enrichmentName);
-    }
 }
index 5e71a6c..ba68534 100644 (file)
@@ -25,7 +25,6 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import java.util.List;
-import java.util.Map;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -33,10 +32,8 @@ import org.junit.Test;
 import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance;
 import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
 import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpConfig;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpParams;
-import org.onap.policy.sdnc.SdncRequest;
 import org.onap.policy.sdnc.SdncResponse;
 
 public class BandwidthOnDemandOperationTest extends BasicSdncOperation {
@@ -114,30 +111,6 @@ public class BandwidthOnDemandOperationTest extends BasicSdncOperation {
 
     @Test
     public void testMakeRequest() throws Exception {
-        oper.generateSubRequestId(1);
-        SdncRequest request = oper.makeRequest(1);
-        assertEquals(MY_SERVICE, request.getNsInstanceId());
-        assertEquals(REQ_ID, request.getRequestId());
-        assertEquals("/my-path/", request.getUrl());
-        assertEquals(oper.getSubRequestId(), request.getHealRequest().getRequestHeaderInfo().getSvcRequestId());
-
-        verifyRequest("bod.json", request, IGNORE_FIELDS);
-
-        verifyMissing(BandwidthOnDemandOperation.SERVICE_ID_KEY, "service", BandwidthOnDemandOperation::new);
-
-        // perform the operation
-        makeContext();
-        verifyRequest("bod.json", verifyOperation(oper), IGNORE_FIELDS);
-    }
-
-    @Test
-    public void testMakeRequestViaProperties() throws Exception {
-        // clear the enrichment data and remake the operation
-        event.setAai(null);
-        context = new ControlLoopEventContext(event);
-        params = params.toBuilder().context(context).build();
-        oper = new BandwidthOnDemandOperation(params, config);
-
         oper.setProperty(OperationProperties.ENRICHMENT_SERVICE_ID, MY_SERVICE);
         oper.setProperty(OperationProperties.ENRICHMENT_BANDWIDTH, MY_BANDWIDTH);
         oper.setProperty(OperationProperties.ENRICHMENT_BANDWIDTH_CHANGE_TIME, MY_CHANGE_TIME);
@@ -145,11 +118,4 @@ public class BandwidthOnDemandOperationTest extends BasicSdncOperation {
 
         verifyRequest("bod.json", verifyOperation(oper), IGNORE_FIELDS);
     }
-
-    @Override
-    protected Map<String, String> makeEnrichment() {
-        return Map.of(BandwidthOnDemandOperation.SERVICE_ID_KEY, MY_SERVICE, BandwidthOnDemandOperation.BANDWIDTH,
-                        MY_BANDWIDTH, BandwidthOnDemandOperation.BANDWIDTH_CHANGE_TIME, MY_CHANGE_TIME,
-                        BandwidthOnDemandOperation.VNF_ID, MY_VNF);
-    }
 }
index a118ab1..f4b6141 100644 (file)
@@ -20,7 +20,6 @@
 
 package org.onap.policy.controlloop.actor.sdnc;
 
-import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -29,7 +28,6 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import java.util.Map;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeoutException;
@@ -41,13 +39,10 @@ import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.controlloop.actor.test.BasicHttpOperation;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
-import org.onap.policy.controlloop.actorserviceprovider.impl.OperationMaker;
-import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpConfig;
 import org.onap.policy.sdnc.SdncRequest;
 import org.onap.policy.sdnc.SdncResponse;
 import org.onap.policy.sdnc.SdncResponseOutput;
 import org.onap.policy.simulators.Util;
-import org.powermock.reflect.Whitebox;
 
 /**
  * Superclass for various operator tests.
@@ -137,26 +132,4 @@ public abstract class BasicSdncOperation extends BasicHttpOperation {
 
         return coder.decode(reqText, SdncRequest.class);
     }
-
-    /**
-     * Verifies that an exception is thrown if a field is missing from the enrichment
-     * data.
-     *
-     * @param fieldName name of the field to be removed from the enrichment data
-     * @param expectedText text expected in the exception message
-     */
-    protected void verifyMissing(String fieldName, String expectedText,
-                    OperationMaker<HttpConfig, SdncOperation> maker) {
-
-        makeContext();
-        enrichment.remove(fieldName);
-
-        SdncOperation oper = maker.apply(params, config);
-
-        assertThatIllegalArgumentException().isThrownBy(() -> Whitebox.invokeMethod(oper, "makeRequest", 1))
-                        .withMessageContaining("missing").withMessageContaining(expectedText);
-    }
-
-    @Override
-    protected abstract Map<String, String> makeEnrichment();
 }
index e41ef3f..3f08784 100644 (file)
@@ -25,7 +25,6 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import java.util.List;
-import java.util.Map;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -33,10 +32,8 @@ import org.junit.Test;
 import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance;
 import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
 import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpConfig;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpParams;
-import org.onap.policy.sdnc.SdncRequest;
 import org.onap.policy.sdnc.SdncResponse;
 
 public class RerouteOperationTest extends BasicSdncOperation {
@@ -107,39 +104,9 @@ public class RerouteOperationTest extends BasicSdncOperation {
 
     @Test
     public void testMakeRequest() throws Exception {
-        oper.generateSubRequestId(1);
-        SdncRequest request = oper.makeRequest(1);
-        assertEquals(MY_SERVICE, request.getNsInstanceId());
-        assertEquals(REQ_ID, request.getRequestId());
-        assertEquals("/my-path/", request.getUrl());
-        assertEquals(oper.getSubRequestId(), request.getHealRequest().getRequestHeaderInfo().getSvcRequestId());
-
-        verifyRequest("reroute.json", request, IGNORE_FIELDS);
-
-        verifyMissing(RerouteOperation.SERVICE_ID_KEY, "service", RerouteOperation::new);
-        verifyMissing(RerouteOperation.NETWORK_ID_KEY, "network", RerouteOperation::new);
-
-        // perform the operation
-        makeContext();
-        verifyRequest("reroute.json", verifyOperation(oper), IGNORE_FIELDS);
-    }
-
-    @Test
-    public void testMakeRequestViaProperties() throws Exception {
-        // clear the enrichment data and remake the operation
-        event.setAai(null);
-        context = new ControlLoopEventContext(event);
-        params = params.toBuilder().context(context).build();
-        oper = new RerouteOperation(params, config);
-
         oper.setProperty(OperationProperties.ENRICHMENT_SERVICE_ID, MY_SERVICE);
         oper.setProperty(OperationProperties.ENRICHMENT_NETWORK_ID, MY_NETWORK);
 
         verifyRequest("reroute.json", verifyOperation(oper), IGNORE_FIELDS);
     }
-
-    @Override
-    protected Map<String, String> makeEnrichment() {
-        return Map.of(RerouteOperation.SERVICE_ID_KEY, MY_SERVICE, RerouteOperation.NETWORK_ID_KEY, MY_NETWORK);
-    }
 }
index 4ba12c6..9055715 100644 (file)
@@ -22,16 +22,11 @@ package org.onap.policy.controlloop.actor.sdnc;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.util.Collections;
-import java.util.Map;
-import java.util.TreeMap;
 import org.junit.Before;
 import org.junit.Test;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
 import org.onap.policy.sdnc.SdncHealRequest;
 import org.onap.policy.sdnc.SdncHealRequestHeaderInfo;
 import org.onap.policy.sdnc.SdncRequest;
@@ -74,11 +69,6 @@ public class SdncOperationTest extends BasicSdncOperation {
         assertEquals(DEFAULT_OPERATION, oper.getName());
     }
 
-    @Test
-    public void testStartPreprocessorAsync() {
-        assertNotNull(oper.startPreprocessorAsync());
-    }
-
     @Test
     public void testStartOperationAsync_testStartRequestAsync() throws Exception {
         verifyOperation(oper);
@@ -102,47 +92,4 @@ public class SdncOperationTest extends BasicSdncOperation {
         response.setResponseOutput(null);
         assertFalse(oper.isSuccess(null, response));
     }
-
-    @Test
-    public void testGetOptProperty() {
-        // in neither property nor enrichment
-        assertNull(oper.getOptProperty("propA", "propA2"));
-
-        // both - should choose the property
-        remakeOper(Map.of("propB2", "valueB2"));
-        oper.setProperty("propB", "valueB");
-        assertEquals("valueB", oper.getOptProperty("propB", "propB2"));
-
-        // both - should choose the property, even if it's null
-        remakeOper(Map.of("propC2", "valueC2"));
-        oper.setProperty("propC", null);
-        assertNull(oper.getOptProperty("propC", "propC2"));
-
-        // only in enrichment data
-        remakeOper(Map.of("propD2", "valueD2"));
-        assertEquals("valueD2", oper.getOptProperty("propD", "propD2"));
-    }
-
-    /**
-     * Remakes the operation, with the specified A&AI enrichment data.
-     *
-     * @param aai A&AI enrichment data
-     */
-    private void remakeOper(Map<String, String> aai) {
-        event.setAai(aai);
-        context = new ControlLoopEventContext(event);
-        params = params.toBuilder().context(context).build();
-
-        oper = new SdncOperation(params, config, Collections.emptyList()) {
-            @Override
-            protected SdncRequest makeRequest(int attempt) {
-                return request;
-            }
-        };
-    }
-
-    @Override
-    protected Map<String, String> makeEnrichment() {
-        return new TreeMap<>();
-    }
 }
index 308ddd9..14f77a6 100644 (file)
@@ -21,7 +21,6 @@
 package org.onap.policy.controlloop.actor.sdnr;
 
 import java.util.List;
-import java.util.concurrent.CompletableFuture;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
 import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
@@ -70,11 +69,6 @@ public class SdnrOperation extends BidirectionalTopicOperation<PciMessage, PciMe
         return List.of(getSubRequestId());
     }
 
-    @Override
-    protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
-        return startGuardAsync();
-    }
-
     /*
      * NOTE: This should avoid throwing exceptions, so that a ControlLoopResponse can be
      * added to the outcome. Consequently, it returns FAILURE if a required field is
@@ -156,7 +150,7 @@ public class SdnrOperation extends BidirectionalTopicOperation<PciMessage, PciMe
         requestCommonHeader.setSubRequestId(subRequestId);
 
         sdnrRequest.setCommonHeader(requestCommonHeader);
-        sdnrRequest.setPayload(getEventPayload());
+        sdnrRequest.setPayload(getProperty(OperationProperties.EVENT_PAYLOAD));
         sdnrRequest.setAction(params.getOperation());
 
         /*
@@ -169,18 +163,4 @@ public class SdnrOperation extends BidirectionalTopicOperation<PciMessage, PciMe
         /* Return the request to be sent through dmaap. */
         return dmaapRequest;
     }
-
-    /**
-     * Gets the event payload, first checking for it in the properties and then in the
-     * event.
-     *
-     * @return the event payload
-     */
-    protected String getEventPayload() {
-        if (containsProperty(OperationProperties.EVENT_PAYLOAD)) {
-            return getProperty(OperationProperties.EVENT_PAYLOAD);
-        }
-
-        return params.getContext().getEvent().getPayload();
-    }
 }
index 912d273..64e88aa 100644 (file)
@@ -20,7 +20,6 @@
 
 package org.onap.policy.controlloop.actor.sdnr;
 
-import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -38,8 +37,6 @@ import org.onap.policy.controlloop.actor.test.BasicBidirectionalTopicOperation;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
 import org.onap.policy.controlloop.actorserviceprovider.Util;
-import org.onap.policy.controlloop.actorserviceprovider.impl.OperationMaker;
-import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicConfig;
 import org.onap.policy.sdnr.PciBody;
 import org.onap.policy.sdnr.PciMessage;
 import org.onap.policy.sdnr.PciResponse;
@@ -47,7 +44,6 @@ import org.onap.policy.sdnr.Status;
 import org.onap.policy.sdnr.util.StatusCodeEnum;
 import org.onap.policy.simulators.SdnrTopicServer;
 import org.onap.policy.simulators.TopicServer;
-import org.powermock.reflect.Whitebox;
 
 public abstract class BasicSdnrOperation extends BasicBidirectionalTopicOperation<PciMessage> {
 
@@ -121,25 +117,6 @@ public abstract class BasicSdnrOperation extends BasicBidirectionalTopicOperatio
         assertEquals(OperationResult.SUCCESS, outcome.getResult());
     }
 
-    /**
-     * Verifies that an exception is thrown if a field is missing from the enrichment
-     * data.
-     *
-     * @param fieldName name of the field to be removed from the enrichment data
-     * @param expectedText text expected in the exception message
-     */
-    protected void verifyMissing(String fieldName, String expectedText,
-                    OperationMaker<BidirectionalTopicConfig, SdnrOperation> maker) {
-
-        makeContext();
-        enrichment.remove(fieldName);
-
-        SdnrOperation oper = maker.apply(params, config);
-
-        assertThatIllegalArgumentException().isThrownBy(() -> Whitebox.invokeMethod(oper, "makeRequest", 1))
-                        .withMessageContaining("missing").withMessageContaining(expectedText);
-    }
-
     /**
      * Provides a response to the listener.
      *
index 90452a9..3a8f0b7 100644 (file)
@@ -22,28 +22,20 @@ package org.onap.policy.controlloop.actor.sdnr;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
 
 import java.util.Arrays;
 import java.util.List;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.atomic.AtomicBoolean;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.onap.policy.controlloop.actor.test.BasicBidirectionalTopicOperation;
-import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
 import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
 import org.onap.policy.controlloop.actorserviceprovider.impl.BidirectionalTopicOperation.Status;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicConfig;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.BidirectionalTopicParams;
@@ -134,46 +126,13 @@ public class SdnrOperationTest extends BasicSdnrOperation {
 
         params = params.toBuilder().retry(0).timeoutSec(5).executor(blockingExecutor).build();
 
-        operation = new SdnrOperation(params, config) {
-            @Override
-            protected CompletableFuture<OperationOutcome> startGuardAsync() {
-                return null;
-            }
-        };
+        operation = new SdnrOperation(params, config);
 
         outcome = operation.start().get();
         assertEquals(OperationResult.SUCCESS, outcome.getResult());
         assertTrue(outcome.getResponse() instanceof PciMessage);
     }
 
-    @Test
-    public void testStartPreprocessorAsync() throws Exception {
-        final CompletableFuture<OperationOutcome> future2 = new CompletableFuture<>();
-        context = mock(ControlLoopEventContext.class);
-        when(context.getEvent()).thenReturn(event);
-        params = params.toBuilder().context(context).build();
-
-        AtomicBoolean guardStarted = new AtomicBoolean();
-
-        operation = new SdnrOperation(params, config) {
-            @Override
-            protected CompletableFuture<OperationOutcome> startGuardAsync() {
-                guardStarted.set(true);
-                return super.startGuardAsync();
-            }
-        };
-        CompletableFuture<OperationOutcome> future3 = operation.startPreprocessorAsync();
-
-        assertNotNull(future3);
-        assertFalse(future.isDone());
-        assertTrue(guardStarted.get());
-
-        future2.complete(params.makeOutcome(null));
-        assertTrue(executor.runAll(100));
-        assertTrue(future3.isDone());
-        assertEquals(OperationResult.SUCCESS, future3.get().getResult());
-    }
-
     @Test
     public void testDetmStatusStringResponse() {
         final org.onap.policy.sdnr.Status status = response.getBody().getOutput().getStatus();
@@ -236,24 +195,6 @@ public class SdnrOperationTest extends BasicSdnrOperation {
         checkOutcome();
     }
 
-    @Test
-    public void testGetEventPayload() {
-        // in neither property nor event
-        assertNull(operation.getEventPayload());
-
-        // only in event
-        event.setPayload("valueA2");
-        assertEquals("valueA2", operation.getEventPayload());
-
-        // both - should choose the property
-        operation.setProperty(OperationProperties.EVENT_PAYLOAD, "valueB");
-        assertEquals("valueB", operation.getEventPayload());
-
-        // both - should choose the property, even if it's null
-        operation.setProperty(OperationProperties.EVENT_PAYLOAD, null);
-        assertNull(operation.getEventPayload());
-    }
-
     protected void checkOutcome() {
         assertSame(outcome, operation.setOutcome(outcome, OperationResult.SUCCESS, response));
         assertEquals(OperationResult.SUCCESS, outcome.getResult());
index ac25c84..9020c0b 100644 (file)
@@ -29,8 +29,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
-import java.util.concurrent.CompletableFuture;
-import java.util.function.Function;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import org.onap.aai.domain.yang.CloudRegion;
@@ -38,8 +36,6 @@ import org.onap.aai.domain.yang.GenericVnf;
 import org.onap.aai.domain.yang.ModelVer;
 import org.onap.aai.domain.yang.ServiceInstance;
 import org.onap.aai.domain.yang.Tenant;
-import org.onap.policy.aai.AaiConstants;
-import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.common.gson.GsonMessageBodyHandler;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
@@ -67,7 +63,6 @@ import org.onap.policy.so.util.SoLocalDateTimeTypeAdapter;
 public abstract class SoOperation extends HttpOperation<SoResponse> {
     private static final Coder coder = new SoCoder();
 
-    public static final String PAYLOAD_KEY_VF_COUNT = "vfCount";
     public static final String FAILED = "FAILED";
     public static final String COMPLETE = "COMPLETE";
     public static final int SO_RESPONSE_CODE = 999;
@@ -86,8 +81,6 @@ public abstract class SoOperation extends HttpOperation<SoResponse> {
     private final String modelVersion;
 
 
-    private final String vfCountKey;
-
 
     /**
      * Constructs the object.
@@ -104,7 +97,6 @@ public abstract class SoOperation extends HttpOperation<SoResponse> {
         this.modelVersionId = null;
         this.modelVersion = null;
         this.modelName = null;
-        this.vfCountKey = null;
 
         verifyNotNull("Target information", params.getTargetType());
     }
@@ -134,9 +126,6 @@ public abstract class SoOperation extends HttpOperation<SoResponse> {
         this.modelName = targetEntityIds
                 .get(ControlLoopOperationParams.PARAMS_ENTITY_MODEL_NAME);
 
-        this.vfCountKey = SoConstants.VF_COUNT_PREFIX + "[" + modelCustomizationId + "][" + modelInvariantId + "]["
-                + modelVersionId + "]";
-
         verifyNotNull("Target information", params.getTargetType());
     }
 
@@ -147,8 +136,8 @@ public abstract class SoOperation extends HttpOperation<SoResponse> {
     }
 
     /**
-     * Validates that the parameters contain the required target information to extract
-     * the VF count from the custom query.
+     * Validates that the parameters contain the required target information to construct
+     * the request.
      */
     protected void validateTarget() {
         verifyNotNull(ControlLoopOperationParams.PARAMS_ENTITY_MODEL_CUSTOMIZATION_ID, modelCustomizationId);
@@ -158,69 +147,16 @@ public abstract class SoOperation extends HttpOperation<SoResponse> {
 
     private void verifyNotNull(String type, Object value) {
         if (value == null) {
-            throw new IllegalArgumentException("missing " + type + " for guard payload");
+            throw new IllegalArgumentException("missing Target." + type);
         }
     }
 
-    /**
-     * Starts the GUARD.
-     */
-    @Override
-    protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
-        return startGuardAsync();
-    }
-
-    /**
-     * Gets the VF Count.
-     *
-     * @return a future to cancel or await the VF Count
-     */
-    @SuppressWarnings("unchecked")
-    protected CompletableFuture<OperationOutcome> obtainVfCount() {
-        if (params.getContext().contains(vfCountKey)) {
-            // already have the VF count
-            return null;
-        }
-
-        // need custom query from which to extract the VF count
-        ControlLoopOperationParams cqParams = params.toBuilder().actor(AaiConstants.ACTOR_NAME)
-                        .operation(AaiCqResponse.OPERATION).payload(null).retry(null).timeoutSec(null).build();
-
-        // run Custom Query and then extract the VF count
-        return sequence(() -> params.getContext().obtain(AaiCqResponse.CONTEXT_KEY, cqParams), this::storeVfCount);
-    }
-
-    /**
-     * Stores the VF count.
-     *
-     * @return {@code null}
-     */
-    private CompletableFuture<OperationOutcome> storeVfCount() {
-        if (!params.getContext().contains(vfCountKey)) {
-            AaiCqResponse cq = params.getContext().getProperty(AaiCqResponse.CONTEXT_KEY);
-            int vfcount = cq.getVfModuleCount(modelCustomizationId, modelInvariantId, modelVersionId);
-
-            params.getContext().setProperty(vfCountKey, vfcount);
-        }
-
-        return null;
-    }
-
     protected int getVfCount() {
-        if (containsProperty(OperationProperties.DATA_VF_COUNT)) {
-            return getProperty(OperationProperties.DATA_VF_COUNT);
-        }
-
-        return params.getContext().getProperty(vfCountKey);
+        return getRequiredProperty(OperationProperties.DATA_VF_COUNT, "VF Count");
     }
 
     protected void setVfCount(int vfCount) {
-        if (containsProperty(OperationProperties.DATA_VF_COUNT)) {
-            setProperty(OperationProperties.DATA_VF_COUNT, vfCount);
-            return;
-        }
-
-        params.getContext().setProperty(vfCountKey, vfCount);
+        setProperty(OperationProperties.DATA_VF_COUNT, vfCount);
     }
 
     @Override
@@ -381,13 +317,12 @@ public abstract class SoOperation extends HttpOperation<SoResponse> {
     }
 
     /**
-     * Construct cloudConfiguration for the SO requestDetails. Overridden for custom
-     * query.
+     * Construct cloudConfiguration for the SO requestDetails.
      *
      * @param tenantItem tenant item from A&AI named-query response
      * @return SO cloud configuration
      */
-    protected SoCloudConfiguration constructCloudConfigurationCq(Tenant tenantItem, CloudRegion cloudRegionItem) {
+    protected SoCloudConfiguration constructCloudConfiguration(Tenant tenantItem, CloudRegion cloudRegionItem) {
         SoCloudConfiguration cloudConfiguration = new SoCloudConfiguration();
         cloudConfiguration.setTenantId(tenantItem.getTenantId());
         cloudConfiguration.setLcpCloudRegionId(cloudRegionItem.getCloudRegionId());
@@ -405,77 +340,33 @@ public abstract class SoOperation extends HttpOperation<SoResponse> {
         return headers;
     }
 
-    /**
-     * Gets an item from a property. If the property is not found, then it invokes the
-     * given function to retrieve it from the custom query data. If that fails as well,
-     * then an exception is thrown.
-     *
-     * @param propName property name
-     * @param getter method to extract the value from the custom query data
-     * @param errmsg error message to include in any exception
-     * @return the retrieved item
-     */
-    protected <T> T getItem(String propName, Function<AaiCqResponse, T> getter, String errmsg) {
-        if (containsProperty(propName)) {
-            return getProperty(propName);
-        }
-
-        final AaiCqResponse aaiCqResponse = params.getContext().getProperty(AaiCqResponse.CONTEXT_KEY);
-        T item = getter.apply(aaiCqResponse);
-        if (item == null) {
-            throw new IllegalArgumentException(errmsg);
-        }
-
-        return item;
-    }
-
     /*
      * These methods extract data from the Custom Query and throw an
      * IllegalArgumentException if the desired data item is not found.
      */
 
     protected GenericVnf getVnfItem(SoModelInfo soModelInfo) {
-        // @formatter:off
-        return getItem(OperationProperties.AAI_VNF,
-            cq -> cq.getGenericVnfByVfModuleModelInvariantId(soModelInfo.getModelInvariantId()),
-            "missing generic VNF");
-        // @formatter:on
+        return getRequiredProperty(OperationProperties.AAI_VNF, "generic VNF");
     }
 
     protected ServiceInstance getServiceInstance() {
-        return getItem(OperationProperties.AAI_SERVICE, AaiCqResponse::getServiceInstance, "missing VNF Service Item");
+        return getRequiredProperty(OperationProperties.AAI_SERVICE, "VNF Service Item");
     }
 
     protected Tenant getDefaultTenant() {
-        // @formatter:off
-        return getItem(OperationProperties.AAI_DEFAULT_TENANT,
-            AaiCqResponse::getDefaultTenant,
-            "missing Default Tenant Item");
-        // @formatter:on
+        return getRequiredProperty(OperationProperties.AAI_DEFAULT_TENANT, "Default Tenant Item");
     }
 
     protected CloudRegion getDefaultCloudRegion() {
-        // @formatter:off
-        return getItem(OperationProperties.AAI_DEFAULT_CLOUD_REGION,
-            AaiCqResponse::getDefaultCloudRegion,
-            "missing Default Cloud Region");
-        // @formatter:on
+        return getRequiredProperty(OperationProperties.AAI_DEFAULT_CLOUD_REGION, "Default Cloud Region");
     }
 
-    protected ModelVer getVnfModel(GenericVnf vnfItem) {
-        // @formatter:off
-        return getItem(OperationProperties.AAI_VNF_MODEL,
-            cq -> cq.getModelVerByVersionId(vnfItem.getModelVersionId()),
-            "missing generic VNF Model");
-        // @formatter:on
+    protected ModelVer getVnfModel() {
+        return getRequiredProperty(OperationProperties.AAI_VNF_MODEL, "generic VNF Model");
     }
 
-    protected ModelVer getServiceModel(ServiceInstance vnfServiceItem) {
-        // @formatter:off
-        return getItem(OperationProperties.AAI_SERVICE_MODEL,
-            cq -> cq.getModelVerByVersionId(vnfServiceItem.getModelVersionId()),
-            "missing Service Model");
-        // @formatter:on
+    protected ModelVer getServiceModel() {
+        return getRequiredProperty(OperationProperties.AAI_SERVICE_MODEL, "Service Model");
     }
 
     // these may be overridden by junit tests
index af06c91..f5c860e 100644 (file)
@@ -33,8 +33,6 @@ import org.onap.aai.domain.yang.GenericVnf;
 import org.onap.aai.domain.yang.ModelVer;
 import org.onap.aai.domain.yang.ServiceInstance;
 import org.onap.aai.domain.yang.Tenant;
-import org.onap.policy.aai.AaiConstants;
-import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.common.endpoints.utils.NetLoggerUtil.EventType;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
@@ -51,10 +49,8 @@ import org.onap.policy.so.SoRequestParameters;
 import org.onap.policy.so.SoResponse;
 
 /**
- * Operation to create a VF Module. This gets the VF count from the A&AI Custom Query
- * response and stores it in the context. It also passes the count+1 to the guard. Once
- * the "create" completes successfully, it bumps the VF count that's stored in the
- * context.
+ * Operation to create a VF Module. When this completes successfully, it increments its VF
+ * Count property.
  */
 public class VfModuleCreate extends SoOperation {
     public static final String NAME = "VF Module Create";
@@ -86,38 +82,6 @@ public class VfModuleCreate extends SoOperation {
         validateTarget();
     }
 
-    /**
-     * Ensures that A&AI custom query has been performed, and then runs the guard.
-     */
-    @Override
-    @SuppressWarnings("unchecked")
-    protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
-        if (params.isPreprocessed()) {
-            return null;
-        }
-
-        // need the VF count
-        ControlLoopOperationParams cqParams = params.toBuilder().actor(AaiConstants.ACTOR_NAME)
-                        .operation(AaiCqResponse.OPERATION).payload(null).retry(null).timeoutSec(null).build();
-
-        // run Custom Query, extract the VF count, and then run the Guard
-
-        // @formatter:off
-        return sequence(() -> params.getContext().obtain(AaiCqResponse.CONTEXT_KEY, cqParams),
-                        this::obtainVfCount, this::startGuardAsync);
-        // @formatter:on
-    }
-
-    @Override
-    protected Map<String, Object> makeGuardPayload() {
-        Map<String, Object> payload = super.makeGuardPayload();
-
-        // run guard with the proposed vf count
-        payload.put(PAYLOAD_KEY_VF_COUNT, getVfCount() + 1);
-
-        return payload;
-    }
-
     @Override
     protected CompletableFuture<OperationOutcome> startOperationAsync(int attempt, OperationOutcome outcome) {
 
@@ -166,8 +130,8 @@ public class VfModuleCreate extends SoOperation {
         final ServiceInstance vnfServiceItem = getServiceInstance();
         final Tenant tenantItem = getDefaultTenant();
         final CloudRegion cloudRegionItem = getDefaultCloudRegion();
-        final ModelVer vnfModel = getVnfModel(vnfItem);
-        final ModelVer vnfServiceModel = getServiceModel(vnfServiceItem);
+        final ModelVer vnfModel = getVnfModel();
+        final ModelVer vnfServiceModel = getServiceModel();
 
         SoRequest request = new SoRequest();
         request.setOperationType(SoOperationType.SCALE_OUT);
@@ -181,7 +145,7 @@ public class VfModuleCreate extends SoOperation {
         request.getRequestDetails().getRequestParameters().setUserParams(null);
 
         // cloudConfiguration
-        request.getRequestDetails().setCloudConfiguration(constructCloudConfigurationCq(tenantItem, cloudRegionItem));
+        request.getRequestDetails().setCloudConfiguration(constructCloudConfiguration(tenantItem, cloudRegionItem));
 
         // modelInfo
         request.getRequestDetails().setModelInfo(soModelInfo);
index f35cdb4..9adb62c 100644 (file)
@@ -42,8 +42,6 @@ import org.onap.aai.domain.yang.CloudRegion;
 import org.onap.aai.domain.yang.GenericVnf;
 import org.onap.aai.domain.yang.ServiceInstance;
 import org.onap.aai.domain.yang.Tenant;
-import org.onap.policy.aai.AaiConstants;
-import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.common.endpoints.http.client.HttpClient;
 import org.onap.policy.common.endpoints.utils.NetLoggerUtil.EventType;
@@ -59,10 +57,8 @@ import org.onap.policy.so.SoRequestDetails;
 import org.onap.policy.so.SoResponse;
 
 /**
- * Operation to delete a VF Module. This gets the VF count from the A&AI Custom Query
- * response and stores it in the context. It also passes the count-1 to the guard. Once
- * the "delete" completes successfully, it decrements the VF count that's stored in the
- * context.
+ * Operation to delete a VF Module. When this completes successfully, it decrements its VF
+ * Count property.
  */
 public class VfModuleDelete extends SoOperation {
     public static final String NAME = "VF Module Delete";
@@ -93,38 +89,6 @@ public class VfModuleDelete extends SoOperation {
         validateTarget();
     }
 
-    /**
-     * Ensures that A&AI custom query has been performed, and then runs the guard.
-     */
-    @Override
-    @SuppressWarnings("unchecked")
-    protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
-        if (params.isPreprocessed()) {
-            return null;
-        }
-
-        // need the VF count
-        ControlLoopOperationParams cqParams = params.toBuilder().actor(AaiConstants.ACTOR_NAME)
-                        .operation(AaiCqResponse.OPERATION).payload(null).retry(null).timeoutSec(null).build();
-
-        // run Custom Query, extract the VF count, and then run the Guard
-
-        // @formatter:off
-        return sequence(() -> params.getContext().obtain(AaiCqResponse.CONTEXT_KEY, cqParams),
-                        this::obtainVfCount, this::startGuardAsync);
-        // @formatter:on
-    }
-
-    @Override
-    protected Map<String, Object> makeGuardPayload() {
-        Map<String, Object> payload = super.makeGuardPayload();
-
-        // run guard with the proposed vf count
-        payload.put(PAYLOAD_KEY_VF_COUNT, getVfCount() - 1);
-
-        return payload;
-    }
-
     @Override
     protected CompletableFuture<OperationOutcome> startOperationAsync(int attempt, OperationOutcome outcome) {
 
@@ -261,7 +225,7 @@ public class VfModuleDelete extends SoOperation {
         details.setConfigurationParameters(null);
 
         // cloudConfiguration
-        details.setCloudConfiguration(constructCloudConfigurationCq(tenantItem, cloudRegionItem));
+        details.setCloudConfiguration(constructCloudConfiguration(tenantItem, cloudRegionItem));
 
         // modelInfo
         details.setModelInfo(soModelInfo);
index d2e2872..4b05daa 100644 (file)
@@ -20,7 +20,6 @@
 
 package org.onap.policy.controlloop.actor.so;
 
-import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.when;
 
 import java.util.Collections;
@@ -29,7 +28,6 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import org.mockito.Mock;
-import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.common.endpoints.event.comm.bus.internal.BusTopicParams;
 import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance;
 import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
@@ -174,9 +172,4 @@ public abstract class BasicSoOperation extends BasicHttpOperation {
 
         return payload;
     }
-
-    protected AaiCqResponse makeCqResponse() {
-        when(cqResponse.getVfModuleCount(any(), any(), any())).thenReturn(VF_COUNT);
-        return cqResponse;
-    }
 }
index e9a4954..6f4ac0e 100644 (file)
@@ -24,12 +24,10 @@ package org.onap.policy.controlloop.actor.so;
 import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import java.time.LocalDateTime;
@@ -37,22 +35,11 @@ import java.time.Month;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.concurrent.CompletableFuture;
-import java.util.function.BiConsumer;
-import java.util.function.Supplier;
 import org.junit.Before;
 import org.junit.Test;
-import org.onap.aai.domain.yang.CloudRegion;
-import org.onap.aai.domain.yang.GenericVnf;
-import org.onap.aai.domain.yang.ModelVer;
-import org.onap.aai.domain.yang.ServiceInstance;
-import org.onap.aai.domain.yang.Tenant;
-import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.controlloop.ControlLoopOperation;
-import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
-import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
 import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
 import org.onap.policy.so.SoModelInfo;
@@ -63,13 +50,8 @@ import org.onap.policy.so.SoResponse;
 
 public class SoOperationTest extends BasicSoOperation {
 
-    private static final String VF_COUNT_KEY = SoConstants.VF_COUNT_PREFIX
-                    + "[my-model-customization-id][my-model-invariant-id][my-model-version-id]";
-
     private static final List<String> PROP_NAMES = Collections.emptyList();
 
-    private static final String VERSION_ID = "1.2.3";
-
     private SoOperation oper;
 
     /**
@@ -119,77 +101,6 @@ public class SoOperationTest extends BasicSoOperation {
         targetEntities.put(expectedText, originalValue);
     }
 
-    @Test
-    public void testStartPreprocessorAsync() {
-        assertNotNull(oper.startPreprocessorAsync());
-    }
-
-    @Test
-    public void testObtainVfCount_testGetVfCount_testSetVfCount() throws Exception {
-        // insert CQ data so it's there for the check
-        context.setProperty(AaiCqResponse.CONTEXT_KEY, makeCqResponse());
-
-        // shouldn't actually need to do anything
-        assertNull(oper.obtainVfCount());
-
-        // verify that the count was stored
-        Integer vfcount = context.getProperty(VF_COUNT_KEY);
-        assertEquals(VF_COUNT, vfcount);
-        assertEquals(VF_COUNT.intValue(), oper.getVfCount());
-
-        // change the count and then verify that it isn't overwritten by another call
-        oper.setVfCount(VF_COUNT + 1);
-
-        assertNull(oper.obtainVfCount());
-        vfcount = context.getProperty(VF_COUNT_KEY);
-        assertEquals(VF_COUNT + 1, vfcount.intValue());
-        assertEquals(VF_COUNT + 1, oper.getVfCount());
-    }
-
-    /**
-     * Tests the VF Count methods when properties are being used.
-     * @throws Exception if an error occurs
-     */
-    @Test
-    public void testGetVfCount_testSetVfCount_ViaProperties() throws Exception {
-        oper.setProperty(OperationProperties.DATA_VF_COUNT, VF_COUNT);
-
-        // verify that the count was stored
-        assertEquals(VF_COUNT.intValue(), oper.getVfCount());
-
-        oper.setVfCount(VF_COUNT + 1);
-
-        int count = oper.getProperty(OperationProperties.DATA_VF_COUNT);
-        assertEquals(VF_COUNT + 1, count);
-        assertEquals(VF_COUNT + 1, oper.getVfCount());
-    }
-
-    /**
-     * Tests obtainVfCount() when it actually has to query.
-     */
-    @Test
-    public void testObtainVfCountQuery() throws Exception {
-        CompletableFuture<OperationOutcome> future2 = oper.obtainVfCount();
-        assertNotNull(future2);
-        assertTrue(executor.runAll(100));
-
-        // not done yet
-        assertFalse(future2.isDone());
-
-        provideCqResponse(makeCqResponse());
-
-        assertTrue(executor.runAll(100));
-        assertTrue(future2.isDone());
-        assertEquals(OperationResult.SUCCESS, future2.get().getResult());
-
-        // verify that the count was stored
-        Integer vfcount = context.getProperty(VF_COUNT_KEY);
-        assertEquals(VF_COUNT, vfcount);
-
-        // repeat - shouldn't need to do anything now
-        assertNull(oper.obtainVfCount());
-    }
-
     @Test
     public void testGetRequestState() {
         SoResponse resp = new SoResponse();
@@ -294,117 +205,6 @@ public class SoOperationTest extends BasicSoOperation {
         assertTrue(oper.buildConfigurationParameters().isEmpty());
     }
 
-    @Test
-    public void testGetItem() {
-        AaiCqResponse cq = mock(AaiCqResponse.class);
-        params.getContext().setProperty(AaiCqResponse.CONTEXT_KEY, cq);
-
-        // in neither property nor custom query
-        assertThatIllegalArgumentException().isThrownBy(() -> oper.getItem("propA", cq2 -> null, "not found"))
-                        .withMessage("not found");
-
-        // only in custom query
-        assertEquals("valueB", oper.getItem("propB", cq2 -> "valueB", "failureB"));
-
-        // both - should choose the property
-        oper.setProperty("propC", "valueC");
-        assertEquals("valueC", oper.getItem("propC", cq2 -> "valueC2", "failureC"));
-
-        // both - should choose the property, even if it's null
-        oper.setProperty("propD", null);
-        assertNull(oper.getItem("propD", cq2 -> "valueD2", "failureD"));
-    }
-
-    @Test
-    public void testGetVnfItem() {
-        // @formatter:off
-        verifyItems(OperationProperties.AAI_VNF, GenericVnf::new,
-            (cq, instance) -> when(cq.getGenericVnfByVfModuleModelInvariantId(MODEL_INVAR_ID)).thenReturn(instance),
-            () -> oper.getVnfItem(oper.prepareSoModelInfo()),
-            "missing generic VNF");
-        // @formatter:on
-    }
-
-    @Test
-    public void testGetServiceInstance() {
-        // @formatter:off
-        verifyItems(OperationProperties.AAI_SERVICE, ServiceInstance::new,
-            (cq, instance) -> when(cq.getServiceInstance()).thenReturn(instance),
-            () -> oper.getServiceInstance(),
-            "missing VNF Service Item");
-        // @formatter:on
-    }
-
-    @Test
-    public void testGetDefaultTenant() {
-        // @formatter:off
-        verifyItems(OperationProperties.AAI_DEFAULT_TENANT, Tenant::new,
-            (cq, tenant) -> when(cq.getDefaultTenant()).thenReturn(tenant),
-            () -> oper.getDefaultTenant(),
-            "missing Default Tenant Item");
-        // @formatter:on
-    }
-
-    @Test
-    public void testGetVnfModel() {
-        GenericVnf vnf = new GenericVnf();
-        vnf.setModelVersionId(VERSION_ID);
-
-        // @formatter:off
-        verifyItems(OperationProperties.AAI_VNF_MODEL, ModelVer::new,
-            (cq, model) -> when(cq.getModelVerByVersionId(VERSION_ID)).thenReturn(model),
-            () -> oper.getVnfModel(vnf),
-            "missing generic VNF Model");
-        // @formatter:on
-    }
-
-    @Test
-    public void testGetServiceModel() {
-        ServiceInstance service = new ServiceInstance();
-        service.setModelVersionId(VERSION_ID);
-
-        // @formatter:off
-        verifyItems(OperationProperties.AAI_SERVICE_MODEL, ModelVer::new,
-            (cq, model) -> when(cq.getModelVerByVersionId(VERSION_ID)).thenReturn(model),
-            () -> oper.getServiceModel(service),
-            "missing Service Model");
-        // @formatter:on
-    }
-
-    @Test
-    public void testGetDefaultCloudRegion() {
-        // @formatter:off
-        verifyItems(OperationProperties.AAI_DEFAULT_CLOUD_REGION, CloudRegion::new,
-            (cq, region) -> when(cq.getDefaultCloudRegion()).thenReturn(region),
-            () -> oper.getDefaultCloudRegion(),
-            "missing Default Cloud Region");
-        // @formatter:on
-    }
-
-    private <T> void verifyItems(String propName, Supplier<T> maker, BiConsumer<AaiCqResponse, T> setter,
-                    Supplier<T> getter, String errmsg) {
-
-        AaiCqResponse cq = mock(AaiCqResponse.class);
-        params.getContext().setProperty(AaiCqResponse.CONTEXT_KEY, cq);
-
-        // in neither property nor custom query
-        assertThatIllegalArgumentException().isThrownBy(getter::get).withMessage(errmsg);
-
-        // only in custom query
-        final T item1 = maker.get();
-        setter.accept(cq, item1);
-        assertSame(item1, getter.get());
-
-        // both - should choose the property
-        final T item2 = maker.get();
-        oper.setProperty(propName, item2);
-        assertSame(item2, getter.get());
-
-        // both - should choose the property, even if it's null
-        oper.setProperty(propName, null);
-        assertNull(getter.get());
-    }
-
     @Test
     public void testGetCoder() throws CoderException {
         Coder opcoder = oper.getCoder();
index 9d4d009..8dca7c8 100644 (file)
@@ -24,39 +24,30 @@ package org.onap.policy.controlloop.actor.so;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ForkJoinPool;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
 import org.apache.commons.lang3.tuple.Pair;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.mockito.ArgumentCaptor;
 import org.onap.aai.domain.yang.CloudRegion;
 import org.onap.aai.domain.yang.GenericVnf;
 import org.onap.aai.domain.yang.ModelVer;
 import org.onap.aai.domain.yang.ServiceInstance;
 import org.onap.aai.domain.yang.Tenant;
-import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
 import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
-import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpPollingConfig;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpPollingParams;
 import org.onap.policy.so.SoRequest;
@@ -86,11 +77,15 @@ public class VfModuleCreateTest extends BasicSoOperation {
         destroyAfterClass();
     }
 
-    @Override
+    /**
+     * Sets up.
+     */
     @Before
+    @Override
     public void setUp() throws Exception {
         super.setUp();
         oper = new VfModuleCreate(params, config);
+        loadProperties();
     }
 
     /**
@@ -103,50 +98,11 @@ public class VfModuleCreateTest extends BasicSoOperation {
                         .maxPolls(2).build();
         config = new HttpPollingConfig(blockingExecutor, opParams, HttpClientFactoryInstance.getClientFactory());
 
-        params = params.toBuilder().retry(0).timeoutSec(5).executor(blockingExecutor).build();
-
-        oper = new VfModuleCreate(params, config);
-
-        outcome = oper.start().get();
-        assertEquals(OperationResult.SUCCESS, outcome.getResult());
-        assertTrue(outcome.getResponse() instanceof SoResponse);
-    }
-
-    /**
-     * Tests "success" case with simulator, using properties instead of custom query data.
-     */
-    @Test
-    public void testSuccessViaProperties() throws Exception {
-        HttpPollingParams opParams = HttpPollingParams.builder().clientName(MY_CLIENT)
-                        .path("serviceInstantiation/v7/serviceInstances").pollPath("orchestrationRequests/v5/")
-                        .maxPolls(2).build();
-        config = new HttpPollingConfig(blockingExecutor, opParams, HttpClientFactoryInstance.getClientFactory());
-
         params = params.toBuilder().retry(0).timeoutSec(5).executor(blockingExecutor).preprocessed(true).build();
-        params.getContext().removeProperty(AaiCqResponse.CONTEXT_KEY);
 
         oper = new VfModuleCreate(params, config);
 
-        // set the properties
-        ServiceInstance instance = new ServiceInstance();
-        instance.setServiceInstanceId(SVC_INSTANCE_ID);
-        oper.setProperty(OperationProperties.AAI_SERVICE, instance);
-
-        ModelVer modelVers = new ModelVer();
-        modelVers.setModelName(MODEL_NAME2);
-        modelVers.setModelVersion(MODEL_VERS2);
-
-        oper.setProperty(OperationProperties.AAI_SERVICE_MODEL, modelVers);
-        oper.setProperty(OperationProperties.AAI_VNF_MODEL, modelVers);
-
-        GenericVnf vnf = new GenericVnf();
-        vnf.setVnfId(VNF_ID);
-        oper.setProperty(OperationProperties.AAI_VNF, vnf);
-
-        oper.setProperty(OperationProperties.AAI_DEFAULT_CLOUD_REGION, new CloudRegion());
-        oper.setProperty(OperationProperties.AAI_DEFAULT_TENANT, new Tenant());
-
-        oper.setProperty(OperationProperties.DATA_VF_COUNT, VF_COUNT);
+        loadProperties();
 
         // run the operation
         outcome = oper.start().get();
@@ -184,76 +140,8 @@ public class VfModuleCreateTest extends BasicSoOperation {
         // @formatter:on
     }
 
-    @Test
-    public void testStartPreprocessorAsync() throws Exception {
-        // insert CQ data so it's there for the check
-        context.setProperty(AaiCqResponse.CONTEXT_KEY, makeCqResponse());
-
-        AtomicBoolean guardStarted = new AtomicBoolean();
-
-        oper = new VfModuleCreate(params, config) {
-            @Override
-            protected CompletableFuture<OperationOutcome> startGuardAsync() {
-                guardStarted.set(true);
-                return super.startGuardAsync();
-            }
-        };
-
-        CompletableFuture<OperationOutcome> future3 = oper.startPreprocessorAsync();
-        assertNotNull(future3);
-        assertTrue(guardStarted.get());
-    }
-
-    /**
-     * Tests startPreprocessorAsync(), when preprocessing is disabled.
-     */
-    @Test
-    public void testStartPreprocessorAsyncDisabled() {
-        params = params.toBuilder().preprocessed(true).build();
-        assertNull(new VfModuleCreate(params, config).startPreprocessorAsync());
-    }
-
-    @Test
-    public void testStartGuardAsync() throws Exception {
-        // remove CQ data so it's forced to query
-        context.removeProperty(AaiCqResponse.CONTEXT_KEY);
-
-        CompletableFuture<OperationOutcome> future2 = oper.startPreprocessorAsync();
-        assertTrue(executor.runAll(100));
-        assertFalse(future2.isDone());
-
-        provideCqResponse(makeCqResponse());
-        assertTrue(executor.runAll(100));
-        assertTrue(future2.isDone());
-        assertEquals(OperationResult.SUCCESS, future2.get().getResult());
-    }
-
-    @Test
-    public void testMakeGuardPayload() {
-        final int origCount = 30;
-        oper.setVfCount(origCount);
-
-        CompletableFuture<OperationOutcome> future2 = oper.startPreprocessorAsync();
-        assertTrue(executor.runAll(100));
-        assertTrue(future2.isDone());
-
-        // get the payload from the request
-        ArgumentCaptor<ControlLoopOperationParams> captor = ArgumentCaptor.forClass(ControlLoopOperationParams.class);
-        verify(guardOperator).buildOperation(captor.capture());
-
-        Map<String, Object> payload = captor.getValue().getPayload();
-        assertNotNull(payload);
-
-        Integer newCount = (Integer) payload.get(VfModuleCreate.PAYLOAD_KEY_VF_COUNT);
-        assertNotNull(newCount);
-        assertEquals(origCount + 1, newCount.intValue());
-    }
-
     @Test
     public void testStartOperationAsync_testSuccessfulCompletion() throws Exception {
-        final int origCount = 30;
-        oper.setVfCount(origCount);
-
         when(client.post(any(), any(), any(), any())).thenAnswer(provideResponse(rawResponse));
 
         // use a real executor
@@ -266,6 +154,11 @@ public class VfModuleCreateTest extends BasicSoOperation {
             }
         };
 
+        loadProperties();
+
+        final int origCount = 30;
+        oper.setVfCount(origCount);
+
         CompletableFuture<OperationOutcome> future2 = oper.start();
 
         outcome = future2.get(5, TimeUnit.SECONDS);
@@ -298,6 +191,8 @@ public class VfModuleCreateTest extends BasicSoOperation {
             }
         };
 
+        loadProperties();
+
         CompletableFuture<OperationOutcome> future2 = oper.start();
 
         outcome = future2.get(5, TimeUnit.SECONDS);
@@ -317,29 +212,26 @@ public class VfModuleCreateTest extends BasicSoOperation {
         verifyRequest("vfModuleCreate.json", pair.getRight());
     }
 
-
-    @Override
-    protected void makeContext() {
-        super.makeContext();
-
-        AaiCqResponse cq = mock(AaiCqResponse.class);
-
-        GenericVnf vnf = new GenericVnf();
-        when(cq.getGenericVnfByVfModuleModelInvariantId(MODEL_INVAR_ID)).thenReturn(vnf);
-        vnf.setVnfId(VNF_ID);
-
+    private void loadProperties() {
+        // set the properties
         ServiceInstance instance = new ServiceInstance();
-        when(cq.getServiceInstance()).thenReturn(instance);
         instance.setServiceInstanceId(SVC_INSTANCE_ID);
-
-        when(cq.getDefaultTenant()).thenReturn(new Tenant());
-        when(cq.getDefaultCloudRegion()).thenReturn(new CloudRegion());
+        oper.setProperty(OperationProperties.AAI_SERVICE, instance);
 
         ModelVer modelVers = new ModelVer();
-        when(cq.getModelVerByVersionId(any())).thenReturn(modelVers);
         modelVers.setModelName(MODEL_NAME2);
         modelVers.setModelVersion(MODEL_VERS2);
 
-        params.getContext().setProperty(AaiCqResponse.CONTEXT_KEY, cq);
+        oper.setProperty(OperationProperties.AAI_SERVICE_MODEL, modelVers);
+        oper.setProperty(OperationProperties.AAI_VNF_MODEL, modelVers);
+
+        GenericVnf vnf = new GenericVnf();
+        vnf.setVnfId(VNF_ID);
+        oper.setProperty(OperationProperties.AAI_VNF, vnf);
+
+        oper.setProperty(OperationProperties.AAI_DEFAULT_CLOUD_REGION, new CloudRegion());
+        oper.setProperty(OperationProperties.AAI_DEFAULT_TENANT, new Tenant());
+
+        oper.setProperty(OperationProperties.DATA_VF_COUNT, VF_COUNT);
     }
 }
index 300d73b..3bce9b0 100644 (file)
@@ -24,9 +24,7 @@ package org.onap.policy.controlloop.actor.so;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
@@ -47,7 +45,6 @@ import java.util.Map;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ForkJoinPool;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
 import javax.ws.rs.client.InvocationCallback;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
@@ -60,10 +57,8 @@ import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.onap.aai.domain.yang.CloudRegion;
 import org.onap.aai.domain.yang.GenericVnf;
-import org.onap.aai.domain.yang.ModelVer;
 import org.onap.aai.domain.yang.ServiceInstance;
 import org.onap.aai.domain.yang.Tenant;
-import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
@@ -77,8 +72,6 @@ import org.onap.policy.so.SoResponse;
 
 public class VfModuleDeleteTest extends BasicSoOperation {
     private static final String EXPECTED_EXCEPTION = "expected exception";
-    private static final String MODEL_NAME2 = "my-model-name-B";
-    private static final String MODEL_VERS2 = "my-model-version-B";
     private static final String SVC_INSTANCE_ID = "my-service-instance-id";
     private static final String VNF_ID = "my-vnf-id";
 
@@ -119,6 +112,8 @@ public class VfModuleDeleteTest extends BasicSoOperation {
         configureResponse(coder.encode(response));
 
         oper = new MyOperation(params, config);
+
+        loadProperties();
     }
 
     /**
@@ -130,42 +125,11 @@ public class VfModuleDeleteTest extends BasicSoOperation {
                         .pollPath("orchestrationRequests/v5/").maxPolls(2).build();
         config = new HttpPollingConfig(blockingExecutor, opParams, HttpClientFactoryInstance.getClientFactory());
 
-        params = params.toBuilder().retry(0).timeoutSec(5).executor(blockingExecutor).build();
-
-        oper = new VfModuleDelete(params, config);
-
-        outcome = oper.start().get();
-        assertEquals(OperationResult.SUCCESS, outcome.getResult());
-        assertTrue(outcome.getResponse() instanceof SoResponse);
-    }
-
-    /**
-     * Tests "success" case with simulator, using properties instead of custom query data.
-     */
-    @Test
-    public void testSuccessViaProperties() throws Exception {
-        HttpPollingParams opParams = HttpPollingParams.builder().clientName(MY_CLIENT).path("serviceInstances/v7")
-                        .pollPath("orchestrationRequests/v5/").maxPolls(2).build();
-        config = new HttpPollingConfig(blockingExecutor, opParams, HttpClientFactoryInstance.getClientFactory());
-
         params = params.toBuilder().retry(0).timeoutSec(5).executor(blockingExecutor).preprocessed(true).build();
-        params.getContext().removeProperty(AaiCqResponse.CONTEXT_KEY);
 
         oper = new VfModuleDelete(params, config);
 
-        // set the properties
-        ServiceInstance instance = new ServiceInstance();
-        instance.setServiceInstanceId(SVC_INSTANCE_ID);
-        oper.setProperty(OperationProperties.AAI_SERVICE, instance);
-
-        GenericVnf vnf = new GenericVnf();
-        vnf.setVnfId(VNF_ID);
-        oper.setProperty(OperationProperties.AAI_VNF, vnf);
-
-        oper.setProperty(OperationProperties.AAI_DEFAULT_CLOUD_REGION, new CloudRegion());
-        oper.setProperty(OperationProperties.AAI_DEFAULT_TENANT, new Tenant());
-
-        oper.setProperty(OperationProperties.DATA_VF_COUNT, VF_COUNT);
+        loadProperties();
 
         // run the operation
         outcome = oper.start().get();
@@ -201,76 +165,8 @@ public class VfModuleDeleteTest extends BasicSoOperation {
         // @formatter:on
     }
 
-    @Test
-    public void testStartPreprocessorAsync() throws Exception {
-        // insert CQ data so it's there for the check
-        context.setProperty(AaiCqResponse.CONTEXT_KEY, makeCqResponse());
-
-        AtomicBoolean guardStarted = new AtomicBoolean();
-
-        oper = new MyOperation(params, config) {
-            @Override
-            protected CompletableFuture<OperationOutcome> startGuardAsync() {
-                guardStarted.set(true);
-                return super.startGuardAsync();
-            }
-        };
-
-        CompletableFuture<OperationOutcome> future3 = oper.startPreprocessorAsync();
-        assertNotNull(future3);
-        assertTrue(guardStarted.get());
-    }
-
-    /**
-     * Tests startPreprocessorAsync(), when preprocessing is disabled.
-     */
-    @Test
-    public void testStartPreprocessorAsyncDisabled() {
-        params = params.toBuilder().preprocessed(true).build();
-        assertNull(new MyOperation(params, config).startPreprocessorAsync());
-    }
-
-    @Test
-    public void testStartGuardAsync() throws Exception {
-        // remove CQ data so it's forced to query
-        context.removeProperty(AaiCqResponse.CONTEXT_KEY);
-
-        CompletableFuture<OperationOutcome> future2 = oper.startPreprocessorAsync();
-        assertTrue(executor.runAll(100));
-        assertFalse(future2.isDone());
-
-        provideCqResponse(makeCqResponse());
-        assertTrue(executor.runAll(100));
-        assertTrue(future2.isDone());
-        assertEquals(OperationResult.SUCCESS, future2.get().getResult());
-    }
-
-    @Test
-    public void testMakeGuardPayload() {
-        final int origCount = 30;
-        oper.setVfCount(origCount);
-
-        CompletableFuture<OperationOutcome> future2 = oper.startPreprocessorAsync();
-        assertTrue(executor.runAll(100));
-        assertTrue(future2.isDone());
-
-        // get the payload from the request
-        ArgumentCaptor<ControlLoopOperationParams> captor = ArgumentCaptor.forClass(ControlLoopOperationParams.class);
-        verify(guardOperator).buildOperation(captor.capture());
-
-        Map<String, Object> payload = captor.getValue().getPayload();
-        assertNotNull(payload);
-
-        Integer newCount = (Integer) payload.get(VfModuleDelete.PAYLOAD_KEY_VF_COUNT);
-        assertNotNull(newCount);
-        assertEquals(origCount - 1, newCount.intValue());
-    }
-
     @Test
     public void testStartOperationAsync_testSuccessfulCompletion() throws Exception {
-        final int origCount = 30;
-        oper.setVfCount(origCount);
-
         // use a real executor
         params = params.toBuilder().executor(ForkJoinPool.commonPool()).build();
 
@@ -281,6 +177,11 @@ public class VfModuleDeleteTest extends BasicSoOperation {
             }
         };
 
+        loadProperties();
+
+        final int origCount = 30;
+        oper.setVfCount(origCount);
+
         CompletableFuture<OperationOutcome> future2 = oper.start();
 
         outcome = future2.get(5, TimeUnit.SECONDS);
@@ -315,6 +216,8 @@ public class VfModuleDeleteTest extends BasicSoOperation {
             }
         };
 
+        loadProperties();
+
         CompletableFuture<OperationOutcome> future2 = oper.start();
 
         outcome = future2.get(5, TimeUnit.SECONDS);
@@ -454,32 +357,6 @@ public class VfModuleDeleteTest extends BasicSoOperation {
         assertNotNull(new MyOperation(params, config).makeHttpClient());
     }
 
-
-    @Override
-    protected void makeContext() {
-        super.makeContext();
-
-        AaiCqResponse cq = mock(AaiCqResponse.class);
-
-        GenericVnf vnf = new GenericVnf();
-        when(cq.getGenericVnfByVfModuleModelInvariantId(MODEL_INVAR_ID)).thenReturn(vnf);
-        vnf.setVnfId(VNF_ID);
-
-        ServiceInstance instance = new ServiceInstance();
-        when(cq.getServiceInstance()).thenReturn(instance);
-        instance.setServiceInstanceId(SVC_INSTANCE_ID);
-
-        when(cq.getDefaultTenant()).thenReturn(new Tenant());
-        when(cq.getDefaultCloudRegion()).thenReturn(new CloudRegion());
-
-        ModelVer modelVers = new ModelVer();
-        when(cq.getModelVerByVersionId(any())).thenReturn(modelVers);
-        modelVers.setModelName(MODEL_NAME2);
-        modelVers.setModelVersion(MODEL_VERS2);
-
-        params.getContext().setProperty(AaiCqResponse.CONTEXT_KEY, cq);
-    }
-
     private void initHostPort() {
         when(client.getBaseUrl()).thenReturn("http://my-host:6969/");
     }
@@ -505,4 +382,20 @@ public class VfModuleDeleteTest extends BasicSoOperation {
             return javaClient;
         }
     }
+
+    private void loadProperties() {
+        // set the properties
+        ServiceInstance instance = new ServiceInstance();
+        instance.setServiceInstanceId(SVC_INSTANCE_ID);
+        oper.setProperty(OperationProperties.AAI_SERVICE, instance);
+
+        GenericVnf vnf = new GenericVnf();
+        vnf.setVnfId(VNF_ID);
+        oper.setProperty(OperationProperties.AAI_VNF, vnf);
+
+        oper.setProperty(OperationProperties.AAI_DEFAULT_CLOUD_REGION, new CloudRegion());
+        oper.setProperty(OperationProperties.AAI_DEFAULT_TENANT, new Tenant());
+
+        oper.setProperty(OperationProperties.DATA_VF_COUNT, VF_COUNT);
+    }
 }
diff --git a/models-interactions/model-actors/actor.so/src/test/resources/org/onap/policy/controlloop/actor/so/aai/AaiCqResponseFull.json b/models-interactions/model-actors/actor.so/src/test/resources/org/onap/policy/controlloop/actor/so/aai/AaiCqResponseFull.json
deleted file mode 100644 (file)
index 1aa9144..0000000
+++ /dev/null
@@ -1,3870 +0,0 @@
-{
-    "results": [
-        {
-            "vserver": {
-                "vserver-id": "f953c499-4b1e-426b-8c6d-e9e9f1fc730f",
-                "vserver-name": "Ete_vFWCLvFWSNK_7ba1fbde_0",
-                "vserver-name2": "Ete_vFWCLvFWSNK_7ba1fbde_0",
-                "prov-status": "ACTIVE",
-                "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/f953c499-4b1e-426b-8c6d-e9e9f1fc730f",
-                "in-maint": false,
-                "is-closed-loop-disabled": false,
-                "resource-version": "1556725250281",
-                "relationship-list": {
-                    "relationship": [
-                        {
-                            "related-to": "vnfc",
-                            "relationship-label": "tosca.relationships.HostedOn",
-                            "related-link": "/aai/v15/network/vnfcs/vnfc/Ete_vFWCLvFWSNK_7ba1fbde_0",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "vnfc.vnfc-name",
-                                    "relationship-value": "Ete_vFWCLvFWSNK_7ba1fbde_0"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "generic-vnf",
-                            "relationship-label": "tosca.relationships.HostedOn",
-                            "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/f17face5-69cb-4c88-9e0b-7426db7edddd",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "generic-vnf.vnf-id",
-                                    "relationship-value": "f17face5-69cb-4c88-9e0b-7426db7edddd"
-                                }
-                            ],
-                            "related-to-property": [
-                                {
-                                    "property-key": "generic-vnf.vnf-name",
-                                    "property-value": "Ete_vFWCLvFWSNK_7ba1fbde_0"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "vf-module",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/f17face5-69cb-4c88-9e0b-7426db7edddd/vf-modules/vf-module/a6936a82-e340-4fe2-8e3e-b0a10a0001e2",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "generic-vnf.vnf-id",
-                                    "relationship-value": "f17face5-69cb-4c88-9e0b-7426db7edddd"
-                                },
-                                {
-                                    "relationship-key": "vf-module.vf-module-id",
-                                    "relationship-value": "a6936a82-e340-4fe2-8e3e-b0a10a0001e2"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "image",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "cloud-region.cloud-owner",
-                                    "relationship-value": "CloudOwner"
-                                },
-                                {
-                                    "relationship-key": "cloud-region.cloud-region-id",
-                                    "relationship-value": "RegionOne"
-                                },
-                                {
-                                    "relationship-key": "image.image-id",
-                                    "relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b"
-                                }
-                            ],
-                            "related-to-property": [
-                                {
-                                    "property-key": "image.image-name",
-                                    "property-value": "unknown"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "flavor",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "cloud-region.cloud-owner",
-                                    "relationship-value": "CloudOwner"
-                                },
-                                {
-                                    "relationship-key": "cloud-region.cloud-region-id",
-                                    "relationship-value": "RegionOne"
-                                },
-                                {
-                                    "relationship-key": "flavor.flavor-id",
-                                    "relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39"
-                                }
-                            ],
-                            "related-to-property": [
-                                {
-                                    "property-key": "flavor.flavor-name",
-                                    "property-value": "m1.medium"
-                                }
-                            ]
-                        }
-                    ]
-                },
-                "l-interfaces": {
-                    "l-interface": [
-                        {
-                            "interface-name": "Vfmodule_Ete_vFWCLvFWSNK_7ba1fbde_0-vfw_0_int_unprotected_private_port_0-u2lkra6bpz7l",
-                            "interface-id": "bd621b3f-da40-4a8a-a703-3db290295cd9",
-                            "macaddr": "fa:16:3e:0c:27:e4",
-                            "network-name": "4e291560-92f8-4822-9dcf-dd75c04c9617",
-                            "is-port-mirrored": false,
-                            "resource-version": "1556725250653",
-                            "in-maint": false,
-                            "is-ip-unnumbered": false
-                        },
-                        {
-                            "interface-name": "Vfmodule_Ete_vFWCLvFWSNK_7ba1fbde_0-vfw_0_onap_private_port_0-nfvykwarrnxr",
-                            "interface-id": "86bbce7d-51ba-4ad2-a34a-aa2742f9789f",
-                            "macaddr": "fa:16:3e:39:d9:27",
-                            "network-name": "3ef9d123-0d09-4400-8ed0-c0fd5c76aa2b",
-                            "is-port-mirrored": false,
-                            "resource-version": "1556725250531",
-                            "in-maint": false,
-                            "is-ip-unnumbered": false
-                        },
-                        {
-                            "interface-name": "Vfmodule_Ete_vFWCLvFWSNK_7ba1fbde_0-vfw_0_int_protected_private_port_0-bz3hsoxjcgyw",
-                            "interface-id": "b1a8a573-d70d-4b32-b717-21fd6bb549a6",
-                            "macaddr": "fa:16:3e:95:1d:e9",
-                            "network-name": "47cae58a-b052-4f73-8f42-e154c260d5df",
-                            "is-port-mirrored": false,
-                            "resource-version": "1556725250584",
-                            "in-maint": false,
-                            "is-ip-unnumbered": false
-                        }
-                    ]
-                }
-            }
-        },
-        {
-            "generic-vnf": {
-                "vnf-id": "f17face5-69cb-4c88-9e0b-7426db7edddd",
-                "vnf-name": "Ete_vFWCLvFWSNK_7ba1fbde_0",
-                "vnf-type": "vFWCL 2019-05-01 15:30:/vFWCL_vFWSNK bbefb8ce-2bde 0",
-                "service-id": "e591441a-e649-4490-82e0-07dac05d674b",
-                "prov-status": "ACTIVE",
-                "orchestration-status": "Active",
-                "in-maint": false,
-                "is-closed-loop-disabled": false,
-                "resource-version": "1556725242259",
-                "model-invariant-id": "bbb3cefd-01c8-413c-9bdd-2b92f9ca3d38",
-                "model-version-id": "189a5070-3bd5-45ac-8a1d-c84ca40b277b",
-                "model-customization-id": "f3733725-19a1-41a0-ba2d-540bf03862a8",
-                "relationship-list": {
-                    "relationship": [
-                        {
-                            "related-to": "service-instance",
-                            "relationship-label": "org.onap.relationships.inventory.ComposedOf",
-                            "related-link": "/aai/v15/business/customers/customer/DemoCust_7ba1fbde-6187-464a-a62d-d9dd25bdf4e8/service-subscriptions/service-subscription/vFWCL/service-instances/service-instance/7be584e2-0bb2-4126-adaf-ced2c77ca0b3",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "DemoCust_7ba1fbde-6187-464a-a62d-d9dd25bdf4e8"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vFWCL"
-                                },
-                                {
-                                    "relationship-key": "service-instance.service-instance-id",
-                                    "relationship-value": "7be584e2-0bb2-4126-adaf-ced2c77ca0b3"
-                                }
-                            ],
-                            "related-to-property": [
-                                {
-                                    "property-key": "service-instance.service-instance-name",
-                                    "property-value": "Service_Ete_Name7ba1fbde-6187-464a-a62d-d9dd25bdf4e8"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "platform",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/platforms/platform/Platform-Demonstration",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "platform.platform-name",
-                                    "relationship-value": "Platform-Demonstration"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "vserver",
-                            "relationship-label": "tosca.relationships.HostedOn",
-                            "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/b75ccb62-131b-4e76-adad-28636fc60fb8",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "cloud-region.cloud-owner",
-                                    "relationship-value": "CloudOwner"
-                                },
-                                {
-                                    "relationship-key": "cloud-region.cloud-region-id",
-                                    "relationship-value": "RegionOne"
-                                },
-                                {
-                                    "relationship-key": "tenant.tenant-id",
-                                    "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                },
-                                {
-                                    "relationship-key": "vserver.vserver-id",
-                                    "relationship-value": "b75ccb62-131b-4e76-adad-28636fc60fb8"
-                                }
-                            ],
-                            "related-to-property": [
-                                {
-                                    "property-key": "vserver.vserver-name",
-                                    "property-value": "demofwl01snkfbde"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "vserver",
-                            "relationship-label": "tosca.relationships.HostedOn",
-                            "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/f953c499-4b1e-426b-8c6d-e9e9f1fc730f",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "cloud-region.cloud-owner",
-                                    "relationship-value": "CloudOwner"
-                                },
-                                {
-                                    "relationship-key": "cloud-region.cloud-region-id",
-                                    "relationship-value": "RegionOne"
-                                },
-                                {
-                                    "relationship-key": "tenant.tenant-id",
-                                    "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                },
-                                {
-                                    "relationship-key": "vserver.vserver-id",
-                                    "relationship-value": "f953c499-4b1e-426b-8c6d-e9e9f1fc730f"
-                                }
-                            ],
-                            "related-to-property": [
-                                {
-                                    "property-key": "vserver.vserver-name",
-                                    "property-value": "Ete_vFWCLvFWSNK_7ba1fbde_0"
-                                }
-                            ]
-                        }
-                    ]
-                },
-                "vf-modules": {
-                    "vf-module": [
-                        {
-                            "vf-module-id": "a6936a82-e340-4fe2-8e3e-b0a10a0001e2",
-                            "vf-module-name": "Vfmodule_Ete_vFWCLvFWSNK_7ba1fbde_0",
-                            "heat-stack-id": "Vfmodule_Ete_vFWCLvFWSNK_7ba1fbde_0/6769f192-0579-4dab-b4e7-170d334c37dd",
-                            "orchestration-status": "active",
-                            "is-base-vf-module": true,
-                            "automated-assignment": false,
-                            "resource-version": "1556725224323",
-                            "model-invariant-id": "e6130d03-56f1-4b0a-9a1d-e1b2ebc30e0e",
-                            "model-version-id": "94b18b1d-cc91-4f43-911a-e6348665f292",
-                            "model-customization-id": "47958575-138f-452a-8c8d-d89b595f8164",
-                            "module-index": 0,
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/b75ccb62-131b-4e76-adad-28636fc60fb8",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "b75ccb62-131b-4e76-adad-28636fc60fb8"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "demofwl01snkfbde"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/f953c499-4b1e-426b-8c6d-e9e9f1fc730f",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "f953c499-4b1e-426b-8c6d-e9e9f1fc730f"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "Ete_vFWCLvFWSNK_7ba1fbde_0"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        }
-                    ]
-                }
-            }
-        },
-        {
-            "model-ver": {
-                "model-version-id": "189a5070-3bd5-45ac-8a1d-c84ca40b277b",
-                "model-name": "vFWCL_vFWSNK bbefb8ce-2bde",
-                "model-version": "2.0",
-                "model-description": "vendor software product",
-                "resource-version": "1556724755172",
-                "model-elements": {
-                    "model-element": [
-                        {
-                            "model-element-uuid": "d4dd3710-eb91-4b15-98d7-a8a90fa28f1b",
-                            "new-data-del-flag": "T",
-                            "cardinality": "unbounded",
-                            "resource-version": "1556724755172",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "model-ver",
-                                        "relationship-label": "org.onap.relationships.inventory.IsA",
-                                        "related-link": "/aai/v15/service-design-and-creation/models/model/acc6edd8-a8d4-4b93-afaa-0994068be14c/model-vers/model-ver/93a6166f-b3d5-4f06-b4ba-aed48d009ad9",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "model.model-invariant-id",
-                                                "relationship-value": "acc6edd8-a8d4-4b93-afaa-0994068be14c"
-                                            },
-                                            {
-                                                "relationship-key": "model-ver.model-version-id",
-                                                "relationship-value": "93a6166f-b3d5-4f06-b4ba-aed48d009ad9"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "model-ver.model-name",
-                                                "property-value": "generic-vnf"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        }
-                    ]
-                },
-                "relationship-list": {
-                    "relationship": [
-                        {
-                            "related-to": "model-element",
-                            "relationship-label": "org.onap.relationships.inventory.IsA",
-                            "related-link": "/aai/v15/service-design-and-creation/models/model/f6937c86-584c-47ae-ad29-8d41d6f0cc7c/model-vers/model-ver/a03b1102-ac3b-44dd-8862-9b94f1951040/model-elements/model-element/aa23fd76-27cf-4dbe-85c7-dca15bec5ca6/model-elements/model-element/f837e297-a5e8-45d8-9ee8-2a1b436dbddb",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "model.model-invariant-id",
-                                    "relationship-value": "f6937c86-584c-47ae-ad29-8d41d6f0cc7c"
-                                },
-                                {
-                                    "relationship-key": "model-ver.model-version-id",
-                                    "relationship-value": "a03b1102-ac3b-44dd-8862-9b94f1951040"
-                                },
-                                {
-                                    "relationship-key": "model-element.model-element-uuid",
-                                    "relationship-value": "aa23fd76-27cf-4dbe-85c7-dca15bec5ca6"
-                                },
-                                {
-                                    "relationship-key": "model-element.model-element-uuid",
-                                    "relationship-value": "f837e297-a5e8-45d8-9ee8-2a1b436dbddb"
-                                }
-                            ]
-                        }
-                    ]
-                }
-            }
-        },
-        {
-            "model": {
-                "model-invariant-id": "bbb3cefd-01c8-413c-9bdd-2b92f9ca3d38",
-                "model-type": "resource",
-                "resource-version": "1556724755172",
-                "model-vers": {
-                    "model-ver": [
-                        {
-                            "model-version-id": "189a5070-3bd5-45ac-8a1d-c84ca40b277b",
-                            "model-name": "vFWCL_vFWSNK bbefb8ce-2bde",
-                            "model-version": "1.0",
-                            "model-description": "vendor software product",
-                            "resource-version": "1556724755172",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "model-element",
-                                        "relationship-label": "org.onap.relationships.inventory.IsA",
-                                        "related-link": "/aai/v15/service-design-and-creation/models/model/f6937c86-584c-47ae-ad29-8d41d6f0cc7c/model-vers/model-ver/a03b1102-ac3b-44dd-8862-9b94f1951040/model-elements/model-element/aa23fd76-27cf-4dbe-85c7-dca15bec5ca6/model-elements/model-element/f837e297-a5e8-45d8-9ee8-2a1b436dbddb",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "model.model-invariant-id",
-                                                "relationship-value": "f6937c86-584c-47ae-ad29-8d41d6f0cc7c"
-                                            },
-                                            {
-                                                "relationship-key": "model-ver.model-version-id",
-                                                "relationship-value": "a03b1102-ac3b-44dd-8862-9b94f1951040"
-                                            },
-                                            {
-                                                "relationship-key": "model-element.model-element-uuid",
-                                                "relationship-value": "aa23fd76-27cf-4dbe-85c7-dca15bec5ca6"
-                                            },
-                                            {
-                                                "relationship-key": "model-element.model-element-uuid",
-                                                "relationship-value": "f837e297-a5e8-45d8-9ee8-2a1b436dbddb"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        }
-                    ]
-                }
-            }
-        },
-        {
-            "service-instance": {
-                "service-instance-id": "7be584e2-0bb2-4126-adaf-ced2c77ca0b3",
-                "service-instance-name": "Service_Ete_Name7ba1fbde-6187-464a-a62d-d9dd25bdf4e8",
-                "environment-context": "General_Revenue-Bearing",
-                "workload-context": "Production",
-                "model-invariant-id": "f6937c86-584c-47ae-ad29-8d41d6f0cc7c",
-                "model-version-id": "a03b1102-ac3b-44dd-8862-9b94f1951040",
-                "resource-version": "1556725033469",
-                "orchestration-status": "Active",
-                "relationship-list": {
-                    "relationship": [
-                        {
-                            "related-to": "project",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/projects/project/Project-Demonstration",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "project.project-name",
-                                    "relationship-value": "Project-Demonstration"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "owning-entity",
-                            "relationship-label": "org.onap.relationships.inventory.BelongsTo",
-                            "related-link": "/aai/v15/business/owning-entities/owning-entity/fcc64127-06ba-4761-b325-c681f636ad07",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "owning-entity.owning-entity-id",
-                                    "relationship-value": "fcc64127-06ba-4761-b325-c681f636ad07"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "generic-vnf",
-                            "relationship-label": "org.onap.relationships.inventory.ComposedOf",
-                            "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/9cd7da50-723c-418c-a91d-af2866844a5d",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "generic-vnf.vnf-id",
-                                    "relationship-value": "9cd7da50-723c-418c-a91d-af2866844a5d"
-                                }
-                            ],
-                            "related-to-property": [
-                                {
-                                    "property-key": "generic-vnf.vnf-name",
-                                    "property-value": "Ete_vFWCLvPKG_7ba1fbde_1"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "generic-vnf",
-                            "relationship-label": "org.onap.relationships.inventory.ComposedOf",
-                            "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/f17face5-69cb-4c88-9e0b-7426db7edddd",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "generic-vnf.vnf-id",
-                                    "relationship-value": "f17face5-69cb-4c88-9e0b-7426db7edddd"
-                                }
-                            ],
-                            "related-to-property": [
-                                {
-                                    "property-key": "generic-vnf.vnf-name",
-                                    "property-value": "Ete_vFWCLvFWSNK_7ba1fbde_0"
-                                }
-                            ]
-                        }
-                    ]
-                }
-            }
-        },
-        {
-            "model-ver": {
-                "model-version-id": "a03b1102-ac3b-44dd-8862-9b94f1951040",
-                "model-name": "vFWCL 2019-05-01 15:30:",
-                "model-version": "1.0",
-                "distribution-status": "DISTRIBUTION_COMPLETE_OK",
-                "model-description": "catalog service description",
-                "resource-version": "1556724849102",
-                "model-elements": {
-                    "model-element": [
-                        {
-                            "model-element-uuid": "aa23fd76-27cf-4dbe-85c7-dca15bec5ca6",
-                            "new-data-del-flag": "T",
-                            "cardinality": "unbounded",
-                            "resource-version": "1556724755319",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "model-ver",
-                                        "relationship-label": "org.onap.relationships.inventory.IsA",
-                                        "related-link": "/aai/v15/service-design-and-creation/models/model/82194af1-3c2c-485a-8f44-420e22a9eaa4/model-vers/model-ver/46b92144-923a-4d20-b85a-3cbd847668a9",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "model.model-invariant-id",
-                                                "relationship-value": "82194af1-3c2c-485a-8f44-420e22a9eaa4"
-                                            },
-                                            {
-                                                "relationship-key": "model-ver.model-version-id",
-                                                "relationship-value": "46b92144-923a-4d20-b85a-3cbd847668a9"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "model-ver.model-name",
-                                                "property-value": "service-instance"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        }
-                    ]
-                }
-            }
-        },
-        {
-            "model": {
-                "model-invariant-id": "f6937c86-584c-47ae-ad29-8d41d6f0cc7c",
-                "model-type": "service",
-                "resource-version": "1556724755319",
-                "model-vers": {
-                    "model-ver": [
-                        {
-                            "model-version-id": "a03b1102-ac3b-44dd-8862-9b94f1951040",
-                            "model-name": "vFWCL 2019-05-01 15:30:",
-                            "model-version": "1.0",
-                            "distribution-status": "DISTRIBUTION_COMPLETE_OK",
-                            "model-description": "catalog service description",
-                            "resource-version": "1556724849102"
-                        }
-                    ]
-                }
-            }
-        },
-        {
-            "generic-vnf": {
-                "vnf-id": "9cd7da50-723c-418c-a91d-af2866844a5d",
-                "vnf-name": "Ete_vFWCLvPKG_7ba1fbde_1",
-                "vnf-type": "vFWCL 2019-05-01 15:30:/vFWCL_vPKG 5101f6c6-8df3 0",
-                "service-id": "e591441a-e649-4490-82e0-07dac05d674b",
-                "prov-status": "ACTIVE",
-                "orchestration-status": "Active",
-                "in-maint": false,
-                "is-closed-loop-disabled": false,
-                "resource-version": "1556725432402",
-                "model-invariant-id": "9a243c47-fd5f-43d1-bd2a-f17bd12a61f2",
-                "model-version-id": "8f79aa0f-da58-4381-9abf-0d6d1926a1eb",
-                "model-customization-id": "82dd9d05-e056-4c3e-a9b4-8a3d6bd54226",
-                "relationship-list": {
-                    "relationship": [
-                        {
-                            "related-to": "service-instance",
-                            "relationship-label": "org.onap.relationships.inventory.ComposedOf",
-                            "related-link": "/aai/v15/business/customers/customer/DemoCust_7ba1fbde-6187-464a-a62d-d9dd25bdf4e8/service-subscriptions/service-subscription/vFWCL/service-instances/service-instance/7be584e2-0bb2-4126-adaf-ced2c77ca0b3",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "DemoCust_7ba1fbde-6187-464a-a62d-d9dd25bdf4e8"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vFWCL"
-                                },
-                                {
-                                    "relationship-key": "service-instance.service-instance-id",
-                                    "relationship-value": "7be584e2-0bb2-4126-adaf-ced2c77ca0b3"
-                                }
-                            ],
-                            "related-to-property": [
-                                {
-                                    "property-key": "service-instance.service-instance-name",
-                                    "property-value": "Service_Ete_Name7ba1fbde-6187-464a-a62d-d9dd25bdf4e8"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "platform",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/platforms/platform/Platform-Demonstration",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "platform.platform-name",
-                                    "relationship-value": "Platform-Demonstration"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "vserver",
-                            "relationship-label": "tosca.relationships.HostedOn",
-                            "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/80465c73-3481-4d9d-9d3b-ab4016dfffe7",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "cloud-region.cloud-owner",
-                                    "relationship-value": "CloudOwner"
-                                },
-                                {
-                                    "relationship-key": "cloud-region.cloud-region-id",
-                                    "relationship-value": "RegionOne"
-                                },
-                                {
-                                    "relationship-key": "tenant.tenant-id",
-                                    "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                },
-                                {
-                                    "relationship-key": "vserver.vserver-id",
-                                    "relationship-value": "80465c73-3481-4d9d-9d3b-ab4016dfffe7"
-                                }
-                            ],
-                            "related-to-property": [
-                                {
-                                    "property-key": "vserver.vserver-name",
-                                    "property-value": "demofwl01pgnfbde"
-                                }
-                            ]
-                        }
-                    ]
-                },
-                "vf-modules": {
-                    "vf-module": [
-                        {
-                            "vf-module-id": "04bcd430-e1ef-4da5-a67e-3dd80463a725",
-                            "vf-module-name": "Vfmodule_Ete_vFWCLvPKG_7ba1fbde_1",
-                            "heat-stack-id": "Vfmodule_Ete_vFWCLvPKG_7ba1fbde_1/6f9827e8-68fb-45e9-a19e-e2246a43df14",
-                            "orchestration-status": "active",
-                            "is-base-vf-module": true,
-                            "automated-assignment": false,
-                            "resource-version": "1556725420287",
-                            "model-invariant-id": "4eb0297d-1256-4ba7-9ed4-7bc44b6a0031",
-                            "model-version-id": "bb755929-a025-48cd-b987-59cb4734c059",
-                            "model-customization-id": "bfcebc88-8d57-449d-906c-f508b5bd0fe0",
-                            "module-index": 0,
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/80465c73-3481-4d9d-9d3b-ab4016dfffe7",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "80465c73-3481-4d9d-9d3b-ab4016dfffe7"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "demofwl01pgnfbde"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        }
-                    ]
-                }
-            }
-        },
-        {
-            "vf-module": {
-                "vf-module-id": "a6936a82-e340-4fe2-8e3e-b0a10a0001e2",
-                "vf-module-name": "Vfmodule_Ete_vFWCLvFWSNK_7ba1fbde_0",
-                "heat-stack-id": "Vfmodule_Ete_vFWCLvFWSNK_7ba1fbde_0/6769f192-0579-4dab-b4e7-170d334c37dd",
-                "orchestration-status": "active",
-                "is-base-vf-module": true,
-                "automated-assignment": false,
-                "resource-version": "1556725224323",
-                "model-invariant-id": "e6130d03-56f1-4b0a-9a1d-e1b2ebc30e0e",
-                "model-version-id": "94b18b1d-cc91-4f43-911a-e6348665f292",
-                "model-customization-id": "47958575-138f-452a-8c8d-d89b595f8164",
-                "module-index": 0,
-                "relationship-list": {
-                    "relationship": [
-                        {
-                            "related-to": "vserver",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/b75ccb62-131b-4e76-adad-28636fc60fb8",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "cloud-region.cloud-owner",
-                                    "relationship-value": "CloudOwner"
-                                },
-                                {
-                                    "relationship-key": "cloud-region.cloud-region-id",
-                                    "relationship-value": "RegionOne"
-                                },
-                                {
-                                    "relationship-key": "tenant.tenant-id",
-                                    "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                },
-                                {
-                                    "relationship-key": "vserver.vserver-id",
-                                    "relationship-value": "b75ccb62-131b-4e76-adad-28636fc60fb8"
-                                }
-                            ],
-                            "related-to-property": [
-                                {
-                                    "property-key": "vserver.vserver-name",
-                                    "property-value": "demofwl01snkfbde"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "vserver",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/f953c499-4b1e-426b-8c6d-e9e9f1fc730f",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "cloud-region.cloud-owner",
-                                    "relationship-value": "CloudOwner"
-                                },
-                                {
-                                    "relationship-key": "cloud-region.cloud-region-id",
-                                    "relationship-value": "RegionOne"
-                                },
-                                {
-                                    "relationship-key": "tenant.tenant-id",
-                                    "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                },
-                                {
-                                    "relationship-key": "vserver.vserver-id",
-                                    "relationship-value": "f953c499-4b1e-426b-8c6d-e9e9f1fc730f"
-                                }
-                            ],
-                            "related-to-property": [
-                                {
-                                    "property-key": "vserver.vserver-name",
-                                    "property-value": "Ete_vFWCLvFWSNK_7ba1fbde_0"
-                                }
-                            ]
-                        }
-                    ]
-                }
-            }
-        },
-        {
-            "model-ver": {
-                "model-version-id": "94b18b1d-cc91-4f43-911a-e6348665f292",
-                "model-name": "VfwclVfwsnkBbefb8ce2bde..base_vfw..module-0",
-                "model-version": "1",
-                "resource-version": "1556724754936",
-                "model-elements": {
-                    "model-element": [
-                        {
-                            "model-element-uuid": "acdee717-9602-4c9c-acf4-8522b65c7161",
-                            "new-data-del-flag": "T",
-                            "cardinality": "unbounded",
-                            "resource-version": "1556724754936",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "model-ver",
-                                        "relationship-label": "org.onap.relationships.inventory.IsA",
-                                        "related-link": "/aai/v15/service-design-and-creation/models/model/ef86f9c5-2165-44f3-8fc3-96018b609ea5/model-vers/model-ver/c00563ae-812b-4e62-8330-7c4d0f47088a",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "model.model-invariant-id",
-                                                "relationship-value": "ef86f9c5-2165-44f3-8fc3-96018b609ea5"
-                                            },
-                                            {
-                                                "relationship-key": "model-ver.model-version-id",
-                                                "relationship-value": "c00563ae-812b-4e62-8330-7c4d0f47088a"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "model-ver.model-name",
-                                                "property-value": "vf-module"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        }
-                    ]
-                },
-                "relationship-list": {
-                    "relationship": [
-                        {
-                            "related-to": "model-element",
-                            "relationship-label": "org.onap.relationships.inventory.IsA",
-                            "related-link": "/aai/v15/service-design-and-creation/models/model/bbb3cefd-01c8-413c-9bdd-2b92f9ca3d38/model-vers/model-ver/189a5070-3bd5-45ac-8a1d-c84ca40b277b/model-elements/model-element/d4dd3710-eb91-4b15-98d7-a8a90fa28f1b/model-elements/model-element/d272cfdd-0700-43a9-8cab-b2fcd80c803a",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "model.model-invariant-id",
-                                    "relationship-value": "bbb3cefd-01c8-413c-9bdd-2b92f9ca3d38"
-                                },
-                                {
-                                    "relationship-key": "model-ver.model-version-id",
-                                    "relationship-value": "189a5070-3bd5-45ac-8a1d-c84ca40b277b"
-                                },
-                                {
-                                    "relationship-key": "model-element.model-element-uuid",
-                                    "relationship-value": "d4dd3710-eb91-4b15-98d7-a8a90fa28f1b"
-                                },
-                                {
-                                    "relationship-key": "model-element.model-element-uuid",
-                                    "relationship-value": "d272cfdd-0700-43a9-8cab-b2fcd80c803a"
-                                }
-                            ]
-                        }
-                    ]
-                }
-            }
-        },
-        {
-            "model": {
-                "model-invariant-id": "e6130d03-56f1-4b0a-9a1d-e1b2ebc30e0e",
-                "model-type": "resource",
-                "resource-version": "1556724754936",
-                "model-vers": {
-                    "model-ver": [
-                        {
-                            "model-version-id": "94b18b1d-cc91-4f43-911a-e6348665f292",
-                            "model-name": "VfwclVfwsnkBbefb8ce2bde..base_vfw..module-0",
-                            "model-version": "1",
-                            "resource-version": "1556724754936",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "model-element",
-                                        "relationship-label": "org.onap.relationships.inventory.IsA",
-                                        "related-link": "/aai/v15/service-design-and-creation/models/model/bbb3cefd-01c8-413c-9bdd-2b92f9ca3d38/model-vers/model-ver/189a5070-3bd5-45ac-8a1d-c84ca40b277b/model-elements/model-element/d4dd3710-eb91-4b15-98d7-a8a90fa28f1b/model-elements/model-element/d272cfdd-0700-43a9-8cab-b2fcd80c803a",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "model.model-invariant-id",
-                                                "relationship-value": "bbb3cefd-01c8-413c-9bdd-2b92f9ca3d38"
-                                            },
-                                            {
-                                                "relationship-key": "model-ver.model-version-id",
-                                                "relationship-value": "189a5070-3bd5-45ac-8a1d-c84ca40b277b"
-                                            },
-                                            {
-                                                "relationship-key": "model-element.model-element-uuid",
-                                                "relationship-value": "d4dd3710-eb91-4b15-98d7-a8a90fa28f1b"
-                                            },
-                                            {
-                                                "relationship-key": "model-element.model-element-uuid",
-                                                "relationship-value": "d272cfdd-0700-43a9-8cab-b2fcd80c803a"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        }
-                    ]
-                }
-            }
-        },
-        {
-            "tenant": {
-                "tenant-id": "41d6d38489bd40b09ea8a6b6b852dcbd",
-                "tenant-name": "Integration-SB-00",
-                "resource-version": "1556561749631",
-                "vservers": {
-                    "vserver": [
-                        {
-                            "vserver-id": "f7807a27-1c45-4e79-9e61-6fb33ee4b7e7",
-                            "vserver-name": "Ete_vFWCLvFWSNK_38fbaf46_0",
-                            "vserver-name2": "Ete_vFWCLvFWSNK_38fbaf46_0",
-                            "prov-status": "ACTIVE",
-                            "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/f7807a27-1c45-4e79-9e61-6fb33ee4b7e7",
-                            "in-maint": false,
-                            "is-closed-loop-disabled": false,
-                            "resource-version": "1556564836725",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "generic-vnf",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/0b34a0bb-84ea-424a-a0ce-a2041e115025",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "0b34a0bb-84ea-424a-a0ce-a2041e115025"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "generic-vnf.vnf-name",
-                                                "property-value": "Ete_vFWCLvFWSNK_38fbaf46_0"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vnfc",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/vnfcs/vnfc/Ete_vFWCLvFWSNK_38fbaf46_0",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "vnfc.vnfc-name",
-                                                "relationship-value": "Ete_vFWCLvFWSNK_38fbaf46_0"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vf-module",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/0b34a0bb-84ea-424a-a0ce-a2041e115025/vf-modules/vf-module/32a2a6e2-27a4-4995-8e3d-50a65e8bfeb6",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "0b34a0bb-84ea-424a-a0ce-a2041e115025"
-                                            },
-                                            {
-                                                "relationship-key": "vf-module.vf-module-id",
-                                                "relationship-value": "32a2a6e2-27a4-4995-8e3d-50a65e8bfeb6"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "image",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "image.image-id",
-                                                "relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "image.image-name",
-                                                "property-value": "unknown"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "flavor",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "flavor.flavor-id",
-                                                "relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "flavor.flavor-name",
-                                                "property-value": "m1.medium"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        },
-                        {
-                            "vserver-id": "900dc2db-1d65-41ef-8b13-9b9b605cb0bd",
-                            "vserver-name": "vofwl01snkf0ef",
-                            "vserver-name2": "vofwl01snkf0ef",
-                            "prov-status": "ACTIVE",
-                            "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/900dc2db-1d65-41ef-8b13-9b9b605cb0bd",
-                            "in-maint": false,
-                            "is-closed-loop-disabled": false,
-                            "resource-version": "1556567725997",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "generic-vnf",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/9a216ccb-6536-4dc3-a789-0634591342d3",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "9a216ccb-6536-4dc3-a789-0634591342d3"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "generic-vnf.vnf-name",
-                                                "property-value": "Ete_vFWDTvFWSNK_8edbf0ef_1"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vnfc",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/vnfcs/vnfc/vofwl01snkf0ef",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "vnfc.vnfc-name",
-                                                "relationship-value": "vofwl01snkf0ef"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vf-module",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/9a216ccb-6536-4dc3-a789-0634591342d3/vf-modules/vf-module/3ecc64d4-3861-4024-8fd2-d81d2d6e539c",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "9a216ccb-6536-4dc3-a789-0634591342d3"
-                                            },
-                                            {
-                                                "relationship-key": "vf-module.vf-module-id",
-                                                "relationship-value": "3ecc64d4-3861-4024-8fd2-d81d2d6e539c"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "image",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "image.image-id",
-                                                "relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "image.image-name",
-                                                "property-value": "unknown"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "flavor",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "flavor.flavor-id",
-                                                "relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "flavor.flavor-name",
-                                                "property-value": "m1.medium"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        },
-                        {
-                            "vserver-id": "cc93aa76-e88d-43a6-8e3b-331918dd3eab",
-                            "vserver-name": "demofwl01pgnaf46",
-                            "vserver-name2": "demofwl01pgnaf46",
-                            "prov-status": "ACTIVE",
-                            "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/cc93aa76-e88d-43a6-8e3b-331918dd3eab",
-                            "in-maint": false,
-                            "is-closed-loop-disabled": false,
-                            "resource-version": "1556565009305",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "vnfc",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/vnfcs/vnfc/demofwl01pgnaf46",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "vnfc.vnfc-name",
-                                                "relationship-value": "demofwl01pgnaf46"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "generic-vnf",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/9fdccaed-6809-457d-9178-9f2187b54e15",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "9fdccaed-6809-457d-9178-9f2187b54e15"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "generic-vnf.vnf-name",
-                                                "property-value": "Ete_vFWCLvPKG_38fbaf46_1"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vf-module",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/9fdccaed-6809-457d-9178-9f2187b54e15/vf-modules/vf-module/475496f6-38d1-43df-a995-64a387f6c788",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "9fdccaed-6809-457d-9178-9f2187b54e15"
-                                            },
-                                            {
-                                                "relationship-key": "vf-module.vf-module-id",
-                                                "relationship-value": "475496f6-38d1-43df-a995-64a387f6c788"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "image",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "image.image-id",
-                                                "relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "image.image-name",
-                                                "property-value": "unknown"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "flavor",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "flavor.flavor-id",
-                                                "relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "flavor.flavor-name",
-                                                "property-value": "m1.medium"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        },
-                        {
-                            "vserver-id": "ab342d19-f3e6-420b-8481-ed7f16c43dfa",
-                            "vserver-name": "demofwl01snkaf46",
-                            "vserver-name2": "demofwl01snkaf46",
-                            "prov-status": "ACTIVE",
-                            "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/ab342d19-f3e6-420b-8481-ed7f16c43dfa",
-                            "in-maint": false,
-                            "is-closed-loop-disabled": false,
-                            "resource-version": "1556564837108",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "generic-vnf",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/0b34a0bb-84ea-424a-a0ce-a2041e115025",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "0b34a0bb-84ea-424a-a0ce-a2041e115025"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "generic-vnf.vnf-name",
-                                                "property-value": "Ete_vFWCLvFWSNK_38fbaf46_0"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vnfc",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/vnfcs/vnfc/demofwl01snkaf46",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "vnfc.vnfc-name",
-                                                "relationship-value": "demofwl01snkaf46"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vf-module",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/0b34a0bb-84ea-424a-a0ce-a2041e115025/vf-modules/vf-module/32a2a6e2-27a4-4995-8e3d-50a65e8bfeb6",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "0b34a0bb-84ea-424a-a0ce-a2041e115025"
-                                            },
-                                            {
-                                                "relationship-key": "vf-module.vf-module-id",
-                                                "relationship-value": "32a2a6e2-27a4-4995-8e3d-50a65e8bfeb6"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "image",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "image.image-id",
-                                                "relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "image.image-name",
-                                                "property-value": "unknown"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "flavor",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "flavor.flavor-id",
-                                                "relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "flavor.flavor-name",
-                                                "property-value": "m1.medium"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        },
-                        {
-                            "vserver-id": "2a9ce7fd-ecae-4301-b2eb-0b3f42df2eb8",
-                            "vserver-name": "vofwl01vfw8ab3",
-                            "vserver-name2": "vofwl01vfw8ab3",
-                            "prov-status": "ACTIVE",
-                            "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/2a9ce7fd-ecae-4301-b2eb-0b3f42df2eb8",
-                            "in-maint": false,
-                            "is-closed-loop-disabled": false,
-                            "resource-version": "1556573557549",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "vnfc",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/vnfcs/vnfc/vofwl01vfw8ab3",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "vnfc.vnfc-name",
-                                                "relationship-value": "vofwl01vfw8ab3"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "generic-vnf",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/b2d0096d-8d50-4f05-b603-dfe95b07f1ea",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "b2d0096d-8d50-4f05-b603-dfe95b07f1ea"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "generic-vnf.vnf-name",
-                                                "property-value": "Ete_vFWDTvFWSNK_8b908ab3_1"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vf-module",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/b2d0096d-8d50-4f05-b603-dfe95b07f1ea/vf-modules/vf-module/acc2eaad-1127-483a-80d2-ac5de1ec942a",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "b2d0096d-8d50-4f05-b603-dfe95b07f1ea"
-                                            },
-                                            {
-                                                "relationship-key": "vf-module.vf-module-id",
-                                                "relationship-value": "acc2eaad-1127-483a-80d2-ac5de1ec942a"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "image",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "image.image-id",
-                                                "relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "image.image-name",
-                                                "property-value": "unknown"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "flavor",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "flavor.flavor-id",
-                                                "relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "flavor.flavor-name",
-                                                "property-value": "m1.medium"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        },
-                        {
-                            "vserver-id": "91277106-90d3-450d-8a10-9aa9a8727d6e",
-                            "vserver-name": "vofwl01pgnf0ef",
-                            "vserver-name2": "vofwl01pgnf0ef",
-                            "prov-status": "ACTIVE",
-                            "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/91277106-90d3-450d-8a10-9aa9a8727d6e",
-                            "in-maint": false,
-                            "is-closed-loop-disabled": false,
-                            "resource-version": "1556567540588",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "generic-vnf",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/9e34e80d-3995-479c-8c53-54e621840ae0",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "9e34e80d-3995-479c-8c53-54e621840ae0"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "generic-vnf.vnf-name",
-                                                "property-value": "Ete_vFWDTvPKG_8edbf0ef_0"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vnfc",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/vnfcs/vnfc/vofwl01pgnf0ef",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "vnfc.vnfc-name",
-                                                "relationship-value": "vofwl01pgnf0ef"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vf-module",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/9e34e80d-3995-479c-8c53-54e621840ae0/vf-modules/vf-module/02e31bf2-8a33-418f-85f4-6b1d2903b3b7",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "9e34e80d-3995-479c-8c53-54e621840ae0"
-                                            },
-                                            {
-                                                "relationship-key": "vf-module.vf-module-id",
-                                                "relationship-value": "02e31bf2-8a33-418f-85f4-6b1d2903b3b7"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "image",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "image.image-id",
-                                                "relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "image.image-name",
-                                                "property-value": "unknown"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "flavor",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "flavor.flavor-id",
-                                                "relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "flavor.flavor-name",
-                                                "property-value": "m1.medium"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        },
-                        {
-                            "vserver-id": "801da076-918a-4911-b87c-b44ce62822a9",
-                            "vserver-name": "vofwl01pgn8ab3",
-                            "vserver-name2": "vofwl01pgn8ab3",
-                            "prov-status": "ACTIVE",
-                            "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/801da076-918a-4911-b87c-b44ce62822a9",
-                            "in-maint": false,
-                            "is-closed-loop-disabled": false,
-                            "resource-version": "1556573356532",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "vnfc",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/vnfcs/vnfc/vofwl01pgn8ab3",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "vnfc.vnfc-name",
-                                                "relationship-value": "vofwl01pgn8ab3"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "generic-vnf",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/7f0cccbf-408d-466c-8045-a7fd677bb24f",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "7f0cccbf-408d-466c-8045-a7fd677bb24f"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "generic-vnf.vnf-name",
-                                                "property-value": "Ete_vFWDTvPKG_8b908ab3_0"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vf-module",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/7f0cccbf-408d-466c-8045-a7fd677bb24f/vf-modules/vf-module/1e130341-7ccd-46bc-bf83-3453c1ba5fe3",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "7f0cccbf-408d-466c-8045-a7fd677bb24f"
-                                            },
-                                            {
-                                                "relationship-key": "vf-module.vf-module-id",
-                                                "relationship-value": "1e130341-7ccd-46bc-bf83-3453c1ba5fe3"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "image",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "image.image-id",
-                                                "relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "image.image-name",
-                                                "property-value": "unknown"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "flavor",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "flavor.flavor-id",
-                                                "relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "flavor.flavor-name",
-                                                "property-value": "m1.medium"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        },
-                        {
-                            "vserver-id": "8a503052-a89c-4035-94ec-b3ab1e157b49",
-                            "vserver-name": "vofwl01vfwf0ef",
-                            "vserver-name2": "vofwl01vfwf0ef",
-                            "prov-status": "ACTIVE",
-                            "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/8a503052-a89c-4035-94ec-b3ab1e157b49",
-                            "in-maint": false,
-                            "is-closed-loop-disabled": false,
-                            "resource-version": "1556567726399",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "generic-vnf",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/9a216ccb-6536-4dc3-a789-0634591342d3",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "9a216ccb-6536-4dc3-a789-0634591342d3"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "generic-vnf.vnf-name",
-                                                "property-value": "Ete_vFWDTvFWSNK_8edbf0ef_1"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vnfc",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/vnfcs/vnfc/vofwl01vfwf0ef",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "vnfc.vnfc-name",
-                                                "relationship-value": "vofwl01vfwf0ef"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vf-module",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/9a216ccb-6536-4dc3-a789-0634591342d3/vf-modules/vf-module/3ecc64d4-3861-4024-8fd2-d81d2d6e539c",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "9a216ccb-6536-4dc3-a789-0634591342d3"
-                                            },
-                                            {
-                                                "relationship-key": "vf-module.vf-module-id",
-                                                "relationship-value": "3ecc64d4-3861-4024-8fd2-d81d2d6e539c"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "image",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "image.image-id",
-                                                "relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "image.image-name",
-                                                "property-value": "unknown"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "flavor",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "flavor.flavor-id",
-                                                "relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "flavor.flavor-name",
-                                                "property-value": "m1.medium"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        },
-                        {
-                            "vserver-id": "39a77e27-ced1-444c-a5b6-f73135e09225",
-                            "vserver-name": "vofwl01snk8ab3",
-                            "vserver-name2": "vofwl01snk8ab3",
-                            "prov-status": "ACTIVE",
-                            "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/39a77e27-ced1-444c-a5b6-f73135e09225",
-                            "in-maint": false,
-                            "is-closed-loop-disabled": false,
-                            "resource-version": "1556573557017",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "vnfc",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/vnfcs/vnfc/vofwl01snk8ab3",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "vnfc.vnfc-name",
-                                                "relationship-value": "vofwl01snk8ab3"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "generic-vnf",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/b2d0096d-8d50-4f05-b603-dfe95b07f1ea",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "b2d0096d-8d50-4f05-b603-dfe95b07f1ea"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "generic-vnf.vnf-name",
-                                                "property-value": "Ete_vFWDTvFWSNK_8b908ab3_1"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vf-module",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/b2d0096d-8d50-4f05-b603-dfe95b07f1ea/vf-modules/vf-module/acc2eaad-1127-483a-80d2-ac5de1ec942a",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "b2d0096d-8d50-4f05-b603-dfe95b07f1ea"
-                                            },
-                                            {
-                                                "relationship-key": "vf-module.vf-module-id",
-                                                "relationship-value": "acc2eaad-1127-483a-80d2-ac5de1ec942a"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "image",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "image.image-id",
-                                                "relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "image.image-name",
-                                                "property-value": "unknown"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "flavor",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "flavor.flavor-id",
-                                                "relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "flavor.flavor-name",
-                                                "property-value": "m1.medium"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        },
-                        {
-                            "vserver-id": "0e581a27-5184-48b1-88b1-e81c5b5a450c",
-                            "vserver-name": "vofwl01snk8ab3",
-                            "vserver-name2": "vofwl01snk8ab3",
-                            "prov-status": "ACTIVE",
-                            "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/0e581a27-5184-48b1-88b1-e81c5b5a450c",
-                            "in-maint": false,
-                            "is-closed-loop-disabled": false,
-                            "resource-version": "1556573767443",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "vnfc",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/vnfcs/vnfc/vofwl01snk8ab3",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "vnfc.vnfc-name",
-                                                "relationship-value": "vofwl01snk8ab3"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "generic-vnf",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/7d4ae51b-4d2e-45f7-a0a5-6fd42dc8a073",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "7d4ae51b-4d2e-45f7-a0a5-6fd42dc8a073"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "generic-vnf.vnf-name",
-                                                "property-value": "Ete_vFWDTvFWSNK_8b908ab3_2"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vf-module",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/7d4ae51b-4d2e-45f7-a0a5-6fd42dc8a073/vf-modules/vf-module/06a08cc1-37a5-4ec6-bb85-e5ee4d69d0f0",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "7d4ae51b-4d2e-45f7-a0a5-6fd42dc8a073"
-                                            },
-                                            {
-                                                "relationship-key": "vf-module.vf-module-id",
-                                                "relationship-value": "06a08cc1-37a5-4ec6-bb85-e5ee4d69d0f0"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "image",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "image.image-id",
-                                                "relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "image.image-name",
-                                                "property-value": "unknown"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "flavor",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "flavor.flavor-id",
-                                                "relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "flavor.flavor-name",
-                                                "property-value": "m1.medium"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        },
-                        {
-                            "vserver-id": "c103ce57-6662-49e0-a589-ebfd91f05c79",
-                            "vserver-name": "vofwl01vfw8ab3",
-                            "vserver-name2": "vofwl01vfw8ab3",
-                            "prov-status": "ACTIVE",
-                            "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/c103ce57-6662-49e0-a589-ebfd91f05c79",
-                            "in-maint": false,
-                            "is-closed-loop-disabled": false,
-                            "resource-version": "1556573767717",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "vnfc",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/vnfcs/vnfc/vofwl01vfw8ab3",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "vnfc.vnfc-name",
-                                                "relationship-value": "vofwl01vfw8ab3"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "generic-vnf",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/7d4ae51b-4d2e-45f7-a0a5-6fd42dc8a073",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "7d4ae51b-4d2e-45f7-a0a5-6fd42dc8a073"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "generic-vnf.vnf-name",
-                                                "property-value": "Ete_vFWDTvFWSNK_8b908ab3_2"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vf-module",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/7d4ae51b-4d2e-45f7-a0a5-6fd42dc8a073/vf-modules/vf-module/06a08cc1-37a5-4ec6-bb85-e5ee4d69d0f0",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "7d4ae51b-4d2e-45f7-a0a5-6fd42dc8a073"
-                                            },
-                                            {
-                                                "relationship-key": "vf-module.vf-module-id",
-                                                "relationship-value": "06a08cc1-37a5-4ec6-bb85-e5ee4d69d0f0"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "image",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "image.image-id",
-                                                "relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "image.image-name",
-                                                "property-value": "unknown"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "flavor",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "flavor.flavor-id",
-                                                "relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "flavor.flavor-name",
-                                                "property-value": "m1.medium"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        },
-                        {
-                            "vserver-id": "b75ccb62-131b-4e76-adad-28636fc60fb8",
-                            "vserver-name": "demofwl01snkfbde",
-                            "vserver-name2": "demofwl01snkfbde",
-                            "prov-status": "ACTIVE",
-                            "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/b75ccb62-131b-4e76-adad-28636fc60fb8",
-                            "in-maint": false,
-                            "is-closed-loop-disabled": false,
-                            "resource-version": "1556725250327",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "vnfc",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/vnfcs/vnfc/demofwl01snkfbde",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "vnfc.vnfc-name",
-                                                "relationship-value": "demofwl01snkfbde"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "generic-vnf",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/f17face5-69cb-4c88-9e0b-7426db7edddd",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "f17face5-69cb-4c88-9e0b-7426db7edddd"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "generic-vnf.vnf-name",
-                                                "property-value": "Ete_vFWCLvFWSNK_7ba1fbde_0"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vf-module",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/f17face5-69cb-4c88-9e0b-7426db7edddd/vf-modules/vf-module/a6936a82-e340-4fe2-8e3e-b0a10a0001e2",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "f17face5-69cb-4c88-9e0b-7426db7edddd"
-                                            },
-                                            {
-                                                "relationship-key": "vf-module.vf-module-id",
-                                                "relationship-value": "a6936a82-e340-4fe2-8e3e-b0a10a0001e2"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "image",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "image.image-id",
-                                                "relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "image.image-name",
-                                                "property-value": "unknown"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "flavor",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "flavor.flavor-id",
-                                                "relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "flavor.flavor-name",
-                                                "property-value": "m1.medium"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        },
-                        {
-                            "vserver-id": "f953c499-4b1e-426b-8c6d-e9e9f1fc730f",
-                            "vserver-name": "Ete_vFWCLvFWSNK_7ba1fbde_0",
-                            "vserver-name2": "Ete_vFWCLvFWSNK_7ba1fbde_0",
-                            "prov-status": "ACTIVE",
-                            "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/f953c499-4b1e-426b-8c6d-e9e9f1fc730f",
-                            "in-maint": false,
-                            "is-closed-loop-disabled": false,
-                            "resource-version": "1556725250281",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "vnfc",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/vnfcs/vnfc/Ete_vFWCLvFWSNK_7ba1fbde_0",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "vnfc.vnfc-name",
-                                                "relationship-value": "Ete_vFWCLvFWSNK_7ba1fbde_0"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "generic-vnf",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/f17face5-69cb-4c88-9e0b-7426db7edddd",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "f17face5-69cb-4c88-9e0b-7426db7edddd"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "generic-vnf.vnf-name",
-                                                "property-value": "Ete_vFWCLvFWSNK_7ba1fbde_0"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vf-module",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/f17face5-69cb-4c88-9e0b-7426db7edddd/vf-modules/vf-module/a6936a82-e340-4fe2-8e3e-b0a10a0001e2",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "f17face5-69cb-4c88-9e0b-7426db7edddd"
-                                            },
-                                            {
-                                                "relationship-key": "vf-module.vf-module-id",
-                                                "relationship-value": "a6936a82-e340-4fe2-8e3e-b0a10a0001e2"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "image",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "image.image-id",
-                                                "relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "image.image-name",
-                                                "property-value": "unknown"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "flavor",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "flavor.flavor-id",
-                                                "relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "flavor.flavor-name",
-                                                "property-value": "m1.medium"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        },
-                        {
-                            "vserver-id": "80465c73-3481-4d9d-9d3b-ab4016dfffe7",
-                            "vserver-name": "demofwl01pgnfbde",
-                            "vserver-name2": "demofwl01pgnfbde",
-                            "prov-status": "ACTIVE",
-                            "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/80465c73-3481-4d9d-9d3b-ab4016dfffe7",
-                            "in-maint": false,
-                            "is-closed-loop-disabled": false,
-                            "resource-version": "1556725436997",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "vnfc",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/vnfcs/vnfc/demofwl01pgnfbde",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "vnfc.vnfc-name",
-                                                "relationship-value": "demofwl01pgnfbde"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "generic-vnf",
-                                        "relationship-label": "tosca.relationships.HostedOn",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/9cd7da50-723c-418c-a91d-af2866844a5d",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "9cd7da50-723c-418c-a91d-af2866844a5d"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "generic-vnf.vnf-name",
-                                                "property-value": "Ete_vFWCLvPKG_7ba1fbde_1"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vf-module",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/network/generic-vnfs/generic-vnf/9cd7da50-723c-418c-a91d-af2866844a5d/vf-modules/vf-module/04bcd430-e1ef-4da5-a67e-3dd80463a725",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "generic-vnf.vnf-id",
-                                                "relationship-value": "9cd7da50-723c-418c-a91d-af2866844a5d"
-                                            },
-                                            {
-                                                "relationship-key": "vf-module.vf-module-id",
-                                                "relationship-value": "04bcd430-e1ef-4da5-a67e-3dd80463a725"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "image",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "image.image-id",
-                                                "relationship-value": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "image.image-name",
-                                                "property-value": "unknown"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "flavor",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/764efb04-5a46-4806-a766-2bdd24559f39",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "flavor.flavor-id",
-                                                "relationship-value": "764efb04-5a46-4806-a766-2bdd24559f39"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "flavor.flavor-name",
-                                                "property-value": "m1.medium"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        }
-                    ]
-                },
-                "relationship-list": {
-                    "relationship": [
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/vFWCL",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "SDN-ETHERNET-INTERNET"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vFWCL"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vLB",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "Demonstration"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vLB"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/vIMS",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "SDN-ETHERNET-INTERNET"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vIMS"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vCPE",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "Demonstration"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vCPE"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/vFW",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "SDN-ETHERNET-INTERNET"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vFW"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/gNB",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "SDN-ETHERNET-INTERNET"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "gNB"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vIMS",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "Demonstration"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vIMS"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/Demonstration/service-subscriptions/service-subscription/gNB",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "Demonstration"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "gNB"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vFW",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "Demonstration"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vFW"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/vLB",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "SDN-ETHERNET-INTERNET"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vLB"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/DemoCust_8568f3da-8821-4600-b95f-6224f15943f7/service-subscriptions/service-subscription/vFWCL",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "DemoCust_8568f3da-8821-4600-b95f-6224f15943f7"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vFWCL"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/DemoCust_38fbaf46-8ae5-4b08-ad4d-2cb552ca2eb0/service-subscriptions/service-subscription/vFWCL",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "DemoCust_38fbaf46-8ae5-4b08-ad4d-2cb552ca2eb0"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vFWCL"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vFWCL",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "Demonstration"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vFWCL"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/DemoCust_8edbf0ef-8460-4965-9e56-7e4637c31a41/service-subscriptions/service-subscription/vFWDT",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "DemoCust_8edbf0ef-8460-4965-9e56-7e4637c31a41"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vFWDT"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/vCPE",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "SDN-ETHERNET-INTERNET"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vCPE"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/DemoCust_5dbd369e-2174-430a-9c15-b9a090b99591/service-subscriptions/service-subscription/vFWDT",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "DemoCust_5dbd369e-2174-430a-9c15-b9a090b99591"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vFWDT"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/DemoCust_8b908ab3-b9e6-41a9-a4e2-31cc9c5114a2/service-subscriptions/service-subscription/vFWDT",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "DemoCust_8b908ab3-b9e6-41a9-a4e2-31cc9c5114a2"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vFWDT"
-                                }
-                            ]
-                        },
-                        {
-                            "related-to": "service-subscription",
-                            "relationship-label": "org.onap.relationships.inventory.Uses",
-                            "related-link": "/aai/v15/business/customers/customer/DemoCust_7ba1fbde-6187-464a-a62d-d9dd25bdf4e8/service-subscriptions/service-subscription/vFWCL",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "customer.global-customer-id",
-                                    "relationship-value": "DemoCust_7ba1fbde-6187-464a-a62d-d9dd25bdf4e8"
-                                },
-                                {
-                                    "relationship-key": "service-subscription.service-type",
-                                    "relationship-value": "vFWCL"
-                                }
-                            ]
-                        }
-                    ]
-                }
-            }
-        },
-        {
-            "cloud-region": {
-                "cloud-owner": "CloudOwner",
-                "cloud-region-id": "RegionOne",
-                "cloud-type": "SharedNode",
-                "owner-defined-type": "OwnerType",
-                "cloud-region-version": "v1",
-                "cloud-zone": "CloudZone",
-                "resource-version": "1556561749631",
-                "tenants": {
-                    "tenant": [
-                        {
-                            "tenant-id": "41d6d38489bd40b09ea8a6b6b852dcbd",
-                            "tenant-name": "Integration-SB-00",
-                            "resource-version": "1556561749631",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/vFWCL",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "SDN-ETHERNET-INTERNET"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "vFWCL"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vLB",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "Demonstration"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "vLB"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/vIMS",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "SDN-ETHERNET-INTERNET"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "vIMS"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vCPE",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "Demonstration"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "vCPE"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/vFW",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "SDN-ETHERNET-INTERNET"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "vFW"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/gNB",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "SDN-ETHERNET-INTERNET"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "gNB"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vIMS",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "Demonstration"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "vIMS"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/Demonstration/service-subscriptions/service-subscription/gNB",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "Demonstration"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "gNB"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vFW",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "Demonstration"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "vFW"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/vLB",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "SDN-ETHERNET-INTERNET"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "vLB"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/DemoCust_8568f3da-8821-4600-b95f-6224f15943f7/service-subscriptions/service-subscription/vFWCL",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "DemoCust_8568f3da-8821-4600-b95f-6224f15943f7"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "vFWCL"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/DemoCust_38fbaf46-8ae5-4b08-ad4d-2cb552ca2eb0/service-subscriptions/service-subscription/vFWCL",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "DemoCust_38fbaf46-8ae5-4b08-ad4d-2cb552ca2eb0"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "vFWCL"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vFWCL",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "Demonstration"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "vFWCL"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/DemoCust_8edbf0ef-8460-4965-9e56-7e4637c31a41/service-subscriptions/service-subscription/vFWDT",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "DemoCust_8edbf0ef-8460-4965-9e56-7e4637c31a41"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "vFWDT"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/SDN-ETHERNET-INTERNET/service-subscriptions/service-subscription/vCPE",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "SDN-ETHERNET-INTERNET"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "vCPE"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/DemoCust_5dbd369e-2174-430a-9c15-b9a090b99591/service-subscriptions/service-subscription/vFWDT",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "DemoCust_5dbd369e-2174-430a-9c15-b9a090b99591"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "vFWDT"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/DemoCust_8b908ab3-b9e6-41a9-a4e2-31cc9c5114a2/service-subscriptions/service-subscription/vFWDT",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "DemoCust_8b908ab3-b9e6-41a9-a4e2-31cc9c5114a2"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "vFWDT"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "service-subscription",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/business/customers/customer/DemoCust_7ba1fbde-6187-464a-a62d-d9dd25bdf4e8/service-subscriptions/service-subscription/vFWCL",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "customer.global-customer-id",
-                                                "relationship-value": "DemoCust_7ba1fbde-6187-464a-a62d-d9dd25bdf4e8"
-                                            },
-                                            {
-                                                "relationship-key": "service-subscription.service-type",
-                                                "relationship-value": "vFWCL"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        }
-                    ]
-                },
-                "flavors": {
-                    "flavor": [
-                        {
-                            "flavor-id": "764efb04-5a46-4806-a766-2bdd24559f39",
-                            "flavor-name": "m1.medium",
-                            "flavor-vcpus": 2,
-                            "flavor-ram": 4096,
-                            "flavor-disk": 40,
-                            "flavor-ephemeral": 0,
-                            "flavor-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/flavors/764efb04-5a46-4806-a766-2bdd24559f39",
-                            "resource-version": "1556564836050",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/f7807a27-1c45-4e79-9e61-6fb33ee4b7e7",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "f7807a27-1c45-4e79-9e61-6fb33ee4b7e7"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "Ete_vFWCLvFWSNK_38fbaf46_0"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/900dc2db-1d65-41ef-8b13-9b9b605cb0bd",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "900dc2db-1d65-41ef-8b13-9b9b605cb0bd"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "vofwl01snkf0ef"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/cc93aa76-e88d-43a6-8e3b-331918dd3eab",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "cc93aa76-e88d-43a6-8e3b-331918dd3eab"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "demofwl01pgnaf46"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/ab342d19-f3e6-420b-8481-ed7f16c43dfa",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "ab342d19-f3e6-420b-8481-ed7f16c43dfa"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "demofwl01snkaf46"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/2a9ce7fd-ecae-4301-b2eb-0b3f42df2eb8",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "2a9ce7fd-ecae-4301-b2eb-0b3f42df2eb8"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "vofwl01vfw8ab3"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/91277106-90d3-450d-8a10-9aa9a8727d6e",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "91277106-90d3-450d-8a10-9aa9a8727d6e"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "vofwl01pgnf0ef"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/801da076-918a-4911-b87c-b44ce62822a9",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "801da076-918a-4911-b87c-b44ce62822a9"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "vofwl01pgn8ab3"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/8a503052-a89c-4035-94ec-b3ab1e157b49",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "8a503052-a89c-4035-94ec-b3ab1e157b49"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "vofwl01vfwf0ef"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/39a77e27-ced1-444c-a5b6-f73135e09225",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "39a77e27-ced1-444c-a5b6-f73135e09225"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "vofwl01snk8ab3"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/0e581a27-5184-48b1-88b1-e81c5b5a450c",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "0e581a27-5184-48b1-88b1-e81c5b5a450c"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "vofwl01snk8ab3"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/c103ce57-6662-49e0-a589-ebfd91f05c79",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "c103ce57-6662-49e0-a589-ebfd91f05c79"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "vofwl01vfw8ab3"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/b75ccb62-131b-4e76-adad-28636fc60fb8",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "b75ccb62-131b-4e76-adad-28636fc60fb8"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "demofwl01snkfbde"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/f953c499-4b1e-426b-8c6d-e9e9f1fc730f",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "f953c499-4b1e-426b-8c6d-e9e9f1fc730f"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "Ete_vFWCLvFWSNK_7ba1fbde_0"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/80465c73-3481-4d9d-9d3b-ab4016dfffe7",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "80465c73-3481-4d9d-9d3b-ab4016dfffe7"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "demofwl01pgnfbde"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        }
-                    ]
-                },
-                "images": {
-                    "image": [
-                        {
-                            "image-id": "42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
-                            "image-name": "unknown",
-                            "image-architecture": "unknown",
-                            "image-os-distro": "unknown",
-                            "image-os-version": "unknown",
-                            "application": "unknown",
-                            "application-vendor": "unknown",
-                            "application-version": "unknown",
-                            "image-selflink": "http://10.12.25.2:8774/41d6d38489bd40b09ea8a6b6b852dcbd/images/42fd42f8-cf81-4f4c-a552-d4b124f83b0b",
-                            "resource-version": "1556564834957",
-                            "relationship-list": {
-                                "relationship": [
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/f7807a27-1c45-4e79-9e61-6fb33ee4b7e7",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "f7807a27-1c45-4e79-9e61-6fb33ee4b7e7"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "Ete_vFWCLvFWSNK_38fbaf46_0"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/900dc2db-1d65-41ef-8b13-9b9b605cb0bd",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "900dc2db-1d65-41ef-8b13-9b9b605cb0bd"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "vofwl01snkf0ef"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/cc93aa76-e88d-43a6-8e3b-331918dd3eab",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "cc93aa76-e88d-43a6-8e3b-331918dd3eab"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "demofwl01pgnaf46"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/ab342d19-f3e6-420b-8481-ed7f16c43dfa",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "ab342d19-f3e6-420b-8481-ed7f16c43dfa"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "demofwl01snkaf46"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/2a9ce7fd-ecae-4301-b2eb-0b3f42df2eb8",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "2a9ce7fd-ecae-4301-b2eb-0b3f42df2eb8"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "vofwl01vfw8ab3"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/91277106-90d3-450d-8a10-9aa9a8727d6e",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "91277106-90d3-450d-8a10-9aa9a8727d6e"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "vofwl01pgnf0ef"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/801da076-918a-4911-b87c-b44ce62822a9",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "801da076-918a-4911-b87c-b44ce62822a9"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "vofwl01pgn8ab3"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/8a503052-a89c-4035-94ec-b3ab1e157b49",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "8a503052-a89c-4035-94ec-b3ab1e157b49"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "vofwl01vfwf0ef"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/39a77e27-ced1-444c-a5b6-f73135e09225",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "39a77e27-ced1-444c-a5b6-f73135e09225"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "vofwl01snk8ab3"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/0e581a27-5184-48b1-88b1-e81c5b5a450c",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "0e581a27-5184-48b1-88b1-e81c5b5a450c"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "vofwl01snk8ab3"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/c103ce57-6662-49e0-a589-ebfd91f05c79",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "c103ce57-6662-49e0-a589-ebfd91f05c79"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "vofwl01vfw8ab3"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/b75ccb62-131b-4e76-adad-28636fc60fb8",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "b75ccb62-131b-4e76-adad-28636fc60fb8"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "demofwl01snkfbde"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/f953c499-4b1e-426b-8c6d-e9e9f1fc730f",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "f953c499-4b1e-426b-8c6d-e9e9f1fc730f"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "Ete_vFWCLvFWSNK_7ba1fbde_0"
-                                            }
-                                        ]
-                                    },
-                                    {
-                                        "related-to": "vserver",
-                                        "relationship-label": "org.onap.relationships.inventory.Uses",
-                                        "related-link": "/aai/v15/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/41d6d38489bd40b09ea8a6b6b852dcbd/vservers/vserver/80465c73-3481-4d9d-9d3b-ab4016dfffe7",
-                                        "relationship-data": [
-                                            {
-                                                "relationship-key": "cloud-region.cloud-owner",
-                                                "relationship-value": "CloudOwner"
-                                            },
-                                            {
-                                                "relationship-key": "cloud-region.cloud-region-id",
-                                                "relationship-value": "RegionOne"
-                                            },
-                                            {
-                                                "relationship-key": "tenant.tenant-id",
-                                                "relationship-value": "41d6d38489bd40b09ea8a6b6b852dcbd"
-                                            },
-                                            {
-                                                "relationship-key": "vserver.vserver-id",
-                                                "relationship-value": "80465c73-3481-4d9d-9d3b-ab4016dfffe7"
-                                            }
-                                        ],
-                                        "related-to-property": [
-                                            {
-                                                "property-key": "vserver.vserver-name",
-                                                "property-value": "demofwl01pgnfbde"
-                                            }
-                                        ]
-                                    }
-                                ]
-                            }
-                        }
-                    ]
-                },
-                "availability-zones": {
-                    "availability-zone": [
-                        {
-                            "availability-zone-name": "nova",
-                            "hypervisor-type": "KVM",
-                            "operational-status": "Active",
-                            "resource-version": "1556561761360"
-                        }
-                    ]
-                },
-                "relationship-list": {
-                    "relationship": [
-                        {
-                            "related-to": "complex",
-                            "relationship-label": "org.onap.relationships.inventory.LocatedIn",
-                            "related-link": "/aai/v15/cloud-infrastructure/complexes/complex/clli1",
-                            "relationship-data": [
-                                {
-                                    "relationship-key": "complex.physical-location-id",
-                                    "relationship-value": "clli1"
-                                }
-                            ]
-                        }
-                    ]
-                }
-            }
-        }
-    ]
-}
diff --git a/models-interactions/model-actors/actor.so/src/test/resources/org/onap/policy/controlloop/actor/so/aai/AaiCqResponseMissing.json b/models-interactions/model-actors/actor.so/src/test/resources/org/onap/policy/controlloop/actor/so/aai/AaiCqResponseMissing.json
deleted file mode 100644 (file)
index 29f1cdd..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-    "results": [
-    ]
-}
diff --git a/models-interactions/model-actors/actor.so/src/test/resources/org/onap/policy/controlloop/actor/so/aai/AaiNqResponse-Full.json b/models-interactions/model-actors/actor.so/src/test/resources/org/onap/policy/controlloop/actor/so/aai/AaiNqResponse-Full.json
deleted file mode 100644 (file)
index af40be9..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-{
-  "inventory-response-item": [
-    {
-      "vserver": {
-        "vserver-id": "6ed3642c-f7a1-4a7c-9290-3d51fe1531eb",
-        "vserver-name": "zdfw1lb01lb02",
-        "vserver-name2": "zdfw1lb01lb02",
-        "prov-status": "ACTIVE",
-        "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/6ed3642c-f7a1-4a7c-9290-3d51fe1531eb",
-        "in-maint": false,
-        "is-closed-loop-disabled": false,
-        "resource-version": "1510606403522"
-      },
-      "extra-properties": {
-        "extra-property": []
-      },
-      "inventory-response-items": {
-        "inventory-response-item": [
-          {
-            "model-name": "vLoadBalancer",
-            "generic-vnf": {
-              "vnf-id": "db373a8d-f7be-4d02-8ac8-6ca4c305d144",
-              "vnf-name": "Vfmodule_vLB1113",
-              "vnf-type": "vLoadBalancer-1106/vLoadBalancer 0",
-              "service-id": "66f157fc-4148-4880-95f5-e120677e98d1",
-              "prov-status": "PREPROV",
-              "in-maint": false,
-              "is-closed-loop-disabled": false,
-              "resource-version": "1510604011851",
-              "model-invariant-id": "cee050ed-92a5-494f-ab04-234307a846dc",
-              "model-version-id": "fd65becc-6b2c-4fe8-ace9-cc29db9a3da2"
-            },
-            "extra-properties": {
-              "extra-property": [
-                {
-                  "property-name": "model-ver.model-version-id",
-                  "property-value": "fd65becc-6b2c-4fe8-ace9-cc29db9a3da2"
-                },
-                {
-                  "property-name": "model-ver.model-name",
-                  "property-value": "vLoadBalancer"
-                },
-                {
-                  "property-name": "model.model-type",
-                  "property-value": "resource"
-                },
-                {
-                  "property-name": "model.model-invariant-id",
-                  "property-value": "cee050ed-92a5-494f-ab04-234307a846dc"
-                },
-                {
-                  "property-name": "model-ver.model-version",
-                  "property-value": "1.0"
-                }
-              ]
-            },
-            "inventory-response-items": {
-              "inventory-response-item": [
-                {
-                  "model-name": "vLoadBalancer-1106",
-                  "service-instance": {
-                    "service-instance-id": "3b12f31f-8f2d-4f5c-b875-61ff1194b941",
-                    "service-instance-name": "vLoadBalancer-1113",
-                    "resource-version": "1510603936425",
-                    "model-invariant-id": "1321d60d-f7ff-4300-96c2-6bf0b3268b7a",
-                    "model-version-id": "732d4692-4b97-46f9-a996-0b3339e88c50"
-                  },
-                  "extra-properties": {
-                    "extra-property": [
-                      {
-                        "property-name": "model-ver.model-version-id",
-                        "property-value": "732d4692-4b97-46f9-a996-0b3339e88c50"
-                      },
-                      {
-                        "property-name": "model-ver.model-name",
-                        "property-value": "vLoadBalancer-1106"
-                      },
-                      {
-                        "property-name": "model.model-type",
-                        "property-value": "service"
-                      },
-                      {
-                        "property-name": "model.model-invariant-id",
-                        "property-value": "1321d60d-f7ff-4300-96c2-6bf0b3268b7a"
-                      },
-                      {
-                        "property-name": "model-ver.model-version",
-                        "property-value": "1.0"
-                      }
-                    ]
-                  }
-                },
-                {
-                  "model-name": "Vloadbalancer..base_vlb..module-0",
-                  "vf-module": {
-                    "vf-module-id": "e6b3e3eb-34e1-4c00-b8c1-2a4fbe479b12",
-                    "vf-module-name": "Vfmodule_vLB1113-1",
-                    "heat-stack-id": "Vfmodule_vLB1113-1/3dd6d900-772f-4fcc-a0cb-e250ab2bb4db",
-                    "orchestration-status": "active",
-                    "is-base-vf-module": true,
-                    "resource-version": "1510604612557",
-                    "model-invariant-id": "6d760188-9a24-451a-b05b-e08b86cb94f2",
-                    "model-version-id": "93facad9-55f2-4fe0-9574-814c2bc2d071"
-                  },
-                  "extra-properties": {
-                    "extra-property": [
-                      {
-                        "property-name": "model-ver.model-version-id",
-                        "property-value": "93facad9-55f2-4fe0-9574-814c2bc2d071"
-                      },
-                      {
-                        "property-name": "model-ver.model-name",
-                        "property-value": "Vloadbalancer..base_vlb..module-0"
-                      },
-                      {
-                        "property-name": "model.model-type",
-                        "property-value": "resource"
-                      },
-                      {
-                        "property-name": "model.model-invariant-id",
-                        "property-value": "6d760188-9a24-451a-b05b-e08b86cb94f2"
-                      },
-                      {
-                        "property-name": "model-ver.model-version",
-                        "property-value": "1"
-                      }
-                    ]
-                  }
-                },
-                {
-                  "model-name": "Vloadbalancer..dnsscaling..module-1",
-                  "vf-module": {
-                    "vf-module-id": "dummy_db373a8d-f7be-4d02-8ac8-6ca4c305d144",
-                    "vf-module-name": "dummy_db373a8d-f7be-4d02-8ac8-6ca4c305d144",
-                    "is-base-vf-module": false,
-                    "resource-version": "1510610079687",
-                    "model-invariant-id": "356a1cff-71f2-4086-9980-a2927ce11c1c",
-                    "model-version-id": "6b93d804-cfc8-4be3-92cc-9336d135859a"
-                  },
-                  "extra-properties": {
-                    "extra-property": [
-                      {
-                        "property-name": "model-ver.model-version-id",
-                        "property-value": "6b93d804-cfc8-4be3-92cc-9336d135859a"
-                      },
-                      {
-                        "property-name": "model-ver.model-name",
-                        "property-value": "Vloadbalancer..dnsscaling..module-1"
-                      },
-                      {
-                        "property-name": "model.model-type",
-                        "property-value": "resource"
-                      },
-                      {
-                        "property-name": "model.model-invariant-id",
-                        "property-value": "356a1cff-71f2-4086-9980-a2927ce11c1c"
-                      },
-                      {
-                        "property-name": "model-ver.model-version",
-                        "property-value": "1"
-                      }
-                    ]
-                  }
-                },
-                {
-                  "model-name": "Vloadbalancer..dnsscaling..module-1",
-                  "vf-module": {
-                    "vf-module-id": "my_module_db373a8d-f7be-4d02-8ac8-6ca4c305d144",
-                    "vf-module-name": "my_module_1",
-                    "is-base-vf-module": false,
-                    "resource-version": "1510610079687",
-                    "model-invariant-id": "356a1cff-71f2-4086-9980-a2927ce11c1c",
-                    "model-version-id": "6b93d804-cfc8-4be3-92cc-9336d135859a"
-                  },
-                  "extra-properties": {
-                    "extra-property": [
-                      {
-                        "property-name": "model-ver.model-version-id",
-                        "property-value": "6b93d804-cfc8-4be3-92cc-9336d135859a"
-                      },
-                      {
-                        "property-name": "model-ver.model-name",
-                        "property-value": "Vloadbalancer..dnsscaling..module-1"
-                      },
-                      {
-                        "property-name": "model.model-type",
-                        "property-value": "resource"
-                      },
-                      {
-                        "property-name": "model.model-invariant-id",
-                        "property-value": "356a1cff-71f2-4086-9980-a2927ce11c1c"
-                      },
-                      {
-                        "property-name": "model-ver.model-version",
-                        "property-value": "1"
-                      }
-                    ]
-                  }
-                },
-                {
-                  "model-name": "Vloadbalancer..dnsscaling..module-1",
-                  "vf-module": {
-                    "vf-module-id": "my_module_db373a8d-f7be-4d02-8ac8-6ca4c305d144",
-                    "vf-module-name": "my_module_2",
-                    "is-base-vf-module": false,
-                    "resource-version": "1510610079687",
-                    "model-invariant-id": "356a1cff-71f2-4086-9980-a2927ce11c1c",
-                    "model-version-id": "6b93d804-cfc8-4be3-92cc-9336d135859a"
-                  },
-                  "extra-properties": {
-                    "extra-property": [
-                      {
-                        "property-name": "model-ver.model-version-id",
-                        "property-value": "6b93d804-cfc8-4be3-92cc-9336d135859a"
-                      },
-                      {
-                        "property-name": "model-ver.model-name",
-                        "property-value": "Vloadbalancer..dnsscaling..module-1"
-                      },
-                      {
-                        "property-name": "model.model-type",
-                        "property-value": "resource"
-                      },
-                      {
-                        "property-name": "model.model-invariant-id",
-                        "property-value": "356a1cff-71f2-4086-9980-a2927ce11c1c"
-                      },
-                      {
-                        "property-name": "model-ver.model-version",
-                        "property-value": "1"
-                      }
-                    ]
-                  }
-                }
-              ]
-            }
-          },
-          {
-            "tenant": {
-              "tenant-id": "41d6d38489bd40b09ea8a6b6b852dcbd",
-              "tenant-name": "Integration-SB-00",
-              "resource-version": "1509587770200"
-            },
-            "extra-properties": {
-              "extra-property": []
-            },
-            "inventory-response-items": {
-              "inventory-response-item": [
-                {
-                  "cloud-region": {
-                    "cloud-owner": "CloudOwner",
-                    "cloud-region-id": "RegionOne",
-                    "cloud-region-version": "v1",
-                    "resource-version": "1509587770092"
-                  },
-                  "extra-properties": {
-                    "extra-property": []
-                  }
-                }
-              ]
-            }
-          }
-        ]
-      }
-    }
-  ]
-}
diff --git a/models-interactions/model-actors/actor.so/src/test/resources/org/onap/policy/controlloop/actor/so/aai/AaiNqResponse-NoBase.json b/models-interactions/model-actors/actor.so/src/test/resources/org/onap/policy/controlloop/actor/so/aai/AaiNqResponse-NoBase.json
deleted file mode 100644 (file)
index 7101f60..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-{
-  "inventory-response-item": [
-    {
-      "vserver": {
-        "vserver-id": "6ed3642c-f7a1-4a7c-9290-3d51fe1531eb",
-        "vserver-name": "zdfw1lb01lb02",
-        "vserver-name2": "zdfw1lb01lb02",
-        "prov-status": "ACTIVE",
-        "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/6ed3642c-f7a1-4a7c-9290-3d51fe1531eb",
-        "in-maint": false,
-        "is-closed-loop-disabled": false,
-        "resource-version": "1510606403522"
-      },
-      "extra-properties": {
-        "extra-property": []
-      },
-      "inventory-response-items": {
-        "inventory-response-item": [
-          {
-            "model-name": "vLoadBalancer",
-            "generic-vnf": {
-              "vnf-id": "db373a8d-f7be-4d02-8ac8-6ca4c305d144",
-              "vnf-name": "Vfmodule_vLB1113",
-              "vnf-type": "vLoadBalancer-1106/vLoadBalancer 0",
-              "service-id": "66f157fc-4148-4880-95f5-e120677e98d1",
-              "prov-status": "PREPROV",
-              "in-maint": false,
-              "is-closed-loop-disabled": false,
-              "resource-version": "1510604011851",
-              "model-invariant-id": "cee050ed-92a5-494f-ab04-234307a846dc",
-              "model-version-id": "fd65becc-6b2c-4fe8-ace9-cc29db9a3da2"
-            },
-            "extra-properties": {
-              "extra-property": [
-                {
-                  "property-name": "model-ver.model-version-id",
-                  "property-value": "fd65becc-6b2c-4fe8-ace9-cc29db9a3da2"
-                },
-                {
-                  "property-name": "model-ver.model-name",
-                  "property-value": "vLoadBalancer"
-                },
-                {
-                  "property-name": "model.model-type",
-                  "property-value": "resource"
-                },
-                {
-                  "property-name": "model.model-invariant-id",
-                  "property-value": "cee050ed-92a5-494f-ab04-234307a846dc"
-                },
-                {
-                  "property-name": "model-ver.model-version",
-                  "property-value": "1.0"
-                }
-              ]
-            },
-            "inventory-response-items": {
-              "inventory-response-item": [
-                {
-                  "model-name": "vLoadBalancer-1106",
-                  "service-instance": {
-                    "service-instance-id": "3b12f31f-8f2d-4f5c-b875-61ff1194b941",
-                    "service-instance-name": "vLoadBalancer-1113",
-                    "resource-version": "1510603936425",
-                    "model-invariant-id": "1321d60d-f7ff-4300-96c2-6bf0b3268b7a",
-                    "model-version-id": "732d4692-4b97-46f9-a996-0b3339e88c50"
-                  },
-                  "extra-properties": {
-                    "extra-property": [
-                      {
-                        "property-name": "model-ver.model-version-id",
-                        "property-value": "732d4692-4b97-46f9-a996-0b3339e88c50"
-                      },
-                      {
-                        "property-name": "model-ver.model-name",
-                        "property-value": "vLoadBalancer-1106"
-                      },
-                      {
-                        "property-name": "model.model-type",
-                        "property-value": "service"
-                      },
-                      {
-                        "property-name": "model.model-invariant-id",
-                        "property-value": "1321d60d-f7ff-4300-96c2-6bf0b3268b7a"
-                      },
-                      {
-                        "property-name": "model-ver.model-version",
-                        "property-value": "1.0"
-                      }
-                    ]
-                  }
-                },
-                {
-                  "model-name": "Vloadbalancer..dnsscaling..module-1",
-                  "vf-module": {
-                    "vf-module-id": "dummy_db373a8d-f7be-4d02-8ac8-6ca4c305d144",
-                    "vf-module-name": "dummy_db373a8d-f7be-4d02-8ac8-6ca4c305d144",
-                    "is-base-vf-module": false,
-                    "resource-version": "1510610079687",
-                    "model-invariant-id": "356a1cff-71f2-4086-9980-a2927ce11c1c",
-                    "model-version-id": "6b93d804-cfc8-4be3-92cc-9336d135859a"
-                  },
-                  "extra-properties": {
-                    "extra-property": [
-                      {
-                        "property-name": "model-ver.model-version-id",
-                        "property-value": "6b93d804-cfc8-4be3-92cc-9336d135859a"
-                      },
-                      {
-                        "property-name": "model-ver.model-name",
-                        "property-value": "Vloadbalancer..dnsscaling..module-1"
-                      },
-                      {
-                        "property-name": "model.model-type",
-                        "property-value": "resource"
-                      },
-                      {
-                        "property-name": "model.model-invariant-id",
-                        "property-value": "356a1cff-71f2-4086-9980-a2927ce11c1c"
-                      },
-                      {
-                        "property-name": "model-ver.model-version",
-                        "property-value": "1"
-                      }
-                    ]
-                  }
-                },
-                {
-                  "model-name": "Vloadbalancer..dnsscaling..module-1",
-                  "vf-module": {
-                    "vf-module-id": "my_module_db373a8d-f7be-4d02-8ac8-6ca4c305d144",
-                    "vf-module-name": "my_module_1",
-                    "is-base-vf-module": false,
-                    "resource-version": "1510610079687",
-                    "model-invariant-id": "356a1cff-71f2-4086-9980-a2927ce11c1c",
-                    "model-version-id": "6b93d804-cfc8-4be3-92cc-9336d135859a"
-                  },
-                  "extra-properties": {
-                    "extra-property": [
-                      {
-                        "property-name": "model-ver.model-version-id",
-                        "property-value": "6b93d804-cfc8-4be3-92cc-9336d135859a"
-                      },
-                      {
-                        "property-name": "model-ver.model-name",
-                        "property-value": "Vloadbalancer..dnsscaling..module-1"
-                      },
-                      {
-                        "property-name": "model.model-type",
-                        "property-value": "resource"
-                      },
-                      {
-                        "property-name": "model.model-invariant-id",
-                        "property-value": "356a1cff-71f2-4086-9980-a2927ce11c1c"
-                      },
-                      {
-                        "property-name": "model-ver.model-version",
-                        "property-value": "1"
-                      }
-                    ]
-                  }
-                },
-                {
-                  "model-name": "Vloadbalancer..dnsscaling..module-1",
-                  "vf-module": {
-                    "vf-module-id": "my_module_db373a8d-f7be-4d02-8ac8-6ca4c305d144",
-                    "vf-module-name": "my_module_2",
-                    "is-base-vf-module": false,
-                    "resource-version": "1510610079687",
-                    "model-invariant-id": "356a1cff-71f2-4086-9980-a2927ce11c1c",
-                    "model-version-id": "6b93d804-cfc8-4be3-92cc-9336d135859a"
-                  },
-                  "extra-properties": {
-                    "extra-property": [
-                      {
-                        "property-name": "model-ver.model-version-id",
-                        "property-value": "6b93d804-cfc8-4be3-92cc-9336d135859a"
-                      },
-                      {
-                        "property-name": "model-ver.model-name",
-                        "property-value": "Vloadbalancer..dnsscaling..module-1"
-                      },
-                      {
-                        "property-name": "model.model-type",
-                        "property-value": "resource"
-                      },
-                      {
-                        "property-name": "model.model-invariant-id",
-                        "property-value": "356a1cff-71f2-4086-9980-a2927ce11c1c"
-                      },
-                      {
-                        "property-name": "model-ver.model-version",
-                        "property-value": "1"
-                      }
-                    ]
-                  }
-                }
-              ]
-            }
-          },
-          {
-            "tenant": {
-              "tenant-id": "41d6d38489bd40b09ea8a6b6b852dcbd",
-              "tenant-name": "Integration-SB-00",
-              "resource-version": "1509587770200"
-            },
-            "extra-properties": {
-              "extra-property": []
-            },
-            "inventory-response-items": {
-              "inventory-response-item": [
-                {
-                  "cloud-region": {
-                    "cloud-owner": "CloudOwner",
-                    "cloud-region-id": "RegionOne",
-                    "cloud-region-version": "v1",
-                    "resource-version": "1509587770092"
-                  },
-                  "extra-properties": {
-                    "extra-property": []
-                  }
-                }
-              ]
-            }
-          }
-        ]
-      }
-    }
-  ]
-}
diff --git a/models-interactions/model-actors/actor.so/src/test/resources/org/onap/policy/controlloop/actor/so/aai/AaiNqResponse-NoNonBase.json b/models-interactions/model-actors/actor.so/src/test/resources/org/onap/policy/controlloop/actor/so/aai/AaiNqResponse-NoNonBase.json
deleted file mode 100644 (file)
index a58100b..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-{
-  "inventory-response-item": [
-    {
-      "vserver": {
-        "vserver-id": "6ed3642c-f7a1-4a7c-9290-3d51fe1531eb",
-        "vserver-name": "zdfw1lb01lb02",
-        "vserver-name2": "zdfw1lb01lb02",
-        "prov-status": "ACTIVE",
-        "vserver-selflink": "http://10.12.25.2:8774/v2.1/41d6d38489bd40b09ea8a6b6b852dcbd/servers/6ed3642c-f7a1-4a7c-9290-3d51fe1531eb",
-        "in-maint": false,
-        "is-closed-loop-disabled": false,
-        "resource-version": "1510606403522"
-      },
-      "extra-properties": {
-        "extra-property": []
-      },
-      "inventory-response-items": {
-        "inventory-response-item": [
-          {
-            "model-name": "vLoadBalancer",
-            "generic-vnf": {
-              "vnf-id": "db373a8d-f7be-4d02-8ac8-6ca4c305d144",
-              "vnf-name": "Vfmodule_vLB1113",
-              "vnf-type": "vLoadBalancer-1106/vLoadBalancer 0",
-              "service-id": "66f157fc-4148-4880-95f5-e120677e98d1",
-              "prov-status": "PREPROV",
-              "in-maint": false,
-              "is-closed-loop-disabled": false,
-              "resource-version": "1510604011851",
-              "model-invariant-id": "cee050ed-92a5-494f-ab04-234307a846dc",
-              "model-version-id": "fd65becc-6b2c-4fe8-ace9-cc29db9a3da2"
-            },
-            "extra-properties": {
-              "extra-property": [
-                {
-                  "property-name": "model-ver.model-version-id",
-                  "property-value": "fd65becc-6b2c-4fe8-ace9-cc29db9a3da2"
-                },
-                {
-                  "property-name": "model-ver.model-name",
-                  "property-value": "vLoadBalancer"
-                },
-                {
-                  "property-name": "model.model-type",
-                  "property-value": "resource"
-                },
-                {
-                  "property-name": "model.model-invariant-id",
-                  "property-value": "cee050ed-92a5-494f-ab04-234307a846dc"
-                },
-                {
-                  "property-name": "model-ver.model-version",
-                  "property-value": "1.0"
-                }
-              ]
-            },
-            "inventory-response-items": {
-              "inventory-response-item": [
-                {
-                  "model-name": "vLoadBalancer-1106",
-                  "service-instance": {
-                    "service-instance-id": "3b12f31f-8f2d-4f5c-b875-61ff1194b941",
-                    "service-instance-name": "vLoadBalancer-1113",
-                    "resource-version": "1510603936425",
-                    "model-invariant-id": "1321d60d-f7ff-4300-96c2-6bf0b3268b7a",
-                    "model-version-id": "732d4692-4b97-46f9-a996-0b3339e88c50"
-                  },
-                  "extra-properties": {
-                    "extra-property": [
-                      {
-                        "property-name": "model-ver.model-version-id",
-                        "property-value": "732d4692-4b97-46f9-a996-0b3339e88c50"
-                      },
-                      {
-                        "property-name": "model-ver.model-name",
-                        "property-value": "vLoadBalancer-1106"
-                      },
-                      {
-                        "property-name": "model.model-type",
-                        "property-value": "service"
-                      },
-                      {
-                        "property-name": "model.model-invariant-id",
-                        "property-value": "1321d60d-f7ff-4300-96c2-6bf0b3268b7a"
-                      },
-                      {
-                        "property-name": "model-ver.model-version",
-                        "property-value": "1.0"
-                      }
-                    ]
-                  }
-                },
-                {
-                  "model-name": "Vloadbalancer..base_vlb..module-0",
-                  "vf-module": {
-                    "vf-module-id": "e6b3e3eb-34e1-4c00-b8c1-2a4fbe479b12",
-                    "vf-module-name": "Vfmodule_vLB1113-1",
-                    "heat-stack-id": "Vfmodule_vLB1113-1/3dd6d900-772f-4fcc-a0cb-e250ab2bb4db",
-                    "orchestration-status": "active",
-                    "is-base-vf-module": true,
-                    "resource-version": "1510604612557",
-                    "model-invariant-id": "6d760188-9a24-451a-b05b-e08b86cb94f2",
-                    "model-version-id": "93facad9-55f2-4fe0-9574-814c2bc2d071"
-                  },
-                  "extra-properties": {
-                    "extra-property": [
-                      {
-                        "property-name": "model-ver.model-version-id",
-                        "property-value": "93facad9-55f2-4fe0-9574-814c2bc2d071"
-                      },
-                      {
-                        "property-name": "model-ver.model-name",
-                        "property-value": "Vloadbalancer..base_vlb..module-0"
-                      },
-                      {
-                        "property-name": "model.model-type",
-                        "property-value": "resource"
-                      },
-                      {
-                        "property-name": "model.model-invariant-id",
-                        "property-value": "6d760188-9a24-451a-b05b-e08b86cb94f2"
-                      },
-                      {
-                        "property-name": "model-ver.model-version",
-                        "property-value": "1"
-                      }
-                    ]
-                  }
-                },
-                {
-                  "model-name": "Vloadbalancer..dnsscaling..module-1",
-                  "vf-module": {
-                    "vf-module-id": "dummy_db373a8d-f7be-4d02-8ac8-6ca4c305d144",
-                    "vf-module-name": "dummy_db373a8d-f7be-4d02-8ac8-6ca4c305d144",
-                    "is-base-vf-module": false,
-                    "resource-version": "1510610079687",
-                    "model-invariant-id": "356a1cff-71f2-4086-9980-a2927ce11c1c",
-                    "model-version-id": "6b93d804-cfc8-4be3-92cc-9336d135859a"
-                  },
-                  "extra-properties": {
-                    "extra-property": [
-                      {
-                        "property-name": "model-ver.model-version-id",
-                        "property-value": "6b93d804-cfc8-4be3-92cc-9336d135859a"
-                      },
-                      {
-                        "property-name": "model-ver.model-name",
-                        "property-value": "Vloadbalancer..dnsscaling..module-1"
-                      },
-                      {
-                        "property-name": "model.model-type",
-                        "property-value": "resource"
-                      },
-                      {
-                        "property-name": "model.model-invariant-id",
-                        "property-value": "356a1cff-71f2-4086-9980-a2927ce11c1c"
-                      },
-                      {
-                        "property-name": "model-ver.model-version",
-                        "property-value": "1"
-                      }
-                    ]
-                  }
-                }
-              ]
-            }
-          },
-          {
-            "tenant": {
-              "tenant-id": "41d6d38489bd40b09ea8a6b6b852dcbd",
-              "tenant-name": "Integration-SB-00",
-              "resource-version": "1509587770200"
-            },
-            "extra-properties": {
-              "extra-property": []
-            },
-            "inventory-response-items": {
-              "inventory-response-item": [
-                {
-                  "cloud-region": {
-                    "cloud-owner": "CloudOwner",
-                    "cloud-region-id": "RegionOne",
-                    "cloud-region-version": "v1",
-                    "resource-version": "1509587770092"
-                  },
-                  "extra-properties": {
-                    "extra-property": []
-                  }
-                }
-              ]
-            }
-          }
-        ]
-      }
-    }
-  ]
-}
index cdedbf4..bb7f34b 100644 (file)
 package org.onap.policy.controlloop.actor.test;
 
 import static org.junit.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
 
 import java.util.Map;
-import java.util.TreeMap;
 import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.Executor;
 import javax.ws.rs.core.Response;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
-import org.onap.policy.aai.AaiConstants;
-import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.common.utils.coder.Coder;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.resources.ResourceUtils;
 import org.onap.policy.common.utils.time.PseudoExecutor;
-import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.actorserviceprovider.ActorService;
-import org.onap.policy.controlloop.actorserviceprovider.Operation;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
-import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
-import org.onap.policy.controlloop.actorserviceprovider.Operator;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
-import org.onap.policy.controlloop.actorserviceprovider.impl.OperationPartial;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
-import org.onap.policy.controlloop.actorserviceprovider.spi.Actor;
 
 /**
  * Superclass for various Operation tests.
@@ -76,27 +64,9 @@ public class BasicOperation {
 
     @Mock
     protected ActorService service;
-    @Mock
-    protected Actor guardActor;
-    @Mock
-    protected Operator guardOperator;
-    @Mock
-    protected Operation guardOperation;
-    @Mock
-    protected Actor cqActor;
-    @Mock
-    protected Operator cqOperator;
-    @Mock
-    protected Operation cqOperation;
-    @Mock
-    protected AaiCqResponse cqResponse;
 
-    protected CompletableFuture<OperationOutcome> cqFuture;
     protected CompletableFuture<Response> future;
     protected ControlLoopOperationParams params;
-    protected Map<String, String> enrichment;
-    protected VirtualControlLoopEvent event;
-    protected ControlLoopEventContext context;
     protected OperationOutcome outcome;
     protected PseudoExecutor executor;
 
@@ -125,64 +95,27 @@ public class BasicOperation {
     public void setUpBasic() {
         MockitoAnnotations.initMocks(this);
 
-        cqFuture = new CompletableFuture<>();
         future = new CompletableFuture<>();
 
         executor = new PseudoExecutor();
 
         makeContext();
 
-        when(service.getActor(OperationPartial.GUARD_ACTOR_NAME)).thenReturn(guardActor);
-        when(guardActor.getOperator(OperationPartial.GUARD_OPERATION_NAME)).thenReturn(guardOperator);
-        when(guardOperator.buildOperation(any())).thenReturn(guardOperation);
-
-        outcome = params.makeOutcome(TARGET_ENTITY);
-        outcome.setResult(OperationResult.SUCCESS);
-        when(guardOperation.start()).thenReturn(CompletableFuture.completedFuture(outcome));
-
-        when(service.getActor(AaiConstants.ACTOR_NAME)).thenReturn(cqActor);
-        when(cqActor.getOperator("CustomQuery")).thenReturn(cqOperator);
-        when(cqOperator.buildOperation(any())).thenReturn(cqOperation);
-
-        when(cqOperation.start()).thenReturn(cqFuture);
-
         // get a fresh outcome
         outcome = params.makeOutcome(TARGET_ENTITY);
     }
 
     /**
-     * Reinitializes {@link #enrichment}, {@link #event}, {@link #context}, and
-     * {@link #params}.
+     * Reinitializes {@link #params}.
      * <p/>
      * Note: {@link #params} is configured to use {@link #executor}.
      */
     protected void makeContext() {
-        enrichment = new TreeMap<>(makeEnrichment());
-
-        event = new VirtualControlLoopEvent();
-        event.setRequestId(REQ_ID);
-        event.setAai(enrichment);
-        event.setClosedLoopControlName(CL_NAME);
-        event.setPolicyName(EVENT_POLICY_NAME);
-        event.setPolicyVersion(EVENT_POLICY_VERSION);
-        event.setVersion(EVENT_VERSION);
-
-        context = new ControlLoopEventContext(event);
-
-        params = ControlLoopOperationParams.builder().executor(executor).context(context).actorService(service)
+        params = ControlLoopOperationParams.builder().executor(executor).requestId(REQ_ID).actorService(service)
                         .actor(actorName).operation(operationName).targetEntity(TARGET_ENTITY).payload(makePayload())
                         .build();
     }
 
-    /**
-     * Makes enrichment data.
-     *
-     * @return enrichment data
-     */
-    protected Map<String, String> makeEnrichment() {
-        return new TreeMap<>();
-    }
-
 
     /**
      * Makes payload data.
@@ -218,16 +151,4 @@ public class BasicOperation {
 
         assertEquals(expected, json);
     }
-
-    /**
-     * Provides a response to a custom query.
-     *
-     * @param cq response to provide
-     */
-    protected void provideCqResponse(AaiCqResponse cq) {
-        context.setProperty(AaiCqResponse.CONTEXT_KEY, cq);
-        OperationOutcome outcome2 = params.makeOutcome(TARGET_ENTITY);
-        outcome2.setResult(OperationResult.SUCCESS);
-        cqFuture.complete(outcome2);
-    }
 }
index 2327fec..62c19b8 100644 (file)
@@ -64,7 +64,6 @@ public class BasicHttpOperationTest {
         assertEquals(200, oper.rawResponse.getStatus());
         assertNotNull(oper.future);
         assertEquals(BasicHttpOperation.BASE_URI, oper.client.getBaseUrl());
-        assertNotNull(oper.context);
         assertNotNull(oper.outcome);
         assertNotNull(oper.executor);
     }
index 60d3ddd..fe06ad5 100644 (file)
@@ -24,19 +24,13 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
 
 import java.util.Map;
-import java.util.concurrent.CompletableFuture;
 import org.junit.Before;
 import org.junit.Test;
-import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.resources.ResourceUtils;
-import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
-import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
 import org.onap.policy.controlloop.actorserviceprovider.Util;
-import org.onap.policy.controlloop.actorserviceprovider.impl.OperationPartial;
 
 public class BasicOperationTest {
     private static final String ACTOR = "my-actor";
@@ -67,39 +61,24 @@ public class BasicOperationTest {
     @Test
     public void testSetUp() throws Exception {
         assertNotNull(oper.future);
-        assertNotNull(oper.context);
         assertNotNull(oper.outcome);
         assertNotNull(oper.executor);
-        assertNotNull(oper.guardOperation);
-
-        CompletableFuture<OperationOutcome> future = oper.service.getActor(OperationPartial.GUARD_ACTOR_NAME)
-                        .getOperator(OperationPartial.GUARD_OPERATION_NAME).buildOperation(null).start();
-        assertTrue(future.isDone());
-        assertEquals(OperationResult.SUCCESS, future.get().getResult());
     }
 
     @Test
     public void testMakeContext() {
         oper.makeContext();
 
-        assertTrue(oper.enrichment.isEmpty());
-
-        assertSame(BasicHttpOperation.REQ_ID, oper.event.getRequestId());
-        assertSame(oper.enrichment, oper.event.getAai());
-
-        assertSame(oper.event, oper.context.getEvent());
-
-        assertSame(oper.context, oper.params.getContext());
         assertSame(oper.service, oper.params.getActorService());
         assertSame(oper.executor, oper.params.getExecutor());
         assertEquals(ACTOR, oper.params.getActor());
         assertEquals(OPERATION, oper.params.getOperation());
+        assertSame(BasicHttpOperation.REQ_ID, oper.params.getRequestId());
         assertEquals(BasicHttpOperation.TARGET_ENTITY, oper.params.getTargetEntity());
     }
 
     @Test
-    public void testMakeEnrichment_testMakePayload() {
-        assertTrue(oper.makeEnrichment().isEmpty());
+    public void testMakePayload() {
         assertNull(oper.makePayload());
     }
 
@@ -108,14 +87,4 @@ public class BasicOperationTest {
         Map<String, Object> map = Util.translateToMap("", ResourceUtils.getResourceAsString("actual.json"));
         oper.verifyRequest("expected.json", map, "svc-request-id", "vnf-id");
     }
-
-    @Test
-    public void testProvideCqResponse() throws Exception {
-        AaiCqResponse cq = new AaiCqResponse("{}");
-        oper.provideCqResponse(cq);
-
-        assertSame(cq, oper.context.getProperty(AaiCqResponse.CONTEXT_KEY));
-        assertTrue(oper.cqFuture.isDone());
-        assertEquals(OperationResult.SUCCESS, oper.cqFuture.get().getResult());
-    }
 }
index 0a1136d..65c7318 100644 (file)
@@ -21,7 +21,6 @@
 package org.onap.policy.controlloop.actor.vfc;
 
 import java.util.List;
-import java.util.concurrent.CompletableFuture;
 import javax.ws.rs.core.Response;
 import org.apache.commons.lang3.StringUtils;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
@@ -82,14 +81,6 @@ public abstract class VfcOperation extends HttpOperation<VfcResponse> {
         return super.getPollingPath() + jobId;
     }
 
-    /**
-     * Starts the GUARD.
-     */
-    @Override
-    protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
-        return startGuardAsync();
-    }
-
     @Override
     protected Status detmStatus(Response rawResponse, VfcResponse response) {
         if (rawResponse.getStatus() == 200) {
@@ -170,16 +161,15 @@ public abstract class VfcOperation extends HttpOperation<VfcResponse> {
      * @return request
      */
     protected VfcRequest constructVfcRequest() {
-        final String serviceInstance = getOptProperty(OperationProperties.ENRICHMENT_SERVICE_ID,
-                        "service-instance.service-instance-id");
-        final String vmId = getOptProperty(OperationProperties.ENRICHMENT_VSERVER_ID, "vserver.vserver-id");
-        final String vmName = getOptProperty(OperationProperties.ENRICHMENT_VSERVER_NAME, "vserver.vserver-name");
-        final String vnfId = getOptProperty(OperationProperties.ENRICHMENT_GENERIC_VNF_ID, GENERIC_VNF_ID);
+        final String serviceInstance = getProperty(OperationProperties.ENRICHMENT_SERVICE_ID);
+        final String vmId = getProperty(OperationProperties.ENRICHMENT_VSERVER_ID);
+        final String vmName = getProperty(OperationProperties.ENRICHMENT_VSERVER_NAME);
+        final String vnfId = getProperty(OperationProperties.ENRICHMENT_GENERIC_VNF_ID);
 
         if (StringUtils.isBlank(serviceInstance) || StringUtils.isBlank(vmId) || StringUtils.isBlank(vmName)) {
             // original code did not check the VNF id, so we won't check it either
             throw new IllegalArgumentException(
-                            "Cannot extract enrichment data for service instance, server id, or server name.");
+                            "Missing enrichment data for service instance, server id, or server name.");
         }
 
         VfcHealActionVmInfo vmActionInfo = new VfcHealActionVmInfo();
@@ -202,21 +192,4 @@ public abstract class VfcOperation extends HttpOperation<VfcResponse> {
 
         return request;
     }
-
-    /**
-     * Gets an optional property, first checking the properties, then checking the
-     * enrichment data.
-     *
-     * @param propName property name
-     * @param enrichmentName property name within the enrichment data
-     * @return the property's value, or {@code null} if it is not found
-     */
-    protected String getOptProperty(String propName, String enrichmentName) {
-        if (containsProperty(propName)) {
-            // return the value, even if it's null
-            return getProperty(propName);
-        }
-
-        return params.getContext().getEnrichment().get(enrichmentName);
-    }
 }
index 9a4677d..fab7636 100644 (file)
@@ -32,7 +32,6 @@ import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
@@ -67,49 +66,26 @@ public class RestartTest extends BasicVfcOperation {
     @Before
     public void setup() throws Exception {
         super.setUp();
-        params.getContext().getEnrichment().put("service-instance.service-instance-id", TEST_SERVICE_INSTANCE_ID);
-        params.getContext().getEnrichment().put("vserver.vserver-id", TEST_VSERVER_ID);
-        params.getContext().getEnrichment().put("vserver.vserver-name", TEST_VSERVER_NAME);
-        restartOper = new Restart(params, config);
-    }
-
-    /**
-     * Tests "success" case with simulator.
-     */
-    @Test
-    public void testSuccess() throws Exception {
-        HttpPollingParams opParams = HttpPollingParams.builder().clientName(MY_CLIENT).path("ns").pollPath("jobs")
-                        .maxPolls(1).build();
-        config = new HttpPollingConfig(blockingExecutor, opParams, HttpClientFactoryInstance.getClientFactory());
-
-        params = params.toBuilder().retry(0).timeoutSec(5).executor(blockingExecutor).build();
 
         restartOper = new Restart(params, config);
 
-        outcome = restartOper.start().get();
-        assertEquals(OperationResult.SUCCESS, outcome.getResult());
-        assertTrue(outcome.getResponse() instanceof VfcResponse);
+        loadProperties();
     }
 
     /**
-     * Tests "success" case with simulator, using properties instead of custom query data.
+     * Tests "success" case with simulator.
      */
     @Test
-    public void testSuccessViaProperties() throws Exception {
+    public void testSuccess() throws Exception {
         HttpPollingParams opParams = HttpPollingParams.builder().clientName(MY_CLIENT).path("ns").pollPath("jobs")
                         .maxPolls(1).build();
         config = new HttpPollingConfig(blockingExecutor, opParams, HttpClientFactoryInstance.getClientFactory());
 
         params = params.toBuilder().retry(0).timeoutSec(5).executor(blockingExecutor).preprocessed(true).build();
-        params.getContext().removeProperty(AaiCqResponse.CONTEXT_KEY);
 
         restartOper = new Restart(params, config);
 
-        // set the properties
-        restartOper.setProperty(OperationProperties.ENRICHMENT_SERVICE_ID, TEST_SERVICE_INSTANCE_ID);
-        restartOper.setProperty(OperationProperties.ENRICHMENT_VSERVER_ID, TEST_VSERVER_ID);
-        restartOper.setProperty(OperationProperties.ENRICHMENT_VSERVER_NAME, TEST_VSERVER_NAME);
-        restartOper.setProperty(OperationProperties.ENRICHMENT_GENERIC_VNF_ID, TEST_GENERIC_VNF_ID);
+        loadProperties();
 
         // run the operation
         outcome = restartOper.start().get();
@@ -142,4 +118,11 @@ public class RestartTest extends BasicVfcOperation {
         assertNotNull(resultPair.getLeft());
         assertNotNull(resultPair.getRight());
     }
+
+    private void loadProperties() {
+        restartOper.setProperty(OperationProperties.ENRICHMENT_SERVICE_ID, TEST_SERVICE_INSTANCE_ID);
+        restartOper.setProperty(OperationProperties.ENRICHMENT_VSERVER_ID, TEST_VSERVER_ID);
+        restartOper.setProperty(OperationProperties.ENRICHMENT_VSERVER_NAME, TEST_VSERVER_NAME);
+        restartOper.setProperty(OperationProperties.ENRICHMENT_GENERIC_VNF_ID, TEST_GENERIC_VNF_ID);
+    }
 }
index 6f8956f..4f20c12 100644 (file)
@@ -26,11 +26,9 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
-import java.util.Map;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
 import org.onap.policy.vfc.VfcResponse;
 import org.onap.policy.vfc.VfcResponseDescriptor;
 
@@ -59,11 +57,6 @@ public class VfcOperationTest extends BasicVfcOperation {
         assertTrue(oper.isUsePolling());
     }
 
-    @Test
-    public void testStartPreprocessorAsync() {
-        assertNotNull(oper.startPreprocessorAsync());
-    }
-
     @Test
     public void testResetPollCount() {
         oper.resetPollCount();
@@ -88,37 +81,4 @@ public class VfcOperationTest extends BasicVfcOperation {
     public void testIsSuccess() {
         assertTrue(oper.isSuccess(rawResponse, response));
     }
-
-    @Test
-    public void testGetOptProperty() {
-        // in neither property nor enrichment
-        assertNull(oper.getOptProperty("propA", "propA2"));
-
-        // both - should choose the property
-        remakeOper(Map.of("propB2", "valueB2"));
-        oper.setProperty("propB", "valueB");
-        assertEquals("valueB", oper.getOptProperty("propB", "propB2"));
-
-        // both - should choose the property, even if it's null
-        remakeOper(Map.of("propC2", "valueC2"));
-        oper.setProperty("propC", null);
-        assertNull(oper.getOptProperty("propC", "propC2"));
-
-        // only in enrichment data
-        remakeOper(Map.of("propD2", "valueD2"));
-        assertEquals("valueD2", oper.getOptProperty("propD", "propD2"));
-    }
-
-    /**
-     * Remakes the operation, with the specified A&AI enrichment data.
-     *
-     * @param aai A&AI enrichment data
-     */
-    private void remakeOper(Map<String, String> aai) {
-        event.setAai(aai);
-        context = new ControlLoopEventContext(event);
-        params = params.toBuilder().context(context).build();
-
-        oper = new VfcOperation(params, config) {};
-    }
 }
index 718daed..d4dea7c 100644 (file)
@@ -54,7 +54,7 @@ public class OperationProperties {
     public static final String AAI_PNF = "AAI/pnf";
 
     /**
-     * A&AI VNF id for the target resource ID. Obtained as follows:
+     * A&AI [Generic] VNF for the target resource ID. Obtained as follows:
      * <ol>
      * <li>using the target resource ID, invoke the custom query
      * getGenericVnfByModelInvariantId() method to get the generic VNF</li>
diff --git a/models-interactions/model-actors/actorServiceProvider/src/main/java/org/onap/policy/controlloop/actorserviceprovider/controlloop/ControlLoopEventContext.java b/models-interactions/model-actors/actorServiceProvider/src/main/java/org/onap/policy/controlloop/actorserviceprovider/controlloop/ControlLoopEventContext.java
deleted file mode 100644 (file)
index f7b58c1..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.controlloop.actorserviceprovider.controlloop;
-
-import java.io.Serializable;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ConcurrentHashMap;
-import lombok.AccessLevel;
-import lombok.Getter;
-import lombok.NonNull;
-import lombok.Setter;
-import org.onap.policy.controlloop.VirtualControlLoopEvent;
-import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
-import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
-
-/**
- * Context associated with a control loop event.
- */
-@Getter
-@Setter
-public class ControlLoopEventContext implements Serializable {
-    private static final long serialVersionUID = 1L;
-
-
-    private final VirtualControlLoopEvent event;
-
-    /**
-     * Enrichment data extracted from the event. Never {@code null}, though it may be
-     * immutable.
-     */
-    private final Map<String, String> enrichment;
-
-    /**
-     * Set of properties that have been stored in the context.
-     */
-    @Getter(AccessLevel.NONE)
-    @Setter(AccessLevel.NONE)
-    private Map<String, Serializable> properties = new ConcurrentHashMap<>();
-
-    /**
-     * When {@link #obtain(String, ControlLoopOperationParams)} is invoked and the
-     * specified property is not found in {@link #properties}, it is retrieved. This holds
-     * the futures for the operations retrieving the properties.
-     */
-    @Getter(AccessLevel.NONE)
-    @Setter(AccessLevel.NONE)
-    private transient Map<String, CompletableFuture<OperationOutcome>> retrievers = new ConcurrentHashMap<>();
-
-    /**
-     * Request ID extracted from the event, or a generated value if the event has no
-     * request id; never {@code null}.
-     */
-    private final UUID requestId;
-
-
-    /**
-     * Constructs the object.
-     *
-     * @param event event with which this is associated
-     */
-    public ControlLoopEventContext(@NonNull VirtualControlLoopEvent event) {
-        this.event = event;
-        this.requestId = (event.getRequestId() != null ? event.getRequestId() : UUID.randomUUID());
-        this.enrichment = (event.getAai() != null ? event.getAai() : Map.of());
-    }
-
-    /**
-     * Determines if the context contains a property.
-     *
-     * @param name name of the property of interest
-     * @return {@code true} if the context contains the property, {@code false} otherwise
-     */
-    public boolean contains(String name) {
-        return properties.containsKey(name);
-    }
-
-    /**
-     * Gets a property, casting it to the desired type.
-     *
-     * @param <T> desired type
-     * @param name name of the property whose value is to be retrieved
-     * @return the property's value, or {@code null} if it does not yet have a value
-     */
-    @SuppressWarnings("unchecked")
-    public <T> T getProperty(String name) {
-        return (T) properties.get(name);
-    }
-
-    /**
-     * Sets a property's value.
-     *
-     * @param name property name
-     * @param value new property value
-     */
-    public void setProperty(String name, Serializable value) {
-        properties.put(name, value);
-    }
-
-    /**
-     * Removes a property.
-     * @param name property name
-     */
-    public void removeProperty(String name) {
-        properties.remove(name);
-    }
-
-    /**
-     * Obtains the given property.
-     *
-     * @param name name of the desired property
-     * @param params parameters needed to perform the operation to retrieve the desired
-     *        property
-     * @return a future for retrieving the property, {@code null} if the property has
-     *         already been retrieved
-     */
-    public CompletableFuture<OperationOutcome> obtain(String name, ControlLoopOperationParams params) {
-        if (properties.containsKey(name)) {
-            return null;
-        }
-
-        /*
-         * Return any existing future, if it wasn't canceled. Otherwise, start a new
-         * request.
-         */
-
-        // @formatter:off
-        CompletableFuture<OperationOutcome> oldFuture =
-            retrievers.computeIfPresent(name, (key, future) -> future.isCancelled() ? null : future);
-        // @formatter:on
-
-        if (oldFuture != null) {
-            return oldFuture;
-        }
-
-        /*
-         * Note: must NOT invoke params.start() within retrievers.compute(), as start()
-         * may invoke obtain() which would cause a recursive update to the retrievers map.
-         */
-        CompletableFuture<OperationOutcome> future = params.start();
-
-        if ((oldFuture = retrievers.putIfAbsent(name, future)) != null) {
-            future.cancel(false);
-            return oldFuture;
-        }
-
-        return future;
-    }
-}
index c81575f..e9f6b02 100644 (file)
@@ -24,7 +24,6 @@ import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
-import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -65,9 +64,7 @@ import org.slf4j.LoggerFactory;
  * Partial implementation of an operator. In general, it's preferable that subclasses
  * would override {@link #startOperationAsync(int, OperationOutcome)
  * startOperationAsync()}. However, if that proves to be too difficult, then they can
- * simply override {@link #doOperation(int, OperationOutcome) doOperation()}. In addition,
- * if the operation requires any preprocessor steps, the subclass may choose to override
- * {@link #startPreprocessorAsync()}.
+ * simply override {@link #doOperation(int, OperationOutcome) doOperation()}.
  * <p/>
  * The futures returned by the methods within this class can be canceled, and will
  * propagate the cancellation to any subtasks. Thus it is also expected that any futures
@@ -159,153 +156,36 @@ public abstract class OperationPartial implements Operation {
         return (T) properties.get(name);
     }
 
-    @Override
-    public CompletableFuture<OperationOutcome> start() {
-        // allocate a controller for the entire operation
-        final PipelineControllerFuture<OperationOutcome> controller = new PipelineControllerFuture<>();
-
-        CompletableFuture<OperationOutcome> preproc = startPreprocessorAsync();
-        if (preproc == null) {
-            // no preprocessor required - just start the operation
-            return startOperationAttempt(controller, 1);
-        }
-
-        /*
-         * Do preprocessor first and then, if successful, start the operation. Note:
-         * operations create their own outcome, ignoring the outcome from any previous
-         * steps.
-         *
-         * Wrap the preprocessor to ensure "stop" is propagated to it.
-         */
-        // @formatter:off
-        controller.wrap(preproc)
-                        .exceptionally(fromException("preprocessor of operation"))
-                        .thenCompose(handlePreprocessorFailure(controller))
-                        .thenCompose(unusedOutcome -> startOperationAttempt(controller, 1))
-                        .whenCompleteAsync(controller.delayedComplete(), params.getExecutor());
-        // @formatter:on
-
-        return controller;
-    }
-
     /**
-     * Handles a failure in the preprocessor pipeline. If a failure occurred, then it
-     * invokes the call-backs, marks the controller complete, and returns an incomplete
-     * future, effectively halting the pipeline. Otherwise, it returns the outcome that it
-     * received.
-     * <p/>
-     * Assumes that no callbacks have been invoked yet.
+     * Gets a property value, throwing an exception if it's missing.
      *
-     * @param controller pipeline controller
-     * @return a function that checks the outcome status and continues, if successful, or
-     *         indicates a failure otherwise
+     * @param name property name
+     * @param propertyType property type, used in an error message if the property value
+     *        is {@code null}
+     * @return the property value
      */
-    private Function<OperationOutcome, CompletableFuture<OperationOutcome>> handlePreprocessorFailure(
-                    PipelineControllerFuture<OperationOutcome> controller) {
-
-        return outcome -> {
-
-            if (isSuccess(outcome)) {
-                logger.info("{}: preprocessor succeeded for {}", getFullName(), params.getRequestId());
-                return CompletableFuture.completedFuture(outcome);
-            }
-
-            logger.warn("preprocessor failed, discontinuing operation {} for {}", getFullName(), params.getRequestId());
-
-            final Executor executor = params.getExecutor();
-            final CallbackManager callbacks = new CallbackManager();
-
-            // propagate "stop" to the callbacks
-            controller.add(callbacks);
-
-            final OperationOutcome outcome2 = params.makeOutcome(getTargetEntity());
-
-            // TODO need a FAILURE_MISSING_DATA (e.g., A&AI)
-
-            outcome2.setFinalOutcome(true);
-            outcome2.setResult(OperationResult.FAILURE_GUARD);
-            outcome2.setMessage(outcome != null ? outcome.getMessage() : null);
-
-            // @formatter:off
-            CompletableFuture.completedFuture(outcome2)
-                            .whenCompleteAsync(callbackStarted(callbacks), executor)
-                            .whenCompleteAsync(callbackCompleted(callbacks), executor)
-                            .whenCompleteAsync(controller.delayedComplete(), executor);
-            // @formatter:on
-
-            return new CompletableFuture<>();
-        };
-    }
-
-    /**
-     * Invokes the operation's preprocessor step(s) as a "future". This method simply
-     * returns {@code null}.
-     * <p/>
-     * This method assumes the following:
-     * <ul>
-     * <li>the operator is alive</li>
-     * <li>exceptions generated within the pipeline will be handled by the invoker</li>
-     * </ul>
-     *
-     * @return a function that will start the preprocessor and returns its outcome, or
-     *         {@code null} if this operation needs no preprocessor
-     */
-    protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
-        return null;
-    }
-
-    /**
-     * Invokes the operation's guard step(s) as a "future".
-     * <p/>
-     * This method assumes the following:
-     * <ul>
-     * <li>the operator is alive</li>
-     * <li>exceptions generated within the pipeline will be handled by the invoker</li>
-     * </ul>
-     *
-     * @return a function that will start the guard checks and returns its outcome, or
-     *         {@code null} if this operation has no guard
-     */
-    protected CompletableFuture<OperationOutcome> startGuardAsync() {
-        if (params.isPreprocessed()) {
-            return null;
+    @SuppressWarnings("unchecked")
+    protected <T> T getRequiredProperty(String name, String propertyType) {
+        T value = (T) properties.get(name);
+        if (value == null) {
+            throw new IllegalStateException("missing " + propertyType);
         }
 
-        // get the guard payload
-        Map<String, Object> payload = makeGuardPayload();
-
-        /*
-         * Note: can't use constants from actor.guard, because that would create a
-         * circular dependency.
-         */
-        return params.toBuilder().actor(GUARD_ACTOR_NAME).operation(GUARD_OPERATION_NAME).retry(null).timeoutSec(null)
-                        .payload(payload).build().start();
+        return value;
     }
 
-    /**
-     * Creates a payload to execute a guard operation.
-     *
-     * @return a new guard payload
-     */
-    protected Map<String, Object> makeGuardPayload() {
-        // TODO delete this once preprocessing is done by the application
-        Map<String, Object> guard = new LinkedHashMap<>();
-        guard.put("actor", params.getActor());
-        guard.put("operation", params.getOperation());
-        guard.put("target", getTargetEntity());
-        guard.put("requestId", params.getRequestId());
-
-        String clname = params.getContext().getEvent().getClosedLoopControlName();
-        if (clname != null) {
-            guard.put("clname", clname);
-        }
+    @Override
+    public CompletableFuture<OperationOutcome> start() {
+        // allocate a controller for the entire operation
+        final PipelineControllerFuture<OperationOutcome> controller = new PipelineControllerFuture<>();
 
-        return guard;
+        // start attempt #1
+        return startOperationAttempt(controller, 1);
     }
 
     /**
-     * Starts the operation attempt, with no preprocessor. When all retries complete, it
-     * will complete the controller.
+     * Starts the operation attempt. When all retries complete, it will complete the
+     * controller.
      *
      * @param controller controller for all operation attempts
      * @param attempt attempt number, typically starting with 1
index 0e4f09b..67f6803 100644 (file)
@@ -33,13 +33,11 @@ import lombok.Getter;
 import org.onap.policy.common.parameters.BeanValidationResult;
 import org.onap.policy.common.parameters.BeanValidator;
 import org.onap.policy.common.parameters.annotations.NotNull;
-import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.actorserviceprovider.ActorService;
 import org.onap.policy.controlloop.actorserviceprovider.Operation;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.TargetType;
 import org.onap.policy.controlloop.actorserviceprovider.Util;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -74,14 +72,10 @@ public class ControlLoopOperationParams {
     private ActorService actorService;
 
     /**
-     * Event for which the operation applies.
-     */
-    // TODO to be removed
-    private ControlLoopEventContext context;
-
-    /**
-     * If {@code null}, this value is extracted from the context.
+     * Request ID with which all actor operations are associated. Used to track requests
+     * across various components/servers.
      */
+    @NotNull
     private UUID requestId;
 
     /**
@@ -106,6 +100,7 @@ public class ControlLoopOperationParams {
      * {@code True} if the preprocessing steps have already been executed, {@code false}
      * otherwise.
      */
+    // TODO remove this once the rules no longer reference it
     private boolean preprocessed;
 
     /**
@@ -194,11 +189,6 @@ public class ControlLoopOperationParams {
      * @return the event's request ID, or {@code null} if no request ID is available
      */
     public UUID getRequestId() {
-        if (requestId == null && context != null && context.getEvent() != null) {
-            // cache the request ID
-            requestId = context.getEvent().getRequestId();
-        }
-
         return requestId;
     }
 
@@ -266,34 +256,6 @@ public class ControlLoopOperationParams {
      * @return the validation result
      */
     public BeanValidationResult validate() {
-        BeanValidationResult result =
-                        new BeanValidator().validateTop(ControlLoopOperationParams.class.getSimpleName(), this);
-
-        // validate that we have a request ID, or that we can get it from the context's
-        // event
-
-        if (context == null) {
-            // no context specified - invoker must provide a request ID then
-            result.validateNotNull("requestId", requestId);
-
-        } else if (requestId == null) {
-            // have a context, but no request ID - check the context's event for the
-            // request ID
-            BeanValidationResult contextResult = new BeanValidationResult("context", context);
-            VirtualControlLoopEvent event = context.getEvent();
-            contextResult.validateNotNull("event", event);
-
-            if (event != null) {
-                // cache the request id for later use
-                BeanValidationResult eventResult = new BeanValidationResult("event", event);
-                eventResult.validateNotNull("requestId", event.getRequestId());
-
-                contextResult.addResult(eventResult);
-            }
-
-            result.addResult(contextResult);
-        }
-
-        return result;
+        return new BeanValidator().validateTop(ControlLoopOperationParams.class.getSimpleName(), this);
     }
 }
diff --git a/models-interactions/model-actors/actorServiceProvider/src/test/java/org/onap/policy/controlloop/actorserviceprovider/controlloop/ControlLoopEventContextTest.java b/models-interactions/model-actors/actorServiceProvider/src/test/java/org/onap/policy/controlloop/actorserviceprovider/controlloop/ControlLoopEventContextTest.java
deleted file mode 100644 (file)
index 0f44f4f..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.controlloop.actorserviceprovider.controlloop;
-
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.CompletableFuture;
-import org.junit.Before;
-import org.junit.Test;
-import org.onap.policy.controlloop.VirtualControlLoopEvent;
-import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
-import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
-
-public class ControlLoopEventContextTest {
-    private static final String MY_KEY = "def";
-    private static final UUID REQ_ID = UUID.randomUUID();
-    private static final String ITEM_KEY = "obtain-C";
-
-    private Map<String, String> enrichment;
-    private VirtualControlLoopEvent event;
-    private ControlLoopEventContext context;
-
-    /**
-     * Initializes data, including {@link #context}.
-     */
-    @Before
-    public void setUp() {
-        enrichment = Map.of("abc", "one", MY_KEY, "two");
-
-        event = new VirtualControlLoopEvent();
-        event.setRequestId(REQ_ID);
-        event.setAai(enrichment);
-
-        context = new ControlLoopEventContext(event);
-    }
-
-    @Test
-    public void testControlLoopEventContext() {
-        assertSame(event, context.getEvent());
-        assertSame(REQ_ID, context.getRequestId());
-        assertEquals(enrichment, context.getEnrichment());
-
-        // null event
-        assertThatThrownBy(() -> new ControlLoopEventContext(null));
-
-        // no request id, no enrichment data
-        event.setRequestId(null);
-        event.setAai(null);
-        context = new ControlLoopEventContext(event);
-        assertSame(event, context.getEvent());
-        assertNotNull(context.getRequestId());
-        assertEquals(Map.of(), context.getEnrichment());
-    }
-
-    @Test
-    public void testContains_testGetProperty_testSetProperty_testRemoveProperty() {
-        context.setProperty("abc", "a string");
-        context.setProperty(MY_KEY, 100);
-
-        assertTrue(context.contains(MY_KEY));
-        assertFalse(context.contains("ghi"));
-
-        String strValue = context.getProperty("abc");
-        assertEquals("a string", strValue);
-
-        int intValue = context.getProperty(MY_KEY);
-        assertEquals(100, intValue);
-
-        context.removeProperty(MY_KEY);
-        assertFalse(context.contains(MY_KEY));
-    }
-
-    @Test
-    public void testObtain() {
-        final ControlLoopOperationParams params = mock(ControlLoopOperationParams.class);
-
-        // property is already loaded
-        context.setProperty("obtain-A", "value-A");
-        assertNull(context.obtain("obtain-A", params));
-
-        // new property - should retrieve
-        CompletableFuture<OperationOutcome> future = new CompletableFuture<>();
-        when(params.start()).thenReturn(future);
-        assertSame(future, context.obtain("obtain-B", params));
-
-        // repeat - should get the same future, without invoking start() again
-        assertSame(future, context.obtain("obtain-B", params));
-        verify(params).start();
-
-        // arrange for another invoker to start while this one is starting
-        CompletableFuture<OperationOutcome> future2 = new CompletableFuture<>();
-
-        when(params.start()).thenAnswer(args -> {
-
-            ControlLoopOperationParams params2 = mock(ControlLoopOperationParams.class);
-            when(params2.start()).thenReturn(future2);
-
-            assertSame(future2, context.obtain(ITEM_KEY, params2));
-            return future;
-        });
-
-        assertSame(future2, context.obtain(ITEM_KEY, params));
-
-        // should have canceled the interrupted future
-        assertTrue(future.isCancelled());
-
-        // return a new future next time start() is called
-        CompletableFuture<OperationOutcome> future3 = new CompletableFuture<>();
-        when(params.start()).thenReturn(future3);
-
-        // repeat - should get the same future
-        assertSame(future2, context.obtain(ITEM_KEY, params));
-        assertSame(future2, context.obtain(ITEM_KEY, params));
-
-        // future2 should still be active
-        assertFalse(future2.isCancelled());
-
-        // cancel it - now we should get the new future
-        future2.cancel(false);
-        assertSame(future3, context.obtain(ITEM_KEY, params));
-    }
-}
index 453592d..587313a 100644 (file)
@@ -77,10 +77,8 @@ import org.onap.policy.common.endpoints.utils.NetLoggerUtil.EventType;
 import org.onap.policy.common.gson.GsonMessageBodyHandler;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.network.NetworkUtil;
-import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpConfig;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpParams;
@@ -118,8 +116,6 @@ public class HttpOperationTest {
     @Mock
     private Executor executor;
 
-    private VirtualControlLoopEvent event;
-    private ControlLoopEventContext context;
     private ControlLoopOperationParams params;
     private OperationOutcome outcome;
     private AtomicReference<InvocationCallback<Response>> callback;
@@ -184,11 +180,7 @@ public class HttpOperationTest {
         when(response.readEntity(String.class)).thenReturn(TEXT);
         when(response.getStatus()).thenReturn(200);
 
-        event = new VirtualControlLoopEvent();
-        event.setRequestId(REQ_ID);
-
-        context = new ControlLoopEventContext(event);
-        params = ControlLoopOperationParams.builder().actor(ACTOR).operation(OPERATION).context(context).build();
+        params = ControlLoopOperationParams.builder().actor(ACTOR).operation(OPERATION).requestId(REQ_ID).build();
 
         outcome = params.makeOutcome(null);
 
index 5ae804a..af8f1aa 100644 (file)
@@ -30,6 +30,7 @@ import static org.mockito.Mockito.when;
 
 import java.util.Collections;
 import java.util.Map;
+import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import org.junit.Before;
 import org.junit.Test;
@@ -37,11 +38,9 @@ import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.onap.policy.common.endpoints.http.client.HttpClient;
 import org.onap.policy.common.endpoints.http.client.HttpClientFactory;
-import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.actorserviceprovider.Operation;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.Util;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpConfig;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.HttpParams;
@@ -112,10 +111,8 @@ public class HttpOperatorTest {
         assertNotNull(oper2);
         assertNotNull(oper2.getClientFactory());
 
-        VirtualControlLoopEvent event = new VirtualControlLoopEvent();
-        ControlLoopEventContext context = new ControlLoopEventContext(event);
-        ControlLoopOperationParams params =
-                        ControlLoopOperationParams.builder().actor(ACTOR).operation(OPERATION).context(context).build();
+        ControlLoopOperationParams params = ControlLoopOperationParams.builder().actor(ACTOR).operation(OPERATION)
+                        .requestId(UUID.randomUUID()).build();
 
         // configure and start it
         HttpParams params2 = HttpParams.builder().clientName(HTTP_CLIENT).path(PATH).timeoutSec(TIMEOUT).build();
index 455393c..b7a6a1d 100644 (file)
@@ -29,7 +29,6 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import ch.qos.logback.classic.Logger;
@@ -60,7 +59,6 @@ import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
-import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
@@ -71,14 +69,12 @@ import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.test.log.logback.ExtractAppender;
 import org.onap.policy.common.utils.time.PseudoExecutor;
 import org.onap.policy.controlloop.ControlLoopOperation;
-import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.actorserviceprovider.ActorService;
 import org.onap.policy.controlloop.actorserviceprovider.Operation;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.OperationProperties;
 import org.onap.policy.controlloop.actorserviceprovider.OperationResult;
 import org.onap.policy.controlloop.actorserviceprovider.Operator;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.OperatorConfig;
 import org.onap.policy.controlloop.actorserviceprovider.spi.Actor;
@@ -119,8 +115,6 @@ public class OperationPartialTest {
     @Mock
     private Operation guardOperation;
 
-    private VirtualControlLoopEvent event;
-    private ControlLoopEventContext context;
     private PseudoExecutor executor;
     private ControlLoopOperationParams params;
 
@@ -167,14 +161,9 @@ public class OperationPartialTest {
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-
-        event = new VirtualControlLoopEvent();
-        event.setRequestId(REQ_ID);
-
-        context = new ControlLoopEventContext(event);
         executor = new PseudoExecutor();
 
-        params = ControlLoopOperationParams.builder().completeCallback(this::completer).context(context)
+        params = ControlLoopOperationParams.builder().completeCallback(this::completer).requestId(REQ_ID)
                         .executor(executor).actorService(service).actor(ACTOR).operation(OPERATION).timeoutSec(TIMEOUT)
                         .startCallback(this::starter).targetEntity(MY_TARGET_ENTITY).build();
 
@@ -226,14 +215,20 @@ public class OperationPartialTest {
     }
 
     @Test
-    public void testGetProperty_testSetProperty() {
+    public void testGetProperty_testSetProperty_testGetRequiredProperty() {
         oper.setProperty("propertyA", "valueA");
         oper.setProperty("propertyB", "valueB");
         oper.setProperty("propertyC", 20);
+        oper.setProperty("propertyD", "valueD");
 
         assertEquals("valueA", oper.getProperty("propertyA"));
         assertEquals("valueB", oper.getProperty("propertyB"));
         assertEquals(Integer.valueOf(20), oper.getProperty("propertyC"));
+
+        assertEquals("valueD", oper.getRequiredProperty("propertyD", "typeD"));
+
+        assertThatIllegalStateException().isThrownBy(() -> oper.getRequiredProperty("propertyUnknown", "some type"))
+                        .withMessage("missing some type");
     }
 
     @Test
@@ -261,118 +256,6 @@ public class OperationPartialTest {
         assertEquals(MAX_PARALLEL, numEnd);
     }
 
-    /**
-     * Tests startPreprocessor() when the preprocessor returns a failure.
-     */
-    @Test
-    public void testStartPreprocessorFailure() {
-        oper.setPreProc(CompletableFuture.completedFuture(makeFailure()));
-
-        verifyRun("testStartPreprocessorFailure", 1, 0, OperationResult.FAILURE_GUARD);
-    }
-
-    /**
-     * Tests startPreprocessor() when the preprocessor throws an exception.
-     */
-    @Test
-    public void testStartPreprocessorException() {
-        // arrange for the preprocessor to throw an exception
-        oper.setPreProc(CompletableFuture.failedFuture(new IllegalStateException(EXPECTED_EXCEPTION)));
-
-        verifyRun("testStartPreprocessorException", 1, 0, OperationResult.FAILURE_GUARD);
-    }
-
-    /**
-     * Tests startPreprocessor() when the pipeline is not running.
-     */
-    @Test
-    public void testStartPreprocessorNotRunning() {
-        // arrange for the preprocessor to return success, which will be ignored
-        // oper.setGuard(CompletableFuture.completedFuture(makeSuccess()));
-
-        oper.start().cancel(false);
-        assertTrue(executor.runAll(MAX_REQUESTS));
-
-        assertNull(opstart);
-        assertNull(opend);
-
-        assertEquals(0, numStart);
-        assertEquals(0, oper.getCount());
-        assertEquals(0, numEnd);
-    }
-
-    /**
-     * Tests startPreprocessor() when the preprocessor <b>builder</b> throws an exception.
-     */
-    @Test
-    public void testStartPreprocessorBuilderException() {
-        oper = new MyOper() {
-            @Override
-            protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
-                throw new IllegalStateException(EXPECTED_EXCEPTION);
-            }
-        };
-
-        assertThatIllegalStateException().isThrownBy(() -> oper.start());
-
-        // should be nothing in the queue
-        assertEquals(0, executor.getQueueLength());
-    }
-
-    @Test
-    public void testStartPreprocessorAsync() {
-        assertNull(oper.startPreprocessorAsync());
-    }
-
-    @Test
-    public void testStartGuardAsync() throws Exception {
-        CompletableFuture<OperationOutcome> future = oper.startGuardAsync();
-        assertTrue(future.isDone());
-        assertEquals(OperationResult.SUCCESS, future.get().getResult());
-
-        // verify the parameters that were passed
-        ArgumentCaptor<ControlLoopOperationParams> paramsCaptor =
-                        ArgumentCaptor.forClass(ControlLoopOperationParams.class);
-        verify(guardOperator).buildOperation(paramsCaptor.capture());
-
-        params = paramsCaptor.getValue();
-        assertEquals(OperationPartial.GUARD_ACTOR_NAME, params.getActor());
-        assertEquals(OperationPartial.GUARD_OPERATION_NAME, params.getOperation());
-        assertNull(params.getRetry());
-        assertNull(params.getTimeoutSec());
-
-        Map<String, Object> payload = params.getPayload();
-        assertNotNull(payload);
-
-        assertEquals(oper.makeGuardPayload(), payload);
-    }
-
-    /**
-     * Tests startGuardAsync() when preprocessing is disabled.
-     */
-    @Test
-    public void testStartGuardAsyncDisabled() {
-        params = params.toBuilder().preprocessed(true).build();
-        assertNull(new MyOper().startGuardAsync());
-    }
-
-    @Test
-    public void testMakeGuardPayload() {
-        Map<String, Object> payload = oper.makeGuardPayload();
-        assertSame(REQ_ID, payload.get("requestId"));
-
-        // request id changes, so remove it
-        payload.remove("requestId");
-
-        assertEquals("{actor=my-actor, operation=my-operation, target=my-entity}", payload.toString());
-
-        // repeat, but with closed loop name
-        event.setClosedLoopControlName("my-loop");
-        payload = oper.makeGuardPayload();
-        payload.remove("requestId");
-        assertEquals("{actor=my-actor, operation=my-operation, target=my-entity, clname=my-loop}", payload.toString());
-    }
-
     @Test
     public void testStartOperationAsync() {
         oper.start();
@@ -616,34 +499,6 @@ public class OperationPartialTest {
         assertTrue(oper.isSameOperation(outcome));
     }
 
-    /**
-     * Tests handleFailure() when the outcome is a success.
-     */
-    @Test
-    public void testHandlePreprocessorFailureSuccess() {
-        oper.setPreProc(CompletableFuture.completedFuture(makeSuccess()));
-        verifyRun("testHandlePreprocessorFailureTrue", 1, 1, OperationResult.SUCCESS);
-    }
-
-    /**
-     * Tests handleFailure() when the outcome is <i>not</i> a success.
-     */
-    @Test
-    public void testHandlePreprocessorFailureFailed() throws Exception {
-        oper.setPreProc(CompletableFuture.completedFuture(makeFailure()));
-        verifyRun("testHandlePreprocessorFailureFalse", 1, 0, OperationResult.FAILURE_GUARD);
-    }
-
-    /**
-     * Tests handleFailure() when the outcome is {@code null}.
-     */
-    @Test
-    public void testHandlePreprocessorFailureNull() throws Exception {
-        // arrange to return a null outcome from the preprocessor
-        oper.setPreProc(CompletableFuture.completedFuture(null));
-        verifyRun("testHandlePreprocessorFailureNull", 1, 0, OperationResult.FAILURE_GUARD);
-    }
-
     @Test
     public void testFromException() {
         // arrange to generate an exception when operation runs
@@ -1204,13 +1059,6 @@ public class OperationPartialTest {
         return outcome;
     }
 
-    private OperationOutcome makeFailure() {
-        OperationOutcome outcome = params.makeOutcome(null);
-        outcome.setResult(OperationResult.FAILURE);
-
-        return outcome;
-    }
-
     /**
      * Verifies a run.
      *
@@ -1358,10 +1206,5 @@ public class OperationPartialTest {
              */
             return 0L;
         }
-
-        @Override
-        protected CompletableFuture<OperationOutcome> startPreprocessorAsync() {
-            return (preProc != null ? preProc : super.startPreprocessorAsync());
-        }
     }
 }
index caa8408..b6bd50c 100644 (file)
@@ -49,18 +49,15 @@ import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.onap.policy.common.parameters.BeanValidationResult;
-import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.actorserviceprovider.ActorService;
 import org.onap.policy.controlloop.actorserviceprovider.Operation;
 import org.onap.policy.controlloop.actorserviceprovider.OperationOutcome;
 import org.onap.policy.controlloop.actorserviceprovider.Operator;
-import org.onap.policy.controlloop.actorserviceprovider.controlloop.ControlLoopEventContext;
 import org.onap.policy.controlloop.actorserviceprovider.parameters.ControlLoopOperationParams.ControlLoopOperationParamsBuilder;
 import org.onap.policy.controlloop.actorserviceprovider.spi.Actor;
 
 public class ControlLoopOperationParamsTest {
     private static final String NULL_MSG = "null";
-    private static final String REQUEST_ID_NAME = "requestId";
     private static final String EXPECTED_EXCEPTION = "expected exception";
     private static final String ACTOR = "my-actor";
     private static final String OPERATION = "my-operation";
@@ -68,7 +65,6 @@ public class ControlLoopOperationParamsTest {
     private static final Integer RETRY = 3;
     private static final Integer TIMEOUT = 100;
     private static final UUID REQ_ID = UUID.randomUUID();
-    private static final UUID REQ_ID2 = UUID.randomUUID();
 
     @Mock
     private Actor actor;
@@ -79,12 +75,6 @@ public class ControlLoopOperationParamsTest {
     @Mock
     private Consumer<OperationOutcome> completer;
 
-    @Mock
-    private ControlLoopEventContext context;
-
-    @Mock
-    private VirtualControlLoopEvent event;
-
     @Mock
     private Executor executor;
 
@@ -118,14 +108,10 @@ public class ControlLoopOperationParamsTest {
         when(operator.buildOperation(any())).thenReturn(operation);
         when(operation.start()).thenReturn(operFuture);
 
-        when(event.getRequestId()).thenReturn(REQ_ID);
-
-        when(context.getEvent()).thenReturn(event);
-
         payload = new TreeMap<>();
 
         params = ControlLoopOperationParams.builder().actorService(actorService).completeCallback(completer)
-                        .context(context).executor(executor).actor(ACTOR).operation(OPERATION).payload(payload)
+                        .requestId(REQ_ID).executor(executor).actor(ACTOR).operation(OPERATION).payload(payload)
                         .retry(RETRY).targetEntity(TARGET_ENTITY).timeoutSec(TIMEOUT)
                         .startCallback(starter).preprocessed(true).build();
 
@@ -134,14 +120,14 @@ public class ControlLoopOperationParamsTest {
 
     @Test
     public void testStart() {
-        assertThatIllegalArgumentException().isThrownBy(() -> params.toBuilder().context(null).build().start());
+        assertThatIllegalArgumentException().isThrownBy(() -> params.toBuilder().requestId(null).build().start());
 
         assertSame(operFuture, params.start());
     }
 
     @Test
     public void testBuild() {
-        assertThatIllegalArgumentException().isThrownBy(() -> params.toBuilder().context(null).build().build());
+        assertThatIllegalArgumentException().isThrownBy(() -> params.toBuilder().requestId(null).build().build());
 
         assertSame(operation, params.build());
     }
@@ -149,26 +135,6 @@ public class ControlLoopOperationParamsTest {
     @Test
     public void testGetRequestId() {
         assertSame(REQ_ID, params.getRequestId());
-
-        // when both request ID and event request ID are set - should use request ID
-        // parameter
-        assertSame(REQ_ID2, params.toBuilder().requestId(REQ_ID2).build().getRequestId());
-    }
-
-    /**
-     * Tests getRequestId() when the request ID is not available in the context.
-     */
-    @Test
-    public void testGetRequestIdNotFromContext() {
-        // try with null context
-        assertNull(params.toBuilder().context(null).build().getRequestId());
-
-        // try with null event
-        when(context.getEvent()).thenReturn(null);
-        assertNull(params.getRequestId());
-
-        // set request ID directly
-        assertSame(REQ_ID2, params.toBuilder().requestId(REQ_ID2).build().getRequestId());
     }
 
     @Test
@@ -243,14 +209,12 @@ public class ControlLoopOperationParamsTest {
         testValidate("actorService", NULL_MSG, bldr -> bldr.actorService(null));
         testValidate("executor", NULL_MSG, bldr -> bldr.executor(null));
         testValidate("operation", NULL_MSG, bldr -> bldr.operation(null));
+        testValidate("requestId", NULL_MSG, bldr -> bldr.requestId(null));
 
         // has no target entity
         BeanValidationResult result = params.toBuilder().targetEntity(null).build().validate();
         assertTrue(result.isValid());
 
-        // note: if context is null, then it will ACTUALLY complain about the request ID
-        testValidate(REQUEST_ID_NAME, NULL_MSG, bldr -> bldr.context(null));
-
         // check edge cases
         assertTrue(params.toBuilder().build().validate().isValid());
 
@@ -259,28 +223,8 @@ public class ControlLoopOperationParamsTest {
                         .completeCallback(null).build().validate().isValid());
 
         // test with minimal fields
-        assertTrue(ControlLoopOperationParams.builder().actorService(actorService).context(context).actor(ACTOR)
+        assertTrue(ControlLoopOperationParams.builder().actorService(actorService).requestId(REQ_ID).actor(ACTOR)
                         .operation(OPERATION).targetEntity(TARGET_ENTITY).build().validate().isValid());
-
-        // test when event has no request ID
-        when(event.getRequestId()).thenReturn(null);
-        result = params.validate();
-        assertFalse(result.isValid());
-        assertThat(result.getResult()).contains("event").contains(REQUEST_ID_NAME).contains(NULL_MSG);
-
-        // try when context has no event
-        when(context.getEvent()).thenReturn(null);
-        result = params.validate();
-        assertFalse(result.isValid());
-        assertThat(result.getResult()).contains("event").doesNotContain(REQUEST_ID_NAME).contains(NULL_MSG);
-
-        // has both request ID and context, but no event
-        result = params.toBuilder().requestId(REQ_ID2).build().validate();
-        assertTrue(result.isValid());
-
-        // has request ID, but not context
-        result = params.toBuilder().requestId(REQ_ID2).context(null).build().validate();
-        assertTrue(result.isValid());
     }
 
     private void testValidate(String fieldName, String expected,
@@ -311,11 +255,6 @@ public class ControlLoopOperationParamsTest {
         assertSame(actorService, params.getActorService());
     }
 
-    @Test
-    public void testGetContext() {
-        assertSame(context, params.getContext());
-    }
-
     @Test
     public void testGetExecutor() {
         assertSame(executor, params.getExecutor());