diff --git a/karbor/services/protection/provider.py b/karbor/services/protection/provider.py index bc8094e1..63f967d3 100644 --- a/karbor/services/protection/provider.py +++ b/karbor/services/protection/provider.py @@ -197,11 +197,23 @@ class ProviderRegistry(object): def list_providers(self, marker=None, limit=None, sort_keys=None, sort_dirs=None, filters=None): - # TODO(wangliuan) How to use the list option - return [dict(id=provider.id, name=provider.name, + # TODO(jiaopengju) How to use sort_keys, sort_dirs and filters + provider_ids = sorted(self.providers.keys()) + provider_list = sorted( + 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:] + 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) - for provider in self.providers.values()] + extended_info_schema=provider.extended_info_schema + )) + if limit is not None and len(valid_providers) == limit: + return valid_providers + return valid_providers def show_provider(self, provider_id): try: diff --git a/karbor/tests/unit/protection/test_provider.py b/karbor/tests/unit/protection/test_provider.py index 41a32d9f..04df24a7 100644 --- a/karbor/tests/unit/protection/test_provider.py +++ b/karbor/tests/unit/protection/test_provider.py @@ -36,6 +36,31 @@ resource_graph = { } +def set_provider_list(provider_registry): + provider_registry.providers = { + 'fake_provider_id_1': FakeProvider( + id='fake_provider_id_1', + name='fake_provider_name_1', + description='', + extended_info_schema='' + ), + 'fake_provider_id_2': FakeProvider( + id='fake_provider_id_2', + name='fake_provider_name_2', + description='', + extended_info_schema='' + ) + } + + +class FakeProvider(object): + def __init__(self, id, name, description, extended_info_schema): + self.id = id + self.name = name + self.description = description + self.extended_info_schema = extended_info_schema + + class ProviderRegistryTest(base.TestCase): def setUp(self): super(ProviderRegistryTest, self).setUp() @@ -67,6 +92,18 @@ class ProviderRegistryTest(base.TestCase): pr = provider.ProviderRegistry() self.assertEqual(1, len(pr.list_providers())) + def test_list_provider_with_marker(self): + pr = provider.ProviderRegistry() + set_provider_list(pr) + self.assertEqual( + 1, len(pr.list_providers(marker='fake_provider_id_1'))) + + def test_list_provider_with_limit(self): + pr = provider.ProviderRegistry() + set_provider_list(pr) + self.assertEqual( + 1, len(pr.list_providers(limit=1))) + def test_show_provider(self): pr = provider.ProviderRegistry() provider_list = pr.list_providers()