summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPamela Dragosh <pdragosh@research.att.com>2018-08-07 13:01:11 +0000
committerGerrit Code Review <gerrit@onap.org>2018-08-07 13:01:11 +0000
commitb88421e9bc12e96894bd59950efc1312a3f15b7b (patch)
treeabdba9b44fd3aef902ffa020c6fd739cbb33fc1e
parent9847c3929f8690d53339db6423e8eebedefaa6f6 (diff)
parent0ab23314c928f61a4eb6309623f93d225181fa88 (diff)
Merge "add scripts to measure performance of PDP-D"
-rw-r--r--testsuites/performance/pom.xml51
-rw-r--r--testsuites/performance/src/assembly/assembly.xml42
-rw-r--r--testsuites/performance/src/main/resources/amsterdam/generate-mt-performance-report611
-rw-r--r--testsuites/performance/src/main/resources/amsterdam/policyMTPerformanceTestPlan.jmx1393
-rw-r--r--testsuites/pom.xml2
5 files changed, 2099 insertions, 0 deletions
diff --git a/testsuites/performance/pom.xml b/testsuites/performance/pom.xml
new file mode 100644
index 000000000..0d8f9ba5e
--- /dev/null
+++ b/testsuites/performance/pom.xml
@@ -0,0 +1,51 @@
+<!--
+ ============LICENSE_START=======================================================
+ performance
+ ================================================================================
+ Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ============LICENSE_END=========================================================
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.onap.policy.drools-applications</groupId>
+ <artifactId>testsuites</artifactId>
+ <version>1.3.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>performance</artifactId>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>create-distribution</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>src/assembly/assembly.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/testsuites/performance/src/assembly/assembly.xml b/testsuites/performance/src/assembly/assembly.xml
new file mode 100644
index 000000000..e32259d17
--- /dev/null
+++ b/testsuites/performance/src/assembly/assembly.xml
@@ -0,0 +1,42 @@
+<!--
+ ============LICENSE_START=======================================================
+ performance
+ ================================================================================
+ Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ============LICENSE_END=========================================================
+ -->
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+ <id>performance</id>
+ <formats>
+ <format>zip</format>
+ </formats>
+ <baseDirectory>/drools-applications/performance</baseDirectory>
+ <fileSets>
+ <fileSet>
+ <directory>${project.basedir}/src/main/resources/amsterdam/</directory>
+ <outputDirectory>tests/amsterdam</outputDirectory>
+ <includes>
+ <include>*.jmx</include>
+ <include>*.sh</include>
+ </includes>
+ <lineEnding>unix</lineEnding>
+ <fileMode>0644</fileMode>
+ <filtered>true</filtered>
+ </fileSet>
+ </fileSets>
+</assembly>
diff --git a/testsuites/performance/src/main/resources/amsterdam/generate-mt-performance-report b/testsuites/performance/src/main/resources/amsterdam/generate-mt-performance-report
new file mode 100644
index 000000000..16f1bc839
--- /dev/null
+++ b/testsuites/performance/src/main/resources/amsterdam/generate-mt-performance-report
@@ -0,0 +1,611 @@
+#!/bin/bash
+
+#
+# Copyright (C) 2018 AT&T. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# The aim of this script is to collect performance metric for policies
+# running in PDP-D.
+#
+# Pre-requisites:
+#
+# Get the JMeter Multi-threaded Performance test plan (see below link).
+#
+# https://gerrit.onap.org/r/gitweb?p=policy/drools-applications.git;a=blob;f=testsuites/performance/src/main/resources/amsterdam/policyMTPerformanceTestPlan.jmx;hb=refs/heads/master
+#
+# How to run:
+# 1: Copy this script to drools container
+# 2: Remove (or save) existing network*zip files found in logging directory
+# 3: Truncate (and save?) existing audit.log file found in logging directory
+# 4: Run the performance jmeter script to completion
+# 5: Pass following parameters to run this script
+# - log-dir : the complete directory location of network.log and audit.log
+#
+# Sample command for running the script:
+# ./generate_mt_performance_report.sh -l /var/log/onap/policy/pdpd
+# Note: -h or --help can be used to display details about input parameters.
+#
+# How it works
+# The script will parse the network log files at the specified location
+# and match outgoing requests with incoming responses and then calculate
+# the time taken for each request to complete. The total time is recorded
+# for each request id.
+# Once that completes, it then scans the audit log files, matches request IDs
+# with those found in the network files, and reports the average elapsed
+# time for each ONSET type, after subtracting the network time.
+
+usage()
+{
+_msg_="$@"
+scriptname=$(basename $0)
+
+cat<<-USAGE
+
+Command Arguments:
+
+-l
+ Mandatory argument. Directory location of network logs.
+
+-h
+ Optional argument. Display this usage.
+
+USAGE
+
+}
+
+while getopts "hl:" OPT "$@"
+do
+ case $OPT in
+ h)
+ usage
+ exit 0
+ ;;
+ l)
+ LOGDIR="$OPTARG"
+ ;;
+ *)
+ usage
+ exit 1
+ ;;
+ esac
+done
+
+if [ -z "$LOGDIR" ]; then
+ usage
+ exit 1
+fi
+
+
+python - <<PYTHON
+
+import subprocess
+import re
+import time
+import calendar
+import logging
+
+logging.basicConfig(format="%(message)s")
+logger = logging.getLogger("diff")
+logger.setLevel(logging.INFO)
+
+class Data:
+ """
+ A little bit of data associated with a single request. This is only
+ used for some request types.
+ """
+
+ def __init__(self, reqid, nexpected):
+ self.reqid = reqid
+
+ # number of matches expected before this object is discarded
+ self.nexpected = nexpected
+
+ # time when the request began
+ self.begin = None
+
+ def complete(self):
+ """
+ Indicates that the request has completed. Returns true if no more
+ requests are expected
+ """
+ self.begin = None
+ self.nexpected -= 1
+ return self.nexpected <= 0
+
+class NetworkLogParser:
+ """
+ Used to parse network.log. Various request types are identified
+ within the network.log using pattern matching.
+
+ AAI
+ <begin-time-stamp> OUT.AAI
+ "vnf-id": "vnf-<request-id>"; OR
+ "vserver-name": "vserver-<request-id>"
+ <end-time-stamp> IN.AAI
+ (takes the first one after OUT.AAI)
+
+ ABATEMENT
+ <begin-time-stamp> OUT.UEB.POLICY-CL-MGT
+ "requestId": "<request-id>"
+ "policyName": "...APPC.LCM.RESPONSE"
+ <end-time-stamp> IN.UEB.DCAE_CL_OUTPUT
+ "closedLoopEventStatus": "ABATED"
+ "RequestID": "<matching-request-id>"
+
+ APPC-CL
+ <begin-time-stamp> OUT.UEB.APPC-CL
+ "RequestID": "<request-id>"
+ <end-time-stamp> IN.UEB.APPC-CL
+ "RequestID": "<matching-request-id>"
+
+ APPC-LCM
+ <begin-time-stamp> OUT.UEB.APPC-LCM-READ
+ "request-id": "<request-id>"
+ <end-time-stamp> IN.UEB.APPC-LCM-WRITE
+ "request-id": "<matching-request-id>"
+
+ GUARD
+ <begin-time-stamp> OUT.UEB.POLICY-CL-MGT
+ "requestId": "<request-id>"
+ "policyName": "...GUARD_NOT_YET_QUERIED"
+ <end-time-stamp> OUT.UEB.POLICY-CL-MGT
+ "requestId": "<request-id>"
+ "policyName": "...GUARD.RESPONSE"
+
+ SO
+ OUT.UEB.POLICY-CL-MGT
+ "requestId": "<request-id>"
+ "message": "actor=SO,..."
+ <begin-time-stamp> <thread-id> OUT.SO
+ (takes the first one after OUT.UEB.POLICY-CL-MGT)
+ <end-time-stamp> <matching-thread-id> IN.SO
+
+ VFC
+ <begin-time-stamp> <thread-id> OUT.VFC url contains vserver-name-ssi-<request-id>
+ <end-time-stamp> <matching-thread-id> IN.VFC (vserver response)
+ <begin-time-stamp> <matching-thread-id> OUT.VFC (jobs request)
+ <end-time-stamp> <matching-thread-id> IN.VFC (jobs response)
+ """
+
+ def __init__(self):
+
+ # maps a request id to the time when the notification was received
+ self.req2begin = {}
+
+ # maps a request id to the total time from notification to response.
+ # some requests (e.g., vCPE) may include more than one notification/response
+ # pair in this total
+ self.req2total = {}
+
+ # latest AAI request ids, added as requests are seen and popped
+ # as requests are completed
+ self.aai_reqid = []
+
+ # latest actor data, added when actor=SO is seen and moved to
+ # so_thread_data when OUT.SO is seen
+ self.so_actor_data = []
+
+ # maps a thread id of the form, "pool-63-thread-41", to its SO Data
+ self.so_thread_data = {}
+
+ # maps a thread id of the form, "Thread-11382", to its VFC Data
+ self.vfc_thread_data = {}
+
+ # time associated with last IN/OUT line
+ self.tm = None
+
+ # current parser state, if parsing the body of a message, None
+ # otherwise
+ self.state = None
+
+ # request id associated with last IN/OUT line
+ self.reqid = None
+
+ # regular expression to match leading time stamp
+ timestamp_re = '[[]([^|]+).*'
+
+ # regular expression to match thread id appearing before IN/OUT
+ thread_re = '\\|([^|]+)\\]\\['
+
+ # list of [method, pattern]
+ # when the pattern is matched, the given method is invoked.
+ # during compilation, the number of capture groups + 1 is added to
+ # the end of each list
+ self.actions = [
+ [NetworkLogParser.out_notify, timestamp_re + '(?:OUT.UEB.*POLICY-CL)'],
+ [NetworkLogParser.out_appc, timestamp_re + '(?:OUT.UEB.*APPC)'],
+ [NetworkLogParser.in_appc, timestamp_re + '(?:IN.UEB.*APPC)'],
+ [NetworkLogParser.in_dcae, timestamp_re + '(?:IN.UEB.*DCAE_CL_OUTPUT)'],
+ [NetworkLogParser.out_aai, timestamp_re + '(?:OUT.AAI)'],
+ [NetworkLogParser.in_aai, timestamp_re + '(?:IN.AAI)'],
+ [NetworkLogParser.out_vfc, timestamp_re + thread_re + '(?:OUT.VFC)(?:.*vserver-name-ssi-([^/]+))?'],
+ [NetworkLogParser.in_vfc, timestamp_re + thread_re + '(?:IN.VFC)'],
+ [NetworkLogParser.in_abated, '.*"closedLoopEventStatus"[: ]+"ABATED"'],
+ [NetworkLogParser.request_id, '.*"(?:requestId|request-id|RequestID|requestID)"[: ]+"([^"]+)"'],
+ [NetworkLogParser.appc_lcm_response, '.*"policyName"(?:.*)[.]APPC.LCM.RESPONSE'],
+ [NetworkLogParser.out_guard, '.*"policyName"(?:.*)[.]GUARD_NOT_YET_QUERIED'],
+ [NetworkLogParser.in_guard, '.*"policyName"(?:.*)[.]GUARD.RESPONSE'],
+ [NetworkLogParser.vnf_vserver, '.*"vnf-id"[: ]+"vnf-([^"]+)"'],
+ [NetworkLogParser.vnf_vserver, '.*"vserver-name"[: ]+"vserver-([^"]+)"'],
+ [NetworkLogParser.actor_so, '.*"actor=SO,'],
+ [NetworkLogParser.out_so, timestamp_re + thread_re + '(?:OUT.SO)'],
+ [NetworkLogParser.in_so, timestamp_re + thread_re + '(?:IN.SO)'],
+ [NetworkLogParser.out_in_ueb, timestamp_re + '(?:(?:OUT|IN).UEB)'],
+ ]
+
+ # pattern to match a date and extract the millisecond portion
+ self.datepat = re.compile("^(20[^|]*)[.](\\d+)([^|]+)$")
+
+ # compile the actions into a single pattern
+ netpat = ""
+ for action in self.actions:
+ actpat = action[1]
+
+ # append capture group count + 1 to the end of the action
+ action.append(re.compile(actpat).groups + 1)
+
+ # append the pattern to the combined pattern
+ if netpat != "":
+ netpat += "|"
+ netpat += "(" + actpat + ")"
+
+ # Pattern for network.log files
+ self.netpat = re.compile(netpat)
+
+ def total(self, reqid):
+ """
+ Returns the total network time for a request, or None, if no network
+ time has been determined for the request
+ """
+ if reqid in self.req2total:
+ return self.req2total[reqid]
+
+ else:
+ return None
+
+ def detm_network_times(self):
+ """
+ Scans network log files, computing time differences between requests
+ and their corresponding responses.
+ Updates req2total, accordingly.
+ """
+
+ proc = subprocess.Popen(["bash", "-c",
+ "(ls -rth $LOGDIR/network*zip | xargs -n1 zcat) 2>/dev/null; " +
+ "cat $LOGDIR/network.log"],
+ stdout=subprocess.PIPE)
+
+ netpat = self.netpat
+ actions = self.actions
+
+ for line in proc.stdout:
+ result = netpat.match(line)
+ if not result:
+ continue
+
+ # find the matching action and then apply its method
+ i = 1
+ for action in actions:
+ if result.group(i):
+ method = action[0]
+ method(self, line, result, i)
+ break
+
+ i += action[-1]
+
+ def out_notify(self, line, result, i):
+ """ matched OUT line, which starts with a timestamp """
+ self.tm = self.date_to_ms(result.group(i+1))
+ self.state = "out"
+ logger.debug("out %s", self.tm)
+
+ def out_appc(self, line, result, i):
+ """ matched APPC OUT line, which starts with a timestamp """
+ self.tm = self.date_to_ms(result.group(i+1))
+ self.state = "out-appc"
+ logger.debug("appc out %s", self.tm)
+
+ def in_appc(self, line, result, i):
+ """ matched APPC IN line, which starts with a timestamp """
+ self.tm = self.date_to_ms(result.group(i+1))
+ self.state = "in-appc"
+ logger.debug("appc in %s", self.tm)
+
+ def in_dcae(self, line, result, i):
+ """ matched DCAE_CL_OUTPUT IN line, which starts with a timestamp """
+ self.tm = self.date_to_ms(result.group(i+1))
+ self.state = "in-dcae"
+ logger.debug("dcae in %s", self.tm)
+
+ def out_aai(self, line, result, i):
+ """ matched AAI OUT line, which starts with a timestamp """
+ self.tm = self.date_to_ms(result.group(i+1))
+ self.state = "out-aai"
+ logger.debug("aai out %s", self.tm)
+
+ def in_aai(self, line, result, i):
+ """ matched AAI IN line, which starts with a timestamp """
+ tm = self.date_to_ms(result.group(i+1))
+ self.state = None
+ if len(self.aai_reqid) > 0:
+ reqid = self.aai_reqid.pop()
+ self.update_diff("aai", reqid, tm)
+ logger.debug("aai in %s", tm)
+ else:
+ logger.debug("unmatched aai in")
+
+ def out_vfc(self, line, result, i):
+ """ matched VFC OUT line, which starts with a timestamp """
+ tm = self.date_to_ms(result.group(i+1))
+ tid = result.group(i+2)
+ reqid = result.group(i+3)
+
+ if reqid:
+ self.add_out("vfc", [Data(reqid,2)], self.vfc_thread_data, tid, tm)
+ else:
+ self.update_out("vfc", tid, self.vfc_thread_data, tm)
+
+ self.state = None
+
+ def in_vfc(self, line, result, i):
+ """ matched VFC IN line, which starts with a timestamp """
+ tm = self.date_to_ms(result.group(i+1))
+ tid = result.group(i+2)
+ self.finish_in("vfc", self.vfc_thread_data, tid, tm)
+ self.state = None
+
+ def in_abated(self, line, result, i):
+ """
+ matched ABATED line
+ """
+ if self.state == "in-dcae":
+ self.state = "in-abatement"
+ logger.debug("abatement in %s", self.tm)
+
+ def request_id(self, line, result, i):
+ """ matched a request id field """
+ if self.state == "out":
+ # matched request id in OUT message
+ self.reqid = result.group(i+1)
+ logger.debug("out reqid: %s", self.reqid)
+
+ elif self.state == "out-appc":
+ reqid = result.group(i+1)
+ self.req2begin[reqid] = self.tm
+ logger.debug("out appc reqid: %s", reqid)
+
+ elif self.state == "in-appc":
+ self.update_diff("appc", result.group(i+1), self.tm)
+ self.state = None
+
+ elif self.state == "in-abatement":
+ # matched request id in IN message
+ self.update_diff("abatement", result.group(i+1), self.tm)
+ self.state = None
+
+ def appc_lcm_response(self, line, result, i):
+ """
+ matched APPC.LCM.RESPONSE in notification message.
+ this precedes an ABATEMENT
+ """
+ if self.reqid:
+ self.req2begin[self.reqid] = self.tm
+ logger.debug("await abatement")
+ else:
+ logger.debug("unknown abatement")
+
+ def out_guard(self, line, result, i):
+ """
+ matched GUARD_NOT_YET_QUERIED in notification message.
+ """
+ if self.reqid:
+ self.req2begin[self.reqid] = self.tm
+ logger.debug("await guard")
+ else:
+ logger.debug("unknown guard")
+
+ def in_guard(self, line, result, i):
+ """
+ matched GUARD.RESPONSE in notification message.
+ """
+ self.update_diff("guard", self.reqid, self.tm)
+
+ def vnf_vserver(self, line, result, i):
+ """ matched vnf-id or vserver-name """
+ if self.state == "out-aai":
+ # matched within AAI OUT message
+ reqid = result.group(i+1)
+ self.req2begin[reqid] = self.tm
+ self.aai_reqid.append(reqid)
+ logger.debug("await aai vnf-id")
+
+ def actor_so(self, line, result, i):
+ """ matched actor=SO """
+ self.add_req("so", self.so_actor_data, 1)
+ self.state = None
+
+ def out_so(self, line, result, i):
+ """ matched OUT|SO """
+ tm = self.date_to_ms(result.group(i+1))
+ tid = result.group(i+2)
+ self.add_out("so", self.so_actor_data, self.so_thread_data, tid, tm)
+ self.state = None
+
+ def in_so(self, line, result, i):
+ """ matched IN|SO """
+ tm = self.date_to_ms(result.group(i+1))
+ tid = result.group(i+2)
+ self.finish_in("so", self.so_thread_data, tid, tm)
+ self.state = None
+
+ def out_in_ueb(self, line, result, i):
+ """ matched irrelevant IN/OUT message """
+ logger.debug("clear")
+ self.state = None
+ self.reqid = None
+ self.tm = None
+
+ def date_to_ms(self, dtstr):
+ """
+ converts a date string to milliseconds
+ """
+ result = self.datepat.match(dtstr)
+ tm = result.group(1) + result.group(3)
+ tm = time.strptime(tm, "%Y-%m-%dT%H:%M:%S+00:00")
+ tm = calendar.timegm(tm)
+ tm = tm * 1000 + int(result.group(2))
+ return tm
+
+ def update_diff(self, reqtype, reqid, tend):
+ """
+ Updates req2total and req2begin, based on the total time used by the
+ given request
+ """
+ logger.debug("reqid #2: %s", reqid)
+
+ if reqid in self.req2begin:
+ logger.debug("matched %s", reqid)
+ diff = tend - self.req2begin[reqid]
+
+ if reqid in self.req2total:
+ self.req2total[reqid] += diff
+ else:
+ self.req2total[reqid] = diff
+
+ logger.debug("%s %s total %s", reqtype, diff, self.req2total[reqid])
+ del self.req2begin[reqid]
+
+ else:
+ logger.debug("unmatched %s", reqid)
+
+ def add_req(self, actor, actor_data, nexpected):
+ """
+ Adds request data for a particular actor
+ """
+ if self.state == "out" and self.reqid:
+ # matched action=<actor> in POLICY OUT message
+ actor_data.append(Data(self.reqid, nexpected))
+ logger.debug("%s actor", actor)
+ else:
+ logger.debug("unmatched %s actor", actor)
+
+ def add_out(self, actor, actor_data, thread_data, tid, tm):
+ """
+ Adds data associated with the OUT message for an actor
+ """
+ if tid:
+ if len(actor_data) > 0:
+ d = actor_data.pop()
+ d.begin = tm
+ thread_data[tid] = d
+ logger.debug("%s out %s %s begin %s", actor, d.reqid, tid, tm)
+ else:
+ logger.debug("unmatched %s out %s", actor, tid)
+ else:
+ logger.debug("unmatched %s out", actor)
+
+ def update_out(self, actor, tid, thread_data, tm):
+ """
+ Updates data associated with the OUT message for an actor
+ """
+ if tid:
+ if tid in thread_data:
+ d = thread_data[tid]
+ d.begin = tm
+ logger.debug("%s out %s begin %s (repeat) %s", actor, d.reqid, tid, tm)
+ else:
+ logger.debug("unmatched %s out (repeat) %s", actor, tid)
+ else:
+ logger.debug("unmatched %s out (repeat)", actor)
+
+ def finish_in(self, actor, thread_data, tid, tm):
+ """
+ Finishes data associated with the IN message for an actor
+ """
+ if tid:
+ if tid in thread_data:
+ d = thread_data[tid]
+ if d.begin:
+ self.req2begin[d.reqid] = d.begin
+ self.update_diff(actor, d.reqid, tm)
+ else:
+ logger.debug("unmatched %s in begin %s", actor, tid)
+
+ if d.complete():
+ del thread_data[tid]
+ logger.debug("removed %s in %s", actor, tid)
+ else:
+ logger.debug("unmatched %s in %s", actor, tid)
+ else:
+ logger.debug("unmatched %s in", actor)
+
+
+def gen_audit_times(net_log, event_type, grep_cmd):
+ """
+ Scans audit log files and reports average elapsed time
+ """
+ global logger
+
+ # used to compute averages for requests having matching network times
+ mat_total = 0
+ mat_count = 0
+
+ # used to compute averages for requests that are unmatched
+ un_total = 0
+ un_count = 0
+
+ proc = subprocess.Popen(["bash", "-c",
+ "((ls -rth $LOGDIR/audit*zip | xargs -n1 zgrep " + event_type +
+ ") 2>/dev/null; " +
+ "grep " + event_type + " $LOGDIR/audit.log) " +
+ "| grep COMPLETE " +
+ grep_cmd +
+ "| awk -F'|' '{ print \$1, \$7}' " +
+ "| tail -10000"],
+ stdout=subprocess.PIPE)
+
+ for line in proc.stdout:
+ (reqid,elapsed) = line.split(" ")
+
+ total = net_log.total(reqid)
+ if total:
+ logger.debug("audit reqid %s: %s %s", reqid, elapsed, total)
+ mat_total += int(elapsed) - total
+ mat_count += 1
+
+ else:
+ logger.debug("audit unmatched reqid %s: %s", reqid, elapsed)
+ un_total += int(elapsed)
+ un_count += 1
+
+ print "Elapsed time for", event_type, ":"
+ if mat_count > 0:
+ print " matched", mat_count, "samples, average", mat_total/mat_count, "ms"
+ if un_count > 0:
+ print " unmatched", un_count, "samples, average", un_total/un_count, "ms"
+
+ print
+
+
+# scan all network log files, recording network times for each request id
+nlp = NetworkLogParser()
+nlp.detm_network_times()
+
+# scan audit log files and report elapsed time for each ONSET type
+gen_audit_times(nlp, "vCPE", '| grep generic-vnf.vnf-id')
+gen_audit_times(nlp, "vFirewall", '| grep generic-vnf.vnf-id')
+gen_audit_times(nlp, "vDNS", '| grep vserver.vserver-name')
+gen_audit_times(nlp, "VOLTE", '')
+
+PYTHON
diff --git a/testsuites/performance/src/main/resources/amsterdam/policyMTPerformanceTestPlan.jmx b/testsuites/performance/src/main/resources/amsterdam/policyMTPerformanceTestPlan.jmx
new file mode 100644
index 000000000..660e468f5
--- /dev/null
+++ b/testsuites/performance/src/main/resources/amsterdam/policyMTPerformanceTestPlan.jmx
@@ -0,0 +1,1393 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ============LICENSE_START=======================================================
+ performance
+ ================================================================================
+ Copyright (C) 2018 AT&T. All rights reserved.
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ============LICENSE_END=========================================================
+ -->
+<jmeterTestPlan version="1.2" properties="3.1" jmeter="3.1 r1770033">
+ <hashTree>
+ <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
+ <stringProp name="TestPlan.comments"></stringProp>
+ <boolProp name="TestPlan.functional_mode">false</boolProp>
+ <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
+ <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments"/>
+ </elementProp>
+ <stringProp name="TestPlan.user_define_classpath"></stringProp>
+ </TestPlan>
+ <hashTree>
+ <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="set test params" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="threads" elementType="Argument">
+ <stringProp name="Argument.name">threads</stringProp>
+ <stringProp name="Argument.value">10</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="loops" elementType="Argument">
+ <stringProp name="Argument.name">loops</stringProp>
+ <stringProp name="Argument.value">1000</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="rampUpSec" elementType="Argument">
+ <stringProp name="Argument.name">rampUpSec</stringProp>
+ <stringProp name="Argument.value">10</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="failures" elementType="Argument">
+ <stringProp name="Argument.name">failures</stringProp>
+ <stringProp name="Argument.value">false</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="vcpe" elementType="Argument">
+ <stringProp name="Argument.name">vcpe</stringProp>
+ <stringProp name="Argument.value">true</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="vdns" elementType="Argument">
+ <stringProp name="Argument.name">vdns</stringProp>
+ <stringProp name="Argument.value">true</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="vfw" elementType="Argument">
+ <stringProp name="Argument.name">vfw</stringProp>
+ <stringProp name="Argument.value">true</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="volte" elementType="Argument">
+ <stringProp name="Argument.name">volte</stringProp>
+ <stringProp name="Argument.value">true</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="pdpdServer" elementType="Argument">
+ <stringProp name="Argument.name">pdpdServer</stringProp>
+ <stringProp name="Argument.value">dev-drools-0</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="uebServer" elementType="Argument">
+ <stringProp name="Argument.name">uebServer</stringProp>
+ <stringProp name="Argument.value">message-router</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="notifyTopic" elementType="Argument">
+ <stringProp name="Argument.name">notifyTopic</stringProp>
+ <stringProp name="Argument.value">POLICY-CL-MGT</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="eventTopic" elementType="Argument">
+ <stringProp name="Argument.name">eventTopic</stringProp>
+ <stringProp name="Argument.value">unauthenticated.DCAE_CL_OUTPUT</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="appcRespTopic" elementType="Argument">
+ <stringProp name="Argument.name">appcRespTopic</stringProp>
+ <stringProp name="Argument.value">APPC-LCM-WRITE</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="appcRespTopic2" elementType="Argument">
+ <stringProp name="Argument.name">appcRespTopic2</stringProp>
+ <stringProp name="Argument.value">APPC-CL</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="vCPEName" elementType="Argument">
+ <stringProp name="Argument.name">vCPEName</stringProp>
+ <stringProp name="Argument.value">ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="vDNSName" elementType="Argument">
+ <stringProp name="Argument.name">vDNSName</stringProp>
+ <stringProp name="Argument.value">ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="vFWName" elementType="Argument">
+ <stringProp name="Argument.name">vFWName</stringProp>
+ <stringProp name="Argument.value">ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="VOLTEName" elementType="Argument">
+ <stringProp name="Argument.name">VOLTEName</stringProp>
+ <stringProp name="Argument.value">ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </Arguments>
+ <hashTree/>
+ <AuthManager guiclass="AuthPanel" testclass="AuthManager" testname="HTTP Authorization Manager - PDPD" enabled="true">
+ <collectionProp name="AuthManager.auth_list">
+ <elementProp name="" elementType="Authorization">
+ <stringProp name="Authorization.url">http://${pdpdServer}:9696/</stringProp>
+ <stringProp name="Authorization.username">@1b3rt</stringProp>
+ <stringProp name="Authorization.password">31nst31n</stringProp>
+ <stringProp name="Authorization.domain"></stringProp>
+ <stringProp name="Authorization.realm"></stringProp>
+ </elementProp>
+ </collectionProp>
+ </AuthManager>
+ <hashTree/>
+ <ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults - PDPD" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments"/>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${pdpdServer}</stringProp>
+ <stringProp name="HTTPSampler.port">9696</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol">http</stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path"></stringProp>
+ <stringProp name="HTTPSampler.concurrentPool">6</stringProp>
+ </ConfigTestElement>
+ <hashTree/>
+ <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
+ <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
+ <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
+ <boolProp name="LoopController.continue_forever">false</boolProp>
+ <stringProp name="LoopController.loops">1</stringProp>
+ </elementProp>
+ <stringProp name="ThreadGroup.num_threads">${threads}</stringProp>
+ <stringProp name="ThreadGroup.ramp_time">${rampUpSec}</stringProp>
+ <longProp name="ThreadGroup.start_time">1525540233000</longProp>
+ <longProp name="ThreadGroup.end_time">1525540233000</longProp>
+ <boolProp name="ThreadGroup.scheduler">false</boolProp>
+ <stringProp name="ThreadGroup.duration"></stringProp>
+ <stringProp name="ThreadGroup.delay"></stringProp>
+ </ThreadGroup>
+ <hashTree>
+ <Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="declare request params" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="requestId" elementType="Argument">
+ <stringProp name="Argument.name">requestId</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="vnfId" elementType="Argument">
+ <stringProp name="Argument.name">vnfId</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ <elementProp name="consumerGroup" elementType="Argument">
+ <stringProp name="Argument.name">consumerGroup</stringProp>
+ <stringProp name="Argument.value"></stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </Arguments>
+ <hashTree/>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Establish consumer group with DMaaP" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments"/>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1?timeout=5000&amp;limit=1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <JSR223PreProcessor guiclass="TestBeanGUI" testclass="JSR223PreProcessor" testname="generate thread params" enabled="true">
+ <stringProp name="scriptLanguage">groovy</stringProp>
+ <stringProp name="parameters"></stringProp>
+ <stringProp name="filename"></stringProp>
+ <stringProp name="cacheKey"></stringProp>
+ <stringProp name="script">import java.util.UUID;
+vars.put(&quot;consumerGroup&quot;, &quot;policy-${__machineName}-${__threadNum}&quot;);
+</stringProp>
+ </JSR223PreProcessor>
+ <hashTree/>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert poll succeeded" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="2829691">\[.*</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">1</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
+ <boolProp name="LoopController.continue_forever">true</boolProp>
+ <stringProp name="LoopController.loops">${loops}</stringProp>
+ </LoopController>
+ <hashTree>
+ <IfController guiclass="IfControllerPanel" testclass="IfController" testname="vCPE Use Case" enabled="true">
+ <stringProp name="IfController.condition">${vcpe}</stringProp>
+ <boolProp name="IfController.evaluateAll">false</boolProp>
+ <boolProp name="IfController.useExpression">true</boolProp>
+ </IfController>
+ <hashTree>
+ <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="vCPE SUCCESS Use Case" enabled="true"/>
+ <hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ONSET" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;closedLoopControlName&quot;: &quot;${vCPEName}&quot;,&#xd;
+ &quot;closedLoopAlarmStart&quot;: 1463679805324,&#xd;
+ &quot;closedLoopEventClient&quot;: &quot;DCAE_INSTANCE_ID.dcae-tca&quot;,&#xd;
+ &quot;closedLoopEventStatus&quot;: &quot;ONSET&quot;,&#xd;
+ &quot;requestID&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;target_type&quot;: &quot;VNF&quot;,&#xd;
+ &quot;target&quot;: &quot;generic-vnf.vnf-id&quot;,&#xd;
+ &quot;AAI&quot;: {&#xd;
+ &quot;vserver.is-closed-loop-disabled&quot;: &quot;false&quot;,&#xd;
+ &quot;generic-vnf.vnf-id&quot;: &quot;${vnfId}&quot;&#xd;
+ },&#xd;
+ &quot;from&quot;: &quot;DCAE&quot;,&#xd;
+ &quot;version&quot;: &quot;1.0.2&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${eventTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <JSR223PreProcessor guiclass="TestBeanGUI" testclass="JSR223PreProcessor" testname="generate request params" enabled="true">
+ <stringProp name="scriptLanguage">groovy</stringProp>
+ <stringProp name="parameters"></stringProp>
+ <stringProp name="filename"></stringProp>
+ <stringProp name="cacheKey"></stringProp>
+ <stringProp name="script">import java.util.UUID;
+String reqid = UUID.randomUUID().toString();
+vars.put(&quot;requestId&quot;, reqid);
+vars.put(&quot;vnfId&quot;, &quot;vnf-&quot;+reqid);
+</stringProp>
+ </JSR223PreProcessor>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await APPC begin" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;EndsWith&quot;, &quot;string&quot;:&quot;${policyName}&quot;, &quot;value&quot;:&quot;GUARD_PERMITTED&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert start notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="APPC Response" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;body&quot;: {&#xd;
+ &quot;output&quot;: {&#xd;
+ &quot;common-header&quot;: {&#xd;
+ &quot;timestamp&quot;: &quot;2017-08-25T21:06:23.037Z&quot;,&#xd;
+ &quot;api-ver&quot;: &quot;5.00&quot;,&#xd;
+ &quot;originator-id&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;request-id&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;sub-request-id&quot;: &quot;1&quot;,&#xd;
+ &quot;flags&quot;: {}&#xd;
+ },&#xd;
+ &quot;status&quot;: {&#xd;
+ &quot;code&quot;: 400,&#xd;
+ &quot;message&quot;: &quot;Restart Successful&quot;&#xd;
+ }&#xd;
+ }&#xd;
+ },&#xd;
+ &quot;version&quot;: &quot;2.0&quot;,&#xd;
+ &quot;rpc-name&quot;: &quot;restart&quot;,&#xd;
+ &quot;correlation-id&quot;: &quot;664be3d2-6c12-4f4b-a3e7-c349acced200-1&quot;,&#xd;
+ &quot;type&quot;: &quot;response&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${appcRespTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree/>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await APPC finish" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;EndsWith&quot;, &quot;string&quot;:&quot;${policyName}&quot;, &quot;value&quot;:&quot;APPC.LCM.RESPONSE&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert finish notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ABATEMENT" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;closedLoopControlName&quot;: &quot;${vCPEName}&quot;,&#xd;
+ &quot;closedLoopAlarmStart&quot;: 1463679805324,&#xd;
+ &quot;closedLoopAlarmEnd&quot;: 1463699805324,&#xd;
+ &quot;closedLoopEventClient&quot;: &quot;DCAE_INSTANCE_ID.dcae-tca&quot;,&#xd;
+ &quot;closedLoopEventStatus&quot;: &quot;ABATED&quot;,&#xd;
+ &quot;requestID&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;target_type&quot;: &quot;VNF&quot;,&#xd;
+ &quot;target&quot;: &quot;generic-vnf.vnf-id&quot;,&#xd;
+ &quot;AAI&quot;: {&#xd;
+ &quot;vserver.is-closed-loop-disabled&quot;: &quot;false&quot;,&#xd;
+ &quot;generic-vnf.vnf-id&quot;: &quot;${vnfId}&quot;&#xd;
+ },&#xd;
+ &quot;from&quot;: &quot;DCAE&quot;,&#xd;
+ &quot;version&quot;: &quot;1.0.2&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${eventTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree/>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await FINAL" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;notification&quot;, &quot;value&quot;:&quot;FINAL: SUCCESS&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert final notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ </hashTree>
+ <IfController guiclass="IfControllerPanel" testclass="IfController" testname="vCPE FAILURE Use Case" enabled="true">
+ <stringProp name="IfController.condition">${failures}</stringProp>
+ <boolProp name="IfController.evaluateAll">false</boolProp>
+ <boolProp name="IfController.useExpression">true</boolProp>
+ </IfController>
+ <hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ONSET" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;closedLoopControlName&quot;: &quot;${vCPEName}&quot;,&#xd;
+ &quot;closedLoopAlarmStart&quot;: 1463679805324,&#xd;
+ &quot;closedLoopEventClient&quot;: &quot;DCAE_INSTANCE_ID.dcae-tca&quot;,&#xd;
+ &quot;closedLoopEventStatus&quot;: &quot;ONSET&quot;,&#xd;
+ &quot;requestID&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;target_type&quot;: &quot;VNF&quot;,&#xd;
+ &quot;target&quot;: &quot;generic-vnf.vnf-id&quot;,&#xd;
+ &quot;AAI&quot;: {&#xd;
+ &quot;vserver.is-closed-loop-disabled&quot;: &quot;false&quot;,&#xd;
+ &quot;generic-vnf.vnf-id&quot;: &quot;${vnfId}&quot;&#xd;
+ },&#xd;
+ &quot;from&quot;: &quot;DCAE&quot;,&#xd;
+ &quot;version&quot;: &quot;1.0.2&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${eventTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <JSR223PreProcessor guiclass="TestBeanGUI" testclass="JSR223PreProcessor" testname="generate request params" enabled="true">
+ <stringProp name="scriptLanguage">groovy</stringProp>
+ <stringProp name="parameters"></stringProp>
+ <stringProp name="filename"></stringProp>
+ <stringProp name="cacheKey"></stringProp>
+ <stringProp name="script">import java.util.UUID;
+String reqid = UUID.randomUUID().toString();
+vars.put(&quot;requestId&quot;, reqid);
+vars.put(&quot;vnfId&quot;, &quot;vnf-&quot;+reqid);
+</stringProp>
+ </JSR223PreProcessor>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await APPC begin" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;EndsWith&quot;, &quot;string&quot;:&quot;${policyName}&quot;, &quot;value&quot;:&quot;GUARD_PERMITTED&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert start notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="APPC Response" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;body&quot;: {&#xd;
+ &quot;output&quot;: {&#xd;
+ &quot;common-header&quot;: {&#xd;
+ &quot;timestamp&quot;: &quot;2017-08-25T21:06:23.037Z&quot;,&#xd;
+ &quot;api-ver&quot;: &quot;5.00&quot;,&#xd;
+ &quot;originator-id&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;request-id&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;sub-request-id&quot;: &quot;1&quot;,&#xd;
+ &quot;flags&quot;: {}&#xd;
+ },&#xd;
+ &quot;status&quot;: {&#xd;
+ &quot;code&quot;: 500,&#xd;
+ &quot;message&quot;: &quot;Restart Failed&quot;&#xd;
+ }&#xd;
+ }&#xd;
+ },&#xd;
+ &quot;version&quot;: &quot;2.0&quot;,&#xd;
+ &quot;rpc-name&quot;: &quot;restart&quot;,&#xd;
+ &quot;correlation-id&quot;: &quot;664be3d2-6c12-4f4b-a3e7-c349acced200-1&quot;,&#xd;
+ &quot;type&quot;: &quot;response&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${appcRespTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree/>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await FINAL" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;notification&quot;, &quot;value&quot;:&quot;FINAL: FAILURE&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert final notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ </hashTree>
+ </hashTree>
+ <IfController guiclass="IfControllerPanel" testclass="IfController" testname="vDNS Use Case" enabled="true">
+ <stringProp name="IfController.condition">${vdns}</stringProp>
+ <boolProp name="IfController.evaluateAll">false</boolProp>
+ <boolProp name="IfController.useExpression">true</boolProp>
+ </IfController>
+ <hashTree>
+ <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="vDNS SUCCESS Use Case" enabled="true"/>
+ <hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ONSET" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;closedLoopControlName&quot;: &quot;${vDNSName}&quot;,&#xd;
+ &quot;closedLoopAlarmStart&quot;: 1484677482204798,&#xd;
+ &quot;closedLoopEventClient&quot;: &quot;DCAE_INSTANCE_ID.dcae-tca&quot;,&#xd;
+ &quot;closedLoopEventStatus&quot;: &quot;ONSET&quot;,&#xd;
+ &quot;requestID&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;target_type&quot;: &quot;VNF&quot;,&#xd;
+ &quot;target&quot;: &quot;vserver.vserver-name&quot;,&#xd;
+ &quot;AAI&quot;: {&#xd;
+ &quot;vserver.is-closed-loop-disabled&quot;: &quot;false&quot;,&#xd;
+ &quot;vserver.vserver-name&quot;: &quot;${vserverName}&quot;&#xd;
+ }, &#xd;
+ &quot;from&quot;: &quot;DCAE&quot;,&#xd;
+ &quot;version&quot;: &quot;1.0.2&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${eventTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <JSR223PreProcessor guiclass="TestBeanGUI" testclass="JSR223PreProcessor" testname="generate request params" enabled="true">
+ <stringProp name="scriptLanguage">groovy</stringProp>
+ <stringProp name="parameters"></stringProp>
+ <stringProp name="filename"></stringProp>
+ <stringProp name="cacheKey"></stringProp>
+ <stringProp name="script">import java.util.UUID;
+String reqid = UUID.randomUUID().toString();
+vars.put(&quot;requestId&quot;, reqid);
+vars.put(&quot;vserverName&quot;, &quot;vserver-&quot;+reqid);
+</stringProp>
+ </JSR223PreProcessor>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await FINAL" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;notification&quot;, &quot;value&quot;:&quot;FINAL: SUCCESS&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert final notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ </hashTree>
+ </hashTree>
+ <IfController guiclass="IfControllerPanel" testclass="IfController" testname="vFW Use Case" enabled="true">
+ <stringProp name="IfController.condition">${vfw}</stringProp>
+ <boolProp name="IfController.evaluateAll">false</boolProp>
+ <boolProp name="IfController.useExpression">true</boolProp>
+ </IfController>
+ <hashTree>
+ <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="vFW SUCCESS Use Case" enabled="true"/>
+ <hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ONSET" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;closedLoopControlName&quot;: &quot;${vFWName}&quot;,&#xd;
+ &quot;closedLoopAlarmStart&quot;: 1463679805324,&#xd;
+ &quot;closedLoopEventClient&quot;: &quot;microservice.stringmatcher&quot;,&#xd;
+ &quot;closedLoopEventStatus&quot;: &quot;ONSET&quot;,&#xd;
+ &quot;requestID&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;target_type&quot;: &quot;VNF&quot;,&#xd;
+ &quot;target&quot;: &quot;generic-vnf.vnf-id&quot;,&#xd;
+ &quot;AAI&quot;: {&#xd;
+ &quot;generic-vnf.is-closed-loop-disabled&quot;: &quot;false&quot;,&#xd;
+ &quot;generic-vnf.vnf-id&quot;: &quot;${vnfId}&quot;&#xd;
+ },&#xd;
+ &quot;from&quot;: &quot;DCAE&quot;,&#xd;
+ &quot;version&quot;: &quot;1.0.2&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${eventTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <JSR223PreProcessor guiclass="TestBeanGUI" testclass="JSR223PreProcessor" testname="generate request params" enabled="true">
+ <stringProp name="scriptLanguage">groovy</stringProp>
+ <stringProp name="parameters"></stringProp>
+ <stringProp name="filename"></stringProp>
+ <stringProp name="cacheKey"></stringProp>
+ <stringProp name="script">import java.util.UUID;
+String reqid = UUID.randomUUID().toString();
+vars.put(&quot;requestId&quot;, reqid);
+vars.put(&quot;vnfId&quot;, &quot;vnf-&quot;+reqid);
+</stringProp>
+ </JSR223PreProcessor>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await APPC begin" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;EndsWith&quot;, &quot;string&quot;:&quot;${policyName}&quot;, &quot;value&quot;:&quot;GUARD_PERMITTED&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert start notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="APPC Response" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;CommonHeader&quot;: {&#xd;
+ &quot;TimeStamp&quot;: 1506051879001,&#xd;
+ &quot;APIver&quot;: &quot;1.01&quot;,&#xd;
+ &quot;RequestID&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;SubRequestID&quot;: &quot;1&quot;,&#xd;
+ &quot;RequestTrack&quot;: [],&#xd;
+ &quot;Flags&quot;: []&#xd;
+ },&#xd;
+ &quot;Status&quot;: {&#xd;
+ &quot;Code&quot;: 400,&#xd;
+ &quot;Value&quot;: &quot;SUCCESS&quot;&#xd;
+ },&#xd;
+ &quot;Payload&quot;: {&#xd;
+ &quot;generic-vnf.vnf-id&quot;: &quot;${vnfId}&quot;,&#xd;
+ &quot;pg-streams&quot;: {&#xd;
+ &quot;pg-stream&quot;: [&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp1&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ },&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp2&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ },&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp3&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ },&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp4&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ },&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp5&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ }&#xd;
+ ]&#xd;
+ }&#xd;
+ }&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${appcRespTopic2}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree/>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await FINAL" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;notification&quot;, &quot;value&quot;:&quot;FINAL: SUCCESS&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert final notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ </hashTree>
+ <IfController guiclass="IfControllerPanel" testclass="IfController" testname="vFW FAILURE Use Case" enabled="true">
+ <stringProp name="IfController.condition">${failures}</stringProp>
+ <boolProp name="IfController.evaluateAll">false</boolProp>
+ <boolProp name="IfController.useExpression">true</boolProp>
+ </IfController>
+ <hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ONSET" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;closedLoopControlName&quot;: &quot;${vFWName}&quot;,&#xd;
+ &quot;closedLoopAlarmStart&quot;: 1463679805324,&#xd;
+ &quot;closedLoopEventClient&quot;: &quot;microservice.stringmatcher&quot;,&#xd;
+ &quot;closedLoopEventStatus&quot;: &quot;ONSET&quot;,&#xd;
+ &quot;requestID&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;target_type&quot;: &quot;VNF&quot;,&#xd;
+ &quot;target&quot;: &quot;generic-vnf.vnf-id&quot;,&#xd;
+ &quot;AAI&quot;: {&#xd;
+ &quot;generic-vnf.is-closed-loop-disabled&quot;: &quot;false&quot;,&#xd;
+ &quot;generic-vnf.vnf-id&quot;: &quot;${vnfId}&quot;&#xd;
+ },&#xd;
+ &quot;from&quot;: &quot;DCAE&quot;,&#xd;
+ &quot;version&quot;: &quot;1.0.2&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${eventTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <JSR223PreProcessor guiclass="TestBeanGUI" testclass="JSR223PreProcessor" testname="generate request params" enabled="true">
+ <stringProp name="scriptLanguage">groovy</stringProp>
+ <stringProp name="parameters"></stringProp>
+ <stringProp name="filename"></stringProp>
+ <stringProp name="cacheKey"></stringProp>
+ <stringProp name="script">import java.util.UUID;
+String reqid = UUID.randomUUID().toString();
+vars.put(&quot;requestId&quot;, reqid);
+vars.put(&quot;vnfId&quot;, &quot;vnf-&quot;+reqid);
+</stringProp>
+ </JSR223PreProcessor>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await APPC begin" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;EndsWith&quot;, &quot;string&quot;:&quot;${policyName}&quot;, &quot;value&quot;:&quot;GUARD_PERMITTED&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert start notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="APPC Response" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{&#xd;
+ &quot;CommonHeader&quot;: {&#xd;
+ &quot;TimeStamp&quot;: 1506051879001,&#xd;
+ &quot;APIver&quot;: &quot;1.01&quot;,&#xd;
+ &quot;RequestID&quot;: &quot;${requestId}&quot;,&#xd;
+ &quot;SubRequestID&quot;: &quot;1&quot;,&#xd;
+ &quot;RequestTrack&quot;: [],&#xd;
+ &quot;Flags&quot;: []&#xd;
+ },&#xd;
+ &quot;Status&quot;: {&#xd;
+ &quot;Code&quot;: 500,&#xd;
+ &quot;Value&quot;: &quot;FAILED&quot;&#xd;
+ },&#xd;
+ &quot;Payload&quot;: {&#xd;
+ &quot;generic-vnf.vnf-id&quot;: &quot;${vnfId}&quot;,&#xd;
+ &quot;pg-streams&quot;: {&#xd;
+ &quot;pg-stream&quot;: [&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp1&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ },&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp2&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ },&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp3&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ },&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp4&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ },&#xd;
+ {&#xd;
+ &quot;id&quot;: &quot;fw_udp5&quot;,&#xd;
+ &quot;is-enabled&quot;: &quot;true&quot;&#xd;
+ }&#xd;
+ ]&#xd;
+ }&#xd;
+ }&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${appcRespTopic2}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree/>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await FINAL" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;notification&quot;, &quot;value&quot;:&quot;FINAL: FAILURE&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert final notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ </hashTree>
+ </hashTree>
+ <IfController guiclass="IfControllerPanel" testclass="IfController" testname="VoLTE Use Case" enabled="true">
+ <stringProp name="IfController.condition">${volte}</stringProp>
+ <boolProp name="IfController.evaluateAll">false</boolProp>
+ <boolProp name="IfController.useExpression">true</boolProp>
+ </IfController>
+ <hashTree>
+ <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="VoLTE SUCCESS Use Case" enabled="true"/>
+ <hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="ONSET" enabled="true">
+ <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">false</boolProp>
+ <stringProp name="Argument.value">{ &#xd;
+ &quot;closedLoopControlName&quot;:&quot;${VOLTEName}&quot;,&#xd;
+ &quot;closedLoopAlarmStart&quot;:1484677482204798,&#xd;
+ &quot;closedLoopEventClient&quot;:&quot;DCAE.HolmesInstance&quot;,&#xd;
+ &quot;closedLoopEventStatus&quot;:&quot;ONSET&quot;,&#xd;
+ &quot;requestID&quot;:&quot;${requestId}&quot;,&#xd;
+ &quot;target_type&quot;:&quot;VM&quot;,&#xd;
+ &quot;target&quot;:&quot;vserver.vserver-name&quot;,&#xd;
+ &quot;AAI&quot;:{ &#xd;
+ &quot;vserver.is-closed-loop-disabled&quot;:&quot;false&quot;,&#xd;
+ &quot;vserver.vserver-name&quot;:&quot;${vserverName}&quot;,&#xd;
+ &quot;service-instance.service-instance-id&quot;:&quot;vserver-name-${serviceInstanceId}&quot;,&#xd;
+ &quot;generic-vnf.vnf-id&quot;:&quot;vnf-id-${serviceInstanceId}&quot;,&#xd;
+ &quot;generic-vnf.vnf-name&quot;:&quot;vnf-name-${serviceInstanceId}&quot;&#xd;
+ },&#xd;
+ &quot;from&quot;:&quot;DCAE&quot;,&#xd;
+ &quot;version&quot;:&quot;1.0.2&quot;&#xd;
+}&#xd;
+</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain"></stringProp>
+ <stringProp name="HTTPSampler.port"></stringProp>
+ <stringProp name="HTTPSampler.connect_timeout"></stringProp>
+ <stringProp name="HTTPSampler.response_timeout"></stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">policy/pdp/engine/topics/sources/ueb/${eventTopic}/events</stringProp>
+ <stringProp name="HTTPSampler.method">PUT</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <JSR223PreProcessor guiclass="TestBeanGUI" testclass="JSR223PreProcessor" testname="generate request params" enabled="true">
+ <stringProp name="scriptLanguage">groovy</stringProp>
+ <stringProp name="parameters"></stringProp>
+ <stringProp name="filename"></stringProp>
+ <stringProp name="cacheKey"></stringProp>
+ <stringProp name="script">import java.util.UUID;
+String reqid = UUID.randomUUID().toString();
+vars.put(&quot;requestId&quot;, reqid);
+vars.put(&quot;vserverName&quot;, &quot;vserver-&quot;+reqid);
+vars.put(&quot;serviceInstanceId&quot;, &quot;ssi-&quot;+reqid);
+</stringProp>
+ </JSR223PreProcessor>
+ <hashTree/>
+ </hashTree>
+ <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Await FINAL" enabled="true">
+ <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
+ <collectionProp name="Arguments.arguments">
+ <elementProp name="filter" elementType="HTTPArgument">
+ <boolProp name="HTTPArgument.always_encode">true</boolProp>
+ <stringProp name="Argument.value">{&quot;class&quot;:&quot;And&quot;, &quot;filters&quot;: [ { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;requestId&quot;, &quot;value&quot;:&quot;${requestId}&quot; }, { &quot;class&quot;:&quot;Equals&quot;, &quot;field&quot;:&quot;notification&quot;, &quot;value&quot;:&quot;FINAL: SUCCESS&quot; }]}</stringProp>
+ <stringProp name="Argument.metadata">=</stringProp>
+ <boolProp name="HTTPArgument.use_equals">true</boolProp>
+ <stringProp name="Argument.name">filter</stringProp>
+ </elementProp>
+ </collectionProp>
+ </elementProp>
+ <stringProp name="HTTPSampler.domain">${uebServer}</stringProp>
+ <stringProp name="HTTPSampler.port">3904</stringProp>
+ <stringProp name="HTTPSampler.connect_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.response_timeout">20000</stringProp>
+ <stringProp name="HTTPSampler.protocol"></stringProp>
+ <stringProp name="HTTPSampler.contentEncoding"></stringProp>
+ <stringProp name="HTTPSampler.path">/events/${notifyTopic}/${consumerGroup}/1</stringProp>
+ <stringProp name="HTTPSampler.method">GET</stringProp>
+ <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
+ <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
+ <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
+ <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
+ <boolProp name="HTTPSampler.monitor">false</boolProp>
+ <stringProp name="HTTPSampler.embedded_url_re"></stringProp>
+ </HTTPSamplerProxy>
+ <hashTree>
+ <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="assert final notification" enabled="true">
+ <collectionProp name="Asserion.test_strings">
+ <stringProp name="595233003">notification</stringProp>
+ </collectionProp>
+ <stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
+ <boolProp name="Assertion.assume_success">false</boolProp>
+ <intProp name="Assertion.test_type">16</intProp>
+ </ResponseAssertion>
+ <hashTree/>
+ </hashTree>
+ </hashTree>
+ </hashTree>
+ </hashTree>
+ </hashTree>
+ <ResultCollector guiclass="TableVisualizer" testclass="ResultCollector" testname="View Results in Table" enabled="true">
+ <boolProp name="ResultCollector.error_logging">false</boolProp>
+ <objProp>
+ <name>saveConfig</name>
+ <value class="SampleSaveConfiguration">
+ <time>true</time>
+ <latency>true</latency>
+ <timestamp>true</timestamp>
+ <success>true</success>
+ <label>true</label>
+ <code>true</code>
+ <message>true</message>
+ <threadName>true</threadName>
+ <dataType>true</dataType>
+ <encoding>false</encoding>
+ <assertions>true</assertions>
+ <subresults>true</subresults>
+ <responseData>false</responseData>
+ <samplerData>false</samplerData>
+ <xml>false</xml>
+ <fieldNames>true</fieldNames>
+ <responseHeaders>false</responseHeaders>
+ <requestHeaders>false</requestHeaders>
+ <responseDataOnError>false</responseDataOnError>
+ <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+ <assertionsResultsToSave>0</assertionsResultsToSave>
+ <bytes>true</bytes>
+ <sentBytes>true</sentBytes>
+ <threadCounts>true</threadCounts>
+ <idleTime>true</idleTime>
+ <connectTime>true</connectTime>
+ </value>
+ </objProp>
+ <stringProp name="filename"></stringProp>
+ </ResultCollector>
+ <hashTree/>
+ <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">
+ <boolProp name="ResultCollector.error_logging">false</boolProp>
+ <objProp>
+ <name>saveConfig</name>
+ <value class="SampleSaveConfiguration">
+ <time>true</time>
+ <latency>true</latency>
+ <timestamp>true</timestamp>
+ <success>true</success>
+ <label>true</label>
+ <code>true</code>
+ <message>true</message>
+ <threadName>true</threadName>
+ <dataType>true</dataType>
+ <encoding>false</encoding>
+ <assertions>true</assertions>
+ <subresults>true</subresults>
+ <responseData>false</responseData>
+ <samplerData>false</samplerData>
+ <xml>false</xml>
+ <fieldNames>true</fieldNames>
+ <responseHeaders>false</responseHeaders>
+ <requestHeaders>false</requestHeaders>
+ <responseDataOnError>false</responseDataOnError>
+ <saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
+ <assertionsResultsToSave>0</assertionsResultsToSave>
+ <bytes>true</bytes>
+ <sentBytes>true</sentBytes>
+ <threadCounts>true</threadCounts>
+ <idleTime>true</idleTime>
+ <connectTime>true</connectTime>
+ </value>
+ </objProp>
+ <stringProp name="filename"></stringProp>
+ </ResultCollector>
+ <hashTree/>
+ </hashTree>
+ </hashTree>
+</jmeterTestPlan>
diff --git a/testsuites/pom.xml b/testsuites/pom.xml
index 842aa00e8..ceccba220 100644
--- a/testsuites/pom.xml
+++ b/testsuites/pom.xml
@@ -3,6 +3,7 @@
testsuites
================================================================================
Copyright (C) 2018 Ericsson. All rights reserved.
+ Modifications Copyright (C) 2018 AT&T. All rights reserved.
================================================================================
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -29,5 +30,6 @@
<packaging>pom</packaging>
<modules>
<module>stability</module>
+ <module>performance</module>
</modules>
</project> \ No newline at end of file