Merge "Remove metadata/system_metadata filter handling from get_all"
This commit is contained in:
commit
9451dbec9f
|
@ -2315,21 +2315,13 @@ class API(base.Base):
|
|||
# any character, we need to use regexp escaping for it.
|
||||
filters['ip'] = '^%s$' % fixed_ip.replace('.', '\\.')
|
||||
|
||||
def _remap_metadata_filter(metadata):
|
||||
filters['metadata'] = jsonutils.loads(metadata)
|
||||
|
||||
def _remap_system_metadata_filter(metadata):
|
||||
filters['system_metadata'] = jsonutils.loads(metadata)
|
||||
|
||||
# search_option to filter_name mapping.
|
||||
filter_mapping = {
|
||||
'image': 'image_ref',
|
||||
'name': 'display_name',
|
||||
'tenant_id': 'project_id',
|
||||
'flavor': _remap_flavor_filter,
|
||||
'fixed_ip': _remap_fixed_ip_filter,
|
||||
'metadata': _remap_metadata_filter,
|
||||
'system_metadata': _remap_system_metadata_filter}
|
||||
'fixed_ip': _remap_fixed_ip_filter}
|
||||
|
||||
# copy from search_opts, doing various remappings as necessary
|
||||
for opt, value in search_opts.items():
|
||||
|
|
|
@ -9012,75 +9012,6 @@ class ComputeAPITestCase(BaseTestCase):
|
|||
power_state.RUNNING]})
|
||||
self.assertEqual(len(instances), 3)
|
||||
|
||||
def test_get_all_by_metadata(self):
|
||||
# Test searching instances by metadata.
|
||||
|
||||
c = context.get_admin_context()
|
||||
self._create_fake_instance_obj() # instance0
|
||||
self._create_fake_instance_obj({ # instance1
|
||||
'metadata': {'key1': 'value1'}})
|
||||
instance2 = self._create_fake_instance_obj({
|
||||
'metadata': {'key2': 'value2'}})
|
||||
instance3 = self._create_fake_instance_obj({
|
||||
'metadata': {'key3': 'value3'}})
|
||||
instance4 = self._create_fake_instance_obj({
|
||||
'metadata': {'key3': 'value3',
|
||||
'key4': 'value4'}})
|
||||
|
||||
# get all instances
|
||||
instances = self.compute_api.get_all(c,
|
||||
search_opts={'metadata': u"{}"})
|
||||
self.assertEqual(len(instances), 5)
|
||||
|
||||
# wrong key/value combination
|
||||
instances = self.compute_api.get_all(c,
|
||||
search_opts={'metadata': u'{"key1": "value3"}'})
|
||||
self.assertEqual(len(instances), 0)
|
||||
|
||||
# non-existing keys
|
||||
instances = self.compute_api.get_all(c,
|
||||
search_opts={'metadata': u'{"key5": "value1"}'})
|
||||
self.assertEqual(len(instances), 0)
|
||||
|
||||
# find existing instance
|
||||
instances = self.compute_api.get_all(c,
|
||||
search_opts={'metadata': u'{"key2": "value2"}'})
|
||||
self.assertEqual(len(instances), 1)
|
||||
self.assertEqual(instances[0]['uuid'], instance2['uuid'])
|
||||
|
||||
instances = self.compute_api.get_all(c,
|
||||
search_opts={'metadata': u'{"key3": "value3"}'})
|
||||
self.assertEqual(len(instances), 2)
|
||||
instance_uuids = [instance['uuid'] for instance in instances]
|
||||
self.assertIn(instance3['uuid'], instance_uuids)
|
||||
self.assertIn(instance4['uuid'], instance_uuids)
|
||||
|
||||
# multiple criteria as a dict
|
||||
instances = self.compute_api.get_all(c,
|
||||
search_opts={'metadata': u'{"key3": "value3","key4": "value4"}'})
|
||||
self.assertEqual(len(instances), 1)
|
||||
self.assertEqual(instances[0]['uuid'], instance4['uuid'])
|
||||
|
||||
# multiple criteria as a list
|
||||
instances = self.compute_api.get_all(c,
|
||||
search_opts=
|
||||
{'metadata': u'[{"key4": "value4"},{"key3": "value3"}]'})
|
||||
self.assertEqual(len(instances), 1)
|
||||
self.assertEqual(instances[0]['uuid'], instance4['uuid'])
|
||||
|
||||
def test_get_all_by_system_metadata(self):
|
||||
# Test searching instances by system metadata.
|
||||
|
||||
c = context.get_admin_context()
|
||||
instance1 = self._create_fake_instance_obj({
|
||||
'system_metadata': {'key1': 'value1'}})
|
||||
|
||||
# find existing instance
|
||||
instances = self.compute_api.get_all(c,
|
||||
search_opts={'system_metadata': u'{"key1": "value1"}'})
|
||||
self.assertEqual(len(instances), 1)
|
||||
self.assertEqual(instances[0]['uuid'], instance1['uuid'])
|
||||
|
||||
def test_instance_metadata(self):
|
||||
meta_changes = [None]
|
||||
self.flags(notify_on_state_change='vm_state', group='notifications')
|
||||
|
|
|
@ -4299,12 +4299,6 @@ class _ComputeAPIUnitTestMixIn(object):
|
|||
filters = mock_get.call_args_list[0][0][1]
|
||||
self.assertEqual({'project_id': 'foo'}, filters)
|
||||
|
||||
def test_metadata_invalid_return_empty_object(self):
|
||||
api = compute_api.API()
|
||||
ret = api.get_all(self.context, search_opts={'metadata': 'foo'})
|
||||
self.assertIsInstance(ret, objects.InstanceList)
|
||||
self.assertEqual(0, len(ret))
|
||||
|
||||
def test_populate_instance_names_host_name(self):
|
||||
params = dict(display_name="vm1")
|
||||
instance = self._create_instance_obj(params=params)
|
||||
|
|
Loading…
Reference in New Issue