blob: 2fe521b1dedb3af21b07dd31b4f0cf66500ad5e7 [file] [log] [blame]
#TopoPerfNext
#
#Topology Performance test for ONOS-next
#
#andrew@onlab.us
import time
import sys
import os
import re
class TopoPerfNext:
def __init__(self):
self.default = ''
def CASE1(self, main):
'''
ONOS startup sequence
'''
cell_name = main.params['ENV']['cellName']
git_pull = main.params['GIT']['autoPull']
checkout_branch = main.params['GIT']['checkout']
ONOS1_ip = main.params['CTRL']['ip1']
ONOS2_ip = main.params['CTRL']['ip2']
ONOS3_ip = main.params['CTRL']['ip3']
MN1_ip = main.params['MN']['ip1']
BENCH_ip = main.params['BENCH']['ip']
main.case("Setting up test environment")
main.step("Creating cell file")
cell_file_result = main.ONOSbench.create_cell_file(
BENCH_ip, cell_name, MN1_ip, "onos-core",
ONOS1_ip, ONOS2_ip, ONOS3_ip)
main.step("Applying cell file to environment")
cell_apply_result = main.ONOSbench.set_cell(cell_name)
verify_cell_result = main.ONOSbench.verify_cell()
main.step("Git checkout and pull "+checkout_branch)
if git_pull == 'on':
checkout_result = \
main.ONOSbench.git_checkout(checkout_branch)
pull_result = main.ONOSbench.git_pull()
else:
checkout_result = main.TRUE
pull_result = main.TRUE
main.log.info("Skipped git checkout and pull")
main.step("Using mvn clean & install")
mvn_result = main.ONOSbench.clean_install()
main.step("Creating ONOS package")
package_result = main.ONOSbench.onos_package()
main.step("Installing ONOS package")
install_result = main.ONOSbench.onos_install()
main.step("Starting ONOS service")
start_result = main.ONOSbench.onos_start(ONOS1_ip)
utilities.assert_equals(expect=main.TRUE,
actual= cell_file_result and cell_apply_result and\
verify_cell_result and checkout_result and\
pull_result and mvn_result and\
install_result and start_result,
onpass="Cell file created successfully",
onfail="Failed to create cell file")
def CASE2(self, main):
'''
Assign s1 to ONOS1 and measure latency
'''
import time
import subprocess
import json
import requests
import os
ONOS1_ip = main.params['CTRL']['ip1']
ONOS2_ip = main.params['CTRL']['ip2']
ONOS3_ip = main.params['CTRL']['ip3']
ONOS_user = main.params['CTRL']['user']
default_sw_port = main.params['CTRL']['port1']
#Number of iterations of case
num_iter = main.params['TEST']['numIter']
#Directory/file to store tshark results
tshark_of_output = "/tmp/tshark_of_topo.txt"
tshark_tcp_output = "/tmp/tshark_tcp_topo.txt"
#String to grep in tshark output
tshark_tcp_string = "TCP 74 "+default_sw_port
tshark_of_string = "OFP 86 Vendor"
#Initialize assertion to TRUE
assertion = main.TRUE
main.log.report("Latency of adding one switch")
for i in range(0, int(num_iter)):
main.log.info("Starting tshark capture")
#* TCP [ACK, SYN] is used as t0_a, the
# very first "exchange" between ONOS and
# the switch for end-to-end measurement
#* OFP [Stats Reply] is used for t0_b
# the very last OFP message between ONOS
# and the switch for ONOS measurement
main.ONOS1.tshark_grep(tshark_tcp_string,
tshark_tcp_output)
main.ONOS1.tshark_grep(tshark_of_string,
tshark_of_output)
#Wait and ensure tshark is started and
#capturing
time.sleep(10)
main.log.info("Assigning s1 to controller")
main.Mininet1.assign_sw_controller(sw="1",
ip1=ONOS1_ip, port1=default_sw_port)
#Wait and ensure switch is assigned
#before stopping tshark
time.sleep(10)
main.ONOS1.stop_tshark()
#tshark output is saved in ONOS. Use subprocess
#to copy over files to TestON for parsing
main.log.info("Copying over tshark files")
#TCP CAPTURE ****
ssh_tcp_file = subprocess.Popen(['ssh',
ONOS_user+"@"+ONOS1_ip, 'cat',
tshark_tcp_output], stdout=subprocess.PIPE)
temp_text = ssh_tcp_file.stdout.readline()
temp_text = temp_text.split(" ")
main.log.info("Object read in from TCP capture: "+
str(temp_text))
if len(temp_text) > 0:
t0_tcp = int(float(temp_text[1])*1000)
else:
main.log.error("Tshark output file for TCP"+
" returned unexpected results")
t0_tcp = 0
assertion = main.FALSE
#****************
#OF CAPTURE ****
ssh_of_file = subprocess.Popen(['ssh',
ONOS_user+"@"+ONOS1_ip, 'cat',
tshark_of_output], stdout=subprocess.PIPE)
while True:
temp_text = ssh_of_file.stdout.readline()
if line !='':
line_ofp = temp_text
else:
break
obj = line_ofp.split(" ")
main.log.info("Object read in from OFP capture: "+
str(line_ofp))
if len(line_ofp) > 0:
t0_ofp = int(float(obj[1])*1000)
else:
main.log.error("Tshark output file for OFP"+
" returned unexpected results")
t0_ofp = 0
assertion = main.FALSE
#****************
#TODO:
#Get json object from all 3 ONOS instances
#TODO:
#Parse json object for timestamp
topo_timestamp_1 = 0
topo_timestamp_2 = 0
topo_timestamp_3 = 0
#ONOS processing latency
delta_of_1 = int(topo_timestamp_1) - int(t0_ofp)
delta_of_2 = int(topo_timestamp_2) - int(t0_ofp)
delta_of_3 = int(topo_timestamp_3) - int(t0_ofp)
#End-to-end processing latency
delta_tcp_1 = int(topo_timestamp_1) - int(t0_tcp)
delta_tcp_2 = int(topo_timestamp_2) - int(t0_tcp)
delta_tcp_3 = int(topo_timestamp_3) - int(t0_tcp)
#TODO:
#Fetch logs upon threshold excess
main.log.info("ONOS1 delta OFP: "+str(delta_of_1))
main.log.info("ONOS2 delta OFP: "+str(delta_of_2))
main.log.info("ONOS3 delta OFP: "+str(delta_of_3))
main.log.info("ONOS1 delta TCP: "+str(delta_tcp_1))
main.log.info("ONOS2 delta TCP: "+str(delta_tcp_2))
main.log.info("ONOS3 delta TCP: "+str(delta_tcp_3))