diff options
-rw-r--r-- | controlloop/common/controller-beijing/.gitignore | 1 | ||||
-rw-r--r-- | controlloop/common/controller-casablanca/.gitignore | 1 | ||||
-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.PolicyEngineFeatureAPI | 1 | ||||
-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.PolicyEngineFeatureAPI | 1 | ||||
-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.xml | 4 | ||||
-rw-r--r-- | controlloop/packages/apps-controlloop/pom.xml | 2 | ||||
-rw-r--r-- | controlloop/packages/apps-controlloop/src/files/apps-controlloop-installer | 2 | ||||
-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.xml | 2 | ||||
-rw-r--r-- | testsuites/performance/pom.xml | 51 | ||||
-rw-r--r-- | testsuites/performance/src/assembly/assembly.xml | 42 | ||||
-rw-r--r-- | testsuites/performance/src/main/resources/amsterdam/generate-mt-performance-report | 611 | ||||
-rw-r--r-- | testsuites/performance/src/main/resources/amsterdam/policyMTPerformanceTestPlan.jmx | 1393 | ||||
-rw-r--r-- | testsuites/pom.xml | 2 |
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&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("consumerGroup", "policy-${__machineName}-${__threadNum}"); +</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">{
 + "closedLoopControlName": "${vCPEName}",
 + "closedLoopAlarmStart": 1463679805324,
 + "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
 + "closedLoopEventStatus": "ONSET",
 + "requestID": "${requestId}",
 + "target_type": "VNF",
 + "target": "generic-vnf.vnf-id",
 + "AAI": {
 + "vserver.is-closed-loop-disabled": "false",
 + "generic-vnf.vnf-id": "${vnfId}"
 + },
 + "from": "DCAE",
 + "version": "1.0.2"
 +}
 +</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("requestId", reqid); +vars.put("vnfId", "vnf-"+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">{"class":"And", "filters": [ { "class":"Equals", "field":"requestId", "value":"${requestId}" }, { "class":"EndsWith", "string":"${policyName}", "value":"GUARD_PERMITTED" }]}</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">{
 + "body": {
 + "output": {
 + "common-header": {
 + "timestamp": "2017-08-25T21:06:23.037Z",
 + "api-ver": "5.00",
 + "originator-id": "${requestId}",
 + "request-id": "${requestId}",
 + "sub-request-id": "1",
 + "flags": {}
 + },
 + "status": {
 + "code": 400,
 + "message": "Restart Successful"
 + }
 + }
 + },
 + "version": "2.0",
 + "rpc-name": "restart",
 + "correlation-id": "664be3d2-6c12-4f4b-a3e7-c349acced200-1",
 + "type": "response"
 +}
 +</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">{"class":"And", "filters": [ { "class":"Equals", "field":"requestId", "value":"${requestId}" }, { "class":"EndsWith", "string":"${policyName}", "value":"APPC.LCM.RESPONSE" }]}</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">{
 + "closedLoopControlName": "${vCPEName}",
 + "closedLoopAlarmStart": 1463679805324,
 + "closedLoopAlarmEnd": 1463699805324,
 + "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
 + "closedLoopEventStatus": "ABATED",
 + "requestID": "${requestId}",
 + "target_type": "VNF",
 + "target": "generic-vnf.vnf-id",
 + "AAI": {
 + "vserver.is-closed-loop-disabled": "false",
 + "generic-vnf.vnf-id": "${vnfId}"
 + },
 + "from": "DCAE",
 + "version": "1.0.2"
 +}
 +</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">{"class":"And", "filters": [ { "class":"Equals", "field":"requestId", "value":"${requestId}" }, { "class":"Equals", "field":"notification", "value":"FINAL: SUCCESS" }]}</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">{
 + "closedLoopControlName": "${vCPEName}",
 + "closedLoopAlarmStart": 1463679805324,
 + "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
 + "closedLoopEventStatus": "ONSET",
 + "requestID": "${requestId}",
 + "target_type": "VNF",
 + "target": "generic-vnf.vnf-id",
 + "AAI": {
 + "vserver.is-closed-loop-disabled": "false",
 + "generic-vnf.vnf-id": "${vnfId}"
 + },
 + "from": "DCAE",
 + "version": "1.0.2"
 +}
 +</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("requestId", reqid); +vars.put("vnfId", "vnf-"+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">{"class":"And", "filters": [ { "class":"Equals", "field":"requestId", "value":"${requestId}" }, { "class":"EndsWith", "string":"${policyName}", "value":"GUARD_PERMITTED" }]}</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">{
 + "body": {
 + "output": {
 + "common-header": {
 + "timestamp": "2017-08-25T21:06:23.037Z",
 + "api-ver": "5.00",
 + "originator-id": "${requestId}",
 + "request-id": "${requestId}",
 + "sub-request-id": "1",
 + "flags": {}
 + },
 + "status": {
 + "code": 500,
 + "message": "Restart Failed"
 + }
 + }
 + },
 + "version": "2.0",
 + "rpc-name": "restart",
 + "correlation-id": "664be3d2-6c12-4f4b-a3e7-c349acced200-1",
 + "type": "response"
 +}
 +</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">{"class":"And", "filters": [ { "class":"Equals", "field":"requestId", "value":"${requestId}" }, { "class":"Equals", "field":"notification", "value":"FINAL: FAILURE" }]}</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">{
 + "closedLoopControlName": "${vDNSName}",
 + "closedLoopAlarmStart": 1484677482204798,
 + "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
 + "closedLoopEventStatus": "ONSET",
 + "requestID": "${requestId}",
 + "target_type": "VNF",
 + "target": "vserver.vserver-name",
 + "AAI": {
 + "vserver.is-closed-loop-disabled": "false",
 + "vserver.vserver-name": "${vserverName}"
 + }, 
 + "from": "DCAE",
 + "version": "1.0.2"
 +}
 +</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("requestId", reqid); +vars.put("vserverName", "vserver-"+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">{"class":"And", "filters": [ { "class":"Equals", "field":"requestId", "value":"${requestId}" }, { "class":"Equals", "field":"notification", "value":"FINAL: SUCCESS" }]}</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">{
 + "closedLoopControlName": "${vFWName}",
 + "closedLoopAlarmStart": 1463679805324,
 + "closedLoopEventClient": "microservice.stringmatcher",
 + "closedLoopEventStatus": "ONSET",
 + "requestID": "${requestId}",
 + "target_type": "VNF",
 + "target": "generic-vnf.vnf-id",
 + "AAI": {
 + "generic-vnf.is-closed-loop-disabled": "false",
 + "generic-vnf.vnf-id": "${vnfId}"
 + },
 + "from": "DCAE",
 + "version": "1.0.2"
 +}
 +</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("requestId", reqid); +vars.put("vnfId", "vnf-"+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">{"class":"And", "filters": [ { "class":"Equals", "field":"requestId", "value":"${requestId}" }, { "class":"EndsWith", "string":"${policyName}", "value":"GUARD_PERMITTED" }]}</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">{
 + "CommonHeader": {
 + "TimeStamp": 1506051879001,
 + "APIver": "1.01",
 + "RequestID": "${requestId}",
 + "SubRequestID": "1",
 + "RequestTrack": [],
 + "Flags": []
 + },
 + "Status": {
 + "Code": 400,
 + "Value": "SUCCESS"
 + },
 + "Payload": {
 + "generic-vnf.vnf-id": "${vnfId}",
 + "pg-streams": {
 + "pg-stream": [
 + {
 + "id": "fw_udp1",
 + "is-enabled": "true"
 + },
 + {
 + "id": "fw_udp2",
 + "is-enabled": "true"
 + },
 + {
 + "id": "fw_udp3",
 + "is-enabled": "true"
 + },
 + {
 + "id": "fw_udp4",
 + "is-enabled": "true"
 + },
 + {
 + "id": "fw_udp5",
 + "is-enabled": "true"
 + }
 + ]
 + }
 + }
 +}
 +</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">{"class":"And", "filters": [ { "class":"Equals", "field":"requestId", "value":"${requestId}" }, { "class":"Equals", "field":"notification", "value":"FINAL: SUCCESS" }]}</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">{
 + "closedLoopControlName": "${vFWName}",
 + "closedLoopAlarmStart": 1463679805324,
 + "closedLoopEventClient": "microservice.stringmatcher",
 + "closedLoopEventStatus": "ONSET",
 + "requestID": "${requestId}",
 + "target_type": "VNF",
 + "target": "generic-vnf.vnf-id",
 + "AAI": {
 + "generic-vnf.is-closed-loop-disabled": "false",
 + "generic-vnf.vnf-id": "${vnfId}"
 + },
 + "from": "DCAE",
 + "version": "1.0.2"
 +}
 +</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("requestId", reqid); +vars.put("vnfId", "vnf-"+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">{"class":"And", "filters": [ { "class":"Equals", "field":"requestId", "value":"${requestId}" }, { "class":"EndsWith", "string":"${policyName}", "value":"GUARD_PERMITTED" }]}</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">{
 + "CommonHeader": {
 + "TimeStamp": 1506051879001,
 + "APIver": "1.01",
 + "RequestID": "${requestId}",
 + "SubRequestID": "1",
 + "RequestTrack": [],
 + "Flags": []
 + },
 + "Status": {
 + "Code": 500,
 + "Value": "FAILED"
 + },
 + "Payload": {
 + "generic-vnf.vnf-id": "${vnfId}",
 + "pg-streams": {
 + "pg-stream": [
 + {
 + "id": "fw_udp1",
 + "is-enabled": "true"
 + },
 + {
 + "id": "fw_udp2",
 + "is-enabled": "true"
 + },
 + {
 + "id": "fw_udp3",
 + "is-enabled": "true"
 + },
 + {
 + "id": "fw_udp4",
 + "is-enabled": "true"
 + },
 + {
 + "id": "fw_udp5",
 + "is-enabled": "true"
 + }
 + ]
 + }
 + }
 +}
 +</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">{"class":"And", "filters": [ { "class":"Equals", "field":"requestId", "value":"${requestId}" }, { "class":"Equals", "field":"notification", "value":"FINAL: FAILURE" }]}</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">{ 
 + "closedLoopControlName":"${VOLTEName}",
 + "closedLoopAlarmStart":1484677482204798,
 + "closedLoopEventClient":"DCAE.HolmesInstance",
 + "closedLoopEventStatus":"ONSET",
 + "requestID":"${requestId}",
 + "target_type":"VM",
 + "target":"vserver.vserver-name",
 + "AAI":{ 
 + "vserver.is-closed-loop-disabled":"false",
 + "vserver.vserver-name":"${vserverName}",
 + "service-instance.service-instance-id":"vserver-name-${serviceInstanceId}",
 + "generic-vnf.vnf-id":"vnf-id-${serviceInstanceId}",
 + "generic-vnf.vnf-name":"vnf-name-${serviceInstanceId}"
 + },
 + "from":"DCAE",
 + "version":"1.0.2"
 +}
 +</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("requestId", reqid); +vars.put("vserverName", "vserver-"+reqid); +vars.put("serviceInstanceId", "ssi-"+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">{"class":"And", "filters": [ { "class":"Equals", "field":"requestId", "value":"${requestId}" }, { "class":"Equals", "field":"notification", "value":"FINAL: SUCCESS" }]}</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 |