Add filter parameter for provider list API

The provider list API layer supports the filter parameter, but
in protection service it was not supported. This patch fixed it.

Change-Id: Ie98a3e8dda45757d98da9cc5b7383d76ecf0f09c
Closes-Bug: #1745058
This commit is contained in:
ericxiett 2018-01-24 14:51:27 +08:00
parent f6a21fc421
commit 29b264eb7c
2 changed files with 24 additions and 9 deletions

20
karbor/services/protection/provider.py Normal file → Executable file
View File

@ -203,14 +203,22 @@ class ProviderRegistry(object):
self.providers.values(), key=lambda item: item.id)
if marker is not None and marker in provider_ids:
provider_list = provider_list[provider_ids.index(marker) + 1:]
filters = filters if filters else {}
valid_providers = []
for provider in provider_list:
valid_providers.append(
dict(id=provider.id,
name=provider.name,
description=provider.description,
extended_info_schema=provider.extended_info_schema
))
provider_dict = dict(
id=provider.id,
name=provider.name,
description=provider.description,
extended_info_schema=provider.extended_info_schema
)
for key, value in filters.items():
if key in provider_dict.keys() and \
value != provider_dict[key]:
break
else:
valid_providers.append(provider_dict)
if limit is not None and len(valid_providers) == limit:
return valid_providers
return valid_providers

13
karbor/tests/unit/protection/test_provider.py Normal file → Executable file
View File

@ -41,13 +41,13 @@ def set_provider_list(provider_registry):
'fake_provider_id_1': FakeProvider(
id='fake_provider_id_1',
name='fake_provider_name_1',
description='',
description='Fake provider 1 description',
extended_info_schema=''
),
'fake_provider_id_2': FakeProvider(
id='fake_provider_id_2',
name='fake_provider_name_2',
description='',
description='Fake provider 2 description',
extended_info_schema=''
)
}
@ -90,7 +90,8 @@ class ProviderRegistryTest(base.TestCase):
def test_list_provider(self):
pr = provider.ProviderRegistry()
self.assertEqual(1, len(pr.list_providers()))
set_provider_list(pr)
self.assertEqual(2, len(pr.list_providers()))
def test_list_provider_with_marker(self):
pr = provider.ProviderRegistry()
@ -104,6 +105,12 @@ class ProviderRegistryTest(base.TestCase):
self.assertEqual(
1, len(pr.list_providers(limit=1)))
def test_list_provider_with_filters(self):
pr = provider.ProviderRegistry()
set_provider_list(pr)
filters = {'name': 'fake_provider_name_1'}
self.assertEqual(1, len(pr.list_providers(filters=filters)))
def test_show_provider(self):
pr = provider.ProviderRegistry()
provider_list = pr.list_providers()