From 99896267cbb648ca34b292ea180c2eb646468698 Mon Sep 17 00:00:00 2001 From: Armando Migliaccio Date: Fri, 1 Jul 2016 10:13:19 -0700 Subject: [PATCH] Add sorting and pagination tests for trunk resources As per Ihar's request. Partially-implements: blueprint vlan-aware-vms Change-Id: Ib7c28605b317ccb1fbf04bbdb641ec8a0d2e5004 --- neutron/tests/tempest/api/base.py | 14 ++++--- neutron/tests/tempest/api/test_trunk.py | 50 +++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 6 deletions(-) diff --git a/neutron/tests/tempest/api/base.py b/neutron/tests/tempest/api/base.py index 2d836d68426..84d91dfd038 100644 --- a/neutron/tests/tempest/api/base.py +++ b/neutron/tests/tempest/api/base.py @@ -491,6 +491,8 @@ class BaseSearchCriteriaTest(BaseNetworkTest): # This should be defined by subclasses to reflect resource name to test resource = None + field = 'name' + # NOTE(ihrachys): some names, like those starting with an underscore (_) # are sorted differently depending on whether the plugin implements native # sorting support, or not. So we avoid any such cases here, sticking to @@ -510,7 +512,7 @@ class BaseSearchCriteriaTest(BaseNetworkTest): actual = list(actual) self.assertEqual(len(original), len(actual)) for expected, res in zip(original, actual): - self.assertEqual(expected['name'], res['name']) + self.assertEqual(expected[self.field], res[self.field]) @utils.classproperty def plural_name(self): @@ -537,13 +539,13 @@ class BaseSearchCriteriaTest(BaseNetworkTest): def _test_list_sorts(self, direction): sort_args = { 'sort_dir': direction, - 'sort_key': 'name' + 'sort_key': self.field } body = self.list_method(**sort_args) resources = self._extract_resources(body) self.assertNotEmpty( resources, "%s list returned is empty" % self.resource) - retrieved_names = [res['name'] for res in resources] + retrieved_names = [res[self.field] for res in resources] expected = sorted(retrieved_names) if direction == constants.SORT_DIRECTION_DESC: expected = list(reversed(expected)) @@ -580,7 +582,7 @@ class BaseSearchCriteriaTest(BaseNetworkTest): # first, collect all resources for later comparison sort_args = { 'sort_dir': constants.SORT_DIRECTION_ASC, - 'sort_key': 'name' + 'sort_key': self.field } body = self.list_method(**sort_args) expected_resources = self._extract_resources(body) @@ -666,7 +668,7 @@ class BaseSearchCriteriaTest(BaseNetworkTest): self, direction=constants.SORT_DIRECTION_ASC): pagination_args = { 'sort_dir': direction, - 'sort_key': 'name', + 'sort_key': self.field, } body = self.list_method(**pagination_args) expected_resources = self._extract_resources(body) @@ -709,7 +711,7 @@ class BaseSearchCriteriaTest(BaseNetworkTest): def _test_list_pagination_page_reverse(self, direction): pagination_args = { 'sort_dir': direction, - 'sort_key': 'name', + 'sort_key': self.field, 'limit': 3, } body = self.list_method(**pagination_args) diff --git a/neutron/tests/tempest/api/test_trunk.py b/neutron/tests/tempest/api/test_trunk.py index 589acf9e147..640584a5e58 100644 --- a/neutron/tests/tempest/api/test_trunk.py +++ b/neutron/tests/tempest/api/test_trunk.py @@ -131,3 +131,53 @@ class TrunkTestJSON(TrunkTestJSONBase): trunk = self.client.get_subports(trunk['trunk']['id']) observed_subports = trunk['sub_ports'] self.assertEqual(1, len(observed_subports)) + + +class TrunksSearchCriteriaTest(base.BaseSearchCriteriaTest): + + resource = 'trunk' + field = 'id' + + @classmethod + def resource_setup(cls): + super(TrunksSearchCriteriaTest, cls).resource_setup() + net = cls.create_network(network_name='trunk-search-test-net') + for name in cls.resource_names: + parent_port = cls.create_port(net) + cls.client.create_trunk(parent_port['id'], []) + + @test.idempotent_id('fab73df4-960a-4ae3-87d3-60992b8d3e2d') + def test_list_sorts_asc(self): + self._test_list_sorts_asc() + + @test.idempotent_id('a426671d-7270-430f-82ff-8f33eec93010') + def test_list_sorts_desc(self): + self._test_list_sorts_desc() + + @test.idempotent_id('b202fdc8-6616-45df-b6a0-463932de6f94') + def test_list_pagination(self): + self._test_list_pagination() + + @test.idempotent_id('c4723b8e-8186-4b9a-bf9e-57519967e048') + def test_list_pagination_with_marker(self): + self._test_list_pagination_with_marker() + + @test.idempotent_id('dcd02a7a-f07e-4d5e-b0ca-b58e48927a9b') + def test_list_pagination_with_href_links(self): + self._test_list_pagination_with_href_links() + + @test.idempotent_id('eafe7024-77ab-4cfe-824b-0b2bf4217727') + def test_list_no_pagination_limit_0(self): + self._test_list_no_pagination_limit_0() + + @test.idempotent_id('f8857391-dc44-40cc-89b7-2800402e03ce') + def test_list_pagination_page_reverse_asc(self): + self._test_list_pagination_page_reverse_asc() + + @test.idempotent_id('ae51e9c9-ceae-4ec0-afd4-147569247699') + def test_list_pagination_page_reverse_desc(self): + self._test_list_pagination_page_reverse_desc() + + @test.idempotent_id('b4293e59-d794-4a93-be09-38667199ef68') + def test_list_pagination_page_reverse_with_href_links(self): + self._test_list_pagination_page_reverse_with_href_links()