60
62
def test_parse_mappings_succeeds_for_no_mappings(self):
61
63
self.assertEqual(self.parse(['']), {})
66
class UtilTestParseVlanRanges(base.BaseTestCase):
67
_err_prefix = "Invalid network VLAN range: '"
68
_err_too_few = "' - 'need more than 2 values to unpack'"
69
_err_too_many = "' - 'too many values to unpack'"
70
_err_not_int = "' - 'invalid literal for int() with base 10: '%s''"
71
_err_bad_vlan = "' - '%s is not a valid VLAN tag'"
72
_err_range = "' - 'End of VLAN range is less than start of VLAN range'"
74
def _range_too_few_err(self, nv_range):
75
return self._err_prefix + nv_range + self._err_too_few
77
def _range_too_many_err(self, nv_range):
78
return self._err_prefix + nv_range + self._err_too_many
80
def _vlan_not_int_err(self, nv_range, vlan):
81
return self._err_prefix + nv_range + (self._err_not_int % vlan)
83
def _nrange_invalid_vlan(self, nv_range, n):
84
vlan = nv_range.split(':')[n]
85
v_range = ':'.join(nv_range.split(':')[1:])
86
return self._err_prefix + v_range + (self._err_bad_vlan % vlan)
88
def _vrange_invalid_vlan(self, v_range_tuple, n):
89
vlan = v_range_tuple[n - 1]
90
v_range_str = '%d:%d' % v_range_tuple
91
return self._err_prefix + v_range_str + (self._err_bad_vlan % vlan)
93
def _vrange_invalid(self, v_range_tuple):
94
v_range_str = '%d:%d' % v_range_tuple
95
return self._err_prefix + v_range_str + self._err_range
98
class TestVlanRangeVerifyValid(UtilTestParseVlanRanges):
99
def verify_range(self, vlan_range):
100
return plugin_utils.verify_vlan_range(vlan_range)
102
def test_range_valid_ranges(self):
103
self.assertEqual(self.verify_range((1, 2)), None)
104
self.assertEqual(self.verify_range((1, 1999)), None)
105
self.assertEqual(self.verify_range((100, 100)), None)
106
self.assertEqual(self.verify_range((100, 200)), None)
107
self.assertEqual(self.verify_range((4001, 4094)), None)
108
self.assertEqual(self.verify_range((1, 4094)), None)
110
def check_one_vlan_invalid(self, bad_range, which):
111
expected_msg = self._vrange_invalid_vlan(bad_range, which)
112
err = self.assertRaises(q_exc.NetworkVlanRangeError,
113
self.verify_range, bad_range)
114
self.assertEqual(str(err), expected_msg)
116
def test_range_first_vlan_invalid_negative(self):
117
self.check_one_vlan_invalid((-1, 199), 1)
119
def test_range_first_vlan_invalid_zero(self):
120
self.check_one_vlan_invalid((0, 199), 1)
122
def test_range_first_vlan_invalid_limit_plus_one(self):
123
self.check_one_vlan_invalid((4095, 199), 1)
125
def test_range_first_vlan_invalid_too_big(self):
126
self.check_one_vlan_invalid((9999, 199), 1)
128
def test_range_second_vlan_invalid_negative(self):
129
self.check_one_vlan_invalid((299, -1), 2)
131
def test_range_second_vlan_invalid_zero(self):
132
self.check_one_vlan_invalid((299, 0), 2)
134
def test_range_second_vlan_invalid_limit_plus_one(self):
135
self.check_one_vlan_invalid((299, 4095), 2)
137
def test_range_second_vlan_invalid_too_big(self):
138
self.check_one_vlan_invalid((299, 9999), 2)
140
def test_range_both_vlans_invalid_01(self):
141
self.check_one_vlan_invalid((-1, 0), 1)
143
def test_range_both_vlans_invalid_02(self):
144
self.check_one_vlan_invalid((0, 4095), 1)
146
def test_range_both_vlans_invalid_03(self):
147
self.check_one_vlan_invalid((4095, 9999), 1)
149
def test_range_both_vlans_invalid_04(self):
150
self.check_one_vlan_invalid((9999, -1), 1)
152
def test_range_reversed(self):
154
expected_msg = self._vrange_invalid(bad_range)
155
err = self.assertRaises(q_exc.NetworkVlanRangeError,
156
self.verify_range, bad_range)
157
self.assertEqual(str(err), expected_msg)
160
class TestParseOneVlanRange(UtilTestParseVlanRanges):
161
def parse_one(self, cfg_entry):
162
return plugin_utils.parse_network_vlan_range(cfg_entry)
164
def test_parse_one_net_no_vlan_range(self):
166
expected_networks = ("net1", None)
167
self.assertEqual(self.parse_one(config_str), expected_networks)
169
def test_parse_one_net_and_vlan_range(self):
170
config_str = "net1:100:199"
171
expected_networks = ("net1", (100, 199))
172
self.assertEqual(self.parse_one(config_str), expected_networks)
174
def test_parse_one_net_incomplete_range(self):
175
config_str = "net1:100"
176
expected_msg = self._range_too_few_err(config_str)
177
err = self.assertRaises(q_exc.NetworkVlanRangeError,
178
self.parse_one, config_str)
179
self.assertEqual(str(err), expected_msg)
181
def test_parse_one_net_range_too_many(self):
182
config_str = "net1:100:150:200"
183
expected_msg = self._range_too_many_err(config_str)
184
err = self.assertRaises(q_exc.NetworkVlanRangeError,
185
self.parse_one, config_str)
186
self.assertEqual(str(err), expected_msg)
188
def test_parse_one_net_vlan1_not_int(self):
189
config_str = "net1:foo:199"
190
expected_msg = self._vlan_not_int_err(config_str, 'foo')
191
err = self.assertRaises(q_exc.NetworkVlanRangeError,
192
self.parse_one, config_str)
193
self.assertEqual(str(err), expected_msg)
195
def test_parse_one_net_vlan2_not_int(self):
196
config_str = "net1:100:bar"
197
expected_msg = self._vlan_not_int_err(config_str, 'bar')
198
err = self.assertRaises(q_exc.NetworkVlanRangeError,
199
self.parse_one, config_str)
200
self.assertEqual(str(err), expected_msg)
202
def test_parse_one_net_and_max_range(self):
203
config_str = "net1:1:4094"
204
expected_networks = ("net1", (1, 4094))
205
self.assertEqual(self.parse_one(config_str), expected_networks)
207
def test_parse_one_net_range_bad_vlan1(self):
208
config_str = "net1:9000:150"
209
expected_msg = self._nrange_invalid_vlan(config_str, 1)
210
err = self.assertRaises(q_exc.NetworkVlanRangeError,
211
self.parse_one, config_str)
212
self.assertEqual(str(err), expected_msg)
214
def test_parse_one_net_range_bad_vlan2(self):
215
config_str = "net1:4000:4999"
216
expected_msg = self._nrange_invalid_vlan(config_str, 2)
217
err = self.assertRaises(q_exc.NetworkVlanRangeError,
218
self.parse_one, config_str)
219
self.assertEqual(str(err), expected_msg)
222
class TestParseVlanRangeList(UtilTestParseVlanRanges):
223
def parse_list(self, cfg_entries):
224
return plugin_utils.parse_network_vlan_ranges(cfg_entries)
226
def test_parse_list_one_net_no_vlan_range(self):
227
config_list = ["net1"]
228
expected_networks = {"net1": []}
229
self.assertEqual(self.parse_list(config_list), expected_networks)
231
def test_parse_list_one_net_vlan_range(self):
232
config_list = ["net1:100:199"]
233
expected_networks = {"net1": [(100, 199)]}
234
self.assertEqual(self.parse_list(config_list), expected_networks)
236
def test_parse_two_nets_no_vlan_range(self):
237
config_list = ["net1",
239
expected_networks = {"net1": [],
241
self.assertEqual(self.parse_list(config_list), expected_networks)
243
def test_parse_two_nets_range_and_no_range(self):
244
config_list = ["net1:100:199",
246
expected_networks = {"net1": [(100, 199)],
248
self.assertEqual(self.parse_list(config_list), expected_networks)
250
def test_parse_two_nets_no_range_and_range(self):
251
config_list = ["net1",
253
expected_networks = {"net1": [],
254
"net2": [(200, 299)]}
255
self.assertEqual(self.parse_list(config_list), expected_networks)
257
def test_parse_two_nets_bad_vlan_range1(self):
258
config_list = ["net1:100",
260
expected_msg = self._range_too_few_err(config_list[0])
261
err = self.assertRaises(q_exc.NetworkVlanRangeError,
262
self.parse_list, config_list)
263
self.assertEqual(str(err), expected_msg)
265
def test_parse_two_nets_vlan_not_int2(self):
266
config_list = ["net1:100:199",
268
expected_msg = self._vlan_not_int_err(config_list[1], '0x200')
269
err = self.assertRaises(q_exc.NetworkVlanRangeError,
270
self.parse_list, config_list)
271
self.assertEqual(str(err), expected_msg)
273
def test_parse_two_nets_and_append_1_2(self):
274
config_list = ["net1:100:199",
277
expected_networks = {"net1": [(100, 199),
279
"net2": [(200, 299)]}
280
self.assertEqual(self.parse_list(config_list), expected_networks)
282
def test_parse_two_nets_and_append_1_3(self):
283
config_list = ["net1:100:199",
286
expected_networks = {"net1": [(100, 199),
288
"net2": [(200, 299)]}
289
self.assertEqual(self.parse_list(config_list), expected_networks)