Add sorting and pagination tests for trunk resources

As per Ihar's request.

Partially-implements: blueprint vlan-aware-vms

Change-Id: Ib7c28605b317ccb1fbf04bbdb641ec8a0d2e5004
diff --git a/neutron/tests/tempest/api/base.py b/neutron/tests/tempest/api/base.py
index 2d836d6..84d91df 100644
--- a/neutron/tests/tempest/api/base.py
+++ b/neutron/tests/tempest/api/base.py
@@ -491,6 +491,8 @@
     # 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 @@
         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 @@
     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 @@
         # 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 @@
             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 @@
     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 589acf9..640584a 100644
--- a/neutron/tests/tempest/api/test_trunk.py
+++ b/neutron/tests/tempest/api/test_trunk.py
@@ -131,3 +131,53 @@
         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()