Networking Testcase: Iperf Implemented 35/4135/2
authorMofassir Arif <mofassir@gmail.com>
Wed, 9 Dec 2015 12:50:55 +0000 (04:50 -0800)
committerMofassir Arif <Mofassir_arif@dellteam.com>
Wed, 16 Dec 2015 09:45:38 +0000 (01:45 -0800)
The ansible playbooks as well as the config files
for the iperf throughput testing have been implemented.
Some changes have been made to the driver function for
the benchmarks. ansible now gets passed a json file.

Change-Id: Ibf4c0210ab9f6cbf9896ca69bf2fb6bda8a9925d
Signed-off-by: Mofassir Arif <mofassir@gmail.com>
36 files changed:
.gitignore [new file with mode: 0644]
benchmarks/playbooks/dhrystone.yaml
benchmarks/playbooks/dpi.yaml
benchmarks/playbooks/info_script/info_collect.py
benchmarks/playbooks/iperf.yaml [new file with mode: 0644]
benchmarks/playbooks/netperf.yaml [new file with mode: 0644]
benchmarks/playbooks/pktgen.yaml [new file with mode: 0644]
benchmarks/playbooks/ramspeedbench.yaml [new file with mode: 0644]
benchmarks/playbooks/result_transform/dpi/dpi_transform.py
benchmarks/playbooks/result_transform/dpi/final_report.py [new file with mode: 0644]
benchmarks/playbooks/result_transform/ssl/ssl_transform.py
benchmarks/playbooks/ssl.yaml
benchmarks/playbooks/sys_info_pbook.yaml
benchmarks/playbooks/whetstone.yaml
func/__init__.pyc [deleted file]
func/cli.py
func/cli.pyc [deleted file]
func/create_zones.py
func/create_zones.pyc [deleted file]
func/driver.py
func/driver.pyc [deleted file]
func/env_setup.py
func/env_setup.pyc [deleted file]
func/fetchimg.pyc [deleted file]
func/spawn_vm.py
func/spawn_vm.pyc [deleted file]
func/validate_yaml.pyc [deleted file]
results/INFO [deleted file]
results/foo.txt [new file with mode: 0644]
test_cases/compute/dpi_parallel.yaml
test_cases/network/iperf.yaml [deleted file]
test_cases/network/iperf_topology_1.yaml [new file with mode: 0644]
test_cases/network/iperf_topology_2.yaml [new file with mode: 0644]
test_cases/network/iperf_topology_3.yaml [new file with mode: 0644]
test_cases/network/netperf.yaml [new file with mode: 0644]
test_cases/network/pktgen.yaml [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..7d44098
--- /dev/null
@@ -0,0 +1,59 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+env/
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+*.egg-info/
+.installed.cfg
+*.egg
+
+# PyInstaller
+#  Usually these files are written by a python script from a template
+#  before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*,cover
+.hypothesis/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
index 8d5f04a..34ccfd8 100644 (file)
     - name: make directory
       shell: mkdir $HOME/qtip_result
     - include: ./sys_info_pbook.yaml
+<<<<<<< HEAD
       vars:
           network: false
+=======
+>>>>>>> 5a7dcc0... Networking testcases for QTIP Framework
     - name: Installing UnixBench dependencies if CentOS
       shell: yum install git gcc  patch perl-Time-HiRes -y
       when: ansible_os_family == "RedHat"
index c18b75a..b2c87d3 100644 (file)
     - name: make qtip_result
       shell: mkdir $HOME/qtip_result
     - include: ./sys_info_pbook.yaml
+<<<<<<< HEAD
       vars:
           network: false
+=======
+>>>>>>> 5a7dcc0... Networking testcases for QTIP Framework
     - name: Installing nDPI dependencies if CentOS
       shell: yum install git gcc patch  perl-Time-HiRes autofconf automake libpcap-devel libtool -y
       when: ansible_os_family == "RedHat"
index b352651..6dbb51b 100644 (file)
@@ -3,6 +3,7 @@ import pickle
 import time
 import datetime
 import json
+<<<<<<< HEAD
 import sys
 
 os.system('inxi -b -c0 -n > $PWD/est_2')
@@ -92,3 +93,106 @@ with open('./sys_info_temp','w+')as out_info:
 with open('temp','w+') as result_json:
     json.dump(Info_dict,result_json,indent=4,sort_keys=True)
 
+=======
+
+os.system('inxi -b -c0 -n > $PWD/est_2')
+est_ob = open("est_2", "r+")
+est_ob2 = open("est_1", "w+")
+in_string = est_ob.read().replace('\n', ' ')
+
+est_ob2.write(in_string)
+est_ob.close()
+est_ob2.close()
+
+Info_dict = {}
+inxi_host = os.popen(
+    """cat $PWD/est_1 | grep -o -P '(?<=Host:).*(?=Kernel)' """).read().lstrip().rstrip()
+inxi_mem = os.popen(
+    """inxi -c0 | grep -o -P '(?<=Mem~).*(?=HDD)' """).read().lstrip().rstrip()
+inxi_cpu = os.popen(
+    """cat $PWD/est_1 | grep -o -P '(?<=CPU).*(?=speed)' | cut -f2 -d':'""").read().lstrip().rstrip()
+#inxi_Speed=os.popen(""" cat $PWD/est_1 | grep -o -P '(?<=max:).*(?=Graphics)' """).read().rstrip().lstrip()
+inxi_distro = os.popen(
+    """ cat $PWD/est_1 | grep -o -P '(?<=Distro:).*(?=Machine:)' """).read().rstrip().lstrip()
+inxi_kernel = os.popen(
+    """ cat $PWD/est_1 | grep -o -P '(?<=Kernel:).*(?=Console:)' """).read().rstrip().lstrip()
+inxi_HD = os.popen(
+    """ cat $PWD/est_1 | grep -o -P '(?<=HDD Total Size:).*(?=Info:)' """).read().rstrip().lstrip()
+#inxi_system=os.popen(""" cat $PWD/est_1 | grep -o -P '(?<=Machine    System:).*(?=product:)' """).read().rstrip().lstrip()
+inxi_product = os.popen(
+    """ cat $PWD/est_1 | grep -o -P '(?<=product:).*(?=Mobo:)' """).read().rstrip().lstrip()
+# print inxi_system
+
+
+Info_dict['1_Hostname'] = inxi_host
+Info_dict['2_Product'] = inxi_product
+Info_dict['3_OS Distribution'] = inxi_distro
+Info_dict['4_Kernel'] = inxi_kernel
+Info_dict['5_CPU'] = inxi_cpu
+Info_dict['6_Memory Usage'] = inxi_mem
+Info_dict['7_Disk usage'] = inxi_HD
+Info_dict['8_Network_Interfaces'] = {}
+
+tem_2 = """ cat $PWD/est_1 | grep -o -P '(?<=Network:).*(?=Info:)'"""
+print os.system(tem_2 + ' > Hello')
+i = int(os.popen(tem_2 + " | grep -o 'Card' | wc -l ").read())
+print i
+
+
+for x in range(1, i + 1):
+    tem = """ cat $PWD/est_1 | grep -o -P '(?<=Card-""" + str(
+        x) + """:).*(?=Card-""" + str(x + 1) + """)'"""
+    if i == 1:
+        tem = """ cat $PWD/est_1 | grep -o -P '(?<=Network:).*(?=Info:)'"""
+        inxi_card_1 = (
+            (os.popen(
+                tem +
+                " | grep -o -P '(?<=Card:).*(?=Drives:)'|sed 's/ *driver:.*//'").read().rstrip().lstrip()))
+        print inxi_card_1
+        Info_dict['8_Network_Interfaces']['Interface_' + str(x)] = {}
+        Info_dict['8_Network_Interfaces'][
+            'Interface_' + str(x)]['1_Network_Card'] = inxi_card_1
+        inxi_card_2 = (
+            (os.popen(
+                tem +
+                "| grep -o -P '(?<=Card:).*(?=Drives:)'|sed -e 's/^.*IF: //'").read())).rstrip().lstrip()
+        Info_dict['8_Network_Interfaces'][
+            'Interface_' + str(x)]['2_Interface_info'] = inxi_card_2
+    elif x < (i):
+        print "two"
+        #inxi_Card_temp=((os.popen(""" cat $PWD/est_1 | grep -o -P '(?<=Card-"""+str(x)+""":).*(?=Card-"""+str(x+1)+""")' """).read().rstrip().lstrip()))
+        inxi_card_1 = (
+            (os.popen(tem + "| sed 's/ *driver:.*//'").read().rstrip().lstrip()))
+        Info_dict['8_Network_Interfaces']['Interface_' + str(x)] = {}
+        Info_dict['8_Network_Interfaces'][
+            'Interface_' + str(x)]['1_Network_Card'] = inxi_card_1
+        inxi_card_2 = (
+            (os.popen(tem + "|sed -e 's/^.*IF: //'").read())).rstrip().lstrip()
+        Info_dict['8_Network_Interfaces'][
+            'Interface_' + str(x)]['2_Interface_info'] = inxi_card_2
+    elif x == i:
+        print "Three"
+        Info_dict['8_Network_Interfaces']['Interface_' + str(x)] = {}
+        inxi_card_1 = (
+            (os.popen(
+                """ cat $PWD/est_1 | grep -o -P '(?<=Card-""" +
+                str(x) +
+                """:).*(?=Drives:)'| sed 's/ *driver:.*//' """).read().rstrip().lstrip()))
+        Info_dict['8_Network_Interfaces'][
+            'Interface_' + str(x)]['1_Network_Card'] = inxi_card_1
+        inxi_card_2 = (
+            (os.popen(
+                """ cat $PWD/est_1 | grep -o -P '(?<=Card-""" +
+                str(x) +
+                """:).*(?=Drives:)'| sed -e 's/^.*IF: //' """).read().rstrip().lstrip()))
+        Info_dict['8_Network_Interfaces'][
+            'Interface_' + str(x)]['2_Interface_info'] = inxi_card_2
+    else:
+        print "No network cards"
+print Info_dict
+home_dir = str(os.popen("echo $HOME").read().rstrip())
+with open('./sys_info_temp', 'w+')as out_info:
+    pickle.dump(Info_dict, out_info)
+
+#       json.dump(Info_dict, out_json, sort_keys=True,separators=(',',':'),indent=4)
+>>>>>>> 5a7dcc0... Networking testcases for QTIP Framework
diff --git a/benchmarks/playbooks/iperf.yaml b/benchmarks/playbooks/iperf.yaml
new file mode 100644 (file)
index 0000000..9d4d185
--- /dev/null
@@ -0,0 +1,87 @@
+ - hosts: 127.0.0.1
+   connection: local
+   tasks: 
+
+    - name: getting directory
+      shell: echo $PWD
+      register: qtip_dir
+    - name: making Iperf directory
+      file: path=../../{{Dest_dir}}/iperf state=directory
+    - name: making temporary iperf directory
+      file: path=../../{{Dest_dir}}/iperf/iperf_temp state=directory
+
+
+ - hosts: "{{role}}"
+   tasks:
+    - name: Rolename
+      set_fact:
+        rolename: "{{role}}"
+        when: role is defined
+    - name: Get Hostname
+      shell: echo $HOSTNAME
+      register: hostID
+    - name: echo
+      shell: echo index_var
+    - name: checking_home directory
+      shell: echo $HOME
+      register: home_dir
+    - name: cleaning
+      shell: rm -rf $HOME/iperf
+    - name: cleaning previous results
+      shell: rm -rf $HOME/qtip_result
+    - name: making Iperf temporary directory
+      shell: mkdir $HOME/iperf
+    - name: making  results temporary directory
+      shell: mkdir $HOME/qtip_result
+    - include: ./sys_info_pbook.yaml
+    - name: Installing Epel-release when CentOS
+      shell: yum install epel-release -y
+      when: ansible_os_family == "RedHat"
+    - name: Getting Firewall entry number
+      shell: iptables -L INPUT --line-number | grep DROP | awk '{print $1}'
+      register: iptable_entry
+      ignore_errors: yes
+    - name: Removing entry number
+      shell: iptables -D INPUT {{iptable_entry.stdout}}
+      ignore_errors: yes
+      when: iptable_entry != ''
+    - name: Installing IPERF when Ubuntu
+      shell: apt-get install iperf3 -y
+      when: ansible_os_family == "Debian" and rolename == '1-server'  
+    - name: Installing Iperf3
+      shell: yum install iperf3 -y
+      when: ansible_os_family == "RedHat"
+    - name: Running iperf on server
+      shell: iperf3 -s
+      async: 400
+      poll: 0
+      when: rolename == "1-server"
+    - name: Running Iperf on Host
+      shell: iperf3  -Z --{{protocol}} --time {{duration}} -b {{bandwidthGbps}}G  -c {{item}} -J >> ./qtip_result/server{{hostID.stdout}}-{{item}}.json
+      ignore_errors: yes
+      with_items:
+        - "{{ip1}}"
+        - "{{ip2}}"
+      when: rolename == "2-host" and "{{ip2}}" != ''
+    - name: Running Iperf on Host
+      shell: iperf3  -Z --{{protocol}} --time {{duration}} -b {{bandwidthGbps}}G -c {{item}} -J >> ./qtip_result/server{{hostID.stdout}}-{{item}}.json
+      ignore_errors: yes
+      with_items: 
+        - "{{ip1}}"
+      when: rolename == "2-host" and "{{ip2}}" == ''
+    - name: Files to Copy  
+      shell: (cd $HOME/qtip_result/; find . -maxdepth 1 -name "*.json") | cut -d'/' -f2
+      register: files_to_copy
+    - name: copy results
+      fetch:  src={{home_dir.stdout}}/qtip_result/{{item}} dest=../../{{Dest_dir}}/iperf/iperf_temp
+      with_items: files_to_copy.stdout_lines
+ - hosts: 127.0.0.1
+   connection: local
+   tasks:
+    - name: Rolename
+      set_fact:
+        rolename: "{{role}}"
+        when: role is defined
+    - name: extracting_json
+      shell: ( find  ../../{{Dest_dir}}/iperf/iperf_temp/ -name "*.json" | xargs cp -t ../../{{Dest_dir}}/iperf/)
+      when: rolename == "2-host"
diff --git a/benchmarks/playbooks/netperf.yaml b/benchmarks/playbooks/netperf.yaml
new file mode 100644 (file)
index 0000000..fb6fd18
--- /dev/null
@@ -0,0 +1,74 @@
+ - hosts: 127.0.0.1
+   connection: local
+   tasks: 
+
+    - name: getting directory
+      shell: echo $PWD
+      register: qtip_dir
+    - name: making Netperf directory
+      file: path=../../{{Dest_dir}}/netperf state=directory
+    - name: making temporary netperf directory
+      file: path=../../{{Dest_dir}}/netperf/netperf_temp state=directory
+
+
+ - hosts: "{{role}}"
+   tasks:
+    - name: Rolename
+      set_fact:
+        rolename: "{{role}}"
+        when: role is defined
+    
+    - name: Get Hostname
+      shell: echo $HOSTNAME
+      register: hostID
+    - name: checking_home directory
+      shell: echo $HOME
+      register: home_dir
+    - name: cleaning
+      shell: rm -rf $HOME/netperf
+    - name: cleaning previous results
+      shell: rm -rf $HOME/qtip_result
+    - name: making netperf temporary directory
+      shell: mkdir $HOME/netperf
+    - name: making  results temporary directory
+      shell: mkdir $HOME/qtip_result
+    
+    - name: Fetching netperf
+      shell: wget ftp://ftp.netperf.org/netperf/netperf-2.7.0.tar.gz
+      when: ansible_os_family == "RedHat"
+    - name: Extracting Netperf
+      shell: tar -xvf netperf-2.7.0.tar.gz
+    - name: configuring netperf
+      shell: cd $HOME/netperf-2.7.0  && ./configure
+    - name: Making Netperf
+      shell: cd $HOME/netperf-2.7.0 && make 
+    - name: Installing Netperf
+      shell: cd $HOME/netperf-2.7.0 && make install
+    
+    - name: Running netperf on server
+      shell: /usr/local/bin/netserver -p 4000
+      when: rolename == "1-server"
+   
+    - name: Running netperf on Host
+      shell: /usr/local/bin/netperf -H {{privateip1}} -p 4000 -l {{duration}} -t {{teststream}} -fG >> ./qtip_result/server{{hostID.stdout}}-{{item}}.json
+      ignore_errors: yes
+      with_items: 
+        - "{{ip1}}"
+      when: rolename == "2-host" and "{{ip2}}" == ''
+      
+    - name: Files to Copy  
+      shell: (cd $HOME/qtip_result/; find . -maxdepth 1 -name "*.json") | cut -d'/' -f2
+      register: files_to_copy
+    - name: copy results
+      fetch:  src={{home_dir.stdout}}/qtip_result/{{item}} dest=../../{{Dest_dir}}/netperf/netperf_temp
+      with_items: files_to_copy.stdout_lines
+ - hosts: 127.0.0.1
+   connection: local
+   tasks:
+    - name: Rolename
+      set_fact:
+        rolename: "{{role}}"
+        when: role is defined
+    - name: extracting_json
+      shell: ( find  ../../{{Dest_dir}}/netperf/netperf_temp/ -name "*.json" | xargs cp -t ../../{{Dest_dir}}/netperf/)
+      when: rolename == "2-host"
\ No newline at end of file
diff --git a/benchmarks/playbooks/pktgen.yaml b/benchmarks/playbooks/pktgen.yaml
new file mode 100644 (file)
index 0000000..04a0066
--- /dev/null
@@ -0,0 +1,38 @@
+ - hosts: 127.0.0.1
+   connection: local
+   tasks: 
+
+    - name: getting directory
+      shell: echo $PWD
+      register: qtip_dir
+    - name: making pktgen directory
+      file: path=../../{{Dest_dir}}/pktgen state=directory
+    - name: making temporary pktgen directory
+      file: path=../../{{Dest_dir}}/pktgen/pktgen_temp state=directory
+
+
+ - hosts: "{{role}}"
+   tasks:
+    - name: Rolename
+      set_fact:
+        rolename: "{{role}}"
+        when: role is defined
+    
+    - name: IPTABLE Setup
+      shell: iptables -F
+      when: rolename == '1-server'
+    - name: iptables
+      shell: sudo iptables -A INPUT -p udp --dport 1000 -j DROP
+      when: rolename == '1-server'
+    - name: run pktgen
+      shell: bash pktgen.sh {{privateip1}} 1 {{packetsize}} {{duration}} >> .json
+      when: rolename == '2-host'
+ - hosts: "{{role}}"
+   tasks:
+    - name: Rolename
+      set_fact: 
+        rolename: "{{role}}"
+        when: role is defined
+    - name: Get server packetsize
+      shell: iptables -L -vnx >> pktgenServer{{privateip1}}.txt
+      when: rolename == '1-server'
\ No newline at end of file
diff --git a/benchmarks/playbooks/ramspeedbench.yaml b/benchmarks/playbooks/ramspeedbench.yaml
new file mode 100644 (file)
index 0000000..d8136b0
--- /dev/null
@@ -0,0 +1,38 @@
+ - hosts: "{{ role }}"
+
+   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
+
index 89e4f18..2aa4575 100644 (file)
@@ -47,4 +47,8 @@ result['DPI_benchmark(M pps)'] = round(dpi_result_pps, 3)
 result['DPI_benchmark(Gb/s)'] = round(dpi_result_bps, 3)
 with open('./result_temp', 'w+') as result_file:
     pickle.dump(result, result_file)
+<<<<<<< HEAD
 
+=======
+print json.dumps(result, indent=4, sort_keys=True)
+>>>>>>> 5a7dcc0... Networking testcases for QTIP Framework
diff --git a/benchmarks/playbooks/result_transform/dpi/final_report.py b/benchmarks/playbooks/result_transform/dpi/final_report.py
new file mode 100644 (file)
index 0000000..be25daa
--- /dev/null
@@ -0,0 +1,20 @@
+import pickle
+import json
+import datetime
+import sys
+
+with open('/root/qtip_result/sys_info_temp', 'r') as sys_info_f:
+    sys_info_dict = pickle.load(sys_info_f)
+with open('/root/qtip_result/result_temp', 'r') as result_f:
+    result_dict = pickle.load(result_f)
+
+host_name = sys_info_dict['1_Hostname']
+benchmark_name = str(sys.argv[1])
+report_time_stamp = str(datetime.datetime.utcnow().isoformat())
+final_dict = {}
+final_dict['1  Time of Report'] = report_time_stamp
+final_dict['2  System Information'] = sys_info_dict
+final_dict['3  ' + benchmark_name + ' result'] = result_dict
+
+with open('/root/qtip_result/' + host_name + '-' + report_time_stamp + '.json', 'w+') as result_json:
+    json.dump(final_dict, result_json, indent=4, sort_keys=True)
index 188eb3d..575b94a 100644 (file)
@@ -35,7 +35,11 @@ aes_1024B = os.popen(
 aes_8192B = os.popen(
     "cat AES-128-CBC_dump | grep  'aes-128-cbc  ' | awk '{print $6}' ").read().rstrip()
 
+<<<<<<< HEAD
 
+=======
+#    def get_nova_client(self):
+>>>>>>> 5a7dcc0... Networking testcases for QTIP Framework
 hostname = os.popen("hostname").read().rstrip()
 time_stamp = str(datetime.datetime.utcnow().isoformat())
 
@@ -43,6 +47,13 @@ time_stamp = str(datetime.datetime.utcnow().isoformat())
 os.system("mv RSA_dump " + hostname + "-" + time_stamp + ".log")
 os.system("cat AES-128-CBC_dump >> " + hostname + "-" + time_stamp + ".log")
 
+<<<<<<< HEAD
+=======
+#      if self._glance_client is None:
+##          keystone = self.get_keystone_client()
+#         nova = client.Client('2', token = keystone.auth_token)
+
+>>>>>>> 5a7dcc0... Networking testcases for QTIP Framework
 
 result = {}
 
@@ -64,4 +75,9 @@ result['3. AES-128-cbc throughput']['5. 16 Bytes block (B/sec)'] = [aes_8192B]
 with open('./result_temp', 'w+') as result_file:
     pickle.dump(result, result_file)
 
+<<<<<<< HEAD
 
+=======
+# print json.dumps(result, indent=4, sort_keys=True)
+# print result.items()
+>>>>>>> 5a7dcc0... Networking testcases for QTIP Framework
index 89020bd..8b5b427 100644 (file)
@@ -2,9 +2,15 @@
    connection: local
    tasks:
     - name: making ssl directory
+<<<<<<< HEAD
       file: path={{Dest_dir}}/ssl state=directory
     - name: making temporary ssl directory
       file: path={{Dest_dir}}/ssl/ssl_temp state=directory
+=======
+      file: path=../../{{Dest_dir}}/ssl state=directory
+    - name: making temporary ssl directory
+      file: path=../../{{Dest_dir}}/ssl/ssl_temp state=directory
+>>>>>>> 5a7dcc0... Networking testcases for QTIP Framework
  
 
  - hosts: "{{role}}"
     - name: making  results temporary directory
       shell: mkdir $HOME/qtip_result 
     - include: ./sys_info_pbook.yaml
+<<<<<<< HEAD
       vars:
           network: false
+=======
+>>>>>>> 5a7dcc0... Networking testcases for QTIP Framework
     - name: Installing OpenSSL dependencies when CentOS
       shell: yum install git  wget gcc patch  perl-Time-HiRes autofconf automake libpcap-devel libtool -y
       when: ansible_os_family == "RedHat"
@@ -74,6 +83,7 @@
    connection: local
    tasks:
     - name: extracting_json
+<<<<<<< HEAD
       shell: ( find  {{Dest_dir}}/ssl/ssl_temp/ -name "*.json" | xargs cp -t {{Dest_dir}}/ssl/)
     - name: making_logs_folder
       shell: mkdir -p {{Dest_dir}}/ssl/logs
       shell: ( find {{Dest_dir}}/ssl/ssl_temp/ -name "*.log"  | xargs cp -t {{Dest_dir}}/ssl/logs)
     - name: removing ssl_temp
       shell: rm -rf {{Dest_dir}}/ssl/ssl_temp
+=======
+      shell: ( find  ../../{{Dest_dir}}/ssl/ssl_temp/ -name "*.json" | xargs cp -t ../../{{Dest_dir}}/ssl/)
+    - name: making_logs_folder
+      shell: mkdir -p {{../../Dest_dir}}/ssl/logs
+    - name: extracting_log
+      shell: ( find {{../../Dest_dir}}/ssl/ssl_temp/ -name "*.log"  | xargs cp -t {{../../Dest_dir}}/ssl/logs)
+    - name: removing ssl_temp
+      shell: rm -rf {{../../Dest_dir}}/ssl/ssl_temp
+>>>>>>> 5a7dcc0... Networking testcases for QTIP Framework
 
index cc926b7..9eca0bc 100644 (file)
@@ -7,6 +7,7 @@
    - name: system info collection tool install when Ubuntu
      shell: apt-get install inxi -y
      when: ansible_os_family  == "Debian"
+<<<<<<< HEAD
    - name: Install ansible copy dependencies if remote host has selinux enabled
      shell: yum  install libselinux-python -y
      when: ansible_os_family == "RedHat"
    - name: collecting system information for network test  cases
      shell: cd $HOME/qtip_result && python info_collect.py n
      when: network
+=======
+   - name: system_info script copy
+     copy: src=./info_script/info_collect.py dest={{home_dir.stdout}}/qtip_result/
+   - name: collecting_sys_info
+     shell: cd $HOME/qtip_result &&  python info_collect.py
+>>>>>>> 5a7dcc0... Networking testcases for QTIP Framework
    
 
index c22ea43..7106381 100644 (file)
     - name: make directory
       shell: mkdir $HOME/qtip_result
     - include: ./sys_info_pbook.yaml
+<<<<<<< HEAD
       vars:
           network: false
+=======
+>>>>>>> 5a7dcc0... Networking testcases for QTIP Framework
     - name: Installing UnixBench dependencies if CentOS
       shell: yum install git gcc patch perl-Time-HiRes -y
       when: ansible_os_family == "RedHat"
diff --git a/func/__init__.pyc b/func/__init__.pyc
deleted file mode 100644 (file)
index d217b48..0000000
Binary files a/func/__init__.pyc and /dev/null differ
index 235040b..33aacbc 100644 (file)
@@ -38,23 +38,19 @@ class cli():
             sys.exit(0)
         if (args.suite and args.benchmark):
             obj = Env_setup()
-            if os.path.isfile(
-                    './test_cases/' +
-                    args.suite +
-                    '/' +
-                    args.benchmark):
-
-                [benchmark, roles, vm_info] = obj.parse(
-                    './test_cases/' + args.suite + '/' + args.benchmark)
+            if os.path.isfile('./test_cases/' + args.suite +
+                    '/' + args.benchmark):
 
+                [benchmark, roles, vm_info, benchmark_details, pip] = obj.parse('./test_cases/' + args.suite
+                                                 + '/' + args.benchmark)
+                
                 if len(vm_info) != 0:
                     vmObj = SpawnVM(vm_info)
-
                 obj.callpingtest()
                 obj.callsshtest()
                 obj.updateAnsible()
                 dvr = Driver()
-                dvr.drive_bench(benchmark, obj.roles_dict.items())
+                dvr.drive_bench(benchmark, obj.roles_dict.items(), benchmark_details, obj.ip_pw_dict.items())
             else:
                 print (args.benchmark, ' is not a Template in the Directory - \
                             Enter a Valid file name. or use qtip.py -h for list')
diff --git a/func/cli.pyc b/func/cli.pyc
deleted file mode 100644 (file)
index 3a09e90..0000000
Binary files a/func/cli.pyc and /dev/null differ
index 92ce43f..86cfc23 100644 (file)
@@ -13,6 +13,7 @@ from keystoneclient.auth.identity import v2
 from keystoneclient import session
 from novaclient import client
 import os
+import re
 from collections import defaultdict
 
 
@@ -82,6 +83,11 @@ class create_zones:
         nova.aggregates.remove_host(id, host)
         nova.aggregates.delete(id)
 
+    def get_compute_num(self, computeName):
+
+        num = re.findall(r'\d+',computeName)
+        return (int(num[0])-1)
+
     def create_agg(self, D):
         nova = self._get_nova_client()
         hyper_list = nova.hypervisors.list()
@@ -100,18 +106,19 @@ class create_zones:
             zone_machine[k].append(' ')
 
         for x in range(len(zone_machine)):
-            if not self.check_aggregate(nova, hostnA[x]):
-                agg_idA = nova.aggregates.create(hostnA[x], D[x])
-                nova.aggregates.add_host(aggregate=agg_idA, host=hostnA[x])
+            compute_index = self.get_compute_num(D[x])
+            if not self.check_aggregate(nova, hostnA[compute_index]):
+                agg_idA = nova.aggregates.create(hostnA[compute_index], D[x])
+                nova.aggregates.add_host(aggregate=agg_idA, host=hostnA[compute_index])
 
             else:
 
-                id1 = self.get_aggregate_id(nova, hostnA[x])
-                self.del_agg(nova, id1, hostnA[x])
-                agg_idA = nova.aggregates.create(hostnA[x], D[x])
-                id1 = self.get_aggregate_id(nova, hostnA[x])
+                id1 = self.get_aggregate_id(nova, hostnA[compute_index])
+                self.del_agg(nova, id1, hostnA[compute_index])
+                agg_idA = nova.aggregates.create(hostnA[compute_index], D[x])
+                id1 = self.get_aggregate_id(nova, hostnA[compute_index])
 
                 if not self.check_host_added_to_aggregate(
-                        nova, id1, hostnA[x]):
+                        nova, id1, hostnA[compute_index]):
 
-                    nova.aggregates.add_host(aggregate=id1, host=hostnA[x])
+                    nova.aggregates.add_host(aggregate=id1, host=hostnA[compute_index])
diff --git a/func/create_zones.pyc b/func/create_zones.pyc
deleted file mode 100644 (file)
index 4faf6ab..0000000
Binary files a/func/create_zones.pyc and /dev/null differ
index 45ec3fa..83e64a8 100644 (file)
 
 
 import os
-
+import json
+from collections import defaultdict
 
 class Driver:
 
     def __init__(self):
+
         print "Class driver initialized\n"
+        self.dic_json = defaultdict()
 
-    def drive_bench(self, benchmark, roles):
-        result_dir = '$PWD/results'
+    def drive_bench(self, benchmark, roles, benchmark_detail= None, pip_dict = None):
+        roles= sorted(roles)
+        pip_dict = sorted(pip_dict)
+        result_dir = 'results'
         benchmark_name = benchmark + '.yaml'
-        print roles
+        self.dic_json['Dest_dir'] = str(result_dir)
+        self.dic_json['ip1']=''
+        self.dic_json['ip2']=''
+        
+        for k,v in benchmark_detail:
+            self.dic_json[k]=v
         for k, v in roles:
-            print k
-            run_play = 'ansible-playbook -s $PWD/benchmarks/playbooks/{0} --extra-vars "Dest_dir={1} role={2}" -vvv'.format(
-                benchmark_name, result_dir, k)
-
+            self.dic_json['role']=k
+            index=1
+            if benchmark_detail != None:
+                for values in v:
+                    if k ==  '1-server':
+                        print values, 'saving IP'
+                        self.dic_json['ip'+str(index)]= str(values)
+                        self.dic_json['privateip'+str(index)] = pip_dict[0][1]
+                        index= index+1
+            dic_json = json.dumps(dict(self.dic_json.items()))
+            print dic_json
+            run_play = 'ansible-playbook -s ./benchmarks/playbooks/{0} --extra-vars \'{1}\'  -vvv'.format(benchmark_name, dic_json)
+#            run_play = 'ansible-playbook -s $PWD/benchmarks/playbooks/{0} --extra-vars "Dest_dir={1} role={2}" -vvv'.format(
+#            benchmark_name, result_dir, k)
             status = os.system(run_play)
+       
diff --git a/func/driver.pyc b/func/driver.pyc
deleted file mode 100644 (file)
index 0ad3c58..0000000
Binary files a/func/driver.pyc and /dev/null differ
index 919df17..1db5456 100644 (file)
@@ -7,10 +7,6 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
-
-
-
-
 import os
 import sys
 from collections import defaultdict
@@ -23,12 +19,13 @@ class Env_setup():
     ip_pw_list = []  # IP and password, this will be used to ssh
     roles_dict = defaultdict(list)
     ip_pw_dict = defaultdict(list)
+    ip_pip_list = []
     vm_parameters = defaultdict(list)
+    benchmark_details= defaultdict()
     benchmark = ''
 
     def __init__(self):
         print '\nParsing class initiated\n'
-#        obj1 = SpawnVM()
 
     def writeTofile(self, role):
         fname2 = open('/etc/ansible/hosts', 'w')
@@ -113,12 +110,17 @@ class Env_setup():
 
     def GetVirtualMachineinfo(self, Virtualtag):
         num = len(Virtualtag)
-
         for x in range(num):
             hostlabel = 'virtualmachine_' + str(x + 1)
             for k, v in Virtualtag[hostlabel].iteritems():
                 self.vm_parameters[k].append(v)
 
+    def GetBenchmarkDetails(self, detail_dic):
+        
+        print detail_dic
+        for k,v in detail_dic.items():
+            self.benchmark_details[k]= v
+
     def parse(self, configfilepath):
         try:
             fname = open(configfilepath, 'r+')
@@ -131,12 +133,9 @@ class Env_setup():
                 self.GetVirtualMachineinfo(doc['Context']['Virtual_Machines'])
             if doc['Context']['Host_Machines']:
                 self.GetHostMachineinfo(doc['Context']['Host_Machines'])
-
-            # num = len(doc['Context']['Vir_Machines'])
-            # for x in range(num):
-            # lab = 'host_machine'+ str(x+1)
-            # self.roles_ip_list.insert(x,(doc[lab]['role'],doc[lab]['ip']))
-            # self.ip_pw_list.insert(x,(doc[lab]['ip'],doc[lab]['pw']))
+            if doc.get('Scenario',{}).get('benchmark_details',{}):
+                self.GetBenchmarkDetails(doc.get('Scenario',{}).get('benchmark_details',{}))
+            
             for k, v in self.roles_ip_list:
                 self.roles_dict[k].append(v)
             for k, v in self.ip_pw_list:
@@ -144,7 +143,9 @@ class Env_setup():
             return (
                 self.benchmark,
                 self.roles_dict.items(),
-                self.vm_parameters)
+                self.vm_parameters,
+                self.benchmark_details.items(),
+                self.ip_pw_dict.items())
         except KeyboardInterrupt:
             fname.close()
             print 'ConfigFile Closed: exiting!'
