revert accidental changes
diff --git a/TestON/core/teston.py b/TestON/core/teston.py
index b0752ca..8934e50 100644
--- a/TestON/core/teston.py
+++ b/TestON/core/teston.py
@@ -628,7 +628,7 @@
try :
testModule = __import__(main.classPath, globals(), locals(), [main.TEST], -1)
except(ImportError):
- print "There is no test like "+main.TEST
+ print "There was an import error, it might mean that there is no test like "+main.TEST
main.exit()
testClass = getattr(testModule, main.TEST)
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index a05312e..418554d 100644
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -463,8 +463,7 @@
#Note that you may not want certain features listed
#on here.
core_feature_string = "export ONOS_FEATURES=webconsole,onos-api,"+\
- "onos-cli,onos-openflow,onos-app-mobility,onos-app-tvue,"+\
- "onos-app-proxyarp,"+extra_feature_string
+ "onos-cli,onos-openflow,"+extra_feature_string
mn_string = "export OCN="
onos_string = "export OC"
temp_count = 1
@@ -809,6 +808,40 @@
main.cleanup()
main.exit()
+ def onos_die(self, node_ip):
+ '''
+ Issues the command 'onos-die <node-ip>'
+ This command calls onos-kill and also stops the node
+ '''
+ try:
+ self.handle.sendline("")
+ self.handle.expect("\$")
+ cmd_str = "onos-kill "+str(node_ip)
+ self.handle.sendline(cmd_str)
+ i = self.handle.expect([
+ "Killing\sONOS",
+ "ONOS\sprocess\sis\snot\srunning",
+ pexpect.TIMEOUT], timeout=20)
+ if i == 0:
+ main.log.info("ONOS instance "+str(node_ip)+
+ " was killed and stopped")
+ return main.TRUE
+ elif i == 1:
+ main.log.info("ONOS process was not running")
+ return main.FALSE
+ except pexpect.EOF:
+ main.log.error(self.name + ": EOF exception found")
+ main.log.error(self.name + ": " + self.handle.before)
+ main.cleanup()
+ main.exit()
+ except:
+ main.log.info(self.name+" ::::::")
+ main.log.error( traceback.print_exc())
+ main.log.info(self.name+" ::::::")
+ main.cleanup()
+ main.exit()
+
+
def onos_kill(self, node_ip):
'''
Calls the command: 'onos-kill [<node-ip>]'
@@ -964,7 +997,8 @@
main.exit()
def push_test_intents_shell(self, dpid_src, dpid_dst, num_intents,
- dir_file, onos_ip, num_mult="", app_id="", report=True):
+ dir_file, onos_ip, num_mult="", app_id="", report=True,
+ options=""):
'''
Description:
Use the linux prompt to push test intents to
@@ -981,7 +1015,12 @@
'''
try:
#Create the string to sendline
- base_cmd = "onos "+str(onos_ip)+" push-test-intents "
+ if options:
+ base_cmd = "onos "+str(onos_ip)+" push-test-intents "+\
+ options+" "
+ else:
+ base_cmd = "onos "+str(onos_ip)+" push-test-intents "
+
add_dpid = base_cmd + str(dpid_src) + " " + str(dpid_dst)
if not num_mult:
add_intents = add_dpid + " " + str(num_intents)
@@ -993,7 +1032,10 @@
else:
add_app = add_intents
- send_cmd = add_app + " > " + str(dir_file) + " &"
+ if report:
+ send_cmd = add_app + " > " + str(dir_file) + " &"
+ else:
+ send_cmd = add_app + " &"
main.log.info("Send cmd: "+send_cmd)
self.handle.sendline(send_cmd)
diff --git a/TestON/tests/IntentPerfNext/IntentPerfNext.params b/TestON/tests/IntentPerfNext/IntentPerfNext.params
index 168a067..cdf0766 100644
--- a/TestON/tests/IntentPerfNext/IntentPerfNext.params
+++ b/TestON/tests/IntentPerfNext/IntentPerfNext.params
@@ -1,5 +1,5 @@
<PARAMS>
- <testcases>1,4,5,4,5,4,5,4</testcases>
+ <testcases>1,5,2,3</testcases>
<ENV>
<cellName>intent_perf_test</cellName>
@@ -36,11 +36,12 @@
<TEST>
#Number of times to iterate each case
- <numIter>10</numIter>
+ <numIter>15</numIter>
+ <numIgnore>3</numIgnore>
<numSwitch>9</numSwitch>
<batchThresholdMin>0</batchThresholdMin>
<batchThresholdMax>1000</batchThresholdMax>
- <batchIntentSize>1500</batchIntentSize>
+ <batchIntentSize>200</batchIntentSize>
<numMult>1</numMult>
</TEST>
diff --git a/TestON/tests/IntentPerfNext/IntentPerfNext.py b/TestON/tests/IntentPerfNext/IntentPerfNext.py
index 73aa304..c212e9e 100644
--- a/TestON/tests/IntentPerfNext/IntentPerfNext.py
+++ b/TestON/tests/IntentPerfNext/IntentPerfNext.py
@@ -113,6 +113,7 @@
import json
import requests
import os
+ import numpy
ONOS1_ip = main.params['CTRL']['ip1']
ONOS2_ip = main.params['CTRL']['ip2']
@@ -123,6 +124,7 @@
#number of iterations of case
num_iter = main.params['TEST']['numIter']
+ num_ignore = int(main.params['TEST']['numIgnore'])
#Timestamp keys for json metrics output
submit_time = main.params['JSON']['submittedTime']
@@ -146,6 +148,8 @@
time.sleep(10)
+ main.log.report("Single intent add latency test")
+
devices_json_str = main.ONOS1cli.devices()
devices_json_obj = json.loads(devices_json_str)
device_id_list = []
@@ -201,10 +205,10 @@
intent_install_lat_3 ) / 3
main.log.info("Intent add latency avg for iteration "+str(i)+
- ": "+str(intent_install_lat_avg))
+ ": "+str(intent_install_lat_avg)+" ms")
if intent_install_lat_avg > 0.0 and \
- intent_install_lat_avg < 1000:
+ intent_install_lat_avg < 1000 and i > num_ignore:
intent_add_lat_list.append(intent_install_lat_avg)
else:
main.log.info("Intent add latency exceeded "+
@@ -229,16 +233,14 @@
time.sleep(5)
- intent_add_lat_min = min(intent_add_lat_list)
- intent_add_lat_max = max(intent_add_lat_list)
intent_add_lat_avg = sum(intent_add_lat_list) /\
len(intent_add_lat_list)
+ intent_add_lat_std = \
+ round(numpy.std(intent_add_lat_list),1)
#END ITERATION FOR LOOP
main.log.report("Single intent add latency - \n"+
- "Min: "+str(intent_add_lat_min)+" ms\n"+
- "Max: "+str(intent_add_lat_max)+" ms\n"+
- "Avg: "+str(intent_add_lat_avg)+" ms\n")
-
+ "Avg: "+str(intent_add_lat_avg)+" ms\n"+
+ "Std Deviation: "+str(intent_add_lat_std)+" ms")
def CASE3(self, main):
'''
@@ -248,6 +250,7 @@
import json
import requests
import os
+ import numpy
ONOS1_ip = main.params['CTRL']['ip1']
ONOS2_ip = main.params['CTRL']['ip2']
@@ -258,6 +261,7 @@
#number of iterations of case
num_iter = main.params['TEST']['numIter']
+ num_ignore = int(main.params['TEST']['numIgnore'])
#Timestamp keys for json metrics output
submit_time = main.params['JSON']['submittedTime']
@@ -282,9 +286,12 @@
for i in range(0, int(num_iter)):
#add_point_intent(ingr_device, ingr_port,
# egr_device, egr_port)
- main.ONOS1cli.add_point_intent(
- device_id_list[0]+"/2", device_id_list[4]+"/1")
-
+ if len(device_id_list) > 0:
+ main.ONOS1cli.add_point_intent(
+ device_id_list[0]+"/2", device_id_list[4]+"/1")
+ else:
+ main.log.info("Failed to fetch devices from ONOS")
+
time.sleep(5)
intents_str = main.ONOS1cli.intents(json_format=True)
@@ -342,7 +349,7 @@
str(i)+": "+str(intent_reroute_lat_avg))
if intent_reroute_lat_avg > 0.0 and \
- intent_reroute_lat_avg < 1000:
+ intent_reroute_lat_avg < 1000 and i > num_ignore:
intent_reroute_lat_list.append(intent_reroute_lat_avg)
else:
main.log.info("Intent reroute latency exceeded "+
@@ -360,15 +367,26 @@
# determine what timestsamp to get
main.ONOS1cli.remove_intent(intent_id)
- #TODO: Report framework
- print intent_reroute_lat_list
-
-
+ main.log.info("Bringing Mininet interface up for next "+
+ "iteration")
+ main.Mininet1.handle.sendline(
+ "sh ifconfig s2-eth3 up")
+
+ intent_reroute_lat_avg = sum(intent_reroute_lat_list) /\
+ len(intent_reroute_lat_list)
+ intent_reroute_lat_std = \
+ round(numpy.std(intent_reroute_lat_list),1)
+ #END ITERATION FOR LOOP
+ main.log.report("Single intent reroute latency - \n"+
+ "Avg: "+str(intent_reroute_lat_avg)+" ms\n"+
+ "Std Deviation: "+str(intent_reroute_lat_std)+" ms")
+
def CASE4(self, main):
import time
import json
import requests
import os
+ import numpy
ONOS1_ip = main.params['CTRL']['ip1']
ONOS2_ip = main.params['CTRL']['ip2']
@@ -392,8 +410,10 @@
#number of iterations of case
num_iter = main.params['TEST']['numIter']
+ num_ignore = int(main.params['TEST']['numIgnore'])
num_switch = int(main.params['TEST']['numSwitch'])
n_thread = main.params['TEST']['numMult']
+ #n_thread = 105
#*****
global cluster_count
@@ -451,7 +471,7 @@
if cluster_count == 7:
for i in range(1,9):
- if i < 7:
+ if i < 8:
main.Mininet1.assign_sw_controller(
sw=str(i),
ip1=ONOS_ip_list[i-1],
@@ -462,6 +482,8 @@
ip1=ONOS_ip_list[6],
port1=default_sw_port)
+ time.sleep(30)
+
main.log.report("Batch intent installation test of "+
batch_intent_size +" intents")
@@ -476,24 +498,52 @@
batch_install_lat = []
batch_withdraw_lat = []
+ sleep_time = 10
base_dir = "/tmp/"
+ max_install_lat = []
for i in range(0, int(num_iter)):
main.log.info("Pushing "+
str(int(batch_intent_size)*int(n_thread))+
" intents. Iteration "+str(i))
-
+
for node in range(1, cluster_count+1):
save_dir = base_dir + "batch_intent_"+str(node)+".txt"
main.ONOSbench.push_test_intents_shell(
"of:0000000000000001/"+str(node),
"of:0000000000000008/"+str(node),
- batch_intent_size, save_dir, ONOS_ip_list[node-1],
+ int(batch_intent_size),
+ save_dir, ONOS_ip_list[node-1],
num_mult=n_thread, app_id=node)
-
- time.sleep(120 / int(cluster_count))
+
+ #Wait sufficient time for intents to start
+ #installing
+
+ time.sleep(sleep_time)
+ print sleep_time
+
+ intent = ""
+ counter = 300
+ while len(intent) > 0 and counter > 0:
+ main.ONOS1cli.handle.sendline(
+ "intents | wc -l")
+ main.ONOS1cli.handle.expect(
+ "intents | wc -l")
+ main.ONOS1cli.handle.expect(
+ "onos>")
+ intent_temp = main.ONOS1cli.handle.before()
+ print intent_temp
+
+ intent = main.ONOS1cli.intents()
+ intent = json.loads(intent)
+ counter = counter-1
+ time.sleep(1)
+
+ time.sleep(5)
+
for node in range(1, cluster_count+1):
+ save_dir = base_dir + "batch_intent_"+str(node)+".txt"
with open(save_dir) as f_onos:
line_count = 0
for line in f_onos:
@@ -502,20 +552,33 @@
result = line[1].split(" ")[0]
#TODO: add parameters before appending latency
if line_count == 0:
- batch_install_lat.append(result)
+ batch_install_lat.append(int(result))
elif line_count == 1:
- batch_withdraw_lat.append(result)
+ batch_withdraw_lat.append(int(result))
line_count += 1
main.log.info("Batch install latency for ONOS"+
str(node)+" with "+\
str(batch_intent_size) + "intents: "+\
str(batch_install_lat))
+
+ if len(batch_install_lat) > 0 and int(i) > num_ignore:
+ max_install_lat.append(max(batch_install_lat))
+ elif len(batch_install_lat) == 0:
+ #If I failed to read anything from the file,
+ #increase the wait time before checking intents
+ sleep_time += 30
+ batch_install_lat = []
+
+ #Sleep in between iterations
time.sleep(5)
- main.log.report("Max of batch installation latency "+
- "for ONOS" + str(node)+ ": "+
- str(max(batch_install_lat)))
-
+ main.log.report("Avg of batch installation latency "+
+ ": "+
+ str(sum(max_install_lat) / len(max_install_lat)))
+ main.log.report("Std Deviation of batch installation latency "+
+ ": "+
+ str(numpy.std(max_install_lat)))
+
def CASE5(self,main):
'''
Increase number of nodes and initiate CLI
@@ -590,5 +653,66 @@
onfail="Scale out to "+str(cluster_count)+\
" nodes failed")
+ def CASE9(self, main):
+ count = 0
+ sw_num1 = 1
+ sw_num2 = 1
+ appid = 0
+ port_num1 = 1
+ port_num2 = 1
+
+ time.sleep(30)
+ while True:
+ #main.ONOS1cli.push_test_intents(
+ #"of:0000000000001001/1",
+ #"of:0000000000002001/1",
+ # 100, num_mult="10", app_id="1")
+ #main.ONOS2cli.push_test_intents(
+ # "of:0000000000001002/1",
+ # "of:0000000000002002/1",
+ # 100, num_mult="10", app_id="2")
+ #main.ONOS2cli.push_test_intents(
+ # "of:0000000000001003/1",
+ # "of:0000000000002003/1",
+ # 100, num_mult="10", app_id="3")
+ count += 1
+
+ if count >= 100:
+ main.ONOSbench.handle.sendline(
+ "onos 10.128.174.1 intents-events-metrics >>"+\
+ " /tmp/metrics_intents_temp.txt &")
+ count = 0
+
+ arg1 = "of:000000000000100"+str(sw_num1)+"/"+str(port_num1)
+ arg2 = "of:000000000000200"+str(sw_num2)+"/"+str(port_num2)
+
+ sw_num1 += 1
+
+ if sw_num1 > 7:
+ sw_num1 = 1
+ sw_num2 += 1
+ if sw_num2 > 7:
+ appid += 1
+
+ if sw_num2 > 7:
+ sw_num2 = 1
+
+ main.ONOSbench.push_test_intents_shell(
+ arg1,
+ arg2,
+ 150, "/tmp/temp.txt", "10.128.174.1",
+ num_mult="10", app_id=appid,report=False)
+ #main.ONOSbench.push_test_intents_shell(
+ # "of:0000000000001002/1",
+ # "of:0000000000002002/1",
+ # 133, "/tmp/temp2.txt", "10.128.174.2",
+ # num_mult="6", app_id="2",report=False)
+ #main.ONOSbench.push_test_intents_shell(
+ # "of:0000000000001003/1",
+ # "of:0000000000002003/1",
+ # 133, "/tmp/temp3.txt", "10.128.174.3",
+ # num_mult="6", app_id="3",report=False)
+
+ time.sleep(0.1)
diff --git a/TestON/tests/IntentPerfNext/IntentPerfNext.topo b/TestON/tests/IntentPerfNext/IntentPerfNext.topo
index 71df643..048695d 100644
--- a/TestON/tests/IntentPerfNext/IntentPerfNext.topo
+++ b/TestON/tests/IntentPerfNext/IntentPerfNext.topo
@@ -89,7 +89,7 @@
<type>MininetCliDriver</type>
<connect_order>4</connect_order>
<COMPONENTS>
- <arg1> --custom topo-linear-scaleout.py </arg1>
+ <arg1> --custom topo-intentFlower.py </arg1>
<arg2> --arp --mac --topo mytopo </arg2>
<arg3> </arg3>
<controller> remote </controller>