Merge "Bug 6161 - PrintStackTrace replaced with logger"
[openflowplugin.git] / test-scripts / stress_test.py
index 97cd122456343a98b448f7a191a7343d0ccd59e6..d7287ab9aa0a4a5fcd28f2ee1254dd2b705a7ae5 100644 (file)
@@ -1,33 +1,31 @@
-import unittest
-import os
-import re
-import sys
+import argparse
 import logging
+import sys
 import time
-import argparse
-import requests
-
-import xml.dom.minidom as md
-from xml.etree import ElementTree as ET
+import unittest
 
+from openvswitch.flow_tools import FlowAdderThread, FlowRemoverThread, loglevels, \
+    WAIT_TIME
 from openvswitch.mininet_tools import MininetTools
-from openvswitch.flow_tools import  FlowAdderThread, FlowRemoverThread, loglevels, TO_GET, WAIT_TIME, OPERATIONAL_DELAY, FLOWS_PER_SECOND
-from openvswitch.testclass_templates import TestClassAdd, TestClassRemove
-from openvswitch.testclass_components import CheckSwitchDump, CheckOperFlowsComponent, CheckConfigFlowsComponent
+from openvswitch.testclass_components import CheckOperFlowsComponent, \
+    CheckConfigFlowsComponent, CheckSwitchDump
+
 
 REMOVE_FLOWS_PER_THREAD = 250
 
-class MultiTest(unittest.TestCase, TestClassAdd, TestClassRemove, CheckSwitchDump, CheckOperFlowsComponent, CheckConfigFlowsComponent):
+class MultiTest(unittest.TestCase):
 
     log = logging.getLogger('MultiTest')
     total_errors = 0
+    total_flows = 0
+    stored_before_test_flows = 0
 
     def setUp(self):
         MultiTest.log.info('test setup...')
         self.threads_count = 50
         self.thread_pool = list()
 
-       self.active_map = dict()
+        self.active_map = dict()
 
         self.__start_MN()
         self.__setup_threads()
@@ -55,15 +53,15 @@ class MultiTest(unittest.TestCase, TestClassAdd, TestClassRemove, CheckSwitchDum
         MultiTest.log.info('mininet stared')
         MultiTest.log.info('waiting {0} seconds...'.format(WAIT_TIME))
         time.sleep(WAIT_TIME)
-
+        self.stored_before_test_flows = len(MininetTools.get_flows_string(self.net))
 
     def __setup_threads(self):
-        if args.threads is not None:
-            self.threads_count = int(args.threads)
+        if in_args.threads is not None:
+            self.threads_count = int(in_args.threads)
 
         for i in range(0, self.threads_count):
             t = FlowAdderThread(self, i, self.host, self.port, self.net,\
-                               flows_ids_from=i*MultiTest.flows + 1, flows_ids_to=(i+1)*MultiTest.flows + 1)
+                                flows_ids_from=i*MultiTest.flows + 1, flows_ids_to=i*MultiTest.flows + MultiTest.flows)
 
             self.thread_pool.append(t)
 
