Added automation script, 2 test cases, Heat template for test case, Project INFO... 09/1209/1
authorNauman Ahad <Nauman_Ahad@dell.com>
Fri, 14 Aug 2015 21:30:41 +0000 (14:30 -0700)
committerNauman Ahad <Nauman_Ahad@dell.com>
Fri, 14 Aug 2015 21:30:41 +0000 (14:30 -0700)
Structured existing playbooks into directories, added automations scripts and test cases which
were demonstrated in demo1. Basic Directoy structure also introduced. All hard coded values removed.

JIRA: QTIP-3

Change-Id: Icdceb0f125a5275d3dee7845a403e567d729dc26
Signed-off-by: Nauman Ahad <Nauman_Ahad@dell.com>
12 files changed:
INFO [new file with mode: 0644]
QTIP.sh [new file with mode: 0755]
README [new file with mode: 0644]
Test-cases/SampleHeat.yaml [new file with mode: 0644]
benchmarks/playbooks/cachebench.yaml [moved from playboooks/cachebench.yaml with 58% similarity]
benchmarks/playbooks/dhrystone.yaml [new file with mode: 0644]
benchmarks/playbooks/ramspeedbench.yaml [new file with mode: 0644]
benchmarks/playbooks/whetstone.yaml [new file with mode: 0644]
clean.sh [new file with mode: 0755]
data/ssh_exch.exp [new file with mode: 0755]
playboooks/dhrystone.yaml [deleted file]
playboooks/whetstone.yaml [deleted file]

