Fix s3p document & images
[policy/parent.git] / docs / development / devtools / distribution-s3p.rst
index 093e28c..015e10b 100644 (file)
 Policy Distribution component
 #############################
 
-72 Hours Stability Test of Distribution
-+++++++++++++++++++++++++++++++++++++++
+72h Stability and 4h Performance Tests of Distribution
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
-Introduction
-------------
-The 72 hour Stability Test for policy distribution has the goal of introducing a steady flow of transactions initiated from a test client server running JMeter. The policy distribution is configured with a special FileSystemReception plugin to monitor a local directory for newly added csar files to be processed by itself. The input CSAR will be added/removed by the test client(JMeter) and the result will be pulled from the backend(PAP and PolicyAPI) by the test client(JMeter).
+VM Details
+----------
 
+The stability and performance tests are performed on VM's running in the OpenStack cloud
+environment in the ONAP integration lab. There are two separate VMs, one for running backend policy
+services which policy distribution needs, and the other for the policy distribution service itself
+and Jmeter.
 
-The test will be performed in an environment where Jmeter will continuously add/remove a test csar into the special directory where policy distribuion is monitoring and will then get the processed results from PAP and PolicyAPI to verify the successful deployment of the policy. The policy will then be undeployed and the test will loop continuously until 72 hours have elapsed.
+**OpenStack environment details**
 
-Setup details
--------------
+- Version: Windriver Titanium
 
-The stability test is performed on VM's running in the OpenStack cloud environment in the ONAP integration lab. There are 2 separate VMs, one for running backend policy services which policy distribution needs, and the other is for policy distribution service itself and Jmeter.
+**Policy Backend VM details (VM1)**
 
-**OpenStack environment details**
+- OS: Ubuntu 18.04.5 LTS
+- CPU: 8 core, Intel Xeon E3-12xx v2 (Ivy Bridge), 2693.668 MHz, 16384 kB cache
+- RAM: 32 GB
+- HardDisk: 200 GB
+- Docker version 19.03.8, build afacb8b7f0
+- Java: openjdk 11.0.8 2020-07-14
 
-Version: Windriver Titanium
 
-**Policy Backend VM details(VM1)**
+Common Setup
+------------
 
-OS:Ubuntu 18.04.4 LTS
+Update the ubuntu software installer
 
-CPU: 8 core
+.. code-block:: bash
 
-RAM: 32 GB
+    sudo apt update
 
-HardDisk: 160 GB
+Install Java
 
-Docker version 19.03.8, build afacb8b7f0
+.. code-block:: bash
 
-Java: openjdk version "11.0.7"
+    sudo apt install -y openjdk-11-jdk
 
-**JMeter and Distribution VM details(VM2)**
+Ensure that the Java version that is executing is OpenJDK version 11
 
-OS: Ubuntu 18.04.4 LTS
+.. code-block:: bash
 
-CPU: 8 core
+    $ java --version
+    openjdk 11.0.8 2020-07-14
+    OpenJDK Runtime Environment (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1)
+    OpenJDK 64-Bit Server VM (build 11.0.8+10-post-Ubuntu-0ubuntu118.04.1, mixed mode, sharing)
 
-RAM: 32 GB
+Install Docker and Docker Compose
 
-HardDisk: 160 GB
+.. code-block:: bash
 
-Docker version 19.03.8, build afacb8b7f0
+    # Add docker repository
+    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
 
-Java: openjdk version "11.0.7"
+    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
+    $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 
-JMeter: 5.1.1
+    sudo apt update
 
-Install Docker in VM1 & VM2
----------------------------
-Make sure to execute below commands in VM1 & VM2 both.
+    # Install docker
+    sudo apt-get install docker-ce docker-ce-cli containerd.io
 
-Update the ubuntu software installer
+Change the permissions of the Docker socket file
 
 .. code-block:: bash
 
-    $ apt-get update
+    sudo chmod 666 /var/run/docker.sock
 
-Install and check Java
+Check the status of the Docker service and ensure it is running correctly
 
 .. code-block:: bash
 
-    $ apt-get install -y openjdk-11-jdk
-    $ java -version
+    systemctl status --no-pager docker
+    docker.service - Docker Application Container Engine
+       Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
+       Active: active (running) since Wed 2020-10-14 13:59:40 UTC; 1 weeks 0 days ago
+       # ... (truncated for brevity)
 
