72 Hours Stability Test Plan of apex-pdp
Introduction
The 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).
The 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.
The 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.
Setup details
The 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.
OpenStack environment details
Version: Mitaka
apex-pdp VM details
OS:Ubuntu 16.04.5 LTS
CPU: 2 core
RAM: 3 GB
HardDisk: 40 GB
Docker Version: 18.06.1-ce, build e68fc7a
Java: openjdk version "1.8.0_181"
JMeter VM details
OS: Ubuntu 16.04.3 LTS
CPU: 2 core
RAM: 3 GB
HardDisk: 40 GB
Java: openjdk version "1.8.0_181"
JMeter: 5.0
Install JMeter in virtual machine
Make the etc/hosts entries
echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo tee -a /etc/hosts
Make the DNS entries
echo "nameserver <PrimaryDNSIPIP>" >> /etc/resolvconf/resolv.conf.d/head echo "nameserver <SecondaryDNSIP>" >> /etc/resolvconf/resolv.conf.d/head resolvconf -u
Update the ubuntu software installer
apt-get update
Check & Install Java
apt-get install -y openjdk-8-jdk java -version
Download & install JMeter
mkdir jMeter cd jMeter wget http://mirrors.whoishostingthis.com/apache//jmeter/binaries/apache-jmeter-5.0.zip unzip apache-jmeter-5.0.zip
Run JMeter
/home/ubuntu/jMeter/apache-jmeter-5.0/bin/jmeter
The above command will load the JMeter UI. Then navigate to File → Open → Browse and select the test plan jmx file to open. The jmx file is present in the apex-pdp git repository - jmx file path
Install apex-pdp in virtual machine
We 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.
Docker Installation
Make the etc/hosts entries
echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo tee -a /etc/hosts
Make the DNS entries
echo "nameserver <PrimaryDNSIPIP>" >> /etc/resolvconf/resolv.conf.d/head echo "nameserver <SecondaryDNSIP>" >> /etc/resolvconf/resolv.conf.d/head resolvconf -u
Update the ubuntu software installer
apt-get update
Check and Install Java
apt-get install -y openjdk-8-jdk java -version
Ensure that the Java version that is executing is OpenJDK version 8
Check and install docker
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
chmod 777 /var/run/docker.sock
Check the status of the Docker service and ensure it is running correctly
service docker status docker ps
Install apex-pdp
Run the below command to create the container hosting apex-pdp by pulling the image from ONAP repository.
docker run -d --name apex -p 12561:12561 -p 23324:23324 -it nexus3.onap.org:10001/onap/policy-apex-pdp:2.0-SNAPSHOT-latest /bin/bash -c "/opt/app/policy/apex-pdp/bin/apexEngine.sh -c /opt/app/policy/apex-pdp/examples/config/SampleDomain/RESTServerJsonEvent.json" docker ps
Note: 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.
Install & Configure VisualVM
VisualVM 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.
Install visualVM
sudo apt-get install visualvm
Login to docker container (using root)
docker exec -u 0 -it apex /bin/bash
Run few commands to configure permissions
cd /usr/lib/jvm/java-8-openjdk-amd64/bin/ touch visualvm.policy vi visualvm.policy Add the following in visualvm.policy grant codebase "file:/usr/lib/jvm/java-8-openjdk-amd64/lib/tools.jar" { permission java.security.AllPermission; }; chmod 777 visualvm.policy exit
Login to docker container (using normal user)
docker exec -it apex /bin/bash
Run following commands to start jstatd using port 1111
cd /usr/lib/jvm/java-8-openjdk-amd64/bin/ ./jstatd -p 1111 -J-Djava.security.policy=visualvm.policy & exit
Login to VM using graphical interface in separate terminal window.
ssh -X <user>@<VM-IP-ADDRESS>
Open visualVM
visualvm &
Connect to jstatd & remote apex-pdp JVM
- Right click on "Remote" in the left panel of the screen and select "Add Remote Host..."
Enter the IP address of apex-pdp docker container.
- Right click on IP address, select "Add jstatd Connection..."
- In "jstatd Connections" tab, enter port 1111 and click OK.
- Right click on IP address, select "Add JMX Connection..."
- Enter the apex-pdp docker container IP Address (from step 2) <IP address>:9991 ( for example - 172.18.0.7:9991) and click OK.
- Double click on the newly added nodes under "Remote" to start monitoring CPU, Memory & GC.
Sample Screenshot of visualVM
Test Plan
The 72 hours stability test will run the following steps in 20 threaded loop.
- Send Input Event - sends an input message to rest interface of apex-pdp.
- Assert Response Code - assert the response code coming from apex-pdp.
- Assert Response Message - assert the response message coming from apex-pdp.
The following steps can be used to configure the parameters of test plan.
- HTTP Header Manager - used to store headers which will be used for making HTTP requests.
- HTTP Request Defaults - used to store HTTP request details like Server Name or IP, Port, Protocol etc.
User Defined Variables - used to store following user defined parameters.
Name Description Default Value wait Wait time after each request (in milliseconds) 500 threads Number of threads to run test cases in parallel. 20 threadsTimeOutInMs Synchronization timer for threads running in parallel (in milliseconds). 5000
Screenshot of apex-pdp stability test plan