diff --git a/func/env_setup.pyc b/func/env_setup.pyc
deleted file mode 100644 (file)
index 0f9c143..0000000
Binary files a/func/env_setup.pyc and /dev/null differ
diff --git a/func/fetchimg.pyc b/func/fetchimg.pyc
deleted file mode 100644 (file)
index 0c0b228..0000000
Binary files a/func/fetchimg.pyc and /dev/null differ
index a9dada2..c1baced 100644 (file)
@@ -21,8 +21,6 @@ import glanceclient
 from novaclient import client
 import time
 import json
-
-
 from func.create_zones import create_zones
 
 
@@ -81,17 +79,14 @@ class SpawnVM(Env_setup):
                  'type': 'string'
                 
                  }
-
-            Heat_Dic['resources'][
-                'public_port_' +
-                str(x)] = {
-                'type': 'OS::Neutron::Port',
-                'properties': {
-                    'network': {'get_resource': 'private_network'},
-                    'security_groups': [{ 'get_resource': 'demo1_security_Group'}],
-                    'fixed_ips': [
-                        {
-                            'subnet_id': {'get_resource': 'private_subnet'}}]}}
+            
+            Heat_Dic['resources']['public_port_' +str(x)] = {
+                    'type': 'OS::Neutron::Port',
+                    'properties': {
+                        'network': {'get_resource': 'private_network'},
+                        'security_groups': [{ 'get_resource': 'demo1_security_Group'}],
+                        'fixed_ips': [
+                            {'subnet_id': {'get_resource': 'private_subnet'}}]}}
 
             Heat_Dic['resources']['floating_ip_' + str(x)] = {
                 'type': 'OS::Neutron::FloatingIP',
@@ -108,11 +103,11 @@ class SpawnVM(Env_setup):
                 'type': 'OS::Nova::Server',
                 'properties': {
                     'image': img,
-                    'networks':
-                    [{'port': {'get_resource': 'public_port_' + str(x)}}],
+                    'networks':[
+                    {'port': {'get_resource': 'public_port_' + str(x)}}],
                     'flavor': flavor,
                     'availability_zone': avail_zone,
-                    'name': 'QTIP_Instance_' + str(x),
+                    'name': 'instance' + str(x),
                     'key_name': {'get_resource': 'KeyPairSavePrivate'},
                     'user_data_format': 'RAW',
                     'user_data': scriptcmd}}
