| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 | 2 |
| 3 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 3 # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
| 5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
| 6 | 6 |
| 7 """Tests for traffic control library.""" | 7 """Tests for traffic control library.""" |
| 8 import unittest | 8 import unittest |
| 9 | 9 |
| 10 import traffic_control | 10 import traffic_control |
| (...skipping 25 matching lines...) Expand all Loading... |
| 36 config = { | 36 config = { |
| 37 'interface': 'fakeeth', | 37 'interface': 'fakeeth', |
| 38 'port': 12345, | 38 'port': 12345, |
| 39 'server_port': 8888, | 39 'server_port': 8888, |
| 40 'bandwidth': 256, | 40 'bandwidth': 256, |
| 41 'latency': 100, | 41 'latency': 100, |
| 42 'loss': 2 | 42 'loss': 2 |
| 43 } | 43 } |
| 44 traffic_control.CreateConstrainedPort(config) | 44 traffic_control.CreateConstrainedPort(config) |
| 45 expected = [ | 45 expected = [ |
| 46 'tc qdisc add dev fakeeth root handle 1: htb', | 46 'sudo tc qdisc add dev fakeeth root handle 1: htb', |
| 47 'tc class add dev fakeeth parent 1: classid 1:3039 htb rate 256kbps ' | 47 'sudo tc class add dev fakeeth parent 1: classid 1:3039 htb rate ' |
| 48 'ceil 256kbps', | 48 '256kbit ceil 256kbit', |
| 49 'tc qdisc add dev fakeeth parent 1:3039 handle 3039:0 netem loss 2% ' | 49 'sudo tc qdisc add dev fakeeth parent 1:3039 handle 3039:0 netem loss ' |
| 50 'delay 100ms', | 50 '2% delay 100ms', |
| 51 'tc filter add dev fakeeth protocol ip parent 1: prio 1 u32 match ip ' | 51 'sudo tc filter add dev fakeeth protocol ip parent 1: prio 1 u32 match ' |
| 52 'sport 12345 0xffff flowid 1:3039', | 52 'ip sport 12345 0xffff flowid 1:3039', |
| 53 'iptables -t nat -A PREROUTING -i fakeeth -p tcp --dport 12345 -j ' | 53 'sudo iptables -t nat -A PREROUTING -i fakeeth -p tcp --dport 12345 -j ' |
| 54 'REDIRECT --to-port 8888', | 54 'REDIRECT --to-port 8888', |
| 55 'iptables -t nat -A OUTPUT -p tcp --dport 12345 -j REDIRECT --to-port ' | 55 'sudo iptables -t nat -A OUTPUT -p tcp --dport 12345 -j REDIRECT ' |
| 56 '8888' | 56 '--to-port 8888' |
| 57 ] | 57 ] |
| 58 self.assertEqual(expected, self.commands) | 58 self.assertEqual(expected, self.commands) |
| 59 | 59 |
| 60 def testCreateConstrainedPortDefaults(self): | 60 def testCreateConstrainedPortDefaults(self): |
| 61 config = { | 61 config = { |
| 62 'interface': 'fakeeth', | 62 'interface': 'fakeeth', |
| 63 'port': 12345, | 63 'port': 12345, |
| 64 'server_port': 8888, | 64 'server_port': 8888, |
| 65 'latency': None | 65 'latency': None |
| 66 } | 66 } |
| 67 traffic_control.CreateConstrainedPort(config) | 67 traffic_control.CreateConstrainedPort(config) |
| 68 expected = [ | 68 expected = [ |
| 69 'tc qdisc add dev fakeeth root handle 1: htb', | 69 'sudo tc qdisc add dev fakeeth root handle 1: htb', |
| 70 'tc class add dev fakeeth parent 1: classid 1:3039 htb rate %dkbps ' | 70 'sudo tc class add dev fakeeth parent 1: classid 1:3039 htb rate ' |
| 71 'ceil %dkbps' % (traffic_control._DEFAULT_MAX_BANDWIDTH_KBPS, | 71 '%dkbit ceil %dkbit' % (traffic_control._DEFAULT_MAX_BANDWIDTH_KBIT, |
| 72 traffic_control._DEFAULT_MAX_BANDWIDTH_KBPS), | 72 traffic_control._DEFAULT_MAX_BANDWIDTH_KBIT), |
| 73 'tc qdisc add dev fakeeth parent 1:3039 handle 3039:0 netem', | 73 'sudo tc qdisc add dev fakeeth parent 1:3039 handle 3039:0 netem', |
| 74 'tc filter add dev fakeeth protocol ip parent 1: prio 1 u32 match ip ' | 74 'sudo tc filter add dev fakeeth protocol ip parent 1: prio 1 u32 ' |
| 75 'sport 12345 0xffff flowid 1:3039', | 75 'match ip sport 12345 0xffff flowid 1:3039', |
| 76 'iptables -t nat -A PREROUTING -i fakeeth -p tcp --dport 12345 -j ' | 76 'sudo iptables -t nat -A PREROUTING -i fakeeth -p tcp --dport 12345 -j ' |
| 77 'REDIRECT --to-port 8888', | 77 'REDIRECT --to-port 8888', |
| 78 'iptables -t nat -A OUTPUT -p tcp --dport 12345 -j REDIRECT --to-port ' | 78 'sudo iptables -t nat -A OUTPUT -p tcp --dport 12345 -j REDIRECT ' |
| 79 '8888' | 79 '--to-port 8888' |
| 80 ] | 80 ] |
| 81 self.assertEqual(expected, self.commands) | 81 self.assertEqual(expected, self.commands) |
| 82 | 82 |
| 83 def testDeleteConstrainedPort(self): | 83 def testDeleteConstrainedPort(self): |
| 84 config = { | 84 config = { |
| 85 'interface': 'fakeeth', | 85 'interface': 'fakeeth', |
| 86 'port': 12345, | 86 'port': 12345, |
| 87 'server_port': 8888, | 87 'server_port': 8888, |
| 88 'bandwidth': 256, | 88 'bandwidth': 256, |
| 89 } | 89 } |
| 90 _old_GetFilterHandleId = traffic_control._GetFilterHandleId | 90 _old_GetFilterHandleId = traffic_control._GetFilterHandleId |
| 91 traffic_control._GetFilterHandleId = lambda interface, port: '800::800' | 91 traffic_control._GetFilterHandleId = lambda interface, port: '800::800' |
| 92 | 92 |
| 93 try: | 93 try: |
| 94 traffic_control.DeleteConstrainedPort(config) | 94 traffic_control.DeleteConstrainedPort(config) |
| 95 expected = [ | 95 expected = [ |
| 96 'tc filter del dev fakeeth protocol ip parent 1:0 handle 800::800 ' | 96 'sudo tc filter del dev fakeeth protocol ip parent 1:0 handle ' |
| 97 'prio 1 u32', | 97 '800::800 prio 1 u32', |
| 98 'tc class del dev fakeeth parent 1: classid 1:3039 htb rate 256kbps ' | 98 'sudo tc class del dev fakeeth parent 1: classid 1:3039 htb rate ' |
| 99 'ceil 256kbps', | 99 '256kbit ceil 256kbit', |
| 100 'iptables -t nat -D PREROUTING -i fakeeth -p tcp --dport 12345 -j ' | 100 'sudo iptables -t nat -D PREROUTING -i fakeeth -p tcp --dport 12345 ' |
| 101 'REDIRECT --to-port 8888', | 101 '-j REDIRECT --to-port 8888', |
| 102 'iptables -t nat -D OUTPUT -p tcp --dport 12345 -j REDIRECT ' | 102 'sudo iptables -t nat -D OUTPUT -p tcp --dport 12345 -j REDIRECT ' |
| 103 '--to-port 8888'] | 103 '--to-port 8888'] |
| 104 self.assertEqual(expected, self.commands) | 104 self.assertEqual(expected, self.commands) |
| 105 finally: | 105 finally: |
| 106 traffic_control._GetFilterHandleId = _old_GetFilterHandleId | 106 traffic_control._GetFilterHandleId = _old_GetFilterHandleId |
| 107 | 107 |
| 108 def testTearDown(self): | 108 def testTearDown(self): |
| 109 config = {'interface': 'fakeeth'} | 109 config = {'interface': 'fakeeth'} |
| 110 | 110 |
| 111 traffic_control.TearDown(config) | 111 traffic_control.TearDown(config) |
| 112 expected = [ | 112 expected = [ |
| 113 'tc qdisc del dev fakeeth root', | 113 'sudo tc qdisc del dev fakeeth root', |
| 114 'iptables -t nat -F' | 114 'sudo iptables -t nat -F' |
| 115 ] | 115 ] |
| 116 self.assertEqual(expected, self.commands) | 116 self.assertEqual(expected, self.commands) |
| 117 | 117 |
| 118 def testGetFilterHandleID(self): | 118 def testGetFilterHandleID(self): |
| 119 # Check seach for handle ID command. | 119 # Check seach for handle ID command. |
| 120 self.assertRaises(traffic_control.TrafficControlError, | 120 self.assertRaises(traffic_control.TrafficControlError, |
| 121 traffic_control._GetFilterHandleId, 'fakeeth', 1) | 121 traffic_control._GetFilterHandleId, 'fakeeth', 1) |
| 122 self.assertEquals(self.commands, ['tc filter list dev fakeeth parent 1:']) | 122 self.assertEquals(self.commands, ['sudo tc filter list dev fakeeth parent ' |
| 123 '1:']) |
| 123 | 124 |
| 124 # Check with handle ID available. | 125 # Check with handle ID available. |
| 125 traffic_control._Exec = (lambda command, msg: | 126 traffic_control._Exec = (lambda command, msg: |
| 126 'filter parent 1: protocol ip'' pref 1 u32 fh 800::800 order 2048 key ht ' | 127 'filter parent 1: protocol ip pref 1 u32 fh 800::800 order 2048 key ht ' |
| 127 '800 bkt 0 flowid 1:1') | 128 '800 bkt 0 flowid 1:1\nmatch 08ae0000/ffff0000 at 20') |
| 128 output = traffic_control._GetFilterHandleId('fakeeth', 1) | 129 output = traffic_control._GetFilterHandleId('fakeeth', 1) |
| 129 self.assertEqual(output, '800::800') | 130 self.assertEqual(output, '800::800') |
| 130 | 131 |
| 131 # Check with handle ID not available. | 132 # Check with handle ID not available. |
| 133 traffic_control._Exec = (lambda command, msg: |
| 134 'filter parent 1: protocol ip pref 1 u32 fh 800::800 order 2048 key ht ' |
| 135 '800 bkt 0 flowid 1:11\nmatch 08ae0000/ffff0000 at 20') |
| 136 self.assertRaises(traffic_control.TrafficControlError, |
| 137 traffic_control._GetFilterHandleId, 'fakeeth', 1) |
| 138 |
| 132 traffic_control._Exec = lambda command, msg: 'NO ID IN HERE' | 139 traffic_control._Exec = lambda command, msg: 'NO ID IN HERE' |
| 133 self.assertRaises(traffic_control.TrafficControlError, | 140 self.assertRaises(traffic_control.TrafficControlError, |
| 134 traffic_control._GetFilterHandleId, 'fakeeth', 1) | 141 traffic_control._GetFilterHandleId, 'fakeeth', 1) |
| 135 | 142 |
| 136 | 143 |
| 137 if __name__ == '__main__': | 144 if __name__ == '__main__': |
| 138 unittest.main() | 145 unittest.main() |
| OLD | NEW |