65
67
self.assertEqual(self.parse(['']), {})
70
class TestParseTunnelRangesMixin(object):
74
_err_prefix = "Invalid network Tunnel range: '%d:%d' - "
75
_err_suffix = "%s is not a valid %s identifier"
76
_err_range = "End of tunnel range is less than start of tunnel range"
78
def _build_invalid_tunnel_range_msg(self, t_range_tuple, n):
79
bad_id = t_range_tuple[n - 1]
80
return (self._err_prefix % t_range_tuple) + (self._err_suffix
81
% (bad_id, self.TYPE))
83
def _build_range_reversed_msg(self, t_range_tuple):
84
return (self._err_prefix % t_range_tuple) + self._err_range
86
def _verify_range(self, tunnel_range):
87
return plugin_utils.verify_tunnel_range(tunnel_range, self.TYPE)
89
def _check_range_valid_ranges(self, tunnel_range):
90
self.assertIsNone(self._verify_range(tunnel_range))
92
def _check_range_invalid_ranges(self, bad_range, which):
93
expected_msg = self._build_invalid_tunnel_range_msg(bad_range, which)
94
err = self.assertRaises(n_exc.NetworkTunnelRangeError,
95
self._verify_range, bad_range)
96
self.assertEqual(expected_msg, str(err))
98
def _check_range_reversed(self, bad_range):
99
err = self.assertRaises(n_exc.NetworkTunnelRangeError,
100
self._verify_range, bad_range)
101
expected_msg = self._build_range_reversed_msg(bad_range)
102
self.assertEqual(expected_msg, str(err))
104
def test_range_tunnel_id_valid(self):
105
self._check_range_valid_ranges((self.TUN_MIN, self.TUN_MAX))
107
def test_range_tunnel_id_invalid(self):
108
self._check_range_invalid_ranges((-1, self.TUN_MAX), 1)
109
self._check_range_invalid_ranges((self.TUN_MIN,
110
self.TUN_MAX + 1), 2)
111
self._check_range_invalid_ranges((self.TUN_MIN - 1,
112
self.TUN_MAX + 1), 1)
114
def test_range_tunnel_id_reversed(self):
115
self._check_range_reversed((self.TUN_MAX, self.TUN_MIN))
118
class TestGreTunnelRangeVerifyValid(TestParseTunnelRangesMixin,
120
TUN_MIN = constants.MIN_GRE_ID
121
TUN_MAX = constants.MAX_GRE_ID
122
TYPE = p_const.TYPE_GRE
125
class TestVxlanTunnelRangeVerifyValid(TestParseTunnelRangesMixin,
127
TUN_MIN = constants.MIN_VXLAN_VNI
128
TUN_MAX = constants.MAX_VXLAN_VNI
129
TYPE = p_const.TYPE_VXLAN
68
132
class UtilTestParseVlanRanges(base.BaseTestCase):
69
133
_err_prefix = "Invalid network VLAN range: '"
70
134
_err_too_few = "' - 'need more than 2 values to unpack'"
464
528
calls.assert_has_calls([mock.call(0), mock.call(1), mock.call(3)],
466
530
self.assertTrue(logger.called)
533
class TestDvrServices(base.BaseTestCase):
535
def _test_is_dvr_serviced(self, device_owner, expected):
536
self.assertEqual(expected, utils.is_dvr_serviced(device_owner))
538
def test_is_dvr_serviced_with_lb_port(self):
539
self._test_is_dvr_serviced(constants.DEVICE_OWNER_LOADBALANCER, True)
541
def test_is_dvr_serviced_with_dhcp_port(self):
542
self._test_is_dvr_serviced(constants.DEVICE_OWNER_DHCP, True)
544
def test_is_dvr_serviced_with_vm_port(self):
545
self._test_is_dvr_serviced('compute:', True)