summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--controlloop/common/controller-beijing/.gitignore1
-rw-r--r--controlloop/common/controller-casablanca/.gitignore1
-rw-r--r--controlloop/common/controller-casablanca/pom.xml (renamed from controlloop/common/controller-beijing/pom.xml)8
-rw-r--r--controlloop/common/controller-casablanca/src/main/resources/META-INF/kmodule.xml (renamed from controlloop/common/controller-beijing/src/main/resources/META-INF/kmodule.xml)2
-rw-r--r--controlloop/common/feature-controlloop-beijing/src/main/resources/META-INF/services/org.onap.policy.drools.features.PolicyEngineFeatureAPI1
-rw-r--r--controlloop/common/feature-controlloop-casablanca/pom.xml (renamed from controlloop/common/feature-controlloop-beijing/pom.xml)4
-rw-r--r--controlloop/common/feature-controlloop-casablanca/src/assembly/assemble_zip.xml (renamed from controlloop/common/feature-controlloop-beijing/src/assembly/assemble_zip.xml)4
-rw-r--r--controlloop/common/feature-controlloop-casablanca/src/main/feature/config/casablanca-controller.properties (renamed from controlloop/common/feature-controlloop-beijing/src/main/feature/config/beijing-controller.properties)4
-rw-r--r--controlloop/common/feature-controlloop-casablanca/src/main/java/org/onap/policy/drools/apps/controlloop/feature/casablanca/CasablancaFeature.java (renamed from controlloop/common/feature-controlloop-beijing/src/main/java/org/onap/policy/drools/apps/controlloop/feature/beijing/BeijingFeature.java)8
-rw-r--r--controlloop/common/feature-controlloop-casablanca/src/main/resources/META-INF/services/org.onap.policy.drools.features.PolicyEngineFeatureAPI1
-rw-r--r--controlloop/common/feature-controlloop-casablanca/src/test/java/org/onap/policy/drools/apps/controlloop/feature/casablanca/CasablancaFeatureTest.java (renamed from controlloop/common/feature-controlloop-beijing/src/test/java/org/onap/policy/drools/apps/controlloop/feature/beijing/BeijingFeatureTest.java)10
-rw-r--r--controlloop/common/pom.xml4
-rw-r--r--controlloop/packages/apps-controlloop/pom.xml2
-rw-r--r--controlloop/packages/apps-controlloop/src/files/apps-controlloop-installer2
-rw-r--r--controlloop/packages/basex-controlloop/src/files/bin/create-cl-casablanca (renamed from controlloop/packages/basex-controlloop/src/files/bin/create-cl-beijing)14
-rw-r--r--controlloop/packages/basex-controlloop/src/files/bin/push-policies-casablanca (renamed from controlloop/packages/basex-controlloop/src/files/bin/push-policies-beijing)2
-rw-r--r--controlloop/templates/archetype-cl-casablanca/pom.xml (renamed from controlloop/templates/archetype-cl-beijing/pom.xml)4
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/META-INF/maven/archetype-metadata.xml (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/META-INF/maven/archetype-metadata.xml)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/pom.xml (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/pom.xml)2
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/VoLTE.yaml (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/VoLTE.yaml)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/__artifactId__-controller.properties (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/__artifactId__-controller.properties)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/__artifactId__-controller.rest.json (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/__artifactId__-controller.rest.json)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/appc.lcm.success.json (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/appc.lcm.success.json)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/appc.legacy.success.json (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/appc.legacy.success.json)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/dcae.vcpe.abatement.json (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/dcae.vcpe.abatement.json)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/dcae.vcpe.onset.json (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/dcae.vcpe.onset.json)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/dcae.vdns.onset.json (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/dcae.vdns.onset.json)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/dcae.vfw.onset.json (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/dcae.vfw.onset.json)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/dcae.volte.onset.json (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/dcae.volte.onset.json)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/so.success.json (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/so.success.json)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vCPE.yaml (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vCPE.yaml)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vDNS.yaml (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vDNS.yaml)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vFW.yaml (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vFW.yaml)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vcpe.brmsgw.params.json (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vcpe.brmsgw.params.json)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vdns.brmsgw.params.json (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vdns.brmsgw.params.json)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vfw.brmsgw.params.json (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vfw.brmsgw.params.json)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/volte.brmsgw.params.json (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/volte.brmsgw.params.json)0
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/resources/META-INF/kmodule.xml (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/resources/META-INF/kmodule.xml)2
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/resources/__closedLoopControlName__.drl (renamed from controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/resources/__closedLoopControlName__.drl)720
-rw-r--r--controlloop/templates/archetype-cl-casablanca/src/test/resources/projects/basic/archetype.properties (renamed from controlloop/templates/archetype-cl-beijing/src/test/resources/projects/basic/archetype.properties)0
-rw-r--r--controlloop/templates/pom.xml2
-rw-r--r--testsuites/performance/pom.xml51
-rw-r--r--testsuites/performance/src/assembly/assembly.xml42
-rw-r--r--testsuites/performance/src/main/resources/amsterdam/generate-mt-performance-report611
-rw-r--r--testsuites/performance/src/main/resources/amsterdam/policyMTPerformanceTestPlan.jmx1393
-rw-r--r--testsuites/pom.xml2
46 files changed, 2511 insertions, 386 deletions
diff --git a/controlloop/common/controller-beijing/.gitignore b/controlloop/common/controller-beijing/.gitignore
deleted file mode 100644
index 2e1b1149f..000000000
--- a/controlloop/common/controller-beijing/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-src/main/resources/beijing.drl
diff --git a/controlloop/common/controller-casablanca/.gitignore b/controlloop/common/controller-casablanca/.gitignore
new file mode 100644
index 000000000..f4e96567c
--- /dev/null
+++ b/controlloop/common/controller-casablanca/.gitignore
@@ -0,0 +1 @@
+src/main/resources/casablanca.drl
diff --git a/controlloop/common/controller-beijing/pom.xml b/controlloop/common/controller-casablanca/pom.xml
index 7fe97a994..deeb5b346 100644
--- a/controlloop/common/controller-beijing/pom.xml
+++ b/controlloop/common/controller-casablanca/pom.xml
@@ -29,11 +29,11 @@
<version>1.3.0-SNAPSHOT</version>
</parent>
- <artifactId>controller-beijing</artifactId>
+ <artifactId>controller-casablanca</artifactId>
<packaging>kjar</packaging>
<name>${project.artifactId}</name>
- <description>Beijing Experimental Controller</description>
+ <description>Casablanca Experimental Controller</description>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
@@ -62,9 +62,9 @@
</goals>
<configuration>
<sourceFile>
- ../../templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/resources/__closedLoopControlName__.drl
+ ../../templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/resources/__closedLoopControlName__.drl
</sourceFile>
- <destinationFile>src/main/resources/beijing.drl</destinationFile>
+ <destinationFile>src/main/resources/casablanca.drl</destinationFile>
</configuration>
</execution>
</executions>
diff --git a/controlloop/common/controller-beijing/src/main/resources/META-INF/kmodule.xml b/controlloop/common/controller-casablanca/src/main/resources/META-INF/kmodule.xml
index fb96d70fd..3c2030da9 100644
--- a/controlloop/common/controller-beijing/src/main/resources/META-INF/kmodule.xml
+++ b/controlloop/common/controller-casablanca/src/main/resources/META-INF/kmodule.xml
@@ -20,6 +20,6 @@
-->
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<kbase name="rules">
- <ksession name="beijing"/>
+ <ksession name="casablanca"/>
</kbase>
</kmodule>
diff --git a/controlloop/common/feature-controlloop-beijing/src/main/resources/META-INF/services/org.onap.policy.drools.features.PolicyEngineFeatureAPI b/controlloop/common/feature-controlloop-beijing/src/main/resources/META-INF/services/org.onap.policy.drools.features.PolicyEngineFeatureAPI
deleted file mode 100644
index 93439489c..000000000
--- a/controlloop/common/feature-controlloop-beijing/src/main/resources/META-INF/services/org.onap.policy.drools.features.PolicyEngineFeatureAPI
+++ /dev/null
@@ -1 +0,0 @@
-org.onap.policy.drools.apps.controlloop.feature.beijing.BeijingFeature
diff --git a/controlloop/common/feature-controlloop-beijing/pom.xml b/controlloop/common/feature-controlloop-casablanca/pom.xml
index 33aca1772..dd60243c0 100644
--- a/controlloop/common/feature-controlloop-beijing/pom.xml
+++ b/controlloop/common/feature-controlloop-casablanca/pom.xml
@@ -28,10 +28,10 @@
<version>1.3.0-SNAPSHOT</version>
</parent>
- <artifactId>feature-controlloop-beijing</artifactId>
+ <artifactId>feature-controlloop-casablanca</artifactId>
<description>
- Load Experimental Beijing Control Loop Use Cases Controller as a feature.
+ Load Experimental Casablanca Control Loop Use Cases Controller as a feature.
</description>
<properties>
diff --git a/controlloop/common/feature-controlloop-beijing/src/assembly/assemble_zip.xml b/controlloop/common/feature-controlloop-casablanca/src/assembly/assemble_zip.xml
index f549cfc91..7cb637918 100644
--- a/controlloop/common/feature-controlloop-beijing/src/assembly/assemble_zip.xml
+++ b/controlloop/common/feature-controlloop-casablanca/src/assembly/assemble_zip.xml
@@ -24,7 +24,7 @@
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
- <id>feature-controlloop-beijing-package</id>
+ <id>feature-controlloop-casablanca-package</id>
<formats>
<format>zip</format>
</formats>
@@ -36,7 +36,7 @@
<directory>target</directory>
<outputDirectory>lib/feature</outputDirectory>
<includes>
- <include>feature-controlloop-beijing-${project.version}.jar</include>
+ <include>feature-controlloop-casablanca-${project.version}.jar</include>
</includes>
</fileSet>
<fileSet>
diff --git a/controlloop/common/feature-controlloop-beijing/src/main/feature/config/beijing-controller.properties b/controlloop/common/feature-controlloop-casablanca/src/main/feature/config/casablanca-controller.properties
index 787e90f0c..5d1a0a3c6 100644
--- a/controlloop/common/feature-controlloop-beijing/src/main/feature/config/beijing-controller.properties
+++ b/controlloop/common/feature-controlloop-casablanca/src/main/feature/config/casablanca-controller.properties
@@ -18,7 +18,7 @@
# ============LICENSE_END=========================================================
###
-controller.name=beijing
+controller.name=casablanca
ueb.source.topics=${{PDPD_CONFIGURATION_TOPIC}},${{DCAE_TOPIC}},APPC-CL,APPC-LCM-WRITE
@@ -71,5 +71,5 @@ ueb.sink.topics.POLICY-CL-MGT.events=org.onap.policy.controlloop.VirtualControlL
ueb.sink.topics.POLICY-CL-MGT.events.custom.gson=org.onap.policy.controlloop.util.Serialization,gsonPretty
rules.groupId=${project.groupId}
-rules.artifactId=controller-beijing
+rules.artifactId=controller-casablanca
rules.version=${project.version}
diff --git a/controlloop/common/feature-controlloop-beijing/src/main/java/org/onap/policy/drools/apps/controlloop/feature/beijing/BeijingFeature.java b/controlloop/common/feature-controlloop-casablanca/src/main/java/org/onap/policy/drools/apps/controlloop/feature/casablanca/CasablancaFeature.java
index 6f2a03c77..79bef2326 100644
--- a/controlloop/common/feature-controlloop-beijing/src/main/java/org/onap/policy/drools/apps/controlloop/feature/beijing/BeijingFeature.java
+++ b/controlloop/common/feature-controlloop-casablanca/src/main/java/org/onap/policy/drools/apps/controlloop/feature/casablanca/CasablancaFeature.java
@@ -18,13 +18,13 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policy.drools.apps.controlloop.feature.beijing;
+package org.onap.policy.drools.apps.controlloop.feature.casablanca;
import org.onap.policy.drools.features.PolicyEngineFeatureAPI;
/**
- * Beijing installation as a feature saves time
- * loading the Beijing controller at runtime over the
+ * Casablanca installation as a feature saves time
+ * loading the Casablanca controller at runtime over the
* usual installation from nexus. It also reduces
* potential for errors in the pom.xml generated in
* the brmsgw side.
@@ -36,7 +36,7 @@ import org.onap.policy.drools.features.PolicyEngineFeatureAPI;
* functionality
*
*/
-public class BeijingFeature implements PolicyEngineFeatureAPI {
+public class CasablancaFeature implements PolicyEngineFeatureAPI {
public static final int SEQNO = 1000;
diff --git a/controlloop/common/feature-controlloop-casablanca/src/main/resources/META-INF/services/org.onap.policy.drools.features.PolicyEngineFeatureAPI b/controlloop/common/feature-controlloop-casablanca/src/main/resources/META-INF/services/org.onap.policy.drools.features.PolicyEngineFeatureAPI
new file mode 100644
index 000000000..5252ca115
--- /dev/null
+++ b/controlloop/common/feature-controlloop-casablanca/src/main/resources/META-INF/services/org.onap.policy.drools.features.PolicyEngineFeatureAPI
@@ -0,0 +1 @@
+org.onap.policy.drools.apps.controlloop.feature.casablanca.CasablancaFeature
diff --git a/controlloop/common/feature-controlloop-beijing/src/test/java/org/onap/policy/drools/apps/controlloop/feature/beijing/BeijingFeatureTest.java b/controlloop/common/feature-controlloop-casablanca/src/test/java/org/onap/policy/drools/apps/controlloop/feature/casablanca/CasablancaFeatureTest.java
index 66e5a3e02..8960603ae 100644
--- a/controlloop/common/feature-controlloop-beijing/src/test/java/org/onap/policy/drools/apps/controlloop/feature/beijing/BeijingFeatureTest.java
+++ b/controlloop/common/feature-controlloop-casablanca/src/test/java/org/onap/policy/drools/apps/controlloop/feature/casablanca/CasablancaFeatureTest.java
@@ -17,16 +17,14 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
-package org.onap.policy.drools.apps.controlloop.feature.beijing;
+package org.onap.policy.drools.apps.controlloop.feature.casablanca;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
-import org.onap.policy.drools.apps.controlloop.feature.beijing.BeijingFeature;
-
-public class BeijingFeatureTest {
+public class CasablancaFeatureTest {
@org.junit.Test
public void getSequenceNumber() {
- assertTrue(new BeijingFeature().getSequenceNumber() == BeijingFeature.SEQNO);
+ assertEquals(CasablancaFeature.SEQNO, new CasablancaFeature().getSequenceNumber());
}
}
diff --git a/controlloop/common/pom.xml b/controlloop/common/pom.xml
index ae318d626..5e3b3de37 100644
--- a/controlloop/common/pom.xml
+++ b/controlloop/common/pom.xml
@@ -39,11 +39,11 @@
<module>model-impl</module>
<module>policy-yaml</module>
<module>simulators</module>
- <module>controller-beijing</module>
+ <module>controller-casablanca</module>
<module>feature-controlloop-utils</module>
<module>feature-controlloop-trans</module>
<module>feature-controlloop-amsterdam</module>
- <module>feature-controlloop-beijing</module>
+ <module>feature-controlloop-casablanca</module>
<module>msb</module>
</modules>
diff --git a/controlloop/packages/apps-controlloop/pom.xml b/controlloop/packages/apps-controlloop/pom.xml
index d345d8f5f..9773ee6f6 100644
--- a/controlloop/packages/apps-controlloop/pom.xml
+++ b/controlloop/packages/apps-controlloop/pom.xml
@@ -90,7 +90,7 @@
</dependency>
<dependency>
<groupId>org.onap.policy.drools-applications.controlloop.common</groupId>
- <artifactId>feature-controlloop-beijing</artifactId>
+ <artifactId>feature-controlloop-casablanca</artifactId>
<version>${project.version}</version>
<type>zip</type>
</dependency>
diff --git a/controlloop/packages/apps-controlloop/src/files/apps-controlloop-installer b/controlloop/packages/apps-controlloop/src/files/apps-controlloop-installer
index b50f6efea..4d75ec8e3 100644
--- a/controlloop/packages/apps-controlloop/src/files/apps-controlloop-installer
+++ b/controlloop/packages/apps-controlloop/src/files/apps-controlloop-installer
@@ -37,7 +37,7 @@ source ${POLICY_HOME}/etc/build.info
features install controlloop-trans
features install controlloop-amsterdam
-features install controlloop-beijing
+features install controlloop-casablanca
features enable controlloop-trans
features enable controlloop-amsterdam
diff --git a/controlloop/packages/basex-controlloop/src/files/bin/create-cl-beijing b/controlloop/packages/basex-controlloop/src/files/bin/create-cl-casablanca
index 6972fd0fb..d32657444 100644
--- a/controlloop/packages/basex-controlloop/src/files/bin/create-cl-beijing
+++ b/controlloop/packages/basex-controlloop/src/files/bin/create-cl-casablanca
@@ -25,14 +25,14 @@
source "${POLICY_HOME}"/etc/build.info
-echo "Control Loop CLI Generator for R2 Beijing Release"
+echo "Control Loop CLI Generator for R2 Casablanca Release"
echo "---------------------------------------------------"
echo
-GROUP_ID="org.onap.policy.rules.beijing"
-ARTIFACT_ID="beijing"
+GROUP_ID="org.onap.policy.rules.casablanca"
+ARTIFACT_ID="casablanca"
VERSION="${version:-1.2.0}"
-PACKAGE="org.onap.policy.rules.beijing"
+PACKAGE="org.onap.policy.rules.casablanca"
# vCPE Policy Parameters
VCPE_CONTROL_LOOP_NAME="ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e"
@@ -55,7 +55,7 @@ VOLTE_POLICY_NAME="volte"
VOLTE_CONTROL_LOOP_YAML="controlLoop%3A%0D%0A++version%3A+2.0.0%0D%0A++controlLoopName%3A+ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b%0D%0A++trigger_policy%3A+unique-policy-id-1-restart%0D%0A++timeout%3A+3600%0D%0A++abatement%3A+false%0D%0A+%0D%0Apolicies%3A%0D%0A++-+id%3A+unique-policy-id-1-restart%0D%0A++++name%3A+Restart+the+VM%0D%0A++++description%3A%0D%0A++++actor%3A+VFC%0D%0A++++recipe%3A+Restart%0D%0A++++target%3A%0D%0A++++++type%3A+VM%0D%0A++++retry%3A+3%0D%0A++++timeout%3A+1200%0D%0A++++success%3A+final_success%0D%0A++++failure%3A+final_failure%0D%0A++++failure_timeout%3A+final_failure_timeout%0D%0A++++failure_retries%3A+final_failure_retries%0D%0A++++failure_exception%3A+final_failure_exception%0D%0A++++failure_guard%3A+final_failure_guard"
# Generic Scope and Version
-POLICY_SCOPE="beijing"
+POLICY_SCOPE="casablanca"
POLICY_VERSION="v0.0.1"
BRMSGW_TOPIC="BRMSGW-POLICY"
@@ -196,7 +196,7 @@ if [ ! -w "${DIR_TMP}" ]; then
fi
ARCHETYPE_GROUP_ID="org.onap.policy.drools-applications.controlloop.templates"
-ARCHETYPE_ARTIFACT_ID="archetype-cl-beijing"
+ARCHETYPE_ARTIFACT_ID="archetype-cl-casablanca"
ARCHETYPE_VERSION="${VERSION}"
if [ -d "${DIR_TMP}/${ARTIFACT_ID}/" ]; then
@@ -310,7 +310,7 @@ echo "1. copy ${DIR_TMP}/${ARTIFACT_ID}/${ARTIFACT_ID}-controller.properties und
echo " and restart the pdp-d (policy stop; policy start)"
echo "2. cd ${DIR_TMP}/${ARTIFACT_ID}/; rest-add-controller ${ARTIFACT_ID}"
echo
-echo "Once this Control Loop is deployed, you can run the push-policies-beijing script"
+echo "Once this Control Loop is deployed, you can run the push-policies-casablanca script"
echo "to automatically insert the policies for all use cases supported in this release"
echo
)
diff --git a/controlloop/packages/basex-controlloop/src/files/bin/push-policies-beijing b/controlloop/packages/basex-controlloop/src/files/bin/push-policies-casablanca
index 92259790a..685deb1c3 100644
--- a/controlloop/packages/basex-controlloop/src/files/bin/push-policies-beijing
+++ b/controlloop/packages/basex-controlloop/src/files/bin/push-policies-casablanca
@@ -119,4 +119,4 @@ echo "Policy insertions completed."
echo
echo "The working memory is now: "
-curl --silent --user @1b3rt:31nst31n -X GET http://localhost:9696/policy/pdp/engine/controllers/${CONTROLLER_NAME}/drools/facts/beijing | python -m json.tool
+curl --silent --user @1b3rt:31nst31n -X GET http://localhost:9696/policy/pdp/engine/controllers/${CONTROLLER_NAME}/drools/facts/casablanca | python -m json.tool
diff --git a/controlloop/templates/archetype-cl-beijing/pom.xml b/controlloop/templates/archetype-cl-casablanca/pom.xml
index e98eab18c..dd9ef5abe 100644
--- a/controlloop/templates/archetype-cl-beijing/pom.xml
+++ b/controlloop/templates/archetype-cl-casablanca/pom.xml
@@ -30,10 +30,10 @@
<version>1.3.0-SNAPSHOT</version>
</parent>
- <artifactId>archetype-cl-beijing</artifactId>
+ <artifactId>archetype-cl-casablanca</artifactId>
<name>${project.artifactId}</name>
- <description>Archetype to generate a yaml based control loop for ONAP Beijing release</description>
+ <description>Archetype to generate a yaml based control loop for ONAP Casablanca release</description>
<build>
<extensions>
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/META-INF/maven/archetype-metadata.xml b/controlloop/templates/archetype-cl-casablanca/src/main/resources/META-INF/maven/archetype-metadata.xml
index 2acec10dd..2acec10dd 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/META-INF/maven/archetype-metadata.xml
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/META-INF/maven/archetype-metadata.xml
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/pom.xml b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/pom.xml
index fae94aecb..1fc31bae2 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/pom.xml
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/pom.xml
@@ -29,7 +29,7 @@
<packaging>kjar</packaging>
<name>${artifactId}</name>
- <description>Control Loop Beijing Release Rules</description>
+ <description>Control Loop Casablanca Release Rules</description>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/VoLTE.yaml b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/VoLTE.yaml
index 03001520b..03001520b 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/VoLTE.yaml
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/VoLTE.yaml
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/__artifactId__-controller.properties b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/__artifactId__-controller.properties
index 390a946fe..390a946fe 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/__artifactId__-controller.properties
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/__artifactId__-controller.properties
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/__artifactId__-controller.rest.json b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/__artifactId__-controller.rest.json
index 148e35562..148e35562 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/__artifactId__-controller.rest.json
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/__artifactId__-controller.rest.json
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/appc.lcm.success.json b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/appc.lcm.success.json
index 985685000..985685000 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/appc.lcm.success.json
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/appc.lcm.success.json
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/appc.legacy.success.json b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/appc.legacy.success.json
index 2c6570d03..2c6570d03 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/appc.legacy.success.json
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/appc.legacy.success.json
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/dcae.vcpe.abatement.json b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/dcae.vcpe.abatement.json
index 3d6dc4ae1..3d6dc4ae1 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/dcae.vcpe.abatement.json
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/dcae.vcpe.abatement.json
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/dcae.vcpe.onset.json b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/dcae.vcpe.onset.json
index 98403b034..98403b034 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/dcae.vcpe.onset.json
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/dcae.vcpe.onset.json
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/dcae.vdns.onset.json b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/dcae.vdns.onset.json
index 80730e9e3..80730e9e3 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/dcae.vdns.onset.json
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/dcae.vdns.onset.json
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/dcae.vfw.onset.json b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/dcae.vfw.onset.json
index 0aa0effa6..0aa0effa6 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/dcae.vfw.onset.json
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/dcae.vfw.onset.json
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/dcae.volte.onset.json b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/dcae.volte.onset.json
index 2cf28fb3f..2cf28fb3f 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/dcae.volte.onset.json
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/dcae.volte.onset.json
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/so.success.json b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/so.success.json
index 8f3387e4d..8f3387e4d 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/so.success.json
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/so.success.json
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vCPE.yaml b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vCPE.yaml
index 2838b6127..2838b6127 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vCPE.yaml
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vCPE.yaml
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vDNS.yaml b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vDNS.yaml
index d4ed17396..d4ed17396 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vDNS.yaml
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vDNS.yaml
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vFW.yaml b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vFW.yaml
index dcbdf5459..dcbdf5459 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vFW.yaml
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vFW.yaml
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vcpe.brmsgw.params.json b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vcpe.brmsgw.params.json
index 6b0ebd227..6b0ebd227 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vcpe.brmsgw.params.json
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vcpe.brmsgw.params.json
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vdns.brmsgw.params.json b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vdns.brmsgw.params.json
index 744723c87..744723c87 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vdns.brmsgw.params.json
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vdns.brmsgw.params.json
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vfw.brmsgw.params.json b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vfw.brmsgw.params.json
index 353c19c59..353c19c59 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/vfw.brmsgw.params.json
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/vfw.brmsgw.params.json
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/volte.brmsgw.params.json b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/volte.brmsgw.params.json
index c20b25adc..c20b25adc 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/config/volte.brmsgw.params.json
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/config/volte.brmsgw.params.json
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/resources/META-INF/kmodule.xml b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/resources/META-INF/kmodule.xml
index 0e6660e5c..d30e3c525 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/resources/META-INF/kmodule.xml
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/resources/META-INF/kmodule.xml
@@ -24,6 +24,6 @@
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<kbase name="rules">
- <ksession name="beijing"/>
+ <ksession name="casablanca"/>
</kbase>
</kmodule>
diff --git a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/resources/__closedLoopControlName__.drl b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/resources/__closedLoopControlName__.drl
index 7e0d7e1a0..24cb7f86a 100644
--- a/controlloop/templates/archetype-cl-beijing/src/main/resources/archetype-resources/src/main/resources/__closedLoopControlName__.drl
+++ b/controlloop/templates/archetype-cl-casablanca/src/main/resources/archetype-resources/src/main/resources/__closedLoopControlName__.drl
@@ -7,9 +7,9 @@
* 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.
@@ -97,19 +97,17 @@ end
/*
*
-* Called to insert the ControlLoopParams object into working memory from the BRMSGW.
+* Called when the ControlLoopParams object has been inserted into working memory from the BRMSGW.
*
*/
rule "INSERT.PARAMS"
when
$params : ControlLoopParams()
then
-
- insert($params);
// Note: globals have bad behavior when persistence is used,
// hence explicitly getting the logger vs using a global
-
+
Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
logger.info("{}: {} : YAML=[{}]", $params.getClosedLoopControlName(), $params.getPolicyName() + "." + drools.getRule().getName(), $params.getControlLoopYaml());
end
@@ -126,12 +124,12 @@ rule "EVENT"
$event : VirtualControlLoopEvent( closedLoopControlName == $clName )
not ( ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(), requestID == $event.getRequestId() ) )
then
-
+
Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
-
+
try {
-
+
//
// Check the event, because we need it to not be null when
// we create the ControlLoopEventManager. The ControlLoopEventManager
@@ -145,18 +143,18 @@ rule "EVENT"
notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
notification.setPolicyScope($params.getPolicyScope());
notification.setPolicyVersion($params.getPolicyVersion());
-
+
//
// Let interested parties know
//
PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
-
+
//
// Retract it from memory
//
retract($event);
} else if ($event.getClosedLoopEventStatus() != ControlLoopEventStatus.ONSET) {
- throw new ControlLoopException($event.getClosedLoopEventStatus() + " received with no prior onset");
+ throw new ControlLoopException($event.getClosedLoopEventStatus() + " received with no prior onset");
} else {
//
// Create an EventManager
@@ -203,7 +201,7 @@ rule "EVENT"
//
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
@@ -212,7 +210,7 @@ rule "EVENT"
}
} catch (Exception e) {
logger.warn("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName(), e);
-
+
VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
notification.setNotification(ControlLoopNotificationType.REJECTED);
notification.setMessage("Exception occurred: " + e.getMessage());
@@ -245,66 +243,66 @@ rule "EVENT.MANAGER"
then
Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}: event={} manager={} clTimer={}",
+ logger.info("{}: {}: event={} manager={} clTimer={}",
$clName, $params.getPolicyName() + "." + drools.getRule().getName(),
$event, $manager, $clTimer);
-
+
try {
- //
- // Check which event this is.
- //
- ControlLoopEventManager.NEW_EVENT_STATUS eventStatus = $manager.onNewEvent($event);
- //
- // Check what kind of event this is
- //
- if (eventStatus == NEW_EVENT_STATUS.SUBSEQUENT_ONSET) {
- //
- // We don't care about subsequent onsets
- //
- logger.info("{}: {}: subsequent onset",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- retract($event);
- return;
- }
- if (eventStatus == NEW_EVENT_STATUS.SYNTAX_ERROR) {
- //
- // Ignore any bad syntax events
- //
- logger.warn("{}: {}: syntax error",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- retract($event);
- return;
- }
- //
- // We only want the initial ONSET event in memory,
- // all the other events need to be retracted to support
- // cleanup and avoid the other rules being fired for this event.
- //
- if (eventStatus != NEW_EVENT_STATUS.FIRST_ONSET) {
- logger.warn("{}: {}: no first onset",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- retract($event);
- }
-
- logger.debug("{}: {}: target={}", $clName,
- $params.getPolicyName() + "." + drools.getRule().getName(), $event.getTarget());
- //
- // Now start seeing if we need to process this event
- //
+ //
+ // Check which event this is.
+ //
+ ControlLoopEventManager.NEW_EVENT_STATUS eventStatus = $manager.onNewEvent($event);
+ //
+ // Check what kind of event this is
+ //
+ if (eventStatus == NEW_EVENT_STATUS.SUBSEQUENT_ONSET) {
+ //
+ // We don't care about subsequent onsets
+ //
+ logger.info("{}: {}: subsequent onset",
+ $clName, $params.getPolicyName() + "." + drools.getRule().getName());
+ retract($event);
+ return;
+ }
+ if (eventStatus == NEW_EVENT_STATUS.SYNTAX_ERROR) {
+ //
+ // Ignore any bad syntax events
+ //
+ logger.warn("{}: {}: syntax error",
+ $clName, $params.getPolicyName() + "." + drools.getRule().getName());
+ retract($event);
+ return;
+ }
+ //
+ // We only want the initial ONSET event in memory,
+ // all the other events need to be retracted to support
+ // cleanup and avoid the other rules being fired for this event.
+ //
+ if (eventStatus != NEW_EVENT_STATUS.FIRST_ONSET) {
+ logger.warn("{}: {}: no first onset",
+ $clName, $params.getPolicyName() + "." + drools.getRule().getName());
+ retract($event);
+ }
+
+ logger.debug("{}: {}: target={}", $clName,
+ $params.getPolicyName() + "." + drools.getRule().getName(), $event.getTarget());
+ //
+ // Now start seeing if we need to process this event
+ //
//
// Check if this is a Final Event
//
VirtualControlLoopNotification notification = $manager.isControlLoopFinal();
-
-
+
+
if (notification != null) {
//
// Its final, but are we waiting for abatement?
//
if ($manager.getNumAbatements() > 0) {
- logger.info("{}: {}: abatement received for {}. Closing the control loop",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
+ logger.info("{}: {}: abatement received for {}. Closing the control loop",
+ $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
$event.getRequestId());
notification.setFrom("policy");
notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
@@ -319,16 +317,16 @@ rule "EVENT.MANAGER"
//
TargetLock lock = $manager.unlockCurrentOperation();
if (lock != null) {
- logger.debug("{}: {}: retracting lock=", $clName,
+ logger.debug("{}: {}: retracting lock=", $clName,
$params.getPolicyName() + "." + drools.getRule().getName(), lock);
retract(lock);
}
//
// Retract everything from memory
//
- logger.info("{}: {}: retracting onset, manager, and timer",
+ logger.info("{}: {}: retracting onset, manager, and timer",
$clName, $params.getPolicyName() + "." + drools.getRule().getName());
-
+
retract($manager.getOnsetEvent());
retract($manager);
retract($clTimer);
@@ -342,18 +340,18 @@ rule "EVENT.MANAGER"
// Check whether we need to wait for abatement
//
if ($manager.getProcessor().getControlLoop().getAbatement() == true && notification.getNotification() == ControlLoopNotificationType.FINAL_SUCCESS) {
- logger.info("{}: {}: waiting for abatement ..",
+ logger.info("{}: {}: waiting for abatement ..",
$clName, $params.getPolicyName() + "." + drools.getRule().getName());
} else {
- logger.info("{}: {}: no abatement expect for {}. Closing the control loop",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
+ logger.info("{}: {}: no abatement expect for {}. Closing the control loop",
+ $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
$event.getRequestId());
-
+
notification.setFrom("policy");
notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
notification.setPolicyScope($params.getPolicyScope());
notification.setPolicyVersion($params.getPolicyVersion());
-
+
//
// In this case, we are done
//
@@ -363,16 +361,16 @@ rule "EVENT.MANAGER"
//
TargetLock lock = $manager.unlockCurrentOperation();
if (lock != null) {
- logger.debug("{}: {}: retracting lock=", $clName,
+ logger.debug("{}: {}: retracting lock=", $clName,
$params.getPolicyName() + "." + drools.getRule().getName(), lock);
retract(lock);
}
//
// Retract everything from memory
//
- logger.info("{}: {}: retracting onset, manager, and timer",
+ logger.info("{}: {}: retracting onset, manager, and timer",
$clName, $params.getPolicyName() + "." + drools.getRule().getName());
-
+
retract($manager.getOnsetEvent());
retract($manager);
retract($clTimer);
@@ -388,77 +386,81 @@ rule "EVENT.MANAGER"
// Let's ask for a lock right away
//
LockResult<GuardResult, TargetLock> result = $manager.lockCurrentOperation();
- logger.info("{}: {}: guard lock acquired={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
+ logger.info("{}: {}: guard lock acquired={}",
+ $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
result.getB());
if (result.getA().equals(GuardResult.LOCK_ACQUIRED)) {
- //
- // insert the operation into memory
- //
- insert(operation);
-
- //
- // insert operation timeout object
- //
- OperationTimer opTimer = new OperationTimer();
- opTimer.setClosedLoopControlName($event.getClosedLoopControlName());
- opTimer.setRequestID($event.getRequestId().toString());
- opTimer.setDelay(operation.getOperationTimeout().toString() + "s");
- insert(opTimer);
-
- //
- // Insert lock into memory
- //
- insert(result.getB());
+ //
+ // insert the operation into memory
+ //
+ insert(operation);
+
+ //
+ // insert operation timeout object
+ //
+ OperationTimer opTimer = new OperationTimer();
+ opTimer.setClosedLoopControlName($event.getClosedLoopControlName());
+ opTimer.setRequestID($event.getRequestId().toString());
+ opTimer.setDelay(operation.getOperationTimeout().toString() + "s");
+ insert(opTimer);
+
+ //
+ // Insert lock into memory
+ //
+ insert(result.getB());
}
else {
- logger.debug("The target resource {} is already processing",
- $event.getAai().get($event.getTarget()));
- notification = new VirtualControlLoopNotification($event);
- notification.setNotification(ControlLoopNotificationType.REJECTED);
- notification.setMessage("The target " + $event.getAai().get($event.getTarget()) + " is already locked");
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
-
- PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
-
- retract($event);
- retract($manager);
- retract($clTimer);
+ logger.debug("The target resource {} is already processing",
+ $event.getAai().get($event.getTarget()));
+ notification = new VirtualControlLoopNotification($event);
+ notification.setNotification(ControlLoopNotificationType.REJECTED);
+ notification.setMessage("The target " + $event.getAai().get($event.getTarget()) + " is already locked");
+ notification.setFrom("policy");
+ notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
+ notification.setPolicyScope($params.getPolicyScope());
+ notification.setPolicyVersion($params.getPolicyVersion());
+
+ PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+
+ retract($event);
+ retract($manager);
+ retract($clTimer);
+
+ if(result.getB() != null) {
+ retract(result.getB());
+ }
}
- logger.info("{}: {}: starting operation={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
+ logger.info("{}: {}: starting operation={}",
+ $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
operation);
} else {
- //
- // Probably waiting for abatement
- //
- logger.info("{}: {}: no operation, probably waiting for abatement",
+ //
+ // Probably waiting for abatement
+ //
+ logger.info("{}: {}: no operation, probably waiting for abatement",
$clName, $params.getPolicyName() + "." + drools.getRule().getName());
}
}
} catch (Exception e) {
- logger.warn("{}: {}: unexpected",
- $clName,
- $params.getPolicyName() + "." + drools.getRule().getName(), e);
-
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setNotification(ControlLoopNotificationType.FINAL_FAILURE);
- notification.setMessage(e.getMessage());
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
+ logger.warn("{}: {}: unexpected",
+ $clName,
+ $params.getPolicyName() + "." + drools.getRule().getName(), e);
+
+ VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
+ notification.setNotification(ControlLoopNotificationType.FINAL_FAILURE);
+ notification.setMessage(e.getMessage());
+ notification.setFrom("policy");
+ notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
notification.setPolicyScope($params.getPolicyScope());
notification.setPolicyVersion($params.getPolicyVersion());
-
- PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
-
+
+ PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+
retract($event);
retract($manager);
retract($clTimer);
}
-
+
end
/*
@@ -477,100 +479,120 @@ rule "EVENT.MANAGER.OPERATION.LOCKED.GUARD_PERMITTED"
then
Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}: event={} manager={} operation={} lock={}",
+ logger.info("{}: {}: event={} manager={} operation={} lock={}",
$clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event, $manager, $operation, $lock);
+ $event, $manager, $operation, $lock);
Object request = null;
boolean caughtException = false;
+
try {
request = $operation.startOperation($event);
- }
- catch (ControlLoopException e) {
+
+ if (request != null) {
+ logger.debug("{}: {}: starting operation ..",
+ $clName,
+ $params.getPolicyName() + "." + drools.getRule().getName());
+ //
+ // Tell interested parties we are performing this Operation
+ //
+ VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
+ notification.setNotification(ControlLoopNotificationType.OPERATION);
+ notification.setMessage($operation.getOperationMessage());
+ notification.setHistory($operation.getHistory());
+ notification.setFrom("policy");
+ notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
+ notification.setPolicyScope($params.getPolicyScope());
+ notification.setPolicyVersion($params.getPolicyVersion());
+
+ PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+
+ switch ($operation.policy.getActor()){
+
+ case "APPC":
+
+ if (request instanceof Request) {
+ PolicyEngine.manager.deliver("APPC-CL", request);
+ }
+ else if (request instanceof LcmRequestWrapper) {
+ PolicyEngine.manager.deliver("APPC-LCM-READ", request);
+ }
+ break;
+ case "SO":
+ // at this point the AAI named query request should have already been made, the response recieved and used
+ // in the construction of the SO Request which is stored in operationRequest
+
+ if(request instanceof SORequest) {
+ // Call SO. The response will be inserted into memory once it's received
+ SOActorServiceProvider.sendRequest($event.getRequestId().toString(), 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?
+ //
+ logger.warn("{}: {}: unexpected null operation request",
+ $clName,
+ $params.getPolicyName() + "." + drools.getRule().getName());
+ if ("SO".equals($operation.policy.getActor())) {
+ retract($opTimer);
+ retract($operation);
+ modify($manager) {finishOperation($operation)};
+ }
+ else if ("vfc".equalsIgnoreCase($operation.policy.getActor())) {
+ retract($opTimer);
+ retract($operation);
+ modify($manager) {finishOperation($operation)};
+ }
+ }
+
+ } catch (Exception e) {
String msg = e.getMessage();
- logger.warn("{}: {}: operation={}: AAI failure: {}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
+ logger.warn("{}: {}: operation={}: AAI failure: {}",
+ $clName,
+ $params.getPolicyName() + "." + drools.getRule().getName(),
$operation, msg, e);
$operation.setOperationHasException(msg);
+
+ if(request != null) {
+ //
+ // Create a notification for it ("DB Write - end operation")
+ //
+ VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
+ notification.setFrom("policy");
+ notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
+ notification.setPolicyScope($params.getPolicyScope());
+ notification.setPolicyVersion($params.getPolicyVersion());
+ notification.setNotification(ControlLoopNotificationType.OPERATION_FAILURE);
+ notification.setMessage($operation.getOperationHistory());
+ notification.setHistory($operation.getHistory());
+
+ PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
+ }
+
retract($opTimer);
retract($operation);
caughtException = true;
}
-
+
// Having the modify statement in the catch clause doesn't work for whatever reason
if (caughtException) {
modify($manager) {finishOperation($operation)};
}
- else if (request != null) {
- logger.debug("{}: {}: starting operation ..",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- //
- // Tell interested parties we are performing this Operation
- //
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setNotification(ControlLoopNotificationType.OPERATION);
- notification.setMessage($operation.getOperationMessage());
- notification.setHistory($operation.getHistory());
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
- notification.setPolicyScope($params.getPolicyScope());
- notification.setPolicyVersion($params.getPolicyVersion());
-
- PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
-
- switch ($operation.policy.getActor()){
-
- case "APPC":
-
- if (request instanceof Request) {
- PolicyEngine.manager.deliver("APPC-CL", request);
- }
- else if (request instanceof LcmRequestWrapper) {
- PolicyEngine.manager.deliver("APPC-LCM-READ", request);
- }
- break;
- case "SO":
- // at this point the AAI named query request should have already been made, the response recieved and used
- // in the construction of the SO Request which is stored in operationRequest
-
- if(request instanceof SORequest) {
- // Call SO. The response will be inserted into memory once it's received
- SOActorServiceProvider.sendRequest($event.getRequestId().toString(), 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?
- //
- logger.warn("{}: {}: unexpected null operation request",
- $clName,
- $params.getPolicyName() + "." + drools.getRule().getName());
- if ("SO".equals($operation.policy.getActor())) {
- retract($opTimer);
- retract($operation);
- modify($manager) {finishOperation($operation)};
- }
- else if ("vfc".equalsIgnoreCase($operation.policy.getActor())) {
- retract($opTimer);
- retract($operation);
- modify($manager) {finishOperation($operation)};
- }
-
- }
end
/*
*
-* We were able to acquire a lock so now let's ask Xacml Guard whether
+* 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.
*
*/
@@ -584,10 +606,10 @@ rule "EVENT.MANAGER.OPERATION.LOCKED.GUARD_NOT_YET_QUERIED"
then
Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}: event={} manager={} operation={} lock={}",
+ logger.info("{}: {}: event={} manager={} operation={} lock={}",
$clName, $params.getPolicyName() + "." + drools.getRule().getName(),
$event, $manager, $operation, $lock);
-
+
//
// Sending notification that we are about to query Guard ("DB write - start operation")
//
@@ -599,23 +621,23 @@ rule "EVENT.MANAGER.OPERATION.LOCKED.GUARD_NOT_YET_QUERIED"
notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
notification.setPolicyScope($params.getPolicyScope());
notification.setPolicyVersion($params.getPolicyVersion());
-
+
PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
-
+
//
- // Now send Guard Request to XACML Guard. In order to bypass the call to Guard,
+ // Now send Guard Request to XACML Guard. In order to bypass the call to Guard,
// just change guardEnabled to false.
- //
- // In order to use REST XACML, provide a URL instead of "" as a second argument
- // to the CallGuardTask() and set the first argument to null
+ //
+ // In order to use REST XACML, provide a URL instead of "" as a second argument
+ // to the CallGuardTask() and set the first argument to null
// (instead of XacmlPdpEngine).
//
-
+
// NOTE: The environment properties uses "guard.disabled" but the boolean is guardEnabled
boolean guardEnabled = "false".equalsIgnoreCase(PolicyEngine.manager.getEnvironmentProperty("guard.disabled"));
-
+
if(guardEnabled){
-
+
Thread t = new Thread(new org.onap.policy.guard.CallGuardTask(
drools.getWorkingMemory(),
$event.getClosedLoopControlName(),
@@ -633,14 +655,14 @@ rule "EVENT.MANAGER.OPERATION.LOCKED.GUARD_NOT_YET_QUERIED"
end
//
-// This rule will be triggered when a thread talking to the XACML Guard inserts a
+// This rule will be triggered when a thread talking to the XACML Guard inserts a
// guardResponse object into the working memory
//
rule "GUARD.RESPONSE"
when
$params : ControlLoopParams( $clName : getClosedLoopControlName() )
$event : VirtualControlLoopEvent( closedLoopControlName == $clName, closedLoopEventStatus == ControlLoopEventStatus.ONSET )
- $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(), requestID == $event.getRequestId() )
+ $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(), requestID == $event.getRequestId() )
$operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(), onset.getRequestId() == $event.getRequestId() )
$lock : TargetLock (requestID == $event.getRequestId())
$opTimer : OperationTimer( closedLoopControlName == $event.getClosedLoopControlName(), requestID == $event.getRequestId().toString() )
@@ -648,16 +670,16 @@ rule "GUARD.RESPONSE"
then
Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}: event={} manager={} operation={} lock={} opTimer={} guardResponse={}",
+ logger.info("{}: {}: event={} manager={} operation={} lock={} opTimer={} guardResponse={}",
$clName, $params.getPolicyName() + "." + drools.getRule().getName(),
$event, $manager, $operation, $lock, $opTimer, $guardResponse);
-
-
+
+
//we will permit the operation if there was no Guard for it
if("Indeterminate".equalsIgnoreCase($guardResponse.getResult())){
$guardResponse.setResult("Permit");
}
-
+
//
// This notification has Guard result in "message". ("DB write - end operation in case of Guard Deny")
//
@@ -669,11 +691,11 @@ rule "GUARD.RESPONSE"
notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
notification.setPolicyScope($params.getPolicyScope());
notification.setPolicyVersion($params.getPolicyVersion());
-
+
PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
-
+
if("Permit".equalsIgnoreCase($guardResponse.getResult())){
-
+
modify($operation){setGuardApprovalStatus($guardResponse.getResult())};
}
else {
@@ -684,9 +706,9 @@ rule "GUARD.RESPONSE"
retract($operation);
modify($manager) {finishOperation($operation)};
}
-
+
retract($guardResponse);
-
+
end
/*
@@ -703,7 +725,7 @@ end
rule "APPC.RESPONSE"
when
$params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $event : VirtualControlLoopEvent( closedLoopControlName == $clName, closedLoopEventStatus == ControlLoopEventStatus.ONSET )
+ $event : VirtualControlLoopEvent( closedLoopControlName == $clName, closedLoopEventStatus == ControlLoopEventStatus.ONSET )
$manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(), requestID == $event.getRequestId() )
$operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(), onset.getRequestId() == $event.getRequestId() )
$opTimer : OperationTimer( closedLoopControlName == $event.getClosedLoopControlName(), requestID == $event.getRequestId().toString() )
@@ -713,7 +735,7 @@ rule "APPC.RESPONSE"
Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- logger.debug("{}: {}: event={} manager={} operation={} lock={} opTimer={} response={}",
+ logger.debug("{}: {}: event={} manager={} operation={} lock={} opTimer={} response={}",
$clName, $params.getPolicyName() + "." + drools.getRule().getName(),
$event, $manager, $operation, $lock, $opTimer, $response);
//
@@ -721,7 +743,7 @@ rule "APPC.RESPONSE"
//
PolicyResult policyResult = $operation.onResponse($response);
if (policyResult != null) {
- logger.debug("{}: {}: operation finished - result={}",
+ logger.debug("{}: {}: operation finished - result={}",
$clName, $params.getPolicyName() + "." + drools.getRule().getName(),
policyResult);
//
@@ -795,14 +817,14 @@ rule "APPC.RESPONSE.CLEANUP"
when
$params : ControlLoopParams( $clName : getClosedLoopControlName() )
$response : Response($id : getCommonHeader().RequestId )
- not ( VirtualControlLoopEvent( requestId == $id, closedLoopEventStatus == ControlLoopEventStatus.ONSET ) )
+ not ( VirtualControlLoopEvent( requestId == $id, closedLoopEventStatus == ControlLoopEventStatus.ONSET ) )
then
Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- logger.debug("{}: {}: orphan appc response={}",
+ logger.debug("{}: {}: orphan appc response={}",
$clName, $params.getPolicyName() + "." + drools.getRule().getName(), $id);
-
+
//
// Retract it
//
@@ -817,7 +839,7 @@ end
rule "APPC.LCM.RESPONSE"
when
$params : ControlLoopParams( $clName : getClosedLoopControlName() )
- $event : VirtualControlLoopEvent( closedLoopControlName == $clName, closedLoopEventStatus == ControlLoopEventStatus.ONSET )
+ $event : VirtualControlLoopEvent( closedLoopControlName == $clName, closedLoopEventStatus == ControlLoopEventStatus.ONSET )
$manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(), requestID == $event.getRequestId() )
$operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(), onset.getRequestId() == $event.getRequestId() )
$opTimer : OperationTimer( closedLoopControlName == $event.getClosedLoopControlName(), requestID == $event.getRequestId().toString() )
@@ -827,19 +849,19 @@ rule "APPC.LCM.RESPONSE"
Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- logger.debug("{}: {}: event={} manager={} operation={} lock={} opTimer={} response={}",
+ logger.debug("{}: {}: event={} manager={} operation={} lock={} opTimer={} response={}",
$clName, $params.getPolicyName() + "." + drools.getRule().getName(),
$event, $manager, $operation, $lock, $operation, $opTimer, $response);
-
+
//
// Get the result of the operation
//
PolicyResult policyResult = $operation.onResponse($response);
if (policyResult != null) {
- logger.debug("{}: {}: operation finished - result={}",
+ logger.debug("{}: {}: operation finished - result={}",
$clName, $params.getPolicyName() + "." + drools.getRule().getName(),
policyResult);
-
+
//
// This Operation has completed, construct a notification showing our results. (DB write - end operation)
//
@@ -901,12 +923,12 @@ rule "APPC.LCM.RESPONSE.CLEANUP"
when
$params : ControlLoopParams( $clName : getClosedLoopControlName() )
$response : LcmResponseWrapper($id : getBody().getCommonHeader().getRequestId )
- not ( VirtualControlLoopEvent( requestId == $id, closedLoopEventStatus == ControlLoopEventStatus.ONSET ) )
+ not ( VirtualControlLoopEvent( requestId == $id, closedLoopEventStatus == ControlLoopEventStatus.ONSET ) )
then
-
+
Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- logger.debug("{}: {}: orphan appc response={}",
+ logger.debug("{}: {}: orphan appc response={}",
$clName, $params.getPolicyName() + "." + drools.getRule().getName(), $id);
//
// Retract it
@@ -929,21 +951,21 @@ rule "SO.RESPONSE"
$lock : TargetLock (requestID == $event.getRequestId())
$response : SOResponseWrapper(requestID.toString() == $event.getRequestId().toString() )
then
-
+
Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- logger.debug("{}: {}: event={} manager={} operation={} lock={} opTimer={} response={}",
+ logger.debug("{}: {}: event={} manager={} operation={} lock={} opTimer={} response={}",
$clName, $params.getPolicyName() + "." + drools.getRule().getName(),
$event, $manager, $operation, $lock, $operation, $opTimer, $response);
-
+
// Get the result of the operation
//
PolicyResult policyResult = $operation.onResponse($response);
if (policyResult != null) {
- logger.debug("{}: {}: operation finished - result={}",
+ logger.debug("{}: {}: operation finished - result={}",
$clName, $params.getPolicyName() + "." + drools.getRule().getName(),
policyResult);
-
+
//
// This Operation has completed, construct a notification showing our results
//
@@ -1004,69 +1026,69 @@ end
*
*/
rule "VFC.RESPONSE"
- when
- $params : ControlLoopParams( $clName : getClosedLoopControlName() )
+ when
+ $params : ControlLoopParams( $clName : getClosedLoopControlName() )
$event : VirtualControlLoopEvent( closedLoopControlName == $clName, closedLoopEventStatus == ControlLoopEventStatus.ONSET )
- $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(), requestID == $event.getRequestId() )
- $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(), onset.getRequestId() == $event.getRequestId() )
- $opTimer : OperationTimer( closedLoopControlName == $event.getClosedLoopControlName(), requestID == $event.getRequestId().toString() )
+ $manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(), requestID == $event.getRequestId() )
+ $operation : ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(), onset.getRequestId() == $event.getRequestId() )
+ $opTimer : OperationTimer( closedLoopControlName == $event.getClosedLoopControlName(), requestID == $event.getRequestId().toString() )
$lock : TargetLock (requestID == $event.getRequestId())
- $response : VFCResponse( requestId.toString() == $event.getRequestId().toString() )
- then
- Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
- logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- logger.debug("{}: {}: event={} manager={} operation={} lock={} opTimer={} response={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event, $manager, $operation, $lock, $operation, $opTimer, $response);
-
- // Get the result of the operation
- //
- PolicyResult policyResult = $operation.onResponse($response);
- if (policyResult != null) {
- //
- // This Operation has completed, construct a notification showing our results
- //
- VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
- notification.setFrom("policy");
- notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
+ $response : VFCResponse( requestId.toString() == $event.getRequestId().toString() )
+ then
+ Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
+ logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
+ logger.debug("{}: {}: event={} manager={} operation={} lock={} opTimer={} response={}",
+ $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
+ $event, $manager, $operation, $lock, $operation, $opTimer, $response);
+
+ // Get the result of the operation
+ //
+ PolicyResult policyResult = $operation.onResponse($response);
+ if (policyResult != null) {
+ //
+ // This Operation has completed, construct a notification showing our results
+ //
+ VirtualControlLoopNotification notification = new VirtualControlLoopNotification($event);
+ notification.setFrom("policy");
+ notification.setPolicyName($params.getPolicyName() + "." + drools.getRule().getName());
notification.setPolicyScope($params.getPolicyScope());
notification.setPolicyVersion($params.getPolicyVersion());
- notification.setMessage($operation.getOperationHistory());
- notification.setHistory($operation.getHistory());
- //
- // Ensure the operation is complete
- //
- if ($operation.isOperationComplete() == true) {
- //
- // It is complete, remove it from memory
- //
- retract($operation);
- //
- // We must also retract the timer object
- // NOTE: We could write a Rule to do this
- //
- retract($opTimer);
- //
- // Complete the operation
- //
- modify($manager) {finishOperation($operation)};
- } else {
- //
- // Just doing this will kick off the LOCKED rule again
- //
- modify($operation) {};
- }
- } else {
- //
- // Its not finished yet (i.e. expecting more Response objects)
- //
- // Or possibly it is a leftover response that we timed the request out previously
- //
- }
- //
- // We are going to retract these objects from memory
- //
- retract($response);
+ notification.setMessage($operation.getOperationHistory());
+ notification.setHistory($operation.getHistory());
+ //
+ // Ensure the operation is complete
+ //
+ if ($operation.isOperationComplete() == true) {
+ //
+ // It is complete, remove it from memory
+ //
+ retract($operation);
+ //
+ // We must also retract the timer object
+ // NOTE: We could write a Rule to do this
+ //
+ retract($opTimer);
+ //
+ // Complete the operation
+ //
+ modify($manager) {finishOperation($operation)};
+ } else {
+ //
+ // Just doing this will kick off the LOCKED rule again
+ //
+ modify($operation) {};
+ }
+ } else {
+ //
+ // Its not finished yet (i.e. expecting more Response objects)
+ //
+ // Or possibly it is a leftover response that we timed the request out previously
+ //
+ }
+ //
+ // We are going to retract these objects from memory
+ //
+ retract($response);
end
@@ -1085,13 +1107,13 @@ rule "EVENT.MANAGER.OPERATION.TIMEOUT"
$opTimer : OperationTimer( closedLoopControlName == $event.getClosedLoopControlName(), requestID == $event.getRequestId().toString(), $to : getDelay() )
$lock : TargetLock (requestID == $event.getRequestId())
then
-
+
Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- logger.debug("{}: {}: event={} manager={} operation={} lock={} opTimer={}",
+ logger.debug("{}: {}: event={} manager={} operation={} lock={} opTimer={}",
$clName, $params.getPolicyName() + "." + drools.getRule().getName(),
$event, $manager, $operation, $lock, $operation, $opTimer);
-
+
//
// Tell it its timed out
//
@@ -1147,26 +1169,14 @@ rule "EVENT.MANAGER.TIMEOUT"
$event : VirtualControlLoopEvent( closedLoopControlName == $clName )
$manager : ControlLoopEventManager( closedLoopControlName == $event.getClosedLoopControlName(), requestID == $event.getRequestId() )
$clTimer : ControlLoopTimer ( closedLoopControlName == $event.getClosedLoopControlName(), requestID == $event.getRequestId().toString(), $to : getDelay() )
- $operations : LinkedList()
- from collect( ControlLoopOperationManager( onset.closedLoopControlName == $event.getClosedLoopControlName(), onset.getRequestId() == $event.getRequestId() ) )
- $opTimers : LinkedList()
- from collect( OperationTimer( closedLoopControlName == $event.getClosedLoopControlName(), requestID == $event.getRequestId().toString() ) )
- $locks : LinkedList()
- from collect( TargetLock (requestID == $event.getRequestId()) )
then
-
+
Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
logger.info("{}: {}", $clName, $params.getPolicyName() + "." + drools.getRule().getName());
- if ($operations == null) {
- logger.debug("{}: {}: event={} manager={} clTimer={} operations=0",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event, $manager, $clTimer);
- } else {
- logger.debug("{}: {}: event={} manager={} clTimer={} operations={}",
- $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
- $event, $manager, $clTimer, $operations.size());
- }
+ logger.debug("{}: {}: event={}",
+ $clName, $params.getPolicyName() + "." + drools.getRule().getName(),
+ $event);
//
// Tell the Event Manager it has timed out
//
@@ -1182,44 +1192,62 @@ rule "EVENT.MANAGER.TIMEOUT"
PolicyEngine.manager.deliver("POLICY-CL-MGT", notification);
}
//
- // Retract EVERYTHING
+ // Retract the event
//
retract($event);
+end
+
+/*
+*
+* This rule cleans up the manager and other objects after an event has
+* been retracted.
+*
+*/
+rule "EVENT.MANAGER.CLEANUP"
+ when
+ $manager : ControlLoopEventManager( $clName : getClosedLoopControlName(), $requestId : getRequestID() )
+ $clTimer : ControlLoopTimer ( closedLoopControlName == $clName, requestID == $requestId.toString() )
+ $operations : LinkedList()
+ from collect( ControlLoopOperationManager( onset.closedLoopControlName == $clName, onset.getRequestId() == $requestId ) )
+ $opTimers : LinkedList()
+ from collect( OperationTimer( closedLoopControlName == $clName, requestID == $requestId.toString() ) )
+ $locks : LinkedList()
+ from collect( TargetLock (requestID == $requestId) )
+ not( VirtualControlLoopEvent( closedLoopControlName == $clName, requestId == $requestId ) )
+ then
+
+ Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
+ logger.info("{}: {}", $clName, drools.getRule().getName());
+
+ logger.debug("{}: {}: manager={} clTimer={} operations={}",
+ $clName, drools.getRule().getName(),
+ $manager, $clTimer, $operations.size());
+
+ //
+ // Retract EVERYTHING
+ //
retract($manager);
retract($clTimer);
- if ($operations != null && $operations.size() > 0) {
- Iterator<ControlLoopOperationManager> iter = $operations.iterator();
- while (iter.hasNext()) {
- ControlLoopOperationManager manager = iter.next();
- retract(manager);
- }
+
+ for(Object manager: $operations) {
+ retract((ControlLoopOperationManager) manager);
}
- if ($opTimers != null && $opTimers.size() > 0) {
- Iterator<OperationTimer> iter = $opTimers.iterator();
- while (iter.hasNext()) {
- OperationTimer opTimer = iter.next();
- retract(opTimer);
- }
+ for(Object opTimer: $opTimers) {
+ retract((OperationTimer) 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);
- }
+ for(Object lock: $locks) {
+ TargetLock tgt = (TargetLock) lock;
+ //
+ // Ensure we release the lock
+ //
+ PolicyGuard.unlockTarget(tgt);
+ retract(tgt);
}
end
/*
*
-* This rule will clean up any rogue onsets where there is no
+* This rule will clean up any rogue onsets where there is no
* ControlLoopParams object corresponding to the onset event.
*
*/
@@ -1228,10 +1256,10 @@ rule "EVENT.CLEANUP"
$event : VirtualControlLoopEvent( $clName: closedLoopControlName )
not ( ControlLoopParams( getClosedLoopControlName() == $clName) )
then
-
+
Logger logger = LoggerFactory.getLogger(drools.getRule().getPackage());
logger.info("{}: {}", $clName, drools.getRule().getName());
- logger.debug("{}: {}: orphan onset event={}",
+ logger.debug("{}: {}: orphan onset event={}",
$clName, drools.getRule().getName(), $event);
retract($event);
diff --git a/controlloop/templates/archetype-cl-beijing/src/test/resources/projects/basic/archetype.properties b/controlloop/templates/archetype-cl-casablanca/src/test/resources/projects/basic/archetype.properties
index 8cc10c97c..8cc10c97c 100644
--- a/controlloop/templates/archetype-cl-beijing/src/test/resources/projects/basic/archetype.properties
+++ b/controlloop/templates/archetype-cl-casablanca/src/test/resources/projects/basic/archetype.properties
diff --git a/controlloop/templates/pom.xml b/controlloop/templates/pom.xml
index a614ade0b..10a4a24d2 100644
--- a/controlloop/templates/pom.xml
+++ b/controlloop/templates/pom.xml
@@ -35,7 +35,7 @@
<modules>
<module>template.demo</module>
<module>archetype-cl-amsterdam</module>
- <module>archetype-cl-beijing</module>
+ <module>archetype-cl-casablanca</module>
</modules>
diff --git a/testsuites/performance/pom.xml b/testsuites/performance/pom.xml
new file mode 100644
index 000000000..0d8f9ba5e
--- /dev/null
+++ b/testsuites/performance/pom.xml
@@ -0,0 +1,51 @@
+<!--
+ ============LICENSE_START=======================================================
+ performance
+ ================================================================================
+ Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ============LICENSE_END=========================================================
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.onap.policy.drools-applications</groupId>
+ <artifactId>testsuites</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>performance</artifactId>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>create-distribution</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>src/assembly/assembly.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/testsuites/performance/src/assembly/assembly.xml b/testsuites/performance/src/assembly/assembly.xml
new file mode 100644
index 000000000..e32259d17
--- /dev/null
+++ b/testsuites/performance/src/assembly/assembly.xml
@@ -0,0 +1,42 @@
+<!--
+ ============LICENSE_START=======================================================
+ performance
+ ================================================================================
+ Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ============LICENSE_END=========================================================
+ -->
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+ <id>performance</id>
+ <formats>
+ <format>zip</format>
+ </formats>
+ <baseDirectory>/drools-applications/performance</baseDirectory>
+ <fileSets>
+ <fileSet>
+ <directory>${project.basedir}/src/main/resources/amsterdam/</directory>
+ <outputDirectory>tests/amsterdam</outputDirectory>
+ <includes>
+ <include>*.jmx</include>
+ <include>*.sh</include>
+ </includes>
+ <lineEnding>unix</lineEnding>
+ <fileMode>0644</fileMode>
+ <filtered>true</filtered>
+ </fileSet>
+ </fileSets>
+</assembly>
diff --git a/testsuites/performance/src/main/resources/amsterdam/generate-mt-performance-report b/testsuites/performance/src/main/resources/amsterdam/generate-mt-performance-report
new file mode 100644
index 000000000..16f1bc839
--- /dev/null
+++ b/testsuites/performance/src/main/resources/amsterdam/generate-mt-performance-report
@@ -0,0 +1,611 @@
+#!/bin/bash
+
+#
+# Copyright (C) 2018 AT&T. 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.
+
+# The aim of this script is to collect performance metric for policies
+# running in PDP-D.
+#
+# Pre-requisites:
+#
+# Get the JMeter Multi-threaded Performance test plan (see below link).
+#
+# https://gerrit.onap.org/r/gitweb?p=policy/drools-applications.git;a=blob;f=testsuites/performance/src/main/resources/amsterdam/policyMTPerformanceTestPlan.jmx;hb=refs/heads/master
+#
+# How to run:
+# 1: Copy this script to drools container
+# 2: Remove (or save) existing network*zip files found in logging directory
+# 3: Truncate (and save?) existing audit.log file found in logging directory
+# 4: Run the performance jmeter script to completion
+# 5: Pass following parameters to run this script
+# - log-dir : the complete directory location of network.log and audit.log
+#
+# Sample command for running the script:
+# ./generate_mt_performance_report.sh -l /var/log/onap/policy/pdpd
+# Note: -h or --help can be used to display details about input parameters.
+#
+# How it works
+# The script will parse the network log files at the specified location
+# and match outgoing requests with incoming responses and then calculate
+# the time taken for each request to complete. The total time is recorded
+# for each request id.
+# Once that completes, it then scans the audit log files, matches request IDs
+# with those found in the network files, and reports the average elapsed
+# time for each ONSET type, after subtracting the network time.
+
+usage()
+{
+_msg_="$@"
+scriptname=$(basename $0)
+
+cat<<-USAGE
+
+Command Arguments:
+
+-l
+ Mandatory argument. Directory location of network logs.
+
+-h
+ Optional argument. Display this usage.
+
+USAGE
+
+}
+
+while getopts "hl:" OPT "$@"
+do
+ case $OPT in
+ h)
+ usage
+ exit 0
+ ;;
+ l)
+ LOGDIR="$OPTARG"
+ ;;
+ *)
+ usage
+ exit 1
+ ;;
+ esac
+done
+
+if [ -z "$LOGDIR" ]; then
+ usage
+ exit 1
+fi
+
+
+python - <<PYTHON
+
+import subprocess
+import re
+import time
+import calendar
+import logging
+
+logging.basicConfig(format="%(message)s")
+logger = logging.getLogger("diff")
+logger.setLevel(logging.INFO)
+
+class Data:
+ """
+ A little bit of data associated with a single request. This is only
+ used for some request types.
+ """
+
+ def __init__(self, reqid, nexpected):
+ self.reqid = reqid
+
+ # number of matches expected before this object is discarded
+ self.nexpected = nexpected
+
+ # time when the request began
+ self.begin = None
+
+ def complete(self):
+ """
+ Indicates that the request has completed. Returns true if no more
+ requests are expected
+ """
+ self.begin = None
+ self.nexpected -= 1
+ return self.nexpected <= 0
+
+class NetworkLogParser:
+ """
+ Used to parse network.log. Various request types are identified
+ within the network.log using pattern matching.
+
+ AAI
+ <begin-time-stamp> OUT.AAI
+ "vnf-id": "vnf-<request-id>"; OR
+ "vserver-name": "vserver-<request-id>"
+ <end-time-stamp> IN.AAI
+ (takes the first one after OUT.AAI)
+
+ ABATEMENT
+ <begin-time-stamp> OUT.UEB.POLICY-CL-MGT
+ "requestId": "<request-id>"
+ "policyName": "...APPC.LCM.RESPONSE"
+ <end-time-stamp> IN.UEB.DCAE_CL_OUTPUT
+ "closedLoopEventStatus": "ABATED"
+ "RequestID": "<matching-request-id>"
+
+ APPC-CL
+ <begin-time-stamp> OUT.UEB.APPC-CL
+ "RequestID": "<request-id>"
+ <end-time-stamp> IN.UEB.APPC-CL
+ "RequestID": "<matching-request-id>"
+
+ APPC-LCM
+ <begin-time-stamp> OUT.UEB.APPC-LCM-READ
+ "request-id": "<request-id>"
+ <end-time-stamp> IN.UEB.APPC-LCM-WRITE
+ "request-id": "<matching-request-id>"
+
+ GUARD
+ <begin-time-stamp> OUT.UEB.POLICY-CL-MGT
+ "requestId": "<request-id>"
+ "policyName": "...GUARD_NOT_YET_QUERIED"
+ <end-time-stamp> OUT.UEB.POLICY-CL-MGT
+ "requestId": "<request-id>"
+ "policyName": "...GUARD.RESPONSE"
+
+ SO
+ OUT.UEB.POLICY-CL-MGT
+ "requestId": "<request-id>"
+ "message": "actor=SO,..."
+ <begin-time-stamp> <thread-id> OUT.SO
+ (takes the first one after OUT.UEB.POLICY-CL-MGT)
+ <end-time-stamp> <matching-thread-id> IN.SO
+
+ VFC
+ <begin-time-stamp> <thread-id> OUT.VFC url contains vserver-name-ssi-<request-id>
+ <end-time-stamp> <matching-thread-id> IN.VFC (vserver response)
+ <begin-time-stamp> <matching-thread-id> OUT.VFC (jobs request)
+ <end-time-stamp> <matching-thread-id> IN.VFC (jobs response)
+ """
+
+ def __init__(self):
+
+ # maps a request id to the time when the notification was received
+ self.req2begin = {}
+
+ # maps a request id to the total time from notification to response.
+ # some requests (e.g., vCPE) may include more than one notification/response
+ # pair in this total
+ self.req2total = {}
+
+ # latest AAI request ids, added as requests are seen and popped
+ # as requests are completed
+ self.aai_reqid = []
+
+ # latest actor data, added when actor=SO is seen and moved to
+ # so_thread_data when OUT.SO is seen
+ self.so_actor_data = []
+
+ # maps a thread id of the form, "pool-63-thread-41", to its SO Data
+ self.so_thread_data = {}
+
+ # maps a thread id of the form, "Thread-11382", to its VFC Data
+ self.vfc_thread_data = {}
+
+ # time associated with last IN/OUT line
+ self.tm = None
+
+ # current parser state, if parsing the body of a message, None
+ # otherwise
+ self.state = None
+
+ # request id associated with last IN/OUT line
+ self.reqid = None
+
+ # regular expression to match leading time stamp
+ timestamp_re = '[[]([^|]+).*'
+
+ # regular expression to match thread id appearing before IN/OUT
+ thread_re = '\\|([^|]+)\\]\\['
+
+ # list of [method, pattern]
+ # when the pattern is matched, the given method is invoked.
+ # during compilation, the number of capture groups + 1 is added to
+ # the end of each list
+ self.actions = [
+ [NetworkLogParser.out_notify, timestamp_re + '(?:OUT.UEB.*POLICY-CL)'],
+ [NetworkLogParser.out_appc, timestamp_re + '(?:OUT.UEB.*APPC)'],
+ [NetworkLogParser.in_appc, timestamp_re + '(?:IN.UEB.*APPC)'],
+ [NetworkLogParser.in_dcae, timestamp_re + '(?:IN.UEB.*DCAE_CL_OUTPUT)'],
+ [NetworkLogParser.out_aai, timestamp_re + '(?:OUT.AAI)'],
+ [NetworkLogParser.in_aai, timestamp_re + '(?:IN.AAI)'],
+ [NetworkLogParser.out_vfc, timestamp_re + thread_re + '(?:OUT.VFC)(?:.*vserver-name-ssi-([^/]+))?'],
+ [NetworkLogParser.in_vfc, timestamp_re + thread_re + '(?:IN.VFC)'],
+ [NetworkLogParser.in_abated, '.*"closedLoopEventStatus"[: ]+"ABATED"'],
+ [NetworkLogParser.request_id, '.*"(?:requestId|request-id|RequestID|requestID)"[: ]+"([^"]+)"'],
+ [NetworkLogParser.appc_lcm_response, '.*"policyName"(?:.*)[.]APPC.LCM.RESPONSE'],
+ [NetworkLogParser.out_guard, '.*"policyName"(?:.*)[.]GUARD_NOT_YET_QUERIED'],
+ [NetworkLogParser.in_guard, '.*"policyName"(?:.*)[.]GUARD.RESPONSE'],
+ [NetworkLogParser.vnf_vserver, '.*"vnf-id"[: ]+"vnf-([^"]+)"'],
+ [NetworkLogParser.vnf_vserver, '.*"vserver-name"[: ]+"vserver-([^"]+)"'],
+ [NetworkLogParser.actor_so, '.*"actor=SO,'],
+ [NetworkLogParser.out_so, timestamp_re + thread_re + '(?:OUT.SO)'],
+ [NetworkLogParser.in_so, timestamp_re + thread_re + '(?:IN.SO)'],
+ [NetworkLogParser.out_in_ueb, timestamp_re + '(?:(?:OUT|IN).UEB)'],
+ ]
+
+ # pattern to match a date and extract the millisecond portion
+ self.datepat = re.compile("^(20[^|]*)[.](\\d+)([^|]+)$")
+
+ # compile the actions into a single pattern
+ netpat = ""
+ for action in self.actions:
+ actpat = action[1]
+
+ # append capture group count + 1 to the end of the action
+ action.append(re.compile(actpat).groups + 1)
+
+ # append the pattern to the combined pattern
+ if netpat != "":
+ netpat += "|"
+ netpat += "(" + actpat + ")"
+
+ # Pattern for network.log files
+ self.netpat = re.compile(netpat)
+
+ def total(self, reqid):
+ """
+ Returns the total network time for a request, or None, if no network
+ time has been determined for the request
+ """
+ if reqid in self.req2total:
+ return self.req2total[reqid]
+
+ else:
+ return None
+
+ def detm_network_times(self):
+ """
+ Scans network log files, computing time differences between requests
+ and their corresponding responses.
+ Updates req2total, accordingly.
+ """
+
+ proc = subprocess.Popen(["bash", "-c",
+ "(ls -rth $LOGDIR/network*zip | xargs -n1 zcat) 2>/dev/null; " +
+ "cat $LOGDIR/network.log"],
+ stdout=subprocess.PIPE)
+
+ netpat = self.netpat
+ actions = self.actions
+
+ for line in proc.stdout:
+ result = netpat.match(line)
+ if not result:
+ continue
+
+ # find the matching action and then apply its method
+ i = 1
+ for action in actions:
+ if result.group(i):
+ method = action[0]
+ method(self, line, result, i)
+ break
+
+ i += action[-1]
+
+ def out_notify(self, line, result, i):
+ """ matched OUT line, which starts with a timestamp """
+ self.tm = self.date_to_ms(result.group(i+1))
+ self.state = "out"
+ logger.debug("out %s", self.tm)
+
+ def out_appc(self, line, result, i):
+ """ matched APPC OUT line, which starts with a timestamp """
+ self.tm = self.date_to_ms(result.group(i+1))
+ self.state = "out-appc"
+ logger.debug("appc out %s", self.tm)
+
+ def in_appc(self, line, result, i):
+ """ matched APPC IN line, which starts with a timestamp """
+ self.tm = self.date_to_ms(result.group(i+1))
+ self.state = "in-appc"
+ logger.debug("appc in %s", self.tm)
+
+ def in_dcae(self, line, result, i):
+ """ matched DCAE_CL_OUTPUT IN line, which starts with a timestamp """
+ self.tm = self.date_to_ms(result.group(i+1))
+ self.state = "in-dcae"
+ logger.debug("dcae in %s", self.tm)
+
+ def out_aai(self, line, result, i):
+ """ matched AAI OUT line, which starts with a timestamp """
+ self.tm = self.date_to_ms(result.group(i+1))
+ self.state = "out-aai"
+ logger.debug("aai out %s", self.tm)
+
+ def in_aai(self, line, result, i):
+ """ matched AAI IN line, which starts with a timestamp """
+ tm = self.date_to_ms(result.group(i+1))
+ self.state = None
+ if len(self.aai_reqid) > 0:
+ reqid = self.aai_reqid.pop()
+ self.update_diff("aai", reqid, tm)
+ logger.debug("aai in %s", tm)
+ else:
+ logger.debug("unmatched aai in")
+
+ def out_vfc(self, line, result, i):
+ """ matched VFC OUT line, which starts with a timestamp """
+ tm = self.date_to_ms(result.group(i+1))
+ tid = result.group(i+2)
+ reqid = result.group(i+3)
+
+ if reqid:
+ self.add_out("vfc", [Data(reqid,2)], self.vfc_thread_data, tid, tm)
+ else:
+ self.update_out("vfc", tid, self.vfc_thread_data, tm)
+
+ self.state = None
+
+ def in_vfc(self, line, result, i):
+ """ matched VFC IN line, which starts with a timestamp """
+ tm = self.date_to_ms(result.group(i+1))
+ tid = result.group(i+2)
+ self.finish_in("vfc", self.vfc_thread_data, tid, tm)
+ self.state = None
+
+ def in_abated(self, line, result, i):
+ """
+ matched ABATED line
+ """
+ if self.state == "in-dcae":
+ self.state = "in-abatement"
+ logger.debug("abatement in %s", self.tm)
+
+ def request_id(self, line, result, i):
+ """ matched a request id field """
+ if self.state == "out":
+ # matched request id in OUT message
+ self.reqid = result.group(i+1)
+ logger.debug("out reqid: %s", self.reqid)
+
+ elif self.state == "out-appc":
+ reqid = result.group(i+1)
+ self.req2begin[reqid] = self.tm
+ logger.debug("out appc reqid: %s", reqid)
+
+ elif self.state == "in-appc":
+ self.update_diff("appc", result.group(i+1), self.tm)
+ self.state = None
+
+ elif self.state == "in-abatement":
+ # matched request id in IN message
+ self.update_diff("abatement", result.group(i+1), self.tm)
+ self.state = None
+
+ def appc_lcm_response(self, line, result, i):
+ """
+ matched APPC.LCM.RESPONSE in notification message.
+ this precedes an ABATEMENT
+ """
+ if self.reqid:
+ self.req2begin[self.reqid] = self.tm
+ logger.debug("await abatement")
+ else:
+ logger.debug("unknown abatement")
+
+ def out_guard(self, line, result, i):
+ """
+ matched GUARD_NOT_YET_QUERIED in notification message.
+ """
+ if self.reqid:
+ self.req2begin[self.reqid] = self.tm
+ logger.debug("await guard")
+ else:
+ logger.debug("unknown guard")
+
+ def in_guard(self, line, result, i):
+ """
+ matched GUARD.RESPONSE in notification message.
+ """
+ self.update_diff("guard", self.reqid, self.tm)
+
+ def vnf_vserver(self, line, result, i):
+ """ matched vnf-id or vserver-name """
+ if self.state == "out-aai":
+ # matched within AAI OUT message
+ reqid = result.group(i+1)
+ self.req2begin[reqid] = self.tm
+ self.aai_reqid.append(reqid)
+ logger.debug("await aai vnf-id")
+
+ def actor_so(self, line, result, i):
+ """ matched actor=SO """
+ self.add_req("so", self.so_actor_data, 1)
+ self.state = None
+
+ def out_so(self, line, result, i):
+ """ matched OUT|SO """
+ tm = self.date_to_ms(result.group(i+1))
+ tid = result.group(i+2)
+ self.add_out("so", self.so_actor_data, self.so_thread_data, tid, tm)
+ self.state = None
+
+ def in_so(self, line, result, i):
+ """ matched IN|SO """
+ tm = self.date_to_ms(result.group(i+1))
+ tid = result.group(i+2)
+ self.finish_in("so", self.so_thread_data, tid, tm)
+ self.state = None
+
+ def out_in_ueb(self, line, result, i):
+ """ matched irrelevant IN/OUT message """
+ logger.debug("clear")
+ self.state = None
+ self.reqid = None
+ self.tm = None
+
+ def date_to_ms(self, dtstr):
+ """
+ converts a date string to milliseconds
+ """
+ result = self.datepat.match(dtstr)
+ tm = result.group(1) + result.group(3)
+ tm = time.strptime(tm, "%Y-%m-%dT%H:%M:%S+00:00")
+ tm = calendar.timegm(tm)
+ tm = tm * 1000 + int(result.group(2))
+ return tm
+
+ def update_diff(self, reqtype, reqid, tend):
+ """
+ Updates req2total and req2begin, based on the total time used by the
+ given request
+ """
+ logger.debug("reqid #2: %s", reqid)
+
+ if reqid in self.req2begin:
+ logger.debug("matched %s", reqid)
+ diff = tend - self.req2begin[reqid]
+
+ if reqid in self.req2total:
+ self.req2total[reqid] += diff
+ else:
+ self.req2total[reqid] = diff
+
+ logger.debug("%s %s total %s", reqtype, diff, self.req2total[reqid])
+ del self.req2begin[reqid]
+
+ else:
+ logger.debug("unmatched %s", reqid)
+
+ def add_req(self, actor, actor_data, nexpected):
+ """
+ Adds request data for a particular actor
+ """
+ if self.state == "out" and self.reqid:
+ # matched action=<actor> in POLICY OUT message
+ actor_data.append(Data(self.reqid, nexpected))
+ logger.debug("%s actor", actor)
+ else:
+ logger.debug("unmatched %s actor", actor)
+
+ def add_out(self, actor, actor_data, thread_data, tid, tm):
+ """
+ Adds data associated with the OUT message for an actor
+ """
+ if tid:
+ if len(actor_data) > 0:
+ d = actor_data.pop()
+ d.begin = tm
+ thread_data[tid] = d
+ logger.debug("%s out %s %s begin %s", actor, d.reqid, tid, tm)
+ else:
+ logger.debug("unmatched %s out %s", actor, tid)
+ else:
+ logger.debug("unmatched %s out", actor)
+
+ def update_out(self, actor, tid, thread_data, tm):
+ """
+ Updates data associated with the OUT message for an actor
+ """
+ if tid:
+ if tid in thread_data:
+ d = thread_data[tid]
+ d.begin = tm
+ logger.debug("%s out %s begin %s (repeat) %s", actor, d.reqid, tid, tm)
+ else:
+ logger.debug("unmatched %s out (repeat) %s", actor, tid)
+ else:
+ logger.debug("unmatched %s out (repeat)", actor)
+
+ def finish_in(self, actor, thread_data, tid, tm):
+ """
+ Finishes data associated with the IN message for an actor
+ """
+ if tid:
+ if tid in thread_data:
+ d = thread_data[tid]
+ if d.begin:
+ self.req2begin[d.reqid] = d.begin
+ self.update_diff(actor, d.reqid, tm)
+ else:
+ logger.debug("unmatched %s in begin %s", actor, tid)
+
+ if d.complete():
+ del thread_data[tid]
+ logger.debug("removed %s in %s", actor, tid)
+ else:
+ logger.debug("unmatched %s in %s", actor, tid)
+ else:
+ logger.debug("unmatched %s in", actor)
+
+
+def gen_audit_times(net_log, event_type, grep_cmd):
+ """
+ Scans audit log files and reports average elapsed time
+ """
+ global logger
+
+ # used to compute averages for requests having matching network times
+ mat_total = 0
+ mat_count = 0
+
+ # used to compute averages for requests that are unmatched
+ un_total = 0
+ un_count = 0
+
+ proc = subprocess.Popen(["bash", "-c",
+ "((ls -rth $LOGDIR/audit*zip | xargs -n1 zgrep " + event_type +
+ ") 2>/dev/null; " +
+ "grep " + event_type + " $LOGDIR/audit.log) " +
+ "| grep COMPLETE " +
+ grep_cmd +
+ "| awk -F'|' '{ print \$1, \$7}' " +
+ "| tail -10000"],
+ stdout=subprocess.PIPE)
+
+ for line in proc.stdout:
+ (reqid,elapsed) = line.split(" ")
+
+ total = net_log.total(reqid)
+ if total:
+ logger.debug("audit reqid %s: %s %s", reqid, elapsed, total)
+ mat_total += int(elapsed) - total
+ mat_count += 1
+
+ else:
+ logger.debug("audit unmatched reqid %s: %s", reqid, elapsed)
+ un_total += int(elapsed)
+ un_count += 1
+
+ print "Elapsed time for", event_type, ":"
+ if mat_count > 0:
+ print " matched", mat_count, "samples, average", mat_total/mat_count, "ms"
+ if un_count > 0:
+ print " unmatched", un_count, "samples, average", un_total/un_count, "ms"
+
+ print
+
+
+# scan all network log files, recording network times for each request id
+nlp = NetworkLogParser()
+nlp.detm_network_times()
+
+# scan audit log files and report elapsed time for each ONSET type
+gen_audit_times(nlp, "vCPE", '| grep generic-vnf.vnf-id')
+gen_audit_times(nlp, "vFirewall", '| grep generic-vnf.vnf-id')
+gen_audit_times(nlp, "vDNS", '| grep vserver.vserver-name')
+gen_audit_times(nlp, "VOLTE", '')
+
+PYTHON
diff --git a/testsuites/performance/src/main/resources/amsterdam/policyMTPerformanceTestPlan.jmx b/testsuites/performance/src/main/resources/amsterdam/policyMTPerformanceTestPlan.jmx
new file mode 100644
index 000000000..660e468f5
--- /dev/null
+++ b/testsuites/performance/src/main/resources/amsterdam/policyMTPerformanceTestPlan.jmx
@@ -0,0 +1,1393 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ============LICENSE_START=======================================================
+ performance
+ ================================================================================
+ Copyright (C) 2018 AT&T. 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=========================================================
+ -->
+<jmeterTestPlan version="1.2" properties="3.1" jmeter="3.1 r1770033">
+ <hashTree>
+ <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
+ <stringProp name="TestPlan.comments"></stringProp>
+ <boolProp name="TestPlan.functional_mode">false</boolProp>
+ <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+ <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments"/>
+ </elementProp>
+ <stringProp name="TestPlan.user_define_classpath"></stringProp>
+ </TestPlan>
+ <hashTree>
+ <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="set test params" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="threads" elementType="Argument">
+ <stringProp name="Argument.name">threads</stringProp>
+ <stringProp name="Argument.value">10</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="loops" elementType="Argument">
+ <stringProp name="Argument.name">loops</stringProp>
+ <stringProp name="Argument.value">1000</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="rampUpSec" elementType="Argument">
+ <stringProp name="Argument.name">rampUpSec</stringProp>
+ <stringProp name="Argument.value">10</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="failures" elementType="Argument">
+ <stringProp name="Argument.name">failures</stringProp>
+ <stringProp name="Argument.value">false</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="vcpe" elementType="Argument">
+ <stringProp name="Argument.name">vcpe</stringProp>
+ <stringProp name="Argument.value">true</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="vdns" elementType="Argument">
+ <stringProp name="Argument.name">vdns</stringProp>
+ <stringProp name="Argument.value">true</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="vfw" elementType="Argument">
+ <stringProp name="Argument.name">vfw</stringProp>
+ <stringProp name="Argument.value">true</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="volte" elementType="Argument">
+ <stringProp name="Argument.name">volte</stringProp>
+ <stringProp name="Argument.value">true</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="pdpdServer" elementType="Argument">
+ <stringProp name="Argument.name">pdpdServer</stringProp>
+ <stringProp name="Argument.value">dev-drools-0</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="uebServer" elementType="Argument">
+ <stringProp name="Argument.name">uebServer</stringProp>
+ <stringProp name="Argument.value">message-router</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="notifyTopic" elementType="Argument">
+ <stringProp name="Argument.name">notifyTopic</stringProp>
+ <stringProp name="Argument.value">POLICY-CL-MGT</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="eventTopic" elementType="Argument">
+ <stringProp name="Argument.name">eventTopic</stringProp>
+ <stringProp name="Argument.value">unauthenticated.DCAE_CL_OUTPUT</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="appcRespTopic" elementType="Argument">
+ <stringProp name="Argument.name">appcRespTopic</stringProp>
+ <stringProp name="Argument.value">APPC-LCM-WRITE</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="appcRespTopic2" elementType="Argument">
+ <stringProp name="Argument.name">appcRespTopic2</stringProp>
+ <stringProp name="Argument.value">APPC-CL</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="vCPEName" elementType="Argument">
+ <stringProp name="Argument.name">vCPEName</stringProp>
+ <stringProp name="Argument.value">ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="vDNSName" elementType="Argument">
+ <stringProp name="Argument.name">vDNSName</stringProp>
+ <stringProp name="Argument.value">ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="vFWName" elementType="Argument">
+ <stringProp name="Argument.name">vFWName</stringProp>
+ <stringProp name="Argument.value">ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="VOLTEName" elementType="Argument">
+ <stringProp name="Argument.name">VOLTEName</stringProp>
+ <stringProp name="Argument.value">ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </Arguments>
+ <hashTree/>
+ <AuthManager guiclass="AuthPanel" testclass="AuthManager" testname="HTTP Authorization Manager - PDPD" enabled="true">
+ <collectionProp name="AuthManager.auth_list">
+ <elementProp name="" elementType="Authorization">
+ <stringProp name="Authorization.url">http://${pdpdServer}:9696/</stringProp>
+ <stringProp name="Authorization.username">@1b3rt</stringProp>
+ <stringProp name="Authorization.password">31nst31n</stringProp>
+ <stringProp name="Authorization.domain"></stringProp>
+ <stringProp name="Authorization.realm"></stringProp>
+ </elementProp>
+ </collectionProp>
+ </AuthManager>
+ <hashTree/>
+ <ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults - PDPD" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments"/>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${pdpdServer}</stringProp>
+ <stringProp name="HTTPSampler.port">9696</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol">http</stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path"></stringProp>
+ <stringProp name="HTTPSampler.concurrentPool">6</stringProp>
+ </ConfigTestElement>
+ <hashTree/>
+ <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
+ <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+ <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
+ <boolProp name="LoopController.continue_forever">false</boolProp>
+ <stringProp name="LoopController.loops">1</stringProp>
+ </elementProp>
+ <stringProp name="ThreadGroup.num_threads">${threads}</stringProp>
+ <stringProp name="ThreadGroup.ramp_time">${rampUpSec}</stringProp>
+ <longProp name="ThreadGroup.start_time">1525540233000</longProp>
+ <longProp name="ThreadGroup.end_time">1525540233000</longProp>
+ <boolProp name="ThreadGroup.scheduler">false</boolProp>
+ <stringProp name="ThreadGroup.duration"></stringProp>
+ <stringProp name="ThreadGroup.delay"></stringProp>
+ </ThreadGroup>
+ <hashTree>
+ <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="declare request params" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="requestId" elementType="Argument">
+ <stringProp name="Argument.name">requestId</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="vnfId" elementType="Argument">
+ <stringProp name="Argument.name">vnfId</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="consumerGroup" elementType="Argument">
+ <stringProp name="Argument.name">consumerGroup</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </Arguments>
+ <hashTree/>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Establish consumer group with DMaaP" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments"/>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1?timeout=5000&amp;limit=1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <JSR223PreProcessor guiclass="TestBeanGUI" testclass="JSR223PreProcessor" testname="generate thread params" enabled="true">
+ <stringProp name="scriptLanguage">groovy</stringProp>
+ <stringProp name="parameters"></stringProp>
+ <stringProp name="filename"></stringProp>
+ <stringProp name="cacheKey"></stringProp>
+ <stringProp name="script">import java.util.UUID;
+vars.put(&quot;consumerGroup&quot;, &quot;policy-${__machineName}-${__threadNum}&quot;);
+</stringProp>
+ </JSR223PreProcessor>
+ <hashTree/>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert poll succeeded" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="2829691">\[.*</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">1</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
+ <boolProp name="LoopController.continue_forever">true</boolProp>
+ <stringProp name="LoopController.loops">${loops}</stringProp>
+ </LoopController>
+ <hashTree>
+ <IfController guiclass="IfControllerPanel" testclass="IfController" testname="vCPE Use Case" enabled="true">
+ <stringProp name="IfController.condition">${vcpe}</stringProp>
+ <boolProp name="IfController.evaluateAll">false</boolProp>
+ <boolProp name="IfController.useExpression">true</boolProp>
+ </IfController>
+ <hashTree>
+ <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="vCPE SUCCESS Use Case" enabled="true"/>
+ <hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ONSET" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;closedLoopControlName&quot;: &quot;${vCPEName}&quot;,&#xd;
+ &quot;closedLoopAlarmStart&quot;: 1463679805324,&#xd;
+ &quot;closedLoopEventClient&quot;: &quot;DCAE_INSTANCE_ID.dcae-tca&quot;,&#xd;
+ &quot;closedLoopEventStatus&quot;: &quot;ONSET&quot;,&#xd;
+ &quot;requestID&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;target_type&quot;: &quot;VNF&quot;,&#xd;
+ &quot;target&quot;: &quot;generic-vnf.vnf-id&quot;,&#xd;
+ &quot;AAI&quot;: {&#xd;
+ &quot;vserver.is-closed-loop-disabled&quot;: &quot;false&quot;,&#xd;
+ &quot;generic-vnf.vnf-id&quot;: &quot;${vnfId}&quot;&#xd;
+ },&#xd;
+ &quot;from&quot;: &quot;DCAE&quot;,&#xd;
+ &quot;version&quot;: &quot;1.0.2&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${eventTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <JSR223PreProcessor guiclass="TestBeanGUI" testclass="JSR223PreProcessor" testname="generate request params" enabled="true">
+ <stringProp name="scriptLanguage">groovy</stringProp>
+ <stringProp name="parameters"></stringProp>
+ <stringProp name="filename"></stringProp>
+ <stringProp name="cacheKey"></stringProp>
+ <stringProp name="script">import java.util.UUID;
+String reqid = UUID.randomUUID().toString();
+vars.put(&quot;requestId&quot;, reqid);
+vars.put(&quot;vnfId&quot;, &quot;vnf-&quot;+reqid);
+</stringProp>
+ </JSR223PreProcessor>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await APPC begin" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;EndsWith&quot;, &quot;string&quot;:&quot;${policyName}&quot;, &quot;value&quot;:&quot;GUARD_PERMITTED&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert start notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="APPC Response" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;body&quot;: {&#xd;
+ &quot;output&quot;: {&#xd;
+ &quot;common-header&quot;: {&#xd;
+ &quot;timestamp&quot;: &quot;2017-08-25T21:06:23.037Z&quot;,&#xd;
+ &quot;api-ver&quot;: &quot;5.00&quot;,&#xd;
+ &quot;originator-id&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;request-id&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;sub-request-id&quot;: &quot;1&quot;,&#xd;
+ &quot;flags&quot;: {}&#xd;
+ },&#xd;
+ &quot;status&quot;: {&#xd;
+ &quot;code&quot;: 400,&#xd;
+ &quot;message&quot;: &quot;Restart Successful&quot;&#xd;
+ }&#xd;
+ }&#xd;
+ },&#xd;
+ &quot;version&quot;: &quot;2.0&quot;,&#xd;
+ &quot;rpc-name&quot;: &quot;restart&quot;,&#xd;
+ &quot;correlation-id&quot;: &quot;664be3d2-6c12-4f4b-a3e7-c349acced200-1&quot;,&#xd;
+ &quot;type&quot;: &quot;response&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${appcRespTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree/>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await APPC finish" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;EndsWith&quot;, &quot;string&quot;:&quot;${policyName}&quot;, &quot;value&quot;:&quot;APPC.LCM.RESPONSE&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert finish notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ABATEMENT" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;closedLoopControlName&quot;: &quot;${vCPEName}&quot;,&#xd;
+ &quot;closedLoopAlarmStart&quot;: 1463679805324,&#xd;
+ &quot;closedLoopAlarmEnd&quot;: 1463699805324,&#xd;
+ &quot;closedLoopEventClient&quot;: &quot;DCAE_INSTANCE_ID.dcae-tca&quot;,&#xd;
+ &quot;closedLoopEventStatus&quot;: &quot;ABATED&quot;,&#xd;
+ &quot;requestID&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;target_type&quot;: &quot;VNF&quot;,&#xd;
+ &quot;target&quot;: &quot;generic-vnf.vnf-id&quot;,&#xd;
+ &quot;AAI&quot;: {&#xd;
+ &quot;vserver.is-closed-loop-disabled&quot;: &quot;false&quot;,&#xd;
+ &quot;generic-vnf.vnf-id&quot;: &quot;${vnfId}&quot;&#xd;
+ },&#xd;
+ &quot;from&quot;: &quot;DCAE&quot;,&#xd;
+ &quot;version&quot;: &quot;1.0.2&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${eventTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree/>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await FINAL" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;notification&quot;, &quot;value&quot;:&quot;FINAL: SUCCESS&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert final notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ </hashTree>
+ <IfController guiclass="IfControllerPanel" testclass="IfController" testname="vCPE FAILURE Use Case" enabled="true">
+ <stringProp name="IfController.condition">${failures}</stringProp>
+ <boolProp name="IfController.evaluateAll">false</boolProp>
+ <boolProp name="IfController.useExpression">true</boolProp>
+ </IfController>
+ <hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ONSET" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;closedLoopControlName&quot;: &quot;${vCPEName}&quot;,&#xd;
+ &quot;closedLoopAlarmStart&quot;: 1463679805324,&#xd;
+ &quot;closedLoopEventClient&quot;: &quot;DCAE_INSTANCE_ID.dcae-tca&quot;,&#xd;
+ &quot;closedLoopEventStatus&quot;: &quot;ONSET&quot;,&#xd;
+ &quot;requestID&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;target_type&quot;: &quot;VNF&quot;,&#xd;
+ &quot;target&quot;: &quot;generic-vnf.vnf-id&quot;,&#xd;
+ &quot;AAI&quot;: {&#xd;
+ &quot;vserver.is-closed-loop-disabled&quot;: &quot;false&quot;,&#xd;
+ &quot;generic-vnf.vnf-id&quot;: &quot;${vnfId}&quot;&#xd;
+ },&#xd;
+ &quot;from&quot;: &quot;DCAE&quot;,&#xd;
+ &quot;version&quot;: &quot;1.0.2&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${eventTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <JSR223PreProcessor guiclass="TestBeanGUI" testclass="JSR223PreProcessor" testname="generate request params" enabled="true">
+ <stringProp name="scriptLanguage">groovy</stringProp>
+ <stringProp name="parameters"></stringProp>
+ <stringProp name="filename"></stringProp>
+ <stringProp name="cacheKey"></stringProp>
+ <stringProp name="script">import java.util.UUID;
+String reqid = UUID.randomUUID().toString();
+vars.put(&quot;requestId&quot;, reqid);
+vars.put(&quot;vnfId&quot;, &quot;vnf-&quot;+reqid);
+</stringProp>
+ </JSR223PreProcessor>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await APPC begin" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;EndsWith&quot;, &quot;string&quot;:&quot;${policyName}&quot;, &quot;value&quot;:&quot;GUARD_PERMITTED&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert start notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="APPC Response" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;body&quot;: {&#xd;
+ &quot;output&quot;: {&#xd;
+ &quot;common-header&quot;: {&#xd;
+ &quot;timestamp&quot;: &quot;2017-08-25T21:06:23.037Z&quot;,&#xd;
+ &quot;api-ver&quot;: &quot;5.00&quot;,&#xd;
+ &quot;originator-id&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;request-id&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;sub-request-id&quot;: &quot;1&quot;,&#xd;
+ &quot;flags&quot;: {}&#xd;
+ },&#xd;
+ &quot;status&quot;: {&#xd;
+ &quot;code&quot;: 500,&#xd;
+ &quot;message&quot;: &quot;Restart Failed&quot;&#xd;
+ }&#xd;
+ }&#xd;
+ },&#xd;
+ &quot;version&quot;: &quot;2.0&quot;,&#xd;
+ &quot;rpc-name&quot;: &quot;restart&quot;,&#xd;
+ &quot;correlation-id&quot;: &quot;664be3d2-6c12-4f4b-a3e7-c349acced200-1&quot;,&#xd;
+ &quot;type&quot;: &quot;response&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${appcRespTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree/>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await FINAL" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;notification&quot;, &quot;value&quot;:&quot;FINAL: FAILURE&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert final notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ </hashTree>
+ </hashTree>
+ <IfController guiclass="IfControllerPanel" testclass="IfController" testname="vDNS Use Case" enabled="true">
+ <stringProp name="IfController.condition">${vdns}</stringProp>
+ <boolProp name="IfController.evaluateAll">false</boolProp>
+ <boolProp name="IfController.useExpression">true</boolProp>
+ </IfController>
+ <hashTree>
+ <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="vDNS SUCCESS Use Case" enabled="true"/>
+ <hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ONSET" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;closedLoopControlName&quot;: &quot;${vDNSName}&quot;,&#xd;
+ &quot;closedLoopAlarmStart&quot;: 1484677482204798,&#xd;
+ &quot;closedLoopEventClient&quot;: &quot;DCAE_INSTANCE_ID.dcae-tca&quot;,&#xd;
+ &quot;closedLoopEventStatus&quot;: &quot;ONSET&quot;,&#xd;
+ &quot;requestID&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;target_type&quot;: &quot;VNF&quot;,&#xd;
+ &quot;target&quot;: &quot;vserver.vserver-name&quot;,&#xd;
+ &quot;AAI&quot;: {&#xd;
+ &quot;vserver.is-closed-loop-disabled&quot;: &quot;false&quot;,&#xd;
+ &quot;vserver.vserver-name&quot;: &quot;${vserverName}&quot;&#xd;
+ }, &#xd;
+ &quot;from&quot;: &quot;DCAE&quot;,&#xd;
+ &quot;version&quot;: &quot;1.0.2&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${eventTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <JSR223PreProcessor guiclass="TestBeanGUI" testclass="JSR223PreProcessor" testname="generate request params" enabled="true">
+ <stringProp name="scriptLanguage">groovy</stringProp>
+ <stringProp name="parameters"></stringProp>
+ <stringProp name="filename"></stringProp>
+ <stringProp name="cacheKey"></stringProp>
+ <stringProp name="script">import java.util.UUID;
+String reqid = UUID.randomUUID().toString();
+vars.put(&quot;requestId&quot;, reqid);
+vars.put(&quot;vserverName&quot;, &quot;vserver-&quot;+reqid);
+</stringProp>
+ </JSR223PreProcessor>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await FINAL" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;notification&quot;, &quot;value&quot;:&quot;FINAL: SUCCESS&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert final notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ </hashTree>
+ </hashTree>
+ <IfController guiclass="IfControllerPanel" testclass="IfController" testname="vFW Use Case" enabled="true">
+ <stringProp name="IfController.condition">${vfw}</stringProp>
+ <boolProp name="IfController.evaluateAll">false</boolProp>
+ <boolProp name="IfController.useExpression">true</boolProp>
+ </IfController>
+ <hashTree>
+ <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="vFW SUCCESS Use Case" enabled="true"/>
+ <hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ONSET" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;closedLoopControlName&quot;: &quot;${vFWName}&quot;,&#xd;
+ &quot;closedLoopAlarmStart&quot;: 1463679805324,&#xd;
+ &quot;closedLoopEventClient&quot;: &quot;microservice.stringmatcher&quot;,&#xd;
+ &quot;closedLoopEventStatus&quot;: &quot;ONSET&quot;,&#xd;
+ &quot;requestID&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;target_type&quot;: &quot;VNF&quot;,&#xd;
+ &quot;target&quot;: &quot;generic-vnf.vnf-id&quot;,&#xd;
+ &quot;AAI&quot;: {&#xd;
+ &quot;generic-vnf.is-closed-loop-disabled&quot;: &quot;false&quot;,&#xd;
+ &quot;generic-vnf.vnf-id&quot;: &quot;${vnfId}&quot;&#xd;
+ },&#xd;
+ &quot;from&quot;: &quot;DCAE&quot;,&#xd;
+ &quot;version&quot;: &quot;1.0.2&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${eventTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <JSR223PreProcessor guiclass="TestBeanGUI" testclass="JSR223PreProcessor" testname="generate request params" enabled="true">
+ <stringProp name="scriptLanguage">groovy</stringProp>
+ <stringProp name="parameters"></stringProp>
+ <stringProp name="filename"></stringProp>
+ <stringProp name="cacheKey"></stringProp>
+ <stringProp name="script">import java.util.UUID;
+String reqid = UUID.randomUUID().toString();
+vars.put(&quot;requestId&quot;, reqid);
+vars.put(&quot;vnfId&quot;, &quot;vnf-&quot;+reqid);
+</stringProp>
+ </JSR223PreProcessor>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await APPC begin" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;EndsWith&quot;, &quot;string&quot;:&quot;${policyName}&quot;, &quot;value&quot;:&quot;GUARD_PERMITTED&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert start notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="APPC Response" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;CommonHeader&quot;: {&#xd;
+ &quot;TimeStamp&quot;: 1506051879001,&#xd;
+ &quot;APIver&quot;: &quot;1.01&quot;,&#xd;
+ &quot;RequestID&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;SubRequestID&quot;: &quot;1&quot;,&#xd;
+ &quot;RequestTrack&quot;: [],&#xd;
+ &quot;Flags&quot;: []&#xd;
+ },&#xd;
+ &quot;Status&quot;: {&#xd;
+ &quot;Code&quot;: 400,&#xd;
+ &quot;Value&quot;: &quot;SUCCESS&quot;&#xd;
+ },&#xd;
+ &quot;Payload&quot;: {&#xd;
+ &quot;generic-vnf.vnf-id&quot;: &quot;${vnfId}&quot;,&#xd;
+ &quot;pg-streams&quot;: {&#xd;
+ &quot;pg-stream&quot;: [&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp1&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ },&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp2&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ },&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp3&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ },&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp4&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ },&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp5&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ }&#xd;
+ ]&#xd;
+ }&#xd;
+ }&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${appcRespTopic2}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree/>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await FINAL" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;notification&quot;, &quot;value&quot;:&quot;FINAL: SUCCESS&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert final notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ </hashTree>
+ <IfController guiclass="IfControllerPanel" testclass="IfController" testname="vFW FAILURE Use Case" enabled="true">
+ <stringProp name="IfController.condition">${failures}</stringProp>
+ <boolProp name="IfController.evaluateAll">false</boolProp>
+ <boolProp name="IfController.useExpression">true</boolProp>
+ </IfController>
+ <hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ONSET" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;closedLoopControlName&quot;: &quot;${vFWName}&quot;,&#xd;
+ &quot;closedLoopAlarmStart&quot;: 1463679805324,&#xd;
+ &quot;closedLoopEventClient&quot;: &quot;microservice.stringmatcher&quot;,&#xd;
+ &quot;closedLoopEventStatus&quot;: &quot;ONSET&quot;,&#xd;
+ &quot;requestID&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;target_type&quot;: &quot;VNF&quot;,&#xd;
+ &quot;target&quot;: &quot;generic-vnf.vnf-id&quot;,&#xd;
+ &quot;AAI&quot;: {&#xd;
+ &quot;generic-vnf.is-closed-loop-disabled&quot;: &quot;false&quot;,&#xd;
+ &quot;generic-vnf.vnf-id&quot;: &quot;${vnfId}&quot;&#xd;
+ },&#xd;
+ &quot;from&quot;: &quot;DCAE&quot;,&#xd;
+ &quot;version&quot;: &quot;1.0.2&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${eventTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <JSR223PreProcessor guiclass="TestBeanGUI" testclass="JSR223PreProcessor" testname="generate request params" enabled="true">
+ <stringProp name="scriptLanguage">groovy</stringProp>
+ <stringProp name="parameters"></stringProp>
+ <stringProp name="filename"></stringProp>
+ <stringProp name="cacheKey"></stringProp>
+ <stringProp name="script">import java.util.UUID;
+String reqid = UUID.randomUUID().toString();
+vars.put(&quot;requestId&quot;, reqid);
+vars.put(&quot;vnfId&quot;, &quot;vnf-&quot;+reqid);
+</stringProp>
+ </JSR223PreProcessor>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await APPC begin" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;EndsWith&quot;, &quot;string&quot;:&quot;${policyName}&quot;, &quot;value&quot;:&quot;GUARD_PERMITTED&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert start notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="APPC Response" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;CommonHeader&quot;: {&#xd;
+ &quot;TimeStamp&quot;: 1506051879001,&#xd;
+ &quot;APIver&quot;: &quot;1.01&quot;,&#xd;
+ &quot;RequestID&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;SubRequestID&quot;: &quot;1&quot;,&#xd;
+ &quot;RequestTrack&quot;: [],&#xd;
+ &quot;Flags&quot;: []&#xd;
+ },&#xd;
+ &quot;Status&quot;: {&#xd;
+ &quot;Code&quot;: 500,&#xd;
+ &quot;Value&quot;: &quot;FAILED&quot;&#xd;
+ },&#xd;
+ &quot;Payload&quot;: {&#xd;
+ &quot;generic-vnf.vnf-id&quot;: &quot;${vnfId}&quot;,&#xd;
+ &quot;pg-streams&quot;: {&#xd;
+ &quot;pg-stream&quot;: [&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp1&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ },&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp2&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ },&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp3&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ },&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp4&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ },&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp5&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ }&#xd;
+ ]&#xd;
+ }&#xd;
+ }&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${appcRespTopic2}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree/>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await FINAL" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;notification&quot;, &quot;value&quot;:&quot;FINAL: FAILURE&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert final notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ </hashTree>
+ </hashTree>
+ <IfController guiclass="IfControllerPanel" testclass="IfController" testname="VoLTE Use Case" enabled="true">
+ <stringProp name="IfController.condition">${volte}</stringProp>
+ <boolProp name="IfController.evaluateAll">false</boolProp>
+ <boolProp name="IfController.useExpression">true</boolProp>
+ </IfController>
+ <hashTree>
+ <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="VoLTE SUCCESS Use Case" enabled="true"/>
+ <hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ONSET" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{ &#xd;
+ &quot;closedLoopControlName&quot;:&quot;${VOLTEName}&quot;,&#xd;
+ &quot;closedLoopAlarmStart&quot;:1484677482204798,&#xd;
+ &quot;closedLoopEventClient&quot;:&quot;DCAE.HolmesInstance&quot;,&#xd;
+ &quot;closedLoopEventStatus&quot;:&quot;ONSET&quot;,&#xd;
+ &quot;requestID&quot;:&quot;${requestId}&quot;,&#xd;
+ &quot;target_type&quot;:&quot;VM&quot;,&#xd;
+ &quot;target&quot;:&quot;vserver.vserver-name&quot;,&#xd;
+ &quot;AAI&quot;:{ &#xd;
+ &quot;vserver.is-closed-loop-disabled&quot;:&quot;false&quot;,&#xd;
+ &quot;vserver.vserver-name&quot;:&quot;${vserverName}&quot;,&#xd;
+ &quot;service-instance.service-instance-id&quot;:&quot;vserver-name-${serviceInstanceId}&quot;,&#xd;
+ &quot;generic-vnf.vnf-id&quot;:&quot;vnf-id-${serviceInstanceId}&quot;,&#xd;
+ &quot;generic-vnf.vnf-name&quot;:&quot;vnf-name-${serviceInstanceId}&quot;&#xd;
+ },&#xd;
+ &quot;from&quot;:&quot;DCAE&quot;,&#xd;
+ &quot;version&quot;:&quot;1.0.2&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${eventTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <JSR223PreProcessor guiclass="TestBeanGUI" testclass="JSR223PreProcessor" testname="generate request params" enabled="true">
+ <stringProp name="scriptLanguage">groovy</stringProp>
+ <stringProp name="parameters"></stringProp>
+ <stringProp name="filename"></stringProp>
+ <stringProp name="cacheKey"></stringProp>
+ <stringProp name="script">import java.util.UUID;
+String reqid = UUID.randomUUID().toString();
+vars.put(&quot;requestId&quot;, reqid);
+vars.put(&quot;vserverName&quot;, &quot;vserver-&quot;+reqid);
+vars.put(&quot;serviceInstanceId&quot;, &quot;ssi-&quot;+reqid);
+</stringProp>
+ </JSR223PreProcessor>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await FINAL" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;notification&quot;, &quot;value&quot;:&quot;FINAL: SUCCESS&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert final notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ </hashTree>
+ </hashTree>
+ </hashTree>
+ </hashTree>
+ <ResultCollector guiclass="TableVisualizer" testclass="ResultCollector" testname="View Results in Table" enabled="true">
+ <boolProp name="ResultCollector.error_logging">false</boolProp>
+ <objProp>
+ <name>saveConfig</name>
+ <value class="SampleSaveConfiguration">
+ <time>true</time>
+ <latency>true</latency>
+ <timestamp>true</timestamp>
+ <success>true</success>
+ <label>true</label>
+ <code>true</code>
+ <message>true</message>
+ <threadName>true</threadName>
+ <dataType>true</dataType>
+ <encoding>false</encoding>
+ <assertions>true</assertions>
+ <subresults>true</subresults>
+ <responseData>false</responseData>
+ <samplerData>false</samplerData>
+ <xml>false</xml>
+ <fieldNames>true</fieldNames>
+ <responseHeaders>false</responseHeaders>
+ <requestHeaders>false</requestHeaders>
+ <responseDataOnError>false</responseDataOnError>
+ <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+ <assertionsResultsToSave>0</assertionsResultsToSave>
+ <bytes>true</bytes>
+ <sentBytes>true</sentBytes>
+ <threadCounts>true</threadCounts>
+ <idleTime>true</idleTime>
+ <connectTime>true</connectTime>
+ </value>
+ </objProp>
+ <stringProp name="filename"></stringProp>
+ </ResultCollector>
+ <hashTree/>
+ <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">
+ <boolProp name="ResultCollector.error_logging">false</boolProp>
+ <objProp>
+ <name>saveConfig</name>
+ <value class="SampleSaveConfiguration">
+ <time>true</time>
+ <latency>true</latency>
+ <timestamp>true</timestamp>
+ <success>true</success>
+ <label>true</label>
+ <code>true</code>
+ <message>true</message>
+ <threadName>true</threadName>
+ <dataType>true</dataType>
+ <encoding>false</encoding>
+ <assertions>true</assertions>
+ <subresults>true</subresults>
+ <responseData>false</responseData>
+ <samplerData>false</samplerData>
+ <xml>false</xml>
+ <fieldNames>true</fieldNames>
+ <responseHeaders>false</responseHeaders>
+ <requestHeaders>false</requestHeaders>
+ <responseDataOnError>false</responseDataOnError>
+ <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+ <assertionsResultsToSave>0</assertionsResultsToSave>
+ <bytes>true</bytes>
+ <sentBytes>true</sentBytes>
+ <threadCounts>true</threadCounts>
+ <idleTime>true</idleTime>
+ <connectTime>true</connectTime>
+ </value>
+ </objProp>
+ <stringProp name="filename"></stringProp>
+ </ResultCollector>
+ <hashTree/>
+ </hashTree>
+ </hashTree>
+</jmeterTestPlan>
diff --git a/testsuites/pom.xml b/testsuites/pom.xml
index 842aa00e8..ceccba220 100644
--- a/testsuites/pom.xml
+++ b/testsuites/pom.xml
@@ -3,6 +3,7 @@
testsuites
================================================================================
Copyright (C) 2018 Ericsson. All rights reserved.
+ Modifications Copyright (C) 2018 AT&T. 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.
@@ -29,5 +30,6 @@
<packaging>pom</packaging>
<modules>
<module>stability</module>
+ <module>performance</module>
</modules>
</project> \ No newline at end of file