diff options
16 files changed, 375 insertions, 452 deletions
@@ -15,3 +15,8 @@ debug-logs # IntelliJ files .idea/ **/*.iml + +# test files +**/*.factorypath +**/*.log +**/*.jtl diff --git a/testsuites/performance/src/main/resources/testplans/README.perf.md b/testsuites/performance/src/main/resources/testplans/README.perf.md index cbde3d76..653a05aa 100644 --- a/testsuites/performance/src/main/resources/testplans/README.perf.md +++ b/testsuites/performance/src/main/resources/testplans/README.perf.md @@ -1,26 +1,19 @@ Performance Test for Policy Distribution ## Steps to Run performance test 1. Download Apache JMeter -Download JMeter 5.0 from https://jmeter.apache.org/download_jmeter.cgi, and extracted it locally. +Download JMeter 5.x.x from https://jmeter.apache.org/download_jmeter.cgi, and extracted it locally. 2. Run the setup-components script found within simulator setup in the stability test folder. This will launch MariaDB, PDPSimulator, PAP, Policy-API and DMaaP Simulator as docker containers. -3. Launch the policy distribution service by running the setup-distribution script found within distributionsetup +3. Launch the policy distribution service by running the start script found within setup folder in the stability test folder. -If you are running all of the components locally you will need to edit the port that distribution starts on as it is -currently 6969 which conflicts with the policy API port. -This will launch policy-distribution as a docker container and takes 2 arguments, PAP IP and API IP. -If you are running locally these will be 127.0.0.1. If on a VM enter the VM IP. -``` -setup-distribution.sh 127.0.0.1 127.0.0.1 -``` -4. Run the JMeter performance test +4. Run the JMeter performance test from testplans folder. ``` -rm -f performance.log; <jmeter_dir>/bin/jmeter.sh -t performance.jmx -n -Jhost=<pdp service hostname> -Jduration=100 -l performance.log +./run_test.sh ``` -Search for 'get policy failed' in the performance.log file to see if there is any errors found during the performance test. +Search for 'get policy failed' in the log file to see if there is any errors found during the performance test. ## JMeter properties We can configure the following properties when running the JMeter performance test for policy distribution diff --git a/testsuites/performance/src/main/resources/testplans/addcsars.sh b/testsuites/performance/src/main/resources/testplans/addcsars.sh index e446a67b..6b386e2f 100755 --- a/testsuites/performance/src/main/resources/testplans/addcsars.sh +++ b/testsuites/performance/src/main/resources/testplans/addcsars.sh @@ -1,5 +1,5 @@ # ============LICENSE_START======================================================= -# Copyright (c) 2020 Nordix Foundation. +# Copyright (c) 2020-2021 Nordix Foundation. # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -16,11 +16,6 @@ # SPDX-License-Identifier: Apache-2.0 # ============LICENSE_END========================================================= -# the directory of the script -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -echo "${DIR}" - if [ $# -le 1 ] then echo "Usage ./addcsars.sh \$TESTCSARSLOCATION \$TARGETDIRECTORY" @@ -32,4 +27,4 @@ TARGETDIRECTORY=$2 for file in "$TESTCSARSLOCATION"/* do cp "$file" "$TARGETDIRECTORY" -done
\ No newline at end of file +done diff --git a/testsuites/performance/src/main/resources/testplans/clearuppolicies.sh b/testsuites/performance/src/main/resources/testplans/clearuppolicies.sh index d67df1c1..e9b4252a 100755 --- a/testsuites/performance/src/main/resources/testplans/clearuppolicies.sh +++ b/testsuites/performance/src/main/resources/testplans/clearuppolicies.sh @@ -1,5 +1,5 @@ # ============LICENSE_START======================================================= -# Copyright (c) 2020 Nordix Foundation. +# Copyright (c) 2020-2021 Nordix Foundation. # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ # the directory of the script if [ $# -le 3 ] then - echo "Usage ./addcsars.sh \$POLICY_API_IP \$POLICY_API_PORT \$POLICY_PAP_IP \$POLICY_PAP_PORT" + echo "Usage ./clearuppolicies.sh \$POLICY_API_IP \$POLICY_API_PORT \$POLICY_PAP_IP \$POLICY_PAP_PORT" exit 1 fi POLICY_API_IP=$1 @@ -36,9 +36,9 @@ send_delete_request(){ COUNTER=1 while [ $COUNTER != 11 ] do - send_delete_request https://"$POLICY_PAP_IP":"$POLICY_PAP_PORT"/policy/pap/v1/pdps/policies/\ + send_delete_request http://"$POLICY_PAP_IP":"$POLICY_PAP_PORT"/policy/pap/v1/pdps/policies/\ operational.apex.sampledomain.test$COUNTER - send_delete_request https://"$POLICY_API_IP":"$POLICY_API_PORT"/policy/api/v1/policytypes/operational\ + send_delete_request http://"$POLICY_API_IP":"$POLICY_API_PORT"/policy/api/v1/policytypes/operational\ .apex.sampledomain.test$COUNTER/versions/1.0.0/policies/operational.apex.sampledomain.test$COUNTER/versions/1.0.0 COUNTER=$((COUNTER +1)) done diff --git a/testsuites/performance/src/main/resources/testplans/performance.jmx b/testsuites/performance/src/main/resources/testplans/performance.jmx index 2115cdee..fbc3203b 100644 --- a/testsuites/performance/src/main/resources/testplans/performance.jmx +++ b/testsuites/performance/src/main/resources/testplans/performance.jmx @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> -<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.1.1 r1855137"> +<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4.1"> <hashTree> - <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="stability test plan" enabled="true"> + <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="performance test plan" enabled="true"> <stringProp name="TestPlan.comments"></stringProp> <boolProp name="TestPlan.functional_mode">false</boolProp> <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp> @@ -10,17 +10,17 @@ <collectionProp name="Arguments.arguments"> <elementProp name="PAP_HOST" elementType="Argument"> <stringProp name="Argument.name">PAP_HOST</stringProp> - <stringProp name="Argument.value">${__P(host,10.2.0.110)}</stringProp> + <stringProp name="Argument.value">${__P(paphost,172.19.0.8)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="PAP_PORT" elementType="Argument"> <stringProp name="Argument.name">PAP_PORT</stringProp> - <stringProp name="Argument.value">7000</stringProp> + <stringProp name="Argument.value">6969</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="API_HOST" elementType="Argument"> <stringProp name="Argument.name">API_HOST</stringProp> - <stringProp name="Argument.value">${__P(host,10.2.0.110)}</stringProp> + <stringProp name="Argument.value">${__P(apihost,172.19.0.7)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="API_PORT" elementType="Argument"> @@ -30,12 +30,12 @@ </elementProp> <elementProp name="DISTRIBUTION_HOST" elementType="Argument"> <stringProp name="Argument.name">DISTRIBUTION_HOST</stringProp> - <stringProp name="Argument.value">${__P(distributionhost,127.0.0.1)}</stringProp> + <stringProp name="Argument.value">${__P(disthost,172.19.0.3)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="DISTRIBUTION_PORT" elementType="Argument"> <stringProp name="Argument.name">DISTRIBUTION_PORT</stringProp> - <stringProp name="Argument.value">7002</stringProp> + <stringProp name="Argument.value">6969</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="DURATION" elementType="Argument"> @@ -53,6 +53,11 @@ <stringProp name="Argument.value">${__P(watchedfolder, /tmp/policydistribution/distributionmount)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> + <elementProp name="POLICIES_UNDEPLOYED" elementType="Argument"> + <stringProp name="Argument.name">POLICIES_UNDEPLOYED</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> </collectionProp> </elementProp> <stringProp name="TestPlan.user_define_classpath"></stringProp> @@ -69,6 +74,7 @@ <boolProp name="ThreadGroup.scheduler">true</boolProp> <stringProp name="ThreadGroup.duration">${DURATION}</stringProp> <stringProp name="ThreadGroup.delay">1</stringProp> + <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp> </ThreadGroup> <hashTree> <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true"> @@ -87,14 +93,14 @@ <AuthManager guiclass="AuthPanel" testclass="AuthManager" testname="HTTP Authorization Manager" enabled="true"> <collectionProp name="AuthManager.auth_list"> <elementProp name="" elementType="Authorization"> - <stringProp name="Authorization.url">https://${PAP_HOST}:${PAP_PORT}/policy/pap/v1</stringProp> + <stringProp name="Authorization.url">http://${PAP_HOST}:${PAP_PORT}/policy/pap/v1</stringProp> <stringProp name="Authorization.username">healthcheck</stringProp> <stringProp name="Authorization.password">zb!XztG34</stringProp> <stringProp name="Authorization.domain"></stringProp> <stringProp name="Authorization.realm"></stringProp> </elementProp> <elementProp name="" elementType="Authorization"> - <stringProp name="Authorization.url">https://${API_HOST}:${API_PORT}/policy/api/v1</stringProp> + <stringProp name="Authorization.url">http://${API_HOST}:${API_PORT}/policy/api/v1</stringProp> <stringProp name="Authorization.username">healthcheck</stringProp> <stringProp name="Authorization.password">zb!XztG34</stringProp> <stringProp name="Authorization.domain"></stringProp> @@ -109,6 +115,7 @@ </elementProp> </collectionProp> <boolProp name="AuthManager.clearEachIteration">true</boolProp> + <boolProp name="AuthManager.controlledByThreadGroup">false</boolProp> </AuthManager> <hashTree/> <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Delete Old CSAR" enabled="true"/> @@ -116,7 +123,7 @@ <SystemSampler guiclass="SystemSamplerGui" testclass="SystemSampler" testname="Remove CSAR" enabled="true"> <boolProp name="SystemSampler.checkReturnCode">false</boolProp> <stringProp name="SystemSampler.expectedReturnCode">0</stringProp> - <stringProp name="SystemSampler.command">${SCRIPT_DIR}/removecsars.sh</stringProp> + <stringProp name="SystemSampler.command">${SCRIPT_DIR}removecsars.sh</stringProp> <elementProp name="SystemSampler.arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> <collectionProp name="Arguments.arguments"> <elementProp name="" elementType="Argument"> @@ -143,7 +150,7 @@ <collectionProp name="Arguments.arguments"> <elementProp name="" elementType="Argument"> <stringProp name="Argument.name"></stringProp> - <stringProp name="Argument.value">${SCRIPT_DIR}/testCsars</stringProp> + <stringProp name="Argument.value">${SCRIPT_DIR}testCsars</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="" elementType="Argument"> @@ -158,202 +165,93 @@ </elementProp> <stringProp name="SystemSampler.directory"></stringProp> </SystemSampler> - <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"></stringProp> - </ResultCollector> - <hashTree/> - </hashTree> + <hashTree/> </hashTree> - <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Assert Policys Created" enabled="true"/> + <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Assert Policies Created" enabled="true"/> <hashTree> - <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true"> - <stringProp name="ConstantTimer.delay">30000</stringProp> + <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Wait a minute for policies to deploy" enabled="true"> + <stringProp name="ConstantTimer.delay">60000</stringProp> </ConstantTimer> <hashTree/> - <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Check Policy Deployed" 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">${PAP_HOST}</stringProp> - <stringProp name="HTTPSampler.port">${PAP_PORT}</stringProp> - <stringProp name="HTTPSampler.protocol">https</stringProp> - <stringProp name="HTTPSampler.contentEncoding"></stringProp> - <stringProp name="HTTPSampler.path">policy/pap/v1/policies/deployed</stringProp> - <stringProp name="HTTPSampler.method">GET</stringProp> - <boolProp name="HTTPSampler.follow_redirects">true</boolProp> - <boolProp name="HTTPSampler.auto_redirects">false</boolProp> - <boolProp name="HTTPSampler.use_keepalive">true</boolProp> - <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> - <stringProp name="HTTPSampler.embedded_url_re"></stringProp> - <stringProp name="HTTPSampler.connect_timeout"></stringProp> - <stringProp name="HTTPSampler.response_timeout"></stringProp> - </HTTPSamplerProxy> + <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Assertions" enabled="true"/> <hashTree> - <JSONPostProcessor guiclass="JSONPostProcessorGui" testclass="JSONPostProcessor" testname="JSON Extractor" enabled="true"> - <stringProp name="JSONPostProcessor.referenceNames">policies</stringProp> - <stringProp name="JSONPostProcessor.jsonPathExprs">$[*]</stringProp> - <stringProp name="JSONPostProcessor.match_numbers">-1</stringProp> - </JSONPostProcessor> - <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"></stringProp> - </ResultCollector> - <hashTree/> - <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert 10 Policies Deployed" enabled="true"> - <collectionProp name="Asserion.test_strings"> - <stringProp name="1567">10</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">8</intProp> - <stringProp name="Assertion.scope">variable</stringProp> - <stringProp name="Scope.variable">policies_matchNr</stringProp> - </ResponseAssertion> - <hashTree/> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Check Policy Deployed" 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">${PAP_HOST}</stringProp> + <stringProp name="HTTPSampler.port">${PAP_PORT}</stringProp> + <stringProp name="HTTPSampler.protocol">http</stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">policy/pap/v1/policies/deployed</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <JSONPostProcessor guiclass="JSONPostProcessorGui" testclass="JSONPostProcessor" testname="JSON Extractor" enabled="true"> + <stringProp name="JSONPostProcessor.referenceNames">policies</stringProp> + <stringProp name="JSONPostProcessor.jsonPathExprs">$[*]</stringProp> + <stringProp name="JSONPostProcessor.match_numbers">-1</stringProp> + </JSONPostProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert 10 Policies Deployed" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1567">10</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">8</intProp> + <stringProp name="Assertion.scope">variable</stringProp> + <stringProp name="Scope.variable">policies_matchNr</stringProp> + </ResponseAssertion> + <hashTree/> + </hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="CheckPDPGroupQuery" 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">${PAP_HOST}</stringProp> + <stringProp name="HTTPSampler.port">${PAP_PORT}</stringProp> + <stringProp name="HTTPSampler.protocol">http</stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">/policy/pap/v1/pdps</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <JSONPostProcessor guiclass="JSONPostProcessorGui" testclass="JSONPostProcessor" testname="JSON Extractor" enabled="true"> + <stringProp name="JSONPostProcessor.referenceNames">checkpdppolicies</stringProp> + <stringProp name="JSONPostProcessor.jsonPathExprs">$.groups[0].pdpSubgroups[0].policies[*]</stringProp> + <stringProp name="JSONPostProcessor.match_numbers">-1</stringProp> + </JSONPostProcessor> + <hashTree/> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert 10 Policies Deployed" enabled="true"> + <collectionProp name="Asserion.test_strings"> + <stringProp name="1567">10</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">8</intProp> + <stringProp name="Assertion.scope">variable</stringProp> + <stringProp name="Scope.variable">checkpdppolicies_matchNr</stringProp> + </ResponseAssertion> + <hashTree/> + </hashTree> </hashTree> - <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="CheckPDPGroupQuery" 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">${PAP_HOST}</stringProp> - <stringProp name="HTTPSampler.port">${PAP_PORT}</stringProp> - <stringProp name="HTTPSampler.protocol">http</stringProp> - <stringProp name="HTTPSampler.contentEncoding"></stringProp> - <stringProp name="HTTPSampler.path">/policy/pap/v1/pdps</stringProp> - <stringProp name="HTTPSampler.method">GET</stringProp> - <boolProp name="HTTPSampler.follow_redirects">true</boolProp> - <boolProp name="HTTPSampler.auto_redirects">false</boolProp> - <boolProp name="HTTPSampler.use_keepalive">true</boolProp> - <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> - <stringProp name="HTTPSampler.embedded_url_re"></stringProp> - <stringProp name="HTTPSampler.connect_timeout"></stringProp> - <stringProp name="HTTPSampler.response_timeout"></stringProp> - </HTTPSamplerProxy> - <hashTree> - <JSONPostProcessor guiclass="JSONPostProcessorGui" testclass="JSONPostProcessor" testname="JSON Extractor" enabled="true"> - <stringProp name="JSONPostProcessor.referenceNames">checkpdppolicies</stringProp> - <stringProp name="JSONPostProcessor.jsonPathExprs">$.groups[0].pdpSubgroups[0].policies[*]</stringProp> - <stringProp name="JSONPostProcessor.match_numbers">-1</stringProp> - </JSONPostProcessor> - <hashTree/> - <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert 10 Policies Deployed" enabled="true"> - <collectionProp name="Asserion.test_strings"> - <stringProp name="1567">10</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">8</intProp> - <stringProp name="Assertion.scope">variable</stringProp> - <stringProp name="Scope.variable">checkpdppolicies_matchNr</stringProp> - </ResponseAssertion> - <hashTree/> - </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"></stringProp> - </ResultCollector> - <hashTree/> </hashTree> <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Clear up Policies" enabled="true"/> <hashTree> @@ -392,6 +290,67 @@ </SystemSampler> <hashTree/> </hashTree> + <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Check Policy Deleted" enabled="true"/> + <hashTree> + <BeanShellSampler guiclass="BeanShellSamplerGui" testclass="BeanShellSampler" testname="Clean up variable" enabled="true"> + <stringProp name="BeanShellSampler.query">vars.put("POLICIES_UNDEPLOYED", "NotSet")</stringProp> + <stringProp name="BeanShellSampler.filename"></stringProp> + <stringProp name="BeanShellSampler.parameters"></stringProp> + <boolProp name="BeanShellSampler.resetInterpreter">false</boolProp> + </BeanShellSampler> + <hashTree/> + <WhileController guiclass="WhileControllerGui" testclass="WhileController" testname="Loop for checking policy status" enabled="true"> + <stringProp name="WhileController.condition">${__jexl3("${POLICIES_UNDEPLOYED}"!="[]")}</stringProp> + </WhileController> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Check Policy Status for undeploy" 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">${PAP_HOST}</stringProp> + <stringProp name="HTTPSampler.port">${PAP_PORT}</stringProp> + <stringProp name="HTTPSampler.protocol">http</stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">/policy/pap/v1/policies/status/</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Check empty response" enabled="true"> + <stringProp name="RegexExtractor.useHeaders">false</stringProp> + <stringProp name="RegexExtractor.refname">POLICIES_UNDEPLOYED</stringProp> + <stringProp name="RegexExtractor.regex">(\W{2})</stringProp> + <stringProp name="RegexExtractor.template">$1$</stringProp> + <stringProp name="RegexExtractor.default">NotEmpty</stringProp> + <stringProp name="RegexExtractor.match_number">1</stringProp> + </RegexExtractor> + <hashTree/> + </hashTree> + <IfController guiclass="IfControllerPanel" testclass="IfController" testname="If not undeployed, wait 2 min" enabled="true"> + <stringProp name="IfController.condition">${__jexl3("${POLICIES_UNDEPLOYED}"!="[]")}</stringProp> + <boolProp name="IfController.evaluateAll">false</boolProp> + <boolProp name="IfController.useExpression">true</boolProp> + </IfController> + <hashTree> + <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Waiting" enabled="true"> + <stringProp name="ConstantTimer.delay">120000</stringProp> + </ConstantTimer> + <hashTree/> + <DebugSampler guiclass="TestBeanGUI" testclass="DebugSampler" testname="Check vars" enabled="true"> + <boolProp name="displayJMeterProperties">false</boolProp> + <boolProp name="displayJMeterVariables">true</boolProp> + <boolProp name="displaySystemProperties">false</boolProp> + </DebugSampler> + <hashTree/> + </hashTree> + </hashTree> + </hashTree> <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Assert Policy Deleted" enabled="true"/> <hashTree> <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="CheckPDPGroupQueryForDeletedPolicy" enabled="true"> @@ -504,7 +463,7 @@ <connectTime>true</connectTime> </value> </objProp> - <stringProp name="filename">Distribution_Performance_Test.log</stringProp> + <stringProp name="filename"></stringProp> </ResultCollector> <hashTree/> </hashTree> @@ -519,6 +478,7 @@ <boolProp name="ThreadGroup.scheduler">true</boolProp> <stringProp name="ThreadGroup.duration">${DURATION}</stringProp> <stringProp name="ThreadGroup.delay">1</stringProp> + <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp> </ThreadGroup> <hashTree> <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true"> @@ -559,10 +519,15 @@ </elementProp> </collectionProp> <boolProp name="AuthManager.clearEachIteration">true</boolProp> + <boolProp name="AuthManager.controlledByThreadGroup">false</boolProp> </AuthManager> <hashTree/> <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="HealthCheck/Statistics" enabled="true"/> <hashTree> + <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true"> + <stringProp name="ConstantTimer.delay">1000</stringProp> + </ConstantTimer> + <hashTree/> <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Healthcheck" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> <collectionProp name="Arguments.arguments"/> @@ -623,10 +588,6 @@ </ResponseAssertion> <hashTree/> </hashTree> - <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true"> - <stringProp name="ConstantTimer.delay">300</stringProp> - </ConstantTimer> - <hashTree/> </hashTree> <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="true"> <boolProp name="ResultCollector.error_logging">false</boolProp> @@ -662,7 +623,7 @@ <connectTime>true</connectTime> </value> </objProp> - <stringProp name="filename">HealthcheckAndStatisticsPerformance.log</stringProp> + <stringProp name="filename"></stringProp> </ResultCollector> <hashTree/> <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true"> diff --git a/testsuites/performance/src/main/resources/testplans/removecsars.sh b/testsuites/performance/src/main/resources/testplans/removecsars.sh index e5528d81..5d9ccf6c 100755 --- a/testsuites/performance/src/main/resources/testplans/removecsars.sh +++ b/testsuites/performance/src/main/resources/testplans/removecsars.sh @@ -1,5 +1,5 @@ # ============LICENSE_START======================================================= -# Copyright (c) 2020 Nordix Foundation. +# Copyright (c) 2020-2021 Nordix Foundation. # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -16,11 +16,6 @@ # SPDX-License-Identifier: Apache-2.0 # ============LICENSE_END========================================================= -# the directory of the script -DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - -echo "${DIR}" - if [ $# -le 0 ] then echo "Usage ./removecsars.sh \$TARGETDIRECTORY" @@ -29,5 +24,3 @@ fi TARGETDIRECTORY=$1 rm -f "$TARGETDIRECTORY"/*.csar - - diff --git a/testsuites/performance/src/main/resources/testplans/run_test.sh b/testsuites/performance/src/main/resources/testplans/run_test.sh index 44a98d38..7b959587 100755 --- a/testsuites/performance/src/main/resources/testplans/run_test.sh +++ b/testsuites/performance/src/main/resources/testplans/run_test.sh @@ -27,4 +27,4 @@ POLICY_DISTRIBUTION_IP=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{ ${JMETER_HOME}/bin/jmeter -n -t "${DIR}"/performance.jmx -Jduration=14400 \ -Japihost="${POLICY_API_IP}" \ -Jpaphost="${POLICY_PAP_IP}" \ - -Jdisthost="${POLICY_DISTRIBUTION_IP}" + -Jdisthost="${POLICY_DISTRIBUTION_IP}" -l distribution_performance.jtl & diff --git a/testsuites/stability/src/main/resources/setup/config/jsonConfigs/papConfigFile.json b/testsuites/stability/src/main/resources/setup/config/jsonConfigs/papConfigFile.json index 456735be..790a8ea6 100644 --- a/testsuites/stability/src/main/resources/setup/config/jsonConfigs/papConfigFile.json +++ b/testsuites/stability/src/main/resources/setup/config/jsonConfigs/papConfigFile.json @@ -10,7 +10,7 @@ "prometheus": true }, "pdpParameters": { - "heartBeatMs": 20000, + "heartBeatMs": 300000, "updateParameters": { "maxRetryCount": 1, "maxWaitMs": 30000 diff --git a/testsuites/stability/src/main/resources/setup/config/wait_for_port.sh b/testsuites/stability/src/main/resources/setup/config/wait_for_port.sh index 63e2a493..56b5a825 100755 --- a/testsuites/stability/src/main/resources/setup/config/wait_for_port.sh +++ b/testsuites/stability/src/main/resources/setup/config/wait_for_port.sh @@ -1,6 +1,6 @@ #!/bin/sh # ============LICENSE_START==================================================== -# Copyright (C) 2020 Nordix Foundation. +# Copyright (C) 2020-2021 Nordix Foundation. # ============================================================================= # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/testsuites/stability/src/main/resources/setup/distribution/etc/logback.xml b/testsuites/stability/src/main/resources/setup/distribution/etc/logback.xml index 2b77efb6..34a40204 100644 --- a/testsuites/stability/src/main/resources/setup/distribution/etc/logback.xml +++ b/testsuites/stability/src/main/resources/setup/distribution/etc/logback.xml @@ -21,7 +21,7 @@ <configuration scan="true" scanPeriod="30 seconds" debug="false"> - <property name="logDir" value="/home/policydistribution" /> + <property name="logDir" value="/home/policydistribution/logs" /> <property name="errorLog" value="error" /> <property name="debugLog" value="debug" /> @@ -102,7 +102,7 @@ <appender-ref ref="AsyncNetworkOut" /> </logger> - <root level="INFO"> + <root level="ERROR"> <appender-ref ref="AsyncDebugOut" /> <appender-ref ref="AsyncErrorOut" /> </root> diff --git a/testsuites/stability/src/main/resources/setup/docker-compose.yml b/testsuites/stability/src/main/resources/setup/docker-compose.yml index e36a0c8b..fac04fa2 100644 --- a/testsuites/stability/src/main/resources/setup/docker-compose.yml +++ b/testsuites/stability/src/main/resources/setup/docker-compose.yml @@ -1,4 +1,4 @@ -# Copyright (C) 2020 Nordix Foundation. +# Copyright (C) 2021 Nordix Foundation. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -66,11 +66,6 @@ services: volumes: - ./config/wait_for_port.sh:/opt/app/policy/pdp-sim/bin/wait_for_port.sh:ro - ./config/jsonConfigs/pdpSimConfig.json:/opt/app/policy/pdp-sim/etc/config/OnapPfConfig.json:ro - entrypoint: /opt/app/policy/pdp-sim/bin/wait_for_port.sh - command: [ - '-c', '/opt/app/policy/pdp-sim/bin/pdp-sim.sh', - 'message-router', '3904', - ] policy-api: image: nexus3.onap.org:10001/onap/policy-api:${POLICY_API_VERSION} container_name: policy-api diff --git a/testsuites/stability/src/main/resources/setup/start.sh b/testsuites/stability/src/main/resources/setup/start.sh index 2f72cb04..e163f2b8 100755 --- a/testsuites/stability/src/main/resources/setup/start.sh +++ b/testsuites/stability/src/main/resources/setup/start.sh @@ -58,5 +58,5 @@ sudo chmod -R a+trwx /tmp docker-compose up --detach echo "" -# check if all containers are up +# check if all containers are up - db-migrator will shutdown after a while docker ps diff --git a/testsuites/stability/src/main/resources/setup/versions.sh b/testsuites/stability/src/main/resources/setup/versions.sh index 44829d15..ff156b8f 100755 --- a/testsuites/stability/src/main/resources/setup/versions.sh +++ b/testsuites/stability/src/main/resources/setup/versions.sh @@ -19,11 +19,11 @@ # update versions here export POLICY_MARIADB_VER=10.5.8 -export POLICY_DB_MIGRATOR=2.3.1-SNAPSHOT -export POLICY_API_VERSION=2.5.1-SNAPSHOT -export POLICY_PAP_VERSION=2.5.1-SNAPSHOT -export POLICY_MODELS_SIMULATOR=2.5.1-SNAPSHOT -export POLICY_DIST_VERSION=2.6.1-SNAPSHOT +export POLICY_DB_MIGRATOR=2.3.1 +export POLICY_API_VERSION=2.5.1 +export POLICY_PAP_VERSION=2.5.1 +export POLICY_MODELS_SIMULATOR=latest +export POLICY_DIST_VERSION=2.6.1 echo " MariaDB Version: ${POLICY_MARIADB_VER}" echo " Policy DB Migrator Version: ${POLICY_DB_MIGRATOR}" diff --git a/testsuites/stability/src/main/resources/testplans/README.stability.md b/testsuites/stability/src/main/resources/testplans/README.stability.md index b73d7927..e581acaf 100644 --- a/testsuites/stability/src/main/resources/testplans/README.stability.md +++ b/testsuites/stability/src/main/resources/testplans/README.stability.md @@ -6,18 +6,11 @@ Download JMeter 5.0 from https://jmeter.apache.org/download_jmeter.cgi, and extr 2. Run the setup-components script found within simulator setup. This will launch MariaDB, PDPSimulator, PAP, Policy-API and DMaap Simulator as docker containers. -3. Launch the policy distribution service by running the setup-distribution script found within distributionsetup. -If you are running all of the components locally you will need to edit the port that distribution starts on as it is -currently 6969 which conflicts with the policy API port. -This will launch policy-distribution as a docker container and takes 2 arguments, PAP IP and API IP. -If you are running locally these will be 127.0.0.1. If on a VM enter the VM IP. -``` -setup-distribution.sh 127.0.0.1 127.0.0.1 -``` +3. Launch the policy distribution service by running the start script found within setup folder. -4. Run the JMeter stability test +4. Run the JMeter stability test from testplans folder ``` -rm -f stability.log; <jmeter_dir>/bin/jmeter.sh -t stability.jmx -n -Jhost=<pdp service hostname> -Jduration=100 -l stability.log +./run_test.sh ``` Search for 'get policy failed' in the stability.log file to see if there is any errors found during the stability test. diff --git a/testsuites/stability/src/main/resources/testplans/run_test.sh b/testsuites/stability/src/main/resources/testplans/run_test.sh index 6ce32345..f59035fb 100755 --- a/testsuites/stability/src/main/resources/testplans/run_test.sh +++ b/testsuites/stability/src/main/resources/testplans/run_test.sh @@ -17,6 +17,8 @@ # SPDX-License-Identifier: Apache-2.0 # ============LICENSE_END========================================================= +echo "Starting stability test against distribution component..." + DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" JMETER_HOME=~/jmeter/apache-jmeter-5.4.1/ @@ -27,4 +29,4 @@ POLICY_DISTRIBUTION_IP=$(docker inspect -f '{{range.NetworkSettings.Networks}}{{ ${JMETER_HOME}/bin/jmeter -n -t "${DIR}"/stability.jmx -Jduration=259200 \ -Japihost="${POLICY_API_IP}" \ -Jpaphost="${POLICY_PAP_IP}" \ - -Jdisthost="${POLICY_DISTRIBUTION_IP}" + -Jdisthost="${POLICY_DISTRIBUTION_IP}" -l distribution_stability.jtl & diff --git a/testsuites/stability/src/main/resources/testplans/stability.jmx b/testsuites/stability/src/main/resources/testplans/stability.jmx index 5f800d12..0596f483 100644 --- a/testsuites/stability/src/main/resources/testplans/stability.jmx +++ b/testsuites/stability/src/main/resources/testplans/stability.jmx @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.1.1 r1855137"> +<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.4.1"> <hashTree> <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="stability test plan" enabled="true"> <stringProp name="TestPlan.comments"></stringProp> @@ -35,7 +35,7 @@ </elementProp> <elementProp name="API_HOST" elementType="Argument"> <stringProp name="Argument.name">API_HOST</stringProp> - <stringProp name="Argument.value">${__P(apihost,172.28.0.7)}</stringProp> + <stringProp name="Argument.value">${__P(apihost,172.19.0.7)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="API_PORT" elementType="Argument"> @@ -45,7 +45,7 @@ </elementProp> <elementProp name="PAP_HOST" elementType="Argument"> <stringProp name="Argument.name">PAP_HOST</stringProp> - <stringProp name="Argument.value">${__P(paphost,172.28.0.8)}</stringProp> + <stringProp name="Argument.value">${__P(paphost,172.19.0.8)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="PAP_PORT" elementType="Argument"> @@ -55,7 +55,7 @@ </elementProp> <elementProp name="DISTRIBUTION_HOST" elementType="Argument"> <stringProp name="Argument.name">DISTRIBUTION_HOST</stringProp> - <stringProp name="Argument.value">${__P(disthost,172.28.0.2)}</stringProp> + <stringProp name="Argument.value">${__P(disthost,172.19.0.2)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> <elementProp name="DISTRIBUTION_PORT" elementType="Argument"> @@ -73,6 +73,11 @@ <stringProp name="Argument.value">${__P(duration, 259200)}</stringProp> <stringProp name="Argument.metadata">=</stringProp> </elementProp> + <elementProp name="DEPLOY_STATUS" elementType="Argument"> + <stringProp name="Argument.name">DEPLOY_STATUS</stringProp> + <stringProp name="Argument.value"></stringProp> + <stringProp name="Argument.metadata">=</stringProp> + </elementProp> </collectionProp> </elementProp> <stringProp name="TestPlan.user_define_classpath"></stringProp> @@ -89,6 +94,7 @@ <boolProp name="ThreadGroup.scheduler">true</boolProp> <stringProp name="ThreadGroup.duration">${DURATION}</stringProp> <stringProp name="ThreadGroup.delay">1</stringProp> + <boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp> </ThreadGroup> <hashTree> <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true"> @@ -103,7 +109,7 @@ </elementProp> </collectionProp> </HeaderManager> - <hashTree /> + <hashTree/> <AuthManager guiclass="AuthPanel" testclass="AuthManager" testname="HTTP Authorization Manager" enabled="true"> <collectionProp name="AuthManager.auth_list"> <elementProp name="" elementType="Authorization"> @@ -129,25 +135,26 @@ </elementProp> </collectionProp> <boolProp name="AuthManager.clearEachIteration">true</boolProp> + <boolProp name="AuthManager.controlledByThreadGroup">false</boolProp> </AuthManager> - <hashTree /> - <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Delete Old CSAR" enabled="true" /> + <hashTree/> + <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Delete Old CSAR" enabled="true"/> <hashTree> <SystemSampler guiclass="SystemSamplerGui" testclass="SystemSampler" testname="Remove CSAR" enabled="true"> <boolProp name="SystemSampler.checkReturnCode">false</boolProp> <stringProp name="SystemSampler.expectedReturnCode">0</stringProp> <stringProp name="SystemSampler.command">${SCRIPT_DIR}/removecsar.sh</stringProp> <elementProp name="SystemSampler.arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> - <collectionProp name="Arguments.arguments" /> + <collectionProp name="Arguments.arguments"/> </elementProp> <elementProp name="SystemSampler.environment" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> - <collectionProp name="Arguments.arguments" /> + <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="SystemSampler.directory"></stringProp> </SystemSampler> - <hashTree /> + <hashTree/> </hashTree> - <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Add CSAR" enabled="true" /> + <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Add CSAR" enabled="true"/> <hashTree> <SystemSampler guiclass="SystemSamplerGui" testclass="SystemSampler" testname="Add CSAR script" enabled="true"> <boolProp name="SystemSampler.checkReturnCode">false</boolProp> @@ -163,48 +170,11 @@ </collectionProp> </elementProp> <elementProp name="SystemSampler.environment" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> - <collectionProp name="Arguments.arguments" /> + <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="SystemSampler.directory"></stringProp> </SystemSampler> <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"></stringProp> - </ResultCollector> - <hashTree /> <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> <collectionProp name="Asserion.test_strings"> <stringProp name="1737356164">CSAR Copied Successfully</stringProp> @@ -214,18 +184,14 @@ <boolProp name="Assertion.assume_success">false</boolProp> <intProp name="Assertion.test_type">2</intProp> </ResponseAssertion> - <hashTree /> + <hashTree/> </hashTree> </hashTree> - <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true"> - <stringProp name="ConstantTimer.delay">300</stringProp> - </ConstantTimer> - <hashTree /> - <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="HealthCheck/Statistics" enabled="true" /> + <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="HealthCheck/Statistics" enabled="true"/> <hashTree> <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Healthcheck" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> - <collectionProp name="Arguments.arguments" /> + <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="HTTPSampler.domain">${DISTRIBUTION_HOST}</stringProp> <stringProp name="HTTPSampler.port">${DISTRIBUTION_PORT}</stringProp> @@ -251,11 +217,11 @@ <boolProp name="Assertion.assume_success">false</boolProp> <intProp name="Assertion.test_type">8</intProp> </ResponseAssertion> - <hashTree /> + <hashTree/> </hashTree> <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Statistics" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> - <collectionProp name="Arguments.arguments" /> + <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="HTTPSampler.domain">${DISTRIBUTION_HOST}</stringProp> <stringProp name="HTTPSampler.port">${DISTRIBUTION_PORT}</stringProp> @@ -281,14 +247,76 @@ <boolProp name="Assertion.assume_success">false</boolProp> <intProp name="Assertion.test_type">8</intProp> </ResponseAssertion> - <hashTree /> + <hashTree/> + </hashTree> + </hashTree> + <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Check for Policy Deployment" enabled="true"/> + <hashTree> + <JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="Clean check variables" enabled="true"> + <stringProp name="cacheKey">true</stringProp> + <stringProp name="filename"></stringProp> + <stringProp name="parameters"></stringProp> + <stringProp name="script">vars.put("DEPLOY_STATUS", "notset");</stringProp> + <stringProp name="scriptLanguage">beanshell</stringProp> + </JSR223Sampler> + <hashTree/> + <WhileController guiclass="WhileControllerGui" testclass="WhileController" testname="Loop for Policy Deploy" enabled="true"> + <stringProp name="WhileController.condition">${__jexl3("${DEPLOY_STATUS}"!="true")}</stringProp> + </WhileController> + <hashTree> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Check Policy Deployed" 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">${PAP_HOST}</stringProp> + <stringProp name="HTTPSampler.port">${PAP_PORT}</stringProp> + <stringProp name="HTTPSampler.protocol">http</stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">/policy/pap/v1/policies/status/defaultGroup/operational.apex.sampledomain/1.0.0</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract Deploy status" enabled="true"> + <stringProp name="RegexExtractor.useHeaders">false</stringProp> + <stringProp name="RegexExtractor.refname">DEPLOY_STATUS</stringProp> + <stringProp name="RegexExtractor.regex">"deploy":(.+?),"state":"SUCCESS"</stringProp> + <stringProp name="RegexExtractor.template">$1$</stringProp> + <stringProp name="RegexExtractor.default">NotFound</stringProp> + <stringProp name="RegexExtractor.match_number">1</stringProp> + </RegexExtractor> + <hashTree/> + </hashTree> + <IfController guiclass="IfControllerPanel" testclass="IfController" testname="If not valid, wait a min" enabled="true"> + <stringProp name="IfController.condition">${__jexl3("${DEPLOY_STATUS}"!="true")}</stringProp> + <boolProp name="IfController.evaluateAll">false</boolProp> + <boolProp name="IfController.useExpression">true</boolProp> + </IfController> + <hashTree> + <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Wait a minute" enabled="true"> + <stringProp name="ConstantTimer.delay">60000</stringProp> + </ConstantTimer> + <hashTree/> + <DebugSampler guiclass="TestBeanGUI" testclass="DebugSampler" testname="Waiting" enabled="true"> + <boolProp name="displayJMeterProperties">false</boolProp> + <boolProp name="displayJMeterVariables">true</boolProp> + <boolProp name="displaySystemProperties">false</boolProp> + </DebugSampler> + <hashTree/> + </hashTree> </hashTree> </hashTree> - <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Assert Policy Created" enabled="true" /> + <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Assert Policy Deployment" enabled="true"/> <hashTree> - <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="CheckPDPGroupQuery" enabled="true"> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Assert PDP Group Query" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> - <collectionProp name="Arguments.arguments" /> + <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="HTTPSampler.domain">${PAP_HOST}</stringProp> <stringProp name="HTTPSampler.port">${PAP_PORT}</stringProp> @@ -313,48 +341,11 @@ <boolProp name="INVERT">false</boolProp> <boolProp name="ISREGEX">false</boolProp> </JSONPathAssertion> - <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"></stringProp> - </ResultCollector> - <hashTree /> + <hashTree/> </hashTree> - <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Check Policy Deployed" enabled="true"> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Assert PoliciesDeployed" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> - <collectionProp name="Arguments.arguments" /> + <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="HTTPSampler.domain">${PAP_HOST}</stringProp> <stringProp name="HTTPSampler.port">${PAP_PORT}</stringProp> @@ -379,7 +370,7 @@ <boolProp name="INVERT">false</boolProp> <boolProp name="ISREGEX">false</boolProp> </JSONPathAssertion> - <hashTree /> + <hashTree/> <JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Assert Policy ID" enabled="true"> <stringProp name="JSON_PATH">$[:2].policy-id</stringProp> <stringProp name="EXPECTED_VALUE">operational.apex.sampledomain</stringProp> @@ -388,55 +379,14 @@ <boolProp name="INVERT">false</boolProp> <boolProp name="ISREGEX">false</boolProp> </JSONPathAssertion> - <hashTree /> + <hashTree/> </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"></stringProp> - </ResultCollector> - <hashTree /> - <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Constant Timer" enabled="true"> - <stringProp name="ConstantTimer.delay">10000</stringProp> - </ConstantTimer> - <hashTree /> </hashTree> - <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Clear up Policies" enabled="true" /> + <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Process Undeploy" enabled="true"/> <hashTree> <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Undeploy Policy " enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> - <collectionProp name="Arguments.arguments" /> + <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="HTTPSampler.domain">${PAP_HOST}</stringProp> <stringProp name="HTTPSampler.port">${PAP_PORT}</stringProp> @@ -453,53 +403,89 @@ <stringProp name="HTTPSampler.response_timeout"></stringProp> </HTTPSamplerProxy> <hashTree> - <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> + <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Assert Undeploy Accepted" enabled="true"> <collectionProp name="Asserion.test_strings"> - <stringProp name="49586">202</stringProp> + <stringProp name="49588">202</stringProp> </collectionProp> <stringProp name="Assertion.custom_message"></stringProp> <stringProp name="Assertion.test_field">Assertion.response_code</stringProp> <boolProp name="Assertion.assume_success">false</boolProp> <intProp name="Assertion.test_type">8</intProp> </ResponseAssertion> - <hashTree /> + <hashTree/> </hashTree> - <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Delete Policy" 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">${API_HOST}</stringProp> - <stringProp name="HTTPSampler.port">${API_PORT}</stringProp> - <stringProp name="HTTPSampler.protocol">http</stringProp> - <stringProp name="HTTPSampler.contentEncoding"></stringProp> - <stringProp name="HTTPSampler.path">/policy/api/v1/policytypes/operational.apex.sampledomain/versions/1.0.0/policies/operational.apex.sampledomain/versions/1.0.0</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> + <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Check for Policy Undeploy" enabled="true"/> + <hashTree> + <JSR223Sampler guiclass="TestBeanGUI" testclass="JSR223Sampler" testname="Clean check variables" enabled="true"> + <stringProp name="cacheKey">true</stringProp> + <stringProp name="filename"></stringProp> + <stringProp name="parameters"></stringProp> + <stringProp name="script">vars.put("DEPLOY_STATUS", "notset");</stringProp> + <stringProp name="scriptLanguage">groovy</stringProp> + </JSR223Sampler> + <hashTree/> + <WhileController guiclass="WhileControllerGui" testclass="WhileController" testname="Loop for Policy Status" enabled="true"> + <stringProp name="WhileController.condition">${__jexl3("${DEPLOY_STATUS}"!="[]")}</stringProp> + </WhileController> <hashTree> - <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Response Assertion" enabled="true"> - <collectionProp name="Asserion.test_strings"> - <stringProp name="49586">200</stringProp> - </collectionProp> - <stringProp name="Assertion.custom_message"></stringProp> - <stringProp name="Assertion.test_field">Assertion.response_code</stringProp> - <boolProp name="Assertion.assume_success">false</boolProp> - <intProp name="Assertion.test_type">8</intProp> - </ResponseAssertion> - <hashTree /> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Check Policy Undeployed" 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">${PAP_HOST}</stringProp> + <stringProp name="HTTPSampler.port">${PAP_PORT}</stringProp> + <stringProp name="HTTPSampler.protocol">http</stringProp> + <stringProp name="HTTPSampler.contentEncoding"></stringProp> + <stringProp name="HTTPSampler.path">/policy/pap/v1/policies/status/</stringProp> + <stringProp name="HTTPSampler.method">GET</stringProp> + <boolProp name="HTTPSampler.follow_redirects">true</boolProp> + <boolProp name="HTTPSampler.auto_redirects">false</boolProp> + <boolProp name="HTTPSampler.use_keepalive">true</boolProp> + <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp> + <stringProp name="HTTPSampler.embedded_url_re"></stringProp> + <stringProp name="HTTPSampler.connect_timeout"></stringProp> + <stringProp name="HTTPSampler.response_timeout"></stringProp> + </HTTPSamplerProxy> + <hashTree> + <RegexExtractor guiclass="RegexExtractorGui" testclass="RegexExtractor" testname="Extract Deploy status" enabled="true"> + <stringProp name="RegexExtractor.useHeaders">false</stringProp> + <stringProp name="RegexExtractor.refname">DEPLOY_STATUS</stringProp> + <stringProp name="RegexExtractor.regex">(\W{2})</stringProp> + <stringProp name="RegexExtractor.template">$1$</stringProp> + <stringProp name="RegexExtractor.default">NotFound</stringProp> + <stringProp name="RegexExtractor.match_number">1</stringProp> + </RegexExtractor> + <hashTree/> + </hashTree> + <IfController guiclass="IfControllerPanel" testclass="IfController" testname="If not valid, wait a min" enabled="true"> + <stringProp name="IfController.condition">${__jexl3("${DEPLOY_STATUS}"!="[]")}</stringProp> + <boolProp name="IfController.evaluateAll">false</boolProp> + <boolProp name="IfController.useExpression">true</boolProp> + </IfController> + <hashTree> + <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Wait a minute" enabled="true"> + <stringProp name="ConstantTimer.delay">60000</stringProp> + </ConstantTimer> + <hashTree/> + <DebugSampler guiclass="TestBeanGUI" testclass="DebugSampler" testname="Waiting" enabled="true"> + <boolProp name="displayJMeterProperties">false</boolProp> + <boolProp name="displayJMeterVariables">true</boolProp> + <boolProp name="displaySystemProperties">false</boolProp> + </DebugSampler> + <hashTree/> + </hashTree> </hashTree> </hashTree> - <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Assert Policy Deleted" enabled="true" /> + <GenericController guiclass="LogicControllerGui" testclass="GenericController" testname="Assert Policy Deleted" enabled="true"/> <hashTree> - <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="CheckPDPGroupQueryForDeletedPolicy" enabled="true"> + <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Wait 2 minutes" enabled="true"> + <stringProp name="ConstantTimer.delay">120000</stringProp> + </ConstantTimer> + <hashTree/> + <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Assert PDP Group Query for Deleted Policy" enabled="true"> <elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> - <collectionProp name="Arguments.arguments" /> + <collectionProp name="Arguments.arguments"/> </elementProp> <stringProp name="HTTPSampler.domain">${PAP_HOST}</stringProp> <stringProp name="HTTPSampler.port">${PAP_PORT}</stringProp> @@ -516,7 +502,7 @@ <stringProp name="HTTPSampler.response_timeout"></stringProp> </HTTPSamplerProxy> <hashTree> - <JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Assert Policy in apex subgroup" enabled="true"> + <JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Assert Policy not in apex subgroup" enabled="true"> <stringProp name="JSON_PATH">$.groups[0].pdpSubgroups[0].policies</stringProp> <stringProp name="EXPECTED_VALUE">operational.apex.sampledomain</stringProp> <boolProp name="JSONVALIDATION">false</boolProp> @@ -524,7 +510,7 @@ <boolProp name="INVERT">false</boolProp> <boolProp name="ISREGEX">false</boolProp> </JSONPathAssertion> - <hashTree /> + <hashTree/> </hashTree> </hashTree> <ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true"> @@ -563,7 +549,7 @@ </objProp> <stringProp name="filename"></stringProp> </ResultCollector> - <hashTree /> + <hashTree/> <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="true"> <boolProp name="ResultCollector.error_logging">false</boolProp> <objProp> @@ -598,9 +584,9 @@ <connectTime>true</connectTime> </value> </objProp> - <stringProp name="filename">distribution_stability.jtl</stringProp> + <stringProp name="filename"></stringProp> </ResultCollector> - <hashTree /> + <hashTree/> </hashTree> </hashTree> </hashTree> |