Enable junits to work with the archetype template 37/18337/2
authorCharles Cole <cc847m@att.com>
Fri, 6 Oct 2017 14:18:45 +0000 (09:18 -0500)
committerCharles Cole <cc847m@att.com>
Wed, 11 Oct 2017 21:07:04 +0000 (16:07 -0500)
Control loop junits now use the actual PolicyEngine instead of a
simulation, allowing them to work with the archetype template

Issue-ID: POLICY-101
Change-Id: I910961996aaf831f4e91b7d7173d05fdfdd77683
Signed-off-by: Charles Cole <cc847m@att.com>
controlloop/common/model-impl/appclcm/src/main/java/org/onap/policy/appclcm/util/Serialization.java
controlloop/common/model-impl/events/pom.xml
controlloop/common/model-impl/events/src/main/java/org/onap/policy/controlloop/util/Serialization.java
controlloop/templates/template.demo/src/main/resources/ControlLoop_Template_xacml_guard.drl [deleted file]
controlloop/templates/template.demo/src/test/java/org/onap/policy/template/demo/Util.java
controlloop/templates/template.demo/src/test/java/org/onap/policy/template/demo/VCPEControlLoopTest.java
controlloop/templates/template.demo/src/test/java/org/onap/policy/template/demo/VDNSControlLoopTest.java
controlloop/templates/template.demo/src/test/java/org/onap/policy/template/demo/VFCControlLoopTest.java
controlloop/templates/template.demo/src/test/java/org/onap/policy/template/demo/VFWControlLoopTest.java

index 7187ab1..e41fa36 100644 (file)
@@ -81,12 +81,27 @@ public final class Serialization {
         @Override
         public Instant deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
                 throws JsonParseException {
-            return Instant.parse(json.getAsString());
+               return Instant.parse(json.getAsString());
         }
 
         @Override
         public JsonElement serialize(Instant src, Type typeOfSrc, JsonSerializationContext context) {
-            return new JsonPrimitive(src.toString());
+               return new JsonPrimitive(src.toString());
+        }
+
+    }
+    
+    public static class InstantJunitAdapter implements JsonSerializer<Instant>, JsonDeserializer<Instant> {
+
+        @Override
+        public Instant deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
+                throws JsonParseException {
+               return Instant.ofEpochMilli(json.getAsLong());
+        }
+
+        @Override
+        public JsonElement serialize(Instant src, Type typeOfSrc, JsonSerializationContext context) {
+               return new JsonPrimitive(src.toEpochMilli());
         }
 
     }
@@ -97,5 +112,8 @@ public final class Serialization {
     public static final Gson gson = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting()
             .registerTypeAdapter(LCMRequest.class, new RequestAdapter())
             .registerTypeAdapter(LCMResponse.class, new ResponseAdapter()).create();
+    
+    public static final Gson gsonJunit = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting()
+               .registerTypeAdapter(Instant.class, new InstantJunitAdapter()).create();
 
 }
index a07bb47..390d082 100644 (file)
                <version>2.5</version>
                <scope>provided</scope>
        </dependency>
+    <dependency>
+        <groupId>junit</groupId>
+        <artifactId>junit</artifactId>
+        <version>4.12</version>
+        <scope>test</scope>
+    </dependency>
   </dependencies>
 </project>
index 37b148b..858dc82 100644 (file)
@@ -127,5 +127,12 @@ public final class Serialization {
                        .registerTypeAdapter(ControlLoopNotificationType.class, new notificationTypeAdapter())
                        .registerTypeAdapter(ControlLoopTargetType.class, new targetTypeAdapter())
                        .create();
+       
+       final static public Gson gsonJunit = new GsonBuilder().disableHtmlEscaping()
+                       .setPrettyPrinting()
+                       .registerTypeAdapter(ZonedDateTime.class, new gsonUTCAdapter())
+                       .registerTypeAdapter(Instant.class, new gsonInstantAdapter())
+                       .registerTypeAdapter(ControlLoopTargetType.class, new targetTypeAdapter())
+                       .create();
 
 }
diff --git a/controlloop/templates/template.demo/src/main/resources/ControlLoop_Template_xacml_guard.drl b/controlloop/templates/template.demo/src/main/resources/ControlLoop_Template_xacml_guard.drl
deleted file mode 100644 (file)
index 6916524..0000000
+++ /dev/null
@@ -1,1228 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * demo
- * ================================================================================
- * Copyright (C) 2017 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 org.onap.policy.controlloop.VirtualControlLoopEvent;
-import org.onap.policy.controlloop.VirtualControlLoopNotification;
-import org.onap.policy.controlloop.ControlLoopEventStatus;
-import org.onap.policy.controlloop.ControlLoopNotificationType;
-import org.onap.policy.controlloop.ControlLoopLogger;
-import org.onap.policy.controlloop.policy.PolicyResult;
-import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager;
-import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager.NEW_EVENT_STATUS;
-import org.onap.policy.controlloop.eventmanager.ControlLoopOperationManager;
-import org.onap.policy.appc.Request;
-import org.onap.policy.appc.Response;
-import org.onap.policy.appc.CommonHeader;
-import org.onap.policy.appclcm.LCMRequestWrapper;
-import org.onap.policy.appclcm.LCMResponseWrapper;
-import org.onap.policy.appclcm.LCMRequest;
-import org.onap.policy.appclcm.LCMResponse;
-import org.onap.policy.appclcm.LCMCommonHeader;
-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.SORequestStatus;
-import org.onap.policy.so.SORequestDetails;
-import org.onap.policy.so.SOModelInfo;
-import org.onap.policy.so.SOCloudConfiguration;
-import org.onap.policy.so.SORequestInfo;
-import org.onap.policy.so.SORequestParameters;
-import org.onap.policy.so.SORelatedInstanceListElement;
-import org.onap.policy.so.SORelatedInstance;
-import org.onap.policy.so.SOResponse;
-import org.onap.policy.controlloop.actor.so.SOActorServiceProvider;
-import org.onap.policy.guard.PolicyGuard;
-import org.onap.policy.guard.PolicyGuard.LockResult;
-import org.onap.policy.guard.TargetLock;
-import org.onap.policy.guard.GuardResult;
-import org.onap.policy.guard.PolicyGuardRequest;
-import org.onap.policy.guard.PolicyGuardResponse;
-import org.onap.policy.guard.PolicyGuardXacmlRequestAttributes;
-import com.att.research.xacml.api.pdp.PDPEngine;
-import com.att.research.xacml.std.annotations.RequestParser;
-import org.onap.policy.guard.PolicyGuardXacmlHelper;
-import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.controlloop.policy.Policy;
-import java.net.URLDecoder;
-import org.eclipse.persistence.exceptions.DatabaseException;
-
-//
-// REPLACE THESE WITH PRODUCTION VERSIONS
-//
-import org.onap.policy.controlloop.ControlLoopLogger;
-import org.onap.policy.drools.PolicyEngine;
-import org.yaml.snakeyaml.Yaml;
-import org.yaml.snakeyaml.constructor.Constructor;
-
-global ControlLoopLogger Logger;
-global PolicyEngine Engine;
-global PDPEngine XacmlPdpEngine;
-
-import java.time.Instant;
-import java.util.LinkedList;
-import java.util.Iterator;
-
-declare Params
-    closedLoopControlName : String
-       controlLoopYaml : String
-end
-
-
-declare OperationTimer
-       closedLoopControlName : String
-       requestID : String
-       delay : String
-end
-
-declare ControlLoopTimer
-       closedLoopControlName : String
-       requestID : String
-       delay : String
-end
-
-
-/*
-*
-* Called once and only once to insert the parameters into working memory for this Closed Loop policy.
-*
-*/
-rule "${policyName}.SETUP"
-       when
-       then
-       //
-       // Logging
-       //
-       Logger.info("------------------------------------------------------------------------------------------------");
-       Logger.metrics(Instant.now() + " " + drools.getRule().getName() + " " + drools.getRule().getPackage());
-               Params params = new Params();
-               params.setClosedLoopControlName("${closedLoopControlName}");
-               params.setControlLoopYaml("${controlLoopYaml}");
-               insert(params);
-               Logger.metrics("Inserted " + params);
-       Logger.info("------------------------------------------------------------------------------------------------");
-
-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 "${policyName}.EVENT"
-       when
-        $params : Params( getClosedLoopControlName() == "${closedLoopControlName}" )
-        $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName() )
-        not ( ControlLoopEventManager( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID ) )
-       then
-               try {
-               //
-               // Logging
-               //
-               Logger.info("------------------------------------------------------------------------------------------------");
-               Logger.metrics(Instant.now() + " " + drools.getRule().getName() + " " + drools.getRule().getPackage());
-                       //
-                       // 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.requestID == null) {
-                               VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-                               notification.notification = ControlLoopNotificationType.REJECTED;
-                               notification.from = "policy";
-                               notification.message = "Missing requestID";
-                               notification.policyName = drools.getRule().getName();
-                               notification.policyScope = "${policyScope}";
-                               notification.policyVersion = "${policyVersion}";
-                               //
-                               // Let interested parties know
-                               //
-                               Engine.deliver("UEB", "POLICY-CL-MGT", notification);
-                               //
-                               // Retract it from memory
-                               //
-                               retract($event);
-                       } else {
-                               //
-                               // Create an EventManager
-                               //
-                               ControlLoopEventManager manager = new ControlLoopEventManager($params.getClosedLoopControlName(), $event.requestID);
-                               //
-                               // Determine if EventManager can actively process the event (i.e. syntax, is_closed_loop_disabled checks etc.)
-                               //
-                               VirtualControlLoopNotification notification = manager.activate($params.getControlLoopYaml(), $event);
-                               notification.from = "pdp-0001-controller=controlloop"; // Engine.getInstanceName()
-                               notification.policyName = drools.getRule().getName();
-                               notification.policyScope = "${policyScope}";
-                               notification.policyVersion = "${policyVersion}";
-                               //
-                               // Are we actively pursuing this event?
-                               //
-                               if (notification.notification == ControlLoopNotificationType.ACTIVE) {
-                                       //
-                                       // Insert Event Manager into memory, this will now kick off processing.
-                                       //
-                                       insert(manager);
-                                       //
-                                       // Let interested parties know
-                                       //
-                                       Engine.deliver("UEB", "POLICY-CL-MGT", notification);
-                                       //
-                                       // Setup the Overall Control Loop timer
-                                       //
-                                       ControlLoopTimer clTimer = new ControlLoopTimer();
-                                       clTimer.setClosedLoopControlName($event.closedLoopControlName);
-                                       clTimer.setRequestID($event.requestID.toString());
-                                       clTimer.setDelay(manager.getControlLoopTimeout(1500) + "s");
-                                       //
-                                       // Insert it
-                                       //
-                                       insert(clTimer);
-                               } else {
-                                       //
-                                       // Let interested parties know
-                                       //
-                                       Engine.deliver("UEB", "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) {
-                       e.printStackTrace();
-                       VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-                       notification.notification = ControlLoopNotificationType.REJECTED;
-                       notification.message = "Exception occurred " + e.getMessage();
-                       notification.policyName = drools.getRule().getName();
-                       notification.policyScope = "${policyScope}";
-                       notification.policyVersion = "${policyVersion}";
-                       //
-                       //
-                       //
-                       Engine.deliver("UEB", "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 "${policyName}.EVENT.MANAGER"
-    when
-        $params : Params( getClosedLoopControlName() == "${closedLoopControlName}" )
-        $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName() )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID )
-        $clTimer : ControlLoopTimer ( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID.toString() )
-       then
-       //
-       // Logging
-       //
-       Logger.info("------------------------------------------------------------------------------------------------");
-       Logger.metrics(Instant.now() + " " + drools.getRule().getName() + " " + drools.getRule().getPackage());
-               Logger.metrics($params);
-               Logger.metrics($event);
-               Logger.metrics($manager);
-               Logger.metrics($clTimer);
-               //
-               // Check which event this is.
-               //
-               ControlLoopEventManager.NEW_EVENT_STATUS eventStatus = $manager.onNewEvent($event);
-               Logger.info("Event status is " + eventStatus);
-               //
-               // Check what kind of event this is
-               //
-               if (eventStatus == NEW_EVENT_STATUS.SUBSEQUENT_ONSET) {
-                       //
-                       // We don't care about subsequent onsets
-                       //
-                       Logger.info("Retracting Subsequent Onset " + $event);
-                       retract($event);
-                       return;
-               }
-               if (eventStatus == NEW_EVENT_STATUS.SYNTAX_ERROR) {
-                       //
-                       // Ignore any bad syntax events
-                       //
-                       Logger.info("Retracting Bad Syntax Event " + $event);
-                       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 != NEW_EVENT_STATUS.FIRST_ONSET) {
-                       Logger.info("Retracting Event " + $event);
-                       retract($event);
-               }
-               Logger.info("Checking due to new event " + $event.target);
-               //
-               // Now start seeing if we need to process this event
-               //
-               try {
-                       //
-                       // 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, close out the control loop for " + $event.requestID);
-                                       notification.from = "policy";
-                                       notification.policyName = drools.getRule().getName();
-                                       notification.policyScope = "${policyScope}";
-                                       notification.policyVersion = "${policyVersion}";
-                                       //
-                                       // In this case, we are done
-                                       //
-                                       Engine.deliver("UEB", "POLICY-CL-MGT", notification);
-                                       //
-                                       // Unlock the target
-                                       //
-                                       TargetLock lock = $manager.unlockCurrentOperation();
-                                       if (lock != null) {
-                                               System.out.println("retracting lock " + lock);
-                                               retract(lock);
-                                       }
-                                       //
-                                       // Retract everything from memory
-                                       //
-                                       System.out.println("retracting onset");
-                                       retract($manager.getOnsetEvent());
-                                       retract($manager);
-                                       retract($clTimer);
-                                       //
-                                       // 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.notification == ControlLoopNotificationType.FINAL_SUCCESS) {
-                                               Logger.info("Waiting for abatement.");
-                                       } else {
-                                               Logger.info("No abatement is promised to come, close out the control loop for " + $event.requestID);
-                                               notification.from = "policy";
-                                               notification.policyName = drools.getRule().getName();
-                                               notification.policyScope = "${policyScope}";
-                                               notification.policyVersion = "${policyVersion}";
-                                               //
-                                               // In this case, we are done
-                                               //
-                                               Engine.deliver("UEB", "POLICY-CL-MGT", notification);
-                                               //
-                                               // Unlock the target
-                                               //
-                                               TargetLock lock = $manager.unlockCurrentOperation();
-                                               if (lock != null) {
-                                                       System.out.println("retracting lock " + lock);
-                                                       retract(lock);
-                                               }
-                                               //
-                                               // Retract everything from memory
-                                               //
-                                               System.out.println("retracting onset");
-                                               retract($manager.getOnsetEvent());
-                                               retract($manager);
-                                               retract($clTimer);
-                                       }
-                               }
-                       } else {
-                               //
-                               // NOT final, so let's ask for the next operation
-                               //
-                               ControlLoopOperationManager operation = $manager.processControlLoop();
-                               if (operation != null) {
-                                       Logger.info("starting a new operation" + operation);
-                                       //
-                                       // insert into memory
-                                       //
-                                       insert(operation);
-                                       //
-                                       // insert operation timeout object
-                                       //
-                                       OperationTimer opTimer = new OperationTimer();
-                                       opTimer.setClosedLoopControlName($event.closedLoopControlName);
-                                       opTimer.setRequestID($event.requestID.toString());
-                                       opTimer.setDelay(operation.getOperationTimeout().toString() + "s");
-                                       insert(opTimer);
-                       
-                                       //
-                                       // Let's ask for a lock right away
-                                       //
-                                       LockResult<GuardResult, TargetLock> result = $manager.lockCurrentOperation();
-                                       if (result.getA().equals(GuardResult.LOCK_ACQUIRED)) {
-                                               Logger.info("manager returned lock " + result.getB());
-                                               //
-                                               // Insert into memory
-                                               //
-                                               insert(result.getB());
-                                       }
-                               } else {
-                                       //
-                                       // Probably waiting for abatement
-                                       //
-                               }
-                       }
-               } catch (Exception e) {
-                       e.printStackTrace();
-                       /*
-                       VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-                       notification.notification = ControlLoopNotificationType.REJECTED;
-                       notification.from = "policy";
-                       notification.message = "Exception occurred " + e.getMessage();
-                       notification.policyName = drools.getRule().getName();
-                       notification.policyScope = "${policyScope}";
-                       notification.policyVersion = "${policyVersion}";
-                       //
-                       //
-                       //
-                       Engine.deliver("UEB", "POLICY-CL-MGT", notification);
-                       //
-                       // TODO should we abort if we get an exception?
-                       //
-                       */
-               }
-               
-end
-
-
-
-/*
-*
-* 
-*
-*/
-rule "${policyName}.EVENT.MANAGER.OPERATION.NOT_LOCKED.TIMEOUT"
-       timer (int: 5s 5s)
-    when
-        $params : Params( getClosedLoopControlName() == "${closedLoopControlName}" )
-        $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName() )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.closedLoopControlName, onset.requestID == $event.requestID )
-        not ( TargetLock (requestID == $event.requestID) )
-       then
-       //
-       // Logging
-       //
-       Logger.info("------------------------------------------------------------------------------------------------");
-       Logger.metrics(Instant.now() + " " + drools.getRule().getName() + " " + drools.getRule().getPackage());
-               Logger.metrics($params);
-               Logger.metrics($manager);
-               Logger.metrics($operation);
-               //
-               // Need to ask for a Lock
-               //
-               LockResult<GuardResult, TargetLock> result = $manager.lockCurrentOperation();
-               if (result.getA().equals(GuardResult.LOCK_ACQUIRED)) {
-                       Logger.info("Lock acquired: " + result.getB());
-                       //
-                       // Insert into memory
-                       //
-                       insert(result.getB());
-               }
-end
-
-/*
-*
-* Guard Permitted, let's send request to the actor.
-*
-*/
-rule "${policyName}.EVENT.MANAGER.OPERATION.LOCKED.GUARD_PERMITTED"
-    when
-        $params : Params( getClosedLoopControlName() == "${closedLoopControlName}" )
-        $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName() )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.closedLoopControlName, onset.requestID == $event.requestID, "Permit".equalsIgnoreCase(getGuardApprovalStatus()) )
-        $lock : TargetLock (requestID == $event.requestID)
-       then
-       //
-       // Logging
-       //
-       Logger.info("------------------------------------------------------------------------------------------------");
-       Logger.metrics(Instant.now() + " " + drools.getRule().getName() + " " + drools.getRule().getPackage());
-               Logger.metrics($params);
-               Logger.metrics($manager);
-               Logger.metrics($operation);
-               Logger.metrics($lock);
-               
-
-               Object request = $operation.startOperation($event);
-               
-               if (request != null) {
-                       Logger.info("Starting operation");
-                       //
-                       // Tell interested parties we are performing this Operation
-                       //
-                       VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-                       notification.notification = ControlLoopNotificationType.OPERATION;
-                       notification.message = $operation.getOperationMessage();
-                       notification.history = $operation.getHistory();
-                       notification.from = "policy";
-                       notification.policyName = drools.getRule().getName();
-                       notification.policyScope = "${policyScope}";
-                       notification.policyVersion = "${policyVersion}";
-                       Engine.deliver("UEB", "POLICY-CL-MGT", notification);
-                       
-                       switch ($operation.policy.getActor()){
-                               
-                               case "APPC":
-                                       if (request instanceof Request) {
-                               Engine.deliver("UEB", "APPC-CL", request);
-                       }
-                       else if (request instanceof LCMRequestWrapper) {
-                               Engine.deliver("UEB", "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 
-                                               SOActorServiceProvider.sendRequest(drools.getWorkingMemory(), request);                                         
-                                       }
-                                       break;
-                               case "VFC":
-                                       if (request instanceof VFCRequest) {
-                                       // Start VFC thread
-                                       Thread t = new Thread(new VFCManager(drools.getWorkingMemory(), (VFCRequest)request));
-                                       t.start();
-                               }
-                               break;
-                       }
-               } else {
-                       //
-                       // What happens if its null?
-                       //
-               }
-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 "${policyName}.EVENT.MANAGER.OPERATION.LOCKED.GUARD_NOT_YET_QUERIED"
-    when
-        $params : Params( getClosedLoopControlName() == "${closedLoopControlName}" )
-        $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName() )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.closedLoopControlName, onset.requestID == $event.requestID, getGuardApprovalStatus() == "NONE" )
-        $lock : TargetLock (requestID == $event.requestID)
-       then
-       //
-       // Logging
-       //
-       Logger.info("------------------------------------------------------------------------------------------------");
-       Logger.metrics(Instant.now() + " " + drools.getRule().getName() + " " + drools.getRule().getPackage());
-               Logger.metrics($params);
-               Logger.metrics($manager);
-               Logger.metrics($operation);
-               Logger.metrics($lock);
-               
-               //
-               // Sending notification that we are about to query Guard ("DB write - start operation")
-               //
-               VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-               notification.notification = ControlLoopNotificationType.OPERATION;
-               notification.message = "Sending guard query for " + $operation.policy.getActor() + " " + $operation.policy.getRecipe();
-               notification.history = $operation.getHistory();
-               notification.from = "policy";
-               notification.policyName = drools.getRule().getName();
-               notification.policyScope = "${policyScope}";
-               notification.policyVersion = "${policyVersion}";
-               Engine.deliver("UEB", "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 o the CallGuardTask() and set the first 
-               // argument to null (instead of XacmlPdpEngine).
-               //
-               boolean guardEnabled = true;
-               
-               if(guardEnabled){
-               
-                       Thread t = new Thread(new org.onap.policy.guard.CallGuardTask(
-                                                                                                               drools.getWorkingMemory(),
-                                                                                                               $event.closedLoopControlName,
-                                                                                                               $operation.policy.getActor().toString(),
-                                                                                                               $operation.policy.getRecipe(),
-                                                                                                               $manager.getTargetInstance($operation.policy),
-                                                                                                               //$event.target,
-                                                                                                               $event.requestID.toString()
-                                                                                                               ));
-                   t.start();
-           }
-           else{
-               insert(new PolicyGuardResponse("Permit", $event.requestID, $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 "${policyName}.GUARD.RESPONSE"
-    when
-        $params : Params( getClosedLoopControlName() == "${closedLoopControlName}" )
-               $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )
-               $manager : ControlLoopEventManager( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID ) 
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.closedLoopControlName, onset.requestID == $event.requestID )
-        $lock : TargetLock (requestID == $event.requestID)
-        $opTimer : OperationTimer( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID.toString() )
-        $guardResponse : PolicyGuardResponse(requestID == $event.requestID, $operation.policy.recipe == operation)
-       then
-       //
-       // Logging
-       //
-       Logger.info("------------------------------------------------------------------------------------------------");
-       Logger.metrics(Instant.now() + " " + drools.getRule().getName() + " " + drools.getRule().getPackage());
-               Logger.metrics($params);
-               Logger.metrics($event);
-               Logger.metrics($operation);
-               Logger.metrics($lock);
-               Logger.metrics($guardResponse);
-               
-               
-               //we will permit the operation if there was no Guard for it
-               if("Indeterminate".equalsIgnoreCase($guardResponse.result)){
-                       $guardResponse.result = "Permit";
-               }
-               
-               //
-               // This notification has Guard result in "message". ("DB write - end operation in case of Guard Deny")
-               //
-               VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-               notification.notification = ControlLoopNotificationType.OPERATION;
-               notification.message = "Guard result for " + $operation.policy.getActor() + " " + $operation.policy.getRecipe() + " is " + $guardResponse.result;
-               notification.history = $operation.getHistory();
-               notification.from = "policy";
-               notification.policyName = drools.getRule().getName();
-               notification.policyScope = "${policyScope}";
-               notification.policyVersion = "${policyVersion}";
-               Engine.deliver("UEB", "POLICY-CL-MGT", notification);
-               
-               
-               
-               if("Permit".equalsIgnoreCase($guardResponse.result)){
-               
-                       modify($operation){setGuardApprovalStatus($guardResponse.result)};
-               }
-               else {
-                       //This is the Deny case
-                       $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.requestID )
-*
-* 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 "${policyName}.APPC.RESPONSE"
-    when
-        $params : Params( getClosedLoopControlName() == "${closedLoopControlName}" )
-               $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET ) 
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.closedLoopControlName, onset.requestID == $event.requestID )
-        $opTimer : OperationTimer( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID.toString() )
-        $lock : TargetLock (requestID == $event.requestID)
-        $response : Response( getCommonHeader().RequestID == $event.requestID )
-       then
-       //
-       // Logging
-       //
-       Logger.info("------------------------------------------------------------------------------------------------");
-       Logger.metrics(Instant.now() + " " + drools.getRule().getName() + " " + drools.getRule().getPackage());
-               Logger.metrics($params);
-               Logger.metrics($event);
-               Logger.metrics($manager);
-               Logger.metrics($operation);
-               Logger.metrics($opTimer);
-               Logger.metrics($lock);
-               Logger.metrics($response);
-               //
-               // Get the result of the operation
-               //
-               PolicyResult policyResult = $operation.onResponse($response);
-               if (policyResult != null) {
-                       Logger.info("operation finished with result: " + policyResult);
-                       //
-                       // This Operation has completed, construct a notification showing our results. (DB write - end operation)
-                       //
-                       VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-                       notification.from = "policy";
-                       notification.policyName = drools.getRule().getName();
-                       notification.policyScope = "${policyScope}";
-                       notification.policyVersion = "${policyVersion}";
-                       notification.message = $operation.getOperationHistory();
-                       notification.history = $operation.getHistory();
-                       if (policyResult.equals(PolicyResult.SUCCESS)) {
-                               notification.notification = ControlLoopNotificationType.OPERATION_SUCCESS;
-                               //
-                               // Let interested parties know
-                               //
-                               Engine.deliver("UEB", "POLICY-CL-MGT", notification);
-                       } else {
-                               notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;
-                               //
-                               // Let interested parties know
-                               //
-                               Engine.deliver("UEB", "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 "${policyName}.APPC.RESPONSE.CLEANUP"
-    when
-        $params : Params( getClosedLoopControlName() == "${closedLoopControlName}" )
-        $response : Response($id : getCommonHeader().RequestID )
-               not ( VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), requestID == $id, closedLoopEventStatus == ControlLoopEventStatus.ONSET ) ) 
-       then
-       //
-       // Logging
-       //
-       Logger.info("------------------------------------------------------------------------------------------------");
-       Logger.metrics(Instant.now() + " " + drools.getRule().getName() + " " + drools.getRule().getPackage());
-               Logger.metrics($params);
-               //
-               // Retract it
-               //
-               retract($response);
-end
-
-/*
-*
-* This rule responds to APPC Response Events using the new LCM interface provided by appc
-*
-*/
-rule "${policyName}.APPC.LCM.RESPONSE"
-    when
-        $params : Params( getClosedLoopControlName() == "${closedLoopControlName}" )
-               $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET ) 
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.closedLoopControlName, onset.requestID == $event.requestID )
-        $opTimer : OperationTimer( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID.toString() )
-        $lock : TargetLock (requestID == $event.requestID)
-        $response : LCMResponseWrapper( getBody().getCommonHeader().getRequestId() == $event.requestID )
-       then
-       //
-       // Logging
-       //
-       Logger.info("------------------------------------------------------------------------------------------------");
-       Logger.metrics(Instant.now() + " " + drools.getRule().getName() + " " + drools.getRule().getPackage());
-               Logger.metrics($params);
-               Logger.metrics($event);
-               Logger.metrics($manager);
-               Logger.metrics($operation);
-               Logger.metrics($opTimer);
-               Logger.metrics($lock);
-               Logger.metrics($response);
-               //
-               // Get the result of the operation
-               //
-               PolicyResult policyResult = $operation.onResponse($response);
-               if (policyResult != null) {
-                       Logger.info("operation finished with result: " + policyResult);
-                       //
-                       // This Operation has completed, construct a notification showing our results. (DB write - end operation)
-                       //
-                       VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-                       notification.from = "policy";
-                       notification.policyName = drools.getRule().getName();
-                       notification.policyScope = "${policyScope}";
-                       notification.policyVersion = "${policyVersion}";
-                       notification.message = $operation.getOperationHistory();
-                       notification.history = $operation.getHistory();
-                       if (policyResult.equals(PolicyResult.SUCCESS)) {
-                               notification.notification = ControlLoopNotificationType.OPERATION_SUCCESS;
-                               //
-                               // Let interested parties know
-                               //
-                               Engine.deliver("UEB", "POLICY-CL-MGT", notification);
-                       } else {
-                               notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;
-                               //
-                               // Let interested parties know
-                               //
-                               Engine.deliver("UEB", "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 "${policyName}.APPC.LCM.RESPONSE.CLEANUP"
-    when
-        $params : Params( getClosedLoopControlName() == "${closedLoopControlName}" )
-        $response : LCMResponseWrapper($id : getBody().getCommonHeader().getRequestId )
-               not ( VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), requestID == $id, closedLoopEventStatus == ControlLoopEventStatus.ONSET ) ) 
-       then
-       //
-       // Logging
-       //
-       Logger.info("------------------------------------------------------------------------------------------------");
-       Logger.metrics(Instant.now() + " " + drools.getRule().getName() + " " + drools.getRule().getPackage());
-               Logger.metrics($params);
-               //
-               // Retract it
-               //
-               retract($response);
-end
-
-/*
-*
-* This rule responds to SO Response Events
-*
-*/
-rule "${policyName}.SO.RESPONSE"
-       when
-               $params : Params( getClosedLoopControlName() == "${closedLoopControlName}" )
-               $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )
-               $manager : ControlLoopEventManager( closedLoopControlName == $event.closedLoopControlName )
-               $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.closedLoopControlName, onset.requestID == $event.requestID )
-               $opTimer : OperationTimer( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID.toString() )
-        $lock : TargetLock (requestID == $event.requestID)
-               $response : SOResponse( requestReferences.requestId.toString() == $event.requestID.toString() ) 
-       then                            
-               //
-       // Logging              
-               Logger.info("------------------------------------------------------------------------------------------------");
-       Logger.metrics(Instant.now() + " " + drools.getRule().getName() + " " + drools.getRule().getPackage());
-               Logger.metrics($params);
-               Logger.metrics($event);
-               Logger.metrics($manager);
-               Logger.metrics($operation);
-               Logger.metrics($opTimer);
-               Logger.metrics($lock);
-               Logger.metrics($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.from = "policy";
-                       notification.policyName = drools.getRule().getName();
-                       notification.policyScope = "${policyScope}";
-                       notification.policyVersion = "${policyVersion}";
-                       notification.message = $operation.getOperationHistory();
-                       notification.history = $operation.getHistory();
-                       if (policyResult.equals(PolicyResult.SUCCESS)) {
-                               notification.notification = ControlLoopNotificationType.OPERATION_SUCCESS;
-                               //
-                               // Let interested parties know
-                               //
-                               Engine.deliver("UEB", "POLICY-CL-MGT", notification);
-                       } else {
-                               notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;
-                               //
-                               // Let interested parties know
-                               //
-                               Engine.deliver("UEB", "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 "${policyName}.VFC.RESPONSE"
-       when
-               $params : Params( getClosedLoopControlName() == "${closedLoopControlName}" )
-               $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName(), closedLoopEventStatus == ControlLoopEventStatus.ONSET )
-               $manager : ControlLoopEventManager( closedLoopControlName == $event.closedLoopControlName )
-               $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.closedLoopControlName, onset.requestID == $event.requestID )
-               $opTimer : OperationTimer( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID.toString() )
-        $lock : TargetLock (requestID == $event.requestID)
-               $response : VFCResponse( requestId.toString() == $event.requestID.toString() )  
-       then
-               //
-               // Logging
-               Logger.info("------------------------------------------------------------------------------------------------");
-               Logger.metrics(Instant.now() + " " + drools.getRule().getName() + " " + drools.getRule().getPackage());
-               Logger.metrics($params);
-               Logger.metrics($event);
-               Logger.metrics($manager);
-               Logger.metrics($operation);
-               Logger.metrics($opTimer);
-               Logger.metrics($lock);
-               Logger.metrics($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.from = "policy";
-                       notification.policyName = drools.getRule().getName();
-                       notification.policyScope = "${policyScope}";
-                       notification.policyVersion = "${policyVersion}";
-                       notification.message = $operation.getOperationHistory();
-                       notification.history = $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 is the timer that manages the timeout for an individual operation.
-*
-*/
-rule "${policyName}.EVENT.MANAGER.OPERATION.TIMEOUT"
-       timer (expr: $to )
-    when
-        $params : Params( getClosedLoopControlName() == "${closedLoopControlName}" )
-        $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName() )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID )
-        $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.closedLoopControlName, onset.requestID == $event.requestID )
-        $opTimer : OperationTimer( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID.toString(), $to : getDelay() )
-        $lock : TargetLock (requestID == $event.requestID)
-       then
-       //
-       // Logging
-       //
-       Logger.info("------------------------------------------------------------------------------------------------");
-       Logger.metrics(Instant.now() + " " + drools.getRule().getName() + " " + drools.getRule().getPackage());
-               Logger.metrics($params);
-               Logger.metrics($manager);
-               Logger.metrics($operation);
-               Logger.metrics($opTimer);
-               Logger.metrics($lock);
-               //
-               // Tell it its timed out
-               //
-               $operation.setOperationHasTimedOut();
-               //
-               // Create a notification for it ("DB Write - end operation")
-               //
-               VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
-               notification.from = "policy";
-               notification.policyName = drools.getRule().getName();
-               notification.policyScope = "${policyScope}";
-               notification.policyVersion = "${policyVersion}";
-               notification.notification = ControlLoopNotificationType.OPERATION_FAILURE;
-               notification.message = $operation.getOperationHistory();
-               notification.history = $operation.getHistory();
-               //
-               // Let interested parties know
-               //
-               Engine.deliver("UEB", "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 "${policyName}.EVENT.MANAGER.TIMEOUT"
-       timer (expr: $to )
-    when
-        $params : Params( getClosedLoopControlName() == "${closedLoopControlName}" )
-        $event : VirtualControlLoopEvent( closedLoopControlName == $params.getClosedLoopControlName() )
-        $manager : ControlLoopEventManager( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID )
-        $clTimer : ControlLoopTimer ( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID.toString(), $to : getDelay() )
-        $operations : LinkedList()
-                                       from collect( ControlLoopOperationManager( onset.closedLoopControlName == $event.closedLoopControlName, onset.requestID == $event.requestID ) )
-        $opTimers : LinkedList()
-                                       from collect( OperationTimer( closedLoopControlName == $event.closedLoopControlName, requestID == $event.requestID.toString() ) )
-        $locks : LinkedList()
-                                       from collect( TargetLock (requestID == $event.requestID) )
-       then
-       //
-       // Logging
-       //
-       Logger.info("------------------------------------------------------------------------------------------------");
-       Logger.metrics(Instant.now() + " " + drools.getRule().getName() + " " + drools.getRule().getPackage());
-               Logger.metrics($params);
-               Logger.metrics($manager);
-               Logger.metrics($clTimer);
-               if ($operations == null) {
-                       Logger.info("no operations found");
-               } else {
-                       Logger.info("found " + $operations.size() + " operations");
-               }
-               //
-               // Tell the Event Manager it has timed out
-               //
-               VirtualControlLoopNotification notification = $manager.setControlLoopTimedOut();
-               if (notification != null) {
-                       notification.from = "policy";
-                       notification.policyName = drools.getRule().getName();
-                       notification.policyScope = "${policyScope}";
-                       notification.policyVersion = "${policyVersion}";
-                       //
-                       // Let interested parties know
-                       //
-                       Engine.deliver("UEB", "POLICY-CL-MGT", notification);
-               }
-               //
-               // Retract EVERYTHING
-               //
-               retract($event);
-               retract($manager);
-               retract($clTimer);
-               if ($operations != null && $operations.size() > 0) {
-                       Iterator<ControlLoopOperationManager> iter = $operations.iterator();
-                       while (iter.hasNext()) {
-                               ControlLoopOperationManager manager = iter.next();
-                               retract(manager);
-                       }
-               }
-               if ($opTimers != null && $opTimers.size() > 0) {
-                       Iterator<OperationTimer> iter = $opTimers.iterator();
-                       while (iter.hasNext()) {
-                               OperationTimer opTimer = iter.next();
-                               retract(opTimer);
-                       }
-               }
-               if ($locks != null && $locks.size() > 0) {
-                       Iterator<TargetLock> iter = $locks.iterator();
-                       while (iter.hasNext()) {
-                               TargetLock lock = iter.next();
-                               //
-                               // Ensure we release the lock
-                               //
-                               PolicyGuard.unlockTarget(lock);
-                               //
-                               //
-                               //
-                               retract(lock);
-                       }
-               }
-end
index 35b339e..0c633c4 100644 (file)
@@ -44,12 +44,9 @@ import org.kie.api.builder.Results;
 import org.kie.api.builder.model.KieModuleModel;
 import org.kie.api.runtime.KieContainer;
 import org.kie.api.runtime.KieSession;
-import org.onap.policy.controlloop.ControlLoopLogger;
-import org.onap.policy.controlloop.impl.ControlLoopLoggerStdOutImpl;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
 import org.onap.policy.controlloop.policy.guard.ControlLoopGuard;
 import org.onap.policy.drools.http.server.HttpServletServer;
-import org.onap.policy.drools.impl.PolicyEngineJUnitImpl;
 import org.onap.policy.drools.system.PolicyEngine;
 import org.onap.policy.guard.PolicyGuardYamlToXacml;
 import org.slf4j.Logger;
@@ -57,9 +54,6 @@ import org.slf4j.LoggerFactory;
 import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.constructor.Constructor;
 
-import com.att.research.xacml.api.pdp.PDPEngine;
-import com.att.research.xacml.api.pdp.PDPEngineFactory;
-import com.att.research.xacml.util.FactoryException;
 import com.att.research.xacml.util.XACMLProperties;
 
 public final class Util {
@@ -245,30 +239,11 @@ public final class Util {
                                                                                                                "src/main/resources/blacklist_template.xml", 
                                                                                                                "src/test/resources/xacml/autogenerated_blacklist.xml");
 
-        
-               //
-               // Insert our globals
-               //
-               final ControlLoopLogger controlLoopLogger = new ControlLoopLoggerStdOutImpl();
-               kieSession.setGlobal("Logger", controlLoopLogger);
-               final PolicyEngineJUnitImpl engine = new PolicyEngineJUnitImpl();
-               kieSession.setGlobal("Engine", engine);
-               
-               
                //
                // Creating an embedded XACML PDP
                //
-               final PDPEngine xacmlPdpEngine;
                System.setProperty(XACMLProperties.XACML_PROPERTIES_NAME, "src/test/resources/xacml/xacml_guard.properties");
                
-               PDPEngineFactory factory;
-               try {
-                       factory = PDPEngineFactory.newInstance();
-                       xacmlPdpEngine = factory.newEngine();
-                       kieSession.setGlobal("XacmlPdpEngine", xacmlPdpEngine);
-               } catch (FactoryException e1) {
-                       e1.printStackTrace();
-               }
                return kieSession;
        }
        
index 4dc6b80..ae8bcb4 100644 (file)
@@ -26,6 +26,8 @@ import java.io.IOException;
 import java.net.URLEncoder;
 import java.time.Instant;
 import java.util.HashMap;
+import java.util.List;
+import java.util.Properties;
 import java.util.UUID;
 
 import org.junit.AfterClass;
@@ -42,19 +44,26 @@ import org.onap.policy.controlloop.ControlLoopNotificationType;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.VirtualControlLoopNotification;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.drools.PolicyEngineListener;
+import org.onap.policy.drools.event.comm.Topic.CommInfrastructure;
+import org.onap.policy.drools.event.comm.TopicEndpoint;
+import org.onap.policy.drools.event.comm.TopicListener;
+import org.onap.policy.drools.event.comm.TopicSink;
 import org.onap.policy.drools.http.server.HttpServletServer;
-import org.onap.policy.drools.impl.PolicyEngineJUnitImpl;
+import org.onap.policy.drools.properties.PolicyProperties;
+import org.onap.policy.drools.protocol.coders.EventProtocolCoder;
+import org.onap.policy.drools.protocol.coders.JsonProtocolFilter;
+import org.onap.policy.drools.system.PolicyEngine;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class VCPEControlLoopTest implements PolicyEngineListener {
+public class VCPEControlLoopTest implements TopicListener {
 
     private static final Logger logger = LoggerFactory.getLogger(VCPEControlLoopTest.class);
     
+    private static List<? extends TopicSink> noopTopics;
+    
     private KieSession kieSession;
     private Util.Pair<ControlLoopPolicy, String> pair;
-    private PolicyEngineJUnitImpl engine; 
     private UUID requestID;
     
     static {
@@ -66,6 +75,18 @@ public class VCPEControlLoopTest implements PolicyEngineListener {
     
     @BeforeClass
     public static void setUpSimulator() {
+       PolicyEngine.manager.configure(new Properties());
+       assertTrue(PolicyEngine.manager.start());
+       Properties noopSinkProperties = new Properties();
+       noopSinkProperties.put(PolicyProperties.PROPERTY_NOOP_SINK_TOPICS, "APPC-LCM-READ,POLICY-CL-MGT");
+       noopSinkProperties.put("noop.sink.topics.APPC-LCM-READ.events", "org.onap.policy.appclcm.LCMRequestWrapper");
+       noopSinkProperties.put("noop.sink.topics.APPC-LCM-READ.events.custom.gson", "org.onap.policy.appclcm.util.Serialization,gson");
+       noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events", "org.onap.policy.controlloop.VirtualControlLoopNotification");
+       noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events.custom.gson", "org.onap.policy.controlloop.util.Serialization,gsonPretty");
+       noopTopics = TopicEndpoint.manager.addTopicSinks(noopSinkProperties);
+       
+       EventProtocolCoder.manager.addEncoder("junit.groupId", "junit.artifactId", "POLICY-CL-MGT", "org.onap.policy.controlloop.VirtualControlLoopNotification", new JsonProtocolFilter(), null, null, 1111);
+       EventProtocolCoder.manager.addEncoder("junit.groupId", "junit.artifactId", "APPC-LCM-READ", "org.onap.policy.appclcm.LCMRequestWrapper", new JsonProtocolFilter(), null, null, 1111);
         try {
             Util.buildAaiSim();
             Util.buildGuardSim();
@@ -77,6 +98,7 @@ public class VCPEControlLoopTest implements PolicyEngineListener {
     @AfterClass
     public static void tearDownSimulator() {
         HttpServletServer.factory.destroy();
+        PolicyEngine.manager.shutdown();
     }
     
     @Test
@@ -85,7 +107,7 @@ public class VCPEControlLoopTest implements PolicyEngineListener {
          * Start the kie session
          */
         try {
-            kieSession = startSession("src/main/resources/ControlLoop_Template_xacml_guard.drl", 
+            kieSession = startSession("../archetype-cl-amsterdam/src/main/resources/archetype-resources/src/main/resources/__closedLoopControlName__.drl", 
                         "src/test/resources/yaml/policy_ControlLoop_vCPE.yaml",
                         "service=ServiceDemo;resource=Res1Demo;type=operational", 
                         "CL_vCPE", 
@@ -101,7 +123,10 @@ public class VCPEControlLoopTest implements PolicyEngineListener {
          * notify that there is an event ready to be pulled 
          * from the queue
          */
-        engine.addListener(this);
+        for (TopicSink sink : noopTopics) {
+            assertTrue(sink.start());
+            sink.register(this);
+        }
         
         /*
          * Create a unique requestId
@@ -114,6 +139,7 @@ public class VCPEControlLoopTest implements PolicyEngineListener {
          * the rules
          */
         sendEvent(pair.a, requestID, ControlLoopEventStatus.ONSET);
+
         
         kieSession.fireUntilHalt();
         
@@ -179,7 +205,6 @@ public class VCPEControlLoopTest implements PolicyEngineListener {
         /*
          * Retrieve the Policy Engine
          */
-        engine = (PolicyEngineJUnitImpl) kieSession.getGlobal("Engine");
         
         logger.debug("============");
         logger.debug(URLEncoder.encode(pair.b, "UTF-8"));
@@ -192,12 +217,17 @@ public class VCPEControlLoopTest implements PolicyEngineListener {
      * (non-Javadoc)
      * @see org.onap.policy.drools.PolicyEngineListener#newEventNotification(java.lang.String)
      */
-    public void newEventNotification(String topic) {
+    public void onTopicEvent(CommInfrastructure commType, String topic, String event) {
         /*
          * Pull the object that was sent out to DMAAP and make
          * sure it is a ControlLoopNoticiation of type active
          */
-        Object obj = engine.subscribe("UEB", topic);
+        Object obj = null;
+        if ("POLICY-CL-MGT".equals(topic)) {
+               obj = org.onap.policy.controlloop.util.Serialization.gsonJunit.fromJson(event, org.onap.policy.controlloop.VirtualControlLoopNotification.class);
+       }
+       else if ("APPC-LCM-READ".equals(topic))
+               obj = org.onap.policy.appclcm.util.Serialization.gsonJunit.fromJson(event, org.onap.policy.appclcm.LCMRequestWrapper.class);
         assertNotNull(obj);
         if (obj instanceof VirtualControlLoopNotification) {
             VirtualControlLoopNotification notification = (VirtualControlLoopNotification) obj;
@@ -216,7 +246,7 @@ public class VCPEControlLoopTest implements PolicyEngineListener {
                 logger.debug("Rule Fired: " + notification.policyName);
                 assertTrue(ControlLoopNotificationType.OPERATION.equals(notification.notification));
                 assertNotNull(notification.message);
-                assertTrue(notification.message.endsWith("PERMIT"));
+                assertTrue(notification.message.toLowerCase().endsWith("permit"));
             }
             else if (policyName.endsWith("GUARD_PERMITTED")) {
                 logger.debug("Rule Fired: " + notification.policyName);
@@ -305,4 +335,5 @@ public class VCPEControlLoopTest implements PolicyEngineListener {
             logger.debug("FACT: {}", handle);
         }
     }
+    
 }
index 641b56f..c64764b 100644 (file)
@@ -29,6 +29,8 @@ import java.io.IOException;
 import java.net.URLEncoder;
 import java.time.Instant;
 import java.util.HashMap;
+import java.util.List;
+import java.util.Properties;
 import java.util.UUID;
 
 import org.junit.AfterClass;
@@ -41,21 +43,27 @@ import org.onap.policy.controlloop.ControlLoopNotificationType;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.VirtualControlLoopNotification;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.drools.PolicyEngineListener;
+import org.onap.policy.drools.event.comm.TopicEndpoint;
+import org.onap.policy.drools.event.comm.TopicListener;
+import org.onap.policy.drools.event.comm.TopicSink;
+import org.onap.policy.drools.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.drools.http.server.HttpServletServer;
-import org.onap.policy.drools.impl.PolicyEngineJUnitImpl;
-
+import org.onap.policy.drools.properties.PolicyProperties;
+import org.onap.policy.drools.protocol.coders.EventProtocolCoder;
+import org.onap.policy.drools.protocol.coders.JsonProtocolFilter;
+import org.onap.policy.drools.system.PolicyEngine;
 import org.onap.policy.so.SORequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class VDNSControlLoopTest implements PolicyEngineListener {
+public class VDNSControlLoopTest implements TopicListener {
 
     private static final Logger logger = LoggerFactory.getLogger(VDNSControlLoopTest.class);
     
+    private static List<? extends TopicSink> noopTopics;
+    
     private KieSession kieSession;
     private Util.Pair<ControlLoopPolicy, String> pair;
-    private PolicyEngineJUnitImpl engine;     
     private UUID requestID;
     
     static {
@@ -68,6 +76,16 @@ public class VDNSControlLoopTest implements PolicyEngineListener {
     
        @BeforeClass
        public static void setUpSimulator() {
+               PolicyEngine.manager.configure(new Properties());
+       assertTrue(PolicyEngine.manager.start());
+       Properties noopSinkProperties = new Properties();
+       noopSinkProperties.put(PolicyProperties.PROPERTY_NOOP_SINK_TOPICS, "POLICY-CL-MGT");
+       noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events", "org.onap.policy.controlloop.VirtualControlLoopNotification");
+       noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events.custom.gson", "org.onap.policy.controlloop.util.Serialization,gsonPretty");
+       noopTopics = TopicEndpoint.manager.addTopicSinks(noopSinkProperties);
+       
+       EventProtocolCoder.manager.addEncoder("junit.groupId", "junit.artifactId", "POLICY-CL-MGT", "org.onap.policy.controlloop.VirtualControlLoopNotification", new JsonProtocolFilter(), null, null, 1111);
+
                try {
                        Util.buildAaiSim();
                        Util.buildSoSim();
@@ -80,6 +98,7 @@ public class VDNSControlLoopTest implements PolicyEngineListener {
        @AfterClass
        public static void tearDownSimulator() {
                HttpServletServer.factory.destroy();
+               PolicyEngine.manager.shutdown();
        }
 
     @Test
@@ -89,7 +108,7 @@ public class VDNSControlLoopTest implements PolicyEngineListener {
          * Start the kie session
          */
         try {
-            kieSession = startSession("src/main/resources/ControlLoop_Template_xacml_guard.drl", 
+            kieSession = startSession("../archetype-cl-amsterdam/src/main/resources/archetype-resources/src/main/resources/__closedLoopControlName__.drl", 
                         "src/test/resources/yaml/policy_ControlLoop_SO-test.yaml",
                         "type=operational", 
                         "CL_vDNS", 
@@ -105,7 +124,10 @@ public class VDNSControlLoopTest implements PolicyEngineListener {
          * notify that there is an event ready to be pulled 
          * from the queue
          */
-        engine.addListener(this);
+        for (TopicSink sink : noopTopics) {
+            assertTrue(sink.start());
+            sink.register(this);
+        }
         
         /*
          * Create a unique requestId
@@ -183,7 +205,6 @@ public class VDNSControlLoopTest implements PolicyEngineListener {
         /*
          * Retrieve the Policy Engine
          */
-        engine = (PolicyEngineJUnitImpl) kieSession.getGlobal("Engine");
         
         logger.debug("============");
         logger.debug(URLEncoder.encode(pair.b, "UTF-8"));
@@ -196,12 +217,15 @@ public class VDNSControlLoopTest implements PolicyEngineListener {
      * (non-Javadoc)
      * @see org.onap.policy.drools.PolicyEngineListener#newEventNotification(java.lang.String)
      */
-    public void newEventNotification(String topic) {
+    public void onTopicEvent(CommInfrastructure commType, String topic, String event) {
         /*
          * Pull the object that was sent out to DMAAP and make
          * sure it is a ControlLoopNoticiation of type active
          */
-        Object obj = engine.subscribe("UEB", topic);
+       Object obj = null;
+        if ("POLICY-CL-MGT".equals(topic)) {
+               obj = org.onap.policy.controlloop.util.Serialization.gsonJunit.fromJson(event, org.onap.policy.controlloop.VirtualControlLoopNotification.class);
+       }
         assertNotNull(obj);
         if (obj instanceof VirtualControlLoopNotification) {
             VirtualControlLoopNotification notification = (VirtualControlLoopNotification) obj;
@@ -220,7 +244,7 @@ public class VDNSControlLoopTest implements PolicyEngineListener {
                 logger.debug("Rule Fired: " + notification.policyName);
                 assertTrue(ControlLoopNotificationType.OPERATION.equals(notification.notification));
                 assertNotNull(notification.message);
-                assertTrue(notification.message.endsWith("PERMIT"));
+                assertTrue(notification.message.toLowerCase().endsWith("permit"));
             }
             else if (policyName.endsWith("GUARD_PERMITTED")) {
                 logger.debug("Rule Fired: " + notification.policyName);
index 6f05277..c139ab3 100644 (file)
@@ -29,6 +29,8 @@ import java.io.IOException;
 import java.net.URLEncoder;
 import java.time.Instant;
 import java.util.HashMap;
+import java.util.List;
+import java.util.Properties;
 import java.util.UUID;
 
 import org.junit.AfterClass;
@@ -42,20 +44,28 @@ import org.onap.policy.controlloop.ControlLoopTargetType;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.VirtualControlLoopNotification;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.drools.PolicyEngineListener;
+import org.onap.policy.drools.event.comm.TopicEndpoint;
+import org.onap.policy.drools.event.comm.TopicListener;
+import org.onap.policy.drools.event.comm.TopicSink;
+import org.onap.policy.drools.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.drools.http.server.HttpServletServer;
-import org.onap.policy.drools.impl.PolicyEngineJUnitImpl;
+import org.onap.policy.drools.properties.PolicyProperties;
+import org.onap.policy.drools.protocol.coders.EventProtocolCoder;
+import org.onap.policy.drools.protocol.coders.JsonProtocolFilter;
+import org.onap.policy.drools.system.PolicyEngine;
 import org.onap.policy.vfc.VFCRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 
-public class VFCControlLoopTest implements PolicyEngineListener {
+public class VFCControlLoopTest implements TopicListener {
 
        private static final Logger logger = LoggerFactory.getLogger(VFCControlLoopTest.class);
+       
+    private static List<? extends TopicSink> noopTopics;
+    
        private KieSession kieSession;
        private Util.Pair<ControlLoopPolicy, String> pair;
-       private PolicyEngineJUnitImpl engine;
        private UUID requestID;
 
        static {
@@ -68,6 +78,16 @@ public class VFCControlLoopTest implements PolicyEngineListener {
        
        @BeforeClass
        public static void setUpSimulator() {
+               PolicyEngine.manager.configure(new Properties());
+       assertTrue(PolicyEngine.manager.start());
+       Properties noopSinkProperties = new Properties();
+       noopSinkProperties.put(PolicyProperties.PROPERTY_NOOP_SINK_TOPICS, "POLICY-CL-MGT");
+       noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events", "org.onap.policy.controlloop.VirtualControlLoopNotification");
+       noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events.custom.gson", "org.onap.policy.controlloop.util.Serialization,gsonPretty");
+       noopTopics = TopicEndpoint.manager.addTopicSinks(noopSinkProperties);
+       
+       EventProtocolCoder.manager.addEncoder("junit.groupId", "junit.artifactId", "POLICY-CL-MGT", "org.onap.policy.controlloop.VirtualControlLoopNotification", new JsonProtocolFilter(), null, null, 1111);
+
                try {
                        Util.buildAaiSim();
                        Util.buildVfcSim();
@@ -80,6 +100,7 @@ public class VFCControlLoopTest implements PolicyEngineListener {
        @AfterClass
        public static void tearDownSimulator() {
                HttpServletServer.factory.destroy();
+               PolicyEngine.manager.shutdown();
        }
 
        @Test
@@ -89,7 +110,7 @@ public class VFCControlLoopTest implements PolicyEngineListener {
          * Start the kie session
          */
         try {
-            kieSession = startSession("src/main/resources/ControlLoop_Template_xacml_guard.drl", 
+            kieSession = startSession("../archetype-cl-amsterdam/src/main/resources/archetype-resources/src/main/resources/__closedLoopControlName__.drl", 
                         "src/test/resources/yaml/policy_ControlLoop_VFC.yaml",
                         "type=operational", 
                         "CL_VoLTE", 
@@ -105,7 +126,10 @@ public class VFCControlLoopTest implements PolicyEngineListener {
          * notify that there is an event ready to be pulled 
          * from the queue
          */
-        engine.addListener(this);
+        for (TopicSink sink : noopTopics) {
+            assertTrue(sink.start());
+            sink.register(this);
+        }
         
         /*
          * Create a unique requestId
@@ -183,7 +207,6 @@ public class VFCControlLoopTest implements PolicyEngineListener {
         /*
          * Retrieve the Policy Engine
          */
-               engine = (PolicyEngineJUnitImpl) kieSession.getGlobal("Engine");
 
                logger.debug("============");
                logger.debug(URLEncoder.encode(pair.b, "UTF-8"));
@@ -196,12 +219,15 @@ public class VFCControlLoopTest implements PolicyEngineListener {
      * (non-Javadoc)
      * @see org.onap.policy.drools.PolicyEngineListener#newEventNotification(java.lang.String)
      */
-       public void newEventNotification(String topic) {
+       public void onTopicEvent(CommInfrastructure commType, String topic, String event) {
         /*
          * Pull the object that was sent out to DMAAP and make
          * sure it is a ControlLoopNoticiation of type active
          */
-        Object obj = engine.subscribe("UEB", topic);
+               Object obj = null;
+        if ("POLICY-CL-MGT".equals(topic)) {
+               obj = org.onap.policy.controlloop.util.Serialization.gsonJunit.fromJson(event, org.onap.policy.controlloop.VirtualControlLoopNotification.class);
+       }
         assertNotNull(obj);
         if (obj instanceof VirtualControlLoopNotification) {
             VirtualControlLoopNotification notification = (VirtualControlLoopNotification) obj;
@@ -220,7 +246,7 @@ public class VFCControlLoopTest implements PolicyEngineListener {
                 logger.debug("Rule Fired: " + notification.policyName);
                 assertTrue(ControlLoopNotificationType.OPERATION.equals(notification.notification));
                 assertNotNull(notification.message);
-                assertTrue(notification.message.endsWith("PERMIT"));
+                assertTrue(notification.message.toLowerCase().endsWith("permit"));
             }
             else if (policyName.endsWith("GUARD_PERMITTED")) {
                 logger.debug("Rule Fired: " + notification.policyName);
index fb4dc02..cef39b5 100644 (file)
@@ -29,6 +29,8 @@ import java.io.IOException;
 import java.net.URLEncoder;
 import java.time.Instant;
 import java.util.HashMap;
+import java.util.List;
+import java.util.Properties;
 import java.util.UUID;
 
 import org.junit.AfterClass;
@@ -44,19 +46,26 @@ import org.onap.policy.controlloop.ControlLoopNotificationType;
 import org.onap.policy.controlloop.VirtualControlLoopEvent;
 import org.onap.policy.controlloop.VirtualControlLoopNotification;
 import org.onap.policy.controlloop.policy.ControlLoopPolicy;
-import org.onap.policy.drools.PolicyEngineListener;
+import org.onap.policy.drools.event.comm.TopicEndpoint;
+import org.onap.policy.drools.event.comm.TopicListener;
+import org.onap.policy.drools.event.comm.TopicSink;
+import org.onap.policy.drools.event.comm.Topic.CommInfrastructure;
 import org.onap.policy.drools.http.server.HttpServletServer;
-import org.onap.policy.drools.impl.PolicyEngineJUnitImpl;
+import org.onap.policy.drools.properties.PolicyProperties;
+import org.onap.policy.drools.protocol.coders.EventProtocolCoder;
+import org.onap.policy.drools.protocol.coders.JsonProtocolFilter;
+import org.onap.policy.drools.system.PolicyEngine;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class VFWControlLoopTest implements PolicyEngineListener {
+public class VFWControlLoopTest implements TopicListener {
 
     private static final Logger logger = LoggerFactory.getLogger(VFWControlLoopTest.class);
     
+    private static List<? extends TopicSink> noopTopics;
+    
     private KieSession kieSession;
     private Util.Pair<ControlLoopPolicy, String> pair;
-    private PolicyEngineJUnitImpl engine;
     private UUID requestID;
     
     static {
@@ -68,6 +77,19 @@ public class VFWControlLoopTest implements PolicyEngineListener {
     
     @BeforeClass
     public static void setUpSimulator() {
+       PolicyEngine.manager.configure(new Properties());
+       assertTrue(PolicyEngine.manager.start());
+       Properties noopSinkProperties = new Properties();
+       noopSinkProperties.put(PolicyProperties.PROPERTY_NOOP_SINK_TOPICS, "APPC-CL,POLICY-CL-MGT");
+       noopSinkProperties.put("noop.sink.topics.APPC-CL.events", "org.onap.policy.appc.Response");
+       noopSinkProperties.put("noop.sink.topics.APPC-CL.events.custom.gson", "org.onap.policy.appc.util.Serialization,gsonPretty");
+       noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events", "org.onap.policy.controlloop.VirtualControlLoopNotification");
+       noopSinkProperties.put("noop.sink.topics.POLICY-CL-MGT.events.custom.gson", "org.onap.policy.controlloop.util.Serialization,gsonPretty");
+       noopTopics = TopicEndpoint.manager.addTopicSinks(noopSinkProperties);
+       
+       EventProtocolCoder.manager.addEncoder("junit.groupId", "junit.artifactId", "POLICY-CL-MGT", "org.onap.policy.controlloop.VirtualControlLoopNotification", new JsonProtocolFilter(), null, null, 1111);
+       EventProtocolCoder.manager.addEncoder("junit.groupId", "junit.artifactId", "APPC-CL", "org.onap.policy.appc.Request", new JsonProtocolFilter(), null, null, 1111);
+
         try {
             Util.buildAaiSim();
             Util.buildGuardSim();
@@ -79,6 +101,7 @@ public class VFWControlLoopTest implements PolicyEngineListener {
     @AfterClass
     public static void tearDownSimulator() {
         HttpServletServer.factory.destroy();
+        PolicyEngine.manager.shutdown();
     }
     
     @Test
@@ -88,7 +111,7 @@ public class VFWControlLoopTest implements PolicyEngineListener {
          * Start the kie session
          */
         try {
-            kieSession = startSession("src/main/resources/ControlLoop_Template_xacml_guard.drl", 
+            kieSession = startSession("../archetype-cl-amsterdam/src/main/resources/archetype-resources/src/main/resources/__closedLoopControlName__.drl", 
                         "src/test/resources/yaml/policy_ControlLoop_vFW.yaml",
                         "service=ServiceDemo;resource=Res1Demo;type=operational", 
                         "CL_vFW", 
@@ -104,7 +127,10 @@ public class VFWControlLoopTest implements PolicyEngineListener {
          * notify that there is an event ready to be pulled 
          * from the queue
          */
-        engine.addListener(this);
+        for (TopicSink sink : noopTopics) {
+            assertTrue(sink.start());
+            sink.register(this);
+        }
         
         /*
          * Create a unique requestId
@@ -118,7 +144,15 @@ public class VFWControlLoopTest implements PolicyEngineListener {
          */
         sendEvent(pair.a, requestID, ControlLoopEventStatus.ONSET);
         
-        kieSession.fireUntilHalt();
+        try {
+               kieSession.fireUntilHalt();
+        }
+        catch (Exception e) {
+               e.printStackTrace();
+               logger.warn(e.toString());
+               fail("fail");
+        }
+        
         
         /*
          * The only fact in memory should be Params
@@ -182,7 +216,6 @@ public class VFWControlLoopTest implements PolicyEngineListener {
         /*
          * Retrieve the Policy Engine
          */
-        engine = (PolicyEngineJUnitImpl) kieSession.getGlobal("Engine");
         
         logger.debug("============");
         logger.debug(URLEncoder.encode(pair.b, "UTF-8"));
@@ -194,12 +227,17 @@ public class VFWControlLoopTest implements PolicyEngineListener {
     /*
      * @see org.onap.policy.drools.PolicyEngineListener#newEventNotification(java.lang.String)
      */
-    public void newEventNotification(String topic) {
+    public void onTopicEvent(CommInfrastructure commType, String topic, String event) {
         /*
          * Pull the object that was sent out to DMAAP and make
          * sure it is a ControlLoopNoticiation of type active
          */
-        Object obj = engine.subscribe("UEB", topic);
+       Object obj = null;
+        if ("POLICY-CL-MGT".equals(topic)) {
+               obj = org.onap.policy.controlloop.util.Serialization.gsonJunit.fromJson(event, org.onap.policy.controlloop.VirtualControlLoopNotification.class);
+       }
+       else if ("APPC-CL".equals(topic))
+               obj = org.onap.policy.appc.util.Serialization.gsonPretty.fromJson(event, org.onap.policy.appc.Request.class);
         assertNotNull(obj);
         if (obj instanceof VirtualControlLoopNotification) {
             VirtualControlLoopNotification notification = (VirtualControlLoopNotification) obj;
@@ -218,7 +256,7 @@ public class VFWControlLoopTest implements PolicyEngineListener {
                 logger.debug("Rule Fired: " + notification.policyName);
                 assertTrue(ControlLoopNotificationType.OPERATION.equals(notification.notification));
                 assertNotNull(notification.message);
-                assertTrue(notification.message.endsWith("PERMIT"));
+                assertTrue(notification.message.toLowerCase().endsWith("permit"));
             }
             else if (policyName.endsWith("GUARD_PERMITTED")) {
                 logger.debug("Rule Fired: " + notification.policyName);