| #!/usr/bin/python |
| # Copyright (c) 2012 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| # pylint: disable-msg=C0111 |
| |
| """Test iperf parser.""" |
| |
| import unittest, iperf |
| |
| |
| class test_iperf(unittest.TestCase): |
| def test_parse_warning(self): |
| text = """ |
| WARNING: option -b implies udp testing |
| WARNING: option -b is not valid for server mode |
| ------------------------------------------------------------ |
| Client connecting to 172.31.206.152, UDP port 5001 |
| Sending 1470 byte datagrams |
| UDP buffer size: 0.11 MByte (default) |
| ------------------------------------------------------------ |
| [ 3] local 172.31.206.145 port 39777 connected with 172.31.206.152 port 5001 |
| [ ID] Interval Transfer Bandwidth |
| [ 3] 0.0-15.0 sec 1.88 MBytes 1.05 Mbits/sec |
| [ 3] Sent 1339 datagrams |
| [ 3] Server Report: |
| [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams |
| [ 3] 0.0-15.0 sec 1.88 MBytes 1.05 Mbits/sec 0.011 ms 1/ 1340 (0.075%) |
| """.lstrip().rstrip() |
| self.assertRaises(iperf.Error, iperf.ParseIperfOutput, text) |
| |
| def test_connect_failed(self): |
| text = """connect failed: Connection refused |
| ------------------------------------------------------------ |
| Client connecting to 172.31.206.152, TCP port 5001 |
| TCP window size: 0.02 MByte (default) |
| ------------------------------------------------------------ |
| write1 failed: Broken pipe |
| [ 3] local 0.0.0.0 port 57288 connected with 172.31.206.152 port 5001 |
| write2 failed: Broken pipe |
| [ ID] Interval Transfer Bandwidth |
| [ 3] 0.0- 0.0 sec 0.00 MBytes 0.00 Mbits/sec |
| """.lstrip().rstrip() |
| self.assertRaises(iperf.Error, iperf.ParseIperfOutput, text) |
| |
| def test_bad_udp(self): |
| text = """------------------------------------------------------------ |
| Client connecting to 172.31.206.152, UDP port 5001 |
| Sending 1470 byte datagrams |
| UDP buffer size: 0.11 MByte (default) |
| ------------------------------------------------------------ |
| [ 3] local 172.31.206.145 port 51532 connected with 172.31.206.152 port 5001 |
| [ ID] Interval Transfer Bandwidth |
| [ 3] 0.0- 5.2 sec 0.06 MBytes 0.10 Mbits/sec |
| [ 3] Sent 44 datagrams |
| [ 3] Server Report: |
| |
| [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams |
| [ 3] 0.0- 5.2 sec 0.06 bogus 0.10 Mbits/sec 0.014 ms 1/ 45 (2.2%) |
| """.lstrip().rstrip() |
| self.assertRaises(iperf.Error, iperf.ParseIperfOutput, text) |
| |
| def test_udp(self): |
| text = """------------------------------------------------------------ |
| Client connecting to 172.31.206.152, UDP port 5001 |
| Sending 1470 byte datagrams |
| UDP buffer size: 0.11 MByte (default) |
| ------------------------------------------------------------ |
| [ 3] local 172.31.206.145 port 51532 connected with 172.31.206.152 port 5001 |
| [ ID] Interval Transfer Bandwidth |
| [ 3] 0.0- 5.2 sec 0.06 MBytes 0.10 Mbits/sec |
| [ 3] Sent 44 datagrams |
| [ 3] Server Report: |
| [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams |
| [ 3] 0.0- 5.2 sec 0.06 MBytes 0.10 Mbits/sec 0.014 ms 1/ 45 (2.2%) |
| """.lstrip().rstrip() |
| expected = {'jitter': 0.014, |
| 'throughput': 100000.0, |
| 'lost': 2.2} |
| expected = dict([('uplink_' + a, b) |
| for (a,b) in expected.items()]) |
| self.assertEqual(expected, |
| iperf.ParseIperfOutput(text)) |
| |
| |
| def test_udp_tradeoff(self): |
| text = """------------------------------------------------------------ |
| Client connecting to 172.31.206.152, UDP port 5001 |
| Sending 1470 byte datagrams |
| UDP buffer size: 0.11 MByte (default) |
| ------------------------------------------------------------ |
| [ 3] local 172.31.206.145 port 51532 connected with 172.31.206.152 port 5001 |
| [ ID] Interval Transfer Bandwidth |
| [ 3] 0.0- 5.2 sec 0.06 MBytes 0.10 Mbits/sec |
| [ 3] Sent 44 datagrams |
| [ 3] Server Report: |
| [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams |
| [ 3] 0.0- 5.2 sec 0.06 MBytes 0.10 Mbits/sec 0.014 ms 1/ 45 (2.2%) |
| ------------------------------------------------------------ |
| Server listening on UDP port 5001 |
| Receiving 1470 byte datagrams |
| UDP buffer size: 110 KByte (default) |
| ------------------------------------------------------------ |
| [ 3] local 172.31.206.145 port 5001 connected with 172.31.206.152 port 57416 |
| [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams |
| [ 3] 0.0- 3.0 sec 386 KBytes 1.05 Mbits/sec 0.085 ms 1/ 270 (0.37%) |
| """.lstrip().rstrip() |
| expected = {'jitter': 0.014, |
| 'throughput': 100000.0, |
| 'lost': 2.2} |
| expected = dict([('uplink_' + a, b) |
| for (a,b) in expected.items()]) |
| expected.update({'downlink_throughput': 1.05e6, |
| 'downlink_jitter': 0.085, |
| 'downlink_lost': 0.37}) |
| |
| self.assertEqual(expected, |
| iperf.ParseIperfOutput(text)) |
| |
| |
| |
| def test_tcp(self): |
| text = """------------------------------------------------------------ |
| Client connecting to 172.31.206.152, TCP port 5001 |
| TCP window size: 0.02 MByte (default) |
| ------------------------------------------------------------ |
| [ 3] local 172.31.206.145 port 38376 connected with 172.31.206.152 port 5001 |
| [ ID] Interval Transfer Bandwidth |
| [ 3] 0.0- 3.0 sec 34.1 MBytes 95.4 Mbits/sec""".lstrip().rstrip() |
| self.assertEqual({'uplink_throughput': 95.4e6}, |
| iperf.ParseIperfOutput(text)) |
| def test_tcp_tradeoff(self): |
| text = """------------------------------------------------------------ |
| Client connecting to 172.31.206.152, TCP port 5001 |
| TCP window size: 0.02 MByte (default) |
| ------------------------------------------------------------ |
| [ 3] local 172.31.206.145 port 38376 connected with 172.31.206.152 port 5001 |
| [ ID] Interval Transfer Bandwidth |
| [ 3] 0.0- 3.0 sec 34.1 MBytes 95.4 Mbits/sec |
| ------------------------------------------------------------ |
| Server listening on TCP port 5001 |
| TCP window size: 85.3 KByte (default) |
| ------------------------------------------------------------ |
| [ 4] local 172.31.206.145 port 5001 connected with 172.31.206.152 port 56542 |
| [ ID] Interval Transfer Bandwidth |
| [ 4] 0.0- 3.0 sec 34.1 MBytes 94.7 Mbits/sec""".lstrip().rstrip() |
| self.assertEqual({'uplink_throughput': 95.4e6, |
| 'downlink_throughput': 94.7e6}, |
| iperf.ParseIperfOutput(text)) |
| |
| def test_Multipliers(self): |
| self.assertEqual(1, iperf.ApplyMultiplier(1, 'bits/sec')) |
| self.assertEqual(1, iperf.ApplyMultiplier('1', 'bits/sec')) |
| self.assertEqual(1000, iperf.ApplyMultiplier('1', 'Kbits/sec')) |
| self.assertEqual(1000000, iperf.ApplyMultiplier('1', 'Mbits/sec')) |
| self.assertEqual(1000000000, iperf.ApplyMultiplier('1', 'Gbits/sec')) |
| self.assertEqual(1000000000, iperf.ApplyMultiplier('1000', 'Mbits/sec')) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |