Merge "Adding cornercases for set_metadata"

This commit is contained in:
Jenkins 2014-08-28 11:11:49 +00:00 committed by Gerrit Code Review
commit 146fe804a8
5 changed files with 74 additions and 18 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)