@@ -124,9 +119,15 @@ class SpawnVM(Env_setup):
                     'rules': [{
                         'protocol': 'tcp',
                         'port_range_min': 22,
-                        'port_range_max': 22},
+                        'port_range_max': 5201},
+                        {'protocol': 'udp',
+                        'port_range_min': 22,
+                        'port_range_max': 5201},
                         {'protocol': 'icmp'}]}}
-
+                        
+            Heat_Dic['outputs']['instance_PIP_' +str(x)] = {
+                'description': 'IP address of the instance',
+                'value': {'get_attr': ['my_instance_' + str(x), 'first_address']}}
             Heat_Dic['outputs']['instance_ip_' +str(x)] = {
                 'description': 'IP address of the instance',
                 'value': {'get_attr': ['floating_ip_' + str(x), 'floating_ip_address']}}
@@ -205,10 +206,7 @@ class SpawnVM(Env_setup):
             qtip_image = glance.images.upload(
                 qtip_image.id, open('./Temp_Img/QTIP_CentOS.qcow2'))
         json_temp = json.dumps(Heat_template)
-#       cluster_body = {
-#           "stack_name": stackname,
-#           "template": Heat_template
-#           }
+        
         for checks in range(3):
             for prev_stacks in heat.stacks.list():
 
@@ -219,12 +217,12 @@ class SpawnVM(Env_setup):
 
         print '\nStack Creating Started\n'
         