-Ensure that the Java version that is executing is OpenJDK version 11
+    docker ps
+    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
 
-Install and check Docker
+Install and verify docker-compose
 
 .. 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
+    # Install compose
+    sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
+    sudo chmod +x /usr/local/bin/docker-compose
 
-Change the permissions of the Docker socket file
+    # Check if install was successful
+    docker-compose --version
 
-.. code-block:: bash
+Clone the policy-distribution repo to access the test scripts
 
-    $ sudo chmod 666 /var/run/docker.sock
+.. code-block:: bash
 
-Check the status of the Docker service and ensure it is running correctly
+    git clone https://gerrit.onap.org/r/policy/distribution
 
-.. code-block:: bash
+.. _setup-distribution-s3p-components:
 
-    $ service docker status
-    $ docker ps
+Start services for MariaDB, Policy API, PAP and Distribution
+------------------------------------------------------------
 
-Install Simulators, PAP, PolicyAPI and MariaDB in VM1
------------------------------------------------------
+Navigate to the main folder for scripts to setup services:
 
-To install all the components needed for Distribution, copy over the script and related files found within the simulatorsetup directory within $(REPOPATH)/distribution/testsuites/stability/src/main/resources
+.. code-block:: bash
 
-Run setup_components.sh script to bring up the required docker containers
+    cd ~/distribution/testsuites/stability/src/main/resources/setup
 
-After installation, ensure the following docker containers are up and running:
+Modify the versions.sh script to match all the versions being tested.
 
 .. code-block:: bash
 
-    CONTAINER ID        IMAGE                                                  COMMAND                  CREATED              STATUS              PORTS                    NAMES
-    11195b01300a        nexus3.onap.org:10001/onap/policy-pap:2.2.2-SNAPSHOT   "bash ./policy-pap.sh"   13 seconds ago       Up 9 seconds        0.0.0.0:7000->6969/tcp   policy-pap
-    6266aa6b0137        nexus3.onap.org:10001/onap/policy-api:2.2.3-SNAPSHOT   "bash ./policy-api.sh"   25 seconds ago       Up 22 seconds       0.0.0.0:6969->6969/tcp   policy-api
-    6a85d155aa8a        pdp/simulator:latest                                   "bash pdp-sim.sh"        About a minute ago   Up About a minute                            pdp-simulator
-    0b41992ccfd7        dmaap/simulator:latest                                 "bash dmaap-sim.sh"      About a minute ago   Up About a minute   0.0.0.0:3904->3904/tcp   message-router
-    595056b2a094        mariadb:10.2.14                                        "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp   mariadb
+    vi ~/distribution/testsuites/stability/src/main/resources/setup/versions.sh
 
-Install Distribution in VM2
----------------------------
+Ensure the correct docker image versions are specified - e.g. for Istanbul-M4
 
-To install the Distribution service, copy over the script and related files found within the distributionsetup directory within $(REPOPATH)/distribution/testsuites/stability/src/main/resources
+- export POLICY_DIST_VERSION=2.6.1-SNAPSHOT
 
-Run setup_distribution.sh script to install the distribution service, provide the IP of VM1 as the arguments to the script.
+Run the start.sh script to start the components. After installation, script will execute
+``docker ps`` and show the running containers.
 
-e.g
 .. code-block:: bash
 
-    $ ./setup_distribution.sh 10.2.0.24 10.2.0.24
+    ./start.sh
 
-Ensure the distribution container is running.
+    Creating network "setup_default" with the default driver
+    Creating policy-distribution ... done
+    Creating mariadb             ... done
+    Creating simulator           ... done
+    Creating policy-db-migrator  ... done
+    Creating policy-api          ... done
+    Creating policy-pap          ... done
 
