From c46681ae2b96e460d924200dd4b11af5303af88a Mon Sep 17 00:00:00 2001 From: wangqun Date: Wed, 20 Jan 2016 10:21:29 +0000 Subject: [PATCH] Fix the network_driver update invalid parameter can be update Now, we update the network_driver value. The invalid value can be update. The network_driver validate function dosen't work. Change-Id: If3672fa7a11ec8c414ce9c94c676c90ede216115 Closed-Bug: #1536098 --- magnum/api/validation.py | 7 +++++++ magnum/tests/unit/api/test_validation.py | 14 +++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/magnum/api/validation.py b/magnum/api/validation.py index 1ca8c1a9aa..53dd6c5f4f 100644 --- a/magnum/api/validation.py +++ b/magnum/api/validation.py @@ -99,7 +99,14 @@ def enforce_network_driver_types_update(): @decorator.decorator def wrapper(func, *args, **kwargs): baymodel_ident = args[1] + patch = args[2] baymodel = api_utils.get_rpc_resource('BayModel', baymodel_ident) + try: + baymodel_dict = api_utils.apply_jsonpatch(baymodel.as_dict(), + patch) + except api_utils.JSONPATCH_EXCEPTIONS as e: + raise exception.PatchError(patch=patch, reason=e) + baymodel = objects.BayModel(pecan.request.context, **baymodel_dict) _enforce_network_driver_types(baymodel) return func(*args, **kwargs) diff --git a/magnum/tests/unit/api/test_validation.py b/magnum/tests/unit/api/test_validation.py index bdc608befd..91e4adcb2f 100644 --- a/magnum/tests/unit/api/test_validation.py +++ b/magnum/tests/unit/api/test_validation.py @@ -264,15 +264,19 @@ class TestValidation(base.BaseTestCase): assert_raised=False): @v.enforce_network_driver_types_update() - def test(self, baymodel_ident): + def test(self, baymodel_ident, patch): pass for key, val in network_driver_config_dict.items(): cfg.CONF.set_override(key, val, 'baymodel') baymodel_ident = 'test_uuid_or_name' - baymodel = mock.MagicMock() + patch = [{'path': '/network_driver', 'value': network_driver_type, + 'op': 'replace'}] + context = mock_pecan_request.context + baymodel = obj_utils.get_test_baymodel(context, + uuid=baymodel_ident, + coe='kubernetes') baymodel.network_driver = network_driver_type - baymodel.coe = 'kubernetes' mock_get_rpc_resource.return_value = baymodel # Reload the validator module so that baymodel configs are @@ -283,9 +287,9 @@ class TestValidation(base.BaseTestCase): if assert_raised: self.assertRaises(exception.InvalidParameterValue, - test, self, baymodel_ident) + test, self, baymodel_ident, patch) else: - test(self, baymodel_ident) + test(self, baymodel_ident, patch) mock_get_rpc_resource.assert_called_once_with( 'BayModel', baymodel_ident)