-        try:
-            heat.stacks.create(stack_name=stackname, template=Heat_template)
-
-        except:
-            print 'Create Failed :( '
+       # try:
+        heat.stacks.create(stack_name=stackname, template=Heat_template)
 
+        #except:
+            #print 'Create Failed :( '
+        
         cluster_detail = heat.stacks.get(stackname)
         while(cluster_detail.status != 'COMPLETE'):
             if cluster_detail.status == 'IN_PROGRESS':
@@ -242,18 +240,17 @@ class SpawnVM(Env_setup):
  
                 if I['output_key'] == availabilityKey:
                     zone.insert(s,str(I['output_value']))
-                    s=s+1
-               
+                    s=s+1   
             for i in cluster_detail.outputs:
                 instanceKey = "instance_ip_" + str(vm + 1)
-                    
+                privateIPkey = 'instance_PIP_' + str(vm +1)
                 if i['output_key'] == instanceKey:
-                                       
-                    Env_setup.roles_dict[vm_role_ip_dict['role'][
-                                vm]].append(str(i['output_value']))
-   
-                    Env_setup.ip_pw_list.append(
-                                (str(i['output_value']),''))
+                    Env_setup.roles_dict[vm_role_ip_dict['role'][vm]].append(
+                                                        str(i['output_value']))
+                    Env_setup.ip_pw_list.append((str(i['output_value']),''))
+                    
+                if i['output_key'] == privateIPkey:
+                    Env_setup.ip_pw_dict[vm_role_ip_dict['role'][vm]]=str(i['output_value'])
                 if i['output_key'] == 'KeyPair_PublicKey':
                     sshkey = str(i['output_value'])
 
