diff --git a/octavia_tempest_plugin/tests/api/v2/test_listener.py b/octavia_tempest_plugin/tests/api/v2/test_listener.py
index 4805487..e015c82 100644
--- a/octavia_tempest_plugin/tests/api/v2/test_listener.py
+++ b/octavia_tempest_plugin/tests/api/v2/test_listener.py
@@ -22,7 +22,6 @@
 from tempest.lib.common.utils import data_utils
 from tempest.lib import decorators
 from tempest.lib import exceptions
-import testtools
 
 from octavia_tempest_plugin.common import constants as const
 from octavia_tempest_plugin.tests import test_base
@@ -32,13 +31,13 @@
 LOG = logging.getLogger(__name__)
 
 
-class ListenerAPITest(test_base.LoadBalancerBaseTest):
+class ListenerAPIBase(test_base.LoadBalancerBaseTest):
     """Test the listener object API."""
 
     @classmethod
     def resource_setup(cls):
         """Setup resources needed by the tests."""
-        super(ListenerAPITest, cls).resource_setup()
+        super().resource_setup()
 
         lb_name = data_utils.rand_name("lb_member_lb1_listener")
         lb_kwargs = {const.PROVIDER: CONF.load_balancer.provider,
@@ -65,44 +64,11 @@
     @classmethod
     def setup_clients(cls):
         """Setup client aliases."""
-        super(ListenerAPITest, cls).setup_clients()
+        super().setup_clients()
         cls.listener_client = cls.os_primary.load_balancer_v2.ListenerClient()
         cls.member2_listener_client = (
             cls.os_roles_lb_member2.load_balancer_v2.ListenerClient())
 
-    @decorators.idempotent_id('88d0ec83-7b08-48d9-96e2-0df1d2f8cd98')
-    def test_http_listener_create(self):
-        self._test_listener_create(const.HTTP, 8000)
-
-    @decorators.idempotent_id('2cc89237-fc6b-434d-b38e-b3309823e71f')
-    def test_https_listener_create(self):
-        self._test_listener_create(const.HTTPS, 8001)
-
-    @decorators.idempotent_id('45580065-5653-436b-aaff-dc465fa0a542')
-    def test_tcp_listener_create(self):
-        self._test_listener_create(const.TCP, 8002)
-
-    @testtools.skipIf(CONF.load_balancer.provider == 'tungstenfabric',
-                      "Not supported by TungstenFabric")
-    @decorators.idempotent_id('1a6ba0d0-f309-4088-a686-dda0e9ab7e43')
-    @testtools.skipUnless(
-        CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
-        'PROMETHEUS listener tests are disabled in the tempest configuration.')
-    def test_prometheus_listener_create(self):
-        if not self.mem_listener_client.is_version_supported(
-                self.api_version, '2.25'):
-            raise self.skipException('PROMETHEUS listeners are only available '
-                                     'on Octavia API version 2.25 or newer.')
-        self._test_listener_create(const.PROMETHEUS, 8090)
-
-    @decorators.idempotent_id('7b53f336-47bc-45ae-bbd7-4342ef0673fc')
-    def test_udp_listener_create(self):
-        self._test_listener_create(const.UDP, 8003)
-
-    @decorators.idempotent_id('d6d36c32-27ff-4977-9d21-fd71a14e3b20')
-    def test_sctp_listener_create(self):
-        self._test_listener_create(const.SCTP, 8004)
-
     def _test_listener_create(self, protocol, protocol_port):
         """Tests listener create and basic show APIs.
 
@@ -259,30 +225,6 @@
                 CONF.load_balancer.provider != 'tungstenfabric'):
             self.assertEqual(self.allowed_cidrs, listener[const.ALLOWED_CIDRS])
 
-    @decorators.idempotent_id('cceac303-4db5-4d5a-9f6e-ff33780a5f29')
-    def test_http_udp_sctp_tcp_listener_create_on_same_port(self):
-        self._test_listener_create_on_same_port(const.HTTP, const.UDP,
-                                                const.SCTP,
-                                                const.TCP, 8010)
-
-    @decorators.idempotent_id('930338b8-3029-48a6-89b2-8b062060fe61')
-    def test_http_udp_sctp_https_listener_create_on_same_port(self):
-        self._test_listener_create_on_same_port(const.HTTP, const.UDP,
-                                                const.SCTP,
-                                                const.HTTPS, 8011)
-
-    @decorators.idempotent_id('01a21892-008a-4327-b4fd-fbf194ecb1a5')
-    def test_tcp_udp_sctp_http_listener_create_on_same_port(self):
-        self._test_listener_create_on_same_port(const.TCP, const.UDP,
-                                                const.SCTP,
-                                                const.HTTP, 8012)
-
-    @decorators.idempotent_id('5da764a4-c03a-46ed-848b-98b9d9fa9089')
-    def test_tcp_udp_sctp_https_listener_create_on_same_port(self):
-        self._test_listener_create_on_same_port(const.TCP, const.UDP,
-                                                const.SCTP,
-                                                const.HTTPS, 8013)
-
     def _test_listener_create_on_same_port(self, protocol1, protocol2,
                                            protocol3, protocol4,
                                            protocol_port):
@@ -447,39 +389,6 @@
                 self.mem_listener_client.create_listener,
                 **listener5_kwargs)
 
-    @decorators.idempotent_id('78ba6eb0-178c-477e-9156-b6775ca7b271')
-    def test_http_listener_list(self):
-        self._test_listener_list(const.HTTP, 8020)
-
-    @decorators.idempotent_id('61b7c643-f5fa-4471-8f9e-2e0ccdaf5ac7')
-    def test_https_listener_list(self):
-        self._test_listener_list(const.HTTPS, 8030)
-
-    @testtools.skipIf(CONF.load_balancer.provider == 'tungstenfabric',
-                      "Not supported by TungstenFabric")
-    @decorators.idempotent_id('5473e071-8277-4ac5-9277-01ecaf46e274')
-    @testtools.skipUnless(
-        CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
-        'PROMETHEUS listener tests are disabled in the tempest configuration.')
-    def test_prometheus_listener_list(self):
-        if not self.mem_listener_client.is_version_supported(
-                self.api_version, '2.25'):
-            raise self.skipException('PROMETHEUS listeners are only available '
-                                     'on Octavia API version 2.25 or newer.')
-        self._test_listener_list(const.PROMETHEUS, 8091)
-
-    @decorators.idempotent_id('1cd476e2-7788-415e-bcaf-c377acfc9794')
-    def test_tcp_listener_list(self):
-        self._test_listener_list(const.TCP, 8030)
-
-    @decorators.idempotent_id('c08fb77e-b317-4d6f-b430-91f5b27ebac6')
-    def test_udp_listener_list(self):
-        self._test_listener_list(const.UDP, 8040)
-
-    @decorators.idempotent_id('0abc3998-aacd-4edd-88f5-c5c35557646f')
-    def test_sctp_listener_list(self):
-        self._test_listener_list(const.SCTP, 8041)
-
     def _test_listener_list(self, protocol, protocol_port_base):
         """Tests listener list API and field filtering.
 
@@ -835,39 +744,6 @@
             self.assertTrue(not any(["" in listener[const.TAGS]
                                      for listener in list_of_listeners]))
 
-    @decorators.idempotent_id('6e299eae-6907-4dfc-89c2-e57709d25d3d')
-    def test_http_listener_show(self):
-        self._test_listener_show(const.HTTP, 8050)
-
-    @decorators.idempotent_id('aa838646-435f-4a20-8442-519a7a138e7e')
-    def test_https_listener_show(self):
-        self._test_listener_show(const.HTTPS, 8051)
-
-    @testtools.skipIf(CONF.load_balancer.provider == 'tungstenfabric',
-                      "Not supported by TungstenFabric")
-    @decorators.idempotent_id('b851b754-4333-4115-9063-a9fce44c2e46')
-    @testtools.skipUnless(
-        CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
-        'PROMETHEUS listener tests are disabled in the tempest configuration.')
-    def test_prometheus_listener_show(self):
-        if not self.mem_listener_client.is_version_supported(
-                self.api_version, '2.25'):
-            raise self.skipException('PROMETHEUS listeners are only available '
-                                     'on Octavia API version 2.25 or newer.')
-        self._test_listener_show(const.PROMETHEUS, 8092)
-
-    @decorators.idempotent_id('1fcbbee2-b697-4890-b6bf-d308ac1c94cd')
-    def test_tcp_listener_show(self):
-        self._test_listener_show(const.TCP, 8052)
-
-    @decorators.idempotent_id('1dea3a6b-c95b-4e91-b591-1aa9cbcd0d1d')
-    def test_udp_listener_show(self):
-        self._test_listener_show(const.UDP, 8053)
-
-    @decorators.idempotent_id('10992529-1d0a-47a3-855c-3dbcd868db4e')
-    def test_sctp_listener_show(self):
-        self._test_listener_show(const.SCTP, 8054)
-
     def _test_listener_show(self, protocol, protocol_port):
         """Tests listener show API.
 
@@ -1011,39 +887,6 @@
                 'ListenerClient', 'show_listener',
                 expected_allowed, listener[const.ID])
 
-    @decorators.idempotent_id('aaae0298-5778-4c7e-a27a-01549a71b319')
-    def test_http_listener_update(self):
-        self._test_listener_update(const.HTTP, 8060)
-
-    @decorators.idempotent_id('9679b061-2b2c-469f-abd9-26ed140ef001')
-    def test_https_listener_update(self):
-        self._test_listener_update(const.HTTPS, 8061)
-
-    @testtools.skipIf(CONF.load_balancer.provider == 'tungstenfabric',
-                      "Not supported by TungstenFabric")
-    @decorators.idempotent_id('cbba6bf8-9184-4da5-95e9-5efe1f89ddf0')
-    @testtools.skipUnless(
-        CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
-        'PROMETHEUS listener tests are disabled in the tempest configuration.')
-    def test_prometheus_listener_update(self):
-        if not self.mem_listener_client.is_version_supported(
-                self.api_version, '2.25'):
-            raise self.skipException('PROMETHEUS listeners are only available '
-                                     'on Octavia API version 2.25 or newer.')
-        self._test_listener_update(const.PROMETHEUS, 8093)
-
-    @decorators.idempotent_id('8d933121-db03-4ccc-8b77-4e879064a9ba')
-    def test_tcp_listener_update(self):
-        self._test_listener_update(const.TCP, 8062)
-
-    @decorators.idempotent_id('fd02dbfd-39ce-41c2-b181-54fc7ad91707')
-    def test_udp_listener_update(self):
-        self._test_listener_update(const.UDP, 8063)
-
-    @decorators.idempotent_id('c590b485-4e08-4e49-b384-2282b3f6f1b9')
-    def test_sctp_listener_update(self):
-        self._test_listener_update(const.SCTP, 8064)
-
     def _test_listener_update(self, protocol, protocol_port):
         """Tests listener update and show APIs.
 
@@ -1292,39 +1135,6 @@
                 expected_cidrs = ['2001:db8::/64']
             self.assertEqual(expected_cidrs, listener[const.ALLOWED_CIDRS])
 
-    @decorators.idempotent_id('16f11c82-f069-4592-8954-81b35a98e3b7')
-    def test_http_listener_delete(self):
-        self._test_listener_delete(const.HTTP, 8070)
-
-    @decorators.idempotent_id('769526a0-df71-47cd-996e-46484de32223')
-    def test_https_listener_delete(self):
-        self._test_listener_delete(const.HTTPS, 8071)
-
-    @testtools.skipIf(CONF.load_balancer.provider == 'tungstenfabric',
-                      "Not supported by TungstenFabric")
-    @decorators.idempotent_id('322a6372-6b56-4a3c-87e3-dd82074bc83e')
-    @testtools.skipUnless(
-        CONF.loadbalancer_feature_enabled.prometheus_listener_enabled,
-        'PROMETHEUS listener tests are disabled in the tempest configuration.')
-    def test_prometheus_listener_delete(self):
-        if not self.mem_listener_client.is_version_supported(
-                self.api_version, '2.25'):
-            raise self.skipException('PROMETHEUS listeners are only available '
-                                     'on Octavia API version 2.25 or newer.')
-        self._test_listener_delete(const.PROMETHEUS, 8094)
-
-    @decorators.idempotent_id('f5ca019d-2b33-48f9-9c2d-2ec169b423ca')
-    def test_tcp_listener_delete(self):
-        self._test_listener_delete(const.TCP, 8072)
-
-    @decorators.idempotent_id('86bd9717-e3e9-41e3-86c4-888c64455926')
-    def test_udp_listener_delete(self):
-        self._test_listener_delete(const.UDP, 8073)
-
-    @decorators.idempotent_id('0de6f1ad-58ae-4b31-86b6-b440fce70244')
-    def test_sctp_listener_delete(self):
-        self._test_listener_delete(const.SCTP, 8074)
-
     def _test_listener_delete(self, protocol, protocol_port):
         """Tests listener create and delete APIs.
 
@@ -1391,26 +1201,6 @@
             CONF.load_balancer.check_interval,
             CONF.load_balancer.check_timeout)
 
-    @decorators.idempotent_id('6f14a6c1-945e-43bc-8215-410c8a5edb25')
-    def test_http_listener_show_stats(self):
-        self._test_listener_show_stats(const.HTTP, 8080)
-
-    @decorators.idempotent_id('f8a43c27-f0a0-496d-a287-1958f337ac04')
-    def test_https_listener_show_stats(self):
-        self._test_listener_show_stats(const.HTTPS, 8081)
-
-    @decorators.idempotent_id('8a999856-f448-498c-b891-21af449b5208')
-    def test_tcp_listener_show_stats(self):
-        self._test_listener_show_stats(const.TCP, 8082)
-
-    @decorators.idempotent_id('a4c1f199-923b-41e4-a134-c91e590e20c4')
-    def test_udp_listener_show_stats(self):
-        self._test_listener_show_stats(const.UDP, 8083)
-
-    @decorators.idempotent_id('7f6d3906-529c-4b99-8376-b836059df220')
-    def test_sctp_listener_show_stats(self):
-        self._test_listener_show_stats(const.SCTP, 8084)
-
     def _test_listener_show_stats(self, protocol, protocol_port):
         """Tests listener show statistics API.
 
@@ -1484,3 +1274,218 @@
         self.assertEqual(0, stats[const.BYTES_OUT])
         self.assertEqual(0, stats[const.REQUEST_ERRORS])
         self.assertEqual(0, stats[const.TOTAL_CONNECTIONS])
+
+
+class ListenerAPITestTCP(ListenerAPIBase):
+
+    @decorators.idempotent_id('45580065-5653-436b-aaff-dc465fa0a542')
+    def test_tcp_listener_create(self):
+        self._test_listener_create(const.TCP, 8002)
+
+    @decorators.idempotent_id('1cd476e2-7788-415e-bcaf-c377acfc9794')
+    def test_tcp_listener_list(self):
+        self._test_listener_list(const.TCP, 8030)
+
+    @decorators.idempotent_id('1fcbbee2-b697-4890-b6bf-d308ac1c94cd')
+    def test_tcp_listener_show(self):
+        self._test_listener_show(const.TCP, 8052)
+
+    @decorators.idempotent_id('8d933121-db03-4ccc-8b77-4e879064a9ba')
+    def test_tcp_listener_update(self):
+        self._test_listener_update(const.TCP, 8062)
+
+    @decorators.idempotent_id('f5ca019d-2b33-48f9-9c2d-2ec169b423ca')
+    def test_tcp_listener_delete(self):
+        self._test_listener_delete(const.TCP, 8072)
+
+    @decorators.idempotent_id('8a999856-f448-498c-b891-21af449b5208')
+    def test_tcp_listener_show_stats(self):
+        self._test_listener_show_stats(const.TCP, 8082)
+
+
+class ListenerAPITestUDP(ListenerAPIBase):
+    @decorators.idempotent_id('7b53f336-47bc-45ae-bbd7-4342ef0673fc')
+    def test_udp_listener_create(self):
+        self._test_listener_create(const.UDP, 8003)
+
+    @decorators.idempotent_id('c08fb77e-b317-4d6f-b430-91f5b27ebac6')
+    def test_udp_listener_list(self):
+        self._test_listener_list(const.UDP, 8040)
+
+    @decorators.idempotent_id('1dea3a6b-c95b-4e91-b591-1aa9cbcd0d1d')
+    def test_udp_listener_show(self):
+        self._test_listener_show(const.UDP, 8053)
+
+    @decorators.idempotent_id('fd02dbfd-39ce-41c2-b181-54fc7ad91707')
+    def test_udp_listener_update(self):
+        self._test_listener_update(const.UDP, 8063)
+
+    @decorators.idempotent_id('86bd9717-e3e9-41e3-86c4-888c64455926')
+    def test_udp_listener_delete(self):
+        self._test_listener_delete(const.UDP, 8073)
+
+    @decorators.idempotent_id('a4c1f199-923b-41e4-a134-c91e590e20c4')
+    def test_udp_listener_show_stats(self):
+        self._test_listener_show_stats(const.UDP, 8083)
+
+
+class ListenerAPITestSCTP(ListenerAPIBase):
+
+    @decorators.idempotent_id('d6d36c32-27ff-4977-9d21-fd71a14e3b20')
+    def test_sctp_listener_create(self):
+        self._test_listener_create(const.SCTP, 8004)
+
+    @decorators.idempotent_id('0abc3998-aacd-4edd-88f5-c5c35557646f')
+    def test_sctp_listener_list(self):
+        self._test_listener_list(const.SCTP, 8041)
+
+    @decorators.idempotent_id('10992529-1d0a-47a3-855c-3dbcd868db4e')
+    def test_sctp_listener_show(self):
+        self._test_listener_show(const.SCTP, 8054)
+
+    @decorators.idempotent_id('c590b485-4e08-4e49-b384-2282b3f6f1b9')
+    def test_sctp_listener_update(self):
+        self._test_listener_update(const.SCTP, 8064)
+
+    @decorators.idempotent_id('0de6f1ad-58ae-4b31-86b6-b440fce70244')
+    def test_sctp_listener_delete(self):
+        self._test_listener_delete(const.SCTP, 8074)
+
+    @decorators.idempotent_id('7f6d3906-529c-4b99-8376-b836059df220')
+    def test_sctp_listener_show_stats(self):
+        self._test_listener_show_stats(const.SCTP, 8084)
+
+
+class ListenerAPITestHTTP(ListenerAPIBase):
+
+    @decorators.idempotent_id('88d0ec83-7b08-48d9-96e2-0df1d2f8cd98')
+    def test_http_listener_create(self):
+        self._test_listener_create(const.HTTP, 8000)
+
+    @decorators.idempotent_id('78ba6eb0-178c-477e-9156-b6775ca7b271')
+    def test_http_listener_list(self):
+        self._test_listener_list(const.HTTP, 8020)
+
+    @decorators.idempotent_id('6e299eae-6907-4dfc-89c2-e57709d25d3d')
+    def test_http_listener_show(self):
+        self._test_listener_show(const.HTTP, 8050)
+
+    @decorators.idempotent_id('aaae0298-5778-4c7e-a27a-01549a71b319')
+    def test_http_listener_update(self):
+        self._test_listener_update(const.HTTP, 8060)
+
+    @decorators.idempotent_id('16f11c82-f069-4592-8954-81b35a98e3b7')
+    def test_http_listener_delete(self):
+        self._test_listener_delete(const.HTTP, 8070)
+
+    @decorators.idempotent_id('6f14a6c1-945e-43bc-8215-410c8a5edb25')
+    def test_http_listener_show_stats(self):
+        self._test_listener_show_stats(const.HTTP, 8080)
+
+
+class ListenerAPITestHTTPS(ListenerAPIBase):
+
+    @decorators.idempotent_id('2cc89237-fc6b-434d-b38e-b3309823e71f')
+    def test_https_listener_create(self):
+        self._test_listener_create(const.HTTPS, 8001)
+
+    @decorators.idempotent_id('61b7c643-f5fa-4471-8f9e-2e0ccdaf5ac7')
+    def test_https_listener_list(self):
+        self._test_listener_list(const.HTTPS, 8030)
+
+    @decorators.idempotent_id('aa838646-435f-4a20-8442-519a7a138e7e')
+    def test_https_listener_show(self):
+        self._test_listener_show(const.HTTPS, 8051)
+
+    @decorators.idempotent_id('9679b061-2b2c-469f-abd9-26ed140ef001')
+    def test_https_listener_update(self):
+        self._test_listener_update(const.HTTPS, 8061)
+
+    @decorators.idempotent_id('769526a0-df71-47cd-996e-46484de32223')
+    def test_https_listener_delete(self):
+        self._test_listener_delete(const.HTTPS, 8071)
+
+    @decorators.idempotent_id('f8a43c27-f0a0-496d-a287-1958f337ac04')
+    def test_https_listener_show_stats(self):
+        self._test_listener_show_stats(const.HTTPS, 8081)
+
+
+class ListenerAPITestPrometheus(ListenerAPIBase):
+
+    @classmethod
+    def skip_checks(cls):
+        super().skip_checks()
+        if CONF.load_balancer.provider == 'tungstenfabric':
+            raise cls.skipException("Not supported by TungstenFabric")
+        if not CONF.loadbalancer_feature_enabled.prometheus_listener_enabled:
+            raise cls.skipException(
+                'PROMETHEUS listener tests are disabled '
+                'in the tempest configuration.'
+            )
+
+    @decorators.idempotent_id('1a6ba0d0-f309-4088-a686-dda0e9ab7e43')
+    def test_prometheus_listener_create(self):
+        if not self.mem_listener_client.is_version_supported(
+                self.api_version, '2.25'):
+            raise self.skipException('PROMETHEUS listeners are only available '
+                                     'on Octavia API version 2.25 or newer.')
+        self._test_listener_create(const.PROMETHEUS, 8090)
+
+    @decorators.idempotent_id('5473e071-8277-4ac5-9277-01ecaf46e274')
+    def test_prometheus_listener_list(self):
+        if not self.mem_listener_client.is_version_supported(
+                self.api_version, '2.25'):
+            raise self.skipException('PROMETHEUS listeners are only available '
+                                     'on Octavia API version 2.25 or newer.')
+        self._test_listener_list(const.PROMETHEUS, 8091)
+
+    @decorators.idempotent_id('b851b754-4333-4115-9063-a9fce44c2e46')
+    def test_prometheus_listener_show(self):
+        if not self.mem_listener_client.is_version_supported(
+                self.api_version, '2.25'):
+            raise self.skipException('PROMETHEUS listeners are only available '
+                                     'on Octavia API version 2.25 or newer.')
+        self._test_listener_show(const.PROMETHEUS, 8092)
+
+    @decorators.idempotent_id('cbba6bf8-9184-4da5-95e9-5efe1f89ddf0')
+    def test_prometheus_listener_update(self):
+        if not self.mem_listener_client.is_version_supported(
+                self.api_version, '2.25'):
+            raise self.skipException('PROMETHEUS listeners are only available '
+                                     'on Octavia API version 2.25 or newer.')
+        self._test_listener_update(const.PROMETHEUS, 8093)
+
+    @decorators.idempotent_id('322a6372-6b56-4a3c-87e3-dd82074bc83e')
+    def test_prometheus_listener_delete(self):
+        if not self.mem_listener_client.is_version_supported(
+                self.api_version, '2.25'):
+            raise self.skipException('PROMETHEUS listeners are only available '
+                                     'on Octavia API version 2.25 or newer.')
+        self._test_listener_delete(const.PROMETHEUS, 8094)
+
+
+class ListenerAPITestMultiprotocol(ListenerAPIBase):
+
+    @decorators.idempotent_id('01a21892-008a-4327-b4fd-fbf194ecb1a5')
+    def test_tcp_udp_sctp_http_listener_create_on_same_port(self):
+        self._test_listener_create_on_same_port(const.TCP, const.UDP,
+                                                const.SCTP,
+                                                const.HTTP, 8012)
+
+    @decorators.idempotent_id('cceac303-4db5-4d5a-9f6e-ff33780a5f29')
+    def test_http_udp_sctp_tcp_listener_create_on_same_port(self):
+        self._test_listener_create_on_same_port(const.HTTP, const.UDP,
+                                                const.SCTP,
+                                                const.TCP, 8010)
+
+    @decorators.idempotent_id('930338b8-3029-48a6-89b2-8b062060fe61')
+    def test_http_udp_sctp_https_listener_create_on_same_port(self):
+        self._test_listener_create_on_same_port(const.HTTP, const.UDP,
+                                                const.SCTP,
+                                                const.HTTPS, 8011)
+
+    @decorators.idempotent_id('5da764a4-c03a-46ed-848b-98b9d9fa9089')
+    def test_tcp_udp_sctp_https_listener_create_on_same_port(self):
+        self._test_listener_create_on_same_port(const.TCP, const.UDP,
+                                                const.SCTP,
+                                                const.HTTPS, 8013)
