aboutsummaryrefslogtreecommitdiffstats
path: root/docs/development/devtools/distribution-s3p.rst
blob: 093e28c009866e65e03865ce568defe9b809bcaf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
.. This work is licensed under a
.. Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0

.. _distribution-s3p-label:

Policy Distribution component
#############################

72 Hours Stability Test 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).


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.

Setup details
-------------

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.

**OpenStack environment details**

Version: Windriver Titanium

**Policy Backend VM details(VM1)**

OS:Ubuntu 18.04.4 LTS

CPU: 8 core

RAM: 32 GB

HardDisk: 160 GB

Docker version 19.03.8, build afacb8b7f0

Java: openjdk version "11.0.7"

**JMeter and Distribution VM details(VM2)**

OS: Ubuntu 18.04.4 LTS

CPU: 8 core

RAM: 32 GB

HardDisk: 160 GB

Docker version 19.03.8, build afacb8b7f0

Java: openjdk version "11.0.7"

JMeter: 5.1.1

Install Docker in VM1 & VM2
---------------------------
Make sure to execute below commands in VM1 & VM2 both.

Update the ubuntu software installer

.. code-block:: bash

    $ apt-get update

Install and check Java

.. code-block:: bash

    $ apt-get install -y openjdk-11-jdk
    $ java -version

Ensure that the Java version that is executing is OpenJDK version 11

Install and check Docker

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

Change the permissions of the Docker socket file

.. code-block:: bash

    $ sudo chmod 666 /var/run/docker.sock

Check the status of the Docker service and ensure it is running correctly

.. code-block:: bash

    $ service docker status
    $ docker ps

Install Simulators, PAP, PolicyAPI and MariaDB in VM1
-----------------------------------------------------

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

Run setup_components.sh script to bring up the required docker containers

After installation, ensure the following docker containers are up and running:

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

Install Distribution in VM2
---------------------------

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

Run setup_distribution.sh script to install the distribution service, provide the IP of VM1 as the arguments to the script.

e.g
.. code-block:: bash

    $ ./setup_distribution.sh 10.2.0.24 10.2.0.24

Ensure the distribution container is running.

Install JMeter in VM2
---------------------

Download and install jMeter

.. code-block:: bash

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

.. code-block:: bash

    $ sudo apt-get install visualVM

Run these commands to configure permissions

.. code-block:: bash

    $ cd /usr/lib/jvm/java-11-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-11-openjdk-amd64/lib/tools.jar" {
    permission java.security.AllPermission;
    };

Run the following commands 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  &

Using the VM2 Desktop, run visualVM to connect to localhost:9090
Run the command

.. code-block:: bash

    $ 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
    3. Double click on the newly added nodes under "Local" to start monitoring CPU, Memory & GC.

Example Screenshot

Sample Screenshot of visualVM

.. image:: images/distribution-s3p-vvm-sample.png

Test Plan Setup
---------------

The 72 hours 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
- **Get Healthcheck** - Ensures Healthcheck is returning 200 OK
- **Get Statistics** - Ensures Statistics is returning 200 OK
- **CheckPDPGroupQuery** - Checks that PDPGroupQuery contains the deployed policy
- **CheckPolicyDeployed** - Checks that the policy is deployed
- **Undeploy Policy** - Undeploys the policy
- **Delete Policy** - Deletes the Policy for the next loop
- **Check PDP Group for Deletion** - Ensures the policy has been removed and does not exist

The following steps can be used to configure the parameters of the 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
 DURATION     Duration of Test
==========  ===============================================

Screenshot of Distribution stability test plan

.. image:: images/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

.. code-block:: bash

    $ sudo chmod a+trwx /tmp

From the apache jMeter folder run the test, pointing it towards the stabiltiy.jmx file inside the testplans folder

.. code-block:: bash

    $ ./bin/jmeter -n -t /home/rossc/testplans/stability.jmx -Jduration=259200 -l testresults.jtl

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

**Summary**

Stability test plan was triggered for 72 hours.

**Test Statistics**

=======================  =================  ==================  ==================================
**Total # of requests**  **Success %**      **Error %**         **Average time taken per request**
=======================  =================  ==================  ==================================
194313                   100 %              0 %                 145 ms
=======================  =================  ==================  ==================================

**VisualVM Screenshot**

.. image:: images/distribution-vvm-monitor.png
.. image:: images/distribution-vvm-threads.png

**JMeter Screenshot**

.. image:: images/distribution-summary-report.png
.. image:: images/distribution-results-tree.png

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.

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

The performance test is based on the same setup as the distribution stability tests.

Test Plan
---------

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

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.

.. code-block:: bash

    $ sudo chmod a+trwx /tmp

From the apache jMeter folder run the test, pointing it towards the stabiltiy.jmx file inside the testplans folder

.. code-block:: bash

    $ ./bin/jmeter -n -t /home/rossc/testplans/performance.jmx -Jduration=259200 -l testresults.jtl

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

**Summary**

Performance test plan was triggered for 4 hours.

**Test Statistics**

=======================  =================  ==================  ==================================
**Total # of requests**  **Success %**      **Error %**         **Average time taken per request**
=======================  =================  ==================  ==================================
239819                   100 %              0 %                 100 ms
=======================  =================  ==================  ==================================

**JMeter Screenshot**

.. image:: images/distribution-performance-summary-report.png
.. image:: images/distribution-performance-api-report.png