Remove usecases and legacy actor code 43/108743/6
authorJim Hahn <jrh3@att.com>
Wed, 3 Jun 2020 13:26:33 +0000 (09:26 -0400)
committerJim Hahn <jrh3@att.com>
Tue, 14 Jul 2020 14:29:49 +0000 (10:29 -0400)
Made the following changes to remove usescase and legacy actor
code:
- deleted the usecases controller and feature
- deleted code associated with legacy actors, with the exception
  of AaiManager, which is needed by RestControlLoopManager
- moved the contents of the "guard" project into the m2/guard project,
  as that is the only thing that still needs it
  - modified the m2/GuardContext to get the name of its persistence unit
    from the properties so it could be overridden by junit tests
  - used eclipselink constants

Also fixed a bug in the properties for the VFC actor.

Addressed review comment:
- removed usecases from Dockerfile

Issue-ID: POLICY-2558
Change-Id: I677d68c9efed9247c3d55773abdcc736b577a6b4
Signed-off-by: Jim Hahn <jrh3@att.com>
61 files changed:
controlloop/common/controller-frankfurt/pom.xml
controlloop/common/controller-usecases/pom.xml [deleted file]
controlloop/common/controller-usecases/src/main/resources/META-INF/kmodule.xml [deleted file]
controlloop/common/controller-usecases/src/main/resources/usecases.drl [deleted file]
controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesTest.java [deleted file]
controlloop/common/controller-usecases/src/test/resources/META-INF/persistence.xml [deleted file]
controlloop/common/controller-usecases/src/test/resources/config/controlloop-system.properties [deleted file]
controlloop/common/controller-usecases/src/test/resources/config/controlloop.properties.environment [deleted file]
controlloop/common/controller-usecases/src/test/resources/config/usecases-controller.properties [deleted file]
controlloop/common/controller-usecases/src/test/resources/usecases.pom [deleted file]
controlloop/common/eventmanager/pom.xml
controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java [deleted file]
controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager.java [deleted file]
controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/LockCallbackWorkingMemory.java [deleted file]
controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/ophistory/OperationHistoryDataManagerImpl.java
controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/PolicyEngine.java [deleted file]
controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/PolicyEngineListener.java [deleted file]
controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/impl/PolicyEngineJUnitImpl.java [deleted file]
controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/ControlLoopExceptionTest.java
controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManagerTest.java [deleted file]
controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManagerTest.java [deleted file]
controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/LockCallbackWorkingMemoryTest.java [deleted file]
controlloop/common/eventmanager/src/test/java/org/onap/policy/drools/DroolsPolicyEngineTest.java [deleted file]
controlloop/common/feature-controlloop-management/pom.xml
controlloop/common/feature-controlloop-management/src/main/java/org/onap/policy/drools/server/restful/RestControlLoopManager.java
controlloop/common/feature-controlloop-management/src/test/java/org/onap/policy/drools/server/restful/RestControlLoopManagerTest.java
controlloop/common/feature-controlloop-usecases/pom.xml [deleted file]
controlloop/common/feature-controlloop-usecases/src/assembly/assemble_zip.xml [deleted file]
controlloop/common/feature-controlloop-usecases/src/main/feature/config/logback-include-usecases.xml [deleted file]
controlloop/common/feature-controlloop-usecases/src/main/feature/config/usecases-controller.properties [deleted file]
controlloop/common/feature-controlloop-usecases/src/main/java/org/onap/policy/drools/apps/controlloop/feature/usecases/UsecasesFeature.java [deleted file]
controlloop/common/feature-controlloop-usecases/src/main/resources/META-INF/services/org.onap.policy.drools.features.PolicyEngineFeatureApi [deleted file]
controlloop/common/feature-controlloop-usecases/src/test/java/org/onap/policy/drools/apps/controlloop/feature/usecases/UsecasesFeatureTest.java [deleted file]
controlloop/common/guard/pom.xml [deleted file]
controlloop/common/pom.xml
controlloop/common/rules-test/src/main/java/org/onap/policy/controlloop/common/rules/test/Rules.java
controlloop/m2/guard/pom.xml
controlloop/m2/guard/src/main/java/org/onap/policy/guard/CallGuardTask.java [moved from controlloop/common/guard/src/main/java/org/onap/policy/guard/CallGuardTask.java with 100% similarity]
controlloop/m2/guard/src/main/java/org/onap/policy/guard/GuardContext.java
controlloop/m2/guard/src/main/java/org/onap/policy/guard/GuardResult.java [moved from controlloop/common/guard/src/main/java/org/onap/policy/guard/GuardResult.java with 100% similarity]
controlloop/m2/guard/src/main/java/org/onap/policy/guard/PolicyGuardRequest.java [moved from controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardRequest.java with 100% similarity]
controlloop/m2/guard/src/main/java/org/onap/policy/guard/PolicyGuardResponse.java [moved from controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardResponse.java with 100% similarity]
controlloop/m2/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlHelper.java [moved from controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlHelper.java with 100% similarity]
controlloop/m2/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlRequestAttributes.java [moved from controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardXacmlRequestAttributes.java with 100% similarity]
controlloop/m2/guard/src/main/java/org/onap/policy/guard/PolicyGuardYamlToXacml.java [moved from controlloop/common/guard/src/main/java/org/onap/policy/guard/PolicyGuardYamlToXacml.java with 100% similarity]
controlloop/m2/guard/src/main/java/org/onap/policy/guard/Util.java [moved from controlloop/common/guard/src/main/java/org/onap/policy/guard/Util.java with 93% similarity]
controlloop/m2/guard/src/main/resources/META-INF/persistence.xml [moved from controlloop/common/guard/src/main/resources/META-INF/persistence.xml with 100% similarity]
controlloop/m2/guard/src/test/java/org/onap/policy/guard/CallGuardTaskTest.java [moved from controlloop/common/guard/src/test/java/org/onap/policy/guard/CallGuardTaskTest.java with 100% similarity]
controlloop/m2/guard/src/test/java/org/onap/policy/guard/GuardContextTest.java
controlloop/m2/guard/src/test/java/org/onap/policy/guard/GuardResultTest.java [moved from controlloop/common/guard/src/test/java/org/onap/policy/guard/GuardResultTest.java with 100% similarity]
controlloop/m2/guard/src/test/java/org/onap/policy/guard/GuardUtilTest.java [moved from controlloop/common/guard/src/test/java/org/onap/policy/guard/GuardUtilTest.java with 100% similarity]
controlloop/m2/guard/src/test/java/org/onap/policy/guard/PolicyGuardRequestTest.java [moved from controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardRequestTest.java with 100% similarity]
controlloop/m2/guard/src/test/java/org/onap/policy/guard/PolicyGuardResponseTest.java [moved from controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardResponseTest.java with 100% similarity]
controlloop/m2/guard/src/test/java/org/onap/policy/guard/PolicyGuardXacmlHelperTest.java [moved from controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardXacmlHelperTest.java with 100% similarity]
controlloop/m2/guard/src/test/java/org/onap/policy/guard/PolicyGuardXacmlRequestAttributesTest.java [moved from controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardXacmlRequestAttributesTest.java with 100% similarity]
controlloop/m2/guard/src/test/java/org/onap/policy/guard/PolicyGuardYamlToXacmlTest.java [moved from controlloop/common/guard/src/test/java/org/onap/policy/guard/PolicyGuardYamlToXacmlTest.java with 100% similarity]
controlloop/m2/guard/src/test/java/org/onap/policy/guard/SupportTextFileUtils.java [moved from controlloop/common/guard/src/test/java/org/onap/policy/guard/SupportTextFileUtils.java with 100% similarity]
controlloop/m2/guard/src/test/resources/META-INF/persistence.xml [moved from controlloop/common/guard/src/test/resources/META-INF/persistence.xml with 100% similarity]
controlloop/m2/guard/src/test/resources/blacklist_template.xml [moved from controlloop/common/guard/src/test/resources/blacklist_template.xml with 100% similarity]
controlloop/m2/guard/src/test/resources/frequency_limiter_template.xml [moved from controlloop/common/guard/src/test/resources/frequency_limiter_template.xml with 100% similarity]
controlloop/packages/docker-controlloop/src/main/docker/Dockerfile

index a00058d..03938d4 100644 (file)
             <version>${policy.models.version}</version>
             <scope>provided</scope>
         </dependency>
-        <dependency>
-            <groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
-            <artifactId>guard</artifactId>
-            <version>${project.version}</version>
-            <scope>provided</scope>
-        </dependency>
         <dependency>
             <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
             <artifactId>sdc</artifactId>
