34
34
self.assertIs(attributes.is_attr_set(data), True)
36
def test_validate_boolean(self):
37
msg = attributes._validate_boolean(True)
38
self.assertIsNone(msg)
40
msg = attributes._validate_boolean(False)
41
self.assertIsNone(msg)
43
msg = attributes._validate_boolean('True')
44
self.assertEquals(msg, "'True' is not boolean")
46
msg = attributes._validate_boolean('False')
47
self.assertEquals(msg, "'False' is not boolean")
49
msg = attributes._validate_boolean(0)
50
self.assertEquals(msg, "'0' is not boolean")
52
msg = attributes._validate_boolean(1)
53
self.assertEquals(msg, "'1' is not boolean")
55
msg = attributes._validate_boolean(None)
56
self.assertEquals(msg, "'None' is not boolean")
58
36
def test_validate_values(self):
59
37
msg = attributes._validate_values(4, [4, 6])
60
38
self.assertIsNone(msg)
63
41
self.assertIsNone(msg)
65
43
msg = attributes._validate_values(7, [4, 6])
66
self.assertEquals(msg, "'7' is not in [4, 6]")
44
self.assertEqual(msg, "'7' is not in [4, 6]")
68
46
msg = attributes._validate_values(7, (4, 6))
69
self.assertEquals(msg, "'7' is not in (4, 6)")
47
self.assertEqual(msg, "'7' is not in (4, 6)")
71
49
def test_validate_string(self):
72
50
msg = attributes._validate_string(None, None)
73
self.assertEquals(msg, "'None' is not a valid string")
51
self.assertEqual(msg, "'None' is not a valid string")
75
53
# 0 == len(data) == max_len
76
54
msg = attributes._validate_string("", 0)
115
93
self.assertIsNone(msg)
117
95
msg = attributes._validate_range(0, [1, 9])
118
self.assertEquals(msg, "'0' is not in range 1 through 9")
96
self.assertEqual(msg, "'0' is not in range 1 through 9")
120
98
msg = attributes._validate_range(10, (1, 9))
121
self.assertEquals(msg, "'10' is not in range 1 through 9")
99
self.assertEqual(msg, "'10' is not in range 1 through 9")
123
101
def test_validate_mac_address(self):
124
102
mac_addr = "ff:16:3e:4f:00:00"
207
185
def test_validate_hostroutes(self):
208
186
hostroute_pools = [[{'destination': '100.0.0.0/24'}],
209
187
[{'nexthop': '10.0.2.20'}],
188
[{'nexthop': '10.0.2.20',
190
'destination': '100.0.0.0/8'}],
210
191
[{'nexthop': '1110.0.2.20',
211
192
'destination': '100.0.0.0/8'}],
212
193
[{'nexthop': '10.0.2.20',
340
322
msg = attributes._validate_subnet(cidr,
342
324
error = "'%s' is not a valid IP subnet" % cidr
343
self.assertEquals(msg, error)
325
self.assertEqual(msg, error)
345
327
# Invalid - IPv6 without final octets, missing mask
347
329
msg = attributes._validate_subnet(cidr,
349
331
error = "'%s' is not a valid IP subnet" % cidr
350
self.assertEquals(msg, error)
332
self.assertEqual(msg, error)
352
334
# Invalid - IPv6 with final octets, missing mask
354
336
msg = attributes._validate_subnet(cidr,
356
338
error = "'%s' is not a valid IP subnet" % cidr
357
self.assertEquals(msg, error)
339
self.assertEqual(msg, error)
359
341
# Invalid - Address format error
361
343
msg = attributes._validate_subnet(cidr,
363
345
error = "'%s' is not a valid IP subnet" % cidr
364
self.assertEquals(msg, error)
346
self.assertEqual(msg, error)
366
348
def test_validate_regex(self):
367
349
pattern = '[hc]at'
370
352
msg = attributes._validate_regex(data, pattern)
371
self.assertEquals(msg, "'%s' is not valid input" % data)
353
self.assertEqual(msg, "'%s' is not a valid input" % data)
374
356
msg = attributes._validate_regex(data, pattern)
375
self.assertEquals(msg, "'%s' is not valid input" % data)
357
self.assertEqual(msg, "'%s' is not a valid input" % data)
378
360
msg = attributes._validate_regex(data, pattern)
385
367
def test_validate_uuid(self):
386
368
msg = attributes._validate_uuid('garbage')
387
self.assertEquals(msg, "'garbage' is not a valid UUID")
369
self.assertEqual(msg, "'garbage' is not a valid UUID")
389
371
msg = attributes._validate_uuid('00000000-ffff-ffff-ffff-000000000000')
390
372
self.assertIsNone(msg)
374
def test_validate_uuid_list(self):
378
'e5069610-744b-42a7-8bd8-ceac1a229cd4',
379
'12345678123456781234567812345678',
380
{'uuid': 'e5069610-744b-42a7-8bd8-ceac1a229cd4'}]
382
msg = attributes._validate_uuid_list(uuid)
383
error = "'%s' is not a list" % uuid
384
self.assertEquals(msg, error)
386
# check invalid uuid in a list
387
invalid_uuid_lists = [[None],
389
[123, 'e5069610-744b-42a7-8bd8-ceac1a229cd4'],
390
['123', '12345678123456781234567812345678'],
391
['t5069610-744b-42a7-8bd8-ceac1a229cd4'],
392
['e5069610-744b-42a7-8bd8-ceac1a229cd44'],
393
['e50696100-744b-42a7-8bd8-ceac1a229cd4'],
394
['e5069610-744bb-42a7-8bd8-ceac1a229cd4']]
395
for uuid_list in invalid_uuid_lists:
396
msg = attributes._validate_uuid_list(uuid_list)
397
error = "'%s' is not a valid UUID" % uuid_list[0]
398
self.assertEquals(msg, error)
400
# check duplicate items in a list
401
duplicate_uuids = ['e5069610-744b-42a7-8bd8-ceac1a229cd4',
402
'f3eeab00-8367-4524-b662-55e64d4cacb5',
403
'e5069610-744b-42a7-8bd8-ceac1a229cd4']
404
msg = attributes._validate_uuid_list(duplicate_uuids)
405
error = "Duplicate items in the list: %s" % ', '.join(duplicate_uuids)
406
self.assertEquals(msg, error)
408
# check valid uuid lists
409
valid_uuid_lists = [['e5069610-744b-42a7-8bd8-ceac1a229cd4'],
410
['f3eeab00-8367-4524-b662-55e64d4cacb5'],
411
['e5069610-744b-42a7-8bd8-ceac1a229cd4',
412
'f3eeab00-8367-4524-b662-55e64d4cacb5']]
413
for uuid_list in valid_uuid_lists:
414
msg = attributes._validate_uuid_list(uuid_list)
415
self.assertEquals(msg, None)
417
def test_validate_dict(self):
418
for value in (None, True, '1', []):
419
self.assertEquals(attributes._validate_dict(value),
420
"'%s' is not a dictionary" % value)
422
msg = attributes._validate_dict({})
423
self.assertIsNone(msg)
425
msg = attributes._validate_dict({'key': 'value'})
426
self.assertIsNone(msg)
428
def test_validate_non_negative(self):
429
for value in (-1, '-2'):
430
self.assertEquals(attributes._validate_non_negative(value),
431
"'%s' should be non-negative" % value)
433
for value in (0, 1, '2', True, False):
434
msg = attributes._validate_non_negative(value)
435
self.assertIsNone(msg)
393
438
class TestConvertToBoolean(unittest2.TestCase):
418
463
class TestConvertToInt(unittest2.TestCase):
420
465
def test_convert_to_int_int(self):
421
self.assertEquals(attributes.convert_to_int(-1), -1)
422
self.assertEquals(attributes.convert_to_int(0), 0)
423
self.assertEquals(attributes.convert_to_int(1), 1)
466
self.assertEqual(attributes.convert_to_int(-1), -1)
467
self.assertEqual(attributes.convert_to_int(0), 0)
468
self.assertEqual(attributes.convert_to_int(1), 1)
425
470
def test_convert_to_int_str(self):
426
self.assertEquals(attributes.convert_to_int('4'), 4)
427
self.assertEquals(attributes.convert_to_int('6'), 6)
471
self.assertEqual(attributes.convert_to_int('4'), 4)
472
self.assertEqual(attributes.convert_to_int('6'), 6)
428
473
self.assertRaises(q_exc.InvalidInput,
429
474
attributes.convert_to_int,
434
479
attributes.convert_to_int,
482
def test_convert_none_to_empty_list_none(self):
484
[], attributes.convert_none_to_empty_list(None))
486
def test_convert_none_to_empty_list_value(self):
487
values = ['1', 3, [], [1], {}, {'a': 3}]
490
value, attributes.convert_none_to_empty_list(value))
438
493
class TestConvertKvp(unittest2.TestCase):
465
520
def test_convert_kvp_str_to_list_succeeds_for_two_equals(self):
466
521
result = attributes.convert_kvp_str_to_list('a=a=a')
467
522
self.assertEqual(['a', 'a=a'], result)
525
class TestConvertToList(unittest2.TestCase):
527
def test_convert_to_empty_list(self):
528
for item in (None, [], (), {}):
529
self.assertEquals(attributes.convert_to_list(item), [])
531
def test_convert_to_list_string(self):
532
for item in ('', 'foo'):
533
self.assertEquals(attributes.convert_to_list(item), [item])
535
def test_convert_to_list_iterable(self):
536
for item in ([None], [1, 2, 3], (1, 2, 3), set([1, 2, 3]), ['foo']):
537
self.assertEquals(attributes.convert_to_list(item), list(item))
539
def test_convert_to_list_non_iterable(self):
540
for item in (True, False, 1, 1.2, object()):
541
self.assertEquals(attributes.convert_to_list(item), [item])