|
18 | 18 |
|
19 | 19 | from f5.bigip.resource import Collection |
20 | 20 | from f5.bigip.resource import DeviceProvidesIncompatibleKey |
| 21 | +from f5.bigip.resource import ExclusiveAttributesPresent |
21 | 22 | from f5.bigip.resource import GenerationMismatch |
22 | 23 | from f5.bigip.resource import InvalidForceType |
23 | 24 | from f5.bigip.resource import InvalidResource |
24 | 25 | from f5.bigip.resource import KindTypeMismatch |
| 26 | +from f5.bigip.resource import MissingRequiredCommandParameter |
25 | 27 | from f5.bigip.resource import MissingRequiredCreationParameter |
26 | 28 | from f5.bigip.resource import MissingRequiredReadParameter |
27 | 29 | from f5.bigip.resource import OrganizingCollection |
| 30 | +from f5.bigip.resource import PathElement |
28 | 31 | from f5.bigip.resource import RequestParamKwargCollision |
29 | 32 | from f5.bigip.resource import Resource |
30 | 33 | from f5.bigip.resource import ResourceBase |
@@ -96,7 +99,7 @@ def test_missing_required_creation_parameter(self): |
96 | 99 | with pytest.raises(MissingRequiredCreationParameter) as MRCPEIO: |
97 | 100 | r.create(partition="Common", name='CreateTest') |
98 | 101 | assert MRCPEIO.value.message ==\ |
99 | | - "Missing required params: set(['NONEMPTY'])" |
| 102 | + "Missing required params: ['NONEMPTY']" |
100 | 103 |
|
101 | 104 | def test_KindTypeMismatch(self): |
102 | 105 | r = Resource(mock.MagicMock()) |
@@ -290,7 +293,7 @@ def test_missing_required_params(self): |
290 | 293 | with pytest.raises(MissingRequiredReadParameter) as MRREIO: |
291 | 294 | r.load(partition='Common', name='test_load') |
292 | 295 | assert MRREIO.value.message ==\ |
293 | | - "Missing required params: set(['IMPOSSIBLE'])" |
| 296 | + "Missing required params: ['IMPOSSIBLE']" |
294 | 297 |
|
295 | 298 | def test_requests_params_collision(self): |
296 | 299 | r = Resource(mock.MagicMock()) |
@@ -443,3 +446,64 @@ def test_collection_s(): |
443 | 446 | } |
444 | 447 | tc_s = Under_s(MC) |
445 | 448 | assert tc_s._meta_data['uri'] == 'BASEURI/under/' |
| 449 | + |
| 450 | + |
| 451 | +class TestPathElement(object): |
| 452 | + |
| 453 | + def test_missing_req_param_true(self): |
| 454 | + p = PathElement(mock.MagicMock()) |
| 455 | + rqset = set(['FOOPAR1', 'FOOPAR2']) |
| 456 | + fakearg = {'FOOPAR1': 'FOOVAL'} |
| 457 | + mrq = p._missing_required_parameters(rqset, **fakearg) |
| 458 | + assert mrq |
| 459 | + assert mrq == ['FOOPAR2'] |
| 460 | + |
| 461 | + def test_missing_req_param_false(self): |
| 462 | + p = PathElement(mock.MagicMock()) |
| 463 | + rqset = set(['FOOPAR1']) |
| 464 | + fakearg = {'FOOPAR1': 'FOOVAL'} |
| 465 | + mrq = p._missing_required_parameters(rqset, **fakearg) |
| 466 | + assert not mrq |
| 467 | + |
| 468 | + def test_check_load_parameters_fail(self): |
| 469 | + p = PathElement(mock.MagicMock()) |
| 470 | + p._meta_data['required_load_parameters'] = set(['FAKELOAD']) |
| 471 | + with pytest.raises(MissingRequiredReadParameter) as RLPEIO: |
| 472 | + p._check_load_parameters(FOOLOAD='FOOVAL') |
| 473 | + assert "['FAKELOAD']" in RLPEIO.value.message |
| 474 | + |
| 475 | + def test_check_create_parameters_fail(self): |
| 476 | + p = PathElement(mock.MagicMock()) |
| 477 | + p._meta_data['required_creation_parameters'] = set(['FAKECREATE']) |
| 478 | + with pytest.raises(MissingRequiredCreationParameter) as RCPEIO: |
| 479 | + p._check_create_parameters(FOOCREATE='FOOVAL') |
| 480 | + assert "['FAKECREATE']" in RCPEIO.value.message |
| 481 | + |
| 482 | + def test_check_command_parameters_fail(self): |
| 483 | + p = PathElement(mock.MagicMock()) |
| 484 | + p._meta_data['required_command_parameters'] = set(['FAKECOMMAND']) |
| 485 | + with pytest.raises(MissingRequiredCommandParameter) as RCPEIO: |
| 486 | + p._check_command_parameters(BARCOMMAND='FOOVAL') |
| 487 | + assert "['FAKECOMMAND']" in RCPEIO.value.message |
| 488 | + |
| 489 | + def test_check_exclusive_parameters_empty_attr(self): |
| 490 | + p = PathElement(mock.MagicMock()) |
| 491 | + p._meta_data['exclusive_attributes'] = [] |
| 492 | + fakearg = {'FOOEX': 'FOOVAL'} |
| 493 | + # Check that any other exception is not thrown |
| 494 | + p._check_exclusive_parameters(**fakearg) |
| 495 | + |
| 496 | + def test_check_exclusive_parameters_pass(self): |
| 497 | + p = PathElement(mock.MagicMock()) |
| 498 | + p._meta_data['exclusive_attributes'] = [('FOOEX', 'BAREX')] |
| 499 | + fakearg = {'FOOEX': 'FOOVAL'} |
| 500 | + # Check ExclusiveAttributesPresent is not thrown |
| 501 | + p._check_exclusive_parameters(**fakearg) |
| 502 | + |
| 503 | + def test_check_exclusive_parameters_fail(self): |
| 504 | + p = PathElement(mock.MagicMock()) |
| 505 | + p._meta_data['exclusive_attributes'] = [('FOOEX', 'BAREX')] |
| 506 | + fakearg = {'FOOEX': 'FOOVAL', 'BAREX': 'BARVAL'} |
| 507 | + with pytest.raises(ExclusiveAttributesPresent) as EAEIO: |
| 508 | + p._check_exclusive_parameters(**fakearg) |
| 509 | + assert 'FOOEX, BAREX' in EAEIO.value.message |
0 commit comments