Merge "Adding cornercases for set_metadata"
This commit is contained in:
commit
146fe804a8
|
@ -1458,15 +1458,25 @@ class FakeHTTPClient(base_client.HTTPClient):
|
|||
{'id': '2',
|
||||
'name': 'test2',
|
||||
'availability_zone': 'nova1'},
|
||||
{'id': '3',
|
||||
'name': 'test3',
|
||||
'metadata': {'test': "dup", "none_key": "Nine"}},
|
||||
]})
|
||||
|
||||
def _return_aggregate(self):
|
||||
r = {'aggregate': self.get_os_aggregates()[2]['aggregates'][0]}
|
||||
return (200, {}, r)
|
||||
|
||||
def _return_aggregate_3(self):
|
||||
r = {'aggregate': self.get_os_aggregates()[2]['aggregates'][2]}
|
||||
return (200, {}, r)
|
||||
|
||||
def get_os_aggregates_1(self, **kw):
|
||||
return self._return_aggregate()
|
||||
|
||||
def get_os_aggregates_3(self, **kw):
|
||||
return self._return_aggregate_3()
|
||||
|
||||
def post_os_aggregates(self, body, **kw):
|
||||
return self._return_aggregate()
|
||||
|
||||
|
@ -1476,12 +1486,18 @@ class FakeHTTPClient(base_client.HTTPClient):
|
|||
def put_os_aggregates_2(self, body, **kw):
|
||||
return self._return_aggregate()
|
||||
|
||||
def put_os_aggregates_3(self, body, **kw):
|
||||
return self._return_aggregate_3()
|
||||
|
||||
def post_os_aggregates_1_action(self, body, **kw):
|
||||
return self._return_aggregate()
|
||||
|
||||
def post_os_aggregates_2_action(self, body, **kw):
|
||||
return self._return_aggregate()
|
||||
|
||||
def post_os_aggregates_3_action(self, body, **kw):
|
||||
return self._return_aggregate_3()
|
||||
|
||||
def delete_os_aggregates_1(self, **kw):
|
||||
return (202, {}, None)
|
||||
|
||||
|
|
|
@ -1311,17 +1311,29 @@ class ShellTest(utils.TestCase):
|
|||
self.assert_called('PUT', '/os-aggregates/1', body, pos=-2)
|
||||
self.assert_called('GET', '/os-aggregates/1', pos=-1)
|
||||
|
||||
def test_aggregate_set_metadata_by_id(self):
|
||||
self.run_command('aggregate-set-metadata 1 foo=bar delete_key')
|
||||
body = {"set_metadata": {"metadata": {"foo": "bar",
|
||||
"delete_key": None}}}
|
||||
self.assert_called('POST', '/os-aggregates/1/action', body, pos=-2)
|
||||
self.assert_called('GET', '/os-aggregates/1', pos=-1)
|
||||
def test_aggregate_set_metadata_add_by_id(self):
|
||||
self.run_command('aggregate-set-metadata 3 foo=bar')
|
||||
body = {"set_metadata": {"metadata": {"foo": "bar"}}}
|
||||
self.assert_called('POST', '/os-aggregates/3/action', body, pos=-2)
|
||||
self.assert_called('GET', '/os-aggregates/3', pos=-1)
|
||||
|
||||
def test_aggregate_set_metadata_add_duplicate_by_id(self):
|
||||
cmd = 'aggregate-set-metadata 3 test=dup'
|
||||
self.assertRaises(exceptions.CommandError, self.run_command, cmd)
|
||||
|
||||
def test_aggregate_set_metadata_delete_by_id(self):
|
||||
self.run_command('aggregate-set-metadata 3 none_key')
|
||||
body = {"set_metadata": {"metadata": {"none_key": None}}}
|
||||
self.assert_called('POST', '/os-aggregates/3/action', body, pos=-2)
|
||||
self.assert_called('GET', '/os-aggregates/3', pos=-1)
|
||||
|
||||
def test_aggregate_set_metadata_delete_missing_by_id(self):
|
||||
cmd = 'aggregate-set-metadata 3 delete_key2'
|
||||
self.assertRaises(exceptions.CommandError, self.run_command, cmd)
|
||||
|
||||
def test_aggregate_set_metadata_by_name(self):
|
||||
self.run_command('aggregate-set-metadata test foo=bar delete_key')
|
||||
body = {"set_metadata": {"metadata": {"foo": "bar",
|
||||
"delete_key": None}}}
|
||||
self.run_command('aggregate-set-metadata test foo=bar')
|
||||
body = {"set_metadata": {"metadata": {"foo": "bar"}}}
|
||||
self.assert_called('POST', '/os-aggregates/1/action', body, pos=-2)
|
||||
self.assert_called('GET', '/os-aggregates/1', pos=-1)
|
||||
|
||||
|
|
|
@ -127,17 +127,29 @@ class ShellTest(utils.TestCase):
|
|||
self.assert_called('PUT', '/os-aggregates/1', body, pos=-2)
|
||||
self.assert_called('GET', '/os-aggregates/1', pos=-1)
|
||||
|
||||
def test_aggregate_set_metadata_by_id(self):
|
||||
self.run_command('aggregate-set-metadata 1 foo=bar delete_key')
|
||||
body = {"set_metadata": {"metadata": {"foo": "bar",
|
||||
"delete_key": None}}}
|
||||
self.assert_called('POST', '/os-aggregates/1/action', body, pos=-2)
|
||||
self.assert_called('GET', '/os-aggregates/1', pos=-1)
|
||||
def test_aggregate_set_metadata_add_by_id(self):
|
||||
self.run_command('aggregate-set-metadata 3 foo=bar')
|
||||
body = {"set_metadata": {"metadata": {"foo": "bar"}}}
|
||||
self.assert_called('POST', '/os-aggregates/3/action', body, pos=-2)
|
||||
self.assert_called('GET', '/os-aggregates/3', pos=-1)
|
||||
|
||||
def test_aggregate_set_metadata_add_duplicate_by_id(self):
|
||||
cmd = 'aggregate-set-metadata 3 test=dup'
|
||||
self.assertRaises(exceptions.CommandError, self.run_command, cmd)
|
||||
|
||||
def test_aggregate_set_metadata_delete_by_id(self):
|
||||
self.run_command('aggregate-set-metadata 3 none_key')
|
||||
body = {"set_metadata": {"metadata": {"none_key": None}}}
|
||||
self.assert_called('POST', '/os-aggregates/3/action', body, pos=-2)
|
||||
self.assert_called('GET', '/os-aggregates/3', pos=-1)
|
||||
|
||||
def test_aggregate_set_metadata_delete_missing_by_id(self):
|
||||
cmd = 'aggregate-set-metadata 3 delete_key2'
|
||||
self.assertRaises(exceptions.CommandError, self.run_command, cmd)
|
||||
|
||||
def test_aggregate_set_metadata_by_name(self):
|
||||
self.run_command('aggregate-set-metadata test foo=bar delete_key')
|
||||
body = {"set_metadata": {"metadata": {"foo": "bar",
|
||||
"delete_key": None}}}
|
||||
self.run_command('aggregate-set-metadata test foo=bar')
|
||||
body = {"set_metadata": {"metadata": {"foo": "bar"}}}
|
||||
self.assert_called('POST', '/os-aggregates/1/action', body, pos=-2)
|
||||
self.assert_called('GET', '/os-aggregates/1', pos=-1)
|
||||
|
||||
|
|
|
@ -2867,6 +2867,14 @@ def do_aggregate_set_metadata(cs, args):
|
|||
"""Update the metadata associated with the aggregate."""
|
||||
aggregate = _find_aggregate(cs, args.aggregate)
|
||||
metadata = _extract_metadata(args)
|
||||
currentmetadata = getattr(aggregate, 'metadata', {})
|
||||
if set(metadata.items()) & set(currentmetadata.items()):
|
||||
raise exceptions.CommandError(_("metadata already exists"))
|
||||
for key, value in metadata.items():
|
||||
if value is None and key not in currentmetadata:
|
||||
raise exceptions.CommandError(_("metadata key %s does not exist"
|
||||
" hence can not be deleted")
|
||||
% key)
|
||||
aggregate = cs.aggregates.set_metadata(aggregate.id, metadata)
|
||||
print(_("Metadata has been successfully updated for aggregate %s.") %
|
||||
aggregate.id)
|
||||
|
|
|
@ -2305,6 +2305,14 @@ def do_aggregate_set_metadata(cs, args):
|
|||
"""Update the metadata associated with the aggregate."""
|
||||
aggregate = _find_aggregate(cs, args.aggregate)
|
||||
metadata = _extract_metadata(args)
|
||||
currentmetadata = getattr(aggregate, 'metadata', {})
|
||||
if set(metadata.items()) & set(currentmetadata.items()):
|
||||
raise exceptions.CommandError("metadata already exists")
|
||||
for key, value in metadata.items():
|
||||
if value is None and key not in currentmetadata:
|
||||
raise exceptions.CommandError("metadata key %s does not exist"
|
||||
" hence can not be deleted"
|
||||
% key)
|
||||
aggregate = cs.aggregates.set_metadata(aggregate.id, metadata)
|
||||
print("Metadata has been successfully updated for aggregate %s." %
|
||||
aggregate.id)
|
||||
|
|
Loading…
Reference in New Issue