Merge pull request #21 from OPENNETWORKINGLAB/get_sw_controller

Merge two versions of get_sw_controller
diff --git a/TestON/tests/TopoPerfNext/TopoPerfNext.params b/TestON/tests/TopoPerfNext/TopoPerfNext.params
index 288023e..7eac6ef 100644
--- a/TestON/tests/TopoPerfNext/TopoPerfNext.params
+++ b/TestON/tests/TopoPerfNext/TopoPerfNext.params
@@ -39,8 +39,8 @@
         <onosLogFile>/opt/onos/log/karaf*</onosLogFile>
 
         #Number of times to iterate each case
-        <numIter>10</numIter>
-        <numSwitch>100</numSwitch>
+        <numIter>20</numIter>
+        <numSwitch>2</numSwitch>
         #Number of iterations to ignore initially
         <iterIgnore>2</iterIgnore>
 
diff --git a/TestON/tests/TopoPerfNext/TopoPerfNext.py b/TestON/tests/TopoPerfNext/TopoPerfNext.py
index 63ba8df..147ebef 100644
--- a/TestON/tests/TopoPerfNext/TopoPerfNext.py
+++ b/TestON/tests/TopoPerfNext/TopoPerfNext.py
@@ -3,6 +3,10 @@
 #Topology Performance test for ONOS-next
 #
 #andrew@onlab.us
+#
+#If your machine does not come with numpy
+#run the following command:
+#sudo apt-get install python-numpy python-scipy 
 
 import time
 import sys
@@ -112,6 +116,7 @@
         import json
         import requests
         import os
+        import numpy
 
         ONOS1_ip = main.params['CTRL']['ip1']
         ONOS2_ip = main.params['CTRL']['ip2']
@@ -438,7 +443,9 @@
         latency_end_to_end_avg = \
                 (int(sum(latency_end_to_end_list)) / \
                  len(latency_end_to_end_list))
-   
+        latency_end_to_end_std_dev = \
+                str(round(numpy.std(latency_end_to_end_list),1))
+
         latency_ofp_to_graph_max = \
                 int(max(latency_ofp_to_graph_list))
         latency_ofp_to_graph_min = \
@@ -446,6 +453,8 @@
         latency_ofp_to_graph_avg = \
                 (int(sum(latency_ofp_to_graph_list)) / \
                  len(latency_ofp_to_graph_list))
+        latency_ofp_to_graph_std_dev = \
+                str(round(numpy.std(latency_ofp_to_graph_list),1))
 
         latency_ofp_to_device_max = \
                 int(max(latency_ofp_to_device_list))
@@ -454,6 +463,8 @@
         latency_ofp_to_device_avg = \
                 (int(sum(latency_ofp_to_device_list)) / \
                  len(latency_ofp_to_device_list))
+        latency_ofp_to_device_std_dev = \
+                str(round(numpy.std(latency_ofp_to_device_list),1))
 
         latency_t0_to_device_max = \
                 int(max(latency_t0_to_device_list))
@@ -461,7 +472,9 @@
                 int(min(latency_t0_to_device_list))
         latency_t0_to_device_avg = \
                 (int(sum(latency_t0_to_device_list)) / \
-                 len(latency_ofp_to_device_list))
+                 len(latency_t0_to_device_list))
+        latency_ofp_to_device_std_dev = \
+                str(round(numpy.std(latency_t0_to_device_list),1))
 
         latency_tcp_to_ofp_max = \
                 int(max(latency_tcp_to_ofp_list))
@@ -470,19 +483,18 @@
         latency_tcp_to_ofp_avg = \
                 (int(sum(latency_tcp_to_ofp_list)) / \
                  len(latency_tcp_to_ofp_list))