diff --git a/controlloop/common/controller-usecases/pom.xml b/controlloop/common/controller-usecases/pom.xml
deleted file mode 100644 (file)
index 5ab5d34..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ============LICENSE_START=======================================================
-  ONAP
-  ================================================================================
-  Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved.
-  Modifications Copyright (C) 2019 Nordix Foundation.
-  Modifications Copyright (C) 2019-2020 Bell Canada.
-  ================================================================================
-  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=========================================================
-  -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
-        <artifactId>drools-applications-common</artifactId>
-        <version>1.7.1-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>controller-usecases</artifactId>
-    <packaging>kjar</packaging>
-
-    <name>${project.artifactId}</name>
-    <description>Usecases Experimental Controller</description>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.kie</groupId>
-                <artifactId>kie-maven-plugin</artifactId>
-                <extensions>true</extensions>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
-            <artifactId>events</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
-            <artifactId>appc</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
-            <artifactId>appclcm</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
-            <artifactId>sdnr</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
-            <artifactId>vfc</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
-            <artifactId>sdnc</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
-            <artifactId>so</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
-            <artifactId>aai</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
-            <artifactId>sdc</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
-            <artifactId>cds</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
-            <artifactId>eventmanager</artifactId>
-            <version>${project.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
-            <artifactId>guard</artifactId>
-            <version>${project.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
-            <artifactId>actorServiceProvider</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
-            <artifactId>actor.appc</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
-            <artifactId>actor.appclcm</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
-            <artifactId>actor.sdnr</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
-            <artifactId>actor.so</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
-            <artifactId>actor.vfc</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
-            <artifactId>actor.sdnc</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
-            <artifactId>actor.cds</artifactId>
-            <version>${policy.models.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.models.policy-models-interactions</groupId>
-            <artifactId>model-yaml</artifactId>
-            <version>${policy.models.version}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.drools-pdp</groupId>
-            <artifactId>policy-management</artifactId>
-            <version>${version.policy.drools-pdp}</version>
-            <scope>provided</scope>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
-            <artifactId>rules-test</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.h2database</groupId>
-            <artifactId>h2</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <profiles>
-        <profile>
-            <!--This profile is used to store Eclipse m2e settings only. It has no
-                influence on the Maven build itself. -->
-            <id>only-eclipse</id>
-            <activation>
-                <property>
-                    <name>m2e.version</name>
-                </property>
-            </activation>
-            <build>
-                <pluginManagement>
-                    <plugins>
-                        <plugin>
-                            <groupId>org.eclipse.m2e</groupId>
-                            <artifactId>lifecycle-mapping</artifactId>
-                            <version>1.0.0</version>
-                            <configuration>
-                                <lifecycleMappingMetadata>
-                                    <pluginExecutions>
-                                        <pluginExecution>
-                                            <pluginExecutionFilter>
-                                                <groupId>org.kie</groupId>
-                                                <artifactId>kie-maven-plugin</artifactId>
-                                                <goals>
-                                                    <goal>build</goal>
-                                                </goals>
-                                            </pluginExecutionFilter>
-                                            <action>
-                                                <ignore />
-                                            </action>
-                                        </pluginExecution>
-                                    </pluginExecutions>
-                                </lifecycleMappingMetadata>
-                            </configuration>
-                        </plugin>
-                    </plugins>
-                </pluginManagement>
-            </build>
-        </profile>
-    </profiles>
-</project>
diff --git a/controlloop/common/controller-usecases/src/main/resources/META-INF/kmodule.xml b/controlloop/common/controller-usecases/src/main/resources/META-INF/kmodule.xml
deleted file mode 100644 (file)
index e1a2386..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ============LICENSE_START=======================================================
-  ONAP
-  ================================================================================
-  Copyright (C) 2018-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=========================================================
-  -->
-<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
-    <kbase name="onap.policies.controlloop.operational.common.Drools" default="false" equalsBehavior="equality"/>
-    <kbase name="onap.policies.controlloop.Operational" equalsBehavior="equality"
-           packages="org.onap.policy.controlloop" includes="onap.policies.controlloop.operational.common.Drools">
-        <ksession name="usecases"/>
-    </kbase>
-</kmodule>
diff --git a/controlloop/common/controller-usecases/src/main/resources/usecases.drl b/controlloop/common/controller-usecases/src/main/resources/usecases.drl
deleted file mode 100644 (file)
index 95260fc..0000000
+++ /dev/null
@@ -1,1711 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2018-2020 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2019 Bell Canada.
- * ================================================================================
- * 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;
-
-import org.apache.commons.lang3.tuple.Pair;
-
-import org.onap.ccsdk.cds.controllerblueprints.processing.api.ExecutionServiceInput;
-import org.onap.policy.controlloop.drl.legacy.ControlLoopParams;
-import org.onap.policy.controlloop.CanonicalOnset;
-import org.onap.policy.controlloop.VirtualControlLoopEvent;
-import org.onap.policy.controlloop.VirtualControlLoopNotification;
-import org.onap.policy.controlloop.ControlLoopEventStatus;
-import org.onap.policy.controlloop.ControlLoopException;
-import org.onap.policy.controlloop.ControlLoopNotificationType;
-import org.onap.policy.controlloop.ControlLoopResponse;
-import org.onap.policy.controlloop.policy.PolicyResult;
-import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.controlloop.policy.Policy;
-import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager;
-import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager.NewEventStatus;
-import org.onap.policy.controlloop.eventmanager.ControlLoopOperationManager;
-import org.onap.policy.controlloop.eventmanager.LockCallbackWorkingMemory;
-import org.onap.policy.controlloop.utils.ControlLoopUtils;
-import org.onap.policy.controlloop.actor.so.SoActor;
-import org.onap.policy.controlloop.actor.cds.CdsActor;
-import org.onap.policy.controlloop.actor.cds.CdsActor.CdsActorServiceManager;
-import org.onap.policy.controlloop.actor.cds.constants.CdsActorConstants;
-import org.onap.policy.aai.AaiCqResponse;
-import org.onap.policy.appc.Request;
-import org.onap.policy.appc.Response;
-import org.onap.policy.appc.CommonHeader;
-import org.onap.policy.appclcm.AppcLcmDmaapWrapper;
-import org.onap.policy.cds.CdsResponse;
-import org.onap.policy.cds.client.CdsProcessorGrpcClient;
-import org.onap.policy.cds.properties.CdsServerProperties;
-import org.onap.policy.sdnr.PciRequestWrapper;
-import org.onap.policy.sdnr.PciResponseWrapper;
-import org.onap.policy.sdnr.PciRequest;
-import org.onap.policy.sdnr.PciResponse;
-import org.onap.policy.vfc.VfcRequest;
-import org.onap.policy.vfc.VfcResponse;
-import org.onap.policy.vfc.VfcManager;
-import org.onap.policy.so.SoManager;
-import org.onap.policy.so.SoRequest;
-import org.onap.policy.so.SoResponseWrapper;
-import org.onap.policy.sdnc.SdncRequest;
-import org.onap.policy.sdnc.SdncManager;
-import org.onap.policy.sdnc.SdncResponse;
-import org.onap.policy.drools.core.lock.Lock;
-import org.onap.policy.guard.PolicyGuardRequest;
-import org.onap.policy.guard.PolicyGuardResponse;
-import org.onap.policy.guard.PolicyGuardXacmlRequestAttributes;
-import org.onap.policy.guard.PolicyGuardXacmlHelper;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-
-import org.yaml.snakeyaml.Yaml;
-import org.yaml.snakeyaml.constructor.Constructor;
-
-import org.slf4j.LoggerFactory;
-import org.slf4j.Logger;
-
-import java.time.Instant;
-import java.util.LinkedList;
-import java.util.Iterator;
-
-
-import org.onap.policy.drools.system.PolicyEngineConstants;
-
-/*
- * This object is to provide support for timeouts
- * due to a bug in drools' built-in timers
- */
-declare ControlLoopTimer
-    closedLoopControlName : String
-    requestId : String
-    delay : String
-    expired : boolean
-    //timerType is the type of timer: either "ClosedLoop" or "Operation"
-    timerType : String
-end
-
-/*
-*
-* Called when the ControlLoopParams object has been inserted into working memory from the BRMSGW.
-*
-*/
-rule "INSERT.PARAMS"
-    when
-        $params : ControlLoopParams()
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {} : TOSCA-POLICY=[{}]", $params.getClosedLoopControlName(), $params.getPolicyName() + "."
-        + drools.getRule().getName(), $params.getToscaPolicy());
-end
-
-/*
-*
-* Called when a Tosca Policy is present.
-*
-*/
-rule "NEW.TOSCA.POLICY"
-    when
-        $policy : ToscaPolicy()
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: [{}|{}|{}|{}]: CONTENT: {}", drools.getRule().getName(),
-                $policy.getType(), $policy.getTypeVersion(), $policy.getName(),
-                $policy.getVersion(), $policy);
-
-    ControlLoopParams params = ControlLoopUtils.toControlLoopParams($policy);
-    if (params != null) {
-        insert(params);
-    }
-end
-
-/*
- * Remove Control Loop Parameters.
- */
-rule "REMOVE.PARAMS"
-    when
-        $params : ControlLoopParams( $policyName :  getPolicyName(), $policyVersion : getPolicyVersion() )
-        not ( ToscaPolicy( getName() == $policyName, getVersion() == $policyVersion ) )
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: [{}|{}|{}]", drools.getRule().getName(),
-                $params.getPolicyScope(), $params.getPolicyName(), $params.getPolicyVersion());
-
-    retract($params);
-end
-
-/*
-*
-* This rule responds to DCAE Events where there is no manager yet. Either it is
-* the first ONSET, or a subsequent badly formed Event (i.e. Syntax error, or is-closed-loop-disabled)
-*
-*/
-rule "EVENT"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $event : CanonicalOnset( closedLoopControlName == $clName )
-        not ( ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId() ) )
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-
-    try {
-
-        //
-        // Check the event, because we need it to not be null when
-        // we create the ControlLoopEventManager. The ControlLoopEventManager
-        // will do extra syntax checking as well check if the closed loop is disabled.
-        //
-        if ($event.getRequestId() == null) {
-            VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-            notification.setNotification(ControlLoopNotificationType.REJECTED);
-            notification.setFrom("policy");
-            notification.setMessage("Missing requestId");
-            notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-            notification.setPolicyScope($params.getPolicyScope());
-            notification.setPolicyVersion($params.getPolicyVersion());
-
-            //
-            // Let interested parties know
-            //
-            PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-
-            //
-            // Retract it from memory
-            //
-            retract($event);
-        } else {
-            //
-            // Create an EventManager
-            //
-            ControlLoopEventManager manager = new ControlLoopEventManager($clName, $event.getRequestId());
-            //
-            // Determine if EventManager can actively process the event
-            // (i.e. syntax, is_closed_loop_disabled checks etc.)
-            //
-            VirtualControlLoopNotification notification = manager.activate($params.getToscaPolicy(), $event);
-            notification.setFrom("pdp-0001-controller=controlloop"); // Engine.getInstanceName()
-            notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-            notification.setPolicyScope($params.getPolicyScope());
-            notification.setPolicyVersion($params.getPolicyVersion());
-            //
-            // Are we actively pursuing this event?
-            //
-            if (notification.getNotification() == ControlLoopNotificationType.ACTIVE) {
-                //
-                // Insert Event Manager into memory, this will now kick off processing.
-                //
-                insert(manager);
-                //
-                // Let interested parties know
-                //
-                PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-                //
-                // Setup the Overall Control Loop timer
-                //
-                ControlLoopTimer clTimer = new ControlLoopTimer();
-                clTimer.setTimerType("ClosedLoop");
-                clTimer.setClosedLoopControlName($event.getClosedLoopControlName());
-                clTimer.setRequestId($event.getRequestId().toString());
-                clTimer.setDelay(manager.getControlLoopTimeout(1500) + "s");
-                //
-                // Insert it
-                //
-                insert(clTimer);
-            } else {
-                //
-                // Let interested parties know
-                //
-                PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-                //
-                // Retract it from memory
-                //
-                retract($event);
-            }
-
-            //
-            // Now that the manager is inserted into Drools working memory, we'll wait for
-            // another rule to fire in order to continue processing. This way we can also
-            // then screen for additional ONSET and ABATED events for this RequestId.
-            //
-        }
-    } catch (Exception e) {
-        logger.warn("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName(), e);
-
-        VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-        notification.setNotification(ControlLoopNotificationType.REJECTED);
-        notification.setMessage("Exception occurred: " + e.getMessage());
-        notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-        notification.setPolicyScope($params.getPolicyScope());
-        notification.setPolicyVersion($params.getPolicyVersion());
-        //
-        //
-        //
-        PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-        //
-        // Retract the event
-        //
-        retract($event);
-    }
-end
-
-/*
-*
-* This rule happens when we got a valid ONSET, closed loop is enabled and an Event Manager
-* is now created. We can start processing the yaml specification via the Event Manager.
-*
-*/
-rule "EVENT.MANAGER"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $event : VirtualControlLoopEvent( closedLoopControlName == $clName )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId() )
-        $clTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId().toString(), timerType == "ClosedLoop", !expired )
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {}: event={} manager={} clTimer={}",
-                $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-                $event, $manager, $clTimer);
-
-    try {
-        //
-        // Check which event this is.
-        //
-        ControlLoopEventManager.NewEventStatus eventStatus = $manager.onNewEvent($event);
-        //
-        // Check what kind of event this is
-        //
-        if (eventStatus == NewEventStatus.SUBSEQUENT_ONSET) {
-            //
-            // We don't care about subsequent onsets
-            //
-            logger.info("{}: {}: subsequent onset",
-                        $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-            retract($event);
-            return;
-        }
-        if (eventStatus == NewEventStatus.SYNTAX_ERROR) {
-            //
-            // Ignore any bad syntax events
-            //
-            logger.warn("{}: {}: syntax error",
-                        $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-            retract($event);
-            return;
-        }
-        //
-        // We only want the initial ONSET event in memory,
-        // all the other events need to be retracted to support
-        // cleanup and avoid the other rules being fired for this event.
-        //
-        if (eventStatus != NewEventStatus.FIRST_ONSET) {
-            logger.warn("{}: {}: no first onset",
-                        $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-            retract($event);
-        }
-
-        logger.debug("{}: {}: target={}", $clName,
-                     $params.getPolicyName() + "." + drools.getRule().getName(), $event.getTarget());
-        //
-        // Now start seeing if we need to process this event
-        //
-
-        //
-        // Check if this is a Final Event
-        //
-        VirtualControlLoopNotification notification = $manager.isControlLoopFinal();
-
-
-        if (notification != null) {
-            //
-            // Its final, but are we waiting for abatement?
-            //
-            if ($manager.getNumAbatements() > 0) {
-                logger.info("{}: {}: abatement received for {}.  Closing the control loop",
-                            $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-                            $event.getRequestId());
-                notification.setFrom("policy");
-                notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-                notification.setPolicyScope($params.getPolicyScope());
-                notification.setPolicyVersion($params.getPolicyVersion());
-                //
-                // In this case, we are done
-                //
-                PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-                //
-                // Unlock the target
-                //
-                Lock lock = $manager.unlockCurrentOperation();
-                if(lock != null) {
-                    logger.debug("{}: {}.{}: retracting lock={}", $clName,
-                                 $params.getPolicyName(), drools.getRule().getName(), lock);
-                    retract(lock);
-                }
-                //
-                // Retract everything from memory
-                //
-                logger.info("{}: {}: retracting onset, manager, and timer",
-                            $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-
-                retract($manager.getOnsetEvent());
-
-                // don't retract manager, etc. - a clean-up rule will do that
-
-                //
-                // TODO - what if we get subsequent Events for this RequestId?
-                // By default, it will all start over again. May be confusing for Ruby.
-                // Or, we could track this and then subsequently ignore the events
-                //
-            } else {
-                //
-                // Check whether we need to wait for abatement
-                //
-                if ($manager.getProcessor().getControlLoop().getAbatement() == true && notification.getNotification() == ControlLoopNotificationType.FINAL_SUCCESS) {
-                  logger.info("{}: {}: waiting for abatement ..",
-                              $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-                } else {
-                  logger.info("{}: {}: no abatement expect for {}.  Closing the control loop",
-                              $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-                              $event.getRequestId());
-
-                  notification.setFrom("policy");
-                  notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-                  notification.setPolicyScope($params.getPolicyScope());
-                  notification.setPolicyVersion($params.getPolicyVersion());
-
-                  //
-                  // In this case, we are done
-                  //
-                  PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-                  //
-                  // Unlock the target
-                  //
-                  Lock lock = $manager.unlockCurrentOperation();
-                  if(lock != null) {
-                      logger.debug("{}: {}.{}: retracting lock={}", $clName,
-                                  $params.getPolicyName(), drools.getRule().getName(), lock);
-                      retract(lock);
-                  }
-                  //
-                  // Retract everything from memory
-                  //
-                  logger.info("{}: {}: retracting onset, manager, and timer",
-                              $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-
-                  retract($manager.getOnsetEvent());
-
-                  // don't retract manager, etc. - a clean-up rule will do that
-                }
-            }
-        } else {
-            //
-            // NOT final, so let's ask for the next operation
-            //
-            ControlLoopOperationManager operation = $manager.processControlLoop();
-            if (operation != null) {
-              //
-              // Let's ask for a lock right away
-              //
-              logger.info("{}: {}.{}: requesting lock for operation={}",
-                            $clName, $params.getPolicyName(), drools.getRule().getName(),
-                            operation);
-
-              Pair<Lock,Lock> oldNew = $manager.lockCurrentOperation(
-                        new LockCallbackWorkingMemory($params.getClosedLoopControlName(), drools.getWorkingMemory()));
-              if(oldNew.getLeft() != null) {
-                  logger.debug("{}: {}.{}: retracting lock={}", $clName,
-                              $params.getPolicyName(), drools.getRule().getName(), oldNew.getLeft());
-                  retract(oldNew.getLeft());
-              }
-              if(oldNew.getRight() != null) {
-                  logger.debug("{}: {}.{}: inserting lock={}", $clName,
-                              $params.getPolicyName(), drools.getRule().getName(), oldNew.getRight());
-                  insert(oldNew.getRight());
-              }
-
-              //
-              // insert the operation into memory
-              //
-              insert(operation);
-
-              //
-              // insert operation timeout object
-              //
-              ControlLoopTimer opTimer = new ControlLoopTimer();
-              opTimer.setTimerType("Operation");
-              opTimer.setClosedLoopControlName($event.getClosedLoopControlName());
-              opTimer.setRequestId($event.getRequestId().toString());
-              Integer timeout = operation.getOperationTimeout();
-              opTimer.setDelay(timeout > 0 ? timeout.toString() + "s" : $clTimer.getDelay());
-              insert(opTimer);
-
-            } else {
-              //
-              // Probably waiting for abatement
-              //
-              logger.info("{}: {}: no operation, probably waiting for abatement",
-                          $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-            }
-        }
-    } catch (Exception e) {
-        logger.warn("{}: {}: unexpected",
-                   $clName,
-                   $params.getPolicyName() + "." + drools.getRule().getName(), e);
-
-        VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-        notification.setNotification(ControlLoopNotificationType.FINAL_FAILURE);
-        notification.setMessage(e.getMessage());
-        notification.setFrom("policy");
-        notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-        notification.setPolicyScope($params.getPolicyScope());
-        notification.setPolicyVersion($params.getPolicyVersion());
-
-        PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-
-        retract($event);
-
-        // don't retract manager, etc. - a clean-up rule will do that
-    }
-
-end
-
-/*
-*
-* Lock denied
-*
-*/
-rule "EVENT.MANAGER.OPERATION.LOCK.DENIED"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $event : VirtualControlLoopEvent( closedLoopControlName == $clName )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId() )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
-            onset.getRequestId() == $event.getRequestId(), "None".equalsIgnoreCase(getGuardApprovalStatus()) )
-        $lock : Lock (ownerKey == $event.getRequestId().toString(), isUnavailable())
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {}.{}: event={} manager={} operation={} lock={}",
-            $clName, $params.getPolicyName(), drools.getRule().getName(),
-            $event, $manager, $operation, $lock);
-
-    logger.debug("The target resource {} is already processing", $event.getAai().get($event.getTarget()));
-    VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-    notification.setNotification(ControlLoopNotificationType.REJECTED);
-    notification.setMessage("The target " + $event.getAai().get($event.getTarget()) + " is already locked");
-    notification.setFrom("policy");
-    notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-    notification.setPolicyScope($params.getPolicyScope());
-    notification.setPolicyVersion($params.getPolicyVersion());
-
-    PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-
-    retract($event);
-
-    // don't retract manager, etc. - a clean-up rule will do that
-end
-
-/*
-*
-* Guard Permitted, let's send request to the actor.
-*
-*/
-rule "EVENT.MANAGER.OPERATION.LOCKED.GUARD_PERMITTED"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $event : VirtualControlLoopEvent( closedLoopControlName == $clName )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId() )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
-            onset.getRequestId() == $event.getRequestId(), "Permit".equalsIgnoreCase(getGuardApprovalStatus()) )
-        $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {}: event={} manager={} operation={}",
-                $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-                $event, $manager, $operation);
-
-    Object request = null;
-    boolean caughtException = false;
-
-    try {
-        request = $operation.startOperation($event);
-
-        if (request != null) {
-          logger.debug("{}: {}: starting operation ..",
-                       $clName,
-                       $params.getPolicyName() + "." + drools.getRule().getName());
-          //
-          // Tell interested parties we are performing this Operation
-          //
-          VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-          notification.setNotification(ControlLoopNotificationType.OPERATION);
-          notification.setMessage($operation.getOperationMessage());
-          notification.setHistory($operation.getHistory());
-          notification.setFrom("policy");
-          notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-          notification.setPolicyScope($params.getPolicyScope());
-          notification.setPolicyVersion($params.getPolicyVersion());
-
-          PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-
-          switch ($operation.policy.getActor()){
-
-              case "APPC":
-
-                  if (request instanceof Request) {
-                      PolicyEngineConstants.getManager().deliver("APPC-CL", request);
-                  }
-                  else if (request instanceof AppcLcmDmaapWrapper) {
-                      PolicyEngineConstants.getManager().deliver("APPC-LCM-READ", request);
-                  }
-                  break;
-              case "SO":
-                  // at this point the AAI named query request should have already been made, the response
-                  // recieved and used in the construction of the SO Request which is stored in operationRequest
-
-                  if(request instanceof SoRequest) {
-                      // Call SO. The response will be inserted into memory once it's received
-                      class mySoCallback implements SoManager.SoCallback {
-                          public void onSoResponseWrapper(SoResponseWrapper wrapper) {
-                              drools.getWorkingMemory().insert(wrapper);
-                          }
-                      }
-                      SoActor.sendRequest($event.getRequestId().toString(),
-                          new mySoCallback(),
-                          request,
-                          PolicyEngineConstants.getManager().getEnvironmentProperty("so.url"),
-                          PolicyEngineConstants.getManager().getEnvironmentProperty("so.username"),
-                          PolicyEngineConstants.getManager().getEnvironmentProperty("so.password"));
-                  }
-                  break;
-              case "VFC":
-                  if (request instanceof VfcRequest) {
-                      class myVfcCallback implements VfcManager.VfcCallback {
-
-                          public void onResponse(VfcResponse responseError) {
-                              drools.getWorkingMemory().insert(responseError);
-                          }
-                      };
-                      // Start VFC thread
-                      Thread t = new Thread(new VfcManager(new myVfcCallback(),
-                          (VfcRequest)request,
-                          PolicyEngineConstants.getManager().getEnvironmentProperty("vfc.url"),
-                          PolicyEngineConstants.getManager().getEnvironmentProperty("vfc.username"),
-                          PolicyEngineConstants.getManager().getEnvironmentProperty("vfc.password")));
-                      t.start();
-                  }
-                  break;
-              case "SDNR":
-                  if (request instanceof PciRequestWrapper) {
-                      PolicyEngineConstants.getManager().deliver("SDNR-CL", request);
-                  }
-                  break;
-
-              case "SDNC":
-                  if (request instanceof SdncRequest) {
-                      class mySdncCallback implements SdncManager.SdncCallback {
-                          public void onCallback(SdncResponse response) {
-                              drools.getWorkingMemory().insert(response);
-                          }
-                      }
-                      // Start SDNC thread
-                      Thread t = new Thread(new SdncManager(new mySdncCallback(),
-                          (SdncRequest)request,
-                          PolicyEngineConstants.getManager().getEnvironmentProperty("sdnc.url"),
-                          PolicyEngineConstants.getManager().getEnvironmentProperty("sdnc.username"),
-                          PolicyEngineConstants.getManager().getEnvironmentProperty("sdnc.password")));
-                      t.start();
-                  }
-                  break;
-
-              case "CDS":
-
-                  if(request instanceof ExecutionServiceInput) {
-
-                      // Instantiate cds actor, service manager and grpc properties
-
-                      CdsActor cdsActor = new CdsActor();
-                      CdsActor.CdsActorServiceManager cdsActorServiceManager = cdsActor.new CdsActorServiceManager();
-
-                      CdsServerProperties props = new CdsServerProperties();
-                      props.setHost(PolicyEngineConstants.getManager().getEnvironmentProperty("cds.grpcHost"));
-                      props.setPort(Integer.parseInt(PolicyEngineConstants.getManager().getEnvironmentProperty("cds.grpcPort")));
-                      props.setUsername(PolicyEngineConstants.getManager().getEnvironmentProperty("cds.grpcUsername"));
-                      props.setPassword(PolicyEngineConstants.getManager().getEnvironmentProperty("cds.grpcPassword"));
-                      props.setTimeout(Integer.parseInt(PolicyEngineConstants.getManager().getEnvironmentProperty("cds.grpcTimeout")));
-
-                      // Send cds grpc request
-                      try (CdsProcessorGrpcClient client = new CdsProcessorGrpcClient(cdsActorServiceManager, props)) {
-                          CdsResponse response =
-                                cdsActorServiceManager.sendRequestToCds(client, props, (ExecutionServiceInput) request);
-                          logger.info("CDS response: {}", response);
-                          insert(response);
-                      }
-                  }
-                  break;
-          }
-        } else {
-          //
-          // What happens if its null?
-          //
-            logger.warn("{}: {}: unexpected null operation request",
-                      $clName,
-                      $params.getPolicyName() + "." + drools.getRule().getName());
-            if ("SO".equals($operation.policy.getActor())) {
-                retract($opTimer);
-                retract($operation);
-                modify($manager) {finishOperation($operation)};
-            }
-            else if ("vfc".equalsIgnoreCase($operation.policy.getActor())) {
-                retract($opTimer);
-                retract($operation);
-                modify($manager) {finishOperation($operation)};
-            }
-            else if ("sdnc".equalsIgnoreCase($operation.policy.getActor())) {
-                retract($opTimer);
-                retract($operation);
-                modify($manager) {finishOperation($operation)};
-            }
-        }
-
-    } catch (Exception e) {
-        String msg = e.getMessage();
-        logger.warn("{}: {}: operation={}:  AAI failure: {}",
-                    $clName,
-                    $params.getPolicyName() + "." + drools.getRule().getName(),
-                    $operation, msg, e);
-        $operation.setOperationHasException(msg);
-
-        if(request != null) {
-            //
-            // Create a notification for it ("DB Write - end operation")
-            //
-            VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-            notification.setFrom("policy");
-            notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-            notification.setPolicyScope($params.getPolicyScope());
-            notification.setPolicyVersion($params.getPolicyVersion());
-            notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
-            notification.setMessage($operation.getOperationHistory());
-            notification.setHistory($operation.getHistory());
-
-            PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-        }
-
-        retract($opTimer);
-        retract($operation);
-        caughtException = true;
-    }
-
-    // Having the modify statement in the catch clause doesn't work for whatever reason
-    if (caughtException) {
-        modify($manager) {finishOperation($operation)};
-    }
-end
-
-
-/*
-*
-* We were able to acquire a lock so now let's ask Xacml Guard whether
-* we are allowed to proceed with the request to the actor.
-*
-*/
-rule "EVENT.MANAGER.OPERATION.LOCKED.GUARD_NOT_YET_QUERIED"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $event : VirtualControlLoopEvent( closedLoopControlName == $clName )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId() )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
-            onset.getRequestId() == $event.getRequestId(), "None".equalsIgnoreCase(getGuardApprovalStatus()) )
-        $lock : Lock (ownerKey == $event.getRequestId().toString(), isActive())
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {}: event={} manager={} operation={} lock={}",
-                $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-                $event, $manager, $operation, $lock);
-
-    //
-    // Sending notification that we are about to query Guard ("DB write - start operation")
-    //
-    VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-    notification.setNotification(ControlLoopNotificationType.OPERATION);
-    notification.setMessage("Sending guard query for " + $operation.policy.getActor() + " "
-        + $operation.policy.getRecipe());
-    notification.setHistory($operation.getHistory());
-    notification.setFrom("policy");
-    notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-    notification.setPolicyScope($params.getPolicyScope());
-    notification.setPolicyVersion($params.getPolicyVersion());
-
-    PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-
-    //
-    // Now send Guard Request to XACML Guard. In order to bypass the call to Guard,
-    // just change guardEnabled to false.
-    //
-    // In order to use REST XACML, provide a URL instead of "" as a second argument
-    // to the CallGuardTask() and set the first argument to null
-    // (instead of XacmlPdpEngine).
-    //
-
-    // NOTE: The environment properties uses "guard.disabled" but the boolean is guardEnabled
-    boolean guardEnabled = "false".equalsIgnoreCase(PolicyEngineConstants.getManager().getEnvironmentProperty("guard.disabled"));
-
-    if(guardEnabled){
-
-        Thread t = new Thread(new org.onap.policy.guard.CallGuardTask(
-                                                        drools.getWorkingMemory(),
-                                                        $event.getClosedLoopControlName(),
-                                                        $operation.policy.getActor().toString(),
-                                                        $operation.policy.getRecipe(),
-                                                        $operation.getTargetEntity(),
-                                                        $event.getRequestId().toString(),
-                                                        () -> {
-                                                                 try {
-                                                                     AaiCqResponse resp_cq  = $manager.getCqResponse($event);
-                                                                     if (resp_cq == null){
-                                                                         return null;
-                                                                     } else {
-                                                                         String custId = $operation.policy.getTarget().getModelCustomizationId();
-                                                                         String invId = $operation.policy.getTarget().getModelInvariantId();
-                                                                         String verId = $operation.policy.getTarget().getModelVersionId();
-                                                                         return resp_cq.getVfModuleCount(custId, invId, verId);
-                                                                     }
-                                                                 } catch (Exception e){
-                                                                     logger.warn("{}: {}", $params.getClosedLoopControlName(), drools.getRule().getName(), e);
-                                                                 }
-                                                                 return null;
-                                                        }));
-        t.start();
-    }
-    else{
-        insert(new PolicyGuardResponse("Permit", $event.getRequestId(), $operation.policy.getRecipe()));
-    }
-
-end
-
-//
-// This rule will be triggered when a thread talking to the XACML Guard inserts a
-// guardResponse object into the working memory
-//
-rule "GUARD.RESPONSE"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $event : CanonicalOnset( closedLoopControlName == $clName )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId() )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
-            onset.getRequestId() == $event.getRequestId() )
-        $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
-        $guardResponse : PolicyGuardResponse(requestId == $event.getRequestId(), $operation.policy.recipe == operation)
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {}: event={} manager={} operation={} opTimer={} guardResponse={}",
-                 $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-                 $event, $manager, $operation, $opTimer, $guardResponse);
-
-
-    //we will permit the operation if there was no Guard for it
-    if("Indeterminate".equalsIgnoreCase($guardResponse.getResult())){
-        $guardResponse.setResult("Permit");
-    }
-
-    //
-    // This notification has Guard result in "message". ("DB write - end operation in case of Guard Deny")
-    //
-    VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-    notification.setNotification(ControlLoopNotificationType.OPERATION);
-    notification.setMessage("Guard result for " + $operation.policy.getActor() + " " + $operation.policy.getRecipe()
-        + " is " + $guardResponse.getResult());
-    notification.setHistory($operation.getHistory());
-    notification.setFrom("policy");
-    notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-    notification.setPolicyScope($params.getPolicyScope());
-    notification.setPolicyVersion($params.getPolicyVersion());
-
-    PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-
-    if("Permit".equalsIgnoreCase($guardResponse.getResult())){
-
-        modify($operation){setGuardApprovalStatus($guardResponse.getResult())};
-    }
-    else {
-        //This is the Deny case
-        $operation.startOperation($event);
-        $operation.setOperationHasGuardDeny();
-        retract($opTimer);
-        retract($operation);
-        modify($manager) {finishOperation($operation)};
-    }
-
-    retract($guardResponse);
-
-end
-
-/*
-*
-* This rule responds to APPC Response Events
-*
-* I would have like to be consistent and write the Response like this:
-* $response : Response( CommonHeader.RequestId == $onset.getRequestId() )
-*
-* However, no compile error was given. But a runtime error was given. I think
-* because drools is confused between the classname CommonHeader vs the property CommonHeader.
-*
-*/
-rule "APPC.RESPONSE"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $event : CanonicalOnset( closedLoopControlName == $clName )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId() )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
-            onset.getRequestId() == $event.getRequestId() )
-        $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
-        $response : Response( getCommonHeader().RequestId == $event.getRequestId() )
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-    logger.debug("{}: {}: event={} manager={} operation={} opTimer={} response={}",
-                 $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-                 $event, $manager, $operation, $opTimer, $response);
-    //
-    // Get the result of the operation
-    //
-    PolicyResult policyResult = $operation.onResponse($response);
-    if (policyResult != null) {
-        logger.debug("{}: {}: operation finished - result={}",
-                    $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-                    policyResult);
-        //
-        // This Operation has completed, construct a notification showing our results. (DB write - end operation)
-        //
-        VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-        notification.setFrom("policy");
-        notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-        notification.setPolicyScope($params.getPolicyScope());
-        notification.setPolicyVersion($params.getPolicyVersion());
-        notification.setMessage($operation.getOperationHistory());
-        notification.setHistory($operation.getHistory());
-        if (policyResult.equals(PolicyResult.SUCCESS)) {
-            notification.setNotification(ControlLoopNotificationType.OPERATION_SUCCESS);
-            //
-            // Let interested parties know
-            //
-            PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-        } else {
-            notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
-            //
-            // Let interested parties know
-            //
-            PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-        }
-        //
-        // Ensure the operation is complete
-        //
-        if ($operation.isOperationComplete() == true) {
-            //
-            // It is complete, remove it from memory
-            //
-            retract($operation);
-            //
-            // We must also retract the timer object
-            // NOTE: We could write a Rule to do this
-            //
-            retract($opTimer);
-            //
-            // Complete the operation
-            //
-            modify($manager) {finishOperation($operation)};
-        } else {
-            //
-            // Just doing this will kick off the LOCKED rule again
-            //
-            modify($operation) {};
-        }
-    } else {
-        //
-        // Its not finished yet (i.e. expecting more Response objects)
-        //
-        // Or possibly it is a leftover response that we timed the request out previously
-        //
-    }
-    //
-    // We are going to retract these objects from memory
-    //
-    retract($response);
-end
-
-/*
-*
-* The problem with Responses is that they don't have a controlLoopControlName
-* field in them, so the only way to attach them is via RequestId. If we have multiple
-* control loop .drl's loaded in the same container, we need to be sure the cleanup
-* rules don't remove Responses for other control loops.
-*
-*/
-rule "APPC.RESPONSE.CLEANUP"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $response : Response($id : getCommonHeader().RequestId )
-        not ( CanonicalOnset( requestId == $id ) )
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-    logger.debug("{}: {}: orphan appc response={}",
-                $clName, $params.getPolicyName() + "." + drools.getRule().getName(), $id);
-
-    //
-    // Retract it
-    //
-    retract($response);
-end
-
-/*
-*
-* This rule responds to APPC Response Events using the new LCM interface provided by appc
-*
-*/
-rule "APPC.LCM.RESPONSE"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $event : CanonicalOnset( closedLoopControlName == $clName )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId() )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
-            onset.getRequestId() == $event.getRequestId() )
-        $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
-        $response : AppcLcmDmaapWrapper( getBody().getOutput().getCommonHeader().getRequestId() == $event.getRequestId() )
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-    logger.debug("{}: {}: event={} manager={} operation={} opTimer={} response={}",
-                $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-                $event, $manager, $operation, $operation, $opTimer, $response);
-
-    //
-    // Get the result of the operation
-    //
-    PolicyResult policyResult = $operation.onResponse($response);
-    if (policyResult != null) {
-      logger.debug("{}: {}: operation finished - result={}",
-                  $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-                  policyResult);
-
-      //
-      // This Operation has completed, construct a notification showing our results. (DB write - end operation)
-      //
-      VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-      notification.setFrom("policy");
-      notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-      notification.setPolicyScope($params.getPolicyScope());
-      notification.setPolicyVersion($params.getPolicyVersion());
-      notification.setMessage($operation.getOperationHistory());
-      notification.setHistory($operation.getHistory());
-      if (policyResult.equals(PolicyResult.SUCCESS)) {
-          notification.setNotification(ControlLoopNotificationType.OPERATION_SUCCESS);
-      } else {
-          notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
-      }
-      PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-      //
-      // Ensure the operation is complete
-      //
-      if ($operation.isOperationComplete() == true) {
-          //
-          // It is complete, remove it from memory
-          //
-          retract($operation);
-          //
-          // We must also retract the timer object
-          // NOTE: We could write a Rule to do this
-          //
-          retract($opTimer);
-          //
-          // Complete the operation
-          //
-          modify($manager) {finishOperation($operation)};
-      } else {
-          //
-          // Just doing this will kick off the LOCKED rule again
-          //
-          modify($operation) {};
-      }
-    } else {
-        //
-        // Its not finished yet (i.e. expecting more Response objects)
-        //
-        // Or possibly it is a leftover response that we timed the request out previously
-        //
-    }
-    //
-    // We are going to retract these objects from memory
-    //
-    retract($response);
-end
-
-/*
-*
-* Clean Up any lingering LCM reponses
-*
-*/
-rule "APPC.LCM.RESPONSE.CLEANUP"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $response : AppcLcmDmaapWrapper($id : getBody().getOutput().getCommonHeader().getRequestId() )
-        not ( CanonicalOnset( requestId == $id ) )
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-    logger.debug("{}: {}: orphan appc response={}",
-                $clName, $params.getPolicyName() + "." + drools.getRule().getName(), $id);
-    //
-    // Retract it
-    //
-    retract($response);
-end
-
-/*
-*
-* This rule responds to SO Response Events
-*
-*/
-rule "SO.RESPONSE"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $event : CanonicalOnset( closedLoopControlName == $clName )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId() )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
-            onset.getRequestId() == $event.getRequestId() )
-        $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
-        $response : SoResponseWrapper(requestId.toString() == $event.getRequestId().toString() )
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-    logger.debug("{}: {}: event={} manager={} operation={} opTimer={} response={}",
-                $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-                $event, $manager, $operation, $operation, $opTimer, $response);
-
-    // Get the result of the operation
-    //
-    PolicyResult policyResult = $operation.onResponse($response);
-    if (policyResult != null) {
-        logger.debug("{}: {}: operation finished - result={}",
-                    $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-                    policyResult);
-
-        //
-        // This Operation has completed, construct a notification showing our results
-        //
-        VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-        notification.setFrom("policy");
-        notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-        notification.setPolicyScope($params.getPolicyScope());
-        notification.setPolicyVersion($params.getPolicyVersion());
-        notification.setMessage($operation.getOperationHistory());
-        notification.setHistory($operation.getHistory());
-        if (policyResult.equals(PolicyResult.SUCCESS)) {
-            notification.setNotification(ControlLoopNotificationType.OPERATION_SUCCESS);
-        } else {
-            notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
-
-        }
-        PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-        //
-        // Ensure the operation is complete
-        //
-        if ($operation.isOperationComplete() == true) {
-            //
-            // It is complete, remove it from memory
-            //
-            retract($operation);
-            //
-            // We must also retract the timer object
-            // NOTE: We could write a Rule to do this
-            //
-            retract($opTimer);
-            //
-            // Complete the operation
-            //
-            modify($manager) {finishOperation($operation)};
-        } else {
-            //
-            // Just doing this will kick off the LOCKED rule again
-            //
-            modify($operation) {};
-        }
-    } else {
-        //
-        // Its not finished yet (i.e. expecting more Response objects)
-        //
-        // Or possibly it is a leftover response that we timed the request out previously
-        //
-    }
-    //
-    // We are going to retract these objects from memory
-    //
-    retract($response);
-
-end
-
-/*
-*
-* This rule responds to VFC Response Events
-*
-*/
-rule "VFC.RESPONSE"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $event : CanonicalOnset( closedLoopControlName == $clName )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId() )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
-            onset.getRequestId() == $event.getRequestId() )
-        $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
-        $response : VfcResponse( requestId.toString() == $event.getRequestId().toString() )
-    then
-        Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-        logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-        logger.debug("{}: {}: event={} manager={} operation={} opTimer={} response={}",
-                    $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-                    $event, $manager, $operation, $operation, $opTimer, $response);
-
-        // Get the result of the operation
-        //
-        PolicyResult policyResult = $operation.onResponse($response);
-        if (policyResult != null) {
-            //
-            // This Operation has completed, construct a notification showing our results
-            //
-            VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-            notification.setFrom("policy");
-            notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-            notification.setPolicyScope($params.getPolicyScope());
-            notification.setPolicyVersion($params.getPolicyVersion());
-            notification.setMessage($operation.getOperationHistory());
-            notification.setHistory($operation.getHistory());
-            //
-            // Ensure the operation is complete
-            //
-            if ($operation.isOperationComplete() == true) {
-                //
-                // It is complete, remove it from memory
-                //
-                retract($operation);
-                //
-                // We must also retract the timer object
-                // NOTE: We could write a Rule to do this
-                //
-                retract($opTimer);
-                //
-                // Complete the operation
-                //
-                modify($manager) {finishOperation($operation)};
-            } else {
-                //
-                // Just doing this will kick off the LOCKED rule again
-                //
-                modify($operation) {};
-            }
-        } else {
-            //
-            // Its not finished yet (i.e. expecting more Response objects)
-            //
-            // Or possibly it is a leftover response that we timed the request out previously
-            //
-        }
-        //
-        // We are going to retract these objects from memory
-        //
-        retract($response);
-
-end
-
-/*
-*
-* This rule responds to SDNC Response Events
-*
-*/
-rule "SDNC.RESPONSE"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $event : CanonicalOnset( closedLoopControlName == $clName )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(), requestId == $event.getRequestId() )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(), onset.getRequestId() == $event.getRequestId() )
-        $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
-        $response : SdncResponse( requestId.toString() == $event.getRequestId().toString() )
-    then
-        Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-        logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-        logger.debug("{}: {}: event={} manager={} operation={} opTimer={} response={}",
-                       $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-                       $event, $manager, $operation, $operation, $opTimer, $response);
-
-        // Get the result of the operation
-        //
-        PolicyResult policyResult = $operation.onResponse($response);
-        if (policyResult != null) {
-            //
-            // This Operation has completed, construct a notification showing our results
-            //
-            VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-            notification.setFrom("policy");
-            notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-            notification.setPolicyScope($params.getPolicyScope());
-            notification.setPolicyVersion($params.getPolicyVersion());
-            notification.setMessage($operation.getOperationHistory());
-            notification.setHistory($operation.getHistory());
-            //
-            // Ensure the operation is complete
-            //
-            if ($operation.isOperationComplete()) {
-                //
-                // It is complete, remove it from memory
-                //
-                retract($operation);
-                //
-                // We must also retract the timer object
-                // NOTE: We could write a Rule to do this
-                //
-                retract($opTimer);
-                //
-                // Complete the operation
-                //
-                modify($manager) {finishOperation($operation)};
-            } else {
-                //
-                // Just doing this will kick off the LOCKED rule again
-                //
-                modify($operation) {};
-            }
-        } else {
-            //
-            // Its not finished yet (i.e. expecting more Response objects)
-            //
-            // Or possibly it is a leftover response that we timed the request out previously
-            //
-        }
-        //
-        // We are going to retract these objects from memory
-        //
-        retract($response);
-
-end
-
-
-/**
- * This rule responds to CDS Response Events
- */
-rule "${policyName}.CDS.RESPONSE"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $event : CanonicalOnset( closedLoopControlName == $params.getClosedLoopControlName() )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId() )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
-            onset.getRequestId() == $event.getRequestId() )
-        $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
-        $response : CdsResponse( requestId == $event.getRequestId().toString() )
-
-    then
-
-        Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-        logger.info("{}: {}", $params.getClosedLoopControlName(), drools.getRule().getName());
-        logger.debug("{}: {}: event={} manager={} operation={} opTimer={} response={}",
-                    $params.getClosedLoopControlName(), drools.getRule().getName(),
-                    $event, $manager, $operation, $operation, $opTimer, $response);
-
-        // Get the result of the operation
-        PolicyResult policyResult = $operation.onResponse($response);
-
-        if (policyResult != null) {
-            logger.debug("{}: {}: operation finished - result={}",
-                    $params.getClosedLoopControlName(), drools.getRule().getName(),
-                    policyResult);
-
-            // The operation has completed, construct a notification showing our results
-            VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-            notification.setFrom("policy");
-            notification.setPolicyName(drools.getRule().getName());
-            notification.setPolicyScope($params.getPolicyScope());
-            notification.setPolicyVersion($params.getPolicyVersion());
-            notification.setMessage($operation.getOperationHistory());
-            notification.setHistory($operation.getHistory());
-            notification.setNotification(
-                ($response != null && CdsActorConstants.SUCCESS.equals($response.getStatus()))
-                    ? ControlLoopNotificationType.OPERATION_SUCCESS : ControlLoopNotificationType.OPERATION_FAILURE);
-
-            // Send the notification
-            PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-
-            // Ensure the operation is complete
-            if ($operation.isOperationComplete()) {
-
-                // It is complete, remove it from memory
-                retract($operation);
-
-                // We must also retract the timer object
-                // NOTE: We could write a Rule to do this
-                retract($opTimer);
-
-                // Complete the operation
-                modify($manager) {finishOperation($operation)};
-
-            } else {
-                // Just doing this will kick off the LOCKED rule again
-                modify($operation) {};
-            }
-        } else {
-            // Its not finished yet (i.e. expecting more Response objects)
-            // Or possibly it is a leftover response that we timed the request out previously
-            logger.info(
-                "policyResult is null"
-                    + "\nIt's not finished yet (i.e. expecting more Response objects)"
-                    + "\nOr possibly it is a leftover response that we timed the request out previously");
-        }
-
-        // We are going to retract these objects from memory
-        retract($response);
-
-end
-
-/*
-/*
-*
-* This manages a single timer.
-* Due to a bug in the drools code, the drools timer needed to be split from most of the objects in the when clause
-*
-*/
-rule "TIMER.FIRED"
-    timer (expr: $timeout)
-    when
-        $timer : ControlLoopTimer($timeout : delay, !expired)
-    then
-        Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-        logger.info("This is TIMER.FIRED");
-        modify($timer){setExpired(true)};
-    end
-
-/*
-*
-* This is the timer that manages the timeout for an individual operation.
-*
-*/
-rule "EVENT.MANAGER.OPERATION.TIMEOUT"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $event : VirtualControlLoopEvent( closedLoopControlName == $clName )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId() )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
-            onset.getRequestId() == $event.getRequestId() )
-        $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId().toString(), timerType == "Operation", expired )
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-    logger.debug("{}: {}: event={} manager={} operation={} opTimer={}",
-                $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-                $event, $manager, $operation, $operation, $opTimer);
-
-    //
-    // Tell it its timed out
-    //
-    $operation.setOperationHasTimedOut();
-    //
-    // Create a notification for it ("DB Write - end operation")
-    //
-    VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-    notification.setFrom("policy");
-    notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-    notification.setPolicyScope($params.getPolicyScope());
-    notification.setPolicyVersion($params.getPolicyVersion());
-    notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
-    notification.setMessage($operation.getOperationHistory());
-    notification.setHistory($operation.getHistory());
-    //
-    // Let interested parties know
-    //
-    PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-    //
-    // Get rid of the timer
-    //
-    retract($opTimer);
-    //
-    // Ensure the operation is complete
-    //
-    if ($operation.isOperationComplete() == true) {
-        //
-        // It is complete, remove it from memory
-        //
-        retract($operation);
-        //
-        // Complete the operation
-        //
-        modify($manager) {finishOperation($operation)};
-    } else {
-        //
-        // Just doing this will kick off the LOCKED rule again
-        //
-        modify($operation) {};
-    }
-end
-
-/*
-*
-* This is the timer that manages the overall control loop timeout.
-*
-*/
-rule "EVENT.MANAGER.TIMEOUT"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $event : VirtualControlLoopEvent( closedLoopControlName == $clName )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId() )
-        $clTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId().toString(), timerType == "ClosedLoop", expired )
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-
-    logger.debug("{}: {}: event={}",
-              $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-              $event);
-    //
-    // Tell the Event Manager it has timed out
-    //
-    VirtualControlLoopNotification notification = $manager.setControlLoopTimedOut();
-    if (notification != null) {
-        notification.setFrom("policy");
-        notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-        notification.setPolicyScope($params.getPolicyScope());
-        notification.setPolicyVersion($params.getPolicyVersion());
-        //
-        // Let interested parties know
-        //
-        PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-    }
-    //
-    // Retract the event
-    //
-    retract($event);
-end
-
-/*
-*
-* This rule cleans up the manager and other objects after an event has
-* been retracted.
-*
-*/
-rule "EVENT.MANAGER.CLEANUP"
-    when
-        $manager : ControlLoopEventManager( $clName : getClosedLoopControlName(), $requestId : getRequestId() )
-        $operations : LinkedList()
-                        from collect( ControlLoopOperationManager( onset.closedLoopControlName == $clName,
-                            onset.getRequestId() == $requestId ) )
-        $timers : LinkedList()
-                        from collect( ControlLoopTimer( closedLoopControlName == $clName,
-                            requestId == $requestId.toString() ) )
-        not( VirtualControlLoopEvent( closedLoopControlName == $clName, requestId == $requestId ) )
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {}", $clName, drools.getRule().getName());
-
-    logger.debug("{}: {}: manager={} timers={} operations={}",
-              $clName, drools.getRule().getName(),
-              $manager, $timers.size(), $operations.size());
-
-    //
-    // Retract lock by invoking unlock()
-    //
-    Lock lock = $manager.unlockCurrentOperation();
-    if(lock != null) {
-        retract(lock);
-    }
-
-    //
-    // Retract EVERYTHING
-    //
-    retract($manager);
-
-    for(Object manager: $operations) {
-        retract((ControlLoopOperationManager) manager);
-    }
-    for(Object timer: $timers) {
-        retract((ControlLoopTimer) timer);
-    }
-end
-
-/*
-*
-* This rule will clean up any rogue onsets where there is no
-* ControlLoopParams object corresponding to the onset event.
-*
-*/
-rule "EVENT.CLEANUP"
-    when
-        $event : VirtualControlLoopEvent( $clName: closedLoopControlName )
-        not ( ControlLoopParams( getClosedLoopControlName() == $clName) )
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {}", $clName, drools.getRule().getName());
-    logger.debug("{}: {}: orphan onset event={}",
-                $clName, drools.getRule().getName(), $event);
-
-    retract($event);
-end
-
-/*
-*
-* This rule responds to SDNR Response Events.
-*
-*/
-rule "SDNR.RESPONSE"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $event : CanonicalOnset( closedLoopControlName == $clName )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId() )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(),
-            onset.getRequestId() == $event.getRequestId() )
-        $opTimer : ControlLoopTimer( closedLoopControlName == $event.getClosedLoopControlName(),
-            requestId == $event.getRequestId().toString(), timerType == "Operation", !expired )
-        $response : PciResponseWrapper( getBody().getCommonHeader().getRequestId() == $event.getRequestId() )
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-    logger.debug("{}: {}: event={} manager={} operation={} opTimer={} response={}",
-                $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-                $event, $manager, $operation, $operation, $opTimer, $response);
-
-    //
-    // Get the result of the operation
-    //
-    PolicyResult policyResult = $operation.onResponse($response);
-    if (policyResult != null) {
-      logger.debug("{}: {}: operation finished - result={}",
-                  $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
-                  policyResult);
-
-      //
-      // This Operation has completed, construct a notification showing our results. (DB write - end operation)
-      //
-      VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-      notification.setFrom("policy");
-      notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
-      notification.setPolicyScope($params.getPolicyScope());
-      notification.setPolicyVersion($params.getPolicyVersion());
-      notification.setMessage($operation.getOperationHistory());
-      notification.setHistory($operation.getHistory());
-      if (policyResult.equals(PolicyResult.SUCCESS)) {
-          notification.setNotification(ControlLoopNotificationType.OPERATION_SUCCESS);
-      } else {
-          notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
-      }
-      PolicyEngineConstants.getManager().deliver("POLICY-CL-MGT", notification);
-
-      ControlLoopResponse clResponse = $operation.getControlLoopResponse($response, $event);
-      PolicyEngineConstants.getManager().deliver("DCAE_CL_RSP", clResponse);
-      //
-      // Ensure the operation is complete
-      //
-      if ($operation.isOperationComplete() == true) {
-          //
-          // It is complete, remove it from memory
-          //
-          retract($operation);
-          //
-          // We must also retract the timer object
-          // NOTE: We could write a Rule to do this
-          //
-          retract($opTimer);
-          //
-          // Complete the operation
-          //
-          modify($manager) {finishOperation($operation)};
-      } else {
-          //
-          // Just doing this will kick off the LOCKED rule again
-          //
-          modify($operation) {};
-      }
-    } else {
-        //
-        // Its not finished yet (i.e. expecting more Response objects)
-        //
-        // Or possibly it is a leftover response that we timed the request out previously
-        //
-    }
-    //
-    // We are going to retract these objects from memory
-    //
-    retract($response);
-end
-
-/*
-*
-* Clean Up any lingering SDNR reponses.
-*
-*/
-rule "SDNR.RESPONSE.CLEANUP"
-    when
-        $params : ControlLoopParams( $clName : getClosedLoopControlName() )
-        $response : PciResponseWrapper($id : getBody().getCommonHeader().getRequestId )
-        not ( CanonicalOnset( requestId == $id ) )
-    then
-
-    Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
-    logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-    logger.debug("{}: {}: orphan sdnr response={}",
-                $clName, $params.getPolicyName() + "." + drools.getRule().getName(), $id);
-    //
-    // Retract it
-    //
-    retract($response);
-end
diff --git a/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesTest.java b/controlloop/common/controller-usecases/src/test/java/org/onap/policy/controlloop/UsecasesTest.java
deleted file mode 100644 (file)
index 1250dc8..0000000
+++ /dev/null
@@ -1,120 +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;
-
-import lombok.Getter;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.runner.RunWith;
-import org.onap.policy.controlloop.common.rules.test.BaseRuleTest;
-import org.onap.policy.controlloop.common.rules.test.Listener;
-import org.onap.policy.controlloop.common.rules.test.NamedRunner;
-import org.onap.policy.controlloop.common.rules.test.TestNames;
-import org.onap.policy.drools.utils.PropertyUtil;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-import org.onap.policy.simulators.Util;
-
-/**
- * Tests use case rules. Only a subset of available tests will work with these rules, thus
- * a "FilterRunner" is used to filter out the other test cases.
- *
- * <p/>
- * Note: this only runs tests whose names start with "testV" (e.g., testVcpe(),
- * testVdns()).
- */
-@RunWith(NamedRunner.class)
-@TestNames(prefixes = {"testV"})
-
-public class UsecasesTest extends BaseRuleTest {
-
-    @Getter()
-    protected static final String CONTROLLER_NAME = "usecases";
-
-    /**
-     * Sets up statics.
-     */
-    @BeforeClass
-    public static void setUpBeforeClass() {
-        initStatics(CONTROLLER_NAME);
-
-        rules.configure("src/main/resources");
-        PropertyUtil.setSystemProperties(rules.getPdpdRepo().getSystemProperties("controlloop"));
-        rules.getPdpd().setEnvironment(rules.getPdpdRepo().getEnvironmentProperties("controlloop.properties"));
-
-        rules.start();
-        simulators.start(Util::buildAaiSim, Util::buildSoSim, Util::buildVfcSim, Util::buildGuardSim,
-                        Util::buildSdncSim);
-    }
-
-    /**
-     * Cleans up statics.
-     */
-    @AfterClass
-    public static void tearDownAfterClass() {
-        finishStatics();
-    }
-
-    /**
-     * Sets up.
-     */
-    @Before
-    public void setUp() {
-        init();
-    }
-
-    /**
-     * Tears down.
-     */
-    @After
-    public void tearDown() {
-        finish();
-    }
-
-    @Override
-    protected void waitForLockAndPermit(ToscaPolicy policy, Listener<VirtualControlLoopNotification> policyClMgt) {
-        String policyName = policy.getIdentifier().getName();
-
-        policyClMgt.await(notif -> notif.getNotification() == ControlLoopNotificationType.ACTIVE
-                        && (policyName + ".EVENT").equals(notif.getPolicyName()));
-
-        policyClMgt.await(notif -> notif.getNotification() == ControlLoopNotificationType.OPERATION
-                        && (policyName + ".EVENT.MANAGER.OPERATION.LOCKED.GUARD_NOT_YET_QUERIED")
-                                        .equals(notif.getPolicyName()));
-
-        policyClMgt.await(notif -> notif.getNotification() == ControlLoopNotificationType.OPERATION
-                        && (policyName + ".GUARD.RESPONSE").equals(notif.getPolicyName())
-                        && notif.getMessage().startsWith("Guard result") && notif.getMessage().endsWith("Permit"));
-
-        policyClMgt.await(notif -> notif.getNotification() == ControlLoopNotificationType.OPERATION
-                        && (policyName + ".EVENT.MANAGER.OPERATION.LOCKED.GUARD_PERMITTED")
-                                        .equals(notif.getPolicyName()));
-    }
-
-    @Override
-    protected VirtualControlLoopNotification waitForFinal(ToscaPolicy policy,
-                    Listener<VirtualControlLoopNotification> policyClMgt, ControlLoopNotificationType finalType) {
-
-        return policyClMgt.await(notif -> notif.getNotification() == finalType
-                        && (notif.getPolicyName().contains(policy.getIdentifier().getName() + ".EVENT.MANAGER")));
-    }
-}
diff --git a/controlloop/common/controller-usecases/src/test/resources/META-INF/persistence.xml b/controlloop/common/controller-usecases/src/test/resources/META-INF/persistence.xml
deleted file mode 100644 (file)
index 5589713..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ============LICENSE_START=======================================================
-  drools-applications
-  ================================================================================
-  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=========================================================
-  -->
-<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence persistence_1_0.xsd" version="1.0">
-
-    <!-- In-mem DB for junit -->
-    <persistence-unit name="OperationsHistoryPUTest" transaction-type="RESOURCE_LOCAL">
-        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
-
-        <class>org.onap.policy.guard.OperationsHistory</class>
-
-        <properties>
-            <property name="eclipselink.ddl-generation" value="create-tables" />
-            <property name="eclipselink.logging.level" value="INFO" />
-            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
-            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
-            <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:testdb;DATABASE_TO_UPPER=FALSE" />
-            <property name="javax.persistence.jdbc.user" value="policy" />
-            <property name="javax.persistence.jdbc.password" value="P01icY" />
-            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create" />
-            <property name="javax.persistence.schema-generation.create-source" value="metadata" />
-        </properties>
-    </persistence-unit>
-
-</persistence>
diff --git a/controlloop/common/controller-usecases/src/test/resources/config/controlloop-system.properties b/controlloop/common/controller-usecases/src/test/resources/config/controlloop-system.properties
deleted file mode 100644 (file)
index ff66585..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# ============LICENSE_START=======================================================
-# ONAP
-# ================================================================================
-# Copyright (C) 2019 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=========================================================
-#
-
-OperationsHistoryPU=OperationsHistoryPUTest
\ No newline at end of file
diff --git a/controlloop/common/controller-usecases/src/test/resources/config/controlloop.properties.environment b/controlloop/common/controller-usecases/src/test/resources/config/controlloop.properties.environment
deleted file mode 100644 (file)
index d0b5448..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# ============LICENSE_START=======================================================
-# ONAP
-# ================================================================================
-# Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
-# Modifications Copyright (C) 2019 Bell Canada.
-# ================================================================================
-# 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=========================================================
-#
-
-sql.db.host=
-sql.db.username=
-sql.db.password=
-
-aai.url=http://localhost:6666
-aai.username=AAI
-aai.password=AAI
-
-so.url=http://localhost:6667
-so.username=SO
-so.password=SO
-
-vfc.url=http://localhost:6668/api/nslcm/v1
-vfc.username=VFC
-vfc.password=VFC
-
-pdpx.host=localhost
-pdpx.username=pdpx
-pdpx.password=pdpx
-
-guard.url=http://localhost:6669/policy/pdpx/v1/decision
-guard.jdbc.url=jdbc:mariadb://localhost:3306/operationshistory
-guard.disabled=false
-
-sdnc.url=sdnc
-sdnc.username=sdnc
-sdnc.password=sdnc
-
-cds.grpcHost=localhost
-cds.grpcPort=7878
-cds.grpcUsername=grpc-username
-cds.grpcPassword=grpc-password
-cds.grpcTimeout=10
\ No newline at end of file
diff --git a/controlloop/common/controller-usecases/src/test/resources/config/usecases-controller.properties b/controlloop/common/controller-usecases/src/test/resources/config/usecases-controller.properties
deleted file mode 100644 (file)
index a8d202c..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-#
-# ============LICENSE_START=======================================================
-# ONAP
-# ================================================================================
-# Copyright (C) 2019-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=========================================================
-#
-
-controller.name=usecases
-
-rules.groupId=org.onap.policy.controlloop
-rules.artifactId=usecases
-rules.version=1.0.0
-
-noop.source.topics=DCAE_TOPIC,APPC-CL,APPC-LCM-WRITE,SDNR-CL-RSP,POLICY-CL-MGT,APPC-LCM-READ,SDNR-CL,DCAE_CL_RSP
-
-noop.source.topics.DCAE_TOPIC.events=\
-    org.onap.policy.controlloop.CanonicalOnset,org.onap.policy.controlloop.CanonicalAbated
-noop.source.topics.DCAE_TOPIC.events.org.onap.policy.controlloop.CanonicalOnset.\
-    filter=[?($.closedLoopEventStatus == 'ONSET')]
-noop.source.topics.DCAE_TOPIC.events.org.onap.policy.controlloop.CanonicalAbated.\
-    filter=[?($.closedLoopEventStatus == 'ABATED')]
-noop.source.topics.DCAE_TOPIC.events.custom.gson=org.onap.policy.controlloop.util.Serialization,gson
-
-noop.source.topics.APPC-CL.events=org.onap.policy.appc.Response,org.onap.policy.appc.Request
-noop.source.topics.APPC-CL.events.org.onap.policy.appc.Response.filter=[?($.CommonHeader && $.Status)]
-noop.source.topics.APPC-CL.events.org.onap.policy.appc.Request.filter=[?($.CommonHeader && $.Action)]
-noop.source.topics.APPC-CL.events.custom.gson=org.onap.policy.appc.util.Serialization,gsonPretty
-
-noop.source.topics.APPC-LCM-WRITE.events=org.onap.policy.appclcm.AppcLcmDmaapWrapper
-noop.source.topics.APPC-LCM-WRITE.events.org.onap.policy.appclcm.AppcLcmDmaapWrapper.filter=[?($.type == 'response')]
-noop.source.topics.APPC-LCM-WRITE.events.custom.gson=org.onap.policy.appclcm.util.Serialization,gson
-
-noop.source.topics.SDNR-CL-RSP.events=org.onap.policy.sdnr.PciResponseWrapper
-noop.source.topics.SDNR-CL-RSP.events.org.onap.policy.sdnr.PciResponseWrapper.filter=[?($.type == 'response')]
-noop.source.topics.SDNR-CL-RSP.events.custom.gson=org.onap.policy.sdnr.util.Serialization,gson
-
-noop.source.topics.POLICY-CL-MGT.events=org.onap.policy.controlloop.VirtualControlLoopNotification
-noop.source.topics.POLICY-CL-MGT.events.custom.gson=org.onap.policy.controlloop.util.Serialization,gsonPretty
-
-noop.source.topics.APPC-LCM-READ.events=org.onap.policy.appclcm.AppcLcmDmaapWrapper
-noop.source.topics.APPC-LCM-READ.events.custom.gson=org.onap.policy.appclcm.util.Serialization,gson
-
-noop.source.topics.SDNR-CL.events=org.onap.policy.sdnr.PciRequestWrapper
-noop.source.topics.SDNR-CL.events.custom.gson=org.onap.policy.sdnr.util.Serialization,gson
-
-noop.source.topics.DCAE_CL_RSP.events=org.onap.policy.controlloop.ControlLoopResponse
-noop.source.topics.DCAE_CL_RSP.events.custom.gson=org.onap.policy.controlloop.util.Serialization,gsonPretty
-
-noop.sink.topics=APPC-CL,APPC-LCM-READ,POLICY-CL-MGT,SDNR-CL,DCAE_CL_RSP
-
-noop.sink.topics.APPC-CL.events=org.onap.policy.appc.Request
-noop.sink.topics.APPC-CL.events.custom.gson=org.onap.policy.appc.util.Serialization,gsonPretty
-
-noop.sink.topics.APPC-LCM-READ.events=org.onap.policy.appclcm.AppcLcmDmaapWrapper
-noop.sink.topics.APPC-LCM-READ.events.custom.gson=org.onap.policy.appclcm.util.Serialization,gson
-
-noop.sink.topics.POLICY-CL-MGT.events=org.onap.policy.controlloop.VirtualControlLoopNotification
-noop.sink.topics.POLICY-CL-MGT.events.custom.gson=org.onap.policy.controlloop.util.Serialization,gsonPretty
-
-noop.sink.topics.SDNR-CL.events=org.onap.policy.sdnr.PciRequestWrapper
-noop.sink.topics.SDNR-CL.events.custom.gson=org.onap.policy.sdnr.util.Serialization,gson
-
-noop.sink.topics.DCAE_CL_RSP.events=org.onap.policy.controlloop.ControlLoopResponse
-noop.sink.topics.DCAE_CL_RSP.events.custom.gson=org.onap.policy.controlloop.util.Serialization,gsonPretty
diff --git a/controlloop/common/controller-usecases/src/test/resources/usecases.pom b/controlloop/common/controller-usecases/src/test/resources/usecases.pom
deleted file mode 100644 (file)
index aebbf3e..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ============LICENSE_START=======================================================
-  ONAP
-  ================================================================================
-  Copyright (C) 2019 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=========================================================
-  -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
-    <modelVersion>4.0.0</modelVersion>
-
-    <groupId>org.onap.policy.controlloop</groupId>
-    <artifactId>usecases</artifactId>
-    <version>1.0.0</version>
-</project>
\ No newline at end of file
index f4698bb..911196d 100644 (file)
             <version>${policy.models.version}</version>
             <scope>provided</scope>
         </dependency>