diff --git a/INFO b/INFO
new file mode 100644 (file)
index 0000000..33f3ec8
--- /dev/null
+++ b/INFO
@@ -0,0 +1,27 @@
+Project Name: QTIP, Platform Performance Benchmarking
+Project Repository: QTIP
+Project Category: Integration & Testing
+Etherpad: https://etherpad.opnfv.org/p/Qtip
+Jira: https://jira.opnfv.org/browse/QTIP
+Gerrit: https://gerrit.opnfv.org/gerrit/#/admin/projects/qtip
+GIT: https://git.opnfv.org/cgit/qtip/
+Mailing list tag: [QTIP]
+IRC: #opnfv-qtip
+Project Wiki: https://wiki.opnfv.org/platform_performance_benchmarking
+
+
+
+Committers:
+
+Wenjing Chu, wenjing_chu@dell.com
+Shrinivas Chavan, shrinivas.chavan@ericsson.com
+Sheng-Ann Yu sheng-ann.yu@ericsson.com
+Rodriguez, Iben Iben.Rodriguez@spirent.com
+Prabu, Kuppuswamy Prabu.Kuppuswamy@spirent.com
+Cooper, Trevor trevor.cooper@intel.com
+Michael Haugh mhaugh@ixiacom.com
+Prakash Ramchandran Prakash.Ramchandran@huawei.com
+Richomme, Morgan morgan.richomme@orange.com
+
+
+
diff --git a/QTIP.sh b/QTIP.sh
new file mode 100755 (executable)
index 0000000..dcefb29
--- /dev/null
+++ b/QTIP.sh
@@ -0,0 +1,116 @@
+#! /bin/bash
+
+#DIR1= $PWD
+
+
+
+function Call_Test {
+
+       case "$1" in
+                dhrystone)
+                 mkdir $PWD/results/dhrystone
+                ansible-playbook -s $PWD/benchmarks/playbooks/dhrystone.yaml --extra-vars "Dest_dir=$PWD/results" -v
+                
+                ;;
+
+                ramspeed)
+                 mkdir $PWD/results/ramspeed
+                ansible-playbook -s $PWD/benchmarks/playbooks/ramspeedbench.yaml --extra-vars "Dest_dir=$PWD/results" -v 
+                ;;
+
+                 cachebench)
+                 mkdir $PWD/results/cachebench
+                ansible-playbook -s $PWD/benchmarks/playbooks/cachebench.yaml   --extra-vars "Dest_dir=$PWD/results" -v
+                ;;
+
+                whetstone)
+                 mkdir $PWD/results/whetstone
+                ansible-playbook -s $PWD/benchmarks/playbooks/whetstone.yaml  --extra-vars "Dest_dir=$PWD/results"  -v
+                ;;
+
+                *)
+                echo "Please pass a correct  argument to test. use -h for more details"
+                ;;
+       esac
+
+} 
+
+mkdir $PWD/results
+case "$1" in
+          -h)
+           printf "To run test.sh, 2 arguments are required\n"
+           printf "First argument: The Test case to run\nOptions:\nFirst: For a comparison between a baremetal machine and a VM\nSecond: For a comparison between two baremetal machines\n\nSecond argument: The Benchmark to run\nOptions:\ndhrystone\nwhetstone\nramspeed\ncachebench\n"
+           ;;
+          First)
+             
+             echo "Enter the IP of the machine to be teststed for comparison to the VM"
+             read ipvar
+             echo "Enter the password of this machine"
+             read -s  passwordvar
+             expect  $PWD/data/ssh_exch.exp $ipvar $passwordvarp
+             heat stack-create exp2 -f $PWD/Test-cases/SampleHeat.yaml
+            
+             VAR1=$( heat stack-show exp2 | grep "stack_status_reason" | awk '{print $6;}')
+             echo $VAR1
+             while [  "$VAR1" != completed ]
+             do
+             echo VM is coming up
+             VAR1=$( heat stack-show exp2 | grep "stack_status_reason" | awk '{print $6;}')
+            #echo $VAR1
+             done
+             echo VM Created
+
+            if [ "$VAR1" == "completed" ]; then
+              VAR=$( heat stack-show exp2 | grep "output_value" | awk '{print $4;}'| cut -d '"' -f2)
+   
+              echo IP of VM is:
+              echo $VAR
+
+              sed -i '/demo1/a '$VAR'' /etc/ansible/hosts
+              sed -i '/demo1/a '$ipvar'' /etc/ansible/hosts
+              
+
+             
+              echo Waiting for ping
+              while !  ping -c1  $VAR &> /dev/null; do
+                echo Waiting for ping
+              done   
+     
+              echo Ping detected
+              expect $PWD/data/ssh_exch.exp $VAR 
+              Call_Test $2
+
+              echo cleaning environment
+              sleep 10
+              $PWD/clean.sh
+            
+
+               fi            
+
+             ;;
+             Second)
+             echo Second test to be written below
+             echo "Enter the IP of the first machine to be benchmarked for comparison"
+             read ipvar
+             echo "Enter the password of this machine"
+             read -s  passwordvar
+             expect  $PWD/data/ssh_exch.exp $ipvar $passwordvar
+             sed -i '/demo1/a '$ipvar'' /etc/ansible/hosts
+             echo "Enter the IP of the second machine to be benchmarked for comparison"
+             read ipvar
+             echo "Enter the password of this machine"
+             read -s  passwordvar
+             expect  $PWD/data/ssh_exch.exp $ipvar $passwordvar
+             sed -i '/demo1/a '$ipvar'' /etc/ansible/hosts
+             Call_Test $2
+             echo cleaning environment
+             sleep 10
+             $PWD/clean.sh
+             ;;
+            
+             *)
+             echo Incorrect Arguments passed to the script. Run script with -h for more helo
+              
+esac
+
+
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..0303342
--- /dev/null
+++ b/README
@@ -0,0 +1,47 @@
+QTIP Benchmark sutie
+---------------------
+
+
+QTIP is a benchmarking suite intendend to benchmark the following components of the OPNF Plaform:
+1. Computing components
+2. Networking components
+3. Storage components
+
+The efforts in QTIP are mostly focused on identifying
+1. Benchmarks to run
+2. Test cases in which these benchmarks to run
+3. Automation of suite to run benchmarks within different test cases
+4. Collection of test results
+
+
+
+QTIP currently consists of a bash script (QTIP.sh). 
+
+The script can run 4 comuting benchmarks:
+1. Dhrystone
+2. Whetstone
+3. RamBandwidth
+4. Cachebandwidth
+
+These benchmarks can be run in 2 test cases:
+1. VM vs Baremetal
+2. Baremetal vs Baremeatl
+
+Instructions to run the script:
+1. Download the OpenStack adminrc file for the deployment on which you want to create the VM for benchmarking
+2. run ./QTIP {TEST CASE} {BENCHMARK}
+3.  ./QTIP.sh -h for more help
+
+Requirments:
+1. Ansible 1.9.2
+2. Python 2.7
+
+
+
+A robust framework that would allow to include more tests would be included within the future
+
+
+
+
+
+
diff --git a/Test-cases/SampleHeat.yaml b/Test-cases/SampleHeat.yaml
new file mode 100644 (file)
index 0000000..0cf0c45
--- /dev/null
@@ -0,0 +1,93 @@
+  heat_template_version: 2014-10-16
+
+  description: Test10
+  
+  parameters:
+
+    public_network:
+      type: string
+      label: Public Network name or ID
+      description: Public network with floating IPs
+      default: "provider_network"
+
+    private_net_name:
+      type: string
+      default: "private_network"
+
+    availability_zone:
+      type: string
+      description: The Availability Zone to launch the instance.
+      default: compute1
+  
+  resources:
+
+    private_network:
+      type: OS::Neutron::Net
+      
+
+    private_subnet:
+      type: OS::Neutron::Subnet
+      properties:
+        network_id: { get_resource: private_network }
+        cidr: 10.10.17.0/24
+        dns_nameservers:
+          - 8.8.8.8
+    
+    router_1:
+      type: OS::Neutron::Router
+      properties:
+        external_gateway_info:
+          network: { get_param: public_network  }
+
+    router_interface:
+      type: OS::Neutron::RouterInterface
+      properties:
+        router_id: { get_resource: router_1 } 
+        subnet: { get_resource: private_subnet }
+
+    public_port:
+      type: OS::Neutron::Port
+      properties:
+        network: { get_resource: private_network }
+        security_groups: [{ get_resource: demo1_security_Group }]
+
+    floating_ip:
+      type: OS::Neutron::FloatingIP
+      properties:
+        floating_network: { get_param: public_network }
+     
+    floating_ip_assoc:
+      type: OS::Neutron::FloatingIPAssociation
+      properties:
+       floatingip_id: { get_resource: floating_ip }
+       port_id: { get_resource: public_port }
+
+    demo1_security_Group:
+      type: OS::Neutron::SecurityGroup
+      properties:
+        name: demo1_security_Group
+        rules:
+          - protocol: tcp
+            port_range_min: 22
+            port_range_max: 22
+          - protocol: icmp    
+  
+    my_instance:
+      type: OS::Nova::Server
+      properties:
+        image: CentOS
+        flavor: m1.large
+        availability_zone: { get_param: availability_zone }
+        networks:
+          - port: { get_resource: public_port }
+        
+
+
+  outputs:
+   instance_ip:
+     description: IP address of the instance
+     value: { get_attr: [floating_ip, floating_ip_address] }
+   
+
+
+
similarity index 58%
rename from playboooks/cachebench.yaml
rename to benchmarks/playbooks/cachebench.yaml
index 13b968b..d0e0414 100644 (file)
@@ -7,12 +7,16 @@
       shell: rm -rf  /usr/share/doc/phoronix-test-suite/
       shell: rm -rf  /usr/share/phoronix-test-suite
       shell: rm -rf  /root/photmp/