-Install JMeter in VM2
----------------------
+    CONTAINER ID   IMAGE                                                               COMMAND                  CREATED         STATUS                  PORTS                NAMES
+    f91be98ad1f4   nexus3.onap.org:10001/onap/policy-pap:2.5.1-SNAPSHOT                "/opt/app/policy/pap…"   1 second ago    Up Less than a second   6969/tcp             policy-pap
+    d92cdbe971d4   nexus3.onap.org:10001/onap/policy-api:2.5.1-SNAPSHOT                "/opt/app/policy/api…"   1 second ago    Up Less than a second   6969/tcp             policy-api
+    9a019f5d641e   nexus3.onap.org:10001/onap/policy-db-migrator:2.3.1-SNAPSHOT        "/opt/app/policy/bin…"   2 seconds ago   Up 1 second             6824/tcp             policy-db-migrator
+    108ba238edeb   nexus3.onap.org:10001/mariadb:10.5.8                                "docker-entrypoint.s…"   3 seconds ago   Up 1 second             3306/tcp             mariadb
+    bec9b223e79f   nexus3.onap.org:10001/onap/policy-models-simulator:2.5.1-SNAPSHOT   "simulators.sh"          3 seconds ago   Up 1 second             3905/tcp             simulator
+    74aa5abeeb08   nexus3.onap.org:10001/onap/policy-distribution:2.6.1-SNAPSHOT       "/opt/app/policy/bin…"   3 seconds ago   Up 1 second             6969/tcp, 9090/tcp   policy-distribution
 
-Download and install jMeter
 
-.. code-block:: bash
+.. note::
+    The containers on this docker-compose are running with HTTP configuration. For HTTPS, ports
+    and configurations will need to be changed, as well certificates and keys must be generated
+    for security.
+
 
-    $ mkdir jMeter
-    $ cd jMeter
-    $ wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.1.1.zip
-    $ unzip apache-jmeter-5.1.1.zip
+Install JMeter
+--------------
 
-Install & configure visualVM in VM2
------------------------------------
-VisualVM needs to be installed in the virtual machine running Distrbution. It will be used to monitor CPU, Memory and GC for Distribution while the stability tests are running.
+Download and install JMeter
 
 .. code-block:: bash
 
-    $ sudo apt-get install visualVM
+    # Install required packages
+    sudo apt install -y wget unzip
 
-Run these commands to configure permissions
+    # Install JMeter
+    mkdir -p jmeter
+    cd jmeter
+    wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.1.zip
+    unzip -q apache-jmeter-5.4.1.zip
+    rm apache-jmeter-5.4.1.zip
+
+
+Install & configure visualVM
+--------------------------------------
+
+VisualVM needs to be installed in the virtual machine running Distribution. It will be used to
+monitor CPU, Memory and GC for Distribution while the stability tests are running.
 
 .. code-block:: bash
 
-    $ cd /usr/lib/jvm/java-11-openjdk-amd64/bin/
-    $ sudo touch visualvm.policy
-    $ sudo chmod 777 visualvm.policy
+    sudo apt install -y visualvm
+
+Run these commands to configure permissions
 
-    $ vi visualvm.policy
+.. code-block:: bash
 
-    Add the following in visualvm.policy
+    # Set globally accessable permissions on policy file
+    sudo chmod 777 /usr/lib/jvm/java-11-openjdk-amd64/bin/visualvm.policy
 
