1 .. This work is licensed under a
2 .. Creative Commons Attribution 4.0 International License.
3 .. http://creativecommons.org/licenses/by/4.0
5 .. _distribution-s3p-label:
7 Policy Distribution component
8 #############################
10 72h Stability and 4h Performance Tests of Distribution
11 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
16 The stability and performance tests are performed on VM's running in the OpenStack cloud
17 environment in the ONAP integration lab.
21 - OS: Ubuntu 18.04 LTS (GNU/Linux 4.15.0-151-generic x86_64)
25 - Docker version 20.10.7, build 20.10.7-0ubuntu1~18.04.2
26 - Java: openjdk 11.0.11 2021-04-20
32 Update the ubuntu software installer
42 sudo apt install -y openjdk-11-jdk
44 Ensure that the Java version that is executing is OpenJDK version 11
49 openjdk 11.0.11 2021-04-20
50 OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.18.04)
51 OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.18.04, mixed mode)
53 Install Docker and Docker Compose
57 # Add docker repository
58 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
60 echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
61 $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
66 sudo apt-get install docker-ce docker-ce-cli containerd.io
68 Change the permissions of the Docker socket file
72 sudo chmod 666 /var/run/docker.sock
74 Check the status of the Docker service and ensure it is running correctly
78 systemctl status --no-pager docker
79 docker.service - Docker Application Container Engine
80 Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
81 Active: active (running) since Wed 2020-10-14 13:59:40 UTC; 1 weeks 0 days ago
82 # ... (truncated for brevity)
85 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
87 Install and verify docker-compose
92 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
93 sudo chmod +x /usr/local/bin/docker-compose
95 # Check if install was successful
96 docker-compose --version
98 Clone the policy-distribution repo to access the test scripts
102 git clone https://gerrit.onap.org/r/policy/distribution
104 .. _setup-distribution-s3p-components:
106 Start services for MariaDB, Policy API, PAP and Distribution
107 ------------------------------------------------------------
109 Navigate to the main folder for scripts to setup services:
113 cd ~/distribution/testsuites/stability/src/main/resources/setup
115 Modify the versions.sh script to match all the versions being tested.
119 vi ~/distribution/testsuites/stability/src/main/resources/setup/versions.sh
121 Ensure the correct docker image versions are specified - e.g. for Istanbul-M4
123 - export POLICY_DIST_VERSION=2.6.1-SNAPSHOT
125 Run the start.sh script to start the components. After installation, script will execute
126 ``docker ps`` and show the running containers.
132 Creating network "setup_default" with the default driver
133 Creating policy-distribution ... done
134 Creating mariadb ... done
135 Creating simulator ... done
136 Creating policy-db-migrator ... done
137 Creating policy-api ... done
138 Creating policy-pap ... done
140 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
141 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
142 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
143 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
144 108ba238edeb nexus3.onap.org:10001/mariadb:10.5.8 "docker-entrypoint.s…" 3 seconds ago Up 1 second 3306/tcp mariadb
145 bec9b223e79f nexus3.onap.org:10001/onap/policy-models-simulator:2.5.1-SNAPSHOT "simulators.sh" 3 seconds ago Up 1 second 3905/tcp simulator
146 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
150 The containers on this docker-compose are running with HTTP configuration. For HTTPS, ports
151 and configurations will need to be changed, as well certificates and keys must be generated
158 Download and install JMeter
162 # Install required packages
163 sudo apt install -y wget unzip
168 wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.1.zip
169 unzip -q apache-jmeter-5.4.1.zip
170 rm apache-jmeter-5.4.1.zip
173 Install & configure visualVM
174 --------------------------------------
176 VisualVM needs to be installed in the virtual machine running Distribution. It will be used to
177 monitor CPU, Memory and GC for Distribution while the stability tests are running.
181 sudo apt install -y visualvm
183 Run these commands to configure permissions
187 # Set globally accessable permissions on policy file
188 sudo chmod 777 /usr/lib/jvm/java-11-openjdk-amd64/bin/visualvm.policy
190 # Create Java security policy file for VisualVM
191 sudo cat > /usr/lib/jvm/java-11-openjdk-amd64/bin/visualvm.policy << EOF
192 grant codebase "jrt:/jdk.jstatd" {
193 permission java.security.AllPermission;
195 grant codebase "jrt:/jdk.internal.jvmstat" {
196 permission java.security.AllPermission;
200 Run the following command to start jstatd using port 1111
204 /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 &
206 Run visualVM to connect to POLICY_DISTRIBUTION_IP:9090
210 # Get the Policy Distribution container IP
211 echo $(docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' policy-distribution)
216 This will load up the visualVM GUI
218 Connect to Distribution JMX Port.
220 1. On the visualvm toolbar, click on "Add JMX Connection"
221 2. Enter the Distribution container IP and Port 9090. This is the JMX port exposed by the
222 distribution container
223 3. Double click on the newly added nodes under "Remotes" to start monitoring CPU, Memory & GC.
225 Example Screenshot of visualVM
227 .. image:: distribution-s3p-results/distribution-visualvm-snapshot.png
230 Stability Test of Policy Distribution
231 +++++++++++++++++++++++++++++++++++++
236 The 72 hour Stability Test for policy distribution has the goal of introducing a steady flow of
237 transactions initiated from a test client server running JMeter. The policy distribution is
238 configured with a special FileSystemReception plugin to monitor a local directory for newly added
239 csar files to be processed by itself. The input CSAR will be added/removed by the test client
240 (JMeter) and the result will be pulled from the backend (PAP and PolicyAPI) by the test client
243 The test will be performed in an environment where Jmeter will continuously add/remove a test csar
244 into the special directory where policy distribution is monitoring and will then get the processed
245 results from PAP and PolicyAPI to verify the successful deployment of the policy. The policy will
246 then be undeployed and the test will loop continuously until 72 hours have elapsed.
252 The 72h stability test will run the following steps sequentially in a single threaded loop.
254 - **Delete Old CSAR** - Checks if CSAR already exists in the watched directory, if so it deletes it
255 - **Add CSAR** - Adds CSAR to the directory that distribution is watching
256 - **Get Healthcheck** - Ensures Healthcheck is returning 200 OK
257 - **Get Statistics** - Ensures Statistics is returning 200 OK
258 - **Assert PDP Group Query** - Checks that PDPGroupQuery contains the deployed policy
259 - **Assert PoliciesDeployed** - Checks that the policy is deployed
260 - **Undeploy/Delete Policy** - Undeploys and deletes the Policy for the next loop
261 - **Assert PDP Group Query for Deleted Policy** - Ensures the policy has been removed and does not exist
263 The following steps can be used to configure the parameters of the test plan.
265 - **HTTP Authorization Manager** - used to store user/password authentication details.
266 - **HTTP Header Manager** - used to store headers which will be used for making HTTP requests.
267 - **User Defined Variables** - used to store following user defined parameters.
269 ========== ===============================================
270 **Name** **Description**
271 ========== ===============================================
272 PAP_HOST IP Address or host name of PAP component
273 PAP_PORT Port number of PAP for making REST API calls
274 API_HOST IP Address or host name of API component
275 API_PORT Port number of API for making REST API calls
276 DURATION Duration of Test
277 ========== ===============================================
279 Screenshot of Distribution stability test plan
281 .. image:: distribution-s3p-results/distribution-jmeter-testcases.png
284 Running the Test Plan
285 ---------------------
287 Check if the /tmp/policydistribution/distributionmount exists as it was created during the start.sh
288 script execution. If not, run the following commands to create folder and change folder permissions
289 to allow the testplan to insert the CSAR into the /tmp/policydistribution/distributionmount folder.
292 Make sure that only csar file is being loaded in the watched folder and log generation is in a
293 logs folder, as any sort of zip file can be understood by distribution as a policy file. A
294 logback.xml configuration file is available under setup/distribution folder.
298 sudo mkdir -p /tmp/policydistribution/distributionmount
299 sudo chmod -R a+trwx /tmp
302 Navigate to the stability test folder.
306 cd ~/distribution/testsuites/stability/src/main/resources/testplans/
308 Execute the run_test.sh
320 - Stability test plan was triggered for 72 hours.
321 - No errors were reported
325 .. image:: distribution-s3p-results/stability-statistics.png
326 .. image:: distribution-s3p-results/stability-threshold.png
328 **VisualVM Screenshots**
330 .. image:: distribution-s3p-results/stability-monitor.png
331 .. image:: distribution-s3p-results/stability-threads.png
334 Performance Test of Policy Distribution
335 +++++++++++++++++++++++++++++++++++++++
340 The 4h Performance Test of Policy Distribution has the goal of testing the min/avg/max processing
341 time and rest call throughput for all the requests when the number of requests are large enough to
342 saturate the resource and find the bottleneck.
344 It also tests that distribution can handle multiple policy CSARs and that these are deployed within
345 30 seconds consistently.
351 The performance test is based on the same setup as the distribution stability tests.
357 Performance test plan is different from the stability test plan.
359 - Instead of handling one policy csar at a time, multiple csar's are deployed within the watched
360 folder at the exact same time.
361 - We expect all policies from these csar's to be deployed within 30 seconds.
362 - There are also multithreaded tests running towards the healthcheck and statistics endpoints of
363 the distribution service.
366 Running the Test Plan
367 ---------------------
369 Check if /tmp folder permissions to allow the Testplan to insert the CSAR into the
370 /tmp/policydistribution/distributionmount folder.
371 Clean up from previous run. If necessary, put containers down with script `down.sh` from setup
372 folder mentioned on :ref:`Setup components <setup-distribution-s3p-components>`
376 sudo mkdir -p /tmp/policydistribution/distributionmount
377 sudo chmod -R a+trwx /tmp
379 Navigate to the testplan folder and execute the test script:
383 cd ~/distribution/testsuites/performance/src/main/resources/testplans/
392 - Performance test plan was triggered for 4 hours.
393 - No errors were reported
397 .. image:: distribution-s3p-results/performance-statistics.png
398 .. image:: distribution-s3p-results/performance-threshold.png
400 **VisualVM Screenshots**
402 .. image:: distribution-s3p-results/performance-monitor.png
403 .. image:: distribution-s3p-results/performance-threads.png