-        <dependency>
-            <groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
-            <artifactId>guard</artifactId>
-            <version>${project.version}</version>
-            <scope>provided</scope>
-        </dependency>
         <dependency>
             <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
             <artifactId>events</artifactId>
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java
deleted file mode 100644 (file)
index 5546a0b..0000000
+++ /dev/null
@@ -1,880 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * controlloop event manager
- * ================================================================================
- * Copyright (C) 2017-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.eventmanager;
-
-import static org.onap.policy.controlloop.ControlLoopTargetType.PNF;
-import static org.onap.policy.controlloop.ControlLoopTargetType.VM;
-import static org.onap.policy.controlloop.ControlLoopTargetType.VNF;
-
-import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Set;
-import java.util.UUID;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.tuple.Pair;
-import org.onap.policy.aai.AaiCqResponse;
-import org.onap.policy.aai.AaiManager;
-import org.onap.policy.aai.util.AaiException;
-import org.onap.policy.controlloop.ControlLoopEventStatus;
-import org.onap.policy.controlloop.ControlLoopException;
-import org.onap.policy.controlloop.ControlLoopNotificationType;
-import org.onap.policy.controlloop.ControlLoopOperation;
-import org.onap.policy.controlloop.VirtualControlLoopEvent;
-import org.onap.policy.controlloop.VirtualControlLoopNotification;
-import org.onap.policy.controlloop.policy.FinalResult;
-import org.onap.policy.controlloop.policy.Policy;
-import org.onap.policy.controlloop.processor.ControlLoopProcessor;
-import org.onap.policy.drools.core.lock.Lock;
-import org.onap.policy.drools.core.lock.LockCallback;
-import org.onap.policy.drools.core.lock.LockImpl;
-import org.onap.policy.drools.core.lock.LockState;
-import org.onap.policy.drools.system.PolicyEngineConstants;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-import org.onap.policy.rest.RestManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ControlLoopEventManager implements Serializable {
-    public static final String PROV_STATUS_ACTIVE = "ACTIVE";
-    private static final String VM_NAME = "VM_NAME";
-    private static final String VNF_NAME = "VNF_NAME";
-    public static final String GENERIC_VNF_VNF_ID = "generic-vnf.vnf-id";
-    public static final String GENERIC_VNF_VNF_NAME = "generic-vnf.vnf-name";
-    public static final String VSERVER_VSERVER_NAME = "vserver.vserver-name";
-    public static final String GENERIC_VNF_IS_CLOSED_LOOP_DISABLED = "generic-vnf.is-closed-loop-disabled";
-    public static final String VSERVER_IS_CLOSED_LOOP_DISABLED = "vserver.is-closed-loop-disabled";
-    private static final String PNF_IS_IN_MAINT = "pnf.in-maint";
-    public static final String GENERIC_VNF_PROV_STATUS = "generic-vnf.prov-status";
-    public static final String VSERVER_PROV_STATUS = "vserver.prov-status";
-    public static final String PNF_ID = "pnf.pnf-id";
-    public static final String PNF_NAME = "pnf.pnf-name";
-
-    public static final String AAI_URL = "aai.url";
-    public static final String AAI_USERNAME_PROPERTY = "aai.username";
-    public static final String AAI_PASS_PROPERTY = "aai.password";
-
-
-    /**
-     * Additional time, in seconds, to add to a "lock" request. This ensures that the lock won't expire right before an
-     * operation completes.
-     */
-    private static final int ADDITIONAL_LOCK_SEC = 60;
-
-    private static final Logger logger = LoggerFactory.getLogger(ControlLoopEventManager.class);
-
-    private static final long serialVersionUID = -1216568161322872641L;
-
-    private static final Set<String> VALID_TARGETS;
-
-    static {
-        VALID_TARGETS = Collections.unmodifiableSet(new HashSet<>(
-                Stream.of(VM_NAME, VNF_NAME, VSERVER_VSERVER_NAME, GENERIC_VNF_VNF_ID, GENERIC_VNF_VNF_NAME, PNF_NAME)
-                        .map(String::toLowerCase).collect(Collectors.toList())));
-    }
-
-    public final String closedLoopControlName;
-    private final UUID requestId;
-
-    private String controlLoopResult;
-    private ControlLoopProcessor processor = null;
-    private VirtualControlLoopEvent onset;
-    private Integer numOnsets = 0;
-    private Integer numAbatements = 0;
-    private VirtualControlLoopEvent abatement;
-    private FinalResult controlLoopTimedOut = null;
-
-    private boolean isActivated = false;
-    private LinkedList<ControlLoopOperation> controlLoopHistory = new LinkedList<>();
-    private ControlLoopOperationManager currentOperation = null;
-    private ControlLoopOperationManager lastOperationManager = null;
-    private transient Lock targetLock = null;
-    private boolean useTargetLock = true;
-
-    /**
-     * Constructs the object.
-     *
-     * @param closedLoopControlName name of the control loop
-     * @param requestId ID of the request with which this manager is associated
-     */
-    public ControlLoopEventManager(String closedLoopControlName, UUID requestId) {
-        this.closedLoopControlName = closedLoopControlName;
-        this.requestId = requestId;
-    }
-
-    public String getClosedLoopControlName() {
-        return closedLoopControlName;
-    }
-
-    public String getControlLoopResult() {
-        return controlLoopResult;
-    }
-
-    public void setControlLoopResult(String controlLoopResult) {
-        this.controlLoopResult = controlLoopResult;
-    }
-
-    public Integer getNumOnsets() {
-        return numOnsets;
-    }
-
-    public void setNumOnsets(Integer numOnsets) {
-        this.numOnsets = numOnsets;
-    }
-
-    public Integer getNumAbatements() {
-        return numAbatements;
-    }
-
-    public void setNumAbatements(Integer numAbatements) {
-        this.numAbatements = numAbatements;
-    }
-
-    public boolean isActivated() {
-        return isActivated;
-    }
-
-    public void setActivated(boolean isActivated) {
-        this.isActivated = isActivated;
-    }
-
-    public boolean useTargetLock() {
-        return useTargetLock();
-    }
-
-    public void setUseTargetLock(boolean useTargetLock) {
-        this.useTargetLock = useTargetLock;
-    }
-
-    public VirtualControlLoopEvent getOnsetEvent() {
-        return this.onset;
-    }
-
-    public VirtualControlLoopEvent getAbatementEvent() {
-        return this.abatement;
-    }
-
-    public ControlLoopProcessor getProcessor() {
-        return this.processor;
-    }
-
-    public UUID getRequestId() {
-        return requestId;
-    }
-
-
-    private VirtualControlLoopNotification rejectNotification(VirtualControlLoopEvent event, String message) {
-        VirtualControlLoopNotification notification = new VirtualControlLoopNotification(event);
-        notification.setNotification(ControlLoopNotificationType.REJECTED);
-        notification.setMessage(message);
-        return notification;
-    }
-
-    /**
-     * Preactivations check for an event.
-     *
-     * @param event the event
-     * @return the VirtualControlLoopNotification
-     */
-    private VirtualControlLoopNotification preActivationChecks(VirtualControlLoopEvent event) {
-        try {
-            //
-            // This method should ONLY be called ONCE
-            //
-            if (this.isActivated) {
-                return rejectNotification(event, "ControlLoopEventManager has already been activated.");
-            }
-
-            //
-            // Syntax check the event
-            //
-            checkEventSyntax(event);
-        } catch (ControlLoopException e) {
-            logger.warn("{}: invalid event syntax: ", this, e);
-            return rejectNotification(event, e.getMessage());
-
-        }
-
-        return new VirtualControlLoopNotification(event);
-    }
-
-    /**
-     * Activate a control loop event.
-     *
-     * @param event the event
-     * @return the VirtualControlLoopNotification
-     */
-    public VirtualControlLoopNotification activate(VirtualControlLoopEvent event) {
-        VirtualControlLoopNotification notification = preActivationChecks(event);
-        if (notification.getNotification() == ControlLoopNotificationType.REJECTED) {
-            return notification;
-        }
-
-        return postActivate(event, notification);
-    }
-
-    /**
-     * Activate a control loop event.
-     *
-     * @param yamlSpecification the yaml specification
-     * @param event the event
-     * @return the VirtualControlLoopNotification
-     */
-    public VirtualControlLoopNotification activate(String yamlSpecification, VirtualControlLoopEvent event) {
-        VirtualControlLoopNotification notification = preActivationChecks(event);
-        if (notification.getNotification() == ControlLoopNotificationType.REJECTED) {
-            return notification;
-        }
-
-        if (yamlSpecification == null || yamlSpecification.length() < 1) {
-            return rejectNotification(event, "yaml specification is null or 0 length");
-        }
-
-        String decodedYaml = null;
-        try {
-            decodedYaml = URLDecoder.decode(yamlSpecification, "UTF-8");
-            if (decodedYaml != null && decodedYaml.length() > 0) {
-                yamlSpecification = decodedYaml;
-            }
-        } catch (UnsupportedEncodingException e) {
-            logger.warn("{}: YAML decode in activate by YAML specification and event threw: ", this, e);
-            return rejectNotification(event, e.getMessage());
-        }
-
-        try {
-            //
-            // Parse the YAML specification
-            //
-            this.processor = new ControlLoopProcessor(yamlSpecification);
-        } catch (ControlLoopException e) {
-            logger.error("{}: activate by YAML specification and event threw: ", this, e);
-            return rejectNotification(event, e.getMessage());
-        }
-
-        return postActivate(event, notification);
-    }
-
-    /**
-     * Activate a control loop event.
-     *
-     * @param toscaPolicy the tosca policy
-     * @param event the event
-     * @return the VirtualControlLoopNotification
-     */
-    public VirtualControlLoopNotification activate(ToscaPolicy toscaPolicy, VirtualControlLoopEvent event) {
-        VirtualControlLoopNotification notification = preActivationChecks(event);
-        if (notification.getNotification() == ControlLoopNotificationType.REJECTED) {
-            return notification;
-        }
-
-        try {
-            this.processor = new ControlLoopProcessor(toscaPolicy);
-        } catch (ControlLoopException e) {
-            logger.error("{}: activate from Tosca Policy threw: ", this, e);
-            return rejectNotification(event, e.getMessage());
-        }
-
-        return postActivate(event, notification);
-    }
-
-    private VirtualControlLoopNotification postActivate(
-            VirtualControlLoopEvent event, VirtualControlLoopNotification notification) {
-        //
-        // At this point we are good to go with this event
-        //
-        this.onset = event;
-        this.numOnsets = 1;
-
-        //
-        // Set ourselves as active
-        //
-        this.isActivated = true;
-
-        notification.setNotification(ControlLoopNotificationType.ACTIVE);
-        return notification;
-    }
-
-    /**
-     * Check if the control loop is final.
-     *
-     * @return a VirtualControlLoopNotification if the control loop is final, otherwise <code>null</code> is returned
-     * @throws ControlLoopException if an error occurs
-     */
-    public VirtualControlLoopNotification isControlLoopFinal() throws ControlLoopException {
-        validateFinalControlLoop();
-        //
-        // Ok, start creating the notification
-        //
-        VirtualControlLoopNotification notification = new VirtualControlLoopNotification(this.onset);
-        //
-        // Check if the overall control loop has timed out
-        //
-        if (this.isControlLoopTimedOut()) {
-            //
-            // Yes we have timed out
-            //
-            notification.setNotification(ControlLoopNotificationType.FINAL_FAILURE);
-            notification.setMessage("Control Loop timed out");
-            notification.getHistory().addAll(this.controlLoopHistory);
-            return notification;
-        }
-        //
-        // Check if the current policy is Final
-        //
-        FinalResult result = this.processor.checkIsCurrentPolicyFinal();
-        if (result == null) {
-            //
-            // we are not at a final result
-            //
-            return null;
-        }
-
-        switch (result) {
-            case FINAL_FAILURE_EXCEPTION:
-                notification.setNotification(ControlLoopNotificationType.FINAL_FAILURE);
-                notification.setMessage("Exception in processing closed loop");
-                break;
-            case FINAL_FAILURE:
-            case FINAL_FAILURE_RETRIES:
-            case FINAL_FAILURE_TIMEOUT:
-            case FINAL_FAILURE_GUARD:
-                notification.setNotification(ControlLoopNotificationType.FINAL_FAILURE);
-                break;
-            case FINAL_OPENLOOP:
-                notification.setNotification(ControlLoopNotificationType.FINAL_OPENLOOP);
-                break;
-            case FINAL_SUCCESS:
-                notification.setNotification(ControlLoopNotificationType.FINAL_SUCCESS);
-                break;
-            default:
-                return null;
-        }
-        //
-        // Be sure to add all the history
-        //
-        notification.getHistory().addAll(this.controlLoopHistory);
-        return notification;
-    }
-
-    private void validateFinalControlLoop() throws ControlLoopException {
-        //
-        // Check if they activated us
-        //
-        if (!this.isActivated) {
-            throw new ControlLoopException("ControlLoopEventManager MUST be activated first.");
-        }
-        //
-        // Make sure we are expecting this call.
-        //
-        if (this.onset == null) {
-            throw new ControlLoopException("No onset event for ControlLoopEventManager.");
-        }
-    }
-
-    /**
-     * Process the control loop.
-     *
-     * @return a ControlLoopOperationManager
-     * @throws ControlLoopException if an error occurs
-     */
-    public ControlLoopOperationManager processControlLoop() throws ControlLoopException {
-        validateFinalControlLoop();
-        //
-        // Is there a current operation?
-        //
-        if (this.currentOperation != null) {
-            //
-            // Throw an exception, or simply return the current operation?
-            //
-            throw new ControlLoopException("Already working an Operation, do not call this method.");
-        }
-        //
-        // Ensure we are not FINAL
-        //
-        VirtualControlLoopNotification notification = this.isControlLoopFinal();
-        if (notification != null) {
-            //
-            // This is weird, we require them to call the isControlLoopFinal() method first
-            //
-            // We should really abstract this and avoid throwing an exception, because it really
-            // isn't an exception.
-            //
-            throw new ControlLoopException("Control Loop is in FINAL state, do not call this method.");
-        }
-        //
-        // Not final so get the policy that needs to be worked on.
-        //
-        Policy policy = this.processor.getCurrentPolicy();
-        if (policy == null) {
-            throw new ControlLoopException("ControlLoopEventManager: processor came upon null Policy.");
-        }
-        //
-        // And setup an operation
-        //
-        this.lastOperationManager = this.currentOperation;
-        this.currentOperation = new ControlLoopOperationManager(this.onset, policy, this);
-        //
-        // Return it
-        //
-        return this.currentOperation;
-    }
-
-    /**
-     * Finish an operation.
-     *
-     * @param operation the operation
-     */
-    public void finishOperation(ControlLoopOperationManager operation) throws ControlLoopException {
-        //
-        // Verify we have a current operation
-        //
-        if (this.currentOperation != null) {
-            //
-            // Validate they are finishing the current operation
-            // PLD - this is simply comparing the policy. Do we want to equals the whole object?
-            //
-            if (this.currentOperation.policy.equals(operation.policy)) {
-                logger.debug("Finishing {} result is {}", this.currentOperation.policy.getRecipe(),
-                        this.currentOperation.getOperationResult());
-                //
-                // Save history
-                //
-                this.controlLoopHistory.addAll(this.currentOperation.getHistory());
-                //
-                // Move to the next Policy
-                //
-                this.processor.nextPolicyForResult(this.currentOperation.getOperationResult());
-                //
-                // Just null this out
-                //
-                this.lastOperationManager = this.currentOperation;
-                this.currentOperation = null;
-
-                //
-                // Don't release the lock - it may be re-used by the next operation
-                //
-
-                return;
-            }
-            logger.debug("Cannot finish current operation {} does not match given operation {}",
-                    this.currentOperation.policy, operation.policy);
-            return;
-        }
-        throw new ControlLoopException("No operation to finish.");
-    }
-
-    /**
-     * Obtain a lock for the current operation.
-     *
-     * @param callback call-back to be invoked when the lock state changes
-     * @return a pair containing the old lock and the new lock, either of which may be null
-     * @throws ControlLoopException if an error occurs
-     */
-    public synchronized Pair<Lock, Lock> lockCurrentOperation(LockCallback callback) throws ControlLoopException {
-        //
-        // Sanity check
-        //
-        if (this.currentOperation == null) {
-            throw new ControlLoopException("Do not have a current operation.");
-        }
-
-        //
-        // Release the old lock if it's for a different resource.
-        //
-        Lock oldLock = null;
-        if (this.targetLock != null
-                        && !this.targetLock.getResourceId().equals(this.currentOperation.getTargetEntity())) {
-            logger.debug("{}: different resource - releasing old lock", getClosedLoopControlName());
-            oldLock = this.targetLock;
-            this.targetLock = null;
-        }
-
-        // keep the lock a little longer than the operation, including retries
-        int optimeout = Math.max(1, this.currentOperation.getOperationTimeout());
-        int nattempts = 1 + Math.max(0, this.currentOperation.getMaxRetries());
-        int holdSec = optimeout * nattempts + ADDITIONAL_LOCK_SEC;
-
-        //
-        // Have we acquired it already?
-        //
-        if (this.targetLock != null) {
-            // we have the lock - just extend it
-            this.targetLock.extend(holdSec, callback);
-            return Pair.of(oldLock, null);
-
-        } else if (this.useTargetLock) {
-            this.targetLock = createRealLock(this.currentOperation.getTargetEntity(), this.onset.getRequestId(),
-                            holdSec, callback);
-            return Pair.of(oldLock, this.targetLock);
-
-        } else {
-            // Not using target locks - create a lock w/o actually locking.
-            logger.debug("{}: not using target locking; using pseudo locks", getClosedLoopControlName());
-            this.targetLock = createPseudoLock(this.currentOperation.getTargetEntity(), this.onset.getRequestId(),
-                            holdSec, callback);
-
-            // Note: no need to invoke callback, as the lock is already ACTIVE
-
-            return Pair.of(oldLock, this.targetLock);
-        }
-    }
-
-    /**
-     * Releases the lock for the current operation, deleting it from working memory.
-     *
-     * @return the lock, if the operation was locked, {@code null} otherwise
-     */
-    public synchronized Lock unlockCurrentOperation() {
-        if (this.targetLock == null) {
-            return null;
-        }
-
-        Lock lock = this.targetLock;
-        this.targetLock = null;
-
-        lock.free();
-
-        return lock;
-    }
-
-    public enum NewEventStatus {
-        FIRST_ONSET, SUBSEQUENT_ONSET, FIRST_ABATEMENT, SUBSEQUENT_ABATEMENT, SYNTAX_ERROR;
-    }
-
-    /**
-     * An event onset/abatement.
-     *
-     * @param event the event
-     * @return the status
-     * @throws AaiException if an error occurs retrieving information from A&AI
-     */
-    public NewEventStatus onNewEvent(VirtualControlLoopEvent event) throws AaiException {
-        try {
-            this.checkEventSyntax(event);
-            if (event.getClosedLoopEventStatus() == ControlLoopEventStatus.ONSET) {
-                //
-                // Check if this is our original ONSET
-                //
-                if (event.equals(this.onset)) {
-                    //
-                    // DO NOT retract it
-                    //
-                    return NewEventStatus.FIRST_ONSET;
-                }
-                //
-                // Log that we got an onset
-                //
-                this.numOnsets++;
-                return NewEventStatus.SUBSEQUENT_ONSET;
-            } else if (event.getClosedLoopEventStatus() == ControlLoopEventStatus.ABATED) {
-                //
-                // Have we already got an abatement?
-                //
-                if (this.abatement == null) {
-                    //
-                    // Save this
-                    //
-                    this.abatement = event;
-                    //
-                    // Keep track that we received another
-                    //
-                    this.numAbatements++;
-                    //
-                    //
-                    //
-                    return NewEventStatus.FIRST_ABATEMENT;
-                } else {
-                    //
-                    // Keep track that we received another
-                    //
-                    this.numAbatements++;
-                    //
-                    //
-                    //
-                    return NewEventStatus.SUBSEQUENT_ABATEMENT;
-                }
-            }
-        } catch (ControlLoopException e) {
-            logger.error("{}: onNewEvent threw: ", this, e);
-        }
-        return NewEventStatus.SYNTAX_ERROR;
-    }
-
-
-    /**
-     * Commit the abatement to the history database.
-     *
-     * @param message the abatement message
-     * @param outcome the abatement outcome
-     */
-    public void commitAbatement(String message, String outcome) {
-        if (this.lastOperationManager == null) {
-            logger.error("{}: commitAbatement: no operation manager", this);
-            return;
-        }
-        try {
-            this.lastOperationManager.commitAbatement(message, outcome);
-        } catch (NoSuchElementException e) {
-            logger.error("{}: commitAbatement threw an exception ", this, e);
-        }
-    }
-
-
-    /**
-     * Set the control loop time out.
-     *
-     * @return a VirtualControlLoopNotification
-     */
-    public VirtualControlLoopNotification setControlLoopTimedOut() {
-        this.controlLoopTimedOut = FinalResult.FINAL_FAILURE_TIMEOUT;
-        VirtualControlLoopNotification notification = new VirtualControlLoopNotification(this.onset);
-        notification.setNotification(ControlLoopNotificationType.FINAL_FAILURE);
-        notification.setMessage("Control Loop timed out");
-        notification.getHistory().addAll(this.controlLoopHistory);
-        return notification;
-    }
-
-    public boolean isControlLoopTimedOut() {
-        return (this.controlLoopTimedOut == FinalResult.FINAL_FAILURE_TIMEOUT);
-    }
-
-    /**
-     * Get the control loop timeout.
-     *
-     * @param defaultTimeout the default timeout
-     * @return the timeout
-     */
-    public int getControlLoopTimeout(Integer defaultTimeout) {
-        if (this.processor != null && this.processor.getControlLoop() != null) {
-            Integer timeout = this.processor.getControlLoop().getTimeout();
-            if (timeout != null && timeout > 0) {
-                return timeout;
-            }
-        }
-        if (defaultTimeout != null) {
-            return defaultTimeout;
-        }
-        return 0;
-    }
-
-    /**
-     * Check an event syntax.
-     *
-     * @param event the event syntax
-     * @throws ControlLoopException if an error occurs
-     */
-    public void checkEventSyntax(VirtualControlLoopEvent event) throws ControlLoopException {
-        validateStatus(event);
-        if (StringUtils.isBlank(event.getClosedLoopControlName())) {
-            throw new ControlLoopException("No control loop name");
-        }
-        if (event.getRequestId() == null) {
-            throw new ControlLoopException("No request ID");
-        }
-        if (event.getClosedLoopEventStatus() == ControlLoopEventStatus.ABATED) {
-            return;
-        }
-        if (StringUtils.isBlank(event.getTarget())) {
-            throw new ControlLoopException("No target field");
-        } else if (!VALID_TARGETS.contains(event.getTarget().toLowerCase())) {
-            throw new ControlLoopException("target field invalid - expecting VM_NAME or VNF_NAME");
-        }
-        validateAaiData(event);
-    }
-
-    private void validateStatus(VirtualControlLoopEvent event) throws ControlLoopException {
-        if (event.getClosedLoopEventStatus() == null
-                || (event.getClosedLoopEventStatus() != ControlLoopEventStatus.ONSET
-                        && event.getClosedLoopEventStatus() != ControlLoopEventStatus.ABATED)) {
-            throw new ControlLoopException("Invalid value in closedLoopEventStatus");
-        }
-    }
-
-    private void validateAaiData(VirtualControlLoopEvent event) throws ControlLoopException {
-        Map<String, String> eventAai = event.getAai();
-        if (eventAai == null) {
-            throw new ControlLoopException("AAI is null");
-        }
-        switch (event.getTargetType()) {
-            case VM:
-            case VNF:
-                validateAaiVmVnfData(eventAai);
-                return;
-            case PNF:
-                validateAaiPnfData(eventAai);
-                return;
-            default:
-                throw new ControlLoopException("The target type is not supported");
-        }
-    }
-
-    private void validateAaiVmVnfData(Map<String, String> eventAai) throws ControlLoopException {
-        if (eventAai.get(GENERIC_VNF_VNF_ID) == null && eventAai.get(VSERVER_VSERVER_NAME) == null
-                    && eventAai.get(GENERIC_VNF_VNF_NAME) == null) {
-            throw new ControlLoopException(
-                    "generic-vnf.vnf-id or generic-vnf.vnf-name or vserver.vserver-name information missing");
-        }
-    }
-
-    private void validateAaiPnfData(Map<String, String> eventAai) throws ControlLoopException {
-        if (eventAai.get(PNF_NAME) == null) {
-            throw new ControlLoopException("AAI PNF object key pnf-name is missing");
-        }
-    }
-
-    /**
-     * Is closed loop disabled for an event.
-     *
-     * @param event the event
-     * @return <code>true</code> if the control loop is disabled, <code>false</code> otherwise
-     */
-    public static boolean isClosedLoopDisabled(VirtualControlLoopEvent event) {
-        Map<String, String> aai = event.getAai();
-        return (isAaiTrue(aai.get(VSERVER_IS_CLOSED_LOOP_DISABLED))
-                || isAaiTrue(aai.get(GENERIC_VNF_IS_CLOSED_LOOP_DISABLED))
-                || isAaiTrue(aai.get(PNF_IS_IN_MAINT)));
-    }
-
-    /**
-     * Does provisioning status, for an event, have a value other than ACTIVE.
-     *
-     * @param event the event
-     * @return {@code true} if the provisioning status is neither ACTIVE nor {@code null}, {@code false} otherwise
-     */
-    protected static boolean isProvStatusInactive(VirtualControlLoopEvent event) {
-        Map<String, String> aai = event.getAai();
-        return (!PROV_STATUS_ACTIVE.equals(aai.getOrDefault(VSERVER_PROV_STATUS, PROV_STATUS_ACTIVE))
-                || !PROV_STATUS_ACTIVE.equals(aai.getOrDefault(GENERIC_VNF_PROV_STATUS, PROV_STATUS_ACTIVE)));
-    }
-
-    /**
-     * Determines the boolean value represented by the given AAI field value.
-     *
-     * @param aaiValue value to be examined
-     * @return the boolean value represented by the field value, or {@code false} if the value is {@code null}
-     */
-    protected static boolean isAaiTrue(String aaiValue) {
-        return ("true".equalsIgnoreCase(aaiValue) || "T".equalsIgnoreCase(aaiValue) || "yes".equalsIgnoreCase(aaiValue)
-                || "Y".equalsIgnoreCase(aaiValue));
-    }
-
-    @Override
-    public String toString() {
-        return "ControlLoopEventManager [closedLoopControlName=" + closedLoopControlName + ", requestId=" + requestId
-                + ", processor=" + processor + ", onset=" + (onset != null ? onset.getRequestId() : "null")
-                + ", numOnsets=" + numOnsets + ", numAbatements=" + numAbatements + ", isActivated=" + isActivated
-                + ", currentOperation=" + currentOperation + ", targetLock=" + targetLock + "]";
-    }
-
-    /**
-     * This function calls Aai Custom Query and responds with the AaiCqResponse.
-     *
-     * @param event input event
-     * @return AaiCqResponse Response from Aai for custom query. Can not be null.
-     * @throws AaiException if error occurs
-     */
-    public AaiCqResponse getCqResponse(VirtualControlLoopEvent event) throws AaiException {
-
-        Map<String, String> aai = event.getAai();
-
-        if (aai.containsKey(VSERVER_IS_CLOSED_LOOP_DISABLED) || aai.containsKey(GENERIC_VNF_IS_CLOSED_LOOP_DISABLED)) {
-
-            if (isClosedLoopDisabled(event)) {
-                throw new AaiException("is-closed-loop-disabled is set to true on VServer or VNF");
-            }
-
-            if (isProvStatusInactive(event)) {
-                throw new AaiException("prov-status is not ACTIVE on VServer or VNF");
-            }
-        }
-
-        if (!aai.containsKey(VSERVER_VSERVER_NAME)) {
-            throw new AaiException("Vserver name is missing");
-        }
-
-        UUID reqId = event.getRequestId();
-        AaiCqResponse response = null;
-        String vserverId = event.getAai().get(VSERVER_VSERVER_NAME);
-
-        String aaiHostUrl = PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_URL);
-        String aaiUser = PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_USERNAME_PROPERTY);
-        String aaiPassword = PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_PASS_PROPERTY);
-
-        response = new AaiManager(new RestManager()).getCustomQueryResponse(aaiHostUrl, aaiUser, aaiPassword, reqId,
-                vserverId);
-
-        if (response == null) {
-            throw new AaiException("Target vnf-id could not be found");
-        }
-
-        return response;
-
-    }
-
-    /**
-     * Get the specified pnf data from aai.
-     * @param event the event containing pnf id.
-     * @return pnf key value data.
-     * @throws AaiException if an aai error occurs.
-     */
-    public Map<String, String> getPnf(VirtualControlLoopEvent event) throws AaiException {
-        Map<String, String> aai = event.getAai();
-
-        if (!aai.containsKey(PNF_NAME)) {
-            throw new AaiException("Missing unique identifier for PNF AAI object in the event.");
-        }
-
-        UUID reqId = event.getRequestId();
-        String pnfName = event.getAai().get(PNF_NAME);
-        String aaiHostUrl = PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_URL);
-        String aaiUser = PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_USERNAME_PROPERTY);
-        String aaiPassword = PolicyEngineConstants.getManager().getEnvironmentProperty(AAI_PASS_PROPERTY);
-
-        Map<String, String> pnfParams =
-                new AaiManager(new RestManager()).getPnf(aaiHostUrl, aaiUser, aaiPassword, reqId, pnfName);
-
-        if (pnfParams == null) {
-            throw new AaiException("Aai response is undefined");
-        }
-        return pnfParams;
-    }
-
-
-    // the following methods may be overridden by junit tests
-
-    protected Lock createRealLock(String targetEntity, UUID requestId, int holdSec, LockCallback callback) {
-        return PolicyEngineConstants.getManager().createLock(targetEntity, requestId.toString(), holdSec, callback,
-                        false);
-    }
-
-    // note: the "callback" is required, because it will be invoked when lock.extend() is
-    // invoked
-    protected Lock createPseudoLock(String targetEntity, UUID requestId, int holdSec, LockCallback callback) {
-        return new LockImpl(LockState.ACTIVE, targetEntity, requestId.toString(), holdSec, callback);
-    }
-}
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager.java
deleted file mode 100644 (file)
index d16468d..0000000
+++ /dev/null
@@ -1,1207 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * controlloop operation manager
- * ================================================================================
- * Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2019 Huawei Technologies Co., Ltd. All rights reserved.
- * Modifications Copyright (C) 2019 Tech Mahindra
- * Modifications Copyright (C) 2019 Bell Canada.
- * ================================================================================
- * 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.eventmanager;
-
-import java.io.Serializable;
-import java.sql.Timestamp;
-import java.time.Instant;
-import java.util.AbstractMap;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.NoSuchElementException;
-import java.util.Optional;
-import java.util.Properties;
-import javax.persistence.EntityManager;
-import javax.persistence.Persistence;
-import org.apache.commons.lang3.tuple.Pair;
-import org.eclipse.persistence.config.PersistenceUnitProperties;
-import org.onap.aai.domain.yang.GenericVnf;
-import org.onap.aai.domain.yang.ServiceInstance;
-import org.onap.ccsdk.cds.controllerblueprints.processing.api.ExecutionServiceInput;
-import org.onap.policy.aai.AaiCqResponse;
-import org.onap.policy.aai.util.AaiException;
-import org.onap.policy.appc.Response;
-import org.onap.policy.appc.ResponseCode;
-import org.onap.policy.appclcm.AppcLcmDmaapWrapper;
-import org.onap.policy.cds.CdsResponse;
-import org.onap.policy.controlloop.ControlLoopEvent;
-import org.onap.policy.controlloop.ControlLoopException;
-import org.onap.policy.controlloop.ControlLoopOperation;
-import org.onap.policy.controlloop.ControlLoopResponse;
-import org.onap.policy.controlloop.VirtualControlLoopEvent;
-import org.onap.policy.controlloop.actor.appc.AppcActor;
-import org.onap.policy.controlloop.actor.appclcm.AppcLcmActor;
-import org.onap.policy.controlloop.actor.cds.CdsActor;
-import org.onap.policy.controlloop.actor.cds.constants.CdsActorConstants;
-import org.onap.policy.controlloop.actor.sdnc.SdncActor;
-import org.onap.policy.controlloop.actor.sdnr.SdnrActor;
-import org.onap.policy.controlloop.actor.so.SoActor;
-import org.onap.policy.controlloop.actor.vfc.VfcActor;
-import org.onap.policy.controlloop.policy.Policy;
-import org.onap.policy.controlloop.policy.PolicyResult;
-import org.onap.policy.controlloop.policy.TargetType;
-import org.onap.policy.drools.system.PolicyEngineConstants;
-import org.onap.policy.guard.OperationsHistory;
-import org.onap.policy.guard.Util;
-import org.onap.policy.sdnc.SdncResponse;
-import org.onap.policy.sdnr.PciResponseWrapper;
-import org.onap.policy.so.SoResponseWrapper;
-import org.onap.policy.vfc.VfcResponse;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ControlLoopOperationManager implements Serializable {
-    private static final String SUCCESS_MSG = " Success";
-    private static final String FAILED_MSG = " Failed";
-    private static final long serialVersionUID = -3773199283624595410L;
-    private static final Logger logger = LoggerFactory.getLogger(ControlLoopOperationManager.class);
-
-    private static final String VSERVER_VSERVER_NAME = "vserver.vserver-name";
-    private static final String GENERIC_VNF_VNF_NAME = "generic-vnf.vnf-name";
-    private static final String GENERIC_VNF_VNF_ID = "generic-vnf.vnf-id";
-
-    private static final String AAI_SERVICE_INSTANCE_ID_KEY = "service-instance.service-instance-id";
-    private static final String PNF_NAME = "pnf.pnf-name";
-
-    //
-    // These properties are not changeable, but accessible
-    // for Drools Rule statements.
-    //
-    public final ControlLoopEvent onset;
-    public final Policy policy;
-
-    //
-    // Properties used to track the Operation
-    //
-    private int attempts = 0;
-    private Operation currentOperation = null;
-    private LinkedList<Operation> operationHistory = new LinkedList<>();
-    private PolicyResult policyResult = null;
-    private ControlLoopEventManager eventManager = null;
-    private String targetEntity;
-    private String guardApprovalStatus = "NONE";    // "NONE", "PERMIT", "DENY"
-    private AaiCqResponse aaiCqResponse;
-    private transient Object operationRequest;
-
-    /**
-     * Construct an instance.
-     *
-     * @param onset the onset event
-     * @param policy the policy
-     * @param em the event manager
-     * @throws ControlLoopException if an error occurs
-     */
-    public ControlLoopOperationManager(ControlLoopEvent onset, Policy policy,
-        ControlLoopEventManager em) throws ControlLoopException {
-
-        this.onset = onset;
-        this.policy = policy;
-        this.guardApprovalStatus = "NONE";
-        this.eventManager = em;
-
-        try {
-            if (TargetType.VNF.equals(policy.getTarget().getType())
-                || TargetType.VFMODULE.equals(policy.getTarget().getType())) {
-                this.aaiCqResponse =
-                    this.eventManager.getCqResponse((VirtualControlLoopEvent) onset);
-            }
-
-            this.targetEntity = getTarget(policy);
-
-            initActor(policy);
-
-        } catch (AaiException e) {
-            throw new ControlLoopException(e.getMessage(), e);
-        }
-    }
-
-    private void initActor(Policy policy) throws AaiException, ControlLoopException {
-        //
-        // Let's make a sanity check
-        //
-        switch (policy.getActor()) {
-            case "APPC":
-                initAppc(policy);
-                break;
-            case "SO":
-                break;
-            case "SDNR":
-                break;
-            case "VFC":
-                break;
-            case "SDNC":
-                break;
-            case "CDS":
-                break;
-            default:
-                throw new ControlLoopException(
-                    "ControlLoopEventManager: policy has an unknown actor.");
-        }
-    }
-
-    private void initAppc(Policy policy) throws AaiException {
-        if ("ModifyConfig".equalsIgnoreCase(policy.getRecipe())) {
-            /*
-             * The target vnf-id may not be the same as the source vnf-id specified in the yaml, the
-             * target
-             * vnf-id is retrieved by a named query to A&AI.
-             */
-            GenericVnf genvnf = this.aaiCqResponse
-                .getGenericVnfByModelInvariantId(policy.getTarget().getResourceID());
-            if (genvnf == null) {
-                logger.info("Target entity could not be found");
-                throw new AaiException("Target vnf-id could not be found");
-            }
-            this.targetEntity = genvnf.getVnfId();
-
-        }
-    }
-
-    public ControlLoopEventManager getEventManager() {
-        return eventManager;
-    }
-
-    public void setEventManager(ControlLoopEventManager eventManager) {
-        this.eventManager = eventManager;
-    }
-
-    public String getTargetEntity() {
-        return this.targetEntity;
-    }
-
-    @Override
-    public String toString() {
-        return "ControlLoopOperationManager [onset="
-            + (onset != null ? onset.getRequestId() : "null") + ", policy="
-            + (policy != null ? policy.getId() : "null") + ", attempts=" + attempts
-            + ", policyResult=" + policyResult + ", currentOperation=" + currentOperation
-            + ", operationHistory=" + operationHistory + "]";
-    }
-
-    //
-    // Internal class used for tracking
-    //
-    private class Operation implements Serializable {
-        private static final long serialVersionUID = 1L;
-
-        private ControlLoopOperation clOperation = new ControlLoopOperation();
-        private PolicyResult policyResult = null;
-        private int attempt = 0;
-
-        @Override
-        public String toString() {
-            return "Operation [attempt=" + attempt + ", policyResult=" + policyResult
-                + ", operation=" + clOperation + "]";
-        }
-    }
-
-    public Object getOperationRequest() {
-        return operationRequest;
-    }
-
-    public String getGuardApprovalStatus() {
-        return guardApprovalStatus;
-    }
-
-    public void setGuardApprovalStatus(String guardApprovalStatus) {
-        this.guardApprovalStatus = guardApprovalStatus;
-    }
-
-    /**
-     * Get the target for a policy.
-     *
-     * @param policy the policy
-     * @return the target
-     * @throws ControlLoopException if an error occurs
-     */
-    public String getTarget(Policy policy) throws ControlLoopException {
-        if (policy.getTarget() == null) {
-            throw new ControlLoopException("The target is null");
-        }
-
-        if (policy.getTarget().getType() == null) {
-            throw new ControlLoopException("The target type is null");
-        }
-
-        switch (policy.getTarget().getType()) {
-            case PNF:
-                return getPnfTarget();
-            case VM:
-            case VNF:
-                return getVfModuleTarget();
-            case VFMODULE:
-                return getVfModuleTarget();
-            default:
-                throw new ControlLoopException("The target type is not supported");
-        }
-    }
-
-    private String getVfModuleTarget() throws ControlLoopException {
-        VirtualControlLoopEvent virtualOnsetEvent = (VirtualControlLoopEvent) this.onset;
-        if (this.onset.getTarget().equalsIgnoreCase(VSERVER_VSERVER_NAME)) {
-            return virtualOnsetEvent.getAai().get(VSERVER_VSERVER_NAME);
-        } else if (this.onset.getTarget().equalsIgnoreCase(GENERIC_VNF_VNF_ID)) {
-            return virtualOnsetEvent.getAai().get(GENERIC_VNF_VNF_ID);
-        } else if (this.onset.getTarget().equalsIgnoreCase(GENERIC_VNF_VNF_NAME)) {
-            /*
-             * If the onset is enriched with the vnf-id, we don't need an A&AI response
-             */
-            if (virtualOnsetEvent.getAai().containsKey(GENERIC_VNF_VNF_ID)) {
-                return virtualOnsetEvent.getAai().get(GENERIC_VNF_VNF_ID);
-            }
-
-            /*
-             * If the vnf-name was retrieved from the onset then the vnf-id must be obtained from
-             * the event
-             * manager's A&AI GET query
-             */
-            try {
-                String vnfId = this.aaiCqResponse.getDefaultGenericVnf().getVnfId();
-                if (vnfId == null) {
-                    throw new AaiException("No vnf-id found");
-                }
-                return vnfId;
-
-            } catch (AaiException e) {
-                throw new ControlLoopException(e.getMessage(), e);
-            }
-        }
-        throw new ControlLoopException("Target does not match target type");
-    }
-
-    private String getPnfTarget() throws ControlLoopException {
-        VirtualControlLoopEvent virtualOnsetEvent = (VirtualControlLoopEvent) this.onset;
-        if (!PNF_NAME.equalsIgnoreCase(onset.getTarget())) {
-            throw new ControlLoopException(
-                "Target in the onset event is either null or does not match target key expected in AAI section.");
-        }
-        return virtualOnsetEvent.getAai().get(PNF_NAME);
-    }
-
-    /**
-     * Start an operation.
-     *
-     * @param onset the onset event
-     * @return the operation request
-     * @throws ControlLoopException if an error occurs
-     */
-    public Object startOperation(/* VirtualControlLoopEvent */ControlLoopEvent onset)
-        throws ControlLoopException {
-        verifyOperatonCanRun();
-
-        //
-        // Setup
-        //
-        this.policyResult = null;
-        Operation operation = new Operation();
-        operation.attempt = ++this.attempts;
-        operation.clOperation.setActor(this.policy.getActor());
-        operation.clOperation.setOperation(this.policy.getRecipe());
-        operation.clOperation.setTarget(this.policy.getTarget().toString());
-        operation.clOperation.setSubRequestId(Integer.toString(operation.attempt));
-        //
-        // Now determine which actor we need to construct a request for
-        //
-        try {
-            switch (policy.getActor()) {
-                case "APPC":
-                    return startAppcOperation(onset, operation);
-                case "SO":
-                    return startSoOperation(onset, operation);
-                case "VFC":
-                    return startVfcOperation(onset, operation);
-                case "SDNR":
-                    return startSdnrOperation(onset, operation);
-                case "SDNC":
-                    return startSdncOperation(onset, operation);
-                case "CDS":
-                    return startCdsOperation(onset, operation);
-                default:
-                    throw new ControlLoopException(
-                        "invalid actor " + policy.getActor() + " on policy");
-            }
-
-        } catch (AaiException e) {
-            throw new ControlLoopException(e.getMessage(), e);
-        }
-    }
-
-    private Object startAppcOperation(ControlLoopEvent onset, Operation operation) {
-        /*
-         * If the recipe is ModifyConfig, a legacy APPC request is constructed. Otherwise an
-         * LCMRequest is
-         * constructed.
-         */
-        this.currentOperation = operation;
-        if ("ModifyConfig".equalsIgnoreCase(policy.getRecipe())) {
-            this.operationRequest =
-                AppcActor.constructRequest((VirtualControlLoopEvent) onset,
-                    operation.clOperation, this.policy, this.targetEntity);
-        } else {
-            this.operationRequest =
-                AppcLcmActor.constructRequest((VirtualControlLoopEvent) onset,
-                    operation.clOperation, this.policy, this.targetEntity);
-        }
-        //
-        // Save the operation
-        //
-
-        return operationRequest;
-    }
-
-    private Object startSoOperation(ControlLoopEvent onset, Operation operation) {
-        SoActor soActorSp = new SoActor();
-        this.operationRequest = soActorSp.constructRequestCq((VirtualControlLoopEvent) onset,
-            operation.clOperation, this.policy, this.aaiCqResponse);
-
-        // Save the operation
-        this.currentOperation = operation;
-
-        if (this.operationRequest == null) {
-            this.policyResult = PolicyResult.FAILURE;
-        }
-
-        return operationRequest;
-    }
-
-    private Object startVfcOperation(ControlLoopEvent onset, Operation operation) {
-        this.operationRequest =
-            VfcActor.constructRequestCq((VirtualControlLoopEvent) onset,
-                operation.clOperation, this.policy, this.aaiCqResponse);
-        this.currentOperation = operation;
-        if (this.operationRequest == null) {
-            this.policyResult = PolicyResult.FAILURE;
-        }
-        return operationRequest;
-    }
-
-    private Object startSdnrOperation(ControlLoopEvent onset, Operation operation) {
-        /*
-         * If the recipe is ModifyConfig or ModifyConfigANR, a SDNR request is constructed.
-         */
-        this.currentOperation = operation;
-        this.operationRequest = SdnrActor
-            .constructRequest((VirtualControlLoopEvent) onset, operation.clOperation, this.policy);
-        //
-        // Save the operation
-        //
-        if (this.operationRequest == null) {
-            this.policyResult = PolicyResult.FAILURE;
-        }
-
-        return operationRequest;
-    }
-
-    private Object startSdncOperation(ControlLoopEvent onset, Operation operation) {
-        SdncActor provider = new SdncActor();
-        this.operationRequest = provider.constructRequest((VirtualControlLoopEvent) onset,
-            operation.clOperation, this.policy);
-        this.currentOperation = operation;
-        if (this.operationRequest == null) {
-            this.policyResult = PolicyResult.FAILURE;
-        }
-        return operationRequest;
-    }
-
-    private Object startCdsOperation(ControlLoopEvent onset, Operation operation)
-        throws AaiException {
-
-        CdsActor provider = new CdsActor();
-        Optional<ExecutionServiceInput> optionalRequest =
-            provider.constructRequest((VirtualControlLoopEvent) onset, operation.clOperation,
-                this.policy, this.buildAaiParams());
-
-        this.currentOperation = operation;
-        if (optionalRequest.isPresent()) {
-            this.operationRequest = optionalRequest.get();
-        } else {
-            this.operationRequest = null;
-            this.policyResult = PolicyResult.FAILURE;
-        }
-
-        return this.operationRequest;
-    }
-
-    /**
-     * Build AAI parameters for CDS operation.
-     *
-     * @return a map containing vnf id key and value for the vnf to apply the action to.
-     * @throws AaiException if the vnf can not be found.
-     */
-    private Map<String, String> buildAaiParams() throws AaiException {
-
-        Map<String, String> result = new HashMap<>();
-
-        if (TargetType.VNF.equals(policy.getTarget().getType())
-            || TargetType.VFMODULE.equals(policy.getTarget().getType())) {
-
-            ServiceInstance serviceInstance = this.aaiCqResponse.getServiceInstance();
-            if (serviceInstance == null) {
-                logger.info("Target entity service instance could not be found");
-                throw new AaiException("Target service instance could not be found");
-            }
-
-            GenericVnf genericVnf = this.aaiCqResponse
-                .getGenericVnfByModelInvariantId(policy.getTarget().getResourceID());
-            if (genericVnf == null) {
-                logger.info("Target entity generic vnf could not be found");
-                throw new AaiException("Target generic vnf could not be found");
-            }
-
-            result.put(AAI_SERVICE_INSTANCE_ID_KEY, serviceInstance.getServiceInstanceId());
-            result.put(GENERIC_VNF_VNF_ID, genericVnf.getVnfId());
-
-        } else if (TargetType.PNF.equals(policy.getTarget().getType())) {
-            result = this.eventManager.getPnf((VirtualControlLoopEvent) onset);
-        }
-
-        return result;
-
-    }
-
-    /**
-     * Handle a response.
-     *
-     * @param response the response
-     * @return a PolicyResult
-     */
-    public PolicyResult onResponse(Object response) {
-        //
-        // Which response is it?
-        //
-        if (response instanceof Response) {
-            //
-            // Cast APPC response and handle it
-            //
-            return onResponse((Response) response);
-        } else if (response instanceof AppcLcmDmaapWrapper) {
-            //
-            // Cast LCM response and handle it
-            //
-            return onResponse((AppcLcmDmaapWrapper) response);
-        } else if (response instanceof PciResponseWrapper) {
-            //
-            // Cast SDNR response and handle it
-            //
-            return onResponse((PciResponseWrapper) response);
-        } else if (response instanceof SoResponseWrapper) {
-            //
-            // Cast SO response and handle it
-            //
-            return onResponse((SoResponseWrapper) response);
-        } else if (response instanceof VfcResponse) {
-            //
-            // Cast VFC response and handle it
-            //
-            return onResponse((VfcResponse) response);
-        } else if (response instanceof SdncResponse) {
-            //
-            // Cast SDNC response and handle it
-            //
-            return onResponse((SdncResponse) response);
-        } else if (response instanceof CdsResponse) {
-            //
-            // Cast CDS response and handle it
-            //
-            return onResponse((CdsResponse) response);
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * This method handles operation responses from APPC.
-     *
-     * @param appcResponse the APPC response
-     * @return The result of the response handling
-     */
-    private PolicyResult onResponse(Response appcResponse) {
-        //
-        // Determine which subrequestID (ie. attempt)
-        //
-        Integer operationAttempt = getSubRequestId(appcResponse);
-        if (operationAttempt == null) {
-            this.completeOperation(operationAttempt,
-                "Policy was unable to parse APP-C SubRequestID (it was null).",
-                PolicyResult.FAILURE_EXCEPTION);
-            return PolicyResult.FAILURE_EXCEPTION;
-        }
-        //
-        // Sanity check the response message
-        //
-        if (appcResponse.getStatus() == null) {
-            //
-            // We cannot tell what happened if this doesn't exist
-            //
-            this.completeOperation(operationAttempt,
-                "Policy was unable to parse APP-C response status field (it was null).",
-                PolicyResult.FAILURE_EXCEPTION);
-            return PolicyResult.FAILURE_EXCEPTION;
-        }
-        //
-        // Get the Response Code
-        //
-        ResponseCode code = ResponseCode.toResponseCode(appcResponse.getStatus().getCode());
-        if (code == null) {
-            //
-            // We are unaware of this code
-            //
-            this.completeOperation(operationAttempt,
-                "Policy was unable to parse APP-C response status code field.",
-                PolicyResult.FAILURE_EXCEPTION);
-            return PolicyResult.FAILURE_EXCEPTION;
-        }
-
-        return onResponse(appcResponse, operationAttempt, code);
-    }
-
-    private PolicyResult onResponse(Response appcResponse, Integer operationAttempt,
-        ResponseCode code) {
-        //
-        // Ok, let's figure out what APP-C's response is
-        //
-        switch (code) {
-            case ACCEPT:
-                //
-                // This is good, they got our original message and
-                // acknowledged it.
-                //
-                // Is there any need to track this?
-                //
-                return null;
-            case ERROR:
-            case REJECT:
-                //
-                // We'll consider these two codes as exceptions
-                //
-                this.completeOperation(operationAttempt, appcResponse.getStatus().getDescription(),
-                    PolicyResult.FAILURE_EXCEPTION);
-                return getTimeoutResult(PolicyResult.FAILURE_EXCEPTION);
-            case SUCCESS:
-                //
-                //
-                //
-                this.completeOperation(operationAttempt, appcResponse.getStatus().getDescription(),
-                    PolicyResult.SUCCESS);
-                return getTimeoutResult(PolicyResult.SUCCESS);
-            case FAILURE:
-                //
-                //
-                //
-                this.completeOperation(operationAttempt, appcResponse.getStatus().getDescription(),
-                    PolicyResult.FAILURE);
-                return getTimeoutResult(PolicyResult.FAILURE);
-            default:
-                return null;
-        }
-    }
-
-    /**
-     * This method handles operation responses from LCM.
-     *
-     * @param dmaapResponse the LCM response
-     * @return The result of the response handling
-     */
-    private PolicyResult onResponse(AppcLcmDmaapWrapper dmaapResponse) {
-        /*
-         * Parse out the operation attempt using the subrequestid
-         */
-        Integer operationAttempt = AppcLcmActor.parseOperationAttempt(
-            dmaapResponse.getBody().getOutput().getCommonHeader().getSubRequestId());
-        if (operationAttempt == null) {
-            this.completeOperation(operationAttempt,
-                "Policy was unable to parse APP-C SubRequestID (it was null).",
-                PolicyResult.FAILURE_EXCEPTION);
-            return PolicyResult.FAILURE_EXCEPTION;
-        }
-
-        /*
-         * Process the APPCLCM response to see what PolicyResult should be returned
-         */
-        AbstractMap.SimpleEntry<PolicyResult, String> result =
-            AppcLcmActor.processResponse(dmaapResponse);
-
-        if (result.getKey() != null) {
-            this.completeOperation(operationAttempt, result.getValue(), result.getKey());
-            if (PolicyResult.FAILURE_TIMEOUT.equals(this.policyResult)) {
-                return null;
-            }
-            return result.getKey();
-        }
-        return null;
-    }
-
-    /**
-     * This method handles operation responses from SDNR.
-     *
-     * @param dmaapResponse the SDNR response
-     * @return the result of the response handling
-     */
-    private PolicyResult onResponse(PciResponseWrapper dmaapResponse) {
-        /*
-         * Parse out the operation attempt using the subrequestid
-         */
-        Integer operationAttempt = SdnrActor
-            .parseOperationAttempt(dmaapResponse.getBody().getCommonHeader().getSubRequestId());
-        if (operationAttempt == null) {
-            this.completeOperation(operationAttempt,
-                "Policy was unable to parse SDNR SubRequestID.", PolicyResult.FAILURE_EXCEPTION);
-            return PolicyResult.FAILURE_EXCEPTION;
-        }
-
-        /*
-         * Process the SDNR response to see what PolicyResult should be returned
-         */
-        Pair<PolicyResult, String> result =
-            SdnrActor.processResponse(dmaapResponse);
-
-        if (result.getLeft() != null) {
-            this.completeOperation(operationAttempt, result.getRight(), result.getLeft());
-            if (PolicyResult.FAILURE_TIMEOUT.equals(this.policyResult)) {
-                return null;
-            }
-            return result.getLeft();
-        }
-        return null;
-    }
-
-    /**
-     * This method handles operation responses from SO.
-     *
-     * @param msoResponse the SO response
-     * @return The result of the response handling
-     */
-    private PolicyResult onResponse(SoResponseWrapper msoResponse) {
-        switch (msoResponse.getSoResponse().getHttpResponseCode()) {
-            case 200:
-            case 202:
-                //
-                // Consider it as success
-                //
-                this.completeOperation(this.attempts,
-                    msoResponse.getSoResponse().getHttpResponseCode() + SUCCESS_MSG,
-                    PolicyResult.SUCCESS);
-                return getTimeoutResult(PolicyResult.SUCCESS);
-            default:
-                //
-                // Consider it as failure
-                //
-                this.completeOperation(this.attempts,
-                    msoResponse.getSoResponse().getHttpResponseCode() + FAILED_MSG,
-                    PolicyResult.FAILURE);
-                return getTimeoutResult(PolicyResult.FAILURE);
-        }
-    }
-
-    /**
-     * This method handles operation responses from VFC.
-     *
-     * @param vfcResponse the VFC response
-     * @return The result of the response handling
-     */
-    private PolicyResult onResponse(VfcResponse vfcResponse) {
-        if ("finished".equalsIgnoreCase(vfcResponse.getResponseDescriptor().getStatus())) {
-            //
-            // Consider it as success
-            //
-            this.completeOperation(this.attempts, SUCCESS_MSG, PolicyResult.SUCCESS);
-            return getTimeoutResult(PolicyResult.SUCCESS);
-        } else {
-            //
-            // Consider it as failure
-            //
-            this.completeOperation(this.attempts, FAILED_MSG, PolicyResult.FAILURE);
-            if (PolicyResult.FAILURE_TIMEOUT.equals(this.policyResult)) {
-                return null;
-            }
-            // increment operation attempts for retries
-            this.attempts += 1;
-            return PolicyResult.FAILURE;
-        }
-    }
-
-    /**
-     * This method handles operation responses from SDNC.
-     *
-     * @param sdncResponse the VFC response
-     * @return The result of the response handling
-     */
-    private PolicyResult onResponse(SdncResponse sdncResponse) {
-        if ("200".equals(sdncResponse.getResponseOutput().getResponseCode())) {
-            //
-            // Consider it as success
-            //
-            this.completeOperation(this.attempts, SUCCESS_MSG, PolicyResult.SUCCESS);
-            return getTimeoutResult(PolicyResult.SUCCESS);
-        } else {
-            //
-            // Consider it as failure
-            //
-            this.completeOperation(this.attempts, FAILED_MSG, PolicyResult.FAILURE);
-            if (PolicyResult.FAILURE_TIMEOUT.equals(this.policyResult)) {
-                return null;
-            }
-            // increment operation attempts for retries
-            this.attempts += 1;
-            return PolicyResult.FAILURE;
-        }
-    }
-
-    /**
-     * This method handles operation responses from CDS.
-     *
-     * @param response the CDS response
-     * @return The result of the response handling
-     */
-    private PolicyResult onResponse(CdsResponse response) {
-        if (response != null && CdsActorConstants.SUCCESS.equals(response.getStatus())) {
-            //
-            // Consider it as success
-            //
-            this.completeOperation(this.attempts, SUCCESS_MSG, PolicyResult.SUCCESS);
-            return getTimeoutResult(PolicyResult.SUCCESS);
-        } else {
-            //
-            // Consider it as failure
-            //
-            this.completeOperation(this.attempts, FAILED_MSG, PolicyResult.FAILURE);
-            if (PolicyResult.FAILURE_TIMEOUT.equals(this.policyResult)) {
-                return null;
-            }
-            // increment operation attempts for retries
-            this.attempts += 1;
-            return PolicyResult.FAILURE;
-        }
-    }
-
-    private PolicyResult getTimeoutResult(PolicyResult result) {
-        return (PolicyResult.FAILURE_TIMEOUT.equals(this.policyResult) ? null : result);
-    }
-
-    private Integer getSubRequestId(Response appcResponse) {
-        try {
-            return Integer.valueOf(appcResponse.getCommonHeader().getSubRequestId());
-        } catch (NumberFormatException e) {
-            //
-            // We cannot tell what happened if this doesn't exist
-            //
-            return null;
-        }
-    }
-
-    /**
-     * Get the operation timeout.
-     *
-     * @return the timeout
-     */
-    public Integer getOperationTimeout() {
-        //
-        // Sanity check
-        //
-        if (this.policy == null) {
-            logger.debug("getOperationTimeout returning 0");
-            return 0;
-        }
-        logger.debug("getOperationTimeout returning {}", this.policy.getTimeout());
-        return this.policy.getTimeout();
-    }
-
-    /**
-     * Get the operation timeout as a String.
-     *
-     * @param defaultTimeout the default timeout
-     * @return the timeout as a String
-     */
-    public String getOperationTimeoutString(int defaultTimeout) {
-        Integer to = this.getOperationTimeout();
-        if (to == null || to == 0) {
-            return Integer.toString(defaultTimeout) + "s";
-        }
-        return to.toString() + "s";
-    }
-
-    public PolicyResult getOperationResult() {
-        return this.policyResult;
-    }
-
-    /**
-     * Get the operation as a message.
-     *
-     * @return the operation as a message
-     */
-    public String getOperationMessage() {
-        if (this.currentOperation != null && this.currentOperation.clOperation != null) {
-            return this.currentOperation.clOperation.toMessage();
-        }
-
-        if (!this.operationHistory.isEmpty()) {
-            return this.operationHistory.getLast().clOperation.toMessage();
-        }
-        return null;
-    }
-
-    /**
-     * Get the operation as a message including the guard result.
-     *
-     * @param guardResult the guard result
-     * @return the operation as a message including the guard result
-     */
-    public String getOperationMessage(String guardResult) {
-        if (this.currentOperation != null && this.currentOperation.clOperation != null) {
-            return this.currentOperation.clOperation.toMessage() + ", Guard result: " + guardResult;
-        }
-
-        if (!this.operationHistory.isEmpty()) {
-            return this.operationHistory.getLast().clOperation.toMessage() + ", Guard result: "
-                + guardResult;
-        }
-        return null;
-    }
-
-    /**
-     * Get the operation history.
-     *
-     * @return the operation history
-     */
-    public String getOperationHistory() {
-        if (this.currentOperation != null && this.currentOperation.clOperation != null) {
-            return this.currentOperation.clOperation.toHistory();
-        }
-
-        if (!this.operationHistory.isEmpty()) {
-            return this.operationHistory.getLast().clOperation.toHistory();
-        }
-        return null;
-    }
-
-    /**
-     * Get the history.
-     *
-     * @return the list of control loop operations
-     */
-    public List<ControlLoopOperation> getHistory() {
-        LinkedList<ControlLoopOperation> history = new LinkedList<>();
-        for (Operation op : this.operationHistory) {
-            history.add(new ControlLoopOperation(op.clOperation));
-
-        }
-        return history;
-    }
-
-    /**
-     * Set the operation has timed out.
-     */
-    public void setOperationHasTimedOut() {
-        //
-        //
-        //
-        this.completeOperation(this.attempts, "Operation timed out", PolicyResult.FAILURE_TIMEOUT);
-    }
-
-    /**
-     * Set the operation has been denied by guard.
-     */
-    public void setOperationHasGuardDeny() {
-        //
-        //
-        //
-        this.completeOperation(this.attempts, "Operation denied by Guard",
-            PolicyResult.FAILURE_GUARD);
-    }
-
-    public void setOperationHasException(String message) {
-        this.completeOperation(this.attempts, message, PolicyResult.FAILURE_EXCEPTION);
-    }
-
-    /**
-     * Is the operation complete.
-     *
-     * @return <code>true</code> if the operation is complete, <code>false</code> otherwise
-     */
-    public boolean isOperationComplete() {
-        //
-        // Is there currently a result?
-        //
-        if (this.policyResult == null) {
-            //
-            // either we are in process or we
-            // haven't started
-            //
-            return false;
-        }
-        //
-        // We have some result, check if the operation failed
-        //
-        if (this.policyResult.equals(PolicyResult.FAILURE)) {
-            //
-            // Check if there were no retries specified
-            //
-            if (getMaxRetries() < 1) {
-                //
-                // The result is the failure
-                //
-                return true;
-            }
-            //
-            // Check retries
-            //
-            if (this.attempts > getMaxRetries()) {
-                //
-                // No more attempts allowed, reset
-                // that our actual result is failure due to retries
-                //
-                this.policyResult = PolicyResult.FAILURE_RETRIES;
-                return true;
-            } else {
-                //
-                // There are more attempts available to try the
-                // policy recipe.
-                //
-                return false;
-            }
-        }
-        //
-        // Other results mean we are done
-        //
-        return true;
-    }
-
-    public boolean isOperationRunning() {
-        return (this.currentOperation != null);
-    }
-
-    /**
-     * This method verifies that the operation manager may run an operation.
-     *
-     * @return True if the operation can run, false otherwise
-     * @throws ControlLoopException if the operation cannot run
-     */
-    private void verifyOperatonCanRun() throws ControlLoopException {
-        //
-        // They shouldn't call us if we currently running something
-        //
-        if (this.currentOperation != null) {
-            //
-            // what do we do if we are already running an operation?
-            //
-            throw new ControlLoopException(
-                "current operation is not null (an operation is already running)");
-        }
-        //
-        // Check if we have maxed out on retries
-        //
-        if (getMaxRetries() < 1) {
-            //
-            // No retries are allowed, so check have we even made
-            // one attempt to execute the operation?
-            //
-            if (this.attempts >= 1) {
-                //
-                // We have, let's ensure our PolicyResult is set
-                //
-                if (this.policyResult == null) {
-                    this.policyResult = PolicyResult.FAILURE_RETRIES;
-                }
-                //
-                //
-                //
-                throw new ControlLoopException(
-                    "current operation failed and retries are not allowed");
-            }
-        } else {
-            //
-            // Have we maxed out on retries?
-            //
-            if (this.attempts > getMaxRetries()) {
-                if (this.policyResult == null) {
-                    this.policyResult = PolicyResult.FAILURE_RETRIES;
-                }
-                throw new ControlLoopException(
-                    "current oepration has failed after " + this.attempts + " retries");
-            }
-        }
-    }
-
-    /**
-     * Gets the maximum number of retries.
-     *
-     * @return the maximum number of retries, or {@code 0}, if not specified
-     */
-    public int getMaxRetries() {
-        return (policy.getRetry() != null ? policy.getRetry() : 0);
-    }
-
-    private void storeOperationInDataBase() {
-        // Only store in DB if enabled
-        boolean guardEnabled = "false".equalsIgnoreCase(
-            PolicyEngineConstants.getManager().getEnvironmentProperty("guard.disabled"));
-        if (!guardEnabled) {
-            return;
-        }
-
-        // DB Properties
-        Properties props = new Properties();
-        if (PolicyEngineConstants.getManager().getEnvironmentProperty(Util.ONAP_KEY_URL) != null
-            && PolicyEngineConstants.getManager().getEnvironmentProperty(Util.ONAP_KEY_USER) != null
-            && PolicyEngineConstants.getManager()
-                .getEnvironmentProperty(Util.ONAP_KEY_PASS) != null) {
-            props.put(Util.ECLIPSE_LINK_KEY_URL,
-                PolicyEngineConstants.getManager().getEnvironmentProperty(Util.ONAP_KEY_URL));
-            props.put(Util.ECLIPSE_LINK_KEY_USER,
-                PolicyEngineConstants.getManager().getEnvironmentProperty(Util.ONAP_KEY_USER));
-            props.put(Util.ECLIPSE_LINK_KEY_PASS,
-                PolicyEngineConstants.getManager().getEnvironmentProperty(Util.ONAP_KEY_PASS));
-            props.put(PersistenceUnitProperties.CLASSLOADER,
-                ControlLoopOperationManager.class.getClassLoader());
-        }
-
-        String opsHistPu = System.getProperty("OperationsHistoryPU");
-        if (!"OperationsHistoryPUTest".equals(opsHistPu)) {
-            opsHistPu = "OperationsHistoryPU";
-        } else {
-            props.clear();
-        }
-        EntityManager em;
-        try {
-            em = Persistence.createEntityManagerFactory(opsHistPu, props).createEntityManager();
-        } catch (Exception e) {
-            logger.error("storeOperationInDataBase threw: ", e);
-            return;
-        }
-
-        OperationsHistory newEntry = new OperationsHistory();
-
-        newEntry.setClosedLoopName(this.onset.getClosedLoopControlName());
-        newEntry.setRequestId(this.onset.getRequestId().toString());
-        newEntry.setActor(this.currentOperation.clOperation.getActor());
-        newEntry.setOperation(this.currentOperation.clOperation.getOperation());
-        newEntry.setTarget(this.targetEntity);
-        newEntry.setStarttime(Timestamp.from(this.currentOperation.clOperation.getStart()));
-        newEntry.setSubrequestId(this.currentOperation.clOperation.getSubRequestId());
-        newEntry
-            .setEndtime(new Timestamp(this.currentOperation.clOperation.getEnd().toEpochMilli()));
-        newEntry.setMessage(this.currentOperation.clOperation.getMessage());
-        newEntry.setOutcome(this.currentOperation.clOperation.getOutcome());
-
-        em.getTransaction().begin();
-        em.persist(newEntry);
-        em.getTransaction().commit();
-
-        em.close();
-    }
-
-    private void completeOperation(Integer attempt, String message, PolicyResult result) {
-        if (attempt == null) {
-            logger.debug("attempt cannot be null (i.e. subRequestID)");
-            return;
-        }
-        if (this.currentOperation != null) {
-            if (this.currentOperation.attempt == attempt.intValue()) {
-                this.currentOperation.clOperation.setEnd(Instant.now());
-                this.currentOperation.clOperation.setMessage(message);
-                this.currentOperation.clOperation.setOutcome(result.toString());
-                this.currentOperation.policyResult = result;
-                //
-                // Save it in history
-                //
-                this.operationHistory.add(this.currentOperation);
-                this.storeOperationInDataBase();
-                //
-                // Set our last result
-                //
-                this.policyResult = result;
-                //
-                // Clear the current operation field
-                //
-                this.currentOperation = null;
-                return;
-            }
-            logger.debug("not current");
-        }
-        for (Operation op : this.operationHistory) {
-            if (op.attempt == attempt.intValue()) {
-                op.clOperation.setEnd(Instant.now());
-                op.clOperation.setMessage(message);
-                op.clOperation.setOutcome(result.toString());
-                op.policyResult = result;
-                return;
-            }
-        }
-        logger.debug("Could not find associated operation");
-    }
-
-    /**
-     * Commit the abatement to the history database.
-     *
-     * @param message the abatement message
-     * @param outcome the abatement outcome
-     */
-    public void commitAbatement(String message, String outcome) {
-        logger.info("commitAbatement: {}. {}", message, outcome);
-
-        if (this.currentOperation == null) {
-            try {
-                this.currentOperation = this.operationHistory.getLast();
-            } catch (NoSuchElementException e) {
-                logger.error("{}: commitAbatement threw an exception ", this, e);
-                return;
-            }
-        }
-        this.currentOperation.clOperation.setEnd(Instant.now());
-        this.currentOperation.clOperation.setMessage(message);
-        this.currentOperation.clOperation.setOutcome(outcome);
-        //
-        // Store commit in DB
-        //
-        this.storeOperationInDataBase();
-        //
-        // Clear the current operation field
-        //
-        this.currentOperation = null;
-    }
-
-    /**
-     * Construct a ControlLoopResponse object from actor response and input event.
-     *
-     * @param response the response from actor
-     * @param event the input event
-     *
-     * @return a ControlLoopResponse
-     */
-    public ControlLoopResponse getControlLoopResponse(Object response,
-        VirtualControlLoopEvent event) {
-        if (response instanceof PciResponseWrapper) {
-            //
-            // Cast SDNR response and handle it
-            //
-            return SdnrActor.getControlLoopResponse((PciResponseWrapper) response,
-                event);
-        } else {
-            return null;
-        }
-    }
-
-}
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/LockCallbackWorkingMemory.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/LockCallbackWorkingMemory.java
deleted file mode 100644 (file)
index 738d3b9..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2019 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.eventmanager;
-
-import lombok.Getter;
-import org.drools.core.WorkingMemory;
-import org.kie.api.runtime.rule.FactHandle;
-import org.onap.policy.drools.core.lock.Lock;
-import org.onap.policy.drools.core.lock.LockCallback;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Lock call-back that updates working memory.
- */
-@Getter
-public class LockCallbackWorkingMemory implements LockCallback {
-    private static final Logger logger = LoggerFactory.getLogger(LockCallbackWorkingMemory.class);
-
-    /**
-     * Name to be logged when the lock is updated.
-     */
-    private final String name;
-
-    /**
-     * Working memory to be updated when the lock is notified.
-     */
-    private final WorkingMemory workingMemory;
-
-
-    /**
-     * Constructs the object.
-     *
-     * @param name name to be logged when the lock is updated
-     * @param workingMemory working memory to be updated when the lock is notified
-     */
-    public LockCallbackWorkingMemory(String name, WorkingMemory workingMemory) {
-        this.name = name;
-        this.workingMemory = workingMemory;
-    }
-
-    @Override
-    public void lockAvailable(Lock lock) {
-        notifySession(lock);
-    }
-
-    @Override
-    public void lockUnavailable(Lock lock) {
-        notifySession(lock);
-    }
-
-    /**
-     * Notifies the session that the lock has been updated.
-     */
-    private void notifySession(Lock lock) {
-        FactHandle fact = workingMemory.getFactHandle(lock);
-        if (fact != null) {
-            logger.debug("{}: updating lock={}", name, lock);
-            workingMemory.update(fact, lock);
-        }
-    }
-}
index 741ce20..f2feef6 100644 (file)
@@ -40,7 +40,6 @@ import org.onap.policy.common.utils.jpa.EntityTransCloser;
 import org.onap.policy.controlloop.ControlLoopOperation;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.guard.OperationsHistory;
-import org.onap.policy.guard.Util;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -322,9 +321,9 @@ public class OperationHistoryDataManagerImpl implements OperationHistoryDataMana
      */
     private Properties toProperties(OperationHistoryDataManagerParams params) {
         Properties props = new Properties();
-        props.put(Util.ECLIPSE_LINK_KEY_URL, params.getUrl());
-        props.put(Util.ECLIPSE_LINK_KEY_USER, params.getUserName());
-        props.put(Util.ECLIPSE_LINK_KEY_PASS, params.getPassword());
+        props.put(PersistenceUnitProperties.JDBC_URL, params.getUrl());
+        props.put(PersistenceUnitProperties.JDBC_USER, params.getUserName());
+        props.put(PersistenceUnitProperties.JDBC_PASSWORD, params.getPassword());
         props.put(PersistenceUnitProperties.CLASSLOADER, getClass().getClassLoader());
 
         return props;
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/PolicyEngine.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/PolicyEngine.java
deleted file mode 100644 (file)
index 7e4c107..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * policy engine
- * ================================================================================
- * Copyright (C) 2017-2018 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.drools;
-
-@FunctionalInterface
-public interface PolicyEngine {
-    public boolean deliver(String busType, String topic, Object obj);
-}
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/PolicyEngineListener.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/PolicyEngineListener.java
deleted file mode 100644 (file)
index 419c310..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * policy engine
- * ================================================================================
- * Copyright (C) 2017-2018 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.drools;
-
-@FunctionalInterface
-public interface PolicyEngineListener {
-    /**
-     * Any class that implements this interface will be notified of a new event on the queue in the
-     * PolicyEngineJUnitImpl.
-     * 
-     * @param topic a key to the queue that contains the event
-     */
-    public void newEventNotification(String topic);
-}
diff --git a/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/impl/PolicyEngineJUnitImpl.java b/controlloop/common/eventmanager/src/main/java/org/onap/policy/drools/impl/PolicyEngineJUnitImpl.java
deleted file mode 100644 (file)
index 85fc13c..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * policy engine
- * ================================================================================
- * Copyright (C) 2017-2019 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.drools.impl;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Queue;
-import org.onap.policy.appc.Request;
-import org.onap.policy.appclcm.AppcLcmDmaapWrapper;
-import org.onap.policy.controlloop.ControlLoopNotification;
-import org.onap.policy.controlloop.util.Serialization;
-import org.onap.policy.drools.PolicyEngine;
-import org.onap.policy.drools.PolicyEngineListener;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class PolicyEngineJUnitImpl implements PolicyEngine {
-
-    private static final Logger logger = LoggerFactory.getLogger(PolicyEngineJUnitImpl.class);
-    private Map<String, Map<String, Queue<Object>>> busMap = new HashMap<>();
-    private List<PolicyEngineListener> listeners = new ArrayList<>();
-
-    /**
-     * Adds all objects that implement PolicyEngineListener to the notification list when an event
-     * occurs.
-     *
-     * @param listener an object that is interest in knowing about events published to the
-     *        PolicyEngine
-     */
-    public void addListener(PolicyEngineListener listener) {
-        listeners.add(listener);
-    }
-
-    /**
-     * Notifies all listeners about a new event.
-     *
-     * @param topic the topic in which the notification was sent to
-     */
-    public void notifyListeners(String topic) {
-        for (PolicyEngineListener listener : listeners) {
-            listener.newEventNotification(topic);
-        }
-    }
-
-    @Override
-    public boolean deliver(String busType, String topic, Object obj) {
-        if (obj instanceof ControlLoopNotification) {
-            ControlLoopNotification notification = (ControlLoopNotification) obj;
-            if (logger.isDebugEnabled()) {
-                logger.debug(Serialization.gsonPretty.toJson(notification));
-            }
-        }
-        if (obj instanceof Request) {
-            Request request = (Request) obj;
-            logger.debug("Request: {} subrequest {}", request.getAction(), request.getCommonHeader().getSubRequestId());
-        } else if (obj instanceof AppcLcmDmaapWrapper) {
-            AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) obj;
-            logger.debug("Request: {} subrequest {}", dmaapRequest.getBody().getInput().getAction(),
-                    dmaapRequest.getBody().getInput().getCommonHeader().getSubRequestId());
-        }
-        //
-        // Does the bus exist?
-        //
-        if (!busMap.containsKey(busType)) {
-            logger.debug("creating new bus type {}", busType);
-            //
-            // Create the bus
-            //
-            busMap.put(busType, new HashMap<>());
-        }
-        //
-        // Get the bus
-        //
-        Map<String, Queue<Object>> topicMap = busMap.get(busType);
-        //
-        // Does the topic exist?
-        //
-        if (!topicMap.containsKey(topic)) {
-            logger.debug("creating new topic {}", topic);
-            //
-            // Create the topic
-            //
-            topicMap.put(topic, new LinkedList<>());
-        }
-        //
-        // Get the topic queue
-        //
-        logger.debug("queueing");
-        boolean res = topicMap.get(topic).add(obj);
-        notifyListeners(topic);
-        return res;
-    }
-
-    /**
-     * Subscribe to a topic on a bus.
-     *
-     * @param busType the bus type
-     * @param topic the topic
-     * @return the head of the queue, or <code>null</code> if the queue or bus does not exist or the
-     *         queue is empty
-     */
-    public Object subscribe(String busType, String topic) {
-        //
-        // Does the bus exist?
-        //
-        if (busMap.containsKey(busType)) {
-            //
-            // Get the bus
-            //
-            Map<String, Queue<Object>> topicMap = busMap.get(busType);
-            //
-            // Does the topic exist?
-            //
-            if (topicMap.containsKey(topic)) {
-                logger.debug("The queue has {}", topicMap.get(topic).size());
-                return topicMap.get(topic).poll();
-            } else {
-                logger.error("No topic exists {}", topic);
-            }
-        } else {
-            logger.error("No bus exists {}", busType);
-        }
-        return null;
-    }
-
-}
index ab86a53..aca8d96 100644 (file)
@@ -3,7 +3,7 @@
  * eventmanager
  * ================================================================================
  * Copyright (C) 2018 Ericsson. All rights reserved.
- * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2019-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.
diff --git a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManagerTest.java b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManagerTest.java
deleted file mode 100644 (file)
index 7479f66..0000000
+++ /dev/null
@@ -1,802 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2017-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.eventmanager;
-
-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.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Serializable;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.time.Instant;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.tuple.Pair;
-import org.jetbrains.annotations.NotNull;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
-import org.onap.policy.common.utils.coder.CoderException;
-import org.onap.policy.common.utils.coder.StandardCoder;
-import org.onap.policy.common.utils.io.Serializer;
-import org.onap.policy.controlloop.ControlLoopEventStatus;
-import org.onap.policy.controlloop.ControlLoopException;
-import org.onap.policy.controlloop.ControlLoopNotificationType;
-import org.onap.policy.controlloop.ControlLoopTargetType;
-import org.onap.policy.controlloop.VirtualControlLoopEvent;
-import org.onap.policy.controlloop.VirtualControlLoopNotification;
-import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager.NewEventStatus;
-import org.onap.policy.controlloop.policy.PolicyResult;
-import org.onap.policy.drools.core.lock.Lock;
-import org.onap.policy.drools.core.lock.LockCallback;
-import org.onap.policy.drools.system.PolicyEngineConstants;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-import org.powermock.reflect.Whitebox;
-
-public class ControlLoopEventManagerTest {
-    private static final String TARGET_LOCK_FIELD = "targetLock";
-    private static final String ONSET_ONE = "onsetOne";
-    private static final String VSERVER_NAME = "vserver.vserver-name";
-    private static final String TEST_YAML = "src/test/resources/test.yaml";
-    private static final String VNF_NAME = "generic-vnf.vnf-name";
-    private static final String VNF_ID = "generic-vnf.vnf-id";
-    private static final String AAI_USERNAME = "aai.username";
-    private static final String AAI_URL = "aai.url";
-    private static final String AAI_PASS = "aai.password";
-    private static final String TWO_ONSET_TEST = "TwoOnsetTest";
-    private static final String VNF_UUID = "83f674e8-7555-44d7-9a39-bdc3770b0491";
-
-    private VirtualControlLoopEvent onset;
-    private LockCallback callback;
-
-    /**
-     * Set up test class.
-     */
-    @BeforeClass
-    public static void setUpSimulator() throws Exception {
-        org.onap.policy.simulators.Util.buildAaiSim();
-
-        PolicyEngineConstants.getManager().setEnvironmentProperty(AAI_USERNAME, "AAI");
-        PolicyEngineConstants.getManager().setEnvironmentProperty(AAI_PASS, "AAI");
-        PolicyEngineConstants.getManager().setEnvironmentProperty(AAI_URL, "http://localhost:6666");
-        PolicyEngineConstants.getManager().setEnvironmentProperty("aai.customQuery", "false");
-    }
-
-    @AfterClass
-    public static void tearDownSimulator() {
-        HttpServletServerFactoryInstance.getServerFactory().destroy();
-    }
-
-    /**
-     * Setup.
-     */
-    @Before
-    public void setUp() {
-        callback = mock(LockCallback.class);
-
-        onset = new VirtualControlLoopEvent();
-        onset.setClosedLoopControlName("ControlLoop-vUSP");
-        onset.setRequestId(UUID.randomUUID());
-        onset.setTarget("VM_NAME");
-        onset.setClosedLoopAlarmStart(Instant.now());
-        onset.setAai(new HashMap<>());
-        onset.getAai().put("cloud-region.identity-url", "foo");
-        onset.getAai().put("vserver.selflink", "bar");
-        onset.getAai().put(VNF_ID, VNF_UUID);
-        onset.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
-        onset.setTargetType(ControlLoopTargetType.VNF);
-
-        PolicyEngineConstants.getManager().setEnvironmentProperty(AAI_URL, "http://localhost:6666");
-    }
-
-    @Test
-    public void testMethods() {
-        UUID requestId = UUID.randomUUID();
-        ControlLoopEventManager clem = new ControlLoopEventManager("MyClosedLoopName", requestId);
-
-        assertEquals("MyClosedLoopName", clem.getClosedLoopControlName());
-        assertEquals(requestId, clem.getRequestId());
-
-        clem.setActivated(true);
-        assertEquals(true, clem.isActivated());
-
-        clem.setControlLoopResult("SUCCESS");
-        assertEquals("SUCCESS", clem.getControlLoopResult());
-
-        clem.setControlLoopTimedOut();
-        assertEquals(true, clem.isControlLoopTimedOut());
-
-        clem.setNumAbatements(12345);
-        assertEquals(Integer.valueOf(12345), clem.getNumAbatements());
-
-        clem.setNumOnsets(54321);
-        assertEquals(Integer.valueOf(54321), clem.getNumOnsets());
-
-        assertNull(clem.getOnsetEvent());
-        assertNull(clem.getAbatementEvent());
-        assertNull(clem.getProcessor());
-
-        assertEquals(true, clem.isControlLoopTimedOut());
-
-        assertNull(clem.unlockCurrentOperation());
-    }
-
-    @Test
-    public void testAlreadyActivated() {
-        VirtualControlLoopEvent event = getOnsetEvent();
-
-        ControlLoopEventManager manager = makeManager(event);
-        manager.setActivated(true);
-        VirtualControlLoopNotification notification = manager.activate(event);
-        assertEquals(ControlLoopNotificationType.REJECTED, notification.getNotification());
-    }
-
-    @Test
-    public void testActivationYaml() throws IOException, CoderException {
-
-        VirtualControlLoopEvent event = getOnsetEvent();
-        ControlLoopEventManager manager = makeManager(event);
-
-        // Null YAML should fail
-        VirtualControlLoopNotification notificationNull = manager.activate((String) null, event);
-        assertNotNull(notificationNull);
-        assertEquals(ControlLoopNotificationType.REJECTED, notificationNull.getNotification());
-
-        // Empty YAML should fail
-        VirtualControlLoopNotification notificationEmpty = manager.activate("", event);
-        assertNotNull(notificationEmpty);
-        assertEquals(ControlLoopNotificationType.REJECTED, notificationEmpty.getNotification());
-
-        // Bad YAML should fail
-        InputStream isBad = new FileInputStream(new File("src/test/resources/notutf8.yaml"));
-        final String yamlStringBad = IOUtils.toString(isBad, StandardCharsets.UTF_8);
-
-        VirtualControlLoopNotification notificationBad = manager.activate(yamlStringBad, event);
-        assertNotNull(notificationBad);
-        assertEquals(ControlLoopNotificationType.REJECTED, notificationBad.getNotification());
-
-
-        InputStream is = new FileInputStream(new File(TEST_YAML));
-        final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
-
-        VirtualControlLoopNotification notification = manager.activate(yamlString, event);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        // Another activate should fail
-        VirtualControlLoopNotification notificationActive = manager.activate(yamlString, event);
-        assertNotNull(notificationActive);
-        assertEquals(ControlLoopNotificationType.REJECTED, notificationActive.getNotification());
-    }
-
-    @Test
-    public void testActivateToscaLegacy() throws IOException, CoderException {
-        String policy =
-                new String(Files.readAllBytes(Paths.get("src/test/resources/tosca-policy-legacy-vcpe.json")));
-        ToscaPolicy toscaPolicy = new StandardCoder().decode(policy, ToscaPolicy.class);
-
-        VirtualControlLoopEvent event = getOnsetEvent();
-        ControlLoopEventManager manager = makeManager(event);
-
-        // trigger a reject by passing the wrong policy type
-        toscaPolicy.setType("onap.policies.controlloop.operational.common.Drools");
-        VirtualControlLoopNotification notification = manager.activate(toscaPolicy, event);
-        assertEquals(ControlLoopNotificationType.REJECTED, notification.getNotification());
-
-        // place back correct policy type
-        toscaPolicy.setType("onap.policies.controlloop.Operational");
-        notification = manager.activate(toscaPolicy, event);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        // another activate should fail
-        notification = manager.activate(toscaPolicy, event);
-        assertEquals(ControlLoopNotificationType.REJECTED, notification.getNotification());
-    }
-
-    @Test
-    public void testControlLoopFinal() throws Exception {
-        VirtualControlLoopEvent event = getOnsetEvent();
-
-        ControlLoopEventManager manager = makeManager(event);
-        ControlLoopEventManager manager2 = manager;
-        assertThatThrownBy(manager2::isControlLoopFinal).isInstanceOf(ControlLoopException.class)
-                        .hasMessage("ControlLoopEventManager MUST be activated first.");
-
-        manager.setActivated(true);
-        assertThatThrownBy(manager2::isControlLoopFinal).isInstanceOf(ControlLoopException.class)
-                        .hasMessage("No onset event for ControlLoopEventManager.");
-
-        manager.setActivated(false);
-
-        InputStream is = new FileInputStream(new File(TEST_YAML));
-        final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
-
-        VirtualControlLoopNotification notification = manager.activate(yamlString, event);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        VirtualControlLoopNotification clfNotification = manager.isControlLoopFinal();
-        assertNull(clfNotification);
-
-        // serialize and de-serialize manager
-        manager = Serializer.roundTrip(manager);
-
-        manager.getProcessor().nextPolicyForResult(PolicyResult.SUCCESS);
-        clfNotification = manager.isControlLoopFinal();
-        assertNotNull(clfNotification);
-        assertEquals(ControlLoopNotificationType.FINAL_SUCCESS, clfNotification.getNotification());
-
-        manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
-        notification = manager.activate(yamlString, event);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_EXCEPTION);
-        clfNotification = manager.isControlLoopFinal();
-        assertNotNull(clfNotification);
-        assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
-
-        manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
-        notification = manager.activate(yamlString, event);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_GUARD);
-        clfNotification = manager.isControlLoopFinal();
-        assertNotNull(clfNotification);
-        assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
-
-        manager.setControlLoopTimedOut();
-        clfNotification = manager.isControlLoopFinal();
-        assertNotNull(clfNotification);
-        assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
-    }
-
-    @NotNull
-    private VirtualControlLoopEvent getOnsetEvent() {
-        UUID requestId = UUID.randomUUID();
-        VirtualControlLoopEvent event = new VirtualControlLoopEvent();
-        event.setClosedLoopControlName(TWO_ONSET_TEST);
-        event.setRequestId(requestId);
-        event.setTarget(VNF_ID);
-        event.setClosedLoopAlarmStart(Instant.now());
-        event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
-        event.setAai(new HashMap<>());
-        event.getAai().put(VNF_NAME, ONSET_ONE);
-        event.setTargetType(ControlLoopTargetType.VNF);
-        return event;
-    }
-
-    @Test
-    public void testProcessControlLoop() throws Exception {
-        UUID requestId = UUID.randomUUID();
-        VirtualControlLoopEvent event = new VirtualControlLoopEvent();
-        event.setClosedLoopControlName(TWO_ONSET_TEST);
-        event.setRequestId(requestId);
-        event.setTarget(VNF_ID);
-        event.setClosedLoopAlarmStart(Instant.now());
-        event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
-        event.setAai(new HashMap<>());
-        event.getAai().put(VNF_NAME, ONSET_ONE);
-        event.getAai().put(VSERVER_NAME, "testVserverName");
-        event.setTargetType(ControlLoopTargetType.VNF);
-
-        ControlLoopEventManager manager = makeManager(event);
-        ControlLoopEventManager manager2 = manager;
-        assertThatThrownBy(manager2::processControlLoop).isInstanceOf(ControlLoopException.class)
-                        .hasMessage("ControlLoopEventManager MUST be activated first.");
-
-        manager.setActivated(true);
-        assertThatThrownBy(manager2::processControlLoop).isInstanceOf(ControlLoopException.class)
-                        .hasMessage("No onset event for ControlLoopEventManager.");
-
-        manager.setActivated(false);
-
-        InputStream is = new FileInputStream(new File(TEST_YAML));
-        final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
-
-        VirtualControlLoopNotification notification = manager.activate(yamlString, event);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        ControlLoopOperationManager clom = manager.processControlLoop();
-        assertNotNull(clom);
-        assertNull(clom.getOperationResult());
-
-        // serialize and de-serialize manager
-        manager = Serializer.roundTrip(manager);
-
-        // Test operation in progress
-        ControlLoopEventManager manager3 = manager;
-        assertThatThrownBy(manager3::processControlLoop).isInstanceOf(ControlLoopException.class)
-                        .hasMessage("Already working an Operation, do not call this method.");
-
-        manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
-        notification = manager.activate(yamlString, event);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_GUARD);
-        VirtualControlLoopNotification clfNotification = manager.isControlLoopFinal();
-        assertNotNull(clfNotification);
-        assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification());
-
-        // Test operation completed
-        ControlLoopEventManager manager4 = manager;
-        assertThatThrownBy(manager4::processControlLoop).isInstanceOf(ControlLoopException.class)
-                        .hasMessage("Control Loop is in FINAL state, do not call this method.");
-
-        manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
-        notification = manager.activate(yamlString, event);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-        manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE);
-
-        // Test operation with no next policy defined
-        ControlLoopEventManager manager5 = manager;
-        assertThatThrownBy(manager5::processControlLoop).isInstanceOf(ControlLoopException.class)
-                        .hasMessage("The target type is null");
-    }
-
-    @Test
-    public void testFinishOperation() throws Exception {
-        InputStream isStd = new FileInputStream(new File(TEST_YAML));
-        final String yamlStringStd = IOUtils.toString(isStd, StandardCharsets.UTF_8);
-
-        VirtualControlLoopEvent event = makeEvent();
-
-        ControlLoopEventManager manager = makeManager(event);
-        ControlLoopEventManager manager2 = manager;
-        assertThatThrownBy(() -> manager2.finishOperation(null)).isInstanceOf(ControlLoopException.class)
-                        .hasMessage("No operation to finish.");
-
-        manager.setActivated(true);
-        assertThatThrownBy(() -> manager2.finishOperation(null)).isInstanceOf(ControlLoopException.class)
-                        .hasMessage("No operation to finish.");
-
-        manager.setActivated(false);
-
-        InputStream is = new FileInputStream(new File("src/test/resources/testSOactor.yaml"));
-        final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
-
-        VirtualControlLoopNotification notification = manager.activate(yamlString, event);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        event.getAai().put(VSERVER_NAME, "testVserverName");
-
-        // serialize and de-serialize manager
-        manager = Serializer.roundTrip(manager);
-
-        ControlLoopOperationManager clom = manager.processControlLoop();
-        assertNotNull(clom);
-        assertNull(clom.getOperationResult());
-
-        clom.startOperation(event);
-
-        // This call should be exception free
-        manager.finishOperation(clom);
-
-        ControlLoopEventManager otherManager = makeManager(event);
-        VirtualControlLoopNotification otherNotification = otherManager.activate(yamlStringStd, event);
-        assertNotNull(otherNotification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, otherNotification.getNotification());
-
-        ControlLoopOperationManager otherClom = otherManager.processControlLoop();
-        assertNotNull(otherClom);
-        assertNull(otherClom.getOperationResult());
-
-        otherManager.finishOperation(clom);
-    }
-
-    @Test
-    public void testLockCurrentOperation_testUnlockCurrentOperation() throws Exception {
-        VirtualControlLoopEvent event = makeEvent();
-
-        ControlLoopEventManager manager = makeManager(event);
-
-        manager.setActivated(false);
-
-        InputStream is = new FileInputStream(new File("src/test/resources/testSOactor.yaml"));
-        final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
-
-        VirtualControlLoopNotification notification = manager.activate(yamlString, event);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        ControlLoopEventManager manager2 = manager;
-        assertThatThrownBy(() -> manager2.lockCurrentOperation(callback)).isInstanceOf(ControlLoopException.class)
-                        .hasMessage("Do not have a current operation.");
-
-        assertNull(manager.unlockCurrentOperation());
-
-        event.getAai().put(VSERVER_NAME, "testVserverName");
-
-        ControlLoopOperationManager clom = manager.processControlLoop();
-        assertNotNull(clom);
-        assertNull(clom.getOperationResult());
-
-        Pair<Lock, Lock> lockPair = manager.lockCurrentOperation(callback);
-        assertNull(lockPair.getLeft());
-        assertNotNull(lockPair.getRight());
-
-        // pseudo lock - session should NOT have been notified of the change
-        verify(callback, never()).lockAvailable(any());
-        verify(callback, never()).lockUnavailable(any());
-
-        // repeat - should cause an extension
-        Lock lock = lockPair.getRight();
-        lockPair = manager.lockCurrentOperation(callback);
-
-        /*
-         * even with a pseudo lock, the session should have been notified that it was
-         * extended
-         */
-
-        verify(callback).lockAvailable(lock);
-
-        assertSame(lock, manager.unlockCurrentOperation());
-
-        assertNull(lockPair.getLeft());
-        assertNull(lockPair.getRight());
-
-        // force it to use a pseudo lock
-        manager.setUseTargetLock(false);
-        lockPair = manager.lockCurrentOperation(callback);
-        assertNull(lockPair.getLeft());
-        assertNotNull(lockPair.getRight());
-
-        lock = lockPair.getRight();
-
-        lockPair = manager.lockCurrentOperation(callback);
-        assertNull(lockPair.getLeft());
-        assertNull(lockPair.getRight());
-
-        // first lock uses a pseudo lock, so it will only update when extended
-        verify(callback).lockAvailable(lock);
-
-        // force it to re-create the lock due to change in resource ID
-        lock = mock(Lock.class);
-        when(lock.getResourceId()).thenReturn("different");
-        Whitebox.setInternalState(manager, TARGET_LOCK_FIELD, lock);
-
-        lockPair = manager.lockCurrentOperation(callback);
-        assertSame(lock, lockPair.getLeft());
-        assertNotNull(lockPair.getRight());
-
-        lock = lockPair.getRight();
-
-        lockPair = manager.lockCurrentOperation(callback);
-        assertNull(lockPair.getLeft());
-        assertNull(lockPair.getRight());
-
-        // first lock uses a pseudo lock, so it won't do an update
-        verify(callback).lockAvailable(lock);
-
-        assertSame(lock, manager.unlockCurrentOperation());
-        assertNull(manager.unlockCurrentOperation());
-
-        // try again - this time don't return the fact handle- no change in count
-        lockPair = manager.lockCurrentOperation(callback);
-        assertNull(lockPair.getLeft());
-        assertNotNull(lockPair.getRight());
-    }
-
-    @Test
-    public void testOnNewEvent() throws Exception {
-        UUID requestId = UUID.randomUUID();
-        VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
-        onsetEvent.setClosedLoopControlName(TWO_ONSET_TEST);
-        onsetEvent.setRequestId(requestId);
-        onsetEvent.setTarget(VNF_ID);
-        onsetEvent.setClosedLoopAlarmStart(Instant.now());
-        onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
-        onsetEvent.setAai(new HashMap<>());
-        onsetEvent.getAai().put(VNF_NAME, ONSET_ONE);
-        onsetEvent.setTargetType(ControlLoopTargetType.VNF);
-
-        VirtualControlLoopEvent abatedEvent = new VirtualControlLoopEvent();
-        abatedEvent.setClosedLoopControlName(TWO_ONSET_TEST);
-        abatedEvent.setRequestId(requestId);
-        abatedEvent.setTarget(VNF_ID);
-        abatedEvent.setClosedLoopAlarmStart(Instant.now());
-        abatedEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED);
-        abatedEvent.setAai(new HashMap<>());
-        abatedEvent.getAai().put(VNF_NAME, ONSET_ONE);
-
-        ControlLoopEventManager manager = makeManager(onsetEvent);
-
-        InputStream is = new FileInputStream(new File(TEST_YAML));
-        final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
-
-        VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        assertEquals(NewEventStatus.FIRST_ONSET, manager.onNewEvent(onsetEvent));
-        assertEquals(NewEventStatus.FIRST_ABATEMENT, manager.onNewEvent(abatedEvent));
-        assertEquals(NewEventStatus.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
-
-        VirtualControlLoopEvent checkSyntaxEvent = new VirtualControlLoopEvent();
-        checkSyntaxEvent.setAai(null);
-        checkSyntaxEvent.setClosedLoopAlarmEnd(null);
-        checkSyntaxEvent.setClosedLoopAlarmStart(null);
-        checkSyntaxEvent.setClosedLoopControlName(null);
-        checkSyntaxEvent.setClosedLoopEventClient(null);
-        checkSyntaxEvent.setClosedLoopEventStatus(null);
-        checkSyntaxEvent.setFrom(null);
-        checkSyntaxEvent.setPolicyName(null);
-        checkSyntaxEvent.setPolicyScope(null);
-        checkSyntaxEvent.setPolicyVersion(null);
-        checkSyntaxEvent.setRequestId(null);
-        checkSyntaxEvent.setTarget(null);
-        checkSyntaxEvent.setTargetType(null);
-        checkSyntaxEvent.setVersion(null);
-
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setClosedLoopControlName(null);
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setClosedLoopControlName("");
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setClosedLoopControlName(TWO_ONSET_TEST);
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setRequestId(null);
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setRequestId(requestId);
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setAai(null);
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setAai(new HashMap<>());
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setTargetType("");
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setTarget("");
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setTarget(null);
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setTarget("");
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setTarget("OZ");
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setTarget("VM_NAME");
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setTarget("VNF_NAME");
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setTarget(VSERVER_NAME);
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setTarget(VNF_ID);
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setTarget(VNF_NAME);
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setAai(null);
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.setAai(new HashMap<>());
-        assertEquals(NewEventStatus.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent));
-
-        checkSyntaxEvent.getAai().put(VNF_NAME, ONSET_ONE);
-        assertEquals(NewEventStatus.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
-
-        checkSyntaxEvent.getAai().put(VSERVER_NAME, ONSET_ONE);
-        assertEquals(NewEventStatus.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
-
-        checkSyntaxEvent.getAai().put(VNF_ID, ONSET_ONE);
-        assertEquals(NewEventStatus.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent));
-    }
-
-    @Test
-    public void testControlLoopTimeout() throws IOException {
-        VirtualControlLoopEvent onsetEvent = getOnsetEvent();
-
-        ControlLoopEventManager manager = makeManager(onsetEvent);
-        assertEquals(0, manager.getControlLoopTimeout(null));
-        assertEquals(120, manager.getControlLoopTimeout(120));
-
-        InputStream is = new FileInputStream(new File(TEST_YAML));
-        final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
-
-        VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        assertEquals(60, manager.getControlLoopTimeout(null));
-    }
-
-    @Test
-    public void testControlLoopTimeout_ZeroTimeout() throws IOException {
-        VirtualControlLoopEvent onsetEvent = getOnsetEvent();
-
-        ControlLoopEventManager manager = makeManager(onsetEvent);
-
-        InputStream is = new FileInputStream(new File("src/test/resources/test-zero-timeout.yaml"));
-        final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
-
-        VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        assertEquals(0, manager.getControlLoopTimeout(null));
-        assertEquals(120, manager.getControlLoopTimeout(120));
-    }
-
-    @Test
-    public void testControlLoopTimeout_NullTimeout() throws IOException {
-        VirtualControlLoopEvent onsetEvent = getOnsetEvent();
-
-        ControlLoopEventManager manager = makeManager(onsetEvent);
-
-        InputStream is = new FileInputStream(new File("src/test/resources/test-null-timeout.yaml"));
-        final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
-
-        VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        assertEquals(0, manager.getControlLoopTimeout(null));
-        assertEquals(120, manager.getControlLoopTimeout(120));
-    }
-
-    @Test
-    public void testIsClosedLoopDisabled() {
-        Map<String, String> aai = onset.getAai();
-
-        // null, null
-        aai.remove(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED);
-        aai.remove(ControlLoopEventManager.VSERVER_IS_CLOSED_LOOP_DISABLED);
-        assertFalse(ControlLoopEventManager.isClosedLoopDisabled(onset));
-
-        // null, false
-        aai.remove(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED);
-        aai.put(ControlLoopEventManager.VSERVER_IS_CLOSED_LOOP_DISABLED, Boolean.FALSE.toString());
-        assertFalse(ControlLoopEventManager.isClosedLoopDisabled(onset));
-
-        // false, null
-        aai.put(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED, Boolean.FALSE.toString());
-        aai.remove(ControlLoopEventManager.VSERVER_IS_CLOSED_LOOP_DISABLED);
-        assertFalse(ControlLoopEventManager.isClosedLoopDisabled(onset));
-
-        // null, true
-        aai.remove(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED);
-        aai.put(ControlLoopEventManager.VSERVER_IS_CLOSED_LOOP_DISABLED, Boolean.TRUE.toString());
-        assertTrue(ControlLoopEventManager.isClosedLoopDisabled(onset));
-
-        // true, null
-        aai.put(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED, Boolean.TRUE.toString());
-        aai.remove(ControlLoopEventManager.VSERVER_IS_CLOSED_LOOP_DISABLED);
-        assertTrue(ControlLoopEventManager.isClosedLoopDisabled(onset));
-    }
-
-    @Test
-    public void testIsProvStatusInactive() {
-        Map<String, String> aai = onset.getAai();
-
-        // null, null
-        aai.remove(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS);
-        aai.remove(ControlLoopEventManager.VSERVER_PROV_STATUS);
-        assertFalse(ControlLoopEventManager.isProvStatusInactive(onset));
-
-        // null, active
-        aai.remove(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS);
-        aai.put(ControlLoopEventManager.VSERVER_PROV_STATUS, ControlLoopEventManager.PROV_STATUS_ACTIVE);
-        assertFalse(ControlLoopEventManager.isProvStatusInactive(onset));
-
-        // active, null
-        aai.put(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS, ControlLoopEventManager.PROV_STATUS_ACTIVE);
-        aai.remove(ControlLoopEventManager.VSERVER_PROV_STATUS);
-        assertFalse(ControlLoopEventManager.isProvStatusInactive(onset));
-
-        // null, inactive
-        aai.remove(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS);
-        aai.put(ControlLoopEventManager.VSERVER_PROV_STATUS, "other1");
-        assertTrue(ControlLoopEventManager.isProvStatusInactive(onset));
-
-        // inactive, null
-        aai.put(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS, "other2");
-        aai.remove(ControlLoopEventManager.VSERVER_PROV_STATUS);
-        assertTrue(ControlLoopEventManager.isProvStatusInactive(onset));
-    }
-
-    @Test
-    public void testIsAaiTrue() {
-        assertTrue(ControlLoopEventManager.isAaiTrue("tRuE"));
-        assertTrue(ControlLoopEventManager.isAaiTrue("T"));
-        assertTrue(ControlLoopEventManager.isAaiTrue("t"));
-        assertTrue(ControlLoopEventManager.isAaiTrue("yES"));
-        assertTrue(ControlLoopEventManager.isAaiTrue("Y"));
-        assertTrue(ControlLoopEventManager.isAaiTrue("y"));
-
-        assertFalse(ControlLoopEventManager.isAaiTrue("no"));
-        assertFalse(ControlLoopEventManager.isAaiTrue(null));
-    }
-
-
-    private VirtualControlLoopEvent makeEvent() {
-        UUID requestId = UUID.randomUUID();
-        VirtualControlLoopEvent event = new VirtualControlLoopEvent();
-        event.setClosedLoopControlName(TWO_ONSET_TEST);
-        event.setRequestId(requestId);
-        event.setTarget(VNF_ID);
-        event.setClosedLoopAlarmStart(Instant.now());
-        event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
-        event.setAai(new HashMap<>());
-        event.getAai().put(VNF_ID, ONSET_ONE);
-        event.getAai().put(VSERVER_NAME, "test-vserver");
-        event.setTargetType(ControlLoopTargetType.VNF);
-        return event;
-    }
-
-    private ControlLoopEventManager makeManager(VirtualControlLoopEvent event) {
-        return new MyManager(event.getClosedLoopControlName(), event.getRequestId());
-    }
-
-    private static class MyManager extends ControlLoopEventManager implements Serializable {
-        private static final long serialVersionUID = 1L;
-
-        public MyManager(String closedLoopControlName, UUID requestId) {
-            super(closedLoopControlName, requestId);
-        }
-
-        @Override
-        protected Lock createRealLock(String targetEntity, UUID requestId, int holdSec, LockCallback callback) {
-            return createPseudoLock(targetEntity, requestId, holdSec, callback);
-        }
-    }
-}
diff --git a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManagerTest.java b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManagerTest.java
deleted file mode 100644 (file)
index b64d948..0000000
+++ /dev/null
@@ -1,929 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * unit test
- * ================================================================================
- * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2019 Bell Canada.
- * ================================================================================
- * 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.eventmanager;
-
-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.assertTrue;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.time.Instant;
-import java.util.HashMap;
-import java.util.UUID;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-import javax.persistence.Query;
-import org.apache.commons.io.IOUtils;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.onap.ccsdk.cds.controllerblueprints.processing.api.ExecutionServiceInput;
-import org.onap.policy.aai.util.AaiException;
-import org.onap.policy.appc.CommonHeader;
-import org.onap.policy.appc.Response;
-import org.onap.policy.appc.ResponseCode;
-import org.onap.policy.appc.ResponseStatus;
-import org.onap.policy.appclcm.AppcLcmBody;
-import org.onap.policy.appclcm.AppcLcmCommonHeader;
-import org.onap.policy.appclcm.AppcLcmDmaapWrapper;
-import org.onap.policy.appclcm.AppcLcmInput;
-import org.onap.policy.appclcm.AppcLcmOutput;
-import org.onap.policy.common.endpoints.http.server.HttpServletServerFactoryInstance;
-import org.onap.policy.common.utils.io.Serializer;
-import org.onap.policy.controlloop.ControlLoopEventStatus;
-import org.onap.policy.controlloop.ControlLoopException;
-import org.onap.policy.controlloop.ControlLoopNotificationType;
-import org.onap.policy.controlloop.ControlLoopTargetType;
-import org.onap.policy.controlloop.SupportUtil;
-import org.onap.policy.controlloop.VirtualControlLoopEvent;
-import org.onap.policy.controlloop.VirtualControlLoopNotification;
-import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.controlloop.policy.Policy;
-import org.onap.policy.controlloop.policy.PolicyResult;
-import org.onap.policy.controlloop.policy.Target;
-import org.onap.policy.controlloop.policy.TargetType;
-import org.onap.policy.controlloop.processor.ControlLoopProcessor;
-import org.onap.policy.drools.system.PolicyEngineConstants;
-import org.onap.policy.so.SoResponse;
-import org.onap.policy.so.SoResponseWrapper;
-import org.onap.policy.vfc.VfcResponse;
-import org.onap.policy.vfc.VfcResponseDescriptor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ControlLoopOperationManagerTest {
-    private static final String VSERVER_NAME = "vserver.vserver-name";
-    private static final String TEST_YAML = "src/test/resources/test.yaml";
-    private static final String TEST_CDS_YAML = "src/test/resources/test-cds.yaml";
-    private static final String ONSET_ONE = "onsetOne";
-    private static final String VNF_NAME = "generic-vnf.vnf-name";
-    private static final String VNF_ID = "generic-vnf.vnf-id";
-    private static final String TWO_ONSET_TEST = "TwoOnsetTest";
-    private static final String OPER_MSG = "The Wizard Escaped";
-    private static final String OZ_VNF = "OzVNF";
-    private static final String OPERATIONS_HISTORY_PU_TEST = "OperationsHistoryPUTest";
-    private static final String OPERATIONS_HISTORY_PU = "OperationsHistoryPU";
-    private static final String DOROTHY = "Dorothy";
-    private static final String APPC_FAILURE_REASON = "AppC failed for some reason";
-    private static final String ACCEPT = "ACCEPT";
-
-    private static final Logger logger =
-        LoggerFactory.getLogger(ControlLoopOperationManagerTest.class);
-
-    private static VirtualControlLoopEvent onset;
-
-    static {
-        onset = new VirtualControlLoopEvent();
-        onset.setRequestId(UUID.randomUUID());
-        onset.setTarget(VNF_NAME);
-        onset.setTargetType(ControlLoopTargetType.VNF);
-        onset.setClosedLoopAlarmStart(Instant.now());
-        onset.setAai(new HashMap<>());
-        onset.getAai().put(VNF_NAME, "testTriggerSource");
-        onset.getAai().put(VSERVER_NAME, "testVserverName");
-        onset.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
-        onset.setTargetType(ControlLoopTargetType.VNF);
-
-        /* Set environment properties */
-        PolicyEngineConstants.getManager().setEnvironmentProperty("aai.url",
-            "http://localhost:6666");
-        PolicyEngineConstants.getManager().setEnvironmentProperty("aai.username", "AAI");
-        PolicyEngineConstants.getManager().setEnvironmentProperty("aai.password", "AAI");
-        PolicyEngineConstants.getManager().setEnvironmentProperty("aai.customQuery", "false");
-    }
-
-    private static EntityManagerFactory emf;
-    private static EntityManager em;
-
-    private static int getCount() {
-        // Create a query for number of items in DB
-        String sql = "select count(*) as count from operationshistory";
-        Query nq = em.createNativeQuery(sql);
-
-        return ((Number) nq.getSingleResult()).intValue();
-    }
-
-    /**
-     * Set up test class.
-     */
-    @BeforeClass
-    public static void setUp() throws Exception {
-
-        org.onap.policy.simulators.Util.buildAaiSim();
-
-        // Set PU
-        System.setProperty(OPERATIONS_HISTORY_PU, OPERATIONS_HISTORY_PU_TEST);
-
-        // Enter dummy props to avoid nullPointerException
-        PolicyEngineConstants.getManager()
-            .setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_URL, "a");
-        PolicyEngineConstants.getManager()
-            .setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_USER, "b");
-        PolicyEngineConstants.getManager()
-            .setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_PASS, "c");
-
-        // Connect to in-mem db
-        emf = Persistence.createEntityManagerFactory(OPERATIONS_HISTORY_PU_TEST);
-        em = emf.createEntityManager();
-    }
-
-    /**
-     * Clean up test class.
-     */
-    @AfterClass
-    public static void tearDown() {
-        em.close();
-        emf.close();
-        HttpServletServerFactoryInstance.getServerFactory().destroy();
-    }
-
-    @Test
-    public void testRetriesFail() throws Exception {
-        //
-        // Load up the policy
-        //
-        final SupportUtil.Pair<ControlLoopPolicy, String> pair = SupportUtil.loadYaml(TEST_YAML);
-        onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
-        onset.getAai().put(VSERVER_NAME, "testVserverName");
-
-        //
-        // Create a processor
-        //
-        final ControlLoopProcessor processor = new ControlLoopProcessor(pair.value);
-        //
-        // create the manager
-        //
-        ControlLoopEventManager eventManager =
-            new ControlLoopEventManager(onset.getClosedLoopControlName(), onset.getRequestId());
-        VirtualControlLoopNotification notification = eventManager.activate(onset);
-
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        ControlLoopEventManager.NewEventStatus status = eventManager.onNewEvent(onset);
-        assertNotNull(status);
-        assertEquals(ControlLoopEventManager.NewEventStatus.FIRST_ONSET, status);
-
-        ControlLoopOperationManager manager =
-            new ControlLoopOperationManager(onset, processor.getCurrentPolicy(), eventManager);
-        logger.debug("{}", manager);
-        //
-        //
-        //
-        assertFalse(manager.isOperationComplete());
-        assertFalse(manager.isOperationRunning());
-        //
-        // Start
-        //
-        Object request = manager.startOperation(onset);
-        logger.debug("{}", manager);
-        assertNotNull(request);
-        assertTrue(request instanceof AppcLcmDmaapWrapper);
-        AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
-        AppcLcmInput appcRequest = dmaapRequest.getBody().getInput();
-        assertTrue(appcRequest.getCommonHeader().getSubRequestId().contentEquals("1"));
-        assertFalse(manager.isOperationComplete());
-        assertTrue(manager.isOperationRunning());
-        //
-        // Accept
-        //
-        AppcLcmOutput appcResponse = new AppcLcmOutput(appcRequest);
-        appcResponse.getStatus().setCode(100);
-        appcResponse.getStatus().setMessage(ACCEPT);
-        AppcLcmBody outputBody = new AppcLcmBody();
-        outputBody.setOutput(appcResponse);
-        AppcLcmDmaapWrapper dmaapResponse = new AppcLcmDmaapWrapper();
-        dmaapResponse.setBody(outputBody);
-        //
-        //
-        //
-        PolicyResult result = manager.onResponse(dmaapResponse);
-        logger.debug("{}", manager);
-        assertNull(result);
-        assertFalse(manager.isOperationComplete());
-        assertTrue(manager.isOperationRunning());
-        //
-        // Now we are going to Fail it
-        //
-        appcResponse = new AppcLcmOutput(appcRequest);
-        appcResponse.getStatus().setCode(401);
-        appcResponse.getStatus().setMessage(APPC_FAILURE_REASON);
-        outputBody.setOutput(appcResponse);
-        dmaapResponse.setBody(outputBody);
-        result = manager.onResponse(dmaapResponse);
-        logger.debug("{}", manager);
-        assertEquals(PolicyResult.FAILURE, result);
-        assertFalse(manager.isOperationComplete());
-        assertFalse(manager.isOperationRunning());
-        //
-        // Retry it
-        //
-        request = manager.startOperation(onset);
-        logger.debug("{}", manager);
-        assertNotNull(request);
-        assertTrue(request instanceof AppcLcmDmaapWrapper);
-        dmaapRequest = (AppcLcmDmaapWrapper) request;
-        appcRequest = dmaapRequest.getBody().getInput();
-        assertTrue(appcRequest.getCommonHeader().getSubRequestId().contentEquals("2"));
-        assertFalse(manager.isOperationComplete());
-        assertTrue(manager.isOperationRunning());
-        //
-        //
-        //
-        appcResponse = new AppcLcmOutput(appcRequest);
-        logger.debug("{}", manager);
-        appcResponse.getStatus().setCode(100);
-        appcResponse.getStatus().setMessage(ACCEPT);
-        outputBody.setOutput(appcResponse);
-        dmaapResponse.setBody(outputBody);
-        //
-        //
-        //
-        result = manager.onResponse(dmaapResponse);
-        logger.debug("{}", manager);
-        assertNull(result);
-        assertFalse(manager.isOperationComplete());
-        assertTrue(manager.isOperationRunning());
-        //
-        // Now we are going to Fail it
-        //
-        appcResponse = new AppcLcmOutput(appcRequest);
-        appcResponse.getStatus().setCode(401);
-        appcResponse.getStatus().setMessage(APPC_FAILURE_REASON);
-        outputBody.setOutput(appcResponse);
-        dmaapResponse.setBody(outputBody);
-        result = manager.onResponse(dmaapResponse);
-        logger.debug("{}", manager);
-        assertEquals(PolicyResult.FAILURE, result);
-        //
-        // Should be complete now
-        //
-        assertTrue(manager.isOperationComplete());
-        assertFalse(manager.isOperationRunning());
-        assertNotNull(manager.getOperationResult());
-        assertEquals(PolicyResult.FAILURE_RETRIES, manager.getOperationResult());
-        assertEquals(2, manager.getHistory().size());
-    }
-
-    @Test
-    public void testTimeout() throws Exception {
-        //
-        // Load up the policy
-        //
-        final SupportUtil.Pair<ControlLoopPolicy, String> pair = SupportUtil.loadYaml(TEST_YAML);
-        onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName());
-        onset.getAai().put(VSERVER_NAME, "OzVServer");
-
-        //
-        // Create a processor
-        //
-        final ControlLoopProcessor processor = new ControlLoopProcessor(pair.value);
-        //
-        // create the manager
-        //
-        ControlLoopEventManager eventManager =
-            new ControlLoopEventManager(onset.getClosedLoopControlName(), onset.getRequestId());
-        VirtualControlLoopNotification notification = eventManager.activate(onset);
-
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        ControlLoopEventManager.NewEventStatus status = eventManager.onNewEvent(onset);
-        assertNotNull(status);
-        assertEquals(ControlLoopEventManager.NewEventStatus.FIRST_ONSET, status);
-
-        ControlLoopOperationManager manager =
-            new ControlLoopOperationManager(onset, processor.getCurrentPolicy(), eventManager);
-        //
-        //
-        //
-        logger.debug("{}", manager);
-        assertFalse(manager.isOperationComplete());
-        assertFalse(manager.isOperationRunning());
-        //
-        // Start
-        //
-        Object request = manager.startOperation(onset);
-        logger.debug("{}", manager);
-        assertNotNull(request);
-        assertTrue((request) instanceof AppcLcmDmaapWrapper);
-        AppcLcmDmaapWrapper dmaapRequest = (AppcLcmDmaapWrapper) request;
-        AppcLcmInput appcRequest = dmaapRequest.getBody().getInput();
-        assertTrue((appcRequest).getCommonHeader().getSubRequestId().contentEquals("1"));
-        assertFalse(manager.isOperationComplete());
-        assertTrue(manager.isOperationRunning());
-        //
-        // Accept
-        //
-        AppcLcmDmaapWrapper dmaapResponse = new AppcLcmDmaapWrapper();
-        AppcLcmOutput appcResponse = new AppcLcmOutput(appcRequest);
-        AppcLcmBody outputBody = new AppcLcmBody();
-        outputBody.setOutput(appcResponse);
-        dmaapResponse.setBody(outputBody);
-        appcResponse.getStatus().setCode(100);
-        appcResponse.getStatus().setMessage(ACCEPT);
-        //
-        //
-        //
-        PolicyResult result = manager.onResponse(dmaapResponse);
-        logger.debug("{}", manager);
-        assertNull(result);
-        assertFalse(manager.isOperationComplete());
-        assertTrue(manager.isOperationRunning());
-        //
-        // Now we are going to simulate Timeout
-        //
-        manager.setOperationHasTimedOut();
-        logger.debug("{}", manager);
-        assertTrue(manager.isOperationComplete());
-        assertFalse(manager.isOperationRunning());
-        assertEquals(1, manager.getHistory().size());
-        assertEquals(PolicyResult.FAILURE_TIMEOUT, manager.getOperationResult());
-        //
-        // Now we are going to Fail the previous request
-        //
-        appcResponse = new AppcLcmOutput(appcRequest);
-        appcResponse.getStatus().setCode(401);
-        appcResponse.getStatus().setMessage(APPC_FAILURE_REASON);
-        outputBody.setOutput(appcResponse);
-        dmaapResponse.setBody(outputBody);
-        manager.onResponse(dmaapResponse);
-        logger.debug("{}", manager);
-        //
-        //
-        //
-        assertTrue(manager.isOperationComplete());
-        assertFalse(manager.isOperationRunning());
-        assertEquals(1, manager.getHistory().size());
-        assertEquals(PolicyResult.FAILURE_TIMEOUT, manager.getOperationResult());
-    }
-
-    @Test
-    public void testMethods() throws IOException, ControlLoopException, AaiException {
-        InputStream is = new FileInputStream(new File("src/test/resources/testSOactor.yaml"));
-        final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
-
-        UUID requestId = UUID.randomUUID();
-        VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
-        onsetEvent.setClosedLoopControlName(TWO_ONSET_TEST);
-        onsetEvent.setRequestId(requestId);
-        onsetEvent.setTarget(VNF_ID);
-        onsetEvent.setTargetType(ControlLoopTargetType.VNF);
-        onsetEvent.setClosedLoopAlarmStart(Instant.now());
-        onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
-        onsetEvent.setAai(new HashMap<>());
-        onsetEvent.getAai().put(VNF_NAME, ONSET_ONE);
-        onsetEvent.getAai().put(VSERVER_NAME, "testVserverName");
-
-        ControlLoopEventManager manager = new ControlLoopEventManager(
-            onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestId());
-        VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        ControlLoopOperationManager clom = manager.processControlLoop();
-        assertNotNull(clom);
-        assertNull(clom.getOperationResult());
-
-        clom.setEventManager(manager);
-        assertEquals(manager, clom.getEventManager());
-
-        assertNull(clom.getTargetEntity());
-
-        clom.setGuardApprovalStatus("WizardOKedIt");
-        assertEquals("WizardOKedIt", clom.getGuardApprovalStatus());
-
-        assertNull(clom.getOperationResult());
-
-        Policy policy = manager.getProcessor().getCurrentPolicy();
-        clom.getTarget(policy);
-
-        final Target savedTarget = policy.getTarget();
-        policy.setTarget(null);
-        assertThatThrownBy(() -> clom.getTarget(policy)).hasMessage("The target is null");
-
-        policy.setTarget(new Target());
-        assertThatThrownBy(() -> clom.getTarget(policy)).hasMessage("The target type is null");
-
-        policy.setTarget(savedTarget);
-
-        policy.getTarget().setType(TargetType.PNF);
-        assertThatThrownBy(() -> clom.getTarget(policy)).hasMessage(
-            "Target in the onset event is either null or does not match target key expected in AAI section.");
-
-        onsetEvent.setTarget("Oz");
-        onsetEvent.getAai().remove(VNF_NAME);
-        onsetEvent.getAai().remove(VNF_ID);
-        onsetEvent.getAai().remove(VSERVER_NAME);
-
-        policy.getTarget().setType(TargetType.VNF);
-        assertThatThrownBy(() -> clom.getTarget(policy))
-            .hasMessage("Target does not match target type");
-
-        onsetEvent.setTarget(VSERVER_NAME);
-        onsetEvent.getAai().put(VSERVER_NAME, "OzVServer");
-        assertEquals("OzVServer", clom.getTarget(policy));
-
-        onsetEvent.getAai().remove(VSERVER_NAME);
-        onsetEvent.setTarget(VNF_ID);
-        onsetEvent.getAai().put(VNF_ID, OZ_VNF);
-        assertEquals(OZ_VNF, clom.getTarget(policy));
-
-        onsetEvent.setTarget(VNF_NAME);
-        assertEquals(OZ_VNF, clom.getTarget(policy));
-
-        manager.onNewEvent(onsetEvent);
-
-        policy.getTarget().setType(TargetType.VFC);
-        assertThatThrownBy(() -> clom.getTarget(policy))
-            .hasMessage("The target type is not supported");
-
-        assertEquals(Integer.valueOf(20), clom.getOperationTimeout());
-
-        assertEquals("20s", clom.getOperationTimeoutString(100));
-
-        assertEquals(null, clom.getOperationMessage());
-        assertEquals(null, clom.getOperationMessage(OPER_MSG));
-
-        clom.startOperation(onsetEvent);
-
-        assertEquals(
-            "actor=SO,operation=Restart,target=Target [type=VFC, resourceId=null],subRequestId=1",
-            clom.getOperationMessage());
-        assertEquals(
-            "actor=SO,operation=Restart,target=Target [type=VFC, resourceId=null],subRequestId=1, Guard result: "
-                + OPER_MSG,
-            clom.getOperationMessage(OPER_MSG));
-
-        assertEquals("actor=SO,operation=Restart,tar", clom.getOperationHistory().substring(0, 30));
-
-        clom.setOperationHasException("The Wizard is gone");
-        clom.setOperationHasGuardDeny();
-    }
-
-    @Test
-    public void testConstructor() throws IOException, ControlLoopException, AaiException {
-        InputStream is = new FileInputStream(new File(TEST_YAML));
-        final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
-
-        UUID requestId = UUID.randomUUID();
-        VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
-        onsetEvent.setClosedLoopControlName(TWO_ONSET_TEST);
-        onsetEvent.setRequestId(requestId);
-        onsetEvent.setTarget(VNF_ID);
-        onsetEvent.setTargetType(ControlLoopTargetType.VNF);
-        onsetEvent.setClosedLoopAlarmStart(Instant.now());
-        onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
-        onsetEvent.setAai(new HashMap<>());
-        onsetEvent.getAai().put(VNF_NAME, ONSET_ONE);
-        onsetEvent.getAai().put(VSERVER_NAME, "OzVServer");
-
-        ControlLoopEventManager manager = new ControlLoopEventManager(
-            onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestId());
-        VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        Policy policy = manager.getProcessor().getCurrentPolicy();
-        ControlLoopOperationManager clom =
-            new ControlLoopOperationManager(onsetEvent, policy, manager);
-        assertNotNull(clom);
-
-        policy.setRecipe("ModifyConfig");
-        onsetEvent.getAai().put(VSERVER_NAME, "NonExistentVserver");
-        policy.getTarget().setResourceID(UUID.randomUUID().toString());
-        assertThatThrownBy(() -> new ControlLoopOperationManager(onsetEvent, policy, manager))
-            .hasMessage("Target vnf-id could not be found");
-
-        onsetEvent.getAai().put(VSERVER_NAME, "testVserverName");
-        policy.getTarget().setResourceID("bbb3cefd-01c8-413c-9bdd-2b92f9ca3d38");
-        clom = new ControlLoopOperationManager(onsetEvent, policy, manager);
-        assertNotNull(clom);
-
-        policy.setActor("SO");
-        clom = new ControlLoopOperationManager(onsetEvent, policy, manager);
-        assertNotNull(clom);
-
-        policy.setActor("VFC");
-        clom = new ControlLoopOperationManager(onsetEvent, policy, manager);
-        assertNotNull(clom);
-
-        policy.setActor(DOROTHY);
-        assertThatThrownBy(() -> new ControlLoopOperationManager(onsetEvent, policy, manager))
-            .hasMessage("ControlLoopEventManager: policy has an unknown actor.");
-    }
-
-    @Test
-    public void testStartOperation() throws IOException, ControlLoopException, AaiException {
-        InputStream is = new FileInputStream(new File(TEST_YAML));
-        final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
-
-        UUID requestId = UUID.randomUUID();
-        VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
-        onsetEvent.setClosedLoopControlName(TWO_ONSET_TEST);
-        onsetEvent.setRequestId(requestId);
-        onsetEvent.setTarget(VNF_ID);
-        onsetEvent.setTargetType(ControlLoopTargetType.VNF);
-        onsetEvent.setClosedLoopAlarmStart(Instant.now());
-        onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
-        onsetEvent.setAai(new HashMap<>());
-        onsetEvent.getAai().put(VNF_NAME, ONSET_ONE);
-        onsetEvent.getAai().put(VSERVER_NAME, "testVserverName");
-
-        ControlLoopEventManager manager = new ControlLoopEventManager(
-            onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestId());
-        VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        Policy policy = manager.getProcessor().getCurrentPolicy();
-        ControlLoopOperationManager clom =
-            new ControlLoopOperationManager(onsetEvent, policy, manager);
-        assertNotNull(clom);
-
-        clom.startOperation(onsetEvent);
-        ControlLoopOperationManager clom2 = clom;
-        assertThatThrownBy(() -> clom2.startOperation(onsetEvent))
-            .hasMessage("current operation is not null (an operation is already running)");
-
-        clom = new ControlLoopOperationManager(onsetEvent, policy, manager);
-        assertNotNull(clom);
-        final String savedRecipe = policy.getRecipe();
-        policy.setRecipe("ModifyConfig");
-        policy.getTarget().setResourceID(UUID.randomUUID().toString());
-        clom.startOperation(onsetEvent);
-        policy.setRecipe(savedRecipe);
-
-        policy.setRetry(null);
-        clom = new ControlLoopOperationManager(onsetEvent, policy, manager);
-        assertNotNull(clom);
-        clom.startOperation(onsetEvent);
-        clom.setOperationHasTimedOut();
-        assertTrue(clom.isOperationComplete());
-        ControlLoopOperationManager clom3 = clom;
-        assertThatThrownBy(() -> clom3.startOperation(onsetEvent))
-            .hasMessage("current operation failed and retries are not allowed");
-
-        policy.setRetry(0);
-        clom = new ControlLoopOperationManager(onsetEvent, policy, manager);
-        assertNotNull(clom);
-        clom.startOperation(onsetEvent);
-        clom.setOperationHasTimedOut();
-        assertTrue(clom.isOperationComplete());
-        ControlLoopOperationManager clom4 = clom;
-        assertThatThrownBy(() -> clom4.startOperation(onsetEvent))
-            .hasMessage("current operation failed and retries are not allowed");
-
-        policy.setRetry(1);
-        clom = new ControlLoopOperationManager(onsetEvent, policy, manager);
-        assertNotNull(clom);
-        clom.startOperation(onsetEvent);
-        clom.setOperationHasTimedOut();
-        clom.startOperation(onsetEvent);
-        clom.setOperationHasTimedOut();
-        assertTrue(clom.isOperationComplete());
-        ControlLoopOperationManager clom5 = clom;
-        assertThatThrownBy(() -> clom5.startOperation(onsetEvent))
-            .hasMessage("current oepration has failed after 2 retries");
-
-        clom = new ControlLoopOperationManager(onsetEvent, policy, manager);
-        assertNotNull(clom);
-        policy.setActor("SO");
-        clom.startOperation(onsetEvent);
-
-        clom = new ControlLoopOperationManager(onsetEvent, policy, manager);
-        assertNotNull(clom);
-        policy.setActor("VFC");
-        clom.startOperation(onsetEvent);
-
-        clom = new ControlLoopOperationManager(onsetEvent, policy, manager);
-        assertNotNull(clom);
-        policy.setActor("Oz");
-        ControlLoopOperationManager clom6 = clom;
-        assertThatThrownBy(() -> clom6.startOperation(onsetEvent))
-            .hasMessage("invalid actor Oz on policy");
-    }
-
-    @Test
-    public void testOnResponse() throws IOException, ControlLoopException, AaiException {
-        InputStream is = new FileInputStream(new File(TEST_YAML));
-        final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
-
-        UUID requestId = UUID.randomUUID();
-        VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
-        onsetEvent.setClosedLoopControlName(TWO_ONSET_TEST);
-        onsetEvent.setRequestId(requestId);
-        onsetEvent.setTarget(VNF_ID);
-        onsetEvent.setTargetType(ControlLoopTargetType.VNF);
-        onsetEvent.setClosedLoopAlarmStart(Instant.now());
-        onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
-        onsetEvent.setAai(new HashMap<>());
-        onsetEvent.getAai().put(VNF_NAME, ONSET_ONE);
-        onsetEvent.getAai().put(VSERVER_NAME, "testVserverName");
-
-        ControlLoopEventManager manager = new ControlLoopEventManager(
-            onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestId());
-        VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        Policy policy = manager.getProcessor().getCurrentPolicy();
-        ControlLoopOperationManager clom =
-            new ControlLoopOperationManager(onsetEvent, policy, manager);
-        assertNotNull(clom);
-
-        assertNull(clom.onResponse(null));
-
-        Response appcResponse = new Response();
-        CommonHeader commonHeader = new CommonHeader();
-        appcResponse.setCommonHeader(commonHeader);
-        assertEquals(PolicyResult.FAILURE_EXCEPTION, clom.onResponse(appcResponse));
-
-        commonHeader.setSubRequestId("12345");
-        appcResponse.setStatus(null);
-        assertEquals(PolicyResult.FAILURE_EXCEPTION, clom.onResponse(appcResponse));
-
-        ResponseStatus responseStatus = new ResponseStatus();
-        appcResponse.setStatus(responseStatus);
-        assertEquals(PolicyResult.FAILURE_EXCEPTION, clom.onResponse(appcResponse));
-
-        responseStatus.setCode(0);
-        assertEquals(PolicyResult.FAILURE_EXCEPTION, clom.onResponse(appcResponse));
-
-        responseStatus.setCode(ResponseCode.ACCEPT.getValue());
-        assertEquals(null, clom.onResponse(appcResponse));
-
-        responseStatus.setCode(ResponseCode.ERROR.getValue());
-        assertEquals(PolicyResult.FAILURE_EXCEPTION, clom.onResponse(appcResponse));
-
-        responseStatus.setCode(ResponseCode.FAILURE.getValue());
-        assertEquals(PolicyResult.FAILURE, clom.onResponse(appcResponse));
-
-        responseStatus.setCode(ResponseCode.REJECT.getValue());
-        assertEquals(PolicyResult.FAILURE_EXCEPTION, clom.onResponse(appcResponse));
-
-        responseStatus.setCode(ResponseCode.SUCCESS.getValue());
-        assertEquals(PolicyResult.SUCCESS, clom.onResponse(appcResponse));
-
-        AppcLcmDmaapWrapper dmaapWrapper = new AppcLcmDmaapWrapper();
-        AppcLcmBody body = new AppcLcmBody();
-        AppcLcmOutput output = new AppcLcmOutput();
-        AppcLcmCommonHeader lcmCh = new AppcLcmCommonHeader();
-        output.setCommonHeader(lcmCh);
-        body.setOutput(output);
-        dmaapWrapper.setBody(body);
-
-        lcmCh.setSubRequestId("NotANumber");
-        assertEquals(PolicyResult.FAILURE_EXCEPTION, clom.onResponse(dmaapWrapper));
-
-        lcmCh.setSubRequestId("12345");
-        assertEquals(PolicyResult.FAILURE_EXCEPTION, clom.onResponse(dmaapWrapper));
-
-        SoResponse soResponse = new SoResponse();
-        SoResponseWrapper soRw = new SoResponseWrapper(soResponse, null);
-
-        soResponse.setHttpResponseCode(200);
-        assertEquals(PolicyResult.SUCCESS, clom.onResponse(soRw));
-
-        soResponse.setHttpResponseCode(202);
-        assertEquals(PolicyResult.SUCCESS, clom.onResponse(soRw));
-
-        soResponse.setHttpResponseCode(500);
-        assertEquals(PolicyResult.FAILURE, clom.onResponse(soRw));
-
-        VfcResponse vfcResponse = new VfcResponse();
-        VfcResponseDescriptor responseDescriptor = new VfcResponseDescriptor();
-        vfcResponse.setResponseDescriptor(responseDescriptor);
-
-        responseDescriptor.setStatus("finished");
-        assertEquals(PolicyResult.SUCCESS, clom.onResponse(vfcResponse));
-
-        responseDescriptor.setStatus("unfinished");
-        assertEquals(PolicyResult.FAILURE, clom.onResponse(vfcResponse));
-    }
-
-    @Test
-    public void testCompleteOperation() throws ControlLoopException, AaiException, IOException {
-        InputStream is = new FileInputStream(new File(TEST_YAML));
-        final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
-
-        UUID requestId = UUID.randomUUID();
-        VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
-        onsetEvent.setClosedLoopControlName(TWO_ONSET_TEST);
-        onsetEvent.setRequestId(requestId);
-        onsetEvent.setTarget(VNF_ID);
-        onsetEvent.setTargetType(ControlLoopTargetType.VNF);
-        onsetEvent.setClosedLoopAlarmStart(Instant.now());
-        onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
-        onsetEvent.setAai(new HashMap<>());
-        onsetEvent.getAai().put(VNF_NAME, ONSET_ONE);
-        onsetEvent.getAai().put(VSERVER_NAME, "testVserverName");
-
-        ControlLoopEventManager manager = new ControlLoopEventManager(
-            onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestId());
-        VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        Policy policy = manager.getProcessor().getCurrentPolicy();
-        ControlLoopOperationManager clom =
-            new ControlLoopOperationManager(onsetEvent, policy, manager);
-        assertNotNull(clom);
-
-        clom.startOperation(onsetEvent);
-
-        SoResponse soResponse = new SoResponse();
-        final SoResponseWrapper soRw = new SoResponseWrapper(soResponse, null);
-
-        PolicyEngineConstants.getManager().setEnvironmentProperty("guard.disabled", "false");
-        PolicyEngineConstants.getManager().setEnvironmentProperty(
-            org.onap.policy.guard.Util.ONAP_KEY_URL, "http://somewhere.over.the.rainbow");
-        PolicyEngineConstants.getManager()
-            .setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_USER, DOROTHY);
-        PolicyEngineConstants.getManager()
-            .setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_PASS, "Toto");
-
-        assertEquals(PolicyResult.FAILURE, clom.onResponse(soRw));
-
-        System.setProperty(OPERATIONS_HISTORY_PU, OPERATIONS_HISTORY_PU_TEST);
-        assertEquals(PolicyResult.FAILURE, clom.onResponse(soRw));
-    }
-
-    @Test
-    public void testStartCdsOperation() throws ControlLoopException, IOException {
-
-        // Prepare
-        String yamlString;
-        try (InputStream is = new FileInputStream(new File(TEST_CDS_YAML))) {
-            yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
-        }
-
-        UUID requestId = UUID.randomUUID();
-        VirtualControlLoopEvent event = new VirtualControlLoopEvent();
-        event.setClosedLoopControlName(TWO_ONSET_TEST);
-        event.setRequestId(requestId);
-        event.setTarget(VNF_ID);
-        event.setTargetType(ControlLoopTargetType.VNF);
-        event.setClosedLoopAlarmStart(Instant.now());
-        event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
-        event.setAai(new HashMap<>());
-        event.getAai().put(VNF_NAME, ONSET_ONE);
-        event.getAai().put(VSERVER_NAME, "OzVServer");
-
-        ControlLoopEventManager eventManager =
-            new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
-        VirtualControlLoopNotification notification = eventManager.activate(yamlString, event);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        Policy policy = eventManager.getProcessor().getCurrentPolicy();
-        ControlLoopOperationManager operationManager =
-            new ControlLoopOperationManager(event, policy, eventManager);
-
-        // Run
-        Object result = operationManager.startOperation(event);
-
-        // Verify
-        assertNotNull(result);
-        assertTrue(result instanceof ExecutionServiceInput);
-        ExecutionServiceInput request = (ExecutionServiceInput) result;
-        logger.debug("request: " + request);
-
-    }
-
-    @Test
-    public void testCommitAbatement() throws Exception {
-
-        String yamlString;
-        try (InputStream is = new FileInputStream(new File(TEST_YAML))) {
-            yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
-        }
-
-        UUID requestId = UUID.randomUUID();
-        VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
-        onsetEvent.setClosedLoopControlName(TWO_ONSET_TEST);
-        onsetEvent.setRequestId(requestId);
-        onsetEvent.setTarget(VNF_ID);
-        onsetEvent.setTargetType(ControlLoopTargetType.VNF);
-        onsetEvent.setClosedLoopAlarmStart(Instant.now());
-        onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
-        onsetEvent.setAai(new HashMap<>());
-        onsetEvent.getAai().put(VNF_NAME, ONSET_ONE);
-        onsetEvent.getAai().put(VSERVER_NAME, "testVserverName");
-
-        ControlLoopEventManager manager = new ControlLoopEventManager(
-            onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestId());
-        VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        Policy policy = manager.getProcessor().getCurrentPolicy();
-        ControlLoopOperationManager clom =
-            new ControlLoopOperationManager(onsetEvent, policy, manager);
-        assertNotNull(clom);
-
-        clom.startOperation(onsetEvent);
-
-        int numEventsBefore = getCount();
-        logger.info("numEventsBefore={}", numEventsBefore);
-
-        clom.commitAbatement("Test message", "TEST_RESULT");
-
-        int numEventsAfter = getCount();
-        logger.info("numEventsAfter={}", numEventsAfter);
-
-        int diff = numEventsAfter - numEventsBefore;
-        assertEquals(1, diff);
-    }
-
-    @Test
-    public void testSerialization() throws Exception {
-        InputStream is = new FileInputStream(new File(TEST_YAML));
-        final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
-
-        UUID requestId = UUID.randomUUID();
-        VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent();
-        onsetEvent.setClosedLoopControlName(TWO_ONSET_TEST);
-        onsetEvent.setRequestId(requestId);
-        onsetEvent.setTarget(VNF_ID);
-        onsetEvent.setTargetType(ControlLoopTargetType.VNF);
-        onsetEvent.setClosedLoopAlarmStart(Instant.now());
-        onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET);
-        onsetEvent.setAai(new HashMap<>());
-        onsetEvent.getAai().put(VNF_NAME, ONSET_ONE);
-        onsetEvent.getAai().put(VSERVER_NAME, "testVserverName");
-
-        ControlLoopEventManager manager = new ControlLoopEventManager(
-            onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestId());
-        VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent);
-        assertNotNull(notification);
-        assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification());
-
-        Policy policy = manager.getProcessor().getCurrentPolicy();
-        ControlLoopOperationManager clom =
-            new ControlLoopOperationManager(onsetEvent, policy, manager);
-        assertNotNull(clom);
-
-        clom.startOperation(onsetEvent);
-        assertTrue(clom.isOperationRunning());
-
-        clom = Serializer.roundTrip(clom);
-        assertNotNull(clom);
-        assertTrue(clom.isOperationRunning());
-
-        SoResponse soResponse = new SoResponse();
-        final SoResponseWrapper soRw = new SoResponseWrapper(soResponse, null);
-
-        PolicyEngineConstants.getManager().setEnvironmentProperty("guard.disabled", "false");
-        PolicyEngineConstants.getManager().setEnvironmentProperty(
-            org.onap.policy.guard.Util.ONAP_KEY_URL, "http://somewhere.over.the.rainbow");
-        PolicyEngineConstants.getManager()
-            .setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_USER, DOROTHY);
-        PolicyEngineConstants.getManager()
-            .setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_PASS, "Toto");
-
-        assertEquals(PolicyResult.FAILURE, clom.onResponse(soRw));
-        assertFalse(clom.isOperationRunning());
-        assertEquals(1, clom.getHistory().size());
-
-        clom = Serializer.roundTrip(clom);
-        assertNotNull(clom);
-        assertFalse(clom.isOperationRunning());
-        assertEquals(1, clom.getHistory().size());
-
-        System.setProperty(OPERATIONS_HISTORY_PU, OPERATIONS_HISTORY_PU_TEST);
-        assertEquals(PolicyResult.FAILURE, clom.onResponse(soRw));
-
-        clom = Serializer.roundTrip(clom);
-        assertNotNull(clom);
-        assertFalse(clom.isOperationRunning());
-        assertEquals(1, clom.getHistory().size());
-    }
-}
diff --git a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/LockCallbackWorkingMemoryTest.java b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/LockCallbackWorkingMemoryTest.java
deleted file mode 100644 (file)
index 18ab15b..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2019 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.eventmanager;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertSame;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import org.drools.core.WorkingMemory;
-import org.junit.Before;
-import org.junit.Test;
-import org.kie.api.runtime.rule.FactHandle;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.onap.policy.drools.core.lock.Lock;
-
-public class LockCallbackWorkingMemoryTest {
-    private static final String MY_NAME = "my-name";
-
-    @Mock
-    private WorkingMemory workingMemory;
-
-    @Mock
-    private Lock lock;
-
-    @Mock
-    private FactHandle fact;
-
-    private LockCallbackWorkingMemory callback;
-
-
-    /**
-     * Initializes mocks and creates a call-back.
-     */
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-
-        when(workingMemory.getFactHandle(lock)).thenReturn(fact);
-
-        callback = new LockCallbackWorkingMemory(MY_NAME, workingMemory);
-    }
-
-    @Test
-    public void testLockCallbackWorkingMemory() {
-        assertEquals(MY_NAME, callback.getName());
-        assertSame(workingMemory, callback.getWorkingMemory());
-    }
-
-    @Test
-    public void testLockAvailable() {
-        callback.lockAvailable(lock);
-        verify(workingMemory).update(fact, lock);
-
-        // "remove" from working memory
-        when(workingMemory.getFactHandle(lock)).thenReturn(null);
-        callback.lockAvailable(lock);
-
-        // should be no additional calls
-        verify(workingMemory).update(any(), any());
-    }
-
-    @Test
-    public void testLockUnavailable() {
-        callback.lockUnavailable(lock);
-        verify(workingMemory).update(fact, lock);
-
-        // "remove" from working memory
-        when(workingMemory.getFactHandle(lock)).thenReturn(null);
-        callback.lockUnavailable(lock);
-
-        // should be no additional calls
-        verify(workingMemory).update(any(), any());
-    }
-
-}
diff --git a/controlloop/common/eventmanager/src/test/java/org/onap/policy/drools/DroolsPolicyEngineTest.java b/controlloop/common/eventmanager/src/test/java/org/onap/policy/drools/DroolsPolicyEngineTest.java
deleted file mode 100644 (file)
index 3b61faa..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * eventmanager
- * ================================================================================
- * Copyright (C) 2018 Ericsson. All rights reserved.
- * Modifications Copyright (C) 2019 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.drools;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import org.junit.Test;
-import org.onap.policy.appc.CommonHeader;
-import org.onap.policy.appc.Request;
-import org.onap.policy.appclcm.AppcLcmBody;
-import org.onap.policy.appclcm.AppcLcmCommonHeader;
-import org.onap.policy.appclcm.AppcLcmDmaapWrapper;
-import org.onap.policy.appclcm.AppcLcmInput;
-import org.onap.policy.controlloop.ControlLoopNotification;
-import org.onap.policy.controlloop.VirtualControlLoopNotification;
-import org.onap.policy.drools.impl.PolicyEngineJUnitImpl;
-
-public class DroolsPolicyEngineTest {
-    private static final String TOPIC = "TheWizardOfOz";
-    private static final String OMNI_BUS = "OmniBus";
-
-    @Test
-    public void testDroolsPolicyEngine() {
-        PolicyEngineJUnitImpl pe = new PolicyEngineJUnitImpl();
-        assertNotNull(pe);
-
-        pe.addListener(new TestPolicyEngineListener());
-        pe.notifyListeners(TOPIC);
-
-        pe.subscribe(OMNI_BUS, TOPIC);
-
-        pe.deliver(OMNI_BUS, TOPIC, "Dorothy");
-
-        pe.subscribe(OMNI_BUS, TOPIC);
-        pe.subscribe(OMNI_BUS, "ThisTopicDoesNotExist");
-
-        ControlLoopNotification notification = new VirtualControlLoopNotification();
-        pe.deliver(OMNI_BUS, TOPIC, notification);
-
-        Request request = new Request();
-        request.setCommonHeader(new CommonHeader());
-        request.getCommonHeader().setSubRequestId("12321");
-        pe.deliver(OMNI_BUS, TOPIC, request);
-
-        AppcLcmDmaapWrapper lcmRw = new AppcLcmDmaapWrapper();
-        lcmRw.setBody(new AppcLcmBody());
-        lcmRw.getBody().setInput(new AppcLcmInput());
-        lcmRw.getBody().getInput().setCommonHeader(new AppcLcmCommonHeader());
-        lcmRw.getBody().getInput().getCommonHeader().setSubRequestId("54321");
-        pe.deliver(OMNI_BUS, TOPIC, lcmRw);
-    }
-
-    private class TestPolicyEngineListener implements PolicyEngineListener {
-        @Override
-        public void newEventNotification(String topic) {
-            assertEquals(TOPIC, topic);
-        }
-    }
-}
index 965e38d..2fcb0de 100644 (file)
             <artifactId>eventmanager</artifactId>
             <version>${project.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
-            <artifactId>guard</artifactId>
-            <version>${project.version}</version>
-        </dependency>
         <dependency>
             <groupId>org.onap.policy.models.policy-models-interactions.model-actors</groupId>
             <artifactId>actorServiceProvider</artifactId>
index b733b01..ba78856 100644 (file)
@@ -38,8 +38,8 @@ import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.Status;
 import org.onap.policy.aai.AaiManager;
 import org.onap.policy.controlloop.drl.legacy.ControlLoopParams;
-import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager;
 import org.onap.policy.drools.apps.controlloop.feature.management.ControlLoopManagementFeature;
+import org.onap.policy.drools.system.PolicyEngine;
 import org.onap.policy.drools.system.PolicyEngineConstants;
 import org.onap.policy.rest.RestManager;
 import org.slf4j.Logger;
@@ -124,16 +124,15 @@ public class RestControlLoopManager {
     @Path("engine/tools/controlloops/aai/customQuery/{vserverId}")
     @ApiOperation(value = "AAI Custom Query")
     public Response aaiCustomQuery(@ApiParam(value = "vserver Identifier") String vserverId) {
+        PolicyEngine mgr = PolicyEngineConstants.getManager();
+
         return Response
             .status(Status.OK)
             .entity(new AaiManager(new RestManager())
                 .getCustomQueryResponse(
-                    PolicyEngineConstants.getManager()
-                                    .getEnvironmentProperty(ControlLoopEventManager.AAI_URL),
-                    PolicyEngineConstants.getManager().getEnvironmentProperty(
-                                    ControlLoopEventManager.AAI_USERNAME_PROPERTY),
-                    PolicyEngineConstants.getManager().getEnvironmentProperty(
-                                    ControlLoopEventManager.AAI_PASS_PROPERTY),
+                    mgr.getEnvironmentProperty("aai.url"),
+                    mgr.getEnvironmentProperty("aai.username"),
+                    mgr.getEnvironmentProperty("aai.password"),
                     UUID.randomUUID(),
                     vserverId))
             .build();
index 2a5bffc..94aa224 100644 (file)
@@ -39,10 +39,10 @@ import org.kie.api.builder.ReleaseId;
 import org.onap.policy.common.endpoints.http.client.HttpClientFactoryInstance;
 import org.onap.policy.common.utils.coder.CoderException;
 import org.onap.policy.common.utils.network.NetworkUtil;
-import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager;
 import org.onap.policy.drools.persistence.SystemPersistenceConstants;
 import org.onap.policy.drools.properties.DroolsPropertyConstants;
 import org.onap.policy.drools.system.PolicyControllerConstants;
+import org.onap.policy.drools.system.PolicyEngine;
 import org.onap.policy.drools.system.PolicyEngineConstants;
 import org.onap.policy.drools.util.KieUtils;
 import org.onap.policy.drools.utils.logging.LoggerUtil;
@@ -122,12 +122,10 @@ public class RestControlLoopManagerTest {
 
         await().atMost(1, TimeUnit.MINUTES).until(isContainerAlive());
 
-        PolicyEngineConstants.getManager().setEnvironmentProperty(ControlLoopEventManager.AAI_URL,
-            "http://localhost:6666");
-        PolicyEngineConstants.getManager()
-            .setEnvironmentProperty(ControlLoopEventManager.AAI_USERNAME_PROPERTY, "AAI");
-        PolicyEngineConstants.getManager()
-            .setEnvironmentProperty(ControlLoopEventManager.AAI_PASS_PROPERTY, "AAI");
+        PolicyEngine mgr = PolicyEngineConstants.getManager();
+        mgr.setEnvironmentProperty("aai.url", "http://localhost:6666");
+        mgr.setEnvironmentProperty("aai.username", "AAI");
+        mgr.setEnvironmentProperty("aai.password", "AAI");
 
         Util.buildAaiSim();
     }
diff --git a/controlloop/common/feature-controlloop-usecases/pom.xml b/controlloop/common/feature-controlloop-usecases/pom.xml
deleted file mode 100644 (file)
index b8351d6..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-<!--
-  ============LICENSE_START=======================================================
-  ONAP
-  ================================================================================
-  Copyright (C) 2018-2020 AT&T Intellectual Property. All rights reserved.
-  Modifications Copyright (C) 2020 Bell Canada.
-  ================================================================================
-  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=========================================================
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-        <groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
-        <artifactId>drools-applications-common</artifactId>
-        <version>1.7.1-SNAPSHOT</version>
-    </parent>
-
-    <artifactId>feature-controlloop-usecases</artifactId>
-
-    <description>
-        Load Experimental Usecases Control Loop Use Cases Controller as a feature.
-    </description>
-
-    <build>
-        <resources>
-            <resource>
-                <directory>src/main/feature</directory>
-                <filtering>true</filtering>
-            </resource>
-            <resource>
-                <directory>src/main/resources</directory>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>zipfile</id>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <phase>package</phase>
-                        <configuration>
-                            <attach>true</attach>
-                            <finalName>${project.artifactId}-${project.version}</finalName>
-                            <descriptors>
-                                <descriptor>src/assembly/assemble_zip.xml</descriptor>
-                            </descriptors>
-                            <appendAssemblyId>false</appendAssemblyId>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>copy-dependencies</id>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                        <phase>prepare-package</phase>
-                        <configuration>
-                            <outputDirectory>${project.build.directory}/assembly/lib</outputDirectory>
-                            <overWriteReleases>false</overWriteReleases>
-                            <overWriteSnapshots>true</overWriteSnapshots>
-                            <overWriteIfNewer>true</overWriteIfNewer>
-                            <useRepositoryLayout>false</useRepositoryLayout>
-                            <addParentPoms>false</addParentPoms>
-                            <copyPom>false</copyPom>
-                            <includeScope>runtime</includeScope>
-                            <excludeTransitive>true</excludeTransitive>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
-            <artifactId>controller-usecases</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.onap.policy.drools-pdp</groupId>
-            <artifactId>policy-management</artifactId>
-            <version>${version.policy.drools-pdp}</version>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-</project>
diff --git a/controlloop/common/feature-controlloop-usecases/src/assembly/assemble_zip.xml b/controlloop/common/feature-controlloop-usecases/src/assembly/assemble_zip.xml
deleted file mode 100644 (file)
index c284ede..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-<!--
-  ============LICENSE_START=======================================================
-  ONAP
-  ================================================================================
-  Copyright (C) 2018-2019 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=========================================================
-  -->
-
-<!-- Defines how we build the .zip file which is our distribution. -->
-
-<assembly
-       xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
-       <id>feature-controlloop-usecases-package</id>
-       <formats>
-               <format>zip</format>
-       </formats>
-
-       <includeBaseDirectory>false</includeBaseDirectory>
-
-       <fileSets>
-               <fileSet>
-                       <directory>target</directory>
-                       <outputDirectory>lib/feature</outputDirectory>
-                       <includes>
-                               <include>feature-controlloop-usecases-${project.version}.jar</include>
-                       </includes>
-               </fileSet>
-               <fileSet>
-                       <directory>target/assembly/lib</directory>
-                       <outputDirectory>artifacts</outputDirectory>
-                       <includes>
-                               <include>controller-usecases-${project.version}.jar</include>
-                       </includes>
-               </fileSet>
-               <fileSet>
-                       <directory>target/assembly/lib</directory>
-                       <outputDirectory>lib/dependencies</outputDirectory>
-                       <includes>
-                               <include>*.jar</include>
-                       </includes>
-                       <excludes>
-                               <exclude>controller-usecases-${project.version}.jar</exclude>
-                       </excludes>
-               </fileSet>
-               <fileSet>
-                       <directory>target/classes/config</directory>
-                       <outputDirectory>config</outputDirectory>
-                       <fileMode>0644</fileMode>
-                       <excludes/>
-               </fileSet>
-               <fileSet>
-                       <directory>src/main/feature/bin</directory>
-                       <outputDirectory>bin</outputDirectory>
-                       <fileMode>0755</fileMode>
-                       <excludes/>
-               </fileSet>
-               <fileSet>
-                       <directory>src/main/feature/db</directory>
-                       <outputDirectory>db</outputDirectory>
-                       <fileMode>0744</fileMode>
-                       <excludes/>
-               </fileSet>
-               <fileSet>
-                       <directory>src/main/feature/install</directory>
-                       <outputDirectory>install</outputDirectory>
-                       <fileMode>0755</fileMode>
-                       <excludes/>
-               </fileSet>
-       </fileSets>
-
-</assembly>
diff --git a/controlloop/common/feature-controlloop-usecases/src/main/feature/config/logback-include-usecases.xml b/controlloop/common/feature-controlloop-usecases/src/main/feature/config/logback-include-usecases.xml
deleted file mode 100644 (file)
index 46f2f0c..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
-  ============LICENSE_START=======================================================
-  feature-controlloop-usecases
-  ================================================================================
-  Copyright (C) 2019 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=========================================================
-  -->
-
-<!--
-  The logger configurations in this file are for each individual controller
-  to have their own network logger for topic traffic. This is an extension of
-  logback.xml or logback-eelf.xml.
-
-  NOTE: Each logger MUST contain the same name as the control loop's controller.  
--->
-<included>
-
-    <property name="logDir" value="${POLICY_LOGS}" />
-    <property name="usecasesLog" value="usecases-network" />
-    <property name="networkPattern" value="[%d{yyyy-MM-dd'T'HH:mm:ss.SSS+00:00, UTC}|%t]%m%n" />
-
-    <!-- Usecases Network Logging Properties -->
-    <appender name="UsecasesOut" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${logDir}/${usecasesLog}.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <fileNamePattern>${logDir}/${usecasesLog}.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
-            <maxFileSize>50MB</maxFileSize>
-            <maxHistory>30</maxHistory>
-            <totalSizeCap>10GB</totalSizeCap>
-        </rollingPolicy>
-        <encoder>
-            <pattern>${networkPattern}</pattern>
-        </encoder>
-    </appender>
-
-    <appender name="AsyncUsecasesOut" class="ch.qos.logback.classic.AsyncAppender">
-        <appender-ref ref="UsecasesOut" />
-    </appender>
-
-    <logger name="usecases" level="INFO" additivity="false">
-        <appender-ref ref="AsyncUsecasesOut" />
-    </logger>
-
-</included>
\ No newline at end of file
diff --git a/controlloop/common/feature-controlloop-usecases/src/main/feature/config/usecases-controller.properties b/controlloop/common/feature-controlloop-usecases/src/main/feature/config/usecases-controller.properties
deleted file mode 100644 (file)
index 048130d..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-###
-# ============LICENSE_START=======================================================
-# ONAP
-# ================================================================================
-# Copyright (C) 2018-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=========================================================
-###
-
-controller.name=usecases
-
-dmaap.source.topics=DCAE_TOPIC,APPC-CL,APPC-LCM-WRITE,SDNR-CL-RSP
-dmaap.sink.topics=APPC-CL,APPC-LCM-READ,POLICY-CL-MGT,SDNR-CL,DCAE_CL_RSP
-
-dmaap.source.topics.DCAE_TOPIC.events=\
-    org.onap.policy.controlloop.CanonicalOnset,org.onap.policy.controlloop.CanonicalAbated
-dmaap.source.topics.DCAE_TOPIC.events.org.onap.policy.controlloop.CanonicalOnset.\
-    filter=[?($.closedLoopEventStatus == 'ONSET')]
-dmaap.source.topics.DCAE_TOPIC.events.org.onap.policy.controlloop.CanonicalAbated.\
-    filter=[?($.closedLoopEventStatus == 'ABATED')]
-dmaap.source.topics.DCAE_TOPIC.events.custom.gson=org.onap.policy.controlloop.util.Serialization,gson
-
-dmaap.source.topics.APPC-CL.events=org.onap.policy.appc.Response
-dmaap.source.topics.APPC-CL.events.org.onap.policy.appc.Response.filter=[?($.CommonHeader && $.Status)]
-dmaap.source.topics.APPC-CL.events.custom.gson=org.onap.policy.appc.util.Serialization,gsonPretty
-
-dmaap.source.topics.APPC-LCM-WRITE.events=org.onap.policy.appclcm.AppcLcmDmaapWrapper
-dmaap.source.topics.APPC-LCM-WRITE.events.org.onap.policy.appclcm.AppcLcmDmaapWrapper.filter=[?($.type == 'response')]
-dmaap.source.topics.APPC-LCM-WRITE.events.custom.gson=org.onap.policy.appclcm.util.Serialization,gson
-
-dmaap.sink.topics.APPC-CL.events=org.onap.policy.appc.Request
-dmaap.sink.topics.APPC-CL.events.custom.gson=org.onap.policy.appc.util.Serialization,gsonPretty
-
-dmaap.sink.topics.APPC-LCM-READ.events=org.onap.policy.appclcm.AppcLcmDmaapWrapper
-dmaap.sink.topics.APPC-LCM-READ.events.custom.gson=org.onap.policy.appclcm.util.Serialization,gson
-
-dmaap.sink.topics.POLICY-CL-MGT.events=org.onap.policy.controlloop.VirtualControlLoopNotification
-dmaap.sink.topics.POLICY-CL-MGT.events.custom.gson=org.onap.policy.controlloop.util.Serialization,gsonPretty
-
-dmaap.sink.topics.SDNR-CL.events=org.onap.policy.sdnr.PciRequestWrapper
-dmaap.sink.topics.SDNR-CL.events.custom.gson=org.onap.policy.sdnr.util.Serialization,gson
-
-dmaap.sink.topics.DCAE_CL_RSP.events=org.onap.policy.controlloop.ControlLoopResponse
-dmaap.sink.topics.DCAE_CL_RSP.events.custom.gson=org.onap.policy.controlloop.util.Serialization,gsonPretty
-
-dmaap.source.topics.SDNR-CL-RSP.events=org.onap.policy.sdnr.PciResponseWrapper
-dmaap.source.topics.SDNR-CL-RSP.events.org.onap.policy.sdnr.PciResponseWrapper.filter=[?($.type == 'response')]
-dmaap.source.topics.SDNR-CL-RSP.events.custom.gson=org.onap.policy.sdnr.util.Serialization,gson
-
-rules.groupId=${project.groupId}
-rules.artifactId=controller-usecases
-rules.version=${project.version}
-
diff --git a/controlloop/common/feature-controlloop-usecases/src/main/java/org/onap/policy/drools/apps/controlloop/feature/usecases/UsecasesFeature.java b/controlloop/common/feature-controlloop-usecases/src/main/java/org/onap/policy/drools/apps/controlloop/feature/usecases/UsecasesFeature.java
deleted file mode 100644 (file)
index 12c496f..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2017-2019 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.drools.apps.controlloop.feature.usecases;
-
-import org.onap.policy.drools.features.PolicyEngineFeatureApi;
-
-/**
- * Usecases installation as a feature saves time
- * loading the Usecases controller at runtime over the
- * usual installation from nexus.  It also reduces
- * potential for errors in the pom.xml generated in
- * the brmsgw side.
- *
- * <p>There is no impact on other components as the brmsgw
- * etc .. they will continue operating as usual.
- *
- * <p>This class will be expanded in the future for additional
- * functionality
- *
- */
-public class UsecasesFeature implements PolicyEngineFeatureApi {
-
-    public static final int SEQNO = 1000;
-
-    @Override
-    public int getSequenceNumber() {
-        return SEQNO;
-    }
-
-}
diff --git a/controlloop/common/feature-controlloop-usecases/src/main/resources/META-INF/services/org.onap.policy.drools.features.PolicyEngineFeatureApi b/controlloop/common/feature-controlloop-usecases/src/main/resources/META-INF/services/org.onap.policy.drools.features.PolicyEngineFeatureApi
deleted file mode 100644 (file)
index 3a82639..0000000
+++ /dev/null
@@ -1 +0,0 @@
-org.onap.policy.drools.apps.controlloop.feature.usecases.UsecasesFeature
diff --git a/controlloop/common/feature-controlloop-usecases/src/test/java/org/onap/policy/drools/apps/controlloop/feature/usecases/UsecasesFeatureTest.java b/controlloop/common/feature-controlloop-usecases/src/test/java/org/onap/policy/drools/apps/controlloop/feature/usecases/UsecasesFeatureTest.java
deleted file mode 100644 (file)
index ed1bba2..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * ONAP
- * ================================================================================
- * Copyright (C) 2018 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.drools.apps.controlloop.feature.usecases;
-
-import static org.junit.Assert.assertEquals;
-
-public class UsecasesFeatureTest {
-
-    @org.junit.Test
-    public void getSequenceNumber() {
-        assertEquals(UsecasesFeature.SEQNO, new UsecasesFeature().getSequenceNumber());
-    }
-}
diff --git a/controlloop/common/guard/pom.xml b/controlloop/common/guard/pom.xml
deleted file mode 100644 (file)
index 146e43b..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-<!--
-  ============LICENSE_START=======================================================
-  drools-pdp-apps
-  ================================================================================
-  Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
-  Modifications Copyright (C) 2020 Bell Canada.
-  Modifications Copyright (C) 2020 Nordix Foundation.
-  ================================================================================
-  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=========================================================
-  -->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
-    <artifactId>drools-applications-common</artifactId>
-    <version>1.7.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>guard</artifactId>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.onap.policy.models.policy-models-interactions</groupId>
-      <artifactId>model-yaml</artifactId>
-      <version>${policy.models.version}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-        <groupId>com.att.research.xacml</groupId>
-        <artifactId>xacml-pdp</artifactId>
-        <version>2.2.0</version>
-        <exclusions>
-            <!--
-                Exclude jars with an older version or that are insecure and not needed.
-             -->
-            <exclusion>
-                <artifactId>commons-codec</artifactId>
-                <groupId>commons-codec</groupId>
-            </exclusion>
-            <exclusion>
-                <artifactId>commons-logging</artifactId>
-                <groupId>commons-logging</groupId>
-            </exclusion>
-            <exclusion>
-                <artifactId>guava</artifactId>
-                <groupId>com.google.guava</groupId>
-            </exclusion>
-            <exclusion>
-                <artifactId>commons-lang3</artifactId>
-                <groupId>org.apache.commons</groupId>
-            </exclusion>
-            <exclusion>
-                <artifactId>jackson-databind</artifactId>
-                <groupId>com.fasterxml.jackson.core</groupId>
-            </exclusion>
-            <exclusion>
-                <artifactId>commons-collections</artifactId>
-                <groupId>commons-collections</groupId>
-            </exclusion>
-            <exclusion>
-                <artifactId>commons-lang</artifactId>
-                <groupId>commons-lang</groupId>
-            </exclusion>
-        </exclusions>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.httpcomponents</groupId>
-      <artifactId>httpclient</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.drools</groupId>
-      <artifactId>drools-core</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.eclipse.persistence</groupId>
-      <artifactId>org.eclipse.persistence.jpa</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.onap.policy.common</groupId>
-      <artifactId>policy-endpoints</artifactId>
-      <version>${version.policy.common}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.onap.policy.drools-pdp</groupId>
-      <artifactId>policy-management</artifactId>
-      <version>${version.policy.drools-pdp}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.onap.policy.models.policy-models-interactions</groupId>
-      <artifactId>simulators</artifactId>
-      <version>${policy.models.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.onap.policy.models</groupId>
-      <artifactId>policy-models-decisions</artifactId>
-      <version>${policy.models.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
-      <artifactId>rest</artifactId>
-      <version>${policy.models.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>com.h2database</groupId>
-      <artifactId>h2</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-checkstyle-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>onap-java-style</id>
-                        <goals>
-                            <goal>check</goal>
-                        </goals>
-                        <phase>process-sources</phase>
-                        <configuration>
-                            <!-- Use Google Java Style Guide:
-                            https://github.com/checkstyle/checkstyle/blob/master/src/main/resources/google_checks.xml
-                            with minor changes -->
-                            <configLocation>onap-checkstyle/onap-java-style.xml</configLocation>
-                            <!-- <sourceDirectory> is needed so that checkstyle ignores the generated sources directory -->
-                            <sourceDirectories>${project.build.sourceDirectory}</sourceDirectories>
-                            <includeResources>true</includeResources>
-                            <includeTestSourceDirectory>true</includeTestSourceDirectory>
-                            <includeTestResources>true</includeTestResources>
-                            <excludes>
-                            </excludes>
-                            <consoleOutput>true</consoleOutput>
-                            <failsOnViolation>true</failsOnViolation>
-                            <violationSeverity>warning</violationSeverity>
-                        </configuration>
-                    </execution>
-                </executions>
-                <dependencies>
-                    <dependency>
-                        <groupId>org.onap.oparent</groupId>
-                        <artifactId>checkstyle</artifactId>
-                        <version>${oparent.version}</version>
-                        <scope>compile</scope>
-                    </dependency>
-                </dependencies>
-            </plugin>
-        </plugins>
-    </build>
-</project>
index 64f99bf..5350d7f 100644 (file)
   <artifactId>drools-applications-common</artifactId>
 
   <modules>
-    <module>guard</module>
     <module>coordination</module>
     <module>eventmanager</module>
     <module>rules-test</module>
     <module>controller-frankfurt</module>
-    <module>controller-usecases</module>
     <module>feature-controlloop-utils</module>
     <module>feature-controlloop-trans</module>
     <module>feature-controlloop-management</module>
     <module>feature-controlloop-frankfurt</module>
-    <module>feature-controlloop-usecases</module>
   </modules>
 
 
index 2e15895..62632e9 100644 (file)
@@ -51,7 +51,6 @@ import org.onap.policy.common.utils.coder.StandardCoder;
 import org.onap.policy.common.utils.resources.ResourceUtils;
 import org.onap.policy.controlloop.ControlLoopEvent;
 import org.onap.policy.controlloop.drl.legacy.ControlLoopParams;
-import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager;
 import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager2;
 import org.onap.policy.drools.controller.DroolsController;
 import org.onap.policy.drools.persistence.SystemPersistence;
@@ -165,14 +164,6 @@ public class Rules {
             await(clazz.getSimpleName()).atMost(5, TimeUnit.SECONDS)
                             .until(() -> drools.facts(controllerName, clazz).isEmpty());
         }
-
-        /*
-         * We can't delete this class directly; we have to wait for the rules to clean it
-         * up, because the rule also cleans up a number of other associated objects.
-         */
-        Class<?> clazz = ControlLoopEventManager.class;
-        await(clazz.getSimpleName()).atMost(5, TimeUnit.SECONDS)
-                        .until(() -> drools.facts(controllerName, clazz).isEmpty());
     }
 
     /**
index 566761e..7a4993a 100644 (file)
       <version>${project.version}</version>
     </dependency>
 
+    <dependency>
+      <groupId>org.onap.policy.models.policy-models-interactions</groupId>
+      <artifactId>model-yaml</artifactId>
+      <version>${policy.models.version}</version>
+      <scope>provided</scope>
+    </dependency>
+
     <dependency>
       <groupId>org.onap.policy.drools-pdp</groupId>
       <artifactId>policy-core</artifactId>
       <scope>provided</scope>
     </dependency>
 
-    <dependency>
-      <groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
-      <artifactId>guard</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-
     <dependency>
         <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
         <artifactId>guard</artifactId>
         <version>${policy.models.version}</version>
     </dependency>
 
+    <dependency>
+      <groupId>org.onap.policy.models</groupId>
+      <artifactId>policy-models-decisions</artifactId>
+      <version>${policy.models.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
+      <artifactId>rest</artifactId>
+      <version>${policy.models.version}</version>
+    </dependency>
+
+    <dependency>
+        <groupId>com.att.research.xacml</groupId>
+        <artifactId>xacml-pdp</artifactId>
+        <version>1.0.2</version>
+        <exclusions>
+            <!--
+                Exclude jars with an older version or that are insecure and not needed.
+             -->
+            <exclusion>
+                <artifactId>commons-codec</artifactId>
+                <groupId>commons-codec</groupId>
+            </exclusion>
+            <exclusion>
+                <artifactId>commons-logging</artifactId>
+                <groupId>commons-logging</groupId>
+            </exclusion>
+            <exclusion>
+                <artifactId>guava</artifactId>
+                <groupId>com.google.guava</groupId>
+            </exclusion>
+            <exclusion>
+                <artifactId>commons-lang3</artifactId>
+                <groupId>org.apache.commons</groupId>
+            </exclusion>
+            <exclusion>
+                <artifactId>jackson-databind</artifactId>
+                <groupId>com.fasterxml.jackson.core</groupId>
+            </exclusion>
+            <exclusion>
+                <artifactId>commons-collections</artifactId>
+                <groupId>commons-collections</groupId>
+            </exclusion>
+            <exclusion>
+                <artifactId>commons-lang</artifactId>
+                <groupId>commons-lang</groupId>
+            </exclusion>
+        </exclusions>
+    </dependency>
+
+    <dependency>
+      <groupId>org.onap.policy.models.policy-models-interactions</groupId>
+      <artifactId>simulators</artifactId>
+      <version>${policy.models.version}</version>
+      <scope>test</scope>
+    </dependency>
+
     <dependency>
       <groupId>com.h2database</groupId>
       <artifactId>h2</artifactId>
+      <scope>test</scope>
     </dependency>
 
   </dependencies>
index d41e30c..75163e2 100644 (file)
@@ -31,6 +31,7 @@ import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.Persistence;
 import org.drools.core.WorkingMemory;
+import org.eclipse.persistence.config.PersistenceUnitProperties;
 import org.onap.policy.drools.core.PolicyContainer;
 import org.onap.policy.drools.core.PolicySession;
 import org.onap.policy.drools.system.PolicyControllerConstants;
@@ -48,8 +49,6 @@ import org.slf4j.LoggerFactory;
 public class GuardContext implements Serializable {
     private static final long serialVersionUID = 1L;
 
-    private static final String ECLIPSE_LINK_KEY_DRIVER = "javax.persistence.jdbc.driver";
-
     private static Logger logger = LoggerFactory.getLogger(GuardContext.class);
 
     // object that should be serialized
@@ -158,13 +157,15 @@ public class GuardContext implements Serializable {
         // extract 'guard.java.persistence.jdbc.*' parameters,
         // which are all mandatory
         dbProperties = new Properties();
-        setProperty(dbProperties, Util.ONAP_KEY_URL, Util.ECLIPSE_LINK_KEY_URL, sb);
-        setProperty(dbProperties, Util.ONAP_KEY_USER, Util.ECLIPSE_LINK_KEY_USER, sb);
-        setProperty(dbProperties, Util.ONAP_KEY_PASS, Util.ECLIPSE_LINK_KEY_PASS, sb);
-        String driver = properties.getProperty("guard." + ECLIPSE_LINK_KEY_DRIVER);
+        setProperty(dbProperties, Util.ONAP_KEY_URL, PersistenceUnitProperties.JDBC_URL, sb);
+        setProperty(dbProperties, Util.ONAP_KEY_USER, PersistenceUnitProperties.JDBC_USER, sb);
+        setProperty(dbProperties, Util.ONAP_KEY_PASS, PersistenceUnitProperties.JDBC_PASSWORD, sb);
+        String driver = properties.getProperty("guard." + PersistenceUnitProperties.JDBC_DRIVER);
         if (driver != null) {
-            dbProperties.setProperty(ECLIPSE_LINK_KEY_DRIVER, driver);
+            dbProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, driver);
         }
+        dbProperties.setProperty(Util.PROP_GUARD_PERSISTENCE_UNIT,
+                        properties.getProperty(Util.PROP_GUARD_PERSISTENCE_UNIT, Util.PU_KEY));
 
         // if there are any errors, update 'errorMessage' & disable guard queries
         if (sb.length() != 0) {
@@ -266,7 +267,8 @@ public class GuardContext implements Serializable {
             propertiesMap.put("eclipselink.ddl-generation", "create-tables");
 
             // create entity manager factory
-            emf = Persistence.createEntityManagerFactory("OperationsHistoryPU", propertiesMap);
+            String persistenceUnit = dbProperties.getProperty(Util.PROP_GUARD_PERSISTENCE_UNIT);
+            emf = Persistence.createEntityManagerFactory(persistenceUnit, propertiesMap);
         }
 
         // create and return the 'EntityManager'
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * guard
  * ================================================================================
- * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-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.
@@ -42,14 +42,11 @@ public final class Util {
     public static final String PROP_GUARD_USER = "pdpx.username";
     public static final String PROP_GUARD_PASS = "pdpx.password";
     public static final String PROP_GUARD_DISABLED = "guard.disabled";
+    public static final String PROP_GUARD_PERSISTENCE_UNIT = "guard.persistenceUnit";
 
     /*
-     * Keys for eclipse link and ONAP properties
+     * Keys for ONAP properties
      */
-    public static final String ECLIPSE_LINK_KEY_URL = "javax.persistence.jdbc.url";
-    public static final String ECLIPSE_LINK_KEY_USER = "javax.persistence.jdbc.user";
-    public static final String ECLIPSE_LINK_KEY_PASS = "javax.persistence.jdbc.password";
-
     public static final String ONAP_KEY_URL = "guard.jdbc.url";
     public static final String ONAP_KEY_USER = "sql.db.username";
     public static final String ONAP_KEY_PASS = "sql.db.password";
index 54fd323..1b375cf 100644 (file)
@@ -84,11 +84,12 @@ public class GuardContextTest {
     @Test
     public void testGuardDbResponse() throws InterruptedException {
         Properties props = new Properties(prop);
+        props.setProperty(Util.PROP_GUARD_PERSISTENCE_UNIT, Util.JUNITPU);
         props.setProperty("guard.disabled", "false");
         props.setProperty("guard.javax.persistence.jdbc.user", "user");
         props.setProperty("guard.javax.persistence.jdbc.password", "secret");
         props.setProperty("guard.javax.persistence.jdbc.driver", "org.h2.Driver");
-        props.setProperty("guard.javax.persistence.jdbc.url", "jdbc:h2:file:./H2DB");
+        props.setProperty("guard.javax.persistence.jdbc.url", "jdbc:h2:mem:testGuardDbResponse");
 
         guardContext = new GuardContext(props);
         assertNotNull(guardContext);
@@ -167,11 +168,12 @@ public class GuardContextTest {
 
     @Test
     public void testCreateDbEntry() {
-        Properties mockProperties = Mockito.mock(Properties.class);
+        Properties props = new Properties();
+        props.setProperty(Util.PROP_GUARD_PERSISTENCE_UNIT, Util.JUNITPU);
         Instant startTime = Instant.now();
         Instant endTime = Instant.now();
 
-        guardContext = new GuardContext(mockProperties);
+        guardContext = new GuardContext(props);
         assertFalse(guardContext.createDbEntry(startTime, endTime, "testClosedLoopControlName", "testActor",
                 "testRecipe", "testTarget", "testRequestId", "testSubRequestId", "testMessage", "testOutcome"));
 
@@ -180,10 +182,10 @@ public class GuardContextTest {
                 "testRecipe", "testTarget", "testRequestId", "testSubRequestId", "testMessage", "testOutcome"));
 
         PolicyEngineConstants.getManager().setEnvironmentProperty("guard.disabled", "");
-        PolicyEngineConstants.getManager().setEnvironmentProperty("guard.jdbc.url", "jdbc:h2:file:./H2DB");
+        PolicyEngineConstants.getManager().setEnvironmentProperty("guard.jdbc.url", "jdbc:h2:mem:testCreateDbEntry");
         PolicyEngineConstants.getManager().setEnvironmentProperty("sql.db.username", "user");
         PolicyEngineConstants.getManager().setEnvironmentProperty("sql.db.password", "secret");
-        guardContext = new GuardContext(mockProperties);
+        guardContext = new GuardContext(props);
         assertTrue(guardContext.createDbEntry(startTime, endTime, "testClosedLoopControlName", "testActor",
                 "testRecipe", "testTarget", "testRequestId", "testSubRequestId", "testMessage", "testOutcome"));
 
index 8dc334f..3e60c95 100644 (file)
@@ -12,14 +12,12 @@ RUN unzip apps-controlloop.zip && \
     chmod 600 $POLICY_HOME/config/* && \
     . $POLICY_HOME/etc/profile.d/env.sh && \
     $POLICY_HOME/bin/features install controlloop-utils controlloop-trans controlloop-management && \
-    $POLICY_HOME/bin/features install controlloop-frankfurt controlloop-usecases && \
+    $POLICY_HOME/bin/features install controlloop-frankfurt && \
     $POLICY_HOME/bin/features enable healthcheck distributed-locking lifecycle && \
     $POLICY_HOME/bin/features enable controlloop-trans controlloop-management && \
     $POLICY_HOME/bin/features enable controlloop-frankfurt && \
     $POLICY_HOME/bin/deploy-artifact -l -d -s $POLICY_HOME/etc/m2/standalone-settings.xml \
         -a $POLICY_HOME/features/controlloop-management/lib/feature/feature-controlloop-management-$BUILD_VERSION_APP_CL.jar && \
-    $POLICY_HOME/bin/deploy-artifact -l -d -s $POLICY_HOME/etc/m2/standalone-settings.xml \
-        -a $POLICY_HOME/features/controlloop-usecases/artifacts/controller-usecases-$BUILD_VERSION_APP_CL.jar && \
     $POLICY_HOME/bin/deploy-artifact -l -d -s $POLICY_HOME/etc/m2/standalone-settings.xml \
         -a $POLICY_HOME/features/controlloop-frankfurt/artifacts/controller-frankfurt-$BUILD_VERSION_APP_CL.jar && \
     find $HOME/.m2/ -name _maven.repositories -exec rm -v {} \; && \