@@ -75,30 +73,25 @@ class MultiTest(unittest.TestCase, TestClassAdd, TestClassRemove, CheckSwitchDum
             t.join()
 
     def test(self):
-        cookie_regexp = re.compile("cookie=0x[0-9,a-f,A-F]+")
         switch_flows = 0
-        oper_flows = 0
-        flows_on_controller_operational = None
-        flows_on_controller = None
-
-       total_flows = len(self.active_map.keys())
+        total_flows = len(self.active_map.keys())
 
         assert total_flows > 0, ('Stored flows should be greater than 0, actual is {0}'.format(total_flows))
 
         MultiTest.log.info('\n\n---------- preparation finished, running test ----------')
 
         # check config
-        flows_on_controller = self.check_config_flows(self.host, self.port, self.active_map)
+        flows_on_controller = CheckConfigFlowsComponent().check_config_flows(self.host, self.port, self.active_map)
 
         #check operational
-       flows_on_controller_operational = self.check_oper_flows_loop(self.host, self.port, self.active_map)
+        flows_on_controller_operational = CheckOperFlowsComponent().check_oper_flows_loop(self.host, self.port, self.active_map)
 
         # check switch
         switch_flows_list = MininetTools.get_flows_string(self.net)
         MultiTest.log.info('flow dump has {0} entries (including informational)'.format(len(switch_flows_list)))
         for item in switch_flows_list:
-            if self.get_id_by_entry(item, self.active_map) is not None:
-                MultiTest.log.debug('flow_id:{0} = {1}'.format(self.get_id_by_entry(item, self.active_map), item))
+            if CheckSwitchDump().get_id_by_entry(item, self.active_map) is not None:
+                MultiTest.log.debug('flow_id:{0} = {1}'.format(CheckSwitchDump().get_id_by_entry(item, self.active_map), item))
                 switch_flows += 1
 
         # print info
@@ -110,8 +103,6 @@ class MultiTest(unittest.TestCase, TestClassAdd, TestClassRemove, CheckSwitchDum
         assert total_flows == switch_flows, 'Added amount of flows to switch should be equal to successfully added flows to controller {0} <> {1}'.format(switch_flows,total_flows)
 
     def __delete_flows(self):
-        flows_deleted = 0
-        flows_on_controller = 0
         MultiTest.log.info('deleting flows added during test')
 
         # using threads to delete to speed up cleanup
@@ -121,9 +112,6 @@ class MultiTest(unittest.TestCase, TestClassAdd, TestClassRemove, CheckSwitchDum
         slice_from = REMOVE_FLOWS_PER_THREAD * thread_id
         slice_to = REMOVE_FLOWS_PER_THREAD * (thread_id + 1)
 
-       total_flows = len(self.active_map.keys())
-       total_deleted = 0
-
         while(slice_from < len(items_to_delete)):
             self.thread_pool.append(FlowRemoverThread(self, thread_id, self.host, self.port, self.net, items_to_delete[slice_from:slice_to]))
             thread_id += 1
@@ -135,15 +123,7 @@ class MultiTest(unittest.TestCase, TestClassAdd, TestClassRemove, CheckSwitchDum
 
         for t in self.thread_pool:
             t.join()
-       
-       for t in self.thread_pool:
-           total_deleted += t.removed
 
-        MultiTest.log.info('deleted {0} flows'.format(total_deleted))
-        if total_flows <> total_deleted:
-            raise StandardError('Not all flows have been deleted, flows added'\
-                ' during test: {0} <> deleted flows: {1},\nflows ids left on controller: {2}'.format(\
-                total_flows, total_deleted, sorted(self.active_map.values())))
 
 if __name__ == '__main__':
 
@@ -157,25 +137,27 @@ if __name__ == '__main__':
                         'odl controller is running  (default = 127.0.0.1) ')
     parser.add_argument('--odlport', type=int, default=8080, help='port on '
                         'which odl\'s RESTCONF is listening  (default = 8080) ')
-    parser.add_argument('--mnport', type=int, default=6653, help='port on '
-                        'which odl\'s controller is listening  (default = 6653)')
+    parser.add_argument('--mnport', type=int, default=6633, help='port on '
+                        'which odl\'s controller is listening  (default = 6633)')
     parser.add_argument('--threads', default=50, help='how many threads '
                         'should be used  (default = 50)')
     parser.add_argument('--flows', default=20, help='how many flows will add'
                         ' one thread  (default = 20)')
     parser.add_argument('--log', default='info', help='log level, permitted values are'
                         ' debug/info/warning/error  (default = info)')
-    args = parser.parse_args()
+#     parser.add_argument('--xmls', default=None, help='generete tests only '
+#                         'from some xmls (i.e. 1,3,34)  (default = None)')
+    in_args = parser.parse_args()
 
     #logging.basicConfig(level=logging.DEBUG)
-    logging.basicConfig(level=loglevels.get(args.log, logging.INFO))
+    logging.basicConfig(level=loglevels.get(in_args.log, logging.INFO))
 
     # set host and port of ODL controller for test cases
-    MultiTest.port = args.odlport
-    MultiTest.host = args.odlhost
-    MultiTest.mn_port = args.mnport
-    MultiTest.threads = int(args.threads)
-    MultiTest.flows = int(args.flows)
+    MultiTest.port = in_args.odlport
+    MultiTest.host = in_args.odlhost
+    MultiTest.mn_port = in_args.mnport
+    MultiTest.threads = int(in_args.threads)
+    MultiTest.flows = int(in_args.flows)
 
     del sys.argv[1:]
 
@@ -185,7 +167,5 @@ if __name__ == '__main__':
 
     try:
         unittest.TextTestRunner(verbosity=2).run(suite)
-        #unittest.main()
     finally:
         test.net.stop()
-        print 'end'