Open vSwitch, which installed with the kernel module, has a cache in the kernel for the flow table and the cached flow entries have a hard timeout of 5 seconds. tester.py attempts to confirm its flow modifications with a barrier request, but Open vSwitch sends a barrier reply back regardless of the the state of the cached entries in the kernel module. So in some cases, Open vSwtich needs the interval between each test case. This patch adds an option for setting interval for the workaround.
Note: With a zero seconds interval, the whole test suite runs in 20-30 minutes, but with a 10 seconds interval between each test, the entire suite takes 3-4 hours. Reported-by: Alan Deikman <[email protected]> Signed-off-by: IWASE Yusuke <[email protected]> --- ryu/flags.py | 5 ++++- ryu/tests/switch/tester.py | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/ryu/flags.py b/ryu/flags.py index 225cbbb..a45ac34 100644 --- a/ryu/flags.py +++ b/ryu/flags.py @@ -80,5 +80,8 @@ CONF.register_cli_opts([ '(default: openflow13)'), cfg.StrOpt('tester-version', default='openflow13', help='tester sw OFP version [openflow13|openflow14] ' - '(default: openflow13)') + '(default: openflow13)'), + cfg.IntOpt('interval', default=0, + help='interval time in seconds of each test ' + '(default: 0)'), ], group='test-switch') diff --git a/ryu/tests/switch/tester.py b/ryu/tests/switch/tester.py index 6c4e233..5087614 100644 --- a/ryu/tests/switch/tester.py +++ b/ryu/tests/switch/tester.py @@ -273,6 +273,7 @@ class OfTester(app_manager.RyuApp): super(OfTester, self).__init__() self._set_logger() + self.interval = CONF['test-switch']['interval'] self.target_dpid = self._convert_dpid(CONF['test-switch']['target']) self.target_send_port_1 = CONF['test-switch']['target_send_port_1'] self.target_send_port_2 = CONF['test-switch']['target_send_port_2'] @@ -434,6 +435,7 @@ class OfTester(app_manager.RyuApp): result = self._test_execute(test, desc) report.setdefault(result, []) report[result].append([testfile.description, test.description]) + hub.sleep(self.interval) return report def _test_execute(self, test, description): -- 1.9.1 ------------------------------------------------------------------------------ Monitor Your Dynamic Infrastructure at Any Scale With Datadog! Get real-time metrics from all of your servers, apps and tools in one place. SourceForge users - Click here to start your Free Trial of Datadog now! http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140 _______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