+        latency_tcp_to_ofp_std_dev = \
+                str(round(numpy.std(latency_tcp_to_ofp_list),1))
 
         main.log.report("Switch add - End-to-end latency: "+\
-                "Min: "+str(latency_end_to_end_min)+" ms "+\
-                "Max: "+str(latency_end_to_end_max)+" ms "+\
-                "Avg: "+str(latency_end_to_end_avg)+" ms ")
+                "Avg: "+str(latency_end_to_end_avg)+" ms "+
+                "Std Deviation: "+latency_end_to_end_std_dev+" ms")
         main.log.report("Switch add - OFP-to-Graph latency: "+\
-                "Min: "+str(latency_ofp_to_graph_min)+" ms "+\
-                "Max: "+str(latency_ofp_to_graph_max)+" ms "+\
-                "Avg: "+str(latency_ofp_to_graph_avg)+" ms ")
+                "Avg: "+str(latency_ofp_to_graph_avg)+" ms "+
+                "Std Deviation: "+latency_ofp_to_graph_std_dev+" ms")
         main.log.report("Switch add - TCP-to-OFP latency: "+\
-                "Min: "+str(latency_tcp_to_ofp_min)+" ms "+\
-                "Max: "+str(latency_tcp_to_ofp_max)+" ms "+\
-                "Avg: "+str(latency_tcp_to_ofp_avg)+" ms ")
+                "Avg: "+str(latency_tcp_to_ofp_avg)+" ms "+
+                "Std Deviation: "+latency_tcp_to_ofp_std_dev+" ms")
 
         if debug_mode == 'on':
             main.ONOS1.cp_logs_to_dir("/opt/onos/log/karaf.log",
@@ -506,6 +518,7 @@
         import os
         import requests
         import json
+        import numpy
 
         ONOS1_ip = main.params['CTRL']['ip1']
         ONOS2_ip = main.params['CTRL']['ip2']
@@ -821,44 +834,48 @@
         port_down_graph_to_ofp_avg = \
                 (sum(port_down_graph_to_ofp_list) / 
                  len(port_down_graph_to_ofp_list))
+        port_down_graph_to_ofp_std_dev = \
+                str(round(numpy.std(port_down_graph_to_ofp_list),1))
         
-        main.log.report("Port down graph-to-ofp Min: "+
-                str(port_down_graph_to_ofp_min)+" ms  Max: "+
-                str(port_down_graph_to_ofp_max)+" ms  Avg: "+
-                str(port_down_graph_to_ofp_avg)+" ms")
+        main.log.report("Port down graph-to-ofp "+
+                "Avg: "+str(port_down_graph_to_ofp_avg)+" ms "+
+                "Std Deviation: "+port_down_graph_to_ofp_std_dev+" ms")
         
         port_down_device_to_ofp_min = min(port_down_device_to_ofp_list)
         port_down_device_to_ofp_max = max(port_down_device_to_ofp_list)
         port_down_device_to_ofp_avg = \
                 (sum(port_down_device_to_ofp_list) /\
                  len(port_down_device_to_ofp_list))
+        port_down_device_to_ofp_std_dev = \
+                str(round(numpy.std(port_down_device_to_ofp_list),1))
         
-        main.log.report("Port down device-to-ofp Min: "+
-                str(port_down_device_to_ofp_min)+" ms  Max: "+
-                str(port_down_device_to_ofp_max)+" ms  Avg: "+
-                str(port_down_device_to_ofp_avg)+" ms")
+        main.log.report("Port down device-to-ofp "+
+                "Avg: "+str(port_down_device_to_ofp_avg)+" ms "+
+                "Std Deviation: "+port_down_device_to_ofp_std_dev+" ms")
         
         port_up_graph_to_ofp_min = min(port_up_graph_to_ofp_list)
         port_up_graph_to_ofp_max = max(port_up_graph_to_ofp_list)
         port_up_graph_to_ofp_avg = \
                 (sum(port_up_graph_to_ofp_list) /\
                  len(port_up_graph_to_ofp_list))
+        port_up_graph_to_ofp_std_dev = \
+                str(round(numpy.std(port_up_graph_to_ofp_list),1))
         
-        main.log.report("Port up graph-to-ofp Min: "+
-                str(port_up_graph_to_ofp_min)+" ms  Max: "+
-                str(port_up_graph_to_ofp_max)+" ms  Avg: "+
-                str(port_up_graph_to_ofp_avg)+" ms")
+        main.log.report("Port up graph-to-ofp "+
+                "Avg: "+str(port_up_graph_to_ofp_avg)+" ms "+
+                "Std Deviation: "+port_up_graph_to_ofp_std_dev+" ms")
           
         port_up_device_to_ofp_min = min(port_up_device_to_ofp_list)
         port_up_device_to_ofp_max = max(port_up_device_to_ofp_list)
         port_up_device_to_ofp_avg = \
                 (sum(port_up_device_to_ofp_list) /\
                  len(port_up_device_to_ofp_list))
+        port_up_device_to_ofp_std_dev = \
+                str(round(numpy.std(port_up_device_to_ofp_list),1))
         
-        main.log.report("Port up device-to-ofp Min: "+
-                str(port_up_device_to_ofp_min)+" ms  Max: "+
-                str(port_up_device_to_ofp_max)+" ms  Avg: "+
-                str(port_up_device_to_ofp_avg)+" ms")
+        main.log.report("Port up device-to-ofp "+
+                "Avg: "+str(port_up_device_to_ofp_avg)+" ms "+
+                "Std Deviation: "+port_up_device_to_ofp_std_dev+" ms")
 
         utilities.assert_equals(expect=main.TRUE, actual=assertion,
                 onpass="Port discovery latency calculation successful",
@@ -878,7 +895,8 @@
         import os
         import requests
         import json
-
+        import numpy 
+    
         ONOS1_ip = main.params['CTRL']['ip1']
         ONOS2_ip = main.params['CTRL']['ip2']
         ONOS3_ip = main.params['CTRL']['ip3']
@@ -1044,18 +1062,18 @@
                         graph_timestamp_3 and link_timestamp_1 and\
                         link_timestamp_2 and link_timestamp_3:
                     link_down_lat_graph1 = int(graph_timestamp_1) -\
-                            timestamp_link_down_t0
+                            int(timestamp_link_down_t0)
                     link_down_lat_graph2 = int(graph_timestamp_2) -\
-                            timestamp_link_down_t0
+                            int(timestamp_link_down_t0)
                     link_down_lat_graph3 = int(graph_timestamp_3) -\
-                            timestamp_link_down_t0
+                            int(timestamp_link_down_t0)
                 
                     link_down_lat_link1 = int(link_timestamp_1) -\
-                            timestamp_link_down_t0
+                            int(timestamp_link_down_t0)
                     link_down_lat_link2 = int(link_timestamp_2) -\
-                            timestamp_link_down_t0
+                            int(timestamp_link_down_t0)
                     link_down_lat_link3 = int(link_timestamp_3) -\
-                            timestamp_link_down_t0
+                            int(timestamp_link_down_t0)
                 else:
                     main.log.error("There was an error calculating"+
                         " the delta for link down event")
@@ -1201,18 +1219,18 @@
                         graph_timestamp_3 and link_timestamp_1 and\
                         link_timestamp_2 and link_timestamp_3:
                     link_up_lat_graph1 = int(graph_timestamp_1) -\
-                            timestamp_link_up_t0
+                            int(timestamp_link_up_t0)
                     link_up_lat_graph2 = int(graph_timestamp_2) -\
-                            timestamp_link_up_t0
+                            int(timestamp_link_up_t0)
                     link_up_lat_graph3 = int(graph_timestamp_3) -\
-                            timestamp_link_up_t0
+                            int(timestamp_link_up_t0)
                 
                     link_up_lat_link1 = int(link_timestamp_1) -\
-                            timestamp_link_up_t0
+                            int(timestamp_link_up_t0)
                     link_up_lat_link2 = int(link_timestamp_2) -\
-                            timestamp_link_up_t0
+                            int(timestamp_link_up_t0)
                     link_up_lat_link3 = int(link_timestamp_3) -\
-                            timestamp_link_up_t0
+                            int(timestamp_link_up_t0)
                 else:
                     main.log.error("There was an error calculating"+
                         " the delta for link down event")
@@ -1282,15 +1300,17 @@
         link_up_max = max(link_up_graph_to_system_list)
         link_up_avg = sum(link_up_graph_to_system_list) / \
                         len(link_up_graph_to_system_list)
+        link_down_std_dev = \
+                str(round(numpy.std(link_down_graph_to_system_list),1))
+        link_up_std_dev = \
+                str(round(numpy.std(link_up_graph_to_system_list),1))
 
-        main.log.report("Link down latency - Min: "+
-                str(link_down_min)+" ms  Max: "+
-                str(link_down_max)+" ms  Avg: "+
-                str(link_down_avg)+" ms")
-        main.log.report("Link up latency - Min: "+
-                str(link_up_min)+" ms  Max: "+
-                str(link_up_max)+" ms  Avg: "+
-                str(link_up_avg)+" ms")
+        main.log.report("Link down latency " +
+                "Avg: "+str(link_down_avg)+" ms "+
+                "Std Deviation: "+link_down_std_dev+" ms")
+        main.log.report("Link up latency "+
+                "Avg: "+str(link_up_avg)+" ms "+
+                "Std Deviation: "+link_up_std_dev+" ms")
 
         utilities.assert_equals(expect=main.TRUE, actual=assertion,
                 onpass="Link discovery latency calculation successful",