Iperf Tests: Iperf is a tool to measure the
bandwidth and the quality of a network link.
Added test scenarios in context of tool usage in cord tester.
Change-Id: I984cc358ed07f9fac2c0721f5ad674fd9da83ac7
diff --git a/src/test/iperf/__init__.py b/src/test/iperf/__init__.py
new file mode 100644
index 0000000..a10dac0
--- /dev/null
+++ b/src/test/iperf/__init__.py
@@ -0,0 +1,27 @@
+#
+# Copyright 2016-present Ciena Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+import os,sys
+##add the python path to lookup the utils
+working_dir = os.path.dirname(os.path.realpath(sys.argv[-1]))
+utils_dir = os.path.join(working_dir, '../utils')
+cli_dir = os.path.join(working_dir, '../cli')
+fsm_dir = os.path.join(working_dir, '../fsm')
+subscriber_dir = os.path.join(working_dir, '../subscriber')
+__path__.append(utils_dir)
+__path__.append(fsm_dir)
+__path__.append(cli_dir)
+__path__.append(subscriber_dir)
+
diff --git a/src/test/iperf/iperfTest.py b/src/test/iperf/iperfTest.py
new file mode 100644
index 0000000..a90f048
--- /dev/null
+++ b/src/test/iperf/iperfTest.py
@@ -0,0 +1,203 @@
+#
+# Copyright 2016-present Ciena Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+import unittest
+import time
+import os
+import subprocess
+from nose.tools import *
+from onosclidriver import OnosCliDriver
+from CordContainer import *
+from nose.twistedtools import reactor, deferred
+from twisted.internet import defer
+from OnosCtrl import OnosCtrl
+from scapy.all import *
+log.setLevel('INFO')
+
+class iperf_exchange(unittest.TestCase):
+
+ switch_script = os.path.join(os.path.dirname(os.path.realpath(__file__)), '../setup', 'of-bridge.sh')
+ switch = 'br-int'
+ ctlr_ip = os.getenv('ONOS_CONTROLLER_IP', 'localhost')
+ ctlr_port = '6653'
+ IPERF_TIMEOUT = 360
+ app = 'org.onosproject.dhcp'
+
+ @classmethod
+ def setUpClass(cls):
+ #cls.stop_switch()
+ #cls.install_app()
+ cmd = "apt-get install iperf"
+ os.system(cmd)
+ time.sleep(40)
+
+ @classmethod
+ def tearDownClass(cls):pass
+ #cls.onos_ctrl.deactivate()
+
+ @classmethod
+ def install_app(cls):
+ OnosCtrl.uninstall_app(cls.igmp_app)
+ time.sleep(2)
+ OnosCtrl.install_app(cls.igmp_app_file)
+ time.sleep(3)
+
+ def cliEnter(self):
+ retries = 0
+ while retries < 3:
+ self.cli = OnosCliDriver(connect = True)
+ if self.cli.handle:
+ break
+ else:
+ retries += 1
+ time.sleep(2)
+
+ def cliExit(self):
+ self.cli.disconnect()
+
+ @classmethod
+ def iperf_tool_cmd_execution(cls,cmd = " "):
+ log.info('Test Controller by executing a iperf tool command on host = {}'.format(cmd))
+
+ try:
+# status = os.system(cmd)
+ status = subprocess.Popen(cmd, shell=True)
+ time.sleep(90)
+ pid = status.pid
+ log.info('Subprocess status = {}'.format(status))
+ log.info('Subprocess task id on host = {}'.format(pid))
+ status.terminate()
+ except Exception:
+ status.terminate()
+ main.log.exception( self.name + ": Uncaught exception!" )
+ main.cleanup()
+ main.exit()
+
+ @deferred(IPERF_TIMEOUT)
+ def test_tcp_using_iperf(self):
+ df = defer.Deferred()
+ def iperf_network_test(df):
+ cmd = 'iperf -c 172.17.0.2 -p 6653 -t 20 -P 1 -i 1'
+ log.info('Test Controller by executing a iperf tool command on host = {}'.format(cmd))
+ os.system(cmd)
+ self.onos_ctrl = OnosCtrl(self.app)
+ status, _ = self.onos_ctrl.activate()
+ assert_equal(status, True)
+ df.callback(0)
+ reactor.callLater(0, iperf_network_test, df)
+ return df
+
+ @deferred(IPERF_TIMEOUT)
+ def test_udp_using_iperf(self):
+ df = defer.Deferred()
+ def iperf_network_test(df):
+ cmd = 'iperf -c 172.17.0.2 -p 6653 -u -t 20 -P 1 -i 1'
+ log.info('Test Controller by executing a iperf tool command on host = {}'.format(cmd))
+ status = os.system(cmd)
+ self.onos_ctrl = OnosCtrl(self.app)
+ df.callback(0)
+ reactor.callLater(0, iperf_network_test, df)
+ return df
+
+ @deferred(IPERF_TIMEOUT)
+ def test_tcp_window_of_40k_using_iperf(self):
+ df = defer.Deferred()
+ def iperf_network_test(df):
+ cmd = 'iperf -c 172.17.0.2 -p 6653 -t 20 -P 1 -i 1 -w 40k'
+ log.info('Test Controller by executing a iperf tool command on host = {}'.format(cmd))
+ status = os.system(cmd)
+ df.callback(0)
+ reactor.callLater(0, iperf_network_test, df)
+ return df
+
+
+ @deferred(IPERF_TIMEOUT)
+ def test_tcp_window_of_120k_using_iperf(self):
+ df = defer.Deferred()
+ def iperf_network_test(df):
+ cmd = 'iperf -c 172.17.0.2 -p 6653 -t 20 -P 1 -i 1 -w 120k'
+ log.info('Test Controller by executing a iperf tool command on host = {}'.format(cmd))
+ status = os.system(cmd)
+ df.callback(0)
+ reactor.callLater(0, iperf_network_test, df)
+ return df
+
+
+ @deferred(IPERF_TIMEOUT)
+ def test_tcp_window_of_520k_using_iperf(self):
+ df = defer.Deferred()
+ def iperf_network_test(df):
+ cmd = 'iperf -c 172.17.0.2 -p 6653 -t 20 -P 1 -i 1 -w 520k'
+ log.info('Test Controller by executing a iperf tool command on host = {}'.format(cmd))
+ status = os.system(cmd)
+ df.callback(0)
+ reactor.callLater(0, iperf_network_test, df)
+ return df
+
+ @deferred(IPERF_TIMEOUT)
+ def test_multiple_tcp_sessions_using_iperf(self):
+ df = defer.Deferred()
+ def iperf_network_test(df):
+ cmd = 'iperf -c 172.17.0.2 -p 6653 -t 5 -P 2 -i 1'
+ self.iperf_tool_cmd_execution(cmd = cmd)
+ df.callback(0)
+ reactor.callLater(0, iperf_network_test, df)
+ return df
+
+ @deferred(IPERF_TIMEOUT)
+ def test_multiple_udp_sessions_using_iperf(self):
+ df = defer.Deferred()
+ def iperf_network_test(df):
+ cmd = 'iperf -c 172.17.0.2 -p 6653 -u -t 5 -P 2 -i 1'
+ log.info('Test Controller by executing a iperf tool command on host = {}'.format(cmd))
+ status = os.system(cmd)
+ df.callback(0)
+ reactor.callLater(0, iperf_network_test, df)
+ return df
+
+
+ @deferred(IPERF_TIMEOUT)
+ def test_tcp_mss_with_90Bytes_using_iperf(self):
+ df = defer.Deferred()
+ def iperf_network_test(df):
+ cmd = 'iperf -c 172.17.0.2 -p 6653 -t 20 -P 1 -i 1 -m -M 90'
+ log.info('Test Controller by executing a iperf tool command on host = {}'.format(cmd))
+ status = os.system(cmd)
+ df.callback(0)
+ reactor.callLater(0, iperf_network_test, df)
+ return df
+
+ @deferred(IPERF_TIMEOUT)
+ def test_tcp_mss_with_1490Bytes_using_iperf(self):
+ df = defer.Deferred()
+ def iperf_network_test(df):
+ cmd = 'iperf -c 172.17.0.2 -p 6653 -t 20 -P 1 -i 1 -m -M 1490'
+ log.info('Test Controller by executing a iperf tool command on host = {}'.format(cmd))
+ status = os.system(cmd)
+ df.callback(0)
+ reactor.callLater(0, iperf_network_test, df)
+ return df
+
+ @deferred(IPERF_TIMEOUT)
+ def test_tcp_mss_with_9000Bytes_for_max_throughput_using_iperf(self):
+ df = defer.Deferred()
+ def iperf_network_test(df):
+ cmd = 'iperf -c 172.17.0.2 -p 6653 -t 20 -P 1 -i 1 -m -M 9000'
+ log.info('Test Controller by executing a iperf tool command on host = {}'.format(cmd))
+ status = os.system(cmd)
+ df.callback(0)
+ reactor.callLater(0, iperf_network_test, df)
+ return df
+
diff --git a/src/test/setup/cord-test.py b/src/test/setup/cord-test.py
index 4205844..bfa2a8d 100755
--- a/src/test/setup/cord-test.py
+++ b/src/test/setup/cord-test.py
@@ -51,7 +51,7 @@
IMAGE = 'cord-test/nose'
ALL_TESTS = ('tls', 'dhcp', 'dhcprelay','igmp', 'subscriber',
'cordSubscriber', 'vrouter', 'flows', 'proxyarp', 'acl', 'xos', 'fabric',
- 'cbench', 'cluster', 'netCondition', 'cordvtn')
+ 'cbench', 'cluster', 'netCondition', 'cordvtn', 'iperf')
def __init__(self, tests, instance = 0, num_instances = 1, ctlr_ip = None,
name = '', image = IMAGE, prefix = '', tag = 'candidate',