Policy PAP component
~~~~~~~~~~~~~~~~~~~~
-72 Hours Stability Test of PAP
-++++++++++++++++++++++++++++++
+Both the Performance and the Stability tests were executed by performing requests
+against Policy components installed as part of a full ONAP OOM deployment in Nordix lab.
-Introduction
-------------
-
-The 72 hour Stability Test for PAP has the goal of introducing a steady flow of transactions initiated from a test client server running JMeter for the duration of 72 hours.
-
-Setup details
--------------
-
-The stability test is performed on VM's running in OpenStack cloud environment.
-
-There are 2 seperate VM's, one for running PAP & other one for running JMeter to simulate steady flow of transactions.
-
-All the dependencies like mariadb, dmaap simulator, pdp simulator & policy/api component are installed in the VM having JMeter.
-
-For simplicity lets assume
-
-VM1 will be running JMeter, MariaDB, DMaaP simulator, PDP simulator & API component.
-
-VM2 will be running only PAP component.
-
-**OpenStack environment details**
-
-Version: Mitaka
-
-**PAP VM details (VM2)**
-
-OS:Ubuntu 16.04 LTS
-
-CPU: 4 core
-
-RAM: 4 GB
-
-HardDisk: 40 GB
-
-Docker Version: 18.09.6
-
-Java: openjdk version "1.8.0_212"
-
-**JMeter VM details (VM1)**
-
-OS: Ubuntu 16.04 LTS
-
-CPU: 4 core
-
-RAM: 4 GB
-
-HardDisk: 40 GB
+Setup Details
++++++++++++++
-Docker Version: 18.09.6
+- Policy-PAP along with all policy components deployed as part of a full ONAP OOM deployment.
+- A second instance of APEX-PDP is spun up in the setup. Update the configuration file(OnapPfConfig.json) such that the PDP can register to the new group created by PAP in the tests.
+- Both tests were run via jMeter, which was installed on a separate VM.
-Java: openjdk version "1.8.0_212"
+Stability Test of PAP
++++++++++++++++++++++
-JMeter: 5.1.1
-
-Install Docker in VM1 & VM2
----------------------------
-
-Make sure to execute below commands in VM1 & VM2 both.
-
-Make the etc/hosts entries
-
-.. code-block:: bash
+Test Plan
+---------
+The 72 hours stability test ran the following steps sequentially in a single threaded loop.
- $ echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo tee -a /etc/hosts
-
-Make the DNS entries
+- **Create Policy defaultDomain** - creates an operational policy using policy/api component
+- **Create Policy sampleDomain** - creates an operational policy using policy/api component
+- **Check Health** - checks the health status of pap
+- **Check Statistics** - checks the statistics of pap
+- **Change state to ACTIVE** - changes the state of defaultGroup PdpGroup to ACTIVE
+- **Check PdpGroup Query** - makes a PdpGroup query request and verifies that PdpGroup is in the ACTIVE state.
+- **Deploy defaultDomain Policy** - deploys the policy defaultDomain in the existing PdpGroup
+- **Create/Update PDP Group** - creates a new PDPGroup named sampleGroup.
+- **Check PdpGroup Query** - makes a PdpGroup query request and verifies that 2 PdpGroups are in the ACTIVE state and defaultGroup has a policy deployed on it.
+- **Deployment Update sampleDomain** - deploys the policy sampleDomain in sampleGroup PdpGroup using pap api
+- **Check PdpGroup Query** - makes a PdpGroup query request and verifies that the defaultGroup has a policy defaultDomain deployed on it and sampleGroup has policy sampleDomain deployed on it.
+- **Check Consolidated Health** - checks the consolidated health status of all policy components.
+- **Check Deployed Policies** - checks for all the deployed policies using pap api.
+- **Undeploy Policy sampleDomain** - undeploys the policy sampleDomain from sampleGroup PdpGroup using pap api
+- **Undeploy Default Policy** - undeploys the policy defaultDomain from PdpGroup
+- **Change state to PASSIVE(sampleGroup)** - changes the state of sampleGroup PdpGroup to PASSIVE
+- **Delete PdpGroup SampleGroup** - delete the sampleGroup PdpGroup using pap api
+- **Change State to PASSIVE(defaultGroup)** - changes the state of defaultGroup PdpGroup to PASSIVE
+- **Check PdpGroup Query** - makes a PdpGroup query request and verifies that PdpGroup is in the PASSIVE state.
+- **Delete Policy defaultDomain** - deletes the operational policy defaultDomain using policy/api component
+- **Delete Policy sampleDomain** - deletes the operational policy sampleDomain using policy/api component
-.. code-block:: bash
+The following steps can be used to configure the parameters of test plan.
- $ echo "nameserver <PrimaryDNSIPIP>" >> /etc/resolvconf/resolv.conf.d/head
- $ echo "nameserver <SecondaryDNSIP>" >> /etc/resolvconf/resolv.conf.d/head
- $ resolvconf -u
-
-Update the ubuntu software installer
+- **HTTP Authorization Manager** - used to store user/password authentication details.
+- **HTTP Header Manager** - used to store headers which will be used for making HTTP requests.
+- **User Defined Variables** - used to store following user defined parameters.
-.. code-block:: bash
+=========== ===================================================================
+ **Name** **Description**
+=========== ===================================================================
+ PAP_HOST IP Address or host name of PAP component
+ PAP_PORT Port number of PAP for making REST API calls
+ API_HOST IP Address or host name of API component
+ API_PORT Port number of API for making REST API calls
+=========== ===================================================================
- $ apt-get update
-
-Check and Install Java
+The test was run in the background via "nohup", to prevent it from being interrupted:
.. code-block:: bash
- $ apt-get install -y openjdk-8-jdk
- $ java -version
-
-Ensure that the Java version that is executing is OpenJDK version 8
-
-
-Check and install docker
+ nohup ./jMeter/apache-jmeter-5.3/bin/jmeter.sh -n -t stability.jmx -l testresults.jtl
-.. code-block:: bash
-
- $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- $ add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- $ apt-get update
- $ apt-cache policy docker-ce
- $ apt-get install -y docker-ce
- $ systemctl status docker
- $ docker ps
+Test Results
+------------
-Change the permissions of the Docker socket file
+**Summary**
-.. code-block:: bash
+Stability test plan was triggered for 72 hours.
- $ chmod 777 /var/run/docker.sock
-
-Check the status of the Docker service and ensure it is running correctly
+.. Note::
-.. code-block:: bash
+ .. container:: paragraph
- $ service docker status
- $ docker ps
+ As part of the OOM deployment, another APEX-PDP pod is spun up with the pdpGroup name specified as 'sampleGroup'.
+ After creating the new group called 'sampleGroup' as part of the test, a time delay of 2 minutes is added,
+ so that the pdp is registered to the newly created group.
+ This has resulted in a spike in the Average time taken per request. But, this is required to make proper assertions,
+ and also for the consolidated health check.
-Install JMeter in VM1
----------------------
+**Test Statistics**
-Download & install JMeter
+======================= ================= ================== ==================================
+**Total # of requests** **Success %** **Error %** **Average time taken per request**
+======================= ================= ================== ==================================
+35059 99.99 % 0.01 % 354 ms
+======================= ================= ================== ==================================
-.. code-block:: bash
+.. Note::
- $ mkdir jMeter
- $ cd jMeter
- $ wget http://mirrors.whoishostingthis.com/apache//jmeter/binaries/apache-jmeter-5.1.1.zip
- $ unzip apache-jmeter-5.1.1.zip
+ .. container:: paragraph
-Run JMeter
+ There were only 3 failures during the 72 hours test, and all these 3 happened because the 2nd PDP instance didn't
+ get registered in time to the new group created, and as a result, the PdpGroup Query failed. This can be ignored,
+ as it was only a matter of one missing heartbeat over a period of 24 hours.
-.. code-block:: bash
+**JMeter Screenshot**
- $ /home/ubuntu/jMeter/apache-jmeter-5.1.1/bin/jmeter
+.. image:: images/pap-s3p-jm-stability.JPG
-The above command will load the JMeter UI. Then navigate to File ā Open ā Browse and select the test plan jmx file to open.
-The jmx file is present in the policy/pap git repository.
+**Memory and CPU usage**
-Install simulators in VM1
--------------------------
+The memory and CPU usage can be monitored by running "top" command on the PAP pod. A snapshot is taken before and after test execution to monitor the changes in resource utilization.
-For installing simulator, there is a script placed at `install simulator script <https://gerrit.onap.org/r/gitweb?p=policy/pap.git;a=blob;f=testsuites/stability/src/main/resources/simulatorsetup/setup_components.sh;h=86de3c1efcb468431a2395eef610db209a613fc3;hb=refs/heads/master>`_
+Memory and CPU usage before test execution:
-Copy the script & all related files in virtual machine and run it.
+.. image:: images/pap-s3p-top-before.JPG
-After installation make sure that following 4 docker containers are up and running.
+Memory and CPU usage after test execution:
-.. code-block:: bash
+.. image:: images/pap-s3p-top-after.JPG
- root@policytest-policytest-3-p5djn6as2477:/home/ubuntu/simulator# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 887efa8dac12 nexus3.onap.org:10001/onap/policy-api "bash ./policy-api.sh" 6 days ago Up 6 days 0.0.0.0:6969->6969/tcp policy-api
- 0a931c0a63ac pdp/simulator:latest "bash pdp-sim.sh" 6 days ago Up 6 days pdp-simulator
- a41adcb32afb dmaap/simulator:latest "bash dmaap-sim.sh" 6 days ago Up 6 days 0.0.0.0:3904->3904/tcp dmaap-simulator
- d52d6b750ba0 mariadb:10.2.14 "docker-entrypoint.sā¦" 6 days ago Up 6 days 0.0.0.0:3306->3306/tcp mariadb
+The CPU and memory usage by the PAP pod is consistent over the period of 72 hours test execution.
-Install PAP in VM2
-------------------
+Performance Test of PAP
+++++++++++++++++++++++++
-For installing PAP, there is a script placed at `install pap script <https://gerrit.onap.org/r/gitweb?p=policy/pap.git;a=blob;f=testsuites/stability/src/main/resources/papsetup/setup_pap.sh;h=dc5e69e76da9f48f6b23cc012e14148f1373d1e1;hb=refs/heads/master>`_
+Introduction
+------------
-Copy the script & all related files in virtual machine and run it.
+Performance test of PAP has the goal of testing the min/avg/max processing time and rest call throughput for all the requests with multiple requests at the same time.
-After installation make sure that following docker container is up and running.
+Setup Details
+-------------
-.. code-block:: bash
+The performance test is performed on a similar setup as Stability test. The JMeter VM will be sending a large number of REST requests to the PAP component and collecting the statistics.
- root@policytest-policytest-0-uc3y2h5x6p4j:/home/ubuntu/pap# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 42ac0ed4b713 nexus3.onap.org:10001/onap/policy-pap:2.0.0-SNAPSHOT-latest "bash ./policy-pap.sh" 3 days ago Up 3 days 0.0.0.0:6969->6969/tcp, 0.0.0.0:9090->9090/tcp policy-pap
-Install & configure visualVM in VM2
------------------------------------
+Test Plan
+---------
-visualVM needs to be installed in the virtual machine having PAP. It will be used to monitor CPU, Memory, GC for PAP while stability test is running.
+Performance test plan is the same as the stability test plan above except for the few differences listed below.
-Install visualVM
+- Increase the number of threads up to 5 (simulating 5 users' behaviours at the same time).
+- Reduce the test time to 2 hours.
+- Usage of counters to create different groups by the 'Create/Update PDP Group' test case.
+- Removed the delay to wait for the new PDP to be registered. Also removed the corresponding assertions where the Pdp instance registration to the newly created group is validated.
-.. code-block:: bash
+Run Test
+--------
- $ sudo apt-get install visualvm
-
-Run few commands to configure permissions
+Running/Triggering the performance test will be the same as the stability test. That is, launch JMeter pointing to corresponding *.jmx* test plan. The *API_HOST* , *API_PORT* , *PAP_HOST* , *PAP_PORT* are already set up in *.jmx*.
.. code-block:: bash
- $ cd /usr/lib/jvm/java-8-openjdk-amd64/bin/
- $ sudo touch visualvm.policy
- $ sudo chmod 777 visualvm.policy
-
- $ vi visualvm.policy
-
- Add the following in visualvm.policy
-
-
- grant codebase "file:/usr/lib/jvm/java-8-openjdk-amd64/lib/tools.jar" {
- permission java.security.AllPermission;
- };
-
-Run following commands to start jstatd using port 1111
+ nohup ./jMeter/apache-jmeter-5.3/bin/jmeter.sh -n -t perf.jmx -l perftestresults.jtl
-.. code-block:: bash
-
- $ cd /usr/lib/jvm/java-8-openjdk-amd64/bin/
- $ ./jstatd -p 1111 -J-Djava.security.policy=visualvm.policy &
-
-Run visualVM locally to connect to remote VM2
+Once the test execution is completed, execute the below script to get the statistics:
.. code-block:: bash
- # On your windows machine or your linux box locally, launch visualVM
-
-Connect to jstatd & remote apex-pdp JVM
-
- 1. Right click on "Remote" in the left panel of the screen and select "Add Remote Host..."
- 2. Enter the IP address of VM2.
- 3. Right click on IP address, select "Add JMX Connection..."
- 4. Enter the VM2 IP Address (from step 2) <IP address>:9090 ( for example -10.12.6.201:9090) and click OK.
- 5. Double click on the newly added nodes under "Remote" to start monitoring CPU, Memory & GC.
-
-Sample Screenshot of visualVM
-
-.. image:: images/pap-s3p-vvm-sample.png
-
-Test Plan
----------
-
-The 72 hours stability test will run the following steps sequentially in a single threaded loop.
-
-- **Create Policy Type** - creates an operational policy type using policy/api component
-- **Create Policy** - creates an operational policy using the policy type create in above step using policy/api component
-- **Check Health** - checks the health status of pap
-- **Check Statistics** - checks the statistics of pap
-- **Change state to ACTIVE** - changes the state of PdpGroup to ACTIVE
-- **Check PdpGroup Query** - makes a PdpGroup query request and verify that PdpGroup is in ACTIVE state.
-- **Deploy Policy** - deploys the policy in PdpGroup
-- **Undeploy Policy** - undeploy the policy from PdpGroup
-- **Change state to PASSIVE** - changes the state of PdpGroup to PASSIVE
-- **Check PdpGroup Query** - makes a PdpGroup query request and verify that PdpGroup is in PASSIVE state.
-- **Delete Policy** - deletes the operational policy using policy/api component
-- **Delete Policy Type** - deletes the operational policy type using policy/api component
-
-The following steps can be used to configure the parameters of test plan.
-
-- **HTTP Authorization Manager** - used to store user/password authentication details.
-- **HTTP Header Manager** - used to store headers which will be used for making HTTP requests.
-- **User Defined Variables** - used to store following user defined parameters.
-
-========== ===============================================
- **Name** **Description**
-========== ===============================================
- PAP_HOST IP Address or host name of PAP component
- PAP_PORT Port number of PAP for making REST API calls
- API_HOST IP Address or host name of API component
- API_PORT Port number of API for making REST API calls
-========== ===============================================
-
-Screenshot of PAP stability test plan
-
-.. image:: images/pap-s3p-testplan.png
+ $ cd /home/ubuntu/pap/testsuites/performance/src/main/resources/testplans
+ $ ./results.sh /home/ubuntu/pap_perf/resultTree.log
Test Results
------------
-**Summary**
-
-Stability test plan was triggered for 72 hours.
+Test results are shown as below.
**Test Statistics**
-======================= ================= ================== ==================================
-**Total # of requests** **Success %** **Error %** **Average time taken per request**
-======================= ================= ================== ==================================
-178208 100 % 0 % 76 ms
-======================= ================= ================== ==================================
-
-**VisualVM Screenshot**
-
-.. image:: images/pap-s3p-vvm-1.png
-.. image:: images/pap-s3p-vvm-2.png
+======================= ================= ================== ================================== =======================
+**Total # of requests** **Success %** **Error %** **Average time taken per request** **Requests/sec**
+======================= ================= ================== ================================== =======================
+44293 100 % 0.00 % 943 ms 8858
+======================= ================= ================== ================================== =======================
**JMeter Screenshot**
-.. image:: images/pap-s3p-jm-1.png
-.. image:: images/pap-s3p-jm-1.png
+.. image:: images/pap-s3p-jm-performance.JPG
\ No newline at end of file