diff options
63 files changed, 2657 insertions, 198 deletions
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java b/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java index 00c27eab5..924864443 100644 --- a/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java +++ b/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java @@ -99,6 +99,7 @@ public class PolicyValidation { private static Map<String, String> jsonRequestMap = new HashMap<>(); private static List<String> modelRequiredFieldsList = new ArrayList<>(); private Set<String> allReqTrueKeys = new HashSet<>(); + private Set<String> allOptReqTrueKeys = new HashSet<>(); private static CommonClassDao commonClassDao; @@ -619,7 +620,8 @@ public class PolicyValidation { valid = false; } } - + + // Validate MicroService Policy Data if (MICROSERVICES.equals(policyData.getConfigPolicyType())) { boolean tmpValid = validateMsModel(policyData, responseString); if (!tmpValid) { @@ -629,154 +631,8 @@ public class PolicyValidation { // Validate Optimization Policy Data if (OPTIMIZATION.equals(policyData.getConfigPolicyType())){ - - if(!Strings.isNullOrEmpty(policyData.getServiceType())){ - - modelRequiredFieldsList.clear(); - pullJsonKeyPairs((JsonNode) policyData.getPolicyJSON()); - - String service; - String version; - if (policyData.getServiceType().contains("-v")){ - service = policyData.getServiceType().split("-v")[0]; - version = policyData.getServiceType().split("-v")[1]; - }else { - service = policyData.getServiceType(); - version = policyData.getVersion(); - } - - if (!Strings.isNullOrEmpty(version)) { - OptimizationModels returnModel = getOptimizationModelData(service, version); - - if (returnModel != null) { - - String annotation = returnModel.getAnnotation(); - String refAttributes = returnModel.getRefattributes(); - String subAttributes = returnModel.getSubattributes(); - String modelAttributes = returnModel.getAttributes(); - - if (!Strings.isNullOrEmpty(annotation)) { - Map<String, String> rangeMap = Splitter.on(",").withKeyValueSeparator("=") - .split(annotation); - for (Entry<String, String> rMap : rangeMap.entrySet()) { - if (rMap.getValue().contains("range::")) { - String value = mapAttribute.get(rMap.getKey().trim()); - String[] tempString = rMap.getValue().split("::")[1].split("-"); - int startNum = Integer.parseInt(tempString[0]); - int endNum = Integer.parseInt(tempString[1]); - String returnString = "InvalidreturnModel Range:" + rMap.getKey() - + " must be between " + startNum + " - " + endNum + ","; - - if (value != null) { - if (PolicyUtils.isInteger(value.replace("\"", ""))) { - int result = Integer.parseInt(value.replace("\"", "")); - if (result < startNum || result > endNum) { - responseString.append(returnString); - valid = false; - } - } else { - responseString.append(returnString); - valid = false; - } - } else { - responseString.append("<b>" + rMap.getKey() + "</b>:<i>" + rMap.getKey() - + " is required for the Optimization model " + service - + HTML_ITALICS_LNBREAK); - valid = false; - } - - } - } - } - - // If request comes from the API we need to validate required fields in the - // Micro Service Model - // GUI request are already validated from the SDK-APP - if ("API".equals(policyData.getApiflag())) { - // get list of required fields from the sub_Attributes of the Model - if (!Strings.isNullOrEmpty(subAttributes)) { - JsonObject subAttributesJson = stringToJsonObject(subAttributes); - findRequiredFields(subAttributesJson); - } - - // get list of required fields from the attributes of the Model - if (!Strings.isNullOrEmpty(modelAttributes)) { - Map<String, String> modelAttributesMap = null; - if (",".equals(modelAttributes.substring(modelAttributes.length() - 1))) { - String attributeString = modelAttributes.substring(0, - modelAttributes.length() - 1); - modelAttributesMap = Splitter.on(",").withKeyValueSeparator("=") - .split(attributeString); - } else { - modelAttributesMap = Splitter.on(",").withKeyValueSeparator("=") - .split(modelAttributes); - } - String json = new ObjectMapper().writeValueAsString(modelAttributesMap); - findRequiredFields(stringToJsonObject(json)); - } - - // get list of required fields from the ref_Attributes of the Model - if (!Strings.isNullOrEmpty(refAttributes)) { - Map<String, String> refAttributesMap = null; - if (",".equals(refAttributes.substring(refAttributes.length() - 1))) { - String attributesString = refAttributes.substring(0, - refAttributes.length() - 1); - refAttributesMap = Splitter.on(",").withKeyValueSeparator("=") - .split(attributesString); - } else { - refAttributesMap = Splitter.on(",").withKeyValueSeparator("=") - .split(modelAttributes); - } - String json = new ObjectMapper().writeValueAsString(refAttributesMap); - findRequiredFields(stringToJsonObject(json)); - } - - if (modelRequiredFieldsList != null || !modelRequiredFieldsList.isEmpty()) { - // create jsonRequestMap with all json keys and values from request - JsonNode rootNode = (JsonNode) policyData.getPolicyJSON(); - jsonRequestMap.clear(); - pullModelJsonKeyPairs(rootNode); - - // validate if the requiredFields are in the request - for (String requiredField : modelRequiredFieldsList) { - if (jsonRequestMap.containsKey(requiredField)) { - String value = jsonRequestMap.get(requiredField); - if (Strings.isNullOrEmpty(jsonRequestMap.get(requiredField)) - || "\"\"".equals(value) - || "".equals(jsonRequestMap.get(requiredField))) { - responseString.append("<b>Optimization Service Model</b>:<i> " - + requiredField + ISREQUIRED + HTML_ITALICS_LNBREAK); - valid = false; - } - } else { - responseString.append("<b>Optimization Service Model</b>:<i> " - + requiredField + ISREQUIRED + HTML_ITALICS_LNBREAK); - valid = false; - } - } - } - } - } else { - responseString - .append("<b>Optimization Service Model</b>:<i> Invalid Model. The model name, " - + service + " of version, " + version - + " was not found in the dictionary" + HTML_ITALICS_LNBREAK); - valid = false; - } - } else { - responseString.append( - "<b>Optimization Service Version</b>:<i> Optimization Service Version is required" - + HTML_ITALICS_LNBREAK); - valid = false; - } - } else { - responseString.append("<b>Optimization Service</b>:<i> Optimization Service Model is required" - + HTML_ITALICS_LNBREAK); - valid = false; - } - - if (Strings.isNullOrEmpty(policyData.getPriority())) { - responseString.append("<b>Priority</b>:<i> Priority is required" + HTML_ITALICS_LNBREAK); + boolean tmpValid = validateOptimization(policyData, responseString); + if (!tmpValid) { valid = false; } } @@ -1102,6 +958,11 @@ public class PolicyValidation { try { String valueStr = value.toString(); String stringValue = valueStr.substring(valueStr.indexOf('[') + 1, valueStr.lastIndexOf(']')); + + if (stringValue.isEmpty()) { + stringValue = "{\"test\":\"test\"}"; + } + ObjectMapper mapper = new ObjectMapper(); JsonNode newValue = mapper.readTree(stringValue); jsonRequestMap.put(key.trim(), value.toString().trim()); @@ -1183,7 +1044,9 @@ public class PolicyValidation { if (obj instanceof String && ((String) obj).contains(REQUIRED_ATTRIBUTE)) { LOGGER.debug("key : " + key); LOGGER.debug("obj : " + obj); - allReqTrueKeys.add(key); + allReqTrueKeys.add(key); //For MicroService policies + allOptReqTrueKeys.add(key); //For Optimization policies + // get the type from value and add that one also String type = StringUtils.substringBefore((String) obj, ":"); if (!StringUtils.isBlank(type) && !StringUtils.containsAny(type.toLowerCase(), MSModelUtils.STRING, @@ -1281,7 +1144,7 @@ public class PolicyValidation { + HTML_ITALICS_LNBREAK); valid = false; } - + if (Strings.isNullOrEmpty(policyData.getPolicyScope())) { responseString .append("<b>Micro Service Model</b>:<i> policyScope is required for this model" @@ -1346,6 +1209,128 @@ public class PolicyValidation { return valid; } + + private boolean validateOptimization(PolicyRestAdapter policyData, StringBuilder responseString) { + boolean valid = true; + if (!Strings.isNullOrEmpty(policyData.getServiceType())) { + + modelRequiredFieldsList.clear(); + pullJsonKeyPairs((JsonNode) policyData.getPolicyJSON()); + + String service; + String version; + if (policyData.getServiceType().contains("-v")) { + service = policyData.getServiceType().split("-v")[0]; + version = policyData.getServiceType().split("-v")[1]; + } else { + service = policyData.getServiceType(); + version = policyData.getVersion(); + } + + if (!Strings.isNullOrEmpty(version)) { + OptimizationModels returnModel = getOptimizationModelData(service, version); + + if (returnModel != null) { + + String annotation = returnModel.getAnnotation(); + String refAttributes = returnModel.getRefattributes(); + String subAttributes = returnModel.getSubattributes(); + String modelAttributes = returnModel.getAttributes(); + + if (!Strings.isNullOrEmpty(annotation)) { + Map<String, String> rangeMap = Splitter.on(",").withKeyValueSeparator("=") + .split(annotation); + for (Entry<String, String> rMap : rangeMap.entrySet()) { + if (rMap.getValue().contains("range::")) { + String value = mapAttribute.get(rMap.getKey().trim()); + String[] tempString = rMap.getValue().split("::")[1].split("-"); + int startNum = Integer.parseInt(tempString[0]); + int endNum = Integer.parseInt(tempString[1]); + String returnString = "InvalidreturnModel Range:" + rMap.getKey() + + " must be between " + startNum + " - " + endNum + ","; + + if (value != null) { + if (PolicyUtils.isInteger(value.replace("\"", ""))) { + int result = Integer.parseInt(value.replace("\"", "")); + if (result < startNum || result > endNum) { + responseString.append(returnString); + valid = false; + } + } else { + responseString.append(returnString); + valid = false; + } + } else { + responseString.append("<b>" + rMap.getKey() + "</b>:<i>" + rMap.getKey() + + " is required for the Optimization model " + service + + HTML_ITALICS_LNBREAK); + valid = false; + } + + } + } + } + + // If request comes from the API we need to validate required fields in the Micro Service Modelvalid + // GUI request are already validated from the SDK-APP + if ("API".equals(policyData.getApiflag())) { + // first , get the complete set of required fields + populateReqFieldSet(new String[] {refAttributes, modelAttributes}, subAttributes); + + Iterator<String> reqTrueKeysIter = allOptReqTrueKeys.iterator(); + while (reqTrueKeysIter.hasNext()) { + modelRequiredFieldsList.add(reqTrueKeysIter.next()); + } + + if (modelRequiredFieldsList != null && !modelRequiredFieldsList.isEmpty()) { + + // create jsonRequestMap with all json keys and values from request + JsonNode rootNode = (JsonNode) policyData.getPolicyJSON(); + jsonRequestMap.clear(); + pullModelJsonKeyPairs(rootNode); + + // validate if the requiredFields are in the request + for (String requiredField : modelRequiredFieldsList) { + if (jsonRequestMap.containsKey(requiredField)) { + String value = jsonRequestMap.get(requiredField); + if (StringUtils.isBlank(value) || "\"\"".equals(value)) { + responseString.append("<b>Optimization Service Model</b>:<i> " + + requiredField + ISREQUIRED + HTML_ITALICS_LNBREAK); + valid = false; + } + } else { + responseString.append("<b>Optimization Service Model</b>:<i> " + + requiredField + ISREQUIRED + HTML_ITALICS_LNBREAK); + valid = false; + } + } + } + } + } else { + responseString.append("<b>Optimization Service Model</b>:<i> Invalid Model. The model name, " + + service + " of version, " + version + + " was not found in the dictionary" + HTML_ITALICS_LNBREAK); + valid = false; + } + } else { + responseString.append( + "<b>Optimization Service Version</b>:<i> Optimization Service Version is required" + + HTML_ITALICS_LNBREAK); + valid = false; + } + } else { + responseString.append("<b>Optimization Service</b>:<i> Optimization policy data is missing or invalid Json." + + HTML_ITALICS_LNBREAK); + valid = false; + } + + if (Strings.isNullOrEmpty(policyData.getPriority())) { + responseString.append("<b>Priority</b>:<i> Priority is required" + HTML_ITALICS_LNBREAK); + valid = false; + } + + return valid; + } private void populateRequiredFields(String[] attrArr, String subAttributes, String modelAttributes) throws JsonProcessingException { @@ -1367,7 +1352,6 @@ public class PolicyValidation { } - // get list of required fields from the sub_Attributes of the Model if (!StringUtils.isBlank(subAttributes)) { JsonObject subAttributesJson = stringToJsonObject(subAttributes); diff --git a/TestSuite/Performance/pom.xml b/TestSuite/Performance/pom.xml new file mode 100644 index 000000000..e7e27bc98 --- /dev/null +++ b/TestSuite/Performance/pom.xml @@ -0,0 +1,34 @@ +<?xml version="1.0"?> +<!-- + ============LICENSE_START======================================================= + ONAP Policy Engine + ================================================================================ + 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 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" + xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.onap.policy.engine</groupId> + <artifactId>TestSuite</artifactId> + <version>1.3.0-SNAPSHOT</version> + </parent> + <artifactId>Performance</artifactId> + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> +</project> diff --git a/TestSuite/Performance/src/main/resources/testplans/PerformancePDPXdecisionsTestPlan.jmx b/TestSuite/Performance/src/main/resources/testplans/PerformancePDPXdecisionsTestPlan.jmx new file mode 100644 index 000000000..e82a1abba --- /dev/null +++ b/TestSuite/Performance/src/main/resources/testplans/PerformancePDPXdecisionsTestPlan.jmx @@ -0,0 +1,1619 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + ONAP Policy Engine + ================================================================================ + 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========================================================= + --> +<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.0 r1840935"> + <hashTree> + <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="PDP-X Performance Policy Decisions Test Plan" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <boolProp name="TestPlan.functional_mode">false</boolProp> + <boolProp name="TestPlan.tearDown_on_shutdown">true</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> + <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true"> + <collectionProp name="HeaderManager.headers"> + <elementProp name="" elementType="Header"> + <stringProp name="Header.name">ClientAuth</stringProp> + <stringProp name="Header.value">cHl0aG9uOnRlc3Q=</stringProp> + </elementProp> + <elementProp name="" elementType="Header"> + <stringProp name="Header.name">Authorization</stringProp> + <stringProp name="Header.value">Basic dGVzdHBkcDphbHBoYTEyMw==</stringProp> + </elementProp> + <elementProp name="" elementType="Header"> + <stringProp name="Header.name">Environment</stringProp> + <stringProp name="Header.value">TEST</stringProp> + </elementProp> + <elementProp name="" elementType="Header"> + <stringProp name="Header.name">Content-Type</stringProp> + <stringProp name="Header.value">application/json</stringProp> + </elementProp> + </collectionProp> + </HeaderManager> + <hashTree/> + <ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults" 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">10.12.6.225</stringProp> + <stringProp name="HTTPSampler.port">8081</stringProp> + <stringProp name="HTTPSampler.protocol">https</stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path"></stringProp> + <stringProp name="HTTPSampler.concurrentPool">6</stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </ConfigTestElement> + <hashTree/> + <SetupThreadGroup guiclass="SetupThreadGroupGui" testclass="SetupThreadGroup" testname="setUp 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">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + </SetupThreadGroup> + <hashTree> + <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Create and Push Controller" enabled="true"> + <boolProp name="LoopController.continue_forever">true</boolProp> + <stringProp name="LoopController.loops">10</stringProp> + </LoopController> + <hashTree> + <TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Transaction Controller" enabled="true"> + <boolProp name="TransactionController.includeTimers">false</boolProp> + <boolProp name="TransactionController.parent">false</boolProp> + </TransactionController> + <hashTree> + <CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="RequestNumber" enabled="true"> + <stringProp name="CounterConfig.start">1</stringProp> + <stringProp name="CounterConfig.end"></stringProp> + <stringProp name="CounterConfig.incr">1</stringProp> + <stringProp name="CounterConfig.name">request_number</stringProp> + <stringProp name="CounterConfig.format">000</stringProp> + <boolProp name="CounterConfig.per_user">false</boolProp> + </CounterConfig> + <hashTree/> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Create Guard Policy" 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">{
 + "policyClass": "Decision",
 + "policyName": "com.TestingGUARD${request_number}",
 + "policyDescription": "Testing new YAML Guard Policy",
 + "onapName": "PDPD",
 + "ruleProvider": "GUARD_YAML",
 + "attributes": {
 + "MATCHING": {
 + "actor": "testActor${request_number}",
 + "recipe": "restart",
 + "targets" : "test",
 + "clname" : "test",
 + "limit": "5",
 + "timeWindow": "15",
 + "timeUnits" : "minute",
 + "guardActiveStart": "05:00:00-05:00",
 + "guardActiveEnd": "23:59:59-05:00"
 + }
 + }
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/createPolicy</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <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">createGuardPolicy.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Create Guard Min/Max Policy" 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">{
 + "policyClass": "Decision",
 + "policyName": "com.TestingGuardMinMax${request_number}",
 + "policyDescription": "Testing Min Max Guard Policy",
 + "onapName": "PDPD",
 + "ruleProvider": "GUARD_MIN_MAX",
 + "attributes": {
 + "MATCHING": {
 + "actor": "testActorMinMax${request_number}",
 + "recipe": "scaleOut",
 + "targets": "test",
 + "clname": "ControlLoop-Test",
 + "min": "1",
 + "max": "5",
 + "guardActiveStart": "00:00:01-05:00",
 + "guardActiveEnd": "00:00:00-05:00"
 + }
 + }
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/createPolicy</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <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> + <url>true</url> + <threadCounts>true</threadCounts> + <idleTime>true</idleTime> + <connectTime>true</connectTime> + </value> + </objProp> + <stringProp name="filename">createGuardMinMaxPolicy.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Create Config Base Policy" 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">{
 + "attributes": {
 + "MATCHING": {
 + "key": "value"
 + }
 + },
 + "configBody": "test body",
 + "configBodyType": "OTHER",
 + "configName": "testConfig",
 + "onapName": "PDPD",
 + "policyConfigType": "Base",
 + "policyDescription": "Testing Config Base Policy",
 + "policyName": "com.TestingConfig${request_number}"
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/createPolicy</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <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> + <url>true</url> + <threadCounts>true</threadCounts> + <idleTime>true</idleTime> + <connectTime>true</connectTime> + </value> + </objProp> + <stringProp name="filename">createBasePolicy.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Push Guard Policy" 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">{
 + "pdpGroup": "default",
 + "policyName": "com.TestingGUARD${request_number}",
 + "policyType": "Decision"
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/pushPolicy</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <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">pushGuardPolicy.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Push Guard Min/Max Policy" 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">{
 + "pdpGroup": "default",
 + "policyName": "com.TestingGUARDMinMax${request_number}",
 + "policyType": "Decision"
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/pushPolicy</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <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> + <url>true</url> + <threadCounts>true</threadCounts> + <idleTime>true</idleTime> + <connectTime>true</connectTime> + </value> + </objProp> + <stringProp name="filename">pushGuardMinMaxPolicy.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Push Config Base Policy" 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">{
 + "pdpGroup": "default",
 + "policyName": "com.TestingConfig${request_number}",
 + "policyType": "Base"
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/pushPolicy</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <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> + <url>true</url> + <threadCounts>true</threadCounts> + <idleTime>true</idleTime> + <connectTime>true</connectTime> + </value> + </objProp> + <stringProp name="filename">pushBasePolicy.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + </hashTree> + </hashTree> + <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" 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> + <url>true</url> + <threadCounts>true</threadCounts> + <idleTime>true</idleTime> + <connectTime>true</connectTime> + </value> + </objProp> + <stringProp name="filename">CreateAndPushSummar.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Execute Policy Thread Group Permit" 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">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + </ThreadGroup> + <hashTree> + <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Get Decision Permit Controller" enabled="true"> + <boolProp name="LoopController.continue_forever">true</boolProp> + <stringProp name="LoopController.loops">1000</stringProp> + </LoopController> + <hashTree> + <TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Transaction Controller" enabled="true"> + <boolProp name="TransactionController.includeTimers">false</boolProp> + <boolProp name="TransactionController.parent">false</boolProp> + </TransactionController> + <hashTree> + <CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="RequestNumber" enabled="true"> + <stringProp name="CounterConfig.start">1</stringProp> + <stringProp name="CounterConfig.end"></stringProp> + <stringProp name="CounterConfig.incr">1</stringProp> + <stringProp name="CounterConfig.name">request_number</stringProp> + <stringProp name="CounterConfig.format">000</stringProp> + <boolProp name="CounterConfig.per_user">false</boolProp> + </CounterConfig> + <hashTree/> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Execute Guard Policy" 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">{
 + "decisionAttributes": {
 + "actor": "testActor${request_number}",
 + "recipe": "restart",
 + "target": "test",
 + "clname" : "test"
 + },
 + "onapName": "PDPD"
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/getDecision</stringProp> + <stringProp name="HTTPSampler.method">POST</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1966519771">"decision":"PERMIT"</stringProp> + </collectionProp> + <stringProp name="Assertion.custom_message"></stringProp> + <stringProp name="Assertion.test_field">Assertion.response_data</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">2</intProp> + </ResponseAssertion> + <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">guardPermit.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Execute Guard Min Max Policy" 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"> {
 + "decisionAttributes": {
 + "actor": "testActorMinMax${request_number}",
 + "recipe": "scaleOut",
 + "target": "test",
 + "clname" : "ControlLoop-Test",
 + "vfCount" : "4"
 + },
 + "onapName": "PDPD"
 + }</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/getDecision</stringProp> + <stringProp name="HTTPSampler.method">POST</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1966519771">"decision":"PERMIT"</stringProp> + </collectionProp> + <stringProp name="Assertion.custom_message"></stringProp> + <stringProp name="Assertion.test_field">Assertion.response_data</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">2</intProp> + </ResponseAssertion> + <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> + <url>true</url> + <threadCounts>true</threadCounts> + <idleTime>true</idleTime> + <connectTime>true</connectTime> + </value> + </objProp> + <stringProp name="filename">guardMinMaxPermit.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + </hashTree> + </hashTree> + <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" 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> + <url>true</url> + <threadCounts>true</threadCounts> + <idleTime>true</idleTime> + <connectTime>true</connectTime> + </value> + </objProp> + <stringProp name="filename">permitSummary.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Execute Policy Thread Group Deny" 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">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + </ThreadGroup> + <hashTree> + <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Get Decision Deny Controller" enabled="true"> + <boolProp name="LoopController.continue_forever">true</boolProp> + <stringProp name="LoopController.loops">1000</stringProp> + </LoopController> + <hashTree> + <TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Transaction Controller" enabled="true"> + <boolProp name="TransactionController.includeTimers">false</boolProp> + <boolProp name="TransactionController.parent">false</boolProp> + </TransactionController> + <hashTree> + <CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="RequestNumber" enabled="true"> + <stringProp name="CounterConfig.start">1</stringProp> + <stringProp name="CounterConfig.end"></stringProp> + <stringProp name="CounterConfig.incr">1</stringProp> + <stringProp name="CounterConfig.name">request_number</stringProp> + <stringProp name="CounterConfig.format">000</stringProp> + <boolProp name="CounterConfig.per_user">false</boolProp> + </CounterConfig> + <hashTree/> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Execute Guard Policy" 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">{
 + "decisionAttributes": {
 + "actor": "testActor${request_number}",
 + "recipe": "restart",
 + "target": "test",
 + "clname" : "test"
 + },
 + "onapName": "test"
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/getDecision</stringProp> + <stringProp name="HTTPSampler.method">POST</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="-1586691318">"decision":"DENY"</stringProp> + </collectionProp> + <stringProp name="Assertion.custom_message"></stringProp> + <stringProp name="Assertion.test_field">Assertion.response_data</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">2</intProp> + </ResponseAssertion> + <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">guardDeny.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Execute Guard Min Max Policy" 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"> {
 + "decisionAttributes": {
 + "actor": "testActorMinMax${request_number}",
 + "recipe": "scaleOut",
 + "target": "test",
 + "clname" : "ControlLoop-Test",
 + "vfCount" : "9"
 + },
 + "onapName": "test"
 + }</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/getDecision</stringProp> + <stringProp name="HTTPSampler.method">POST</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="-1586691318">"decision":"DENY"</stringProp> + </collectionProp> + <stringProp name="Assertion.custom_message"></stringProp> + <stringProp name="Assertion.test_field">Assertion.response_data</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">2</intProp> + </ResponseAssertion> + <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> + <url>true</url> + <threadCounts>true</threadCounts> + <idleTime>true</idleTime> + <connectTime>true</connectTime> + </value> + </objProp> + <stringProp name="filename">guardMinMaxDeny.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + </hashTree> + </hashTree> + <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" 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> + <url>true</url> + <threadCounts>true</threadCounts> + <idleTime>true</idleTime> + <connectTime>true</connectTime> + </value> + </objProp> + <stringProp name="filename">denySummary.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <PostThreadGroup guiclass="PostThreadGroupGui" testclass="PostThreadGroup" testname="tearDown 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> + <intProp name="LoopController.loops">-1</intProp> + </elementProp> + <stringProp name="ThreadGroup.num_threads">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">1</stringProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + </PostThreadGroup> + <hashTree> + <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"> + <boolProp name="LoopController.continue_forever">true</boolProp> + <stringProp name="LoopController.loops">10</stringProp> + </LoopController> + <hashTree> + <TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Transaction Controller" enabled="true"> + <boolProp name="TransactionController.includeTimers">false</boolProp> + <boolProp name="TransactionController.parent">false</boolProp> + </TransactionController> + <hashTree> + <CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="RequestNumber" enabled="true"> + <stringProp name="CounterConfig.start">1</stringProp> + <stringProp name="CounterConfig.end"></stringProp> + <stringProp name="CounterConfig.incr">1</stringProp> + <stringProp name="CounterConfig.name">request_number</stringProp> + <stringProp name="CounterConfig.format">000</stringProp> + <boolProp name="CounterConfig.per_user">false</boolProp> + </CounterConfig> + <hashTree/> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Delete Guard Policy From PDP" 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">{
 + "pdpGroup": "default",
 + "policyName": "com.TestingGUARD${request_number}",
 + "policyType": "Decision",
 + "policyComponent": "PDP",
 + "deleteCondition": "All Versions"
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/deletePolicy</stringProp> + <stringProp name="HTTPSampler.method">DELETE</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">false</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <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">deleteGuardPDP.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Delete Guard Min Max Policy From PDP" 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">{
 + "pdpGroup": "default",
 + "policyName": "com.TestingGuardMinMax${request_number}",
 + "policyType": "Decision",
 + "policyComponent": "PDP",
 + "deleteCondition": "All Versions"
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/deletePolicy</stringProp> + <stringProp name="HTTPSampler.method">DELETE</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <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> + <url>true</url> + <threadCounts>true</threadCounts> + <idleTime>true</idleTime> + <connectTime>true</connectTime> + </value> + </objProp> + <stringProp name="filename">deleteGuardMinMaxPDP.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Delete Config Base Policy From PDP" 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">{
 + "pdpGroup": "default",
 + "policyName": "com.TestingConfig${request_number}",
 + "policyType": "Base",
 + "policyComponent": "PDP",
 + "deleteCondition": "All Versions"
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/deletePolicy</stringProp> + <stringProp name="HTTPSampler.method">DELETE</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <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> + <url>true</url> + <threadCounts>true</threadCounts> + <idleTime>true</idleTime> + <connectTime>true</connectTime> + </value> + </objProp> + <stringProp name="filename">deleteBasePDP.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Delete Guard Policy From PAP" 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">{
 + "policyName": "com.TestingGUARD${request_number}",
 + "policyType": "Decision",
 + "policyComponent": "PAP",
 + "deleteCondition": "All Versions"
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/deletePolicy</stringProp> + <stringProp name="HTTPSampler.method">DELETE</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">false</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <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">deleteGuardPAP.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Delete Guard Min Max Policy From PAP" 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">{
 + "policyName": "com.TestingGuardMinMax${request_number}",
 + "policyType": "Decision",
 + "policyComponent": "PAP",
 + "deleteCondition": "All Versions"
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/deletePolicy</stringProp> + <stringProp name="HTTPSampler.method">DELETE</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <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> + <url>true</url> + <threadCounts>true</threadCounts> + <idleTime>true</idleTime> + <connectTime>true</connectTime> + </value> + </objProp> + <stringProp name="filename">deleteGuardMinMaxPAP.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Delete Config Base Policy From PAP" 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">{
 + "policyName": "com.TestingConfig${request_number}",
 + "policyType": "Base",
 + "policyComponent": "PAP",
 + "deleteCondition": "All Versions"
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/deletePolicy</stringProp> + <stringProp name="HTTPSampler.method">DELETE</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <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> + <url>true</url> + <threadCounts>true</threadCounts> + <idleTime>true</idleTime> + <connectTime>true</connectTime> + </value> + </objProp> + <stringProp name="filename">deleteBasePAP.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + </hashTree> + </hashTree> + <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" 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> + <url>true</url> + <threadCounts>true</threadCounts> + <idleTime>true</idleTime> + <connectTime>true</connectTime> + </value> + </objProp> + <stringProp name="filename">deleteSummary.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" 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">fullSummary.jtl</stringProp> + <boolProp name="useGroupName">true</boolProp> + </ResultCollector> + <hashTree/> + <ResultCollector guiclass="StatVisualizer" testclass="ResultCollector" testname="Aggregate Report" 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">aggregate.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + </hashTree> +</jmeterTestPlan> diff --git a/TestSuite/Stability/pom.xml b/TestSuite/Stability/pom.xml new file mode 100644 index 000000000..e14d6a6d8 --- /dev/null +++ b/TestSuite/Stability/pom.xml @@ -0,0 +1,34 @@ +<?xml version="1.0"?> +<!-- + ============LICENSE_START======================================================= + ONAP Policy Engine + ================================================================================ + 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 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" + xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.onap.policy.engine</groupId> + <artifactId>TestSuite</artifactId> + <version>1.3.0-SNAPSHOT</version> + </parent> + <artifactId>Stability</artifactId> + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> +</project> diff --git a/TestSuite/Stability/src/main/resources/testplans/XacmlPdpTestPlan.jmx b/TestSuite/Stability/src/main/resources/testplans/XacmlPdpTestPlan.jmx new file mode 100644 index 000000000..93694e630 --- /dev/null +++ b/TestSuite/Stability/src/main/resources/testplans/XacmlPdpTestPlan.jmx @@ -0,0 +1,732 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + ONAP Policy Engine + ================================================================================ + 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========================================================= + --> +<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.0 r1840935"> + <hashTree> + <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="PDPX Stability Test Plan" enabled="true"> + <stringProp name="TestPlan.comments"></stringProp> + <boolProp name="TestPlan.functional_mode">false</boolProp> + <boolProp name="TestPlan.tearDown_on_shutdown">true</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> + <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true"> + <collectionProp name="HeaderManager.headers"> + <elementProp name="" elementType="Header"> + <stringProp name="Header.name">ClientAuth</stringProp> + <stringProp name="Header.value">cHl0aG9uOnRlc3Q=</stringProp> + </elementProp> + <elementProp name="" elementType="Header"> + <stringProp name="Header.name">Authorization</stringProp> + <stringProp name="Header.value">Basic dGVzdHBkcDphbHBoYTEyMw==</stringProp> + </elementProp> + <elementProp name="" elementType="Header"> + <stringProp name="Header.name">Environment</stringProp> + <stringProp name="Header.value">TEST</stringProp> + </elementProp> + <elementProp name="" elementType="Header"> + <stringProp name="Header.name">Content-Type</stringProp> + <stringProp name="Header.value">application/json</stringProp> + </elementProp> + </collectionProp> + </HeaderManager> + <hashTree/> + <ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults" 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">10.12.6.225</stringProp> + <stringProp name="HTTPSampler.port">8081</stringProp> + <stringProp name="HTTPSampler.protocol">https</stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path"></stringProp> + <stringProp name="HTTPSampler.concurrentPool">6</stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </ConfigTestElement> + <hashTree/> + <SetupThreadGroup guiclass="SetupThreadGroupGui" testclass="SetupThreadGroup" testname="setUp 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">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + </SetupThreadGroup> + <hashTree> + <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Create and Push Controller" enabled="true"> + <boolProp name="LoopController.continue_forever">true</boolProp> + <stringProp name="LoopController.loops">1000</stringProp> + </LoopController> + <hashTree> + <TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Transaction Controller" enabled="true"> + <boolProp name="TransactionController.includeTimers">false</boolProp> + <boolProp name="TransactionController.parent">false</boolProp> + </TransactionController> + <hashTree> + <CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="RequestNumber" enabled="true"> + <stringProp name="CounterConfig.start">1</stringProp> + <stringProp name="CounterConfig.end"></stringProp> + <stringProp name="CounterConfig.incr">1</stringProp> + <stringProp name="CounterConfig.name">request_number</stringProp> + <stringProp name="CounterConfig.format">000</stringProp> + <boolProp name="CounterConfig.per_user">false</boolProp> + </CounterConfig> + <hashTree/> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Create Guard Policy" 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">{
 + "policyClass": "Decision",
 + "policyName": "Test.TestingGUARD${request_number}",
 + "policyDescription": "Testing new YAML Guard Policy",
 + "onapName": "PDPD",
 + "ruleProvider": "GUARD_YAML",
 + "attributes": {
 + "MATCHING": {
 + "actor": "testActor${request_number}",
 + "recipe": "restart",
 + "targets" : "test",
 + "clname" : "test",
 + "limit": "5",
 + "timeWindow": "15",
 + "timeUnits" : "minute",
 + "guardActiveStart": "05:00:00-05:00",
 + "guardActiveEnd": "23:59:59-05:00"
 + }
 + }
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/createPolicy</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <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">createPolicy.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Push Guard Policy" 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">{
 + "pdpGroup": "default",
 + "policyName": "Test.TestingGUARD${request_number}",
 + "policyType": "Decision"
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/pushPolicy</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <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">pushPolicy.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + </hashTree> + </hashTree> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Execute Policy Thread Group Permit" 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">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + </ThreadGroup> + <hashTree> + <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Get Decision Permit Controller" enabled="true"> + <boolProp name="LoopController.continue_forever">true</boolProp> + <stringProp name="LoopController.loops">1000</stringProp> + </LoopController> + <hashTree> + <TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Transaction Controller" enabled="true"> + <boolProp name="TransactionController.includeTimers">false</boolProp> + <boolProp name="TransactionController.parent">false</boolProp> + </TransactionController> + <hashTree> + <CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="RequestNumber" enabled="true"> + <stringProp name="CounterConfig.start">1</stringProp> + <stringProp name="CounterConfig.end">10</stringProp> + <stringProp name="CounterConfig.incr">1</stringProp> + <stringProp name="CounterConfig.name">request_number</stringProp> + <stringProp name="CounterConfig.format">000</stringProp> + <boolProp name="CounterConfig.per_user">false</boolProp> + </CounterConfig> + <hashTree/> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Execute Guard Policy" 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">{
 + "decisionAttributes": {
 + "actor": "testActor${request_number}",
 + "recipe": "restart",
 + "target": "test",
 + "clname" : "test"
 + },
 + "onapName": "PDPD"
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/getDecision</stringProp> + <stringProp name="HTTPSampler.method">POST</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1966519771">"decision":"PERMIT"</stringProp> + </collectionProp> + <stringProp name="Assertion.custom_message"></stringProp> + <stringProp name="Assertion.test_field">Assertion.response_data</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">2</intProp> + </ResponseAssertion> + <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">guardPermit.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + </hashTree> + </hashTree> + </hashTree> + <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Execute Policy Thread Group Deny" 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">10</stringProp> + <stringProp name="ThreadGroup.ramp_time">10</stringProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + </ThreadGroup> + <hashTree> + <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Get Decision Deny Controller" enabled="true"> + <boolProp name="LoopController.continue_forever">true</boolProp> + <stringProp name="LoopController.loops">1000</stringProp> + </LoopController> + <hashTree> + <TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Transaction Controller" enabled="true"> + <boolProp name="TransactionController.includeTimers">false</boolProp> + <boolProp name="TransactionController.parent">false</boolProp> + </TransactionController> + <hashTree> + <CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="RequestNumber" enabled="true"> + <stringProp name="CounterConfig.start">11</stringProp> + <stringProp name="CounterConfig.end"></stringProp> + <stringProp name="CounterConfig.incr">1</stringProp> + <stringProp name="CounterConfig.name">request_number</stringProp> + <stringProp name="CounterConfig.format">000</stringProp> + <boolProp name="CounterConfig.per_user">false</boolProp> + </CounterConfig> + <hashTree/> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Execute Guard Policy" 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">{
 + "decisionAttributes": {
 + "actor": "testActor${request_number}",
 + "recipe": "restart",
 + "target": "test",
 + "clname" : "test"
 + },
 + "onapName": "test"
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/getDecision</stringProp> + <stringProp name="HTTPSampler.method">POST</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> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="-1586691318">"decision":"DENY"</stringProp> + </collectionProp> + <stringProp name="Assertion.custom_message"></stringProp> + <stringProp name="Assertion.test_field">Assertion.response_data</stringProp> + <boolProp name="Assertion.assume_success">false</boolProp> + <intProp name="Assertion.test_type">2</intProp> + </ResponseAssertion> + <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">guardDeny.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + </hashTree> + </hashTree> + </hashTree> + <PostThreadGroup guiclass="PostThreadGroupGui" testclass="PostThreadGroup" testname="tearDown 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">1</stringProp> + <stringProp name="ThreadGroup.ramp_time">1</stringProp> + <boolProp name="ThreadGroup.scheduler">false</boolProp> + <stringProp name="ThreadGroup.duration"></stringProp> + <stringProp name="ThreadGroup.delay"></stringProp> + </PostThreadGroup> + <hashTree> + <LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"> + <boolProp name="LoopController.continue_forever">true</boolProp> + <stringProp name="LoopController.loops">1000</stringProp> + </LoopController> + <hashTree> + <TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Transaction Controller" enabled="true"> + <boolProp name="TransactionController.includeTimers">false</boolProp> + <boolProp name="TransactionController.parent">false</boolProp> + </TransactionController> + <hashTree> + <CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="RequestNumber" enabled="true"> + <stringProp name="CounterConfig.start">1</stringProp> + <stringProp name="CounterConfig.end"></stringProp> + <stringProp name="CounterConfig.incr">1</stringProp> + <stringProp name="CounterConfig.name">request_number</stringProp> + <stringProp name="CounterConfig.format">000</stringProp> + <boolProp name="CounterConfig.per_user">false</boolProp> + </CounterConfig> + <hashTree/> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Delete Guard Policy From PDP" 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">{
 + "pdpGroup": "default",
 + "policyName": "Test.TestingGUARD${request_number}",
 + "policyType": "Decision",
 + "policyComponent": "PDP",
 + "deleteCondition": "All Versions"
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/deletePolicy</stringProp> + <stringProp name="HTTPSampler.method">DELETE</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">false</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <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">deletePDP.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Delete Guard Policy From PAP" 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">{
 + "policyName": "Test.TestingGUARD${request_number}",
 + "policyType": "Decision",
 + "policyComponent": "PAP",
 + "deleteCondition": "All Versions"
 +}</stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> + </collectionProp> + </elementProp> + <stringProp name="HTTPSampler.domain"></stringProp> + <stringProp name="HTTPSampler.port"></stringProp> + <stringProp name="HTTPSampler.protocol"></stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">pdp/api/deletePolicy</stringProp> + <stringProp name="HTTPSampler.method">DELETE</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">false</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <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">deletePAP.jtl</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + </hashTree> + </hashTree> + </hashTree> + <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" 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">summary</stringProp> + <boolProp name="useGroupName">true</boolProp> + </ResultCollector> + <hashTree/> + <ResultCollector guiclass="StatVisualizer" testclass="ResultCollector" testname="Aggregate Report" 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">aggregate</stringProp> + </ResultCollector> + <hashTree/> + </hashTree> + </hashTree> +</jmeterTestPlan> diff --git a/TestSuite/pom.xml b/TestSuite/pom.xml new file mode 100644 index 000000000..50ede0d5d --- /dev/null +++ b/TestSuite/pom.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ============LICENSE_START======================================================= + ONAP Policy Engine + ================================================================================ + 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.engine</groupId> + <artifactId>PolicyEngineSuite</artifactId> + <version>1.3.0-SNAPSHOT</version> + </parent> + <artifactId>TestSuite</artifactId> + <packaging>pom</packaging> + <modules> + <module>Performance</module> + <module>Stability</module> + </modules> +</project>
\ No newline at end of file diff --git a/docs/platform/RunEcl_telemetry.png b/docs/platform/RunEcl_telemetry.png Binary files differindex 38e361fc8..ae4f65ccc 100755 --- a/docs/platform/RunEcl_telemetry.png +++ b/docs/platform/RunEcl_telemetry.png diff --git a/docs/platform/Tut_cl_confirmAndDirectory.PNG b/docs/platform/Tut_cl_confirmAndDirectory.PNG Binary files differindex 9a7f20db6..cdb84a891 100755 --- a/docs/platform/Tut_cl_confirmAndDirectory.PNG +++ b/docs/platform/Tut_cl_confirmAndDirectory.PNG diff --git a/docs/platform/Tut_cl_finalStep.PNG b/docs/platform/Tut_cl_finalStep.PNG Binary files differindex 6f6e2183c..b56b06e4a 100755 --- a/docs/platform/Tut_cl_finalStep.PNG +++ b/docs/platform/Tut_cl_finalStep.PNG diff --git a/docs/platform/Tut_cl_preDeploy.PNG b/docs/platform/Tut_cl_preDeploy.PNG Binary files differindex 1b0bf0d7c..69a2cdb12 100755 --- a/docs/platform/Tut_cl_preDeploy.PNG +++ b/docs/platform/Tut_cl_preDeploy.PNG diff --git a/docs/platform/Tut_cl_propFile.PNG b/docs/platform/Tut_cl_propFile.PNG Binary files differindex 5c0d86541..960e182d7 100755 --- a/docs/platform/Tut_cl_propFile.PNG +++ b/docs/platform/Tut_cl_propFile.PNG diff --git a/docs/platform/Tut_cl_valuesHighlight.png b/docs/platform/Tut_cl_valuesHighlight.png Binary files differindex e8d385293..7a4bb7901 100755 --- a/docs/platform/Tut_cl_valuesHighlight.png +++ b/docs/platform/Tut_cl_valuesHighlight.png diff --git a/docs/platform/Tut_vCPE_appc_request.JPG b/docs/platform/Tut_vCPE_appc_request.JPG Binary files differindex fd9d11e2b..75d8848a5 100755 --- a/docs/platform/Tut_vCPE_appc_request.JPG +++ b/docs/platform/Tut_vCPE_appc_request.JPG diff --git a/docs/platform/Tut_vCPE_final_memory.JPG b/docs/platform/Tut_vCPE_final_memory.JPG Binary files differindex 2f9661e47..f68aac796 100755 --- a/docs/platform/Tut_vCPE_final_memory.JPG +++ b/docs/platform/Tut_vCPE_final_memory.JPG diff --git a/docs/platform/Tut_vCPE_get_facts.JPG b/docs/platform/Tut_vCPE_get_facts.JPG Binary files differindex 2b9198efb..276372574 100755 --- a/docs/platform/Tut_vCPE_get_facts.JPG +++ b/docs/platform/Tut_vCPE_get_facts.JPG diff --git a/docs/platform/Tut_vCPE_get_facts_2.JPG b/docs/platform/Tut_vCPE_get_facts_2.JPG Binary files differindex 32bdce9f0..4bf8e9f3d 100755 --- a/docs/platform/Tut_vCPE_get_facts_2.JPG +++ b/docs/platform/Tut_vCPE_get_facts_2.JPG diff --git a/docs/platform/Tut_vCPE_guard_not_queried.JPG b/docs/platform/Tut_vCPE_guard_not_queried.JPG Binary files differindex b30a4aa0e..14e52e790 100755 --- a/docs/platform/Tut_vCPE_guard_not_queried.JPG +++ b/docs/platform/Tut_vCPE_guard_not_queried.JPG diff --git a/docs/platform/Tut_vCPE_guard_result.JPG b/docs/platform/Tut_vCPE_guard_result.JPG Binary files differindex 8e32dc0c6..b1818d39c 100755 --- a/docs/platform/Tut_vCPE_guard_result.JPG +++ b/docs/platform/Tut_vCPE_guard_result.JPG diff --git a/docs/platform/Tut_vCPE_inject_appc_response.JPG b/docs/platform/Tut_vCPE_inject_appc_response.JPG Binary files differindex fec070473..6f5f21ba9 100755 --- a/docs/platform/Tut_vCPE_inject_appc_response.JPG +++ b/docs/platform/Tut_vCPE_inject_appc_response.JPG diff --git a/docs/platform/Tut_vCPE_insert_abatement.JPG b/docs/platform/Tut_vCPE_insert_abatement.JPG Binary files differindex f850d12b9..d0da4d5d4 100755 --- a/docs/platform/Tut_vCPE_insert_abatement.JPG +++ b/docs/platform/Tut_vCPE_insert_abatement.JPG diff --git a/docs/platform/Tut_vCPE_insert_onset.JPG b/docs/platform/Tut_vCPE_insert_onset.JPG Binary files differindex e0aea9f6a..0316609a8 100755 --- a/docs/platform/Tut_vCPE_insert_onset.JPG +++ b/docs/platform/Tut_vCPE_insert_onset.JPG diff --git a/docs/platform/Tut_vCPE_policy_active.JPG b/docs/platform/Tut_vCPE_policy_active.JPG Binary files differindex c9ccd9d53..02544f417 100755 --- a/docs/platform/Tut_vCPE_policy_active.JPG +++ b/docs/platform/Tut_vCPE_policy_active.JPG diff --git a/docs/platform/Tut_vCPE_policy_final_success.JPG b/docs/platform/Tut_vCPE_policy_final_success.JPG Binary files differindex ed0e78509..f063d09cd 100755 --- a/docs/platform/Tut_vCPE_policy_final_success.JPG +++ b/docs/platform/Tut_vCPE_policy_final_success.JPG diff --git a/docs/platform/Tut_vCPE_policy_operation.JPG b/docs/platform/Tut_vCPE_policy_operation.JPG Binary files differindex dd4186652..1666ea623 100755 --- a/docs/platform/Tut_vCPE_policy_operation.JPG +++ b/docs/platform/Tut_vCPE_policy_operation.JPG diff --git a/docs/platform/Tut_vCPE_policy_operation_success.JPG b/docs/platform/Tut_vCPE_policy_operation_success.JPG Binary files differindex 9362cc29b..9206847f1 100755 --- a/docs/platform/Tut_vCPE_policy_operation_success.JPG +++ b/docs/platform/Tut_vCPE_policy_operation_success.JPG diff --git a/docs/platform/Tut_vCPE_policy_start.JPG b/docs/platform/Tut_vCPE_policy_start.JPG Binary files differindex a33a24cd0..91be90e68 100755 --- a/docs/platform/Tut_vCPE_policy_start.JPG +++ b/docs/platform/Tut_vCPE_policy_start.JPG diff --git a/docs/platform/Tut_vCPE_simulated_abatement.JPG b/docs/platform/Tut_vCPE_simulated_abatement.JPG Binary files differindex 06f173fbe..2133ff859 100755 --- a/docs/platform/Tut_vCPE_simulated_abatement.JPG +++ b/docs/platform/Tut_vCPE_simulated_abatement.JPG diff --git a/docs/platform/Tut_vCPE_simulated_appc_response.JPG b/docs/platform/Tut_vCPE_simulated_appc_response.JPG Binary files differindex 69699f4f2..3d90e04d8 100755 --- a/docs/platform/Tut_vCPE_simulated_appc_response.JPG +++ b/docs/platform/Tut_vCPE_simulated_appc_response.JPG diff --git a/docs/platform/Tut_vCPE_simulated_onset.JPG b/docs/platform/Tut_vCPE_simulated_onset.JPG Binary files differindex 5ee0901b6..a50b3c298 100755 --- a/docs/platform/Tut_vCPE_simulated_onset.JPG +++ b/docs/platform/Tut_vCPE_simulated_onset.JPG diff --git a/docs/platform/Tut_vCPE_simulators_enabled.JPG b/docs/platform/Tut_vCPE_simulators_enabled.JPG Binary files differindex f350e2c25..8cd9902df 100755 --- a/docs/platform/Tut_vCPE_simulators_enabled.JPG +++ b/docs/platform/Tut_vCPE_simulators_enabled.JPG diff --git a/docs/platform/Tut_vFW_aai_get.JPG b/docs/platform/Tut_vFW_aai_get.JPG Binary files differindex 3fa0e0353..1b00d60b5 100755 --- a/docs/platform/Tut_vFW_aai_get.JPG +++ b/docs/platform/Tut_vFW_aai_get.JPG diff --git a/docs/platform/Tut_vFW_aai_named_query_request.JPG b/docs/platform/Tut_vFW_aai_named_query_request.JPG Binary files differindex a07e7b056..c7f86f93f 100755 --- a/docs/platform/Tut_vFW_aai_named_query_request.JPG +++ b/docs/platform/Tut_vFW_aai_named_query_request.JPG diff --git a/docs/platform/Tut_vFW_aai_named_query_response.JPG b/docs/platform/Tut_vFW_aai_named_query_response.JPG Binary files differindex d6116292b..b3a9fa94d 100755 --- a/docs/platform/Tut_vFW_aai_named_query_response.JPG +++ b/docs/platform/Tut_vFW_aai_named_query_response.JPG diff --git a/docs/platform/Tut_vFW_appc_request.JPG b/docs/platform/Tut_vFW_appc_request.JPG Binary files differindex 2215e6694..737719f79 100755 --- a/docs/platform/Tut_vFW_appc_request.JPG +++ b/docs/platform/Tut_vFW_appc_request.JPG diff --git a/docs/platform/Tut_vFW_final_memory.JPG b/docs/platform/Tut_vFW_final_memory.JPG Binary files differindex 2f9661e47..f68aac796 100755 --- a/docs/platform/Tut_vFW_final_memory.JPG +++ b/docs/platform/Tut_vFW_final_memory.JPG diff --git a/docs/platform/Tut_vFW_get_facts.JPG b/docs/platform/Tut_vFW_get_facts.JPG Binary files differindex 2b9198efb..276372574 100755 --- a/docs/platform/Tut_vFW_get_facts.JPG +++ b/docs/platform/Tut_vFW_get_facts.JPG diff --git a/docs/platform/Tut_vFW_get_facts_2.JPG b/docs/platform/Tut_vFW_get_facts_2.JPG Binary files differindex 3344c80e0..4bf8e9f3d 100755 --- a/docs/platform/Tut_vFW_get_facts_2.JPG +++ b/docs/platform/Tut_vFW_get_facts_2.JPG diff --git a/docs/platform/Tut_vFW_insert_appc_response.JPG b/docs/platform/Tut_vFW_insert_appc_response.JPG Binary files differindex 5e2edf949..d631603c2 100755 --- a/docs/platform/Tut_vFW_insert_appc_response.JPG +++ b/docs/platform/Tut_vFW_insert_appc_response.JPG diff --git a/docs/platform/Tut_vFW_onset_injected.JPG b/docs/platform/Tut_vFW_onset_injected.JPG Binary files differindex 0852ff8a8..ebff2e363 100755 --- a/docs/platform/Tut_vFW_onset_injected.JPG +++ b/docs/platform/Tut_vFW_onset_injected.JPG diff --git a/docs/platform/Tut_vFW_policy_active.JPG b/docs/platform/Tut_vFW_policy_active.JPG Binary files differindex 3eb856831..d3530a74f 100755 --- a/docs/platform/Tut_vFW_policy_active.JPG +++ b/docs/platform/Tut_vFW_policy_active.JPG diff --git a/docs/platform/Tut_vFW_policy_final_success.JPG b/docs/platform/Tut_vFW_policy_final_success.JPG Binary files differindex 1fa4a0c2d..bdb7858b8 100755 --- a/docs/platform/Tut_vFW_policy_final_success.JPG +++ b/docs/platform/Tut_vFW_policy_final_success.JPG diff --git a/docs/platform/Tut_vFW_policy_guard_result.JPG b/docs/platform/Tut_vFW_policy_guard_result.JPG Binary files differindex 03bcbe7ce..89a2f4f8e 100755 --- a/docs/platform/Tut_vFW_policy_guard_result.JPG +++ b/docs/platform/Tut_vFW_policy_guard_result.JPG diff --git a/docs/platform/Tut_vFW_policy_guard_start.JPG b/docs/platform/Tut_vFW_policy_guard_start.JPG Binary files differindex dc8dea915..1aa5490a0 100755 --- a/docs/platform/Tut_vFW_policy_guard_start.JPG +++ b/docs/platform/Tut_vFW_policy_guard_start.JPG diff --git a/docs/platform/Tut_vFW_policy_operation_start.JPG b/docs/platform/Tut_vFW_policy_operation_start.JPG Binary files differindex ce452cbd8..0203c93a1 100755 --- a/docs/platform/Tut_vFW_policy_operation_start.JPG +++ b/docs/platform/Tut_vFW_policy_operation_start.JPG diff --git a/docs/platform/Tut_vFW_policy_operation_success.JPG b/docs/platform/Tut_vFW_policy_operation_success.JPG Binary files differindex 1ada6e935..8e4b8e186 100755 --- a/docs/platform/Tut_vFW_policy_operation_success.JPG +++ b/docs/platform/Tut_vFW_policy_operation_success.JPG diff --git a/docs/platform/Tut_vFW_policy_start.JPG b/docs/platform/Tut_vFW_policy_start.JPG Binary files differindex a33a24cd0..91be90e68 100755 --- a/docs/platform/Tut_vFW_policy_start.JPG +++ b/docs/platform/Tut_vFW_policy_start.JPG diff --git a/docs/platform/Tut_vFW_simulated_appc_response.JPG b/docs/platform/Tut_vFW_simulated_appc_response.JPG Binary files differindex c1d022c31..8ceb89cfc 100755 --- a/docs/platform/Tut_vFW_simulated_appc_response.JPG +++ b/docs/platform/Tut_vFW_simulated_appc_response.JPG diff --git a/docs/platform/Tut_vFW_simulated_onset.JPG b/docs/platform/Tut_vFW_simulated_onset.JPG Binary files differindex 65ccafafd..b6d40113f 100755 --- a/docs/platform/Tut_vFW_simulated_onset.JPG +++ b/docs/platform/Tut_vFW_simulated_onset.JPG diff --git a/docs/platform/Tut_vFW_simulators_enabled.JPG b/docs/platform/Tut_vFW_simulators_enabled.JPG Binary files differindex f350e2c25..8cd9902df 100755 --- a/docs/platform/Tut_vFW_simulators_enabled.JPG +++ b/docs/platform/Tut_vFW_simulators_enabled.JPG diff --git a/docs/platform/clsimulation.rst b/docs/platform/clsimulation.rst index bb8766901..0492a2594 100644 --- a/docs/platform/clsimulation.rst +++ b/docs/platform/clsimulation.rst @@ -194,6 +194,7 @@ Responses "vserver-name2": "vjunos0", "vserver-selflink": "https://aai-ext1.test.att.com:8443/aai/v7/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/tenants/tenant/USMSO1SX7NJ0103UJZZ01%3A%3AuCPE-VMS/vservers/vserver/d0668d4f-c25e-4a1b-87c4-83845c01efd8", "in-maint": false, + "prov-status":"ACTIVE", "is-closed-loop-disabled": isDisabled, // True if the vserverName is "disableClosedLoop", false otherwise "resource-version": "1494001931513", "relationship-list": { @@ -222,7 +223,7 @@ Responses } }] } - + .. code-block:: bash :caption: vserver-GET-error diff --git a/docs/platform/mat_hello_world.JPG b/docs/platform/mat_hello_world.JPG Binary files differindex 04cf799ce..d52e4c754 100755 --- a/docs/platform/mat_hello_world.JPG +++ b/docs/platform/mat_hello_world.JPG diff --git a/docs/platform/runningEclipse.rst b/docs/platform/runningEclipse.rst index b2bcd88fa..136efe736 100644 --- a/docs/platform/runningEclipse.rst +++ b/docs/platform/runningEclipse.rst @@ -36,7 +36,7 @@ To interact with the PDP-D, the Telemetry API can be used. A simple GET on the e .. code-block:: bash - curl --silent --user @1b3rt:31nst31n -X GET http://localhost:9696/policy/pdp/engine/ | python -m json.tool + curl -k --silent --user @1b3rt:31nst31n -X GET https://localhost:9696/policy/pdp/engine/ | python -m json.tool .. image:: RunEcl_telemetry.png diff --git a/docs/platform/tutorial_VOLTE.rst b/docs/platform/tutorial_VOLTE.rst index 3ccb02704..2dc846282 100644 --- a/docs/platform/tutorial_VOLTE.rst +++ b/docs/platform/tutorial_VOLTE.rst @@ -58,28 +58,27 @@ Next, we're going to create a file named *dcae.volte.onset.json* and edit it to Here are the contents of the VOLTE ONSET message. Copy/paste this into dcae.volte.onset.json: .. code-block:: json - + { + "closedLoopControlName": "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b", + "closedLoopAlarmStart": 1484677482204798, "closedLoopEventClient": "DCAE.HolmesInstance", - "policyVersion": "1.0.0.5", - "policyName": "vVOLTE", - "policyScope": "resource=volte,service=VolteSErvice,type=SampleType,closedLoopControlName=CL-VOLTE-SIG-d925ed73-8231-4d02-9545-db4e101f88f8", + "closedLoopEventStatus": "ONSET", + "requestID": "97964e10-686e-4790-8c45-bdfa61df770f", "target_type": "VM", + "target": "vserver.vserver-name", "AAI": { + "vserver.is-closed-loop-disabled": "false", + "vserver.prov-status": "ACTIVE", "vserver.vserver-name": "dfw1lb01lb01", - "service-instance.service-instance-id" : "TBD", - "generic-vnf.vnf-id" : "TBD", - "generic-vnf.vnf-name" : "TBD" + "service-instance.service-instance-id" : "vserver-name-16102016-aai3255-data-11-1", + "generic-vnf.vnf-id" : "vnf-id-16102016-aai3255-data-11-1", + "generic-vnf.vnf-name" : "vnf-name-16102016-aai3255-data-11-1" }, - "closedLoopAlarmStart": 1484677482204798, - "closedLoopEventStatus": "ONSET", - "closedLoopControlName": "ControlLoop-VOLTE-2179b738-fd36-4843-a71a-a8c24c70c55b", - "version": "1.0.2", - "target": "vserver.vserver-name", - "requestID": "97964e10-686e-4790-8c45-bdfa61df770f", - "from": "DCAE" + "from": "DCAE", + "version": "1.0.2" } - + Enabling the VFC Simulator ^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -101,7 +100,7 @@ We are now ready to inject an ONSET message to trigger the VOLTE flow. Simply na .. code-block:: bash - http -a @1b3rt:31nst31n PUT :9696/policy/pdp/engine/topics/sources/ueb/unauthenticated.DCAE_CL_OUTPUT/events @dcae.volte.onset.json Content-Type:"text/plain" + http --verify=no --default-scheme=https -a @1b3rt:31nst31n PUT :9696/policy/pdp/engine/topics/sources/ueb/unauthenticated.DCAE_CL_OUTPUT/events @dcae.volte.onset.json Content-Type:"text/plain" You should see some output similar to this: diff --git a/docs/platform/tutorial_VOLTE_1.png b/docs/platform/tutorial_VOLTE_1.png Binary files differindex c1ce8e4be..938604df3 100755 --- a/docs/platform/tutorial_VOLTE_1.png +++ b/docs/platform/tutorial_VOLTE_1.png diff --git a/docs/platform/tutorial_VOLTE_2.png b/docs/platform/tutorial_VOLTE_2.png Binary files differindex 51f7e7aeb..53ee78026 100755 --- a/docs/platform/tutorial_VOLTE_2.png +++ b/docs/platform/tutorial_VOLTE_2.png diff --git a/docs/platform/tutorial_vCPE.rst b/docs/platform/tutorial_vCPE.rst index 7c6c9fb05..9a2ac1a4d 100644 --- a/docs/platform/tutorial_vCPE.rst +++ b/docs/platform/tutorial_vCPE.rst @@ -32,7 +32,7 @@ The telemetry API is used to see what is in memory. There should only be 1 fact, .. code-block:: bash - curl --silent --user @1b3rt:31nst31n -X GET http://localhost:9696/policy/pdp/engine/controllers/amsterdam/drools/facts/amsterdam | python -m json.tool + curl -k --silent --user @1b3rt:31nst31n -X GET https://localhost:9696/policy/pdp/engine/controllers/amsterdam/drools/facts/amsterdam | python -m json.tool .. image:: Tut_vCPE_get_facts.JPG @@ -47,7 +47,7 @@ Inject the onset using the Telemetry API. .. code-block:: bash - curl --silent --user @1b3rt:31nst31n --header "Content-Type: text/plain" --data @dcae.vcpe.onset.json -X PUT http://localhost:9696/policy/pdp/engine/topics/sources/ueb/unauthenticated.DCAE_EVENT_OUTPUT/events | python -m json.tool + curl -k --silent --user @1b3rt:31nst31n --header "Content-Type: text/plain" --data @dcae.vcpe.onset.json -X PUT https://localhost:9696/policy/pdp/engine/topics/sources/ueb/unauthenticated.DCAE_EVENT_OUTPUT/events | python -m json.tool .. image:: Tut_vCPE_insert_onset.JPG @@ -55,7 +55,6 @@ Inject the onset using the Telemetry API. Now check the facts in memory, there should be 7 objects present. Two timers exist to put a time limit on the operation and on the overall control loop (in the case of retries or policy chaining). The event and it's associated manager and operation manager are also present in memory. A lock on the target entity is inserted to ensure no other events try to take action on the VM/VNF that is currently processing. - .. image:: Tut_vCPE_get_facts_2.JPG The network log will be used to monitor the activity coming in and out of the PDP-D. This log is located at *$POLICY_HOME/logs/network.log*. This will show the notifications that the PDP-D sends out at different stages of processing. The order of successful processing begins with an ACTIVE notification to show that the onset was acknowledged and the operation is beginning transit. @@ -66,8 +65,12 @@ Once the event is in the ACTIVE state, the PDP-D consults Guard to determine if .. image:: Tut_vCPE_guard_not_queried.JPG +| + .. image:: Tut_vCPE_guard_result.JPG +| + .. image:: Tut_vCPE_policy_operation.JPG Once the operation starts an APPC request is sent out. @@ -82,7 +85,7 @@ Inject the response using the Telemetry API. .. code-block:: bash - curl --silent --user @1b3rt:31nst31n --header "Content-Type: text/plain" --data @appc.lcm.success.json -X PUT http://localhost:9696/policy/pdp/engine/topics/sources/ueb/APPC-LCM-WRITE/events | python -m json.tool + curl -k --silent --user @1b3rt:31nst31n --header "Content-Type: text/plain" --data @appc.lcm.success.json -X PUT https://localhost:9696/policy/pdp/engine/topics/sources/ueb/APPC-LCM-WRITE/events | python -m json.tool .. image:: Tut_vCPE_inject_appc_response.JPG @@ -98,7 +101,7 @@ Inject the abatement message using the Telemetry API. .. code-block:: bash - curl --silent --user @1b3rt:31nst31n --header "Content-Type: text/plain" --data @dcae.vcpe.abatement.json -X PUT http://localhost:9696/policy/pdp/engine/topics/sources/ueb/unauthenticated.DCAE_EVENT_OUTPUT/events | python -m json.tool + curl -k --silent --user @1b3rt:31nst31n --header "Content-Type: text/plain" --data @dcae.vcpe.abatement.json -X PUT https://localhost:9696/policy/pdp/engine/topics/sources/ueb/unauthenticated.DCAE_EVENT_OUTPUT/events | python -m json.tool .. image:: Tut_vCPE_insert_abatement.JPG diff --git a/docs/platform/tutorial_vDNS.rst b/docs/platform/tutorial_vDNS.rst index 5e864a8a2..330bb64ef 100644 --- a/docs/platform/tutorial_vDNS.rst +++ b/docs/platform/tutorial_vDNS.rst @@ -59,20 +59,23 @@ Here are the contents of the vDNS ONSET message. Copy/paste this into dcae.vdns. .. code-block:: json - { "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca", - "target_type": "VNF", - "AAI": { - "vserver.vserver-name": "vlb-lb-32c8", - "vserver.is-closed-loop-disabled": "false" - }, - "closedLoopAlarmStart": 1484677482204798, - "closedLoopEventStatus": "ONSET", - "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", - "version": "1.0.2", - "target": "vserver.vserver-name", - "requestID": "99999999-686e-4790-8c45-bdfa61df770f", - "from": "DCAE" + { + "closedLoopControlName": "ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3", + "closedLoopAlarmStart": 1484677482204798, + "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca", + "closedLoopEventStatus": "ONSET", + "requestID": "e4f95e0c-a013-4530-8e59-c5c5f9e539b6", + "target_type": "VNF", + "target": "vserver.vserver-name", + "AAI": { + "vserver.is-closed-loop-disabled": "false", + "vserver.prov-status": "ACTIVE", + "vserver.vserver-name": "dfw1lb01lb01" + }, + "from": "DCAE", + "version": "1.0.2" } + Enabling the AAI and SO Simulators @@ -95,11 +98,11 @@ We are now ready to inject an ONSET message to trigger the vDNS flow. Simply nav .. code-block:: bash - http -a @1b3rt:31nst31n PUT :9696/policy/pdp/engine/topics/sources/ueb/unauthenticated.DCAE_CL_OUTPUT/events @dcae.vdns.onset.json Content-Type:"text/plain" + http --verify=no --default-scheme=https -a @1b3rt:31nst31n PUT :9696/policy/pdp/engine/topics/sources/ueb/unauthenticated.DCAE_CL_OUTPUT/events @dcae.vdns.onset.json Content-Type:"text/plain" You should see some output similar to this: -.. image:: tutorial_vDNS_1.png + .. image:: tutorial_vDNS_1.png You can view the logs to see the network activity or find any errors that may have occurred. Logs are located in */opt/app/policy/logs*. @@ -108,9 +111,9 @@ Reading the logs Once you've injected the onset message, this should appear in the network.log: -.. image:: tutorial_vDNS_2.png + .. image:: tutorial_vDNS_2.png End of Document -.. SSNote: Wiki page ref. https://wiki.onap.org/display/DW/Using+guard+in+the+PDP-D +.. SSNote: Wiki page ref. https://wiki.onap.org/display/DW/Tutorial%3A+Testing+the+vDNS+Use+Case+in+a+standalone+PDP-D diff --git a/docs/platform/tutorial_vDNS_1.png b/docs/platform/tutorial_vDNS_1.png Binary files differindex a9c3e6e18..ed2cb36f4 100755..100644 --- a/docs/platform/tutorial_vDNS_1.png +++ b/docs/platform/tutorial_vDNS_1.png diff --git a/docs/platform/tutorial_vDNS_2.png b/docs/platform/tutorial_vDNS_2.png Binary files differindex 8de785362..bbfb82066 100755..100644 --- a/docs/platform/tutorial_vDNS_2.png +++ b/docs/platform/tutorial_vDNS_2.png diff --git a/docs/platform/tutorial_vFW.rst b/docs/platform/tutorial_vFW.rst index 4b402d017..72288f339 100644 --- a/docs/platform/tutorial_vFW.rst +++ b/docs/platform/tutorial_vFW.rst @@ -32,7 +32,7 @@ The telemetry API is used to see what is in memory. There should only be 1 fact, .. code-block:: bash - curl --silent --user @1b3rt:31nst31n -X GET http://localhost:9696/policy/pdp/engine/controllers/amsterdam/drools/facts/amsterdam | python -m json.tool + curl -k --silent --user @1b3rt:31nst31n -X GET https://localhost:9696/policy/pdp/engine/controllers/amsterdam/drools/facts/amsterdam | python -m json.tool .. image:: Tut_vFW_get_facts.JPG @@ -46,7 +46,7 @@ Inject the onset using the Telemetry API. .. code-block:: bash - curl --silent --user @1b3rt:31nst31n --header "Content-Type: text/plain" --data @dcae.vfw.onset.json -X PUT http://localhost:9696/policy/pdp/engine/topics/sources/ueb/unauthenticated.DCAE_EVENT_OUTPUT/events | python -m json.tool + curl -k --silent --user @1b3rt:31nst31n --header "Content-Type: text/plain" --data @dcae.vfw.onset.json -X PUT https://localhost:9696/policy/pdp/engine/topics/sources/ueb/unauthenticated.DCAE_EVENT_OUTPUT/events | python -m json.tool .. image:: Tut_vFW_onset_injected.JPG @@ -76,8 +76,12 @@ Once the target entity is found, the PDP-D consults Guard to determine if this o .. image:: Tut_vFW_policy_guard_start.JPG +| + .. image:: Tut_vFW_policy_guard_result.JPG +| + .. image:: Tut_vFW_policy_operation_start.JPG Once the operation starts an APPC request is sent out. @@ -92,7 +96,7 @@ Inject the response using the Telemetry API. .. code-block:: bash - curl --silent --user @1b3rt:31nst31n --header "Content-Type: text/plain" --data @appc.legacy.success.json -X PUT http://localhost:9696/policy/pdp/engine/topics/sources/ueb/APPC-CL/events | python -m json.tool + curl -k --silent --user @1b3rt:31nst31n --header "Content-Type: text/plain" --data @appc.legacy.success.json -X PUT https://localhost:9696/policy/pdp/engine/topics/sources/ueb/APPC-CL/events | python -m json.tool .. image:: Tut_vFW_insert_appc_response.JPG diff --git a/docs/release-notes.rst b/docs/release-notes.rst index 9f0b35d98..e69c65889 100644 --- a/docs/release-notes.rst +++ b/docs/release-notes.rst @@ -145,8 +145,6 @@ The Casablanca release for POLICY delivered the following Epics. For a full list The following bug fixes have been deployed with this release: - * `[POLICY-484] <https://jira.onap.org/browse/POLICY-484>`_ - Extend election handler run window and clean up error messages - * `[POLICY-909] <https://jira.onap.org/browse/POLICY-909>`_ - get_ZoneDictionaryDataByName class type error * `[POLICY-1085] <https://jira.onap.org/browse/POLICY-1085>`_ - Stand-alone install will not run * `[POLICY-1106] <https://jira.onap.org/browse/POLICY-1106>`_ - Checkstyle fixes appear to have broken persistence @@ -156,7 +154,13 @@ The following bug fixes have been deployed with this release: * `[POLICY-1155] <https://jira.onap.org/browse/POLICY-1155>`_ - PDP-D [APPS] : DRL Templates Compilation Errors * `[POLICY-1158] <https://jira.onap.org/browse/POLICY-1158>`_ - meet ASDC_AUTHORIZATION_FAILED for client setting * `[POLICY-1160] <https://jira.onap.org/browse/POLICY-1160>`_ - meet nullPointer exception based on the new schema of HPA capability requirement - + * `[POLICY-1192] <https://jira.onap.org/browse/POLICY-1192>`_ - Update portal.properties in PE for AAF integration + * `[POLICY-1193] <https://jira.onap.org/browse/POLICY-1193>`_ - Policy: Heat Installation: policy host in certificate was generated incorrectly + * `[POLICY-1194] <https://jira.onap.org/browse/POLICY-1194>`_ - Policy: Heat installation: reconfigure URLs to point to a DNS hostname that matches the DMaaP certificate + * `[POLICY-1198] <https://jira.onap.org/browse/POLICY-1198>`_ - POLICY: OOM: PAP: cannot talk https directly to PDP-X pod bypassing service + * `[POLICY-1200] <https://jira.onap.org/browse/POLICY-1200>`_ - meet NullPointerException error since the PolicyScope should be set a default value + * `[POLICY-1201] <https://jira.onap.org/browse/POLICY-1201>`_ - Error while forwarding policy from policy-distribution to apex-pdp + * `[POLICY-1204] <https://jira.onap.org/browse/POLICY-1204>`_ - PAPLP: invalid schema database errors **Security Notes** diff --git a/packages/base/src/files/install/mysql/data/181003_upgrade_script.sql b/packages/base/src/files/install/mysql/data/181003_upgrade_script.sql index b060292fe..6f2f151cd 100644 --- a/packages/base/src/files/install/mysql/data/181003_upgrade_script.sql +++ b/packages/base/src/files/install/mysql/data/181003_upgrade_script.sql @@ -17,4 +17,9 @@ -- ============LICENSE_END========================================================= use onap_sdk; update fn_app set APP_PASSWORD = '/xMjAl0TB1FgnHih2qA4V5gUkFQNZaK1fiNf3QlRaLI=' where app_id =1; + +use log; +ALTER TABLE systemlogdb +MODIFY remote varchar(255) null; + commit;
\ No newline at end of file @@ -81,6 +81,7 @@ <module>POLICY-SDK-APP</module> <module>ONAP-SDK-APP</module> <module>packages</module> + <module>TestSuite</module> </modules> <distributionManagement> <repository> |