+    - name: cleaning results
+      file: path=/root/results state=absent
     - name: make direc
       file: path=/root/photmp/ state=directory
     - name: Fetch Phornonix 
       shell: cd /root/photmp/ && wget https://www.dropbox.com/s/5kks513ozxy7vvs/phoronix-suite.tar.gz
     - name: unarchive Phoronix
       shell: cd /root/photmp/ && tar -zxvf  phoronix-suite.tar.gz
+    - name: Install Phornonix Dependencies
+      shell: yum install php  php-xml php-client php-process -y
     - name: Install Phornonix
       shell: cd /root/photmp/phoronix-test-suite-master/&&./install-sh    
     - name: batchSetup
       shell: phoronix-test-suite batch-install cachebench
     - name: run
       shell:  phoronix-test-suite batch-run cachebench
+    - name: making directory
+      file: path=/root/results state=directory
+    - name: copying result to temp directory
+      shell: cp -r /var/lib/phoronix-test-suite/test-results/* /root/results/
+    - name: registering files
+      shell: (cd /root/results/; find . -maxdepth 1 -type f) | cut -d'/' -f2
+      register: files_to_copy
     - name: copy results
-      shell: scp -r /var/lib/phoronix-test-suite/test-results/*  root@172.18.0.11:/root/results/cachebench/
+      fetch:  src=/root/results/{{item}} dest={{Dest_dir}}/cachebench
+      with_items: files_to_copy.stdout_lines
+
diff --git a/benchmarks/playbooks/dhrystone.yaml b/benchmarks/playbooks/dhrystone.yaml
new file mode 100644 (file)
index 0000000..d0e5f20
--- /dev/null
@@ -0,0 +1,31 @@
+ - hosts: demo1
+
+   tasks:
+    - name: cleaning
+      file: path=/root/tempT  state=absent
+    - name: cleaning results
+      file: path=/root/results state=absent
+    - name: Installing UnixBench dependencies
+      shell: yum install git gcc  patch perl-Time-HiRes -y
+    - name: Clone unixbench
+      shell: git clone https://github.com/kdlucas/byte-unixbench.git /root/tempT
+    - name: make
+      shell: make --directory /root/tempT/UnixBench/
+    - name: downloading_patch
+      shell: cd /root/tempT/UnixBench/ && wget https://www.dropbox.com/s/11z85gfu0trkhus/fix-limitation.patch
+    - name: applying_patch
+      shell: cd /root/tempT/UnixBench/ &&  patch Run fix-limitation.patch
+    - name: Run dhrystone
+      shell: cd /root/tempT/UnixBench/&&./Run -v dhrystone
+    - name: making directory
+      file: path=/root/results state=directory
+    - name: copying result to temp directory
+      shell: cp -r /root/tempT/UnixBench/results/* /root/results/
+    - name: registering files
+      shell: (cd /root/results/; find . -maxdepth 1 -type f) | cut -d'/' -f2
+      register: files_to_copy
+    - name: copy results
+      fetch:  src=/root/results/{{item}} dest={{Dest_dir}}/dhrystone
+      with_items: files_to_copy.stdout_lines 
+
diff --git a/benchmarks/playbooks/ramspeedbench.yaml b/benchmarks/playbooks/ramspeedbench.yaml
new file mode 100644 (file)
index 0000000..37ea91a
--- /dev/null
@@ -0,0 +1,38 @@
+ - hosts: demo1
+
+   tasks:
+    - name: clean
+      shell: rm -rf /usr/bin/phoronix-test-suite
+      shell: rm -rf  /usr/share/doc/phoronix-test-suite/
+      shell: rm -rf  /usr/share/phoronix-test-suite
+      shell: rm -rf  /root/photmp/
+    - name: clean previous results
+      file: path=/root/results path=absent
+    - name: make direc
+      file: path=/root/photmp/ state=directory
+    - name: Fetch Phornonix 
+      shell: cd /root/photmp/ && wget https://www.dropbox.com/s/5kks513ozxy7vvs/phoronix-suite.tar.gz
+    - name: unarchive Phoronix
+      shell: cd /root/photmp/ && tar -zxvf  phoronix-suite.tar.gz
+    - name: Phornonix Dependencies
+      shell: yum install php php-xml php-client php-process -y
+    - name: Install Phornonix
+      shell: cd /root/photmp/phoronix-test-suite-master/&&./install-sh    
+    - name: batchSetup
+      shell: phoronix-test-suite batch-setup
+    - name: install
+      shell: phoronix-test-suite batch-install ramspeed
+    - name: run
+      shell:  phoronix-test-suite batch-run ramspeed
+    - name: making directory
+      file: path=/root/results state=directory
+    - name: copying result to temp directory
+      shell: cp -r /var/lib/phoronix-test-suite/test-results/* /root/results/
+    - name: registering files
+      shell: (cd /root/results/; find . -maxdepth 1 -type f) | cut -d'/' -f2
+      register: files_to_copy
+    - name: copy results
+      fetch:  src=/root/results/{{item}} dest={{Dest_dir}}/dhrystone
+      with_items: files_to_copy.stdout_lines
+
diff --git a/benchmarks/playbooks/whetstone.yaml b/benchmarks/playbooks/whetstone.yaml
new file mode 100644 (file)
index 0000000..497797f
--- /dev/null
@@ -0,0 +1,31 @@
+ - hosts: demo1
+
+   tasks:
+    - name: cleaning
+      shell: rm -rf /root/tempT
+    - name: cleaning previous results
+      file: path=/root/results state=absent
+    - name: Installing UnixBench dependencies
+      shell: yum install git gcc patch  perl-Time-HiRes -y
+    - name: Clone unixbench
+      shell: git clone https://github.com/kdlucas/byte-unixbench.git /root/tempT
+    - name: make
+      shell: make --directory /root/tempT/UnixBench/
+    - name: downloading_patch
+      shell: cd /root/tempT/UnixBench/ && wget https://www.dropbox.com/s/11z85gfu0trkhus/fix-limitation.patch
+    - name: applying_patch
+      shell: cd /root/tempT/UnixBench/ &&  patch Run fix-limitation.patch
+    - name: Run whetstone
+      shell: cd /root/tempT/UnixBench/&&./Run -v whetstone
+    - name: making directory
+      file: path=/root/results state=directory
+    - name: copying result to temp directory
+      shell: cp -r /root/tempT/UnixBench/results/* /root/results/
+    - name: registering files
+      shell: (cd /root/results/; find . -maxdepth 1 -type f) | cut -d'/' -f2
+      register: files_to_copy
+    - name: copy results
+      fetch:  src=/root/results/{{item}} dest={{Dest_dir}}/whetstone
+      with_items: files_to_copy.stdout_lines
+
diff --git a/clean.sh b/clean.sh
new file mode 100755 (executable)
index 0000000..69aab1b
--- /dev/null
+++ b/clean.sh
@@ -0,0 +1,6 @@
+#! /bin/bash
+echo cleaning Ip
+
+sed -i -e '/demo1/{n;N;N;N;N;N;d}' /etc/ansible/hosts
+neutron floatingip-delete $(neutron floatingip-list| grep "17" | awk '{print $2;}')
+heat stack-delete exp2
diff --git a/data/ssh_exch.exp b/data/ssh_exch.exp
new file mode 100755 (executable)
index 0000000..1b462c4
--- /dev/null
@@ -0,0 +1,12 @@
+#1 /usr/bin/expect
+set timeout 4
+set ip [lindex $argv 0]
+set pswd [lindex $argv 1]
+spawn  ssh-copy-id -i /root/.ssh/id_rsa $ip
+expect "Are you sure you want to continue connecting" {send "yes\r"}
+expect "password" { send "$pswd\r"}
+
+interact
+
+
diff --git a/playboooks/dhrystone.yaml b/playboooks/dhrystone.yaml
deleted file mode 100644 (file)
index e0b4842..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
- - hosts: demo1
-
-   tasks:
-    - name: cleaning
-      shell: rm -rf /root/tempT
-    - name: Install git
-      shell: yum install git -y
-    - name: Clone unixbench
-      shell: git clone https://github.com/kdlucas/byte-unixbench.git /root/tempT
-    - name: make
-      shell: make --directory /root/tempT/UnixBench/
-    - name: Run dhrystone
-      shell: cd /root/tempT/UnixBench/&&./Run -v dhrystone
-    - name: copy results
-      shell: scp -r /root/tempT/UnixBench/results/* root@172.18.0.11:/root/results/dhrystone
diff --git a/playboooks/whetstone.yaml b/playboooks/whetstone.yaml
deleted file mode 100644 (file)
index f07ea07..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
- - hosts: demo1
-
-   tasks:
-    - name: cleaning
-      shell: rm -rf /root/tempT
-    - name: Install git
-      shell: yum install git -y
-    - name: Clone unixbench
-      shell: git clone https://github.com/kdlucas/byte-unixbench.git /root/tempT
-    - name: make
-      shell: make --directory /root/tempT/UnixBench/
-    - name: Run whetstone
-      shell: cd /root/tempT/UnixBench/&&./Run -v whetstone
-    - name: copy results
-      shell: scp -r /root/tempT/UnixBench/results/* root@172.18.0.11:/root/results/whetstone