Fix list_resource_providers filters

list_resource_providers failed filtering as the filter parameters like
name, or in_tree must be added to the url as query strings:
/resource_providers?name=foo&in_tree=<uuid>

Related-Bug: #1578989
Change-Id: I794972e93dbcf7310154cc1cceef25b9df618450
This commit is contained in:
Lajos Katona 2018-05-02 16:30:26 +02:00
parent d6cb64165c
commit 2b5d1fdd1f
2 changed files with 16 additions and 7 deletions

View File

@ -20,6 +20,7 @@ from keystoneauth1 import exceptions as ks_exc
from keystoneauth1 import loading as keystone
from oslo_log import log as logging
from oslo_utils import versionutils
from six.moves.urllib.parse import urlencode
from neutron_lib._i18n import _
from neutron_lib.exceptions import placement as n_exc
@ -203,7 +204,8 @@ class PlacementAPIClient(object):
filters['in_tree'] = in_tree
if uuid:
filters['uuid'] = uuid
return self._get(url, **filters).json()
url = '%s?%s' % (url, urlencode(filters))
return self._get(url).json()
@_check_placement_api_available
def update_resource_provider_inventories(

View File

@ -75,21 +75,28 @@ class TestPlacementAPIClient(base.BaseTestCase):
def test_list_resource_providers(self):
filter_1 = {'name': 'name1', 'in_tree': 'tree1_uuid'}
self.placement_api_client.list_resource_providers(**filter_1)
self.placement_fixture.mock_get.assert_called_once_with(
'/resource_providers', **filter_1)
args = str(self.placement_fixture.mock_get.call_args)
self.placement_fixture.mock_get.assert_called_once()
self.assertIn('name=name1', args)
self.assertIn('in_tree=tree1_uuid', args)
filter_2 = {'member_of': ['aggregate_uuid'], 'uuid': 'uuid_1',
'resources': {'r_class1': 'value1'}}
self.placement_fixture.mock_get.reset_mock()
self.placement_api_client.list_resource_providers(**filter_2)
self.placement_fixture.mock_get.assert_called_once_with(
'/resource_providers', **filter_2)
args = str(self.placement_fixture.mock_get.call_args)
self.placement_fixture.mock_get.assert_called_once()
self.assertIn('member_of', args)
self.assertIn('uuid', args)
self.assertIn('resources', args)
filter_1.update(filter_2)
self.placement_fixture.mock_get.reset_mock()
self.placement_api_client.list_resource_providers(**filter_1)
self.placement_fixture.mock_get.assert_called_once_with(
'/resource_providers', **filter_1)
args = str(self.placement_fixture.mock_get.call_args)
self.placement_fixture.mock_get.assert_called_once()
for key in filter_1:
self.assertIn(key, args)
def test_list_resource_providers_placement_api_version_too_low(self):
self.placement_api_client._target_version = (1, 1)