| 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 | 
|---|