X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=test-scripts%2Fstress_test.py;h=d7287ab9aa0a4a5fcd28f2ee1254dd2b705a7ae5;hb=4ec260568dd682496d76d93add1d28b24305c40b;hp=97cd122456343a98b448f7a191a7343d0ccd59e6;hpb=bb26d5a7932fc6f1550ab1ea819ea7f27a16bf21;p=openflowplugin.git diff --git a/test-scripts/stress_test.py b/test-scripts/stress_test.py index 97cd122456..d7287ab9aa 100644 --- a/test-scripts/stress_test.py +++ b/test-scripts/stress_test.py @@ -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'