diff --git a/func/spawn_vm.pyc b/func/spawn_vm.pyc
deleted file mode 100644 (file)
index 8e6ce8f..0000000
Binary files a/func/spawn_vm.pyc and /dev/null differ
diff --git a/func/validate_yaml.pyc b/func/validate_yaml.pyc
deleted file mode 100644 (file)
index 9a56031..0000000
Binary files a/func/validate_yaml.pyc and /dev/null differ
diff --git a/results/INFO b/results/INFO
deleted file mode 100644 (file)
index b97ca7e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-Results for QTIP will be stored in this directory
-QTIP result directory will be made configurable soon
diff --git a/results/foo.txt b/results/foo.txt
new file mode 100644 (file)
index 0000000..e69de29
index 5edb396..01905f5 100644 (file)
@@ -15,7 +15,7 @@ Context:
       role: 1Run
       flavor: m1.large
      virtualmachine_2:
-      availability_zone: compute2
+      availability_zone: compute4
       OS_image: QTIP_CentOS
       public_network: 'provider_network'
       role: 1Run
diff --git a/test_cases/network/iperf.yaml b/test_cases/network/iperf.yaml
deleted file mode 100644 (file)
index 56c49e2..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-scenario:
-  benchmark: dpi
-  ExecOrder1: vm_1
-  ExecOrder2: vm_2
-
-Context:         
-  VirtualMachines:
-    vm_1:
-      availability_zone: compute1
-      OS_image: centos7
-      public_network: "provider_network"
-      role: ExecOrder1
-    vm_2:
-      availability_zone: compute1
-      OS_image: centos7
-      public_network: "provider_network"
-      role: ExecOrder2
diff --git a/test_cases/network/iperf_topology_1.yaml b/test_cases/network/iperf_topology_1.yaml
new file mode 100644 (file)
index 0000000..20a433a
--- /dev/null
@@ -0,0 +1,43 @@
+Scenario:
+  benchmark: iperf
+  topology: Client and Server on ONE compute
+  server : virtualmachine_1
+  client: virtualmachine_2
+  benchmark_details:
+    duration: 10 
+    protocol: udp
+    bandwidthGbps: 10
+
+Context:
+  Host_Machines:
+
+
+  Virtual_Machines:
+    virtualmachine_1:
+      availability_zone: compute2
+      OS_image: QTIP_CentOS
+      public_network: 'provider_network'
+      role: 1-server
+      flavor: m1.large   
+
+    virtualmachine_2:
+      availability_zone: compute2
+      OS_image: QTIP_CentOS
+      public_network: 'provider_network'
+      role: 2-host
+      flavor: m1.large
+    
+Test_Description:
+  Test_category: "network"
+  Benchmark: "iperf"
+  Overview: >
+        '''This test will run the IPERF benchmark  on virutalmachine_1 and virtualmachine_2. On the\n
+         same compute node
+         if you wish to add a host machine add the following information under the Host_Machine tag
+
+        machine_1:
+          ip:
+          pw:
+          role:
+          '''
+
diff --git a/test_cases/network/iperf_topology_2.yaml b/test_cases/network/iperf_topology_2.yaml
new file mode 100644 (file)
index 0000000..4392f32
--- /dev/null
@@ -0,0 +1,43 @@
+Scenario:
+  benchmark: iperf
+  topology: Client and Server on different Compute nodes
+  server: virtualmachine_1
+  client: virtualmachine_2
+  benchmark_details:
+    duration: 20
+    protocol: udp
+    bandwidthGbps: 1
+
+Context:
+  Host_Machines:
+
+
+  Virtual_Machines:
+    virtualmachine_1:
+      availability_zone: compute1
+      OS_image: QTIP_CentOS
+      public_network: 'provider_network'
+      role: 1-server
+      flavor: m1.large   
+
+    virtualmachine_2:
+      availability_zone: compute2
+      OS_image: QTIP_CentOS
+      public_network: 'provider_network'
+      role: 2-host
+      flavor: m1.large
+    
+Test_Description:
+  Test_category: "network"
+  Benchmark: "iperf"
+  Overview: >
+        '''This test will run the IPERF benchmark  on virutalmachine_1 and virtualmachine_2. On the\n
+         same compute node
+         if you wish to add a host machine add the following information under the Host_Machine tag
+
+        machine_1:
+          ip:
+          pw:
+          role:
+          '''
+
diff --git a/test_cases/network/iperf_topology_3.yaml b/test_cases/network/iperf_topology_3.yaml
new file mode 100644 (file)
index 0000000..9e7b73e
--- /dev/null
@@ -0,0 +1,60 @@
+Scenario:
+  benchmark: iperf
+  topology: 2 Client on one compute and 2 servers on another machine
+  1Run : virtualmachine_1, virtualmachine_2
+  2Run:
+  benchmark_details:
+    duration: 20
+    protocol: udp
+    bandwidthGbps: 1
+
+Context:
+  Host_Machines:
+
+
+  Virtual_Machines:
+    virtualmachine_1:
+      availability_zone: compute1
+      OS_image: QTIP_CentOS
+      public_network: 'provider_network'
+      role: 1-server
+      flavor: m1.large   
+
+    virtualmachine_2:
+      availability_zone: compute2
+      OS_image: QTIP_CentOS
+      public_network: 'provider_network'
+      role: 1-server
+      flavor: m1.large
+
+    virtualmachine_3:
+      availability_zone: compute3
+      OS_image: QTIP_CentOS
+      public_network: 'provider_network'
+      role: 1-server
+      flavor: m1.large
+
+    virtualmachine_4:
+      availability_zone: compute4
+      OS_image: QTIP_CentOS
+      public_network: 'provider_network'
+      role: 1-server
+      flavor: m1.large
+
+
+
+   
+Test_Description:
+  Test_category: "network"
+  Benchmark: "iperf"
+  Overview: >
+        '''This test will run the IPERF benchmark  on virutalmachine_1 and virtualmachine_2. On the\n
+         same compute node
+         if you wish to add a host machine add the following information under the Host_Machine tag
+
+        machine_1:
+          ip:
+          pw:
+          role:
+          '''
+
diff --git a/test_cases/network/netperf.yaml b/test_cases/network/netperf.yaml
new file mode 100644 (file)
index 0000000..60ee4a1
--- /dev/null
@@ -0,0 +1,42 @@
+Scenario:
+  benchmark: netperf
+  topology: Client and Server on ONE compute
+  server : virtualmachine_1
+  client: virtualmachine_2
+  benchmark_details:
+    duration: 10 
+    teststream: udp_stream
+
+Context:
+  Host_Machines:
+
+
+  Virtual_Machines:
+    virtualmachine_1:
+      availability_zone: compute2
+      OS_image: QTIP_CentOS
+      public_network: 'provider_network'
+      role: 1-server
+      flavor: m1.large   
+
+    virtualmachine_2:
+      availability_zone: compute2
+      OS_image: QTIP_CentOS
+      public_network: 'provider_network'
+      role: 2-host
+      flavor: m1.large
+    
+Test_Description:
+  Test_category: "network"
+  Benchmark: "netperf"
+  Overview: >
+        '''This test will run the NETPERF benchmark  on virutalmachine_1 and virtualmachine_2. On the\n
+         same compute node
+         if you wish to add a host machine add the following information under the Host_Machine tag
+
+        machine_1:
+          ip:
+          pw:
+          role:
+          '''
+
diff --git a/test_cases/network/pktgen.yaml b/test_cases/network/pktgen.yaml
new file mode 100644 (file)
index 0000000..13fae68
--- /dev/null
@@ -0,0 +1,44 @@
+Scenario:
+  benchmark: pktgen
+  topology: Client and Server on ONE compute
+  server : virtualmachine_1
+  client: virtualmachine_2
+  benchmark_details:
+    duration: "10" 
+    packetsize: "64"
+    ipaddr: "10.10.17.4"
+    numberofports: "10"
+
+Context:
+  Host_Machines:
+
+
+  Virtual_Machines:
+    virtualmachine_1:
+      availability_zone: compute2
+      OS_image: pktgenready
+      public_network: 'provider_network'
+      role: 1-server
+      flavor: m1.large   
+
+    virtualmachine_2:
+      availability_zone: compute2
+      OS_image: pktgenready
+      public_network: 'provider_network'
+      role: 2-host
+      flavor: m1.large
+    
+Test_Description:
+  Test_category: "network"
+  Benchmark: "iperf"
+  Overview: >
+        '''This test will run the IPERF benchmark  on virutalmachine_1 and virtualmachine_2. On the\n
+         same compute node
+         if you wish to add a host machine add the following information under the Host_Machine tag
+
+        machine_1:
+          ip:
+          pw:
+          role:
+          '''
+