Merge "Fix baymodel with invalid parameter can updated."
This commit is contained in:
commit
0f4677a297
|
@ -353,6 +353,8 @@ class BayModelsController(rest.RestController):
|
||||||
except api_utils.JSONPATCH_EXCEPTIONS as e:
|
except api_utils.JSONPATCH_EXCEPTIONS as e:
|
||||||
raise exception.PatchError(patch=patch, reason=e)
|
raise exception.PatchError(patch=patch, reason=e)
|
||||||
|
|
||||||
|
new_baymodel_dict = new_baymodel.as_dict()
|
||||||
|
attr_validator.validate_os_resources(context, new_baymodel_dict)
|
||||||
# check permissions when updating baymodel public flag
|
# check permissions when updating baymodel public flag
|
||||||
if baymodel.public != new_baymodel.public:
|
if baymodel.public != new_baymodel.public:
|
||||||
if not policy.enforce(context, "baymodel:publish", None,
|
if not policy.enforce(context, "baymodel:publish", None,
|
||||||
|
|
|
@ -177,17 +177,8 @@ class BayTest(base.BaseMagnumTest):
|
||||||
self.assertEqual(resp.status, 201)
|
self.assertEqual(resp.status, 201)
|
||||||
self.assertIsNotNone(baymodel.uuid)
|
self.assertIsNotNone(baymodel.uuid)
|
||||||
|
|
||||||
patch_model = datagen.baymodel_flavor_patch_data()
|
|
||||||
resp, new_model = self.baymodel_client.patch_baymodel(
|
|
||||||
baymodel.uuid, patch_model)
|
|
||||||
self.assertEqual(200, resp.status)
|
|
||||||
|
|
||||||
resp, model = self.baymodel_client.get_baymodel(new_model.uuid)
|
|
||||||
self.assertEqual(200, resp.status)
|
|
||||||
self.assertEqual(baymodel.uuid, new_model.uuid)
|
|
||||||
self.assertEqual(model.flavor_id, new_model.flavor_id)
|
|
||||||
|
|
||||||
gen_model = datagen.valid_bay_data(baymodel_id=baymodel.uuid)
|
gen_model = datagen.valid_bay_data(baymodel_id=baymodel.uuid)
|
||||||
|
gen_model.flavor_id = 'aaa'
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exceptions.BadRequest,
|
exceptions.BadRequest,
|
||||||
self.bay_client.post_bay, gen_model)
|
self.bay_client.post_bay, gen_model)
|
||||||
|
|
|
@ -194,12 +194,19 @@ class TestPatch(api_base.FunctionalTest):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestPatch, self).setUp()
|
super(TestPatch, self).setUp()
|
||||||
|
p = mock.patch.object(attr_validator, 'validate_os_resources')
|
||||||
|
self.mock_valid_os_res = p.start()
|
||||||
|
self.addCleanup(p.stop)
|
||||||
self.baymodel = obj_utils.create_test_baymodel(
|
self.baymodel = obj_utils.create_test_baymodel(
|
||||||
self.context,
|
self.context,
|
||||||
name='bay_model_example_A',
|
name='bay_model_example_A',
|
||||||
image_id='nerdherd',
|
image_id='nerdherd',
|
||||||
apiserver_port=8080,
|
apiserver_port=8080,
|
||||||
fixed_network='private',
|
fixed_network='private',
|
||||||
|
flavor_id='m1.magnum',
|
||||||
|
master_flavor_id='m1.magnum',
|
||||||
|
external_network_id='public',
|
||||||
|
keypair_id='test',
|
||||||
volume_driver='rexray',
|
volume_driver='rexray',
|
||||||
public=False,
|
public=False,
|
||||||
docker_volume_size=20,
|
docker_volume_size=20,
|
||||||
|
@ -293,6 +300,58 @@ class TestPatch(api_base.FunctionalTest):
|
||||||
self.assertEqual(self.baymodel.labels,
|
self.assertEqual(self.baymodel.labels,
|
||||||
response['labels'])
|
response['labels'])
|
||||||
|
|
||||||
|
def test_replace_baymodel_with_no_exist_flavor_id(self):
|
||||||
|
self.mock_valid_os_res.side_effect = exception.FlavorNotFound("aaa")
|
||||||
|
response = self.patch_json('/baymodels/%s' % self.baymodel.uuid,
|
||||||
|
[{'path': '/flavor_id', 'value': 'aaa',
|
||||||
|
'op': 'replace'}],
|
||||||
|
expect_errors=True)
|
||||||
|
self.assertEqual('application/json', response.content_type)
|
||||||
|
self.assertEqual(400, response.status_code)
|
||||||
|
self.assertTrue(response.json['errors'])
|
||||||
|
|
||||||
|
def test_replace_baymodel_with_no_exist_keypair_id(self):
|
||||||
|
self.mock_valid_os_res.side_effect = exception.KeyPairNotFound("aaa")
|
||||||
|
response = self.patch_json('/baymodels/%s' % self.baymodel.uuid,
|
||||||
|
[{'path': '/keypair_id', 'value': 'aaa',
|
||||||
|
'op': 'replace'}],
|
||||||
|
expect_errors=True)
|
||||||
|
self.assertEqual('application/json', response.content_type)
|
||||||
|
self.assertEqual(404, response.status_code)
|
||||||
|
self.assertTrue(response.json['errors'])
|
||||||
|
|
||||||
|
def test_replace_baymodel_with_no_exist_external_network_id(self):
|
||||||
|
self.mock_valid_os_res.side_effect = exception.NetworkNotFound("aaa")
|
||||||
|
response = self.patch_json('/baymodels/%s' % self.baymodel.uuid,
|
||||||
|
[{'path': '/external_network_id',
|
||||||
|
'value': 'aaa',
|
||||||
|
'op': 'replace'}],
|
||||||
|
expect_errors=True)
|
||||||
|
self.assertEqual('application/json', response.content_type)
|
||||||
|
self.assertEqual(400, response.status_code)
|
||||||
|
self.assertTrue(response.json['errors'])
|
||||||
|
|
||||||
|
def test_replace_baymodel_with_no_exist_image_id(self):
|
||||||
|
self.mock_valid_os_res.side_effect = exception.ImageNotFound("aaa")
|
||||||
|
response = self.patch_json('/baymodels/%s' % self.baymodel.uuid,
|
||||||
|
[{'path': '/image_id', 'value': 'aaa',
|
||||||
|
'op': 'replace'}],
|
||||||
|
expect_errors=True)
|
||||||
|
self.assertEqual('application/json', response.content_type)
|
||||||
|
self.assertEqual(400, response.status_code)
|
||||||
|
self.assertTrue(response.json['errors'])
|
||||||
|
|
||||||
|
def test_create_baymodel_with_no_os_distro_image(self):
|
||||||
|
image_exce = exception.OSDistroFieldNotFound('img')
|
||||||
|
self.mock_valid_os_res.side_effect = image_exce
|
||||||
|
response = self.patch_json('/baymodels/%s' % self.baymodel.uuid,
|
||||||
|
[{'path': '/image_id', 'value': 'img',
|
||||||
|
'op': 'replace'}],
|
||||||
|
expect_errors=True)
|
||||||
|
self.assertEqual('application/json', response.content_type)
|
||||||
|
self.assertEqual(400, response.status_code)
|
||||||
|
self.assertTrue(response.json['errors'])
|
||||||
|
|
||||||
def test_remove_singular(self):
|
def test_remove_singular(self):
|
||||||
baymodel = obj_utils.create_test_baymodel(self.context,
|
baymodel = obj_utils.create_test_baymodel(self.context,
|
||||||
uuid=utils.generate_uuid())
|
uuid=utils.generate_uuid())
|
||||||
|
|
Loading…
Reference in New Issue