-    grant codebase "file:/usr/lib/jvm/java-11-openjdk-amd64/lib/tools.jar" {
-    permission java.security.AllPermission;
+    # Create Java security policy file for VisualVM
+    sudo cat > /usr/lib/jvm/java-11-openjdk-amd64/bin/visualvm.policy << EOF
+    grant codebase "jrt:/jdk.jstatd" {
+       permission java.security.AllPermission;
     };
+    grant codebase "jrt:/jdk.internal.jvmstat" {
+       permission java.security.AllPermission;
+    };
+    EOF
 
-Run the following commands to start jstatd using port 1111
+Run the following command to start jstatd using port 1111
 
 .. code-block:: bash
 
-    $ cd /usr/lib/jvm/java-8-openjdk-amd64/bin/
-    $ ./jstatd -p 1111 -J-Djava.security.policy=visualvm.policy  &
+    /usr/lib/jvm/java-11-openjdk-amd64/bin/jstatd -p 1111 -J-Djava.security.policy=/usr/lib/jvm/java-11-openjdk-amd64/bin/visualvm.policy &
 
-Using the VM2 Desktop, run visualVM to connect to localhost:9090
-Run the command
+Run visualVM to connect to POLICY_DISTRIBUTION_IP:9090
 
 .. code-block:: bash
 
-    $ visualvm
+    # Get the Policy Distribution container IP
+    echo $(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' policy-distribution)
+
+    # Start visual vm
+    visualvm &
 
 This will load up the visualVM GUI
 
 Connect to Distribution JMX Port.
 
     1. Right click on "Local" in the left panel of the screen and select "Add JMX Connection"
-    2. Enter the Port 9090. this is the JMX port exposed by the dsitribution container
+    2. Enter the Distribution container IP and Port 9090. This is the JMX port exposed by the
+       distribution container
     3. Double click on the newly added nodes under "Local" to start monitoring CPU, Memory & GC.
 
-Example Screenshot
+Example Screenshot of visualVM
+
+.. image:: images/distribution/distribution-s3p-vvm-sample.png
 
-Sample Screenshot of visualVM
 
-.. image:: images/distribution-s3p-vvm-sample.png
+Stability Test of Policy Distribution
++++++++++++++++++++++++++++++++++++++
 
-Test Plan Setup
----------------
+Introduction
+------------
+
+The 72 hour Stability Test for policy distribution has the goal of introducing a steady flow of
+transactions initiated from a test client server running JMeter. The policy distribution is
+configured with a special FileSystemReception plugin to monitor a local directory for newly added
+csar files to be processed by itself. The input CSAR will be added/removed by the test client
+(JMeter) and the result will be pulled from the backend (PAP and PolicyAPI) by the test client
+(JMeter).
+
+The test will be performed in an environment where Jmeter will continuously add/remove a test csar
+into the special directory where policy distribution is monitoring and will then get the processed
+results from PAP and PolicyAPI to verify the successful deployment of the policy. The policy will
+then be undeployed and the test will loop continuously until 72 hours have elapsed.
 
-The 72 hours stability test will run the following steps sequentially in a single threaded loop.
+
+Test Plan Sequence
+------------------
+
+The 72h stability test will run the following steps sequentially in a single threaded loop.
 
 - **Delete Old CSAR** - Checks if CSAR already exists in the watched directory, if so it deletes it
 - **Add CSAR** - Adds CSAR to the directory that distribution is watching
@@ -228,48 +285,53 @@ The following steps can be used to configure the parameters of the test plan.
 
 Screenshot of Distribution stability test plan
 
-.. image:: images/distribution-s3p-testplan.png
+.. image:: images/distribution/distribution-s3p-testplan.png
+
 
 Running the Test Plan
 ---------------------
 
-Copy the Test Plans folder onto VM2
-Edit the /tmp/ folder permissions to allow the Testplan to insert the CSAR into the /tmp/policydistribution/distributionmount/ folder
+Check if the /tmp/policydistribution/distributionmount exists as it was created during the start.sh
+script execution. If not, run the following commands to create folder and change folder permissions
+to allow the testplan to insert the CSAR into the /tmp/policydistribution/distributionmount folder.
 
 .. code-block:: bash
 
-    $ sudo chmod a+trwx /tmp
+    sudo mkdir -p /tmp/policydistribution/distributionmount
+    sudo chmod -R a+trwx /tmp
 
-From the apache jMeter folder run the test, pointing it towards the stabiltiy.jmx file inside the testplans folder
+
+Navigate to the stability test folder.
 
 .. code-block:: bash
 
-    $ ./bin/jmeter -n -t /home/rossc/testplans/stability.jmx -Jduration=259200 -l testresults.jtl
+    cd ~/distribution/testsuites/stability/src/main/resources/testplans/
+
+Execute the run_test.sh
+
+.. code-block:: bash
+
+    ./run_test.sh
+
 
 Test Results
 ------------
 
 **Summary**
 
-Stability test plan was triggered for 72 hours.
+- Stability test plan was triggered for 72 hours.
+- No errors were reported
 
 **Test Statistics**
 
-=======================  =================  ==================  ==================================
-**Total # of requests**  **Success %**      **Error %**         **Average time taken per request**
-=======================  =================  ==================  ==================================
-194313                   100 %              0 %                 145 ms
-=======================  =================  ==================  ==================================
-
-**VisualVM Screenshot**
+.. image:: images/distribution/dist_stability_statistics.PNG
+.. image:: images/distribution/dist_stability_threshold.PNG
 
-.. image:: images/distribution-vvm-monitor.png
-.. image:: images/distribution-vvm-threads.png
+**VisualVM Screenshots**
 
-**JMeter Screenshot**
+.. image:: images/distribution/dist_stability_monitor.PNG
+.. image:: images/distribution/dist_stability_threads.PNG
 
-.. image:: images/distribution-summary-report.png
-.. image:: images/distribution-results-tree.png
 
 Performance Test of Policy Distribution
 +++++++++++++++++++++++++++++++++++++++
@@ -277,56 +339,67 @@ Performance Test of Policy Distribution
 Introduction
 ------------
 
-Performance test of distribution has the goal of testing the min/avg/max processing time and
-rest call throughput for all the requests when the number of requests are large enough to saturate
-the resource and find the bottleneck.
-It also tests that distribution can handle multiple policy csar's and that these are deployed within 30 seconds consistently.
+The 4h Performance Test of Policy Distribution has the goal of testing the min/avg/max processing
+time and rest call throughput for all the requests when the number of requests are large enough to
+saturate the resource and find the bottleneck.
+
+It also tests that distribution can handle multiple policy CSARs and that these are deployed within
+30 seconds consistently.
+
 
 Setup Details
 -------------
 
 The performance test is based on the same setup as the distribution stability tests.
 
-Test Plan
----------
+
+Test Plan Sequence
+------------------
 
 Performance test plan is different from the stability test plan.
-Instead of handling one policy csar at a time, multiple csar's are deployed within the watched folder at the exact same time.
-We then expect all policies from these csar's to be deployed within 30 seconds.
-Alongside these, there are multithreaded tests running towards the healtchcheck and statistics endpoints of the distribution service.
 
-Run Test
---------
+- Instead of handling one policy csar at a time, multiple csar's are deployed within the watched
+  folder at the exact same time.
+- We expect all policies from these csar's to be deployed within 30 seconds.
+- There are also multithreaded tests running towards the healthcheck and statistics endpoints of
+  the distribution service.
+
+
+Running the Test Plan
+---------------------
 
-Copy the performance test plans folder onto VM2.
-Edit the /tmp/ folder permissions to allow the Testplan to insert the CSAR into the /tmp/policydistribution/distributionmount/ folder.
+Check if /tmp folder permissions to allow the Testplan to insert the CSAR into the
+/tmp/policydistribution/distributionmount folder.
+Clean up from previous run. If necessary, put containers down with script `down.sh` from setup
+folder mentioned on :ref:`Setup components <setup-distribution-s3p-components>`
 
 .. code-block:: bash
 
-    $ sudo chmod a+trwx /tmp
+    sudo mkdir -p /tmp/policydistribution/distributionmount
+    sudo chmod -R a+trwx /tmp
 
-From the apache jMeter folder run the test, pointing it towards the stabiltiy.jmx file inside the testplans folder
+Navigate to the testplan folder and execute the test script:
 
 .. code-block:: bash
 
-    $ ./bin/jmeter -n -t /home/rossc/testplans/performance.jmx -Jduration=259200 -l testresults.jtl
+    cd ~/distribution/testsuites/performance/src/main/resources/testplans/
+    ./run_test.sh
+    
 
 Test Results
 ------------
 
 **Summary**
 
-Performance test plan was triggered for 4 hours.
+- Performance test plan was triggered for 4 hours.
+- No errors were reported
 
 **Test Statistics**
 
-=======================  =================  ==================  ==================================
-**Total # of requests**  **Success %**      **Error %**         **Average time taken per request**
-=======================  =================  ==================  ==================================
-239819                   100 %              0 %                 100 ms
-=======================  =================  ==================  ==================================
+.. image:: images/distribution/performance-statistics.png
+.. image:: images/distribution/performance-threshold.png
 
-**JMeter Screenshot**
+**VisualVM Screenshots**
 
-.. image:: images/distribution-performance-summary-report.png
-.. image:: images/distribution-performance-api-report.png
+.. image:: images/distribution/performance-monitor.png
+.. image:: images/distribution/performance-threads.png