.. This work is licensed under a
.. Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0

.. _pap-s3p-label:

.. toctree::
   :maxdepth: 2

Policy PAP component
~~~~~~~~~~~~~~~~~~~~

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.

Setup Details
+++++++++++++

- 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.

Stability Test of PAP
+++++++++++++++++++++

Test Plan
---------
The 72 hours stability test ran the following steps sequentially in a single threaded loop.

Setup Phase (steps running only once)
"""""""""""""""""""""""""""""""""""""

- **Create Policy for defaultGroup** - creates an operational policy using policy/api component
- **Create NodeTemplate metadata for sampleGroup policy** - creates a node template containing metadata using policy/api component
- **Create Policy for sampleGroup** - creates an operational policy that refers to the metadata created above using policy/api component
- **Change defaultGroup state to ACTIVE** - changes the state of defaultGroup PdpGroup to ACTIVE
- **Create/Update PDP Group** - creates a new PDPGroup named sampleGroup.
      A second instance of the PDP that is already spun up gets registered to this new group
- **Check PdpGroup Query** - makes a PdpGroup query request and verifies that both PdpGroups are in ACTIVE state.

PAP Test Flow (steps running in a loop for 72 hours)
""""""""""""""""""""""""""""""""""""""""""""""""""""

- **Check Health** - checks the health status of pap
- **PAP Metrics** - Fetch prometheus metrics before the deployment/undeployment cycle
      Save different counters such as deploy/undeploy-success/failure counters at API and engine level.
- **Check PdpGroup Query** - makes a PdpGroup query request and verifies that both PdpGroups are in the ACTIVE state.
- **Deploy Policy for defaultGroup** - deploys the policy defaultDomain to defaultGroup
- **Check status of defaultGroup policy** - checks the status of defaultGroup PdpGroup with the defaultDomain policy 1.0.0.
- **Check PdpGroup Audit defaultGroup** - checks the audit information for the defaultGroup PdpGroup.
- **Check PdpGroup Audit Policy (defaultGroup)** - checks the audit information for the defaultGroup PdpGroup with the defaultDomain policy 1.0.0.
- **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 for sampleGroup policy** - deploys the policy sampleDomain in sampleGroup PdpGroup using pap api
- **Check status of sampleGroup** - checks the status of the sampleGroup PdpGroup.
- **Check status of PdpGroups** - checks the status of both PdpGroups.
- **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 Audit** - checks the audit information for all PdpGroups.
- **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 in sampleGroup** - undeploys the policy sampleDomain from sampleGroup PdpGroup using pap api
- **Undeploy policy in defaultGroup** - undeploys the policy defaultDomain from PdpGroup
- **Check status of policies** - checks the status of all policies and make sure both the policies are undeployed
- **Check PdpGroup Query** - makes a PdpGroup query request and verifies that PdpGroup is in the PASSIVE state.
- **PAP Metrics after deployments** - Fetch prometheus metrics after the deployment/undeployment cycle
      Save the new counter values such as deploy/undeploy-success/failure counters at API and engine level, and check that the deploySuccess and undeploySuccess counters are increased by 2.

.. Note::
   To avoid putting a large Constant Timer value after every deployment/undeployment, the status API is polled until the deployment/undeployment
   is successfully completed, or until a timeout. This is to make sure that the operation is completed successfully and the PDPs gets enough time to respond back.
   Otherwise, before the deployment is marked successful by PAP, an undeployment could be triggered as part of other tests,
   and the operation's corresponding prometheus counter at engine level will not get updated.

Teardown Phase (steps running only once after PAP Test Flow is completed)
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

- **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
- **Delete policy created for defaultGroup** - deletes the operational policy defaultDomain using policy/api component
- **Delete Policy created for sampleGroup** - deletes the operational policy sampleDomain using policy/api component
- **Delete Nodetemplate metadata for sampleGroup policy** - deleted the nodetemplate containing metadata for sampleGroup policy

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
===========   ===================================================================

The test was run in the background via "nohup", to prevent it from being interrupted:

.. code-block:: bash

    nohup apache-jmeter-5.5/bin/jmeter -n -t stability.jmx -l stabilityTestResults.jtl &

Test Results
------------

**Summary**

Stability test plan was triggered for 72 hours. There were no failures during the 72 hours test.


**Test Statistics**

=======================  =================  ==================  ==================================
**Total # of requests**  **Success %**      **Error %**         **Average time taken per request**
=======================  =================  ==================  ==================================
    102290                    100 %             0.15 %              782 ms
=======================  =================  ==================  ==================================

.. Note::

   There were 0.15% failures during the 72 hours test, due to the timing between the update of the metric "undeploySuccessCount" and the Undeploy itself.
   We suggest for the next test to increase the timeout timing up to 130s between "Undeploy policy in defaultGroup" and "PAP Metrics after deployments"

**JMeter Screenshot**

.. image:: pap-s3p-results/pap_stability_jmeter_results.png

**Memory and CPU usage**

The memory and CPU usage can be monitored by running "top" command in the PAP pod.
A snapshot is taken before and after test execution to monitor the changes in resource utilization.
Prometheus metrics is also collected before and after the test execution.

Memory and CPU usage before test execution:

.. image:: pap-s3p-results/pap_top_before_72h.png

:download:`Prometheus metrics before 72h test  <pap-s3p-results/pap_metrics_before_72h.txt>`

Memory and CPU usage after test execution:

.. image:: pap-s3p-results/pap_top_after_72h.png

:download:`Prometheus metrics after 72h test  <pap-s3p-results/pap_metrics_after_72h.txt>`

Performance Test of PAP
++++++++++++++++++++++++

Introduction
------------

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.

Setup Details
-------------

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.


Test Plan
---------

Performance test plan is the same as the stability test plan above except for the few differences listed below.

- Increase the number of threads up to 10 (simulating 10 users' behaviours at the same time).
- Reduce the test time to 2 hours.
- Usage of counters (simulating each user) to create different pdpGroups, update their state and later delete them.
- Removed the tests to deploy policies to newly created groups as this will need a larger setup with multiple pdps registered to each group, which will also slow down the performance test with the time needed for registration process etc.
- Usage of counters (simulating each user) to create different drools policies and deploy them to defaultGroup.
      In the test, a thread count of 10 is used resulting in 10 different drools policies getting deployed and undeployed continuously for 2 hours.
      Other standard operations like checking the deployment status of policies, checking the metrics, health etc remains.

Run Test
--------

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

    nohup apache-jmeter-5.5/bin/jmeter -n -t performance.jmx -l performanceTestResults.jtl &

Test Results
------------

Test results are shown as below.

**Test Statistics**

=======================  =================  ==================  ==================================
**Total # of requests**  **Success %**      **Error %**         **Average time taken per request**
=======================  =================  ==================  ==================================
19886                    100 %              0.00 %              3107 ms
=======================  =================  ==================  ==================================

**JMeter Screenshot**

.. image:: pap-s3p-results/pap_performance_jmeter_results.png
