blob: 2c89ef851ab610bb0c1a1b00f5356173ec7a9156 [file] [log] [blame]
Rashmi Pujar451a53a2019-12-10 17:10:55 -05001.. This work is licensed under a
2.. Creative Commons Attribution 4.0 International License.
3.. http://creativecommons.org/licenses/by/4.0
4
5
6Policy Platform Development Tools
7#################################
8
9.. contents::
10 :depth: 3
11
12
13This article explains how to build the ONAP Policy Framework for development purposes and how to run stability/performance tests for a variety of components. To start, the developer should consult the latest ONAP Wiki to familiarize themselves with developer best practices and how-tos to setup their environment, see `https://wiki.onap.org/display/DW/Developer+Best+Practices`.
14
15
16This article assumes that:
17
18* You are using a *\*nix* operating system such as linux or macOS.
19* You are using a directory called *git* off your home directory *(~/git)* for your git repositories
20* Your local maven repository is in the location *~/.m2/repository*
21* You have added settings to access the ONAP Nexus to your M2 configuration, see `Maven Settings Example <https://wiki.onap.org/display/DW/Setting+Up+Your+Development+Environment>`_ (bottom of the linked page)
22
23The procedure documented in this article has been verified to work on a MacBook laptop running macOS Yosemite Version 10.10,5, Sierra Version 10.12.6, a HP Z600 desktop running Ubuntu 16.04.3 LTS, and an Unbuntu 16.04 VM.
24
25Cloning All The Policy Repositories
26***********************************
27
28Run a script such as the script below to clone the required modules from the `ONAP git repository <https://gerrit.onap.org/r/#/admin/projects/?filter=policy>`_. This script clones all the ONAP Policy Framework repositories.
29
30ONAP Policy Framework has dependencies to the ONAP Parent *oparent* module, the ONAP ECOMP SDK *ecompsdkos* module, and the A&AI Schema module.
31
32
33.. code-block:: bash
34 :caption: Typical ONAP Policy Framework Clone Script
35 :linenos:
36
37 #!/usr/bin/env bash
38
39 ## script name for output
40 MOD_SCRIPT_NAME=`basename $0`
41
42 ## the ONAP clone directory, defaults to "onap"
43 clone_dir="onap"
44
45 ## the ONAP repos to clone
46 onap_repos="\
47 policy/parent \
48 policy/common \
49 policy/models \
50 policy/docker \
51 policy/api \
52 policy/pap \
53 policy/apex-pdp \
54 policy/drools-pdp \
55 policy/drools-applications \
56 policy/xacml-pdp \
57 policy/engine \
58 policy/distribution"
59
60 ##
61 ## Help screen and exit condition (i.e. too few arguments)
62 ##
63 Help()
64 {
65 echo ""
66 echo "$MOD_SCRIPT_NAME - clones all required ONAP git repositories"
67 echo ""
68 echo " Usage: $MOD_SCRIPT_NAME [-options]"
69 echo ""
70 echo " Options"
71 echo " -d - the ONAP clone directory, defaults to '.'"
72 echo " -h - this help screen"
73 echo ""
74 exit 255;
75 }
76
77 ##
78 ## read command line
79 ##
80 while [ $# -gt 0 ]
81 do
82 case $1 in
83 #-d ONAP clone directory
84 -d)
85 shift
86 if [ -z "$1" ]; then
87 echo "$MOD_SCRIPT_NAME: no clone directory"
88 exit 1
89 fi
90 clone_dir=$1
91 shift
92 ;;
93
94 #-h prints help and exists
95 -h)
96 Help;exit 0;;
97
98 *) echo "$MOD_SCRIPT_NAME: undefined CLI option - $1"; exit 255;;
99 esac
100 done
101
102 if [ -f "$clone_dir" ]; then
103 echo "$MOD_SCRIPT_NAME: requested clone directory '$clone_dir' exists as file"
104 exit 2
105 fi
106 if [ -d "$clone_dir" ]; then
107 echo "$MOD_SCRIPT_NAME: requested clone directory '$clone_dir' exists as directory"
108 exit 2
109 fi
110
111 mkdir $clone_dir
112 if [ $? != 0 ]
113 then
114 echo cannot clone ONAP repositories, could not create directory '"'$clone_dir'"'
115 exit 3
116 fi
117
118 for repo in $onap_repos
119 do
120 repoDir=`dirname "$repo"`
121 repoName=`basename "$repo"`
122
123 if [ ! -z $dirName ]
124 then
125 mkdir "$clone_dir/$repoDir"
126 if [ $? != 0 ]
127 then
128 echo cannot clone ONAP repositories, could not create directory '"'$clone_dir/repoDir'"'
129 exit 4
130 fi
131 fi
132
133 git clone https://gerrit.onap.org/r/${repo} $clone_dir/$repo
134 done
135
136 echo ONAP has been cloned into '"'$clone_dir'"'
137
138
139Execution of the script above results in the following directory hierarchy in your *~/git* directory:
140
141 * ~/git/onap
142 * ~/git/onap/policy
143 * ~/git/onap/policy/parent
144 * ~/git/onap/policy/common
145 * ~/git/onap/policy/models
146 * ~/git/onap/policy/api
147 * ~/git/onap/policy/pap
148 * ~/git/onap/policy/docker
149 * ~/git/onap/policy/drools-applications
150 * ~/git/onap/policy/drools-pdp
151 * ~/git/onap/policy/engine
152 * ~/git/onap/policy/apex-pdp
153 * ~/git/onap/policy/xacml-pdp
154 * ~/git/onap/policy/distribution
155
156
157Building ONAP Policy Framework Components
158*****************************************
159
160**Step 1:** Optionally, for a completely clean build, remove the ONAP built modules from your local repository.
161
162 .. code-block:: bash
163
164 rm -fr ~/.m2/repository/org/onap
165
166
167**Step 2:** A pom such as the one below can be used to build the ONAP Policy Framework modules. Create the *pom.xml* file in the directory *~/git/onap/policy*.
168
169.. code-block:: xml
170 :caption: Typical pom.xml to build the ONAP Policy Framework
171 :linenos:
172
173 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
174 <modelVersion>4.0.0</modelVersion>
175 <groupId>org.onap</groupId>
176 <artifactId>onap-policy</artifactId>
177 <version>1.0.0-SNAPSHOT</version>
178 <packaging>pom</packaging>
179 <name>${project.artifactId}</name>
180 <inceptionYear>2017</inceptionYear>
181 <organization>
182 <name>ONAP</name>
183 </organization>
184
185 <modules>
186 <module>parent</module>
187 <module>common</module>
188 <module>models</module>
189 <module>api</module>
190 <module>pap</module>
191 <module>apex-pdp</module>
192 <module>xacml-pdp</module>
193 <module>drools-pdp</module>
194 <module>drools-applications</module>
195 <!-- The engine repo is being deprecated,
196 and can be ommitted if not working with
197 legacy api and components. -->
198 <module>engine</module>
199 <module>distribution</module>
200 </modules>
201 </project>
202
203**Policy Architecture/API Transition**
204
205In Dublin, a new Policy Architecture was introduced. The legacy architecture runs in parallel with the new architecture. It will be deprecated after Frankfurt release.
206If the developer is only interested in working with the new architecture components, the engine sub-module can be ommitted.
207
208
209**Step 3:** You can now build the Policy framework
210
211 .. code-block:: bash
212
213 cd ~/git/onap
214 mvn clean install
215
216
217Running the Stability/Performance Tests
218***************************************
219
220Policy API component
221~~~~~~~~~~~~~~~~~~~~
222
22372 Hours Stability Test of Policy API
224+++++++++++++++++++++++++++++++++++++
225
226Introduction
227------------
228
229The 72 hour stability test of policy API has the goal of verifying the stability of running policy design API REST service by
230ingesting a steady flow of transactions of policy design API calls in a multi-thread fashion to simulate multiple clients' behaviors.
231All the transaction flows are initiated from a test client server running JMeter for the duration of 72+ hours.
232
233Setup Details
234-------------
235
236The stability test is performed on VMs running in Intel Wind River Lab environment.
237There are 2 seperate VMs. One for running API while the other running JMeter & other necessary components, e.g. MariaDB, to simulate steady flow of transactions.
238For simplicity, let's assume:
239
240VM1 will be running JMeter, MariaDB.
241VM2 will be running API REST service and visualVM.
242
243**Lab Environment**
244
245Intel ONAP Integration and Deployment Labs
246`Physical Labs <https://wiki.onap.org/display/DW/Physical+Labs>`_,
247`Wind River <https://www.windriver.com/>`_
248
249**API VM Details (VM2)**
250
251OS: Ubuntu 18.04 LTS
252
253CPU: 4 core
254
255RAM: 8 GB
256
257HardDisk: 91 GB
258
259Docker Version: 18.09.8
260
261Java: OpenJDK 1.8.0_212
262
263**JMeter VM Details (VM1)**
264
265OS: Ubuntu 18.04 LTS
266
267CPU: 4 core
268
269RAM: 8GB
270
271HardDisk: 91GB
272
273Docker Version: 18.09.8
274
275Java: OpenJDK 1.8.0_212
276
277JMeter: 5.1.1
278
279**Software Installation & Configuration**
280
281**VM1 & VM2 in lab**
282
283**Install Java & Docker**
284
285Make the etc/hosts entries
286
287.. code-block:: bash
288
289 $ echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo tee -a /etc/hosts
290
291Update the Ubuntu software installer
292
293.. code-block:: bash
294
295 $ sudo apt-get update
296
297Check and install Java
298
299.. code-block:: bash
300
301 $ sudo apt-get install -y openjdk-8-jdk
302 $ java -version
303
304Ensure that the Java version executing is OpenJDK version 8
305
306Check and install docker
307
308.. code-block:: bash
309
310 $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
311 $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
312 $ sudo apt-get update
313 $ sudo apt-cache policy docker-ce
314 $ sudo apt-get install -y docker-ce
315 $ systemctl status docker
316 $ docker ps
317
318Change the permissions of the Docker socket file
319
320.. code-block:: bash
321
322 $ sudo chmod 777 /var/run/docker.sock
323
324Check the status of the Docker service and ensure it is running correctly
325
326.. code-block:: bash
327
328 $ service docker status
329 $ docker ps
330
331**VM1 in lab**
332
333**Install JMeter**
334
335Download & install JMeter
336
337.. code-block:: bash
338
339 $ mkdir jMeter
340 $ cd jMeter
341 $ wget http://mirrors.whoishostingthis.com/apache//jmeter/binaries/apache-jmeter-5.1.1.zip
342 $ unzip apache-jmeter-5.1.1.zip
343
344**Install other necessary components**
345
346Pull api code & run setup components script
347
348.. code-block:: bash
349
350 $ cd ~
351 $ git clone https://git.onap.org/policy/api
352 $ cd api/testsuites/stability/src/main/resources/simulatorsetup
353 $ ./setup_components.sh
354
355After installation, make sure the following mariadb container is up and running
356
357.. code-block:: bash
358
359 ubuntu@test:~/api/testsuites/stability/src/main/resources/simulatorsetup$ docker ps
360 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
361 3849ce44b86d mariadb:10.2.14 "docker-entrypoint.s…" 11 days ago Up 11 days 0.0.0.0:3306->3306/tcp mariadb
362
363**VM2 in lab**
364
365**Install policy-api**
366
367Pull api code & run setup api script
368
369.. code-block:: bash
370
371 $ cd ~
372 $ git clone https://git.onap.org/policy/api
373 $ cd api/testsuites/stability/src/main/resources/apisetup
374 $ ./setup_api.sh <host ip running api> <host ip running mariadb>
375
376After installation, make sure the following api container is up and running
377
378.. code-block:: bash
379
380 ubuntu@tools-2:~/api/testsuites/stability/src/main/resources/apisetup$ docker ps
381 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
382 4f08f9972e55 nexus3.onap.org:10001/onap/policy-api:2.1.1-SNAPSHOT "bash ./policy-api.sh" 11 days ago Up 11 days 0.0.0.0:6969->6969/tcp, 0.0.0.0:9090->9090/tcp policy-api
383
384**Install & configure visualVM**
385
386VisualVM needs to be installed in the virtual machine having API up and running. It will be used to monitor CPU, Memory, GC for API while stability test is running.
387
388Install visualVM
389
390.. code-block:: bash
391
392 $ sudo apt-get install visualvm
393
394Run few commands to configure permissions
395
396.. code-block:: bash
397
398 $ cd /usr/lib/jvm/java-8-openjdk-amd64/bin/
399 $ sudo touch visualvm.policy
400 $ sudo chmod 777 visualvm.policy
401
402 $ vi visualvm.policy
403
404 Add the following in visualvm.policy
405
406
407 grant codebase "file:/usr/lib/jvm/java-8-openjdk-amd64/lib/tools.jar" {
408 permission java.security.AllPermission;
409 };
410
411Run following commands to start jstatd using port 1111
412
413.. code-block:: bash
414
415 $ cd /usr/lib/jvm/java-8-openjdk-amd64/bin/
416 $ ./jstatd -p 1111 -J-Djava.security.policy=visualvm.policy &
417
418**Local Machine**
419
420**Run & configure visualVM**
421
422Run visualVM by typing
423
424.. code-block:: bash
425
426 $ jvisualvm
427
428Connect to jstatd & remote policy-api JVM
429
430 1. Right click on "Remote" in the left panel of the screen and select "Add Remote Host..."
431 2. Enter the IP address of VM2 (running policy-api)
432 3. Right click on IP address, select "Add JMX Connection..."
433 4. Enter the VM2 IP Address (from step 2) <IP address>:9090 ( for example, 10.12.6.151:9090) and click OK.
434 5. Double click on the newly added nodes under "Remote" to start monitoring CPU, Memory & GC.
435
436Sample Screenshot of visualVM
437
438.. image:: images/results-5.png
439
440Test Plan
441---------
442
443The 72+ hours stability test will be running the following steps sequentially in multi-threaded loops.
444Thread number is set to 5 to simulate 5 API clients' behaviors (they can be calling the same policy CRUD API simultaneously).
445
446**Setup Thread (will be running only once)**
447
448- Get policy-api Healthcheck
449- Get API Counter Statistics
450- Get Preloaded Policy Types
451
452**API Test Flow (5 threads running the same steps in the same loop)**
453
454- Create a new TCA Policy Type with Version 1.0.0
455- Create a new TCA Policy Type with Version 2.0.0
456- Create a new TCA Policy Type with Version 3.0.0
457- Create a new TCA Policy Type with Version 4.0.0
458- Create a new TCA Policy Type with Version 5.0.0
459- Create a new TCA Policy Type with Version 6.0.0
460- Create a new TCA Policy Type with Version 7.0.0
461- Create a new TCA Policy Type with Version 8.0.0
462- Create a new TCA Policy Type with Version 9.0.0
463- Create a new TCA Policy Type with Version 10.0.0
464- Create a new TCA Policy Type with Version 11.0.0
465- A 10 sec timer
466- Get All Existing Policy Types
467- Get All Existing Versions of the New TCA Policy Type
468- Get Version 1.0.0 of the New TCA Policy Type
469- Get Version 2.0.0 of the New TCA Policy Type
470- Get Version 3.0.0 of the New TCA Policy Type
471- Get Version 4.0.0 of the New TCA Policy Type
472- Get Version 5.0.0 of the New TCA Policy Type
473- Get Version 6.0.0 of the New TCA Policy Type
474- Get Version 7.0.0 of the New TCA Policy Type
475- Get Version 8.0.0 of the New TCA Policy Type
476- Get Version 9.0.0 of the New TCA Policy Type
477- Get Version 10.0.0 of the New TCA Policy Type
478- Get Version 11.0.0 of the New TCA Policy Type
479- Get the Latest Version of the New TCA Policy Type
480- A 10 sec timer
481- Create a New TCA Policy with Version 1.0.0 over the New TCA Policy Type Version 2.0.0
482- Create a New TCA Policy with Version 2.0.0 over the New TCA Policy Type Version 2.0.0
483- Create a New TCA Policy with Version 3.0.0 over the New TCA Policy Type Version 2.0.0
484- Create a New TCA Policy with Version 4.0.0 over the New TCA Policy Type Version 2.0.0
485- Create a New TCA Policy with Version 5.0.0 over the New TCA Policy Type Version 2.0.0
486- Create a New TCA Policy with Version 6.0.0 over the New TCA Policy Type Version 2.0.0
487- Create a New TCA Policy with Version 7.0.0 over the New TCA Policy Type Version 2.0.0
488- Create a New TCA Policy with Version 8.0.0 over the New TCA Policy Type Version 2.0.0
489- Create a New TCA Policy with Version 9.0.0 over the New TCA Policy Type Version 2.0.0
490- Create a New TCA Policy with Version 10.0.0 over the New TCA Policy Type Version 2.0.0
491- Create a New TCA Policy with Version 11.0.0 over the New TCA Policy Type Version 2.0.0
492- A 10 sec Timer
493- Get All Existing TCA Policies
494- Get All Existing Versions of TCA Policies
495- Get Version 1.0.0 of the New TCA Policy
496- Get Version 2.0.0 of the New TCA Policy
497- Get Version 3.0.0 of the New TCA Policy
498- Get Version 4.0.0 of the New TCA Policy
499- Get Version 5.0.0 of the New TCA Policy
500- Get Version 6.0.0 of the New TCA Policy
501- Get Version 7.0.0 of the New TCA Policy
502- Get Version 8.0.0 of the New TCA Policy
503- Get Version 9.0.0 of the New TCA Policy
504- Get Version 10.0.0 of the New TCA Policy
505- Get Version 11.0.0 of the New TCA Policy
506- Get the Latest Version of the New TCA Policy
507- A 10 sec Timer
508- Create a New Guard Policy with Version 1
509- Create a New Guard Policy with Version 5
510- Create a New Guard Policy with Version 9
511- Create a New Guard Policy with Version 12
512- A 10 sec Timer
513- Get Version 1 of the New Guard Policy
514- Get Version 5 of the New Guard Policy
515- Get Version 9 of the New Guard Policy
516- Get Version 12 of the New Guard Policy
517- Get the Latest Version of the New Guard Policy
518- A 10 sec Timer
519
520**TearDown Thread (will only be running after API Test Flow is completed)**
521
522- Delete Version 2.0.0 of the New TCA Policy Type (suppose to return 409-Conflict)
523- Delete Version 3.0.0 of the New TCA Policy Type
524- Delete Version 4.0.0 of the New TCA Policy Type
525- Delete Version 5.0.0 of the New TCA Policy Type
526- Delete Version 6.0.0 of the New TCA Policy Type
527- Delete Version 7.0.0 of the New TCA Policy Type
528- Delete Version 8.0.0 of the New TCA Policy Type
529- Delete Version 9.0.0 of the New TCA Policy Type
530- Delete Version 10.0.0 of the New TCA Policy Type
531- Delete Version 11.0.0 of the New TCA Policy Type
532- Delete Version 1.0.0 of the New TCA Policy
533- Delete Version 2.0.0 of the New TCA Policy
534- Delete Version 3.0.0 of the New TCA Policy
535- Delete Version 4.0.0 of the New TCA Policy
536- Delete Version 5.0.0 of the New TCA Policy
537- Delete Version 6.0.0 of the New TCA Policy
538- Delete Version 7.0.0 of the New TCA Policy
539- Delete Version 8.0.0 of the New TCA Policy
540- Delete Version 9.0.0 of the New TCA Policy
541- Delete Version 10.0.0 of the New TCA Policy
542- Delete Version 11.0.0 of the New TCA Policy
543- Re-Delete Version 2.0.0 of the New TCA Policy Type (will return 200 now since all TCA policies created over have been deleted)
544- Delete Version 1 of the new Guard Policy
545- Delete Version 5 of the new Guard Policy
546- Delete Version 9 of the new Guard Policy
547- Delete Version 12 of the new Guard Policy
548
549Run Test
550--------
551
552**Local Machine**
553
554Connect to lab VPN
555
556.. code-block:: bash
557
558 $ sudo openvpn --config <path to lab ovpn key file>
559
560SSH into JMeter VM (VM1)
561
562.. code-block:: bash
563
564 $ ssh -i <path to lab ssh key file> ubuntu@<host ip of JMeter VM>
565
566Run JMeter test in background for 72+ hours
567
568.. code-block:: bash
569
570 $ mkdir s3p
571 $ nohup ./jMeter/apache-jmeter-5.1.1/bin/jmeter.sh -n -t ~/api/testsuites/stability/src/main/resources/testplans/policy_api_stability.jmx &
572
573(Optional) Monitor JMeter test that is running in background (anytime after re-logging into JMeter VM - VM1)
574
575.. code-block:: bash
576
577 $ tail -f s3p/stability.log nohup.out
578
579
580Test Results
581------------
582
583**Summary**
584
585Policy API stability test plan was triggered and running for 72+ hours without any error occurred.
586
587**Test Statistics**
588
589======================= ============= =========== =============================== =============================== ===============================
590**Total # of requests** **Success %** **Error %** **Avg. time taken per request** **Min. time taken per request** **Max. time taken per request**
591======================= ============= =========== =============================== =============================== ===============================
592 49723 100% 0% 86 ms 4 ms 795 ms
593======================= ============= =========== =============================== =============================== ===============================
594
595**VisualVM Results**
596
597.. image:: images/results-5.png
598.. image:: images/results-6.png
599
600**JMeter Results**
601
602.. image:: images/results-1.png
603.. image:: images/results-2.png
604.. image:: images/results-3.png
605.. image:: images/results-4.png
606
607
608
609Performance Test of Policy API
610++++++++++++++++++++++++++++++
611
612Introduction
613------------
614
615Performance test of policy-api 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.
616
617Setup Details
618-------------
619
620The performance test is performed on OOM-based deployment of ONAP Policy framework components in Intel Wind River Lab environment.
621In addition, we use another VM with JMeter installed to generate the transactions.
622The JMeter VM will be sending large number of REST requests to the policy-api component and collecting the statistics.
623Policy-api component already knows how to communicate with MariaDB component if OOM-based deployment is working correctly.
624
625Test Plan
626---------
627
628Performance test plan is the same as stability test plan above.
629Only differences are, in performance test, we increase the number of threads up to 20 (simulating 20 users' behaviors at the same time) whereas reducing the test time down to 1 hour.
630
631Run Test
632--------
633
634Running/Triggering performance test will be the same as stability test. That is, launch JMeter pointing to corresponding *.jmx* test plan. The *API_HOST* and *API_PORT* are already set up in *.jmx*.
635
636Test Results
637------------
638
639Test results are shown as below. Overall, the test was running smoothly and successfully. We do see some minor failed transactions, especially in POST calls which intend to write into DB simultaneously in a multi-threaded fashion . All GET calls (reading from DB) were succeeded.
640
641.. image:: images/summary-1.png
642.. image:: images/summary-2.png
643.. image:: images/summary-3.png
644.. image:: images/result-1.png
645.. image:: images/result-2.png
646.. image:: images/result-3.png
647.. image:: images/result-4.png
648.. image:: images/result-5.png
649.. image:: images/result-6.png
650
651
652Policy PAP component
653~~~~~~~~~~~~~~~~~~~~
654
65572 Hours Stability Test of PAP
656++++++++++++++++++++++++++++++
657
658Introduction
659------------
660
661The 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.
662
663Setup details
664-------------
665
666The stability test is performed on VM's running in OpenStack cloud environment.
667
668There are 2 seperate VM's, one for running PAP & other one for running JMeter to simulate steady flow of transactions.
669
670All the dependencies like mariadb, dmaap simulator, pdp simulator & policy/api component are installed in the VM having JMeter.
671
672For simplicity lets assume
673
674VM1 will be running JMeter, MariaDB, DMaaP simulator, PDP simulator & API component.
675
676VM2 will be running only PAP component.
677
678**OpenStack environment details**
679
680Version: Mitaka
681
682**PAP VM details (VM2)**
683
684OS:Ubuntu 16.04 LTS
685
686CPU: 4 core
687
688RAM: 4 GB
689
690HardDisk: 40 GB
691
692Docker Version: 18.09.6
693
694Java: openjdk version "1.8.0_212"
695
696**JMeter VM details (VM1)**
697
698OS: Ubuntu 16.04 LTS
699
700CPU: 4 core
701
702RAM: 4 GB
703
704HardDisk: 40 GB
705
706Docker Version: 18.09.6
707
708Java: openjdk version "1.8.0_212"
709
710JMeter: 5.1.1
711
712Install Docker in VM1 & VM2
713---------------------------
714
715Make sure to execute below commands in VM1 & VM2 both.
716
717Make the etc/hosts entries
718
719.. code-block:: bash
720
721 $ echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo tee -a /etc/hosts
722
723Make the DNS entries
724
725.. code-block:: bash
726
727 $ echo "nameserver <PrimaryDNSIPIP>" >> /etc/resolvconf/resolv.conf.d/head
728 $ echo "nameserver <SecondaryDNSIP>" >> /etc/resolvconf/resolv.conf.d/head
729 $ resolvconf -u
730
731Update the ubuntu software installer
732
733.. code-block:: bash
734
735 $ apt-get update
736
737Check and Install Java
738
739.. code-block:: bash
740
741 $ apt-get install -y openjdk-8-jdk
742 $ java -version
743
744Ensure that the Java version that is executing is OpenJDK version 8
745
746
747Check and install docker
748
749.. code-block:: bash
750
751 $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
752 $ add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
753 $ apt-get update
754 $ apt-cache policy docker-ce
755 $ apt-get install -y docker-ce
756 $ systemctl status docker
757 $ docker ps
758
759Change the permissions of the Docker socket file
760
761.. code-block:: bash
762
763 $ chmod 777 /var/run/docker.sock
764
765Check the status of the Docker service and ensure it is running correctly
766
767.. code-block:: bash
768
769 $ service docker status
770 $ docker ps
771
772Install JMeter in VM1
773---------------------
774
775Download & install JMeter
776
777.. code-block:: bash
778
779 $ mkdir jMeter
780 $ cd jMeter
781 $ wget http://mirrors.whoishostingthis.com/apache//jmeter/binaries/apache-jmeter-5.1.1.zip
782 $ unzip apache-jmeter-5.1.1.zip
783
784Run JMeter
785
786.. code-block:: bash
787
788 $ /home/ubuntu/jMeter/apache-jmeter-5.1.1/bin/jmeter
789
790The above command will load the JMeter UI. Then navigate to File → Open → Browse and select the test plan jmx file to open.
791The jmx file is present in the policy/pap git repository.
792
793Install simulators in VM1
794-------------------------
795
796For 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>`_
797
798Copy the script & all related files in virtual machine and run it.
799
800After installation make sure that following 4 docker containers are up and running.
801
802.. code-block:: bash
803
804 root@policytest-policytest-3-p5djn6as2477:/home/ubuntu/simulator# docker ps
805 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
806 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
807 0a931c0a63ac pdp/simulator:latest "bash pdp-sim.sh" 6 days ago Up 6 days pdp-simulator
808 a41adcb32afb dmaap/simulator:latest "bash dmaap-sim.sh" 6 days ago Up 6 days 0.0.0.0:3904->3904/tcp dmaap-simulator
809 d52d6b750ba0 mariadb:10.2.14 "docker-entrypoint.s…" 6 days ago Up 6 days 0.0.0.0:3306->3306/tcp mariadb
810
811Install PAP in VM2
812------------------
813
814For 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>`_
815
816Copy the script & all related files in virtual machine and run it.
817
818After installation make sure that following docker container is up and running.
819
820.. code-block:: bash
821
822 root@policytest-policytest-0-uc3y2h5x6p4j:/home/ubuntu/pap# docker ps
823 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
824 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
825
826Install & configure visualVM in VM2
827-----------------------------------
828
829visualVM 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.
830
831Install visualVM
832
833.. code-block:: bash
834
835 $ sudo apt-get install visualvm
836
837Run few commands to configure permissions
838
839.. code-block:: bash
840
841 $ cd /usr/lib/jvm/java-8-openjdk-amd64/bin/
842 $ sudo touch visualvm.policy
843 $ sudo chmod 777 visualvm.policy
844
845 $ vi visualvm.policy
846
847 Add the following in visualvm.policy
848
849
850 grant codebase "file:/usr/lib/jvm/java-8-openjdk-amd64/lib/tools.jar" {
851 permission java.security.AllPermission;
852 };
853
854Run following commands to start jstatd using port 1111
855
856.. code-block:: bash
857
858 $ cd /usr/lib/jvm/java-8-openjdk-amd64/bin/
859 $ ./jstatd -p 1111 -J-Djava.security.policy=visualvm.policy &
860
861Run visualVM locally to connect to remote VM2
862
863.. code-block:: bash
864
865 # On your windows machine or your linux box locally, launch visualVM
866
867Connect to jstatd & remote apex-pdp JVM
868
869 1. Right click on "Remote" in the left panel of the screen and select "Add Remote Host..."
870 2. Enter the IP address of VM2.
871 3. Right click on IP address, select "Add JMX Connection..."
872 4. Enter the VM2 IP Address (from step 2) <IP address>:9090 ( for example -10.12.6.201:9090) and click OK.
873 5. Double click on the newly added nodes under "Remote" to start monitoring CPU, Memory & GC.
874
875Sample Screenshot of visualVM
876
877.. image:: images/pap-s3p-vvm-sample.png
878
879Test Plan
880---------
881
882The 72 hours stability test will run the following steps sequentially in a single threaded loop.
883
884- **Create Policy Type** - creates an operational policy type using policy/api component
885- **Create Policy** - creates an operational policy using the policy type create in above step using policy/api component
886- **Check Health** - checks the health status of pap
887- **Check Statistics** - checks the statistics of pap
888- **Change state to ACTIVE** - changes the state of PdpGroup to ACTIVE
889- **Check PdpGroup Query** - makes a PdpGroup query request and verify that PdpGroup is in ACTIVE state.
890- **Deploy Policy** - deploys the policy in PdpGroup
891- **Undeploy Policy** - undeploy the policy from PdpGroup
892- **Change state to PASSIVE** - changes the state of PdpGroup to PASSIVE
893- **Check PdpGroup Query** - makes a PdpGroup query request and verify that PdpGroup is in PASSIVE state.
894- **Delete Policy** - deletes the operational policy using policy/api component
895- **Delete Policy Type** - deletes the operational policy type using policy/api component
896
897The following steps can be used to configure the parameters of test plan.
898
899- **HTTP Authorization Manager** - used to store user/password authentication details.
900- **HTTP Header Manager** - used to store headers which will be used for making HTTP requests.
901- **User Defined Variables** - used to store following user defined parameters.
902
903========== ===============================================
904 **Name** **Description**
905========== ===============================================
906 PAP_HOST IP Address or host name of PAP component
907 PAP_PORT Port number of PAP for making REST API calls
908 API_HOST IP Address or host name of API component
909 API_PORT Port number of API for making REST API calls
910========== ===============================================
911
912Screenshot of PAP stability test plan
913
914.. image:: images/pap-s3p-testplan.png
915
916Test Results
917------------
918
919**Summary**
920
921Stability test plan was triggered for 72 hours.
922
923**Test Statistics**
924
925======================= ================= ================== ==================================
926**Total # of requests** **Success %** **Error %** **Average time taken per request**
927======================= ================= ================== ==================================
928178208 100 % 0 % 76 ms
929======================= ================= ================== ==================================
930
931**VisualVM Screenshot**
932
933.. image:: images/pap-s3p-vvm-1.png
934.. image:: images/pap-s3p-vvm-2.png
935
936**JMeter Screenshot**
937
938.. image:: images/pap-s3p-jm-1.png
939.. image:: images/pap-s3p-jm-1.png
940
941
942Policy XACML PDP component
943~~~~~~~~~~~~~~~~~~~~~~~~~~
944
945Performance Test of Policy XACML PDP
946++++++++++++++++++++++++++++++++++++
947
948Summary
949-------
950
951The Performance test was executed by performing requests against the Policy RESTful APIs residing on the XACML PDP installed in the windriver lab to get policy decisions for monitoring and guard policy types. This was running on a kubernetes host having the following configuration:
952
953- 16GB RAM
954- 8 VCPU
955- 160GB Disk
956
957The performance test runs 10 simultaneous threads calling XACML PDP RESTful APIs to get decisions for Monitoring, Guard Min Max, and Guard Frequency Limiter policy types, with at duration of 6000 seconds. The test execution lasted approximately 50 minutes resulting in the following summary:
958
959- 37,305 Healthcheck requests
960- 33,716 Statistics requests
961- 25,294 Monitoring decision requests
962- 25,288 Guard Min Max decisions
963- 25,286 Guard Frequency Limiter requests
964
965The average throughput was about 9.8 transactions per second. CPU and memory usage along with a screenshot of the JMeter Summary Report are provided in this document.
966
967Results
968-------
969
970**CPU Utilization**
971
972Total CPU used by the PDP was measured before and after the test, using "ps -l".
973
974=================== ================== ================ =================== =============== ==================
975**Intial CPU time** **Final CPU time** **Intial CPU %** **Intial Memory %** **Final CPU %** **Final Memory %**
976=================== ================== ================ =================== =============== ==================
97700:60:27 00:73:45 3.5% 4.0% 94.12.3% 4.0%
978=================== ================== ================ =================== =============== ==================
979
980**Memory Utilization**
981
982.. code-block:: bash
983
984 Number of young garbage collections used during the test: 518
985 Avg. Young garbage collection time: ~11.56ms per collection
986 Total number of Full garbage collection: 32
987 Avg. Full garbage collection time: ~315.06ms per collection
988
989
990 S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
991
992 16768.0 16768.0 0.0 5461.0 134144.0 71223.6 334692.0 138734.5 50008.0 48955.8 5760.0 5434.3 4043 45.793 32 10.082 55.875
993
994 16768.0 16768.0 0.0 4993.4 134144.0 66115.7 334692.0 252887.4 50264.0 49036.5 5760.0 5439.7 4561 53.686 32 10.082 63.768
995
996**Jmeter Results Summary**
997
998.. image:: images/xacml-s3p.PNG
999
1000
1001Policy Drools PDP component
1002~~~~~~~~~~~~~~~~~~~~~~~~~~~
1003
1004
1005Policy APEX PDP component
1006~~~~~~~~~~~~~~~~~~~~~~~~~
1007
1008Setting up Stability Tests in APEX
1009++++++++++++++++++++++++++++++++++
1010
1011Introduction
1012------------
1013
1014The 72 hour Stability Test for apex-pdp has the goal of introducing a steady flow of transactions initiated from a test client server running JMeter. The pdp is configured to start a rest server inside it and take input from rest clients (JMeter) and send back output to the rest clients (JMeter).
1015
1016The input events will be submitted through rest interface of apex-pdp and the results are verified using the rest responses coming out from apex-pdp.
1017
1018The test will be performed in a multi-threaded environment where 20 threads running in JMeter will keep sending events to apex-pdp in every 500 milliseconds for the duration of 72 hours.
1019
1020Setup details
1021-------------
1022
1023The stability test is performed on VM's running in OpenStack cloud environment. There are 2 seperate VM's, one for running apex pdp & other one for running JMeter to simulate steady flow of transactions.
1024
1025**OpenStack environment details**
1026
1027Version: Mitaka
1028
1029**apex-pdp VM details**
1030
1031OS:Ubuntu 16.04.5 LTS
1032
1033CPU: 4 core
1034
1035RAM: 4 GB
1036
1037HardDisk: 40 GB
1038
1039Docker Version: 18.06.1-ce, build e68fc7a
1040
1041Java: openjdk version "1.8.0_181"
1042
1043**JMeter VM details**
1044
1045OS: Ubuntu 16.04.3 LTS
1046
1047CPU: 4 core
1048
1049RAM: 4 GB
1050
1051HardDisk: 40 GB
1052
1053Java: openjdk version "1.8.0_181"
1054
1055JMeter: 5.1.1
1056
1057Install JMeter in virtual machine
1058---------------------------------
1059
1060Make the etc/hosts entries
1061
1062.. code-block:: bash
1063
1064 echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo tee -a /etc/hosts
1065
1066Make the DNS entries
1067
1068.. code-block:: bash
1069
1070 echo "nameserver <PrimaryDNSIPIP>" >> sudo /etc/resolvconf/resolv.conf.d/head
1071
1072 echo "nameserver <SecondaryDNSIP>" >> sudo /etc/resolvconf/resolv.conf.d/head
1073
1074 resolvconf -u
1075
1076Update the ubuntu software installer
1077
1078.. code-block:: bash
1079
1080 apt-get update
1081
1082Check & Install Java
1083
1084.. code-block:: bash
1085
1086 apt-get install -y openjdk-8-jdk
1087
1088 java -version
1089
1090Download & install JMeter
1091
1092.. code-block:: bash
1093
1094 mkdir jMeter
1095
1096
1097 cd jMeter
1098
1099
1100 wget http://mirrors.whoishostingthis.com/apache//jmeter/binaries/apache-jmeter-5.1.1.zip
1101
1102
1103 unzip apache-jmeter-5.1.1.zip
1104
1105Install apex-pdp in virtual machine
1106-----------------------------------
1107
1108We will be running apex-pdp as docker container. So we need to first install docker and then create the container hosting apex-pdp by pulling the image from ONAP repository.
1109
1110**Docker Installation**
1111
11121. Make the etc/hosts entries
1113
1114.. code-block:: bash
1115
1116 echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo tee -a /etc/hosts
1117
11182. Make the DNS entries
1119
1120.. code-block:: bash
1121
1122 echo "nameserver <PrimaryDNSIPIP>" >> sudo /etc/resolvconf/resolv.conf.d/head
1123 echo "nameserver <SecondaryDNSIP>" >> sudo /etc/resolvconf/resolv.conf.d/head
1124 resolvconf -u
1125
11263. Update the ubuntu software installer
1127
1128.. code-block:: bash
1129
1130 apt-get update
1131
11324. Check and Install Java
1133
1134.. code-block:: bash
1135
1136 apt-get install -y openjdk-8-jdk
1137 java -version
1138
1139Ensure that the Java version that is executing is OpenJDK version 8
1140
11415. Check and install docker
1142
1143.. code-block:: bash
1144
1145 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
1146 add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
1147 apt-get update
1148 apt-cache policy docker-ce
1149 apt-get install -y docker-ce
1150 systemctl status docker
1151 docker ps
1152
11536. Change the permissions of the Docker socket file
1154
1155.. code-block:: bash
1156
1157 chmod 777 /var/run/docker.sock
1158
11597. Check the status of the Docker service and ensure it is running correctly
1160
1161.. code-block:: bash
1162
1163 service docker status
1164 docker ps
1165
1166**Install apex-pdp**
1167
1168Run the below command to create the container hosting apex-pdp by pulling the image from ONAP repository.
1169
1170.. code-block:: bash
1171
1172 docker run -d --name apex -p 12561:12561 -p 23324:23324 -it nexus3.onap.org:10001/onap/policy-apex-pdp:2.1.0-latest /bin/bash -c "/opt/app/policy/apex-pdp/bin/apexApps.sh jmx-test -c /opt/app/policy/apex-pdp/examples/config/SampleDomain/RESTServerJsonEvent.json"
1173 docker ps
1174
1175Note: If you observe that requests from JMeter client is failing due to timeout, then modify the "RESTServerJsonEvent.json" mentioned in the above command and increase the "synchronousTimeout" property as per needed.
1176
1177Install & Configure VisualVM
1178----------------------------
1179
1180VisualVM needs to be installed in the virtual machine having apex-pdp. It will be used to monitor CPU, Memory, GC for apex-pdp while stability test is running.
1181
1182Install visualVM
1183
1184.. code-block:: bash
1185
1186 sudo apt-get install visualvm
1187
1188Login to docker container (using root)
1189
1190.. code-block:: bash
1191
1192 docker exec -u 0 -it apex /bin/bash
1193
1194Run few commands to configure permissions
1195
1196.. code-block:: bash
1197
1198 cd /usr/lib/jvm/java-1.8-openjdk/bin/
1199
1200 touch visualvm.policy
1201
1202 vi visualvm.policy
1203
1204 Add the following in visualvm.policy
1205
1206
1207 grant codebase "file:/usr/lib/jvm/java-1.8-openjdk/lib/tools.jar" {
1208 permission java.security.AllPermission;
1209 };
1210
1211
1212 chmod 777 visualvm.policy
1213
1214
1215 exit
1216
1217Login to docker container (using normal user)
1218
1219.. code-block:: bash
1220
1221 docker exec -it apex /bin/bash
1222
1223Run following commands to start jstatd using port 1111
1224
1225.. code-block:: bash
1226
1227 cd /usr/lib/jvm/java-1.8-openjdk/bin/
1228
1229
1230 ./jstatd -p 1111 -J-Djava.security.policy=visualvm.policy &
1231
1232
1233 exit
1234
1235Login to VM using graphical interface in separate terminal window.
1236
1237.. code-block:: bash
1238
1239 ssh -X <user>@<VM-IP-ADDRESS>
1240
1241Open visualVM
1242
1243.. code-block:: bash
1244
1245 visualvm &
1246
1247Connect to jstatd & remote apex-pdp JVM
1248
12491. Right click on "Remote" in the left panel of the screen and select "Add Remote Host..."
1250
12512. Enter the IP address of apex-pdp docker container.
1252
1253.. code-block:: bash
1254
1255 docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
1256
12573. Right click on IP address, select "Add jstatd Connection..."
12584. In "jstatd Connections" tab, enter port 1111 and click OK.
12595. Right click on IP address, select "Add JMX Connection..."
12606. Enter the apex-pdp docker container IP Address (from step 2) <IP address>:9911 ( for example - 172.17.0.2:9911) and click OK.
12617. Double click on the newly added nodes under "Remote" to start monitoring CPU, Memory & GC.
1262
1263Sample Screenshot of visualVM
1264
1265.. image:: images/apex-s3p-vvm-sample.jpg
1266
1267Test Plan
1268---------
1269
1270The 72 hours stability test will run the following steps in 20 threaded loop.
1271
1272- **Send Input Event** - sends an input message to rest interface of apex-pdp.
1273- **Assert Response Code** - assert the response code coming from apex-pdp.
1274- **Assert Response Message** - assert the response message coming from apex-pdp.
1275
1276The following steps can be used to configure the parameters of test plan.
1277
1278- **HTTP Header Manager** - used to store headers which will be used for making HTTP requests.
1279- **HTTP Request Defaults** - used to store HTTP request details like Server Name or IP, Port, Protocol etc.
1280- **User Defined Variables** - used to store following user defined parameters.
1281
1282================== ============================================================================ ============================
1283**Name** **Description** **Default Value**
1284================== ============================================================================ ============================
1285wait Wait time after each request (in milliseconds) 500
1286threads Number of threads to run test cases in parallel. 20
1287threadsTimeOutInMs Synchronization timer for threads running in parallel (in milliseconds). 5000
1288================== ============================================================================ ============================
1289
1290
1291Download and update the jmx file presented in the apex-pdp git repository - `jmx file path <https://gerrit.onap.org/r/gitweb?p=policy/apex-pdp.git;a=tree;f=testsuites/apex-pdp-stability/src/main/resources;h=99d373033a190a690d4e05012bc3a656cae7bc3f;hb=refs/heads/master>`_.
1292
1293- HTTPSampler.domain - The ip address of VM which the apex container is running
1294- HTTPSampler.port - The listening port, here is 23324
1295- ThreadGroup.druation - Set the duration to 72 hours (in seconds)
1296
1297Use the CLI mode to start the test
1298
1299.. code-block:: bash
1300
1301 ./jmeter.sh -n -t ~/apexPdpStabilityTestPlan.jmx -Jusers=1 -l ~/stability.log
1302
1303Stability Test Result
1304---------------------
1305
1306**Summary**
1307
1308Stability test plan was triggered for 72 hours injecting input events to apex-pdp from 20 client threads running in JMeter.
1309
1310After the test stop, we can generate a HTML test report via command
1311
1312.. code-block:: bash
1313
1314 ~/jMeter/apache-jmeter-5.1.1/bin/jmeter -g stability.log -o ./result/
1315
1316============================================== =================================================== ================================ ============= ============
1317**Number of Client Threads running in JMeter** **Number of Server Threads running in Apex engine** **Total number of input events** **Success %** **Error %**
1318============================================== =================================================== ================================ ============= ============
131920 4 6394602 99.999971% 0.0029%
1320============================================== =================================================== ================================ ============= ============
1321
1322:download:`result.zip <zip/result.zip>`
1323:download:`onap.zip <zip/onap.zip>`
1324
1325
1326Setting up Performance Tests in APEX
1327++++++++++++++++++++++++++++++++++++
1328
1329The apex-pdp has built in support for performance testing. A special performance testing REST server is available in the code base for performance testing.
1330It is in the module `performance-benchmark-test <https://github.com/onap/policy-apex-pdp/tree/master/testsuites/performance/performance-benchmark-test>`_.
1331To execute a benchmark test, you start the REST server, and then configure and run APEX against the server.
1332There are example configurations for running tests in the `resources of this module <https://github.com/onap/policy-apex-pdp/tree/master/testsuites/performance/performance-benchmark-test/src/main/resources/examples/benchmark>`_.
1333
1334In order to run the test for 72 hours, set the batch count in the `EventGeneratorConfig.json <https://github.com/onap/policy-apex-pdp/blob/master/testsuites/performance/performance-benchmark-test/src/main/resources/examples/benchmark/EventGeneratorConfig.json>`_ file to zero, which causes the REST server to generate batches forever.
1335
1336Here is an example of how to do this:
1337
13381. Clone and build the apex-pdp git repo
1339
13402. Go into the performance-benchmark-test module and run the REST server
1341
1342.. code-block:: bash
1343
1344 cd testsuites/performance/performance-benchmark-test
1345 mvn exec:java -Dexec.mainClass="org.onap.policy.apex.testsuites.performance.benchmark.eventgenerator.EventGenerator" -Dexec.args="-c src/main/resources/examples/benchmark/EventGeneratorConfig.json"
1346
13473. Separately, create a local directory and unzip the APEX tarball
1348
1349.. code-block:: bash
1350
1351 mkdir apex
1352 cd apex
1353 tar zxvf ~/git/onap/policy/apex-pdp/packages/apex-pdp-package-full/target/*gz
1354
13554. Run APEX with a configuration that runs against the benchmark REST server, select the configuration that is appropriate for the number of threads for the number of cores on the host on which APEX is running. For example on a 32 core machine, select the "32" configuration, on an 8 core machine, select the "08" configuration.
1356
1357.. code-block:: bash
1358
1359 bin/apexApps.sh engine -c ~/git/onap/policy/apex-pdp/testsuites/performance/performance-benchmark-test/src/main/resources/examples/benchmark/Javascript64.json
1360
13615. To get the test results, Issue the following command using CURL or from a browser(also can store the result into a file by setting outfile in the `EventGeneratorConfig.json <https://github.com/onap/policy-apex-pdp/blob/master/testsuites/performance/performance-benchmark-test/src/main/resources/examples/benchmark/EventGeneratorConfig.json>`_ file, statistics would be written into this file after event generator terminated)
1362
1363.. code-block:: bash
1364
1365 curl http://localhost:32801/EventGenerator/Stats
1366
1367The results are similar to those below:
1368
1369:download:`Example APEX performance metrics <json/example-apex-perf.json>`
1370
1371Performance Test Result
1372-----------------------
1373
1374**Summary**
1375
1376Performance test was triggered for 2 hours on a 4 core, 4GB RAM virtual machine.
1377
1378**Test Statistics**
1379
1380:download:`Attached result log <json/result.json>`
1381
1382=============== ============= ================= ============== ===================== ================== ============= ===========
1383**batchNumber** **batchSize** **eventsNotSent** **eventsSent** **eventsNotReceived** **eventsReceived** **Success %** **Error %**
1384=============== ============= ================= ============== ===================== ================== ============= ===========
13853650 182500 0 182500 0 182500 100 % 0 %
1386=============== ============= ================= ============== ===================== ================== ============= ===========
1387
1388======================== ========================= ========================
1389**averageRoundTripNano** **shortestRoundTripNano** **longestRoundTripNano**
1390======================== ========================= ========================
139140024623 7439158 5161374486
1392======================== ========================= ========================
1393
1394============================ ============================= ============================
1395**averageApexExecutionNano** **shortestApexExecutionNano** **longestApexExecutionNano**
1396============================ ============================= ============================
13971335622 513650 5104326434
1398============================ ============================= ============================