diff --git a/octavia_tempest_plugin/tests/api/v2/test_healthmonitor.py b/octavia_tempest_plugin/tests/api/v2/test_healthmonitor.py
index 9b12716..faab3bc 100644
--- a/octavia_tempest_plugin/tests/api/v2/test_healthmonitor.py
+++ b/octavia_tempest_plugin/tests/api/v2/test_healthmonitor.py
@@ -31,12 +31,12 @@
 LOG = logging.getLogger(__name__)
 
 
-class HealthMonitorAPITest(test_base.LoadBalancerBaseTest):
+class HealthMonitorAPIBaseTest(test_base.LoadBalancerBaseTest):
     """Test the healthmonitor object API."""
 
     @classmethod
     def skip_checks(cls):
-        super(HealthMonitorAPITest, cls).skip_checks()
+        super(HealthMonitorAPIBaseTest, cls).skip_checks()
         if CONF.load_balancer.provider == 'tungstenfabric':
             raise cls.skipException("Health monitor entity isn't applicable "
                                     "in case of TungstenFabric.")
@@ -44,7 +44,7 @@
     @classmethod
     def resource_setup(cls):
         """Setup resources needed by the tests."""
-        super(HealthMonitorAPITest, cls).resource_setup()
+        super(HealthMonitorAPIBaseTest, cls).resource_setup()
 
         lb_name = data_utils.rand_name("lb_member_lb1_hm")
         lb_kwargs = {const.PROVIDER: CONF.load_balancer.provider,
@@ -64,150 +64,6 @@
                                 CONF.load_balancer.lb_build_interval,
                                 CONF.load_balancer.lb_build_timeout)
 
-    @decorators.idempotent_id('bc3fc817-3368-4e1e-bb6d-52c4de3fb10c')
-    def test_LC_HTTP_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.HTTP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('18fcd6b8-9fc3-4858-83f6-d8800052b655')
-    def test_LC_HTTPS_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.HTTPS, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('5b0446f2-374e-4e74-9865-72e16a19c587')
-    def test_LC_PING_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('46c4e159-84d2-4876-9298-ac85561d3bd0')
-    def test_LC_TCP_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('a15f7319-2d3b-4ec8-9d70-e77a55045145')
-    def test_LC_TLS_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('f609b2c2-391d-4bc9-9793-9a4bc30ab00b')
-    def test_LC_UDP_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_UDP_CONNECT)
-
-    @decorators.idempotent_id('4f20473f-ab02-4426-8d15-cf34b3c72558')
-    def test_RR_HTTP_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('abfff805-5491-4aef-9952-45b553cbebbb')
-    def test_RR_HTTPS_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('ac64228e-dc4c-4116-b610-5783a85a87f1')
-    def test_RR_PING_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('e3ac7193-1dc9-41df-a4e2-7d40ca70a678')
-    def test_RR_TCP_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('54952a9a-b3ef-4b36-a586-9adcd63dfc49')
-    def test_RR_TLS_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('9af20b3c-fc42-4365-a4e9-cecbdddf90c0')
-    def test_RR_UDP_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.UDP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_UDP_CONNECT)
-
-    @decorators.idempotent_id('35b076a4-dfb1-4557-9eac-a33982f73856')
-    def test_SI_HTTP_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.HTTP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('965804cb-d6a1-4fdd-99dc-948829e0c046')
-    def test_SI_HTTPS_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.HTTPS, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('eb86eab1-4cdf-40fc-b633-679d7fb64806')
-    def test_SI_PING_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('6bdab976-b6ad-4c83-87ab-0d184e80eb2c')
-    def test_SI_TCP_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('4f8111dd-4f03-4740-ae4b-b13b731f45a0')
-    def test_SI_TLS_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('d98365ca-56ba-450d-955f-d1c06c329960')
-    def test_SI_UDP_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.UDP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_UDP_CONNECT)
-
-    @decorators.idempotent_id('acab47f5-3006-4e84-a55f-e9dfe33113d2')
-    def test_SIP_HTTP_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('ca42a541-3280-4496-8604-9ce64e1992d6')
-    def test_SIP_HTTPS_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('78c8e5fc-3ba0-44d0-ac4a-93a90fb59c3f')
-    def test_SIP_PING_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('d5b50306-a3bd-4293-96ed-17a2897d57cc')
-    def test_SIP_TCP_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('204556df-185e-4305-b1b7-e8d345d645e4')
-    def test_SIP_TLS_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('2de53a00-c631-4985-abc1-89070ac2515f')
-    def test_SIP_UDP_healthmonitor_create(self):
-        self._test_healthmonitor_create(
-            const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_UDP_CONNECT)
-
     def _test_healthmonitor_create(self, pool_protocol, pool_algorithm,
                                    hm_type):
         """Tests healthmonitor create and basic show APIs.
@@ -348,150 +204,6 @@
     def _filter_hms_by_index(self, hms, indexes):
         return [hm for i, hm in enumerate(hms) if i not in indexes]
 
-    @decorators.idempotent_id('9e4b1298-b6a0-46c7-b8e4-afcd31f904d3')
-    def test_LC_HTTP_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.HTTP,
-                                      const.LB_ALGORITHM_LEAST_CONNECTIONS,
-                                      const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('7488b1e1-12b5-4a42-9d78-9e08060ec7b1')
-    def test_LC_HTTPS_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.HTTPS,
-                                      const.LB_ALGORITHM_LEAST_CONNECTIONS,
-                                      const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('1f93483c-29ae-4ac1-a588-9ce9bd837232')
-    def test_LC_PING_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.TCP,
-                                      const.LB_ALGORITHM_LEAST_CONNECTIONS,
-                                      const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('49ccd27c-3a4c-41e5-bcb0-d4f03ecc3e79')
-    def test_LC_TCP_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.TCP,
-                                      const.LB_ALGORITHM_LEAST_CONNECTIONS,
-                                      const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('60a254dc-4764-45f2-a183-8102063462e0')
-    def test_LC_TLS_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.TCP,
-                                      const.LB_ALGORITHM_LEAST_CONNECTIONS,
-                                      const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('6637d37d-76aa-455a-ba73-8f1a12edcedd')
-    def test_LC_UDP_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.UDP,
-                                      const.LB_ALGORITHM_LEAST_CONNECTIONS,
-                                      const.HEALTH_MONITOR_UDP_CONNECT)
-
-    @decorators.idempotent_id('c9a9f20c-3680-4ae8-b657-33c687258fea')
-    def test_RR_HTTP_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.HTTP,
-                                      const.LB_ALGORITHM_ROUND_ROBIN,
-                                      const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('93c0d03a-eb32-457b-a5af-96c03a891c06')
-    def test_RR_HTTPS_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.HTTPS,
-                                      const.LB_ALGORITHM_ROUND_ROBIN,
-                                      const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('2ef2944f-dd56-40a5-9100-4e1b86c623af')
-    def test_RR_PING_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.TCP,
-                                      const.LB_ALGORITHM_ROUND_ROBIN,
-                                      const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('5912534f-20b3-45b7-9907-9247bf05cd13')
-    def test_RR_TCP_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.TCP,
-                                      const.LB_ALGORITHM_ROUND_ROBIN,
-                                      const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('5d169fe7-16f3-4f70-8b1e-72aeeec4fd61')
-    def test_RR_TLS_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.TCP,
-                                      const.LB_ALGORITHM_ROUND_ROBIN,
-                                      const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('3f81050e-4218-46fa-8d85-09807b8cdded')
-    def test_RR_UDP_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.UDP,
-                                      const.LB_ALGORITHM_ROUND_ROBIN,
-                                      const.HEALTH_MONITOR_UDP_CONNECT)
-
-    @decorators.idempotent_id('2df98839-7b2a-46c4-9da7-34e3d1c33851')
-    def test_SI_HTTP_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.HTTP,
-                                      const.LB_ALGORITHM_SOURCE_IP,
-                                      const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('1ce28897-917c-4e7a-89bb-cc2aabd67037')
-    def test_SI_HTTPS_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.HTTPS,
-                                      const.LB_ALGORITHM_SOURCE_IP,
-                                      const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('e8418eaa-73a5-4d56-8ca5-314dd2141dc9')
-    def test_SI_PING_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.TCP,
-                                      const.LB_ALGORITHM_SOURCE_IP,
-                                      const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('25203919-a039-43a4-84db-15279cbd2ec7')
-    def test_SI_TCP_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.TCP,
-                                      const.LB_ALGORITHM_SOURCE_IP,
-                                      const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('4f84c05e-d4a7-4998-98cd-bc74024309f4')
-    def test_SI_TLS_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.TCP,
-                                      const.LB_ALGORITHM_SOURCE_IP,
-                                      const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('4cb10c86-a875-4a9e-be8f-c0afc8aa5633')
-    def test_SI_UDP_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.UDP,
-                                      const.LB_ALGORITHM_SOURCE_IP,
-                                      const.HEALTH_MONITOR_UDP_CONNECT)
-
-    @decorators.idempotent_id('45bdd757-3132-4ede-8584-c46bc2f8f19e')
-    def test_SIP_HTTP_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.HTTP,
-                                      const.LB_ALGORITHM_SOURCE_IP_PORT,
-                                      const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('300db789-b231-45be-863d-f4d6116660d3')
-    def test_SIP_HTTPS_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.HTTPS,
-                                      const.LB_ALGORITHM_SOURCE_IP_PORT,
-                                      const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('a1d534ba-ada9-4d7c-8e17-6e520a27c110')
-    def test_SIP_PING_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.TCP,
-                                      const.LB_ALGORITHM_SOURCE_IP_PORT,
-                                      const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('12c29b89-bbbc-46b0-89c5-beb42fc52181')
-    def test_SIP_TCP_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.TCP,
-                                      const.LB_ALGORITHM_SOURCE_IP_PORT,
-                                      const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('a3b01b12-f4cb-4b2a-9f62-af24834ce19b')
-    def test_SIP_TLS_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.TCP,
-                                      const.LB_ALGORITHM_SOURCE_IP_PORT,
-                                      const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('571e139b-08ae-4e8c-b25c-0e0bb9d198af')
-    def test_SIP_UDP_healthmonitor_list(self):
-        self._test_healthmonitor_list(const.UDP,
-                                      const.LB_ALGORITHM_SOURCE_IP_PORT,
-                                      const.HEALTH_MONITOR_UDP_CONNECT)
-
     def _test_healthmonitor_list(self, pool_protocol, pool_algorithm, hm_type):
         """Tests healthmonitor list API and field filtering.
 
@@ -949,150 +661,6 @@
             self.assertTrue(not any(["" in hm[const.TAGS]
                                      for hm in list_of_hms]))
 
-    @decorators.idempotent_id('358afb0b-6259-46be-a0b3-b11e5e202624')
-    def test_LC_HTTP_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.HTTP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('c2476eea-8ae1-40ed-be55-0125f9399bd4')
-    def test_LC_HTTPS_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.HTTPS, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('1489251c-0704-4735-bf62-801b5277c5c9')
-    def test_LC_PING_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('c761f90e-7b9c-400b-b540-e7c14f65d0a8')
-    def test_LC_TCP_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('8ed512d7-9fd7-4932-bf5f-090498b384bb')
-    def test_LC_TLS_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('a3a9be7e-83d6-42cb-b603-f14a464b8268')
-    def test_LC_UDP_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_UDP_CONNECT)
-
-    @decorators.idempotent_id('284e8d3b-7b2d-4697-9e41-580b3423c0b4')
-    def test_RR_HTTP_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('eeb4967b-ce46-4717-a750-3e740223a804')
-    def test_RR_HTTPS_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('799ada1b-c082-42c5-b6ea-477f10fc88ce')
-    def test_RR_PING_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('d2eae7f4-43b4-4696-93ed-a30f95c978fe')
-    def test_RR_TCP_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('5ce6eecc-d425-47cd-809f-aab5c56e1a9d')
-    def test_RR_TLS_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('a6a46e6a-a063-46bf-972c-86d0305fb766')
-    def test_RR_UDP_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.UDP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_UDP_CONNECT)
-
-    @decorators.idempotent_id('54d693ba-1ba4-4388-b020-c29dc3184522')
-    def test_SI_HTTP_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.HTTP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('2638718e-b345-4868-b527-9bed575e27d6')
-    def test_SI_HTTPS_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.HTTPS, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('124a5ca1-5eae-4ed0-8528-7a499e9ad7a2')
-    def test_SI_PING_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('098ae671-1791-455a-a5a8-ada8c592a2dd')
-    def test_SI_TCP_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('eef8f780-b557-447f-9f61-b1f3e6daec77')
-    def test_SI_TLS_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('9b6d9c45-4696-4f6a-8816-594b03e3ee5b')
-    def test_SI_UDP_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.UDP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_UDP_CONNECT)
-
-    @decorators.idempotent_id('5653ea25-c7e0-4c72-8b2a-19dd97dd5a69')
-    def test_SIP_HTTP_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('fff4472d-b4de-4b8b-9748-476ffc7c8e13')
-    def test_SIP_HTTPS_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('1af98ebe-3f3c-4e5f-8f72-ecbd9b25c69f')
-    def test_SIP_PING_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('40169a7d-84ac-4362-b8d7-64b9b807ce7e')
-    def test_SIP_TCP_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('15146c2e-e1c1-48ac-a7d8-3a1b4de590b2')
-    def test_SIP_TLS_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('008042da-3734-4bbb-b8b2-f4ad9e2dab21')
-    def test_SIP_UDP_healthmonitor_show(self):
-        self._test_healthmonitor_show(
-            const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_UDP_CONNECT)
-
     def _test_healthmonitor_show(self, pool_protocol, pool_algorithm, hm_type):
         """Tests healthmonitor show API.
 
@@ -1213,150 +781,6 @@
                 'HealthMonitorClient', 'show_healthmonitor',
                 expected_allowed, hm[const.ID])
 
-    @decorators.idempotent_id('2417164b-ec03-4488-afd2-60b096dc0077')
-    def test_LC_HTTP_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.HTTP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('5d88aa1e-2db9-43f8-bb9b-4673c2060835')
-    def test_LC_HTTPS_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.HTTPS, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('61908142-9768-44aa-9a4b-b3904560a0dc')
-    def test_LC_PING_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('649bdfa3-1009-4f88-bc92-c3e3141c493e')
-    def test_LC_TCP_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('365fffd3-0817-4907-aab1-7da60736ba60')
-    def test_LC_TLS_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('df29f696-a321-4626-acb2-6f66105e1661')
-    def test_LC_UDP_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_UDP_CONNECT)
-
-    @decorators.idempotent_id('fa584b2c-f179-4c4e-ad2e-ff51fd1c5973')
-    def test_RR_HTTP_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('b927836a-2770-46ff-92de-3031c5240da6')
-    def test_RR_HTTPS_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('cdd559b1-5c7b-492f-9c8d-c1da6e8d7b3b')
-    def test_RR_PING_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('1b9c310e-cffe-4f6a-b1af-021f751fc2a9')
-    def test_RR_TCP_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('4b3c9a67-f884-43a3-8f42-bac68be7060b')
-    def test_RR_TLS_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('805e2976-962a-4bb0-a9cc-97270a42c376')
-    def test_RR_UDP_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.UDP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_UDP_CONNECT)
-
-    @decorators.idempotent_id('654e4ce3-b579-4595-b1a1-6762f64b2408')
-    def test_SI_HTTP_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.HTTP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('879ef60a-4621-45aa-a520-b57da3b1fddc')
-    def test_SI_HTTPS_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.HTTPS, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('66e83157-53c3-4eac-a7f0-e3dc4f51de06')
-    def test_SI_PING_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('ce475c4c-d01a-4cde-be71-555c84f2b8da')
-    def test_SI_TCP_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('b292478f-5c26-462e-b222-103be3b115d3')
-    def test_SI_TLS_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('49ccc552-752b-4f84-9900-65908cb13add')
-    def test_SI_UDP_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.UDP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_UDP_CONNECT)
-
-    @decorators.idempotent_id('d141d8d1-fa12-49cb-9d6d-413998aa2dc5')
-    def test_SIP_HTTP_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('9a1bbbbb-c640-48cb-bd1a-e3d3fd2602af')
-    def test_SIP_HTTPS_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('3f573e31-49b9-45d0-bb00-8483f48ae422')
-    def test_SIP_PING_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('1a6922fd-9e8c-4836-9a6a-087f09249a49')
-    def test_SIP_TCP_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('e9468e81-dbff-4e88-8d4b-e2a54835c2d8')
-    def test_SIP_TLS_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('64379cb2-b789-4fe6-ae3a-e62b907c6365')
-    def test_SIP_UDP_healthmonitor_update(self):
-        self._test_healthmonitor_update(
-            const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_UDP_CONNECT)
-
     def _test_healthmonitor_update(self, pool_protocol, pool_algorithm,
                                    hm_type):
         """Tests healthmonitor update and show APIs.
@@ -1562,150 +986,6 @@
         for item in equal_items:
             self.assertEqual(hm_kwargs[item], hm[item])
 
-    @decorators.idempotent_id('76b3d116-0190-4de8-a58e-8e450a46a621')
-    def test_LC_HTTP_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.HTTP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('8e277e7f-49ea-4fcf-98e6-12566cc33846')
-    def test_LC_HTTPS_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.HTTPS, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('c6646a25-b46d-4541-82de-75ee2beef052')
-    def test_LC_PING_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('5cfacffe-63f2-4aa3-856a-9fa3dafa2d33')
-    def test_LC_TCP_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('a4055e48-7740-4ff5-b6e2-9e69b1d40dce')
-    def test_LC_TLS_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('369bd443-54ec-4071-a279-5ac1ed38c52d')
-    def test_LC_UDP_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
-            const.HEALTH_MONITOR_UDP_CONNECT)
-
-    @decorators.idempotent_id('a7bab4ac-340c-4776-ab9d-9fcb66869432')
-    def test_RR_HTTP_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('2991664a-9138-4c10-8e30-2cb6a82bb5b4')
-    def test_RR_HTTPS_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('31f7c2c2-9174-4538-8dce-35128bc47ce7')
-    def test_RR_PING_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('56e0cd28-3e74-498c-b55b-21078a758d1f')
-    def test_RR_TCP_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('e22a02e2-411a-46d5-9a3a-20ff37cbc835')
-    def test_RR_TLS_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('9221a59f-3f0f-41e8-b65c-cdbcca1a2eca')
-    def test_RR_UDP_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.UDP, const.LB_ALGORITHM_ROUND_ROBIN,
-            const.HEALTH_MONITOR_UDP_CONNECT)
-
-    @decorators.idempotent_id('717e447f-d5c8-485a-923b-da83e560273b')
-    def test_SI_HTTP_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.HTTP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('2e177a95-4ec8-4847-bd35-706b6452406a')
-    def test_SI_HTTPS_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.HTTPS, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('17127700-dc5f-4546-a6e6-c0b851704836')
-    def test_SI_PING_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('0b1699c2-ff3e-47b6-a1ad-7128465d1233')
-    def test_SI_TCP_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('4ad99064-9015-40b3-8d5b-6cc99e2cc8b9')
-    def test_SI_TLS_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('a17825ff-e774-4230-9c53-b53bfc355d61')
-    def test_SI_UDP_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.UDP, const.LB_ALGORITHM_SOURCE_IP,
-            const.HEALTH_MONITOR_UDP_CONNECT)
-
-    @decorators.idempotent_id('142022cc-9be3-4695-9acf-a7576e4b3268')
-    def test_SIP_HTTP_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_HTTP)
-
-    @decorators.idempotent_id('dfd994b2-511b-433f-95f7-0786f1857090')
-    def test_SIP_HTTPS_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_HTTPS)
-
-    @decorators.idempotent_id('0d08ffc0-6e6a-470d-abed-5c101a828401')
-    def test_SIP_PING_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_PING)
-
-    @decorators.idempotent_id('ccf4a10c-2e72-4dbf-bc2f-134156eac3e2')
-    def test_SIP_TCP_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_TCP)
-
-    @decorators.idempotent_id('aaacc11e-98cd-4322-a7db-7c720eafd2b2')
-    def test_SIP_TLS_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_TLS_HELLO)
-
-    @decorators.idempotent_id('559eccf4-eb7c-4d23-9dc8-741cc1601fc7')
-    def test_SIP_UDP_healthmonitor_delete(self):
-        self._test_healthmonitor_delete(
-            const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT,
-            const.HEALTH_MONITOR_UDP_CONNECT)
-
     def _test_healthmonitor_delete(self, pool_protocol, pool_algorithm,
                                    hm_type):
         """Tests healthmonitor create and delete APIs.
@@ -1809,3 +1089,735 @@
             const.ACTIVE,
             CONF.load_balancer.check_interval,
             CONF.load_balancer.check_timeout)
+
+
+class HealthMonitorLeastConnectionsAPITest(HealthMonitorAPIBaseTest):
+
+    @decorators.idempotent_id('bc3fc817-3368-4e1e-bb6d-52c4de3fb10c')
+    def test_LC_HTTP_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.HTTP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('18fcd6b8-9fc3-4858-83f6-d8800052b655')
+    def test_LC_HTTPS_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.HTTPS, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('5b0446f2-374e-4e74-9865-72e16a19c587')
+    def test_LC_PING_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('46c4e159-84d2-4876-9298-ac85561d3bd0')
+    def test_LC_TCP_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('a15f7319-2d3b-4ec8-9d70-e77a55045145')
+    def test_LC_TLS_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('f609b2c2-391d-4bc9-9793-9a4bc30ab00b')
+    def test_LC_UDP_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_UDP_CONNECT)
+
+    @decorators.idempotent_id('9e4b1298-b6a0-46c7-b8e4-afcd31f904d3')
+    def test_LC_HTTP_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.HTTP,
+                                      const.LB_ALGORITHM_LEAST_CONNECTIONS,
+                                      const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('7488b1e1-12b5-4a42-9d78-9e08060ec7b1')
+    def test_LC_HTTPS_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.HTTPS,
+                                      const.LB_ALGORITHM_LEAST_CONNECTIONS,
+                                      const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('1f93483c-29ae-4ac1-a588-9ce9bd837232')
+    def test_LC_PING_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.TCP,
+                                      const.LB_ALGORITHM_LEAST_CONNECTIONS,
+                                      const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('49ccd27c-3a4c-41e5-bcb0-d4f03ecc3e79')
+    def test_LC_TCP_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.TCP,
+                                      const.LB_ALGORITHM_LEAST_CONNECTIONS,
+                                      const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('60a254dc-4764-45f2-a183-8102063462e0')
+    def test_LC_TLS_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.TCP,
+                                      const.LB_ALGORITHM_LEAST_CONNECTIONS,
+                                      const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('6637d37d-76aa-455a-ba73-8f1a12edcedd')
+    def test_LC_UDP_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.UDP,
+                                      const.LB_ALGORITHM_LEAST_CONNECTIONS,
+                                      const.HEALTH_MONITOR_UDP_CONNECT)
+
+    @decorators.idempotent_id('358afb0b-6259-46be-a0b3-b11e5e202624')
+    def test_LC_HTTP_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.HTTP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('c2476eea-8ae1-40ed-be55-0125f9399bd4')
+    def test_LC_HTTPS_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.HTTPS, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('1489251c-0704-4735-bf62-801b5277c5c9')
+    def test_LC_PING_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('c761f90e-7b9c-400b-b540-e7c14f65d0a8')
+    def test_LC_TCP_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('8ed512d7-9fd7-4932-bf5f-090498b384bb')
+    def test_LC_TLS_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('a3a9be7e-83d6-42cb-b603-f14a464b8268')
+    def test_LC_UDP_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_UDP_CONNECT)
+
+    @decorators.idempotent_id('2417164b-ec03-4488-afd2-60b096dc0077')
+    def test_LC_HTTP_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.HTTP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('5d88aa1e-2db9-43f8-bb9b-4673c2060835')
+    def test_LC_HTTPS_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.HTTPS, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('61908142-9768-44aa-9a4b-b3904560a0dc')
+    def test_LC_PING_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('649bdfa3-1009-4f88-bc92-c3e3141c493e')
+    def test_LC_TCP_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('365fffd3-0817-4907-aab1-7da60736ba60')
+    def test_LC_TLS_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('df29f696-a321-4626-acb2-6f66105e1661')
+    def test_LC_UDP_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_UDP_CONNECT)
+
+    @decorators.idempotent_id('76b3d116-0190-4de8-a58e-8e450a46a621')
+    def test_LC_HTTP_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.HTTP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('8e277e7f-49ea-4fcf-98e6-12566cc33846')
+    def test_LC_HTTPS_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.HTTPS, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('c6646a25-b46d-4541-82de-75ee2beef052')
+    def test_LC_PING_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('5cfacffe-63f2-4aa3-856a-9fa3dafa2d33')
+    def test_LC_TCP_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('a4055e48-7740-4ff5-b6e2-9e69b1d40dce')
+    def test_LC_TLS_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('369bd443-54ec-4071-a279-5ac1ed38c52d')
+    def test_LC_UDP_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS,
+            const.HEALTH_MONITOR_UDP_CONNECT)
+
+
+class HealthMonitorRoundRobinAPITest(HealthMonitorAPIBaseTest):
+
+    @decorators.idempotent_id('4f20473f-ab02-4426-8d15-cf34b3c72558')
+    def test_RR_HTTP_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('abfff805-5491-4aef-9952-45b553cbebbb')
+    def test_RR_HTTPS_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('ac64228e-dc4c-4116-b610-5783a85a87f1')
+    def test_RR_PING_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('e3ac7193-1dc9-41df-a4e2-7d40ca70a678')
+    def test_RR_TCP_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('54952a9a-b3ef-4b36-a586-9adcd63dfc49')
+    def test_RR_TLS_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('9af20b3c-fc42-4365-a4e9-cecbdddf90c0')
+    def test_RR_UDP_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.UDP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_UDP_CONNECT)
+
+    @decorators.idempotent_id('c9a9f20c-3680-4ae8-b657-33c687258fea')
+    def test_RR_HTTP_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.HTTP,
+                                      const.LB_ALGORITHM_ROUND_ROBIN,
+                                      const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('93c0d03a-eb32-457b-a5af-96c03a891c06')
+    def test_RR_HTTPS_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.HTTPS,
+                                      const.LB_ALGORITHM_ROUND_ROBIN,
+                                      const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('2ef2944f-dd56-40a5-9100-4e1b86c623af')
+    def test_RR_PING_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.TCP,
+                                      const.LB_ALGORITHM_ROUND_ROBIN,
+                                      const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('5912534f-20b3-45b7-9907-9247bf05cd13')
+    def test_RR_TCP_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.TCP,
+                                      const.LB_ALGORITHM_ROUND_ROBIN,
+                                      const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('5d169fe7-16f3-4f70-8b1e-72aeeec4fd61')
+    def test_RR_TLS_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.TCP,
+                                      const.LB_ALGORITHM_ROUND_ROBIN,
+                                      const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('3f81050e-4218-46fa-8d85-09807b8cdded')
+    def test_RR_UDP_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.UDP,
+                                      const.LB_ALGORITHM_ROUND_ROBIN,
+                                      const.HEALTH_MONITOR_UDP_CONNECT)
+
+    @decorators.idempotent_id('284e8d3b-7b2d-4697-9e41-580b3423c0b4')
+    def test_RR_HTTP_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('eeb4967b-ce46-4717-a750-3e740223a804')
+    def test_RR_HTTPS_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('799ada1b-c082-42c5-b6ea-477f10fc88ce')
+    def test_RR_PING_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('d2eae7f4-43b4-4696-93ed-a30f95c978fe')
+    def test_RR_TCP_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('5ce6eecc-d425-47cd-809f-aab5c56e1a9d')
+    def test_RR_TLS_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('a6a46e6a-a063-46bf-972c-86d0305fb766')
+    def test_RR_UDP_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.UDP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_UDP_CONNECT)
+
+    @decorators.idempotent_id('fa584b2c-f179-4c4e-ad2e-ff51fd1c5973')
+    def test_RR_HTTP_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('b927836a-2770-46ff-92de-3031c5240da6')
+    def test_RR_HTTPS_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('cdd559b1-5c7b-492f-9c8d-c1da6e8d7b3b')
+    def test_RR_PING_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('1b9c310e-cffe-4f6a-b1af-021f751fc2a9')
+    def test_RR_TCP_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('4b3c9a67-f884-43a3-8f42-bac68be7060b')
+    def test_RR_TLS_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('805e2976-962a-4bb0-a9cc-97270a42c376')
+    def test_RR_UDP_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.UDP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_UDP_CONNECT)
+
+    @decorators.idempotent_id('a7bab4ac-340c-4776-ab9d-9fcb66869432')
+    def test_RR_HTTP_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('2991664a-9138-4c10-8e30-2cb6a82bb5b4')
+    def test_RR_HTTPS_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('31f7c2c2-9174-4538-8dce-35128bc47ce7')
+    def test_RR_PING_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('56e0cd28-3e74-498c-b55b-21078a758d1f')
+    def test_RR_TCP_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('e22a02e2-411a-46d5-9a3a-20ff37cbc835')
+    def test_RR_TLS_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.TCP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('9221a59f-3f0f-41e8-b65c-cdbcca1a2eca')
+    def test_RR_UDP_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.UDP, const.LB_ALGORITHM_ROUND_ROBIN,
+            const.HEALTH_MONITOR_UDP_CONNECT)
+
+
+class HealthMonitorSourceIPAPITest(HealthMonitorAPIBaseTest):
+
+    @decorators.idempotent_id('35b076a4-dfb1-4557-9eac-a33982f73856')
+    def test_SI_HTTP_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.HTTP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('965804cb-d6a1-4fdd-99dc-948829e0c046')
+    def test_SI_HTTPS_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.HTTPS, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('eb86eab1-4cdf-40fc-b633-679d7fb64806')
+    def test_SI_PING_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('6bdab976-b6ad-4c83-87ab-0d184e80eb2c')
+    def test_SI_TCP_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('4f8111dd-4f03-4740-ae4b-b13b731f45a0')
+    def test_SI_TLS_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('d98365ca-56ba-450d-955f-d1c06c329960')
+    def test_SI_UDP_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.UDP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_UDP_CONNECT)
+
+    @decorators.idempotent_id('2df98839-7b2a-46c4-9da7-34e3d1c33851')
+    def test_SI_HTTP_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.HTTP,
+                                      const.LB_ALGORITHM_SOURCE_IP,
+                                      const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('1ce28897-917c-4e7a-89bb-cc2aabd67037')
+    def test_SI_HTTPS_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.HTTPS,
+                                      const.LB_ALGORITHM_SOURCE_IP,
+                                      const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('e8418eaa-73a5-4d56-8ca5-314dd2141dc9')
+    def test_SI_PING_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.TCP,
+                                      const.LB_ALGORITHM_SOURCE_IP,
+                                      const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('25203919-a039-43a4-84db-15279cbd2ec7')
+    def test_SI_TCP_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.TCP,
+                                      const.LB_ALGORITHM_SOURCE_IP,
+                                      const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('4f84c05e-d4a7-4998-98cd-bc74024309f4')
+    def test_SI_TLS_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.TCP,
+                                      const.LB_ALGORITHM_SOURCE_IP,
+                                      const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('4cb10c86-a875-4a9e-be8f-c0afc8aa5633')
+    def test_SI_UDP_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.UDP,
+                                      const.LB_ALGORITHM_SOURCE_IP,
+                                      const.HEALTH_MONITOR_UDP_CONNECT)
+
+    @decorators.idempotent_id('54d693ba-1ba4-4388-b020-c29dc3184522')
+    def test_SI_HTTP_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.HTTP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('2638718e-b345-4868-b527-9bed575e27d6')
+    def test_SI_HTTPS_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.HTTPS, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('124a5ca1-5eae-4ed0-8528-7a499e9ad7a2')
+    def test_SI_PING_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('098ae671-1791-455a-a5a8-ada8c592a2dd')
+    def test_SI_TCP_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('eef8f780-b557-447f-9f61-b1f3e6daec77')
+    def test_SI_TLS_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('9b6d9c45-4696-4f6a-8816-594b03e3ee5b')
+    def test_SI_UDP_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.UDP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_UDP_CONNECT)
+
+    @decorators.idempotent_id('654e4ce3-b579-4595-b1a1-6762f64b2408')
+    def test_SI_HTTP_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.HTTP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('879ef60a-4621-45aa-a520-b57da3b1fddc')
+    def test_SI_HTTPS_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.HTTPS, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('66e83157-53c3-4eac-a7f0-e3dc4f51de06')
+    def test_SI_PING_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('ce475c4c-d01a-4cde-be71-555c84f2b8da')
+    def test_SI_TCP_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('b292478f-5c26-462e-b222-103be3b115d3')
+    def test_SI_TLS_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('49ccc552-752b-4f84-9900-65908cb13add')
+    def test_SI_UDP_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.UDP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_UDP_CONNECT)
+
+    @decorators.idempotent_id('717e447f-d5c8-485a-923b-da83e560273b')
+    def test_SI_HTTP_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.HTTP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('2e177a95-4ec8-4847-bd35-706b6452406a')
+    def test_SI_HTTPS_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.HTTPS, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('17127700-dc5f-4546-a6e6-c0b851704836')
+    def test_SI_PING_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('0b1699c2-ff3e-47b6-a1ad-7128465d1233')
+    def test_SI_TCP_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('4ad99064-9015-40b3-8d5b-6cc99e2cc8b9')
+    def test_SI_TLS_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('a17825ff-e774-4230-9c53-b53bfc355d61')
+    def test_SI_UDP_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.UDP, const.LB_ALGORITHM_SOURCE_IP,
+            const.HEALTH_MONITOR_UDP_CONNECT)
+
+
+class HealthMonitorSourceIPPortAPITest(HealthMonitorAPIBaseTest):
+
+    @decorators.idempotent_id('acab47f5-3006-4e84-a55f-e9dfe33113d2')
+    def test_SIP_HTTP_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('ca42a541-3280-4496-8604-9ce64e1992d6')
+    def test_SIP_HTTPS_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('78c8e5fc-3ba0-44d0-ac4a-93a90fb59c3f')
+    def test_SIP_PING_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('d5b50306-a3bd-4293-96ed-17a2897d57cc')
+    def test_SIP_TCP_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('204556df-185e-4305-b1b7-e8d345d645e4')
+    def test_SIP_TLS_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('2de53a00-c631-4985-abc1-89070ac2515f')
+    def test_SIP_UDP_healthmonitor_create(self):
+        self._test_healthmonitor_create(
+            const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_UDP_CONNECT)
+
+    @decorators.idempotent_id('45bdd757-3132-4ede-8584-c46bc2f8f19e')
+    def test_SIP_HTTP_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.HTTP,
+                                      const.LB_ALGORITHM_SOURCE_IP_PORT,
+                                      const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('300db789-b231-45be-863d-f4d6116660d3')
+    def test_SIP_HTTPS_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.HTTPS,
+                                      const.LB_ALGORITHM_SOURCE_IP_PORT,
+                                      const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('a1d534ba-ada9-4d7c-8e17-6e520a27c110')
+    def test_SIP_PING_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.TCP,
+                                      const.LB_ALGORITHM_SOURCE_IP_PORT,
+                                      const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('12c29b89-bbbc-46b0-89c5-beb42fc52181')
+    def test_SIP_TCP_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.TCP,
+                                      const.LB_ALGORITHM_SOURCE_IP_PORT,
+                                      const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('a3b01b12-f4cb-4b2a-9f62-af24834ce19b')
+    def test_SIP_TLS_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.TCP,
+                                      const.LB_ALGORITHM_SOURCE_IP_PORT,
+                                      const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('571e139b-08ae-4e8c-b25c-0e0bb9d198af')
+    def test_SIP_UDP_healthmonitor_list(self):
+        self._test_healthmonitor_list(const.UDP,
+                                      const.LB_ALGORITHM_SOURCE_IP_PORT,
+                                      const.HEALTH_MONITOR_UDP_CONNECT)
+
+    @decorators.idempotent_id('5653ea25-c7e0-4c72-8b2a-19dd97dd5a69')
+    def test_SIP_HTTP_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('fff4472d-b4de-4b8b-9748-476ffc7c8e13')
+    def test_SIP_HTTPS_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('1af98ebe-3f3c-4e5f-8f72-ecbd9b25c69f')
+    def test_SIP_PING_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('40169a7d-84ac-4362-b8d7-64b9b807ce7e')
+    def test_SIP_TCP_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('15146c2e-e1c1-48ac-a7d8-3a1b4de590b2')
+    def test_SIP_TLS_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('008042da-3734-4bbb-b8b2-f4ad9e2dab21')
+    def test_SIP_UDP_healthmonitor_show(self):
+        self._test_healthmonitor_show(
+            const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_UDP_CONNECT)
+
+    @decorators.idempotent_id('d141d8d1-fa12-49cb-9d6d-413998aa2dc5')
+    def test_SIP_HTTP_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('9a1bbbbb-c640-48cb-bd1a-e3d3fd2602af')
+    def test_SIP_HTTPS_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('3f573e31-49b9-45d0-bb00-8483f48ae422')
+    def test_SIP_PING_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('1a6922fd-9e8c-4836-9a6a-087f09249a49')
+    def test_SIP_TCP_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('e9468e81-dbff-4e88-8d4b-e2a54835c2d8')
+    def test_SIP_TLS_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('64379cb2-b789-4fe6-ae3a-e62b907c6365')
+    def test_SIP_UDP_healthmonitor_update(self):
+        self._test_healthmonitor_update(
+            const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_UDP_CONNECT)
+
+    @decorators.idempotent_id('142022cc-9be3-4695-9acf-a7576e4b3268')
+    def test_SIP_HTTP_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_HTTP)
+
+    @decorators.idempotent_id('dfd994b2-511b-433f-95f7-0786f1857090')
+    def test_SIP_HTTPS_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_HTTPS)
+
+    @decorators.idempotent_id('0d08ffc0-6e6a-470d-abed-5c101a828401')
+    def test_SIP_PING_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_PING)
+
+    @decorators.idempotent_id('ccf4a10c-2e72-4dbf-bc2f-134156eac3e2')
+    def test_SIP_TCP_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_TCP)
+
+    @decorators.idempotent_id('aaacc11e-98cd-4322-a7db-7c720eafd2b2')
+    def test_SIP_TLS_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_TLS_HELLO)
+
+    @decorators.idempotent_id('559eccf4-eb7c-4d23-9dc8-741cc1601fc7')
+    def test_SIP_UDP_healthmonitor_delete(self):
+        self._test_healthmonitor_delete(
+            const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT,
+            const.HEALTH_MONITOR_UDP_CONNECT)
diff --git a/octavia_tempest_plugin/tests/api/v2/test_member.py b/octavia_tempest_plugin/tests/api/v2/test_member.py
index cb1e6eb..88f39f1 100644
--- a/octavia_tempest_plugin/tests/api/v2/test_member.py
+++ b/octavia_tempest_plugin/tests/api/v2/test_member.py
@@ -29,6 +29,7 @@
 
 CONF = config.CONF
 
+
 # Member port numbers need to be unique on the shared pools so generate them
 @misc.singleton
 class MemberPort(object):
@@ -40,13 +41,13 @@
         return self.current_port
 
 
-class MemberAPITest(test_base.LoadBalancerBaseTest):
+class MemberAPIBaseTest(test_base.LoadBalancerBaseTest):
     """Test the member object API."""
 
     @classmethod
     def resource_setup(cls):
         """Setup resources needed by the tests."""
-        super(MemberAPITest, cls).resource_setup()
+        super(MemberAPIBaseTest, cls).resource_setup()
 
         lb_name = data_utils.rand_name("lb_member_lb1_member")
         lb_kwargs = {const.PROVIDER: CONF.load_balancer.provider,
@@ -145,694 +146,6 @@
         cls.listener_pool_cache[listener_pool_key] = pool[const.ID]
         return pool[const.ID]
 
-    @decorators.idempotent_id('0684575a-0970-4fa8-8006-10c2b39c5f2b')
-    def test_ipv4_HTTP_LC_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('10641ec2-981e-4092-a0d0-89a434506eef')
-    def test_ipv4_HTTP_LC_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('dce70b40-502b-4b1c-8592-180817324ea0')
-    def test_ipv4_HTTPS_LC_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('46555ea6-12a8-4961-b105-bffdead7abcd')
-    def test_ipv4_HTTPS_LC_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('c1a5e297-f38e-4fc8-92a4-4177a37c4794')
-    def test_ipv4_PROXY_LC_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('dfe24159-96a4-4496-888e-e74acd9d390d')
-    def test_ipv4_PROXY_LC_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('2716d05d-6b04-405e-bda9-e79c778eb6dd')
-    def test_ipv4_TCP_LC_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('14ee6e7d-c434-4e2e-947b-1a37d5ffa3bd')
-    def test_ipv4_TCP_LC_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('fb9d0708-e320-45d7-be30-f6e7ea45c644')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_ipv4_UDP_LC_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('5d36d4a4-3b9c-4d54-af61-5f80080bb040')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_ipv4_UDP_LC_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('0623aa1f-753d-44e7-afa1-017d274eace7')
-    def test_ipv4_HTTP_RR_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('96b709fa-dca3-4780-8de7-fb168d455d76')
-    def test_ipv4_HTTP_RR_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('5354ac6c-653d-43ce-8096-1f9de961de73')
-    def test_ipv4_HTTPS_RR_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('e5c8503a-4bc5-43ad-b0da-3e5c1ef719f7')
-    def test_ipv4_HTTPS_RR_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('b2c8632b-f833-4844-9af3-ffee655be6bf')
-    def test_ipv4_PROXY_RR_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('e565de98-88e2-4529-9730-a66073e31480')
-    def test_ipv4_PROXY_RR_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('9306b599-c8e2-4ce9-b789-9e32d42406c4')
-    def test_ipv4_TCP_RR_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('9bbfec96-a7e5-414d-96d1-710e468b8700')
-    def test_ipv4_TCP_RR_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('ccced84a-994d-4d30-a07a-30fa83e4dde2')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_ipv4_UDP_RR_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('bc0802dd-633f-42d4-8c6a-b4c70af29870')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_ipv4_UDP_RR_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('0d9a8b32-0c13-49ea-8dd3-a124ec4ac6f9')
-    def test_ipv4_HTTP_SI_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('57c52d0c-0a62-4988-a02e-2f9f8b440d08')
-    def test_ipv4_HTTP_SI_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('df427d31-9843-4840-9137-6b88c633d329')
-    def test_ipv4_HTTPS_SI_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('e64c28f6-09f5-4fd8-a59e-bcf90975581a')
-    def test_ipv4_HTTPS_SI_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('5c32e2fd-9148-466c-b788-e11d7a48483b')
-    def test_ipv4_PROXY_SI_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('76435fb2-dcb3-4be2-ada9-2dbc375c100b')
-    def test_ipv4_PROXY_SI_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('62db0223-1e44-4d6c-8499-9f72c86d30e3')
-    def test_ipv4_TCP_SI_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('2da54523-cefc-4a44-ab07-c33ffe891bf0')
-    def test_ipv4_TCP_SI_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('9a298318-89a5-416f-b027-af5eda94f813')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_ipv4_UDP_SI_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('b0455c5e-3702-41d7-8069-6ce55563767c')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_ipv4_UDP_SI_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('a2dbf216-a974-45e1-822d-859f76c89ed6')
-    def test_ipv4_HTTP_SIP_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('926eeed9-ecf4-4d22-9417-ef7a7e0a7788')
-    def test_ipv4_HTTP_SIP_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('55da07bc-bf2c-4924-aba3-a03456843e14')
-    def test_ipv4_HTTPS_SIP_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('6773a8bd-1c51-4040-84ba-1aa2b6c4280d')
-    def test_ipv4_HTTPS_SIP_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('ab462d7c-069d-4b55-b6a7-dd199bde65b3')
-    def test_ipv4_PROXY_SIP_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('b1f6f779-2535-4e47-add2-24561545ba59')
-    def test_ipv4_PROXY_SIP_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('73673efc-5b70-4394-b831-1d59fe283e7d')
-    def test_ipv4_TCP_SIP_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('0a08da1e-84f5-4068-84ec-1312b6b8bee3')
-    def test_ipv4_TCP_SIP_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('caf68a97-1911-466c-b392-50b946e2395c')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_ipv4_UDP_SIP_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(4, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('bb750dc5-73a8-4722-bf3b-cdafaefe7914')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_ipv4_UDP_SIP_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(4, pool_id)
-
-    @decorators.idempotent_id('cd894c4f-2256-405f-aa6e-2f77973c749a')
-    def test_ipv6_HTTP_LC_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('3bbb8554-f757-4673-92e3-8593eef83f19')
-    def test_ipv6_HTTP_LC_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('6056724b-d046-497a-ae31-c02af67d4fbb')
-    def test_ipv6_HTTPS_LC_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('354e44d3-db08-4ba9-8e3e-8c3210542a86')
-    def test_ipv6_HTTPS_LC_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('0f8b924e-dd0b-44f9-92b6-8f3dfb0a720c')
-    def test_ipv6_PROXY_LC_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('d1efbfab-b674-4b78-8014-7ecf7ab464ac')
-    def test_ipv6_PROXY_LC_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('699f1c0d-65ae-40d7-9abd-2cef0a1560b9')
-    def test_ipv6_TCP_LC_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('595255f9-f595-43e7-a398-80dd76719aa8')
-    def test_ipv6_TCP_LC_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('0c2c2d5f-9602-4602-82e7-94a1393c295d')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   not CONF.load_balancer.test_with_ipv6))
-    def test_ipv6_UDP_LC_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('d41f5b46-ba06-42bf-a320-0fda106a7543')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   not CONF.load_balancer.test_with_ipv6))
-    def test_ipv6_UDP_LC_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('141944cc-5e2c-4e83-88f8-f61a6797c9b7')
-    def test_ipv6_HTTP_RR_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('883db951-adb1-4e05-8369-99f38fde6b3c')
-    def test_ipv6_HTTP_RR_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('364ba4b9-825a-4f92-9bf2-8d76bcba0288')
-    def test_ipv6_HTTPS_RR_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('70ba1deb-d644-437f-af80-4299461b20af')
-    def test_ipv6_HTTPS_RR_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('06facdb2-5b7e-4e8b-810d-8f829c619a6d')
-    def test_ipv6_PROXY_RR_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('4ec5a74b-06bd-4005-8fcc-25d1bced4807')
-    def test_ipv6_PROXY_RR_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('22600457-ffe5-44a0-90b0-da4f48051023')
-    def test_ipv6_TCP_RR_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('57e6f861-5a55-43a5-9cae-a966bd2a48eb')
-    def test_ipv6_TCP_RR_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('4cddcf8a-566e-4a5a-bf81-99026b17f676')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   not CONF.load_balancer.test_with_ipv6))
-    def test_ipv6_UDP_RR_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('26547c9a-6bbc-429a-9436-e94f2930b9e1')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   not CONF.load_balancer.test_with_ipv6))
-    def test_ipv6_UDP_RR_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('6759674b-dca0-4a48-b166-3f87dc1cc727')
-    def test_ipv6_HTTP_SI_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('683d9ef4-6af3-48e2-aba4-9f404d493467')
-    def test_ipv6_HTTP_SI_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('3d308996-3522-4c91-9bfd-48fedc2ed2f2')
-    def test_ipv6_HTTPS_SI_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('dc26ce07-d580-4a55-b7cd-1b4f09c13572')
-    def test_ipv6_HTTPS_SI_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('56944f91-bf4b-4e9a-9b05-6207e8184c75')
-    def test_ipv6_PROXY_SI_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('e8f4eb38-8e8b-485a-b70a-b1679ad58b66')
-    def test_ipv6_PROXY_SI_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('fc0e77b1-e115-4ec7-80e3-c00d79932549')
-    def test_ipv6_TCP_SI_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('66ddafd2-ace3-43ea-b78b-78b6b0a4d9eb')
-    def test_ipv6_TCP_SI_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('ccfc1283-9e8e-4aa5-a5d3-1d18d57bec65')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   not CONF.load_balancer.test_with_ipv6))
-    def test_ipv6_UDP_SI_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('b62c8562-fdbb-4989-a5ae-d9e1c1b76cd5')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   not CONF.load_balancer.test_with_ipv6))
-    def test_ipv6_UDP_SI_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('d816d324-2434-4812-9b3e-a3f0d4949008')
-    def test_ipv6_HTTP_SIP_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('d4cfe315-b6d6-4940-8ff6-5f5252028eec')
-    def test_ipv6_HTTP_SIP_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('05684ab0-dff3-41aa-8b42-7f95fd6aa4ab')
-    def test_ipv6_HTTPS_SIP_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('ed42872c-1ffc-4210-9f69-5f7eb8ec732f')
-    def test_ipv6_HTTPS_SIP_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('ab87132f-5a0e-40a1-9498-9883780d31a9')
-    def test_ipv6_PROXY_SIP_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('227d7f40-a224-4e67-8844-2d28abc5171e')
-    def test_ipv6_PROXY_SIP_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('b8394de8-a898-4cab-aa0c-f3168d702ee0')
-    def test_ipv6_TCP_SIP_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('7a86e00b-90bf-4fd3-8636-ae7264929106')
-    def test_ipv6_TCP_SIP_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(6, pool_id)
-
-    @decorators.idempotent_id('5abdfbcd-d1cd-4e6a-b98f-79afea442ad8')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   not CONF.load_balancer.test_with_ipv6))
-    def test_ipv6_UDP_SIP_alt_monitor_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(6, pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('63f558b4-d2f8-4e4c-828b-3651e50844b7')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   not CONF.load_balancer.test_with_ipv6))
-    def test_ipv6_UDP_SIP_member_create(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_create(6, pool_id)
-
     def _test_member_create(self, ip_version, pool_id,
                             alternate_monitor=False):
         """Tests member create and basic show APIs.
@@ -962,106 +275,6 @@
         for item in equal_items:
             self.assertEqual(member_kwargs[item], member[item])
 
-    @decorators.idempotent_id('fcc5c6cd-d1c2-4a49-8d26-2268608e59a6')
-    def test_HTTP_LC_member_list(self):
-        self._test_member_list(const.HTTP,
-                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('33450ca2-db09-451a-bd46-6f260bf520f5')
-    def test_HTTPS_LC_member_list(self):
-        self._test_member_list(const.HTTPS,
-                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('c17241d4-5cff-41e2-9742-047647d61546')
-    def test_PROXY_LC_member_list(self):
-        self._test_member_list(const.PROXY,
-                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('d1300e9a-64ba-4d02-baf6-2523439b80d7')
-    def test_TCP_LC_member_list(self):
-        self._test_member_list(const.TCP,
-                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('dffc1dfb-7506-4f81-b1e5-5835b9690079')
-    def test_UDP_LC_member_list(self):
-        self._test_member_list(const.UDP,
-                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('9ce7ad78-915b-42ce-b0d8-44d88a929f3d')
-    def test_HTTP_RR_member_list(self):
-        self._test_member_list(const.HTTP,
-                               const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('8f6362a1-d98b-4696-b88d-41e1eb4a9f70')
-    def test_HTTPS_RR_member_list(self):
-        self._test_member_list(const.HTTPS,
-                               const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('ce4109f8-3bad-4965-95ec-7170519e4a3f')
-    def test_PROXY_RR_member_list(self):
-        self._test_member_list(const.PROXY,
-                               const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('5c35df5d-8951-4506-905b-502f623cc9e4')
-    def test_TCP_RR_member_list(self):
-        self._test_member_list(const.TCP,
-                               const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('c7de7d31-2910-4864-84df-61a883e916fb')
-    def test_UDP_RR_member_list(self):
-        self._test_member_list(const.UDP,
-                               const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('0d142f26-c9e4-45bf-8cd7-1f5659301047')
-    def test_HTTP_SI_member_list(self):
-        self._test_member_list(const.HTTP,
-                               const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('a2be8c21-c7b1-4c1d-ab39-43042bf75a19')
-    def test_HTTPS_SI_member_list(self):
-        self._test_member_list(const.HTTPS,
-                               const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('1ab3978b-8a37-45d3-8e2c-aab4c2187d43')
-    def test_PROXY_SI_member_list(self):
-        self._test_member_list(const.PROXY,
-                               const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('2da08931-bc4c-4339-b16a-43d40ca7734d')
-    def test_TCP_SI_member_list(self):
-        self._test_member_list(const.TCP,
-                               const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('ea12a6bc-6267-4790-b2b3-cbd6a146533b')
-    def test_UDP_SI_member_list(self):
-        self._test_member_list(const.UDP,
-                               const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('2f9d0974-2e55-49c1-b83a-8bdd6dfdb46c')
-    def test_HTTP_SIP_member_list(self):
-        self._test_member_list(const.HTTP,
-                               const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('d31c5b8b-7ec1-4e78-a821-30e9a1e05139')
-    def test_HTTPS_SIP_member_list(self):
-        self._test_member_list(const.HTTPS,
-                               const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('15f8690b-f345-413c-9b4e-af39d546fbec')
-    def test_PROXY_SIP_member_list(self):
-        self._test_member_list(const.PROXY,
-                               const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('db5769ce-f4b0-4a0f-92a7-4eeed66b6730')
-    def test_TCP_SIP_member_list(self):
-        self._test_member_list(const.TCP,
-                               const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('638811fa-26ce-44f3-8ac7-29cf1ef41838')
-    def test_UDP_SIP_member_list(self):
-        self._test_member_list(const.UDP,
-                               const.LB_ALGORITHM_SOURCE_IP_PORT)
-
     def _test_member_list(self, pool_protocol, algorithm):
         """Tests member list API and field filtering.
 
@@ -1402,350 +615,6 @@
             self.assertTrue(not any(["" in member[const.TAGS]
                                      for member in list_of_members]))
 
-    @decorators.idempotent_id('2674b363-7922-494a-b121-cf415dbbb716')
-    def test_HTTP_LC_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('a99da0e8-0595-49a5-a788-efc37fad2dc2')
-    def test_HTTP_LC_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('c3db94b3-a38c-4a0a-8c53-85888c2e1876')
-    def test_HTTPS_LC_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('5844580e-6d01-42dc-b951-d995c9612167')
-    def test_HTTPS_LC_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('ebc52abf-9133-4922-902c-505f890bb44e')
-    def test_PROXY_LC_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('43f90043-65d4-483a-99ab-564f25acc0d7')
-    def test_PROXY_LC_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('ecec1c11-2c2c-408c-9b4e-01620266dab6')
-    def test_TCP_LC_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('baa9b4ec-1ac5-431f-bae0-f2ef68d1c81a')
-    def test_TCP_LC_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('3a291344-0a88-46fc-9eca-c2c6b9048076')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_LC_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('e53b2d6a-ad3f-46be-b899-56324874ad24')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_LC_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('7674ae04-7e92-44ef-9adf-40718d7ec705')
-    def test_HTTP_RR_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('2c4a29f4-be25-416c-9546-9585298cfe4c')
-    def test_HTTP_RR_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('a06a137d-f6d1-44a6-978b-22fe8e23752c')
-    def test_HTTPS_RR_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('bfe7dfea-878e-4e7c-afd8-9860d7282930')
-    def test_HTTPS_RR_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('007c4f0c-8192-4806-9c25-c2f27ea4ba57')
-    def test_PROXY_RR_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('0d6d2875-d1b3-4508-8e17-1c656a5f31ec')
-    def test_PROXY_RR_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('9c968920-1fcc-4a71-8dc9-fdf2ff59af7c')
-    def test_TCP_RR_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('1acd8a34-dd13-411e-bdf3-414b3fcc569d')
-    def test_TCP_RR_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('2d154e0c-4955-4b00-92d5-e9df7b2fbf63')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_RR_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('06de8b15-caf3-4a75-b278-cdfe6208c8db')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_RR_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('6c88a35e-b7c1-4b14-bdae-1a710890555a')
-    def test_HTTP_SI_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('266b60e2-7c3a-4edb-950b-66d57aa64b80')
-    def test_HTTP_SI_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('c2c8ba90-6ade-4fd3-bf12-e15627983917')
-    def test_HTTPS_SI_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('4af933ae-5c6d-4849-af85-e06f7d5a661c')
-    def test_HTTPS_SI_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('383148a5-a9ec-413a-a44c-85c1bbb39729')
-    def test_PROXY_SI_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('518c4d3f-2b5a-4f8a-9c5e-fad15127502e')
-    def test_PROXY_SI_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('9b95b5f2-8823-4019-be86-311a1bde5b20')
-    def test_TCP_SI_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('d8576e58-e8ff-491d-beee-b7c439d2c41c')
-    def test_TCP_SI_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('896acc77-3b73-4565-ad87-9467218b143b')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_SI_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('ffc64ff1-ec8c-4201-a295-a179adc0c7e0')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_SI_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('7c4fcb3e-a994-4d39-97cc-929c022c001e')
-    def test_HTTP_SIP_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('704d04c3-e639-4dee-b55d-09ebf55f8a0d')
-    def test_HTTP_SIP_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('69de0c60-3e4f-40cf-9bf7-d2b1e6c83715')
-    def test_HTTPS_SIP_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('2d970b1c-c157-4974-b605-b8e08d97e874')
-    def test_HTTPS_SIP_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('28e1e3e7-454b-409d-84c3-1826f82ca9dd')
-    def test_PROXY_SIP_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('189ec327-b1c5-47a8-a843-10963cba0a9c')
-    def test_PROXY_SIP_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('6953a9a4-5fac-4470-bfda-4fafbd67288b')
-    def test_TCP_SIP_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('6d8d546f-8c41-49b9-bd9d-8f8ea3975816')
-    def test_TCP_SIP_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_show(pool_id)
-
-    @decorators.idempotent_id('9c0d4668-5a0e-41b3-b3b4-3d0372fe28af')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_SIP_alt_monitor_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_show(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('a03d02d0-830c-4aad-a10b-96c47974483c')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_SIP_member_show(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_show(pool_id)
-
     def _test_member_show(self, pool_id, alternate_monitor=False):
         """Tests member show API.
 
@@ -1838,350 +707,6 @@
                 expected_allowed, member[const.ID],
                 pool_id=pool_id)
 
-    @decorators.idempotent_id('65680d48-1d49-4959-a7d1-677797e54f6b')
-    def test_HTTP_LC_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('52124440-c95c-48fb-af26-70377bcba7d6')
-    def test_HTTP_LC_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('caf95728-5e9c-4295-bd4a-a15263ba5714')
-    def test_HTTPS_LC_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('d1d98798-20cb-4290-818c-e814911d25e5')
-    def test_HTTPS_LC_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('b22288fa-4e25-4779-bd78-6b4802926457')
-    def test_PROXY_LC_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('5ee3df40-381a-4497-9e31-df82d8c2e514')
-    def test_PROXY_LC_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('b693b5ba-d8e7-4b89-ad6c-41b56cf258f7')
-    def test_TCP_LC_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('0df9463f-de6b-43c1-934f-6523873f3530')
-    def test_TCP_LC_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('60baa2d7-927a-4b58-80b9-a2e5196985ee')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_LC_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('b036a40f-d220-4be6-abc9-8ca8e01b96c3')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_LC_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('c07572b8-e853-48f3-a8ea-37fc293a4724')
-    def test_HTTP_RR_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('f83993ce-b053-42ff-9022-612ed67e8db6')
-    def test_HTTP_RR_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('e419d49f-22e4-4331-985e-3a1cc8d0b6b0')
-    def test_HTTPS_RR_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('42ac5187-799a-4714-972c-fea6e1c6a7b2')
-    def test_HTTPS_RR_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('43d30b1d-0f99-4b46-ad37-542e899ceae7')
-    def test_PROXY_RR_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('d5cf47a6-a3bb-4238-a5cf-a74b122edce4')
-    def test_PROXY_RR_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('5a05f8b0-52ca-4ed7-a1a7-c62aee16c960')
-    def test_TCP_RR_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('46e5d4e8-0ecc-40a7-87bd-f9ccdfc9a2d3')
-    def test_TCP_RR_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('7609cd2f-32ac-4488-869a-7e14827df6ef')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_RR_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('171ae461-af7d-4fe1-961d-78376fcc2b3f')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_RR_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('af40e333-caed-4808-a46c-05c977f3cebc')
-    def test_HTTP_SI_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('f63a9deb-4a45-42c4-9aeb-f7c304ecbc16')
-    def test_HTTP_SI_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('27c17512-51b4-49ae-ac92-3e141599cdda')
-    def test_HTTPS_SI_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('cc67064f-becc-4e31-b9e5-b3ea7e78a187')
-    def test_HTTPS_SI_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('2061a0cf-49e0-49b8-af4d-f197cf84ef11')
-    def test_PROXY_SI_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('5946b163-8684-402a-b228-c0648a3e0734')
-    def test_PROXY_SI_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('7a6314dd-83c5-41ee-92f6-e18409ac213d')
-    def test_TCP_SI_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('93818084-a9fb-480d-a7e1-04066ee0e393')
-    def test_TCP_SI_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('523cf4e8-c071-4778-bc89-367a0b8469e6')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_SI_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('9f655415-13d6-4ceb-9ea6-9a32baf0e093')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_SI_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('5215ecc4-fd47-451a-b073-399bad8b522c')
-    def test_HTTP_SIP_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('7c89fb05-d949-4c0f-8c61-7e55e494c76f')
-    def test_HTTP_SIP_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('edff98be-6208-4f1c-9cd3-376b7ac47f80')
-    def test_HTTPS_SIP_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('a1f214fe-6c09-4298-b03e-7069b615dec2')
-    def test_HTTPS_SIP_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('56a21d8e-825a-4780-a073-41061a0d55ca')
-    def test_PROXY_SIP_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('25a24e27-218b-4dcd-99aa-e9ca9f8163e5')
-    def test_PROXY_SIP_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('d6625773-2665-423d-8500-cf9b1b38b53e')
-    def test_TCP_SIP_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('87a3e3aa-580a-41ca-bc15-8cb2995c9125')
-    def test_TCP_SIP_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_update(pool_id)
-
-    @decorators.idempotent_id('796a2972-38e6-41fc-a885-6316195acd70')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_SIP_alt_monitor_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_update(pool_id, alternate_monitor=True)
-
-    @decorators.idempotent_id('2f4efa91-e61d-4dd6-8006-ebfdb00c1246')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_SIP_member_update(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_update(pool_id)
-
     def _test_member_update(self, pool_id, alternate_monitor=False):
         """Tests member show API and field filtering.
 
@@ -2380,226 +905,6 @@
         for item in equal_items:
             self.assertEqual(member_kwargs[item], member[item])
 
-    @decorators.idempotent_id('8104628d-6f30-4037-ae65-c6f6c1b3af42')
-    def test_HTTP_LC_member_batch_update(self):
-        self._test_member_batch_update(const.HTTP,
-                                       const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('c4331afe-c129-44e8-8388-fcbbd28cf783')
-    def test_HTTP_LC_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.HTTP,
-                                       const.LB_ALGORITHM_LEAST_CONNECTIONS,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('5ed41de6-8994-4ba4-8107-29eab89fab1e')
-    def test_HTTPS_LC_member_batch_update(self):
-        self._test_member_batch_update(const.HTTPS,
-                                       const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('dd4d0a10-0473-47a2-8ec5-815fbdf0c5ee')
-    def test_HTTPS_LC_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.HTTPS,
-                                       const.LB_ALGORITHM_LEAST_CONNECTIONS,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('7ae0bd6f-d04c-4d53-bb7e-fef0680726db')
-    def test_PROXY_LC_member_batch_update(self):
-        self._test_member_batch_update(const.PROXY,
-                                       const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('de033003-1dcb-4896-ad5d-9e68e31addf0')
-    def test_PROXY_LC_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.PROXY,
-                                       const.LB_ALGORITHM_LEAST_CONNECTIONS,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('1d79ab5a-1110-43f1-bfc3-1cb4e2ab5011')
-    def test_TCP_LC_member_batch_update(self):
-        self._test_member_batch_update(const.TCP,
-                                       const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('69bd512a-d561-43b1-9a4a-ea7134ee8f9e')
-    def test_TCP_LC_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.TCP,
-                                       const.LB_ALGORITHM_LEAST_CONNECTIONS,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('b9fadfe2-c3f2-48a4-97a4-04c58c40df87')
-    def test_UDP_LC_member_batch_update(self):
-        self._test_member_batch_update(const.UDP,
-                                       const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('f9a125e0-84c4-4f7e-8a82-fe84ca3175e5')
-    def test_UDP_LC_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.UDP,
-                                       const.LB_ALGORITHM_LEAST_CONNECTIONS,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('5f412e52-8ee0-4ee5-8b0e-0e8fc68279a6')
-    def test_HTTP_RR_member_batch_update(self):
-        self._test_member_batch_update(const.HTTP,
-                                       const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('83e0a9f2-491f-46a8-b3ce-6969d70a4e9f')
-    def test_HTTP_RR_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.HTTP,
-                                       const.LB_ALGORITHM_ROUND_ROBIN,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('ee622c92-a4b4-41a6-96e3-b3b2429276a2')
-    def test_HTTPS_RR_member_batch_update(self):
-        self._test_member_batch_update(const.HTTPS,
-                                       const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('7bed4b1c-f862-45bf-ae30-3b4ad0b48870')
-    def test_HTTPS_RR_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.HTTPS,
-                                       const.LB_ALGORITHM_ROUND_ROBIN,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('82325d1a-ad01-471e-bfb3-b75ca86ae8eb')
-    def test_PROXY_RR_member_batch_update(self):
-        self._test_member_batch_update(const.PROXY,
-                                       const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('098f73c5-e3c1-4dfa-bd7f-c87df90743e6')
-    def test_PROXY_RR_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.PROXY,
-                                       const.LB_ALGORITHM_ROUND_ROBIN,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('176cd46e-f5b1-47d1-9403-a0246272eea4')
-    def test_TCP_RR_member_batch_update(self):
-        self._test_member_batch_update(const.TCP,
-                                       const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('e952a399-c817-461e-9e37-fdf7e7b34983')
-    def test_TCP_RR_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.TCP,
-                                       const.LB_ALGORITHM_ROUND_ROBIN,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('dec6b06d-6a69-48d9-b7a9-67eb287fe95a')
-    def test_UDP_RR_member_batch_update(self):
-        self._test_member_batch_update(const.UDP,
-                                       const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('fdf2423c-c312-466a-b021-130a52b5be35')
-    def test_UDP_RR_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.UDP,
-                                       const.LB_ALGORITHM_ROUND_ROBIN,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('546ac0c3-4025-4c88-8276-1c05e7198e82')
-    def test_HTTP_SI_member_batch_update(self):
-        self._test_member_batch_update(const.HTTP,
-                                       const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('6c1fe175-8e99-4adf-934d-bee79c89fa02')
-    def test_HTTP_SI_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.HTTP,
-                                       const.LB_ALGORITHM_SOURCE_IP,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('3e6c76e0-3630-45f0-a674-5d79b662812b')
-    def test_HTTPS_SI_member_batch_update(self):
-        self._test_member_batch_update(const.HTTPS,
-                                       const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('59303a97-cc97-441e-b1a6-395271ec2287')
-    def test_HTTPS_SI_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.HTTPS,
-                                       const.LB_ALGORITHM_SOURCE_IP,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('963d7e71-d8b7-4257-9b01-f1d7ab57cbc8')
-    def test_PROXY_SI_member_batch_update(self):
-        self._test_member_batch_update(const.PROXY,
-                                       const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('f55d8bff-ac68-4e3b-8f05-a9bb69bb0881')
-    def test_PROXY_SI_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.PROXY,
-                                       const.LB_ALGORITHM_SOURCE_IP,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('71d20f78-ffe3-49a3-b0c6-38cd5804f255')
-    def test_TCP_SI_member_batch_update(self):
-        self._test_member_batch_update(const.TCP,
-                                       const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('fee72f7a-928d-477f-b09b-5a866be717a3')
-    def test_TCP_SI_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.TCP,
-                                       const.LB_ALGORITHM_SOURCE_IP,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('086b407e-3ace-47a8-94e4-cf563674ceb6')
-    def test_UDP_SI_member_batch_update(self):
-        self._test_member_batch_update(const.UDP,
-                                       const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('04259015-b6d7-411b-8c19-f21e05994b7c')
-    def test_UDP_SI_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.UDP,
-                                       const.LB_ALGORITHM_SOURCE_IP,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('617028e2-89fb-4e7e-ba62-1a8a7af697ca')
-    def test_HTTP_SIP_member_batch_update(self):
-        self._test_member_batch_update(const.HTTP,
-                                       const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('44a2508d-ecea-4f92-ba66-a64d6d7f12da')
-    def test_HTTP_SIP_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.HTTP,
-                                       const.LB_ALGORITHM_SOURCE_IP_PORT,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('794137e5-28c1-4b0e-bc2f-fc030d03a689')
-    def test_HTTPS_SIP_member_batch_update(self):
-        self._test_member_batch_update(const.HTTPS,
-                                       const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('c1c8930d-0436-4075-b47a-f3bd263ab8a8')
-    def test_HTTPS_SIP_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.HTTPS,
-                                       const.LB_ALGORITHM_SOURCE_IP_PORT,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('1ab05cf2-265e-4291-b17c-19caa0a1b6ff')
-    def test_PROXY_SIP_member_batch_update(self):
-        self._test_member_batch_update(const.PROXY,
-                                       const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('4de187b6-4948-4394-af6b-8828e96d8f3e')
-    def test_PROXY_SIP_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.PROXY,
-                                       const.LB_ALGORITHM_SOURCE_IP_PORT,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('1d171080-c7e5-4ee0-83d4-51bb1655cb21')
-    def test_TCP_SIP_member_batch_update(self):
-        self._test_member_batch_update(const.TCP,
-                                       const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('52328f7a-bec4-4f23-9293-f5f1283c0af9')
-    def test_TCP_SIP_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.TCP,
-                                       const.LB_ALGORITHM_SOURCE_IP_PORT,
-                                       alternate_monitor=True)
-
-    @decorators.idempotent_id('00b3ebda-c28c-471b-bbf8-01de6567b4b5')
-    def test_UDP_SIP_member_batch_update(self):
-        self._test_member_batch_update(const.UDP,
-                                       const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('e4a357a3-1d07-46f4-a8ff-67a279783b24')
-    def test_UDP_SIP_alt_monitor_member_batch_update(self):
-        self._test_member_batch_update(const.UDP,
-                                       const.LB_ALGORITHM_SOURCE_IP_PORT,
-                                       alternate_monitor=True)
-
     @testtools.skipIf(CONF.load_balancer.provider == 'tungstenfabric',
                       "Tungstenfabric provider does not support batch "
                       "updating members.")
@@ -2794,178 +1099,6 @@
         self.assertEqual(member2_name_update, members[0][const.NAME])
         self.assertEqual(member3_name, members[1][const.NAME])
 
-    @decorators.idempotent_id('8b6574a3-17e8-4950-b24e-66d0c28960d3')
-    def test_HTTP_LC_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('a122557b-4824-4a4f-87f0-6ba5c9ca1e32')
-    def test_HTTPS_LC_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('069b8558-138f-4d6c-a3ec-9e803d5e2a14')
-    def test_PROXY_LC_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('9b2a08cf-c9ae-4f8a-a15c-2acab09a7613')
-    def test_TCP_LC_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('5824438d-cda2-4cea-a7d0-e7f5e5a11cac')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_LC_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('f129ba5e-a16e-4178-924f-6a9c5b8b1589')
-    def test_HTTP_RR_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('f961105a-9874-4765-b457-3de9f342e226')
-    def test_HTTPS_RR_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('6bca4760-bfb4-4cee-b77f-a77abec3e38e')
-    def test_PROXY_RR_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('f0f5a651-f7f0-40d7-a051-32da07c28252')
-    def test_TCP_RR_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('03424069-302d-4020-996c-0a346a97c847')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_RR_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('87d0eac7-e391-4633-88cb-e691eeeab4fc')
-    def test_HTTP_SI_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('a919aa78-5221-4321-aa26-fcd3432d843c')
-    def test_HTTPS_SI_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('92368eef-d9ce-47d9-b3f2-7624601010a0')
-    def test_PROXY_SI_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('1631c730-f34a-4ae7-91eb-5f5b5052cb55')
-    def test_TCP_SI_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('8e05deee-f385-44d8-a112-2649aeea6006')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_SI_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('1c9f9dc5-4ba3-44cd-a840-fd0629abfddd')
-    def test_HTTP_SIP_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('93ef7ac1-da00-420d-a367-22e86d968e1c')
-    def test_HTTPS_SIP_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('e83b9389-768f-4bcf-a650-17af01243d2b')
-    def test_PROXY_SIP_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.PROXY,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('eca3d41d-21bd-4547-b8b8-8f87867eb4ad')
-    def test_TCP_SIP_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.TCP, pool_protocol=const.TCP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_delete(pool_id)
-
-    @decorators.idempotent_id('23788358-ac5f-46c4-922a-164e6a13fe0d')
-    # Skipping test for amphora driver until "UDP load balancers cannot mix
-    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
-    # fixed
-    @decorators.skip_because(
-        bug='2003329',
-        bug_type='storyboard',
-        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
-                   CONF.load_balancer.test_with_ipv6))
-    def test_UDP_SIP_member_delete(self):
-        pool_id = self._listener_pool_create(
-            listener_protocol=const.UDP, pool_protocol=const.UDP,
-            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_delete(pool_id)
-
     def _test_member_delete(self, pool_id):
         """Tests member create and delete APIs.
 
@@ -3023,3 +1156,1886 @@
             const.ACTIVE,
             CONF.load_balancer.check_interval,
             CONF.load_balancer.check_timeout)
+
+
+class MemberTCPAPITest(MemberAPIBaseTest):
+
+    @decorators.idempotent_id('2716d05d-6b04-405e-bda9-e79c778eb6dd')
+    def test_ipv4_TCP_LC_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('14ee6e7d-c434-4e2e-947b-1a37d5ffa3bd')
+    def test_ipv4_TCP_LC_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('9306b599-c8e2-4ce9-b789-9e32d42406c4')
+    def test_ipv4_TCP_RR_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('9bbfec96-a7e5-414d-96d1-710e468b8700')
+    def test_ipv4_TCP_RR_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('62db0223-1e44-4d6c-8499-9f72c86d30e3')
+    def test_ipv4_TCP_SI_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('2da54523-cefc-4a44-ab07-c33ffe891bf0')
+    def test_ipv4_TCP_SI_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('73673efc-5b70-4394-b831-1d59fe283e7d')
+    def test_ipv4_TCP_SIP_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('0a08da1e-84f5-4068-84ec-1312b6b8bee3')
+    def test_ipv4_TCP_SIP_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('699f1c0d-65ae-40d7-9abd-2cef0a1560b9')
+    def test_ipv6_TCP_LC_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('595255f9-f595-43e7-a398-80dd76719aa8')
+    def test_ipv6_TCP_LC_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('22600457-ffe5-44a0-90b0-da4f48051023')
+    def test_ipv6_TCP_RR_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('57e6f861-5a55-43a5-9cae-a966bd2a48eb')
+    def test_ipv6_TCP_RR_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('fc0e77b1-e115-4ec7-80e3-c00d79932549')
+    def test_ipv6_TCP_SI_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('66ddafd2-ace3-43ea-b78b-78b6b0a4d9eb')
+    def test_ipv6_TCP_SI_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('b8394de8-a898-4cab-aa0c-f3168d702ee0')
+    def test_ipv6_TCP_SIP_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('7a86e00b-90bf-4fd3-8636-ae7264929106')
+    def test_ipv6_TCP_SIP_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('d1300e9a-64ba-4d02-baf6-2523439b80d7')
+    def test_TCP_LC_member_list(self):
+        self._test_member_list(const.TCP,
+                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('5c35df5d-8951-4506-905b-502f623cc9e4')
+    def test_TCP_RR_member_list(self):
+        self._test_member_list(const.TCP,
+                               const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('2da08931-bc4c-4339-b16a-43d40ca7734d')
+    def test_TCP_SI_member_list(self):
+        self._test_member_list(const.TCP,
+                               const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('db5769ce-f4b0-4a0f-92a7-4eeed66b6730')
+    def test_TCP_SIP_member_list(self):
+        self._test_member_list(const.TCP,
+                               const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('ecec1c11-2c2c-408c-9b4e-01620266dab6')
+    def test_TCP_LC_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('baa9b4ec-1ac5-431f-bae0-f2ef68d1c81a')
+    def test_TCP_LC_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('9c968920-1fcc-4a71-8dc9-fdf2ff59af7c')
+    def test_TCP_RR_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('1acd8a34-dd13-411e-bdf3-414b3fcc569d')
+    def test_TCP_RR_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('9b95b5f2-8823-4019-be86-311a1bde5b20')
+    def test_TCP_SI_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('d8576e58-e8ff-491d-beee-b7c439d2c41c')
+    def test_TCP_SI_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('6953a9a4-5fac-4470-bfda-4fafbd67288b')
+    def test_TCP_SIP_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('6d8d546f-8c41-49b9-bd9d-8f8ea3975816')
+    def test_TCP_SIP_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('b693b5ba-d8e7-4b89-ad6c-41b56cf258f7')
+    def test_TCP_LC_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('0df9463f-de6b-43c1-934f-6523873f3530')
+    def test_TCP_LC_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('5a05f8b0-52ca-4ed7-a1a7-c62aee16c960')
+    def test_TCP_RR_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('46e5d4e8-0ecc-40a7-87bd-f9ccdfc9a2d3')
+    def test_TCP_RR_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('7a6314dd-83c5-41ee-92f6-e18409ac213d')
+    def test_TCP_SI_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('93818084-a9fb-480d-a7e1-04066ee0e393')
+    def test_TCP_SI_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('d6625773-2665-423d-8500-cf9b1b38b53e')
+    def test_TCP_SIP_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('87a3e3aa-580a-41ca-bc15-8cb2995c9125')
+    def test_TCP_SIP_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('1d79ab5a-1110-43f1-bfc3-1cb4e2ab5011')
+    def test_TCP_LC_member_batch_update(self):
+        self._test_member_batch_update(const.TCP,
+                                       const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('69bd512a-d561-43b1-9a4a-ea7134ee8f9e')
+    def test_TCP_LC_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.TCP,
+                                       const.LB_ALGORITHM_LEAST_CONNECTIONS,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('176cd46e-f5b1-47d1-9403-a0246272eea4')
+    def test_TCP_RR_member_batch_update(self):
+        self._test_member_batch_update(const.TCP,
+                                       const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('e952a399-c817-461e-9e37-fdf7e7b34983')
+    def test_TCP_RR_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.TCP,
+                                       const.LB_ALGORITHM_ROUND_ROBIN,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('71d20f78-ffe3-49a3-b0c6-38cd5804f255')
+    def test_TCP_SI_member_batch_update(self):
+        self._test_member_batch_update(const.TCP,
+                                       const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('fee72f7a-928d-477f-b09b-5a866be717a3')
+    def test_TCP_SI_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.TCP,
+                                       const.LB_ALGORITHM_SOURCE_IP,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('1d171080-c7e5-4ee0-83d4-51bb1655cb21')
+    def test_TCP_SIP_member_batch_update(self):
+        self._test_member_batch_update(const.TCP,
+                                       const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('52328f7a-bec4-4f23-9293-f5f1283c0af9')
+    def test_TCP_SIP_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.TCP,
+                                       const.LB_ALGORITHM_SOURCE_IP_PORT,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('9b2a08cf-c9ae-4f8a-a15c-2acab09a7613')
+    def test_TCP_LC_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_delete(pool_id)
+
+    @decorators.idempotent_id('f0f5a651-f7f0-40d7-a051-32da07c28252')
+    def test_TCP_RR_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_delete(pool_id)
+
+    @decorators.idempotent_id('1631c730-f34a-4ae7-91eb-5f5b5052cb55')
+    def test_TCP_SI_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_delete(pool_id)
+
+    @decorators.idempotent_id('eca3d41d-21bd-4547-b8b8-8f87867eb4ad')
+    def test_TCP_SIP_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.TCP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_delete(pool_id)
+
+
+class MemberUDPAPITest(MemberAPIBaseTest):
+
+    @decorators.idempotent_id('fb9d0708-e320-45d7-be30-f6e7ea45c644')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_ipv4_UDP_LC_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('5d36d4a4-3b9c-4d54-af61-5f80080bb040')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_ipv4_UDP_LC_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('ccced84a-994d-4d30-a07a-30fa83e4dde2')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_ipv4_UDP_RR_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('bc0802dd-633f-42d4-8c6a-b4c70af29870')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_ipv4_UDP_RR_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('9a298318-89a5-416f-b027-af5eda94f813')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_ipv4_UDP_SI_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('b0455c5e-3702-41d7-8069-6ce55563767c')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_ipv4_UDP_SI_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('caf68a97-1911-466c-b392-50b946e2395c')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_ipv4_UDP_SIP_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('bb750dc5-73a8-4722-bf3b-cdafaefe7914')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_ipv4_UDP_SIP_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('0c2c2d5f-9602-4602-82e7-94a1393c295d')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   not CONF.load_balancer.test_with_ipv6))
+    def test_ipv6_UDP_LC_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('d41f5b46-ba06-42bf-a320-0fda106a7543')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   not CONF.load_balancer.test_with_ipv6))
+    def test_ipv6_UDP_LC_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('4cddcf8a-566e-4a5a-bf81-99026b17f676')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   not CONF.load_balancer.test_with_ipv6))
+    def test_ipv6_UDP_RR_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('26547c9a-6bbc-429a-9436-e94f2930b9e1')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   not CONF.load_balancer.test_with_ipv6))
+    def test_ipv6_UDP_RR_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('ccfc1283-9e8e-4aa5-a5d3-1d18d57bec65')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   not CONF.load_balancer.test_with_ipv6))
+    def test_ipv6_UDP_SI_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('b62c8562-fdbb-4989-a5ae-d9e1c1b76cd5')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   not CONF.load_balancer.test_with_ipv6))
+    def test_ipv6_UDP_SI_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('5abdfbcd-d1cd-4e6a-b98f-79afea442ad8')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   not CONF.load_balancer.test_with_ipv6))
+    def test_ipv6_UDP_SIP_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('63f558b4-d2f8-4e4c-828b-3651e50844b7')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   not CONF.load_balancer.test_with_ipv6))
+    def test_ipv6_UDP_SIP_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('dffc1dfb-7506-4f81-b1e5-5835b9690079')
+    def test_UDP_LC_member_list(self):
+        self._test_member_list(const.UDP,
+                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('c7de7d31-2910-4864-84df-61a883e916fb')
+    def test_UDP_RR_member_list(self):
+        self._test_member_list(const.UDP,
+                               const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('ea12a6bc-6267-4790-b2b3-cbd6a146533b')
+    def test_UDP_SI_member_list(self):
+        self._test_member_list(const.UDP,
+                               const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('638811fa-26ce-44f3-8ac7-29cf1ef41838')
+    def test_UDP_SIP_member_list(self):
+        self._test_member_list(const.UDP,
+                               const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('3a291344-0a88-46fc-9eca-c2c6b9048076')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_LC_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('e53b2d6a-ad3f-46be-b899-56324874ad24')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_LC_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('2d154e0c-4955-4b00-92d5-e9df7b2fbf63')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_RR_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('06de8b15-caf3-4a75-b278-cdfe6208c8db')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_RR_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('896acc77-3b73-4565-ad87-9467218b143b')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_SI_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('ffc64ff1-ec8c-4201-a295-a179adc0c7e0')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_SI_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('9c0d4668-5a0e-41b3-b3b4-3d0372fe28af')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_SIP_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('a03d02d0-830c-4aad-a10b-96c47974483c')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_SIP_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('60baa2d7-927a-4b58-80b9-a2e5196985ee')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_LC_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('b036a40f-d220-4be6-abc9-8ca8e01b96c3')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_LC_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('7609cd2f-32ac-4488-869a-7e14827df6ef')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_RR_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('171ae461-af7d-4fe1-961d-78376fcc2b3f')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_RR_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('523cf4e8-c071-4778-bc89-367a0b8469e6')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_SI_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('9f655415-13d6-4ceb-9ea6-9a32baf0e093')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_SI_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('796a2972-38e6-41fc-a885-6316195acd70')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_SIP_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('2f4efa91-e61d-4dd6-8006-ebfdb00c1246')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_SIP_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('b9fadfe2-c3f2-48a4-97a4-04c58c40df87')
+    def test_UDP_LC_member_batch_update(self):
+        self._test_member_batch_update(const.UDP,
+                                       const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('f9a125e0-84c4-4f7e-8a82-fe84ca3175e5')
+    def test_UDP_LC_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.UDP,
+                                       const.LB_ALGORITHM_LEAST_CONNECTIONS,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('dec6b06d-6a69-48d9-b7a9-67eb287fe95a')
+    def test_UDP_RR_member_batch_update(self):
+        self._test_member_batch_update(const.UDP,
+                                       const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('fdf2423c-c312-466a-b021-130a52b5be35')
+    def test_UDP_RR_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.UDP,
+                                       const.LB_ALGORITHM_ROUND_ROBIN,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('086b407e-3ace-47a8-94e4-cf563674ceb6')
+    def test_UDP_SI_member_batch_update(self):
+        self._test_member_batch_update(const.UDP,
+                                       const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('04259015-b6d7-411b-8c19-f21e05994b7c')
+    def test_UDP_SI_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.UDP,
+                                       const.LB_ALGORITHM_SOURCE_IP,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('00b3ebda-c28c-471b-bbf8-01de6567b4b5')
+    def test_UDP_SIP_member_batch_update(self):
+        self._test_member_batch_update(const.UDP,
+                                       const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('e4a357a3-1d07-46f4-a8ff-67a279783b24')
+    def test_UDP_SIP_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.UDP,
+                                       const.LB_ALGORITHM_SOURCE_IP_PORT,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('5824438d-cda2-4cea-a7d0-e7f5e5a11cac')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_LC_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_delete(pool_id)
+
+    @decorators.idempotent_id('03424069-302d-4020-996c-0a346a97c847')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_RR_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_delete(pool_id)
+
+    @decorators.idempotent_id('8e05deee-f385-44d8-a112-2649aeea6006')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_SI_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_delete(pool_id)
+
+    @decorators.idempotent_id('23788358-ac5f-46c4-922a-164e6a13fe0d')
+    # Skipping test for amphora driver until "UDP load balancers cannot mix
+    # protocol versions" (https://storyboard.openstack.org/#!/story/2003329) is
+    # fixed
+    @decorators.skip_because(
+        bug='2003329',
+        bug_type='storyboard',
+        condition=(CONF.load_balancer.provider in const.AMPHORA_PROVIDERS and
+                   CONF.load_balancer.test_with_ipv6))
+    def test_UDP_SIP_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.UDP, pool_protocol=const.UDP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_delete(pool_id)
+
+
+class MemberHTTPAPITest(MemberAPIBaseTest):
+
+    @decorators.idempotent_id('0684575a-0970-4fa8-8006-10c2b39c5f2b')
+    def test_ipv4_HTTP_LC_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('10641ec2-981e-4092-a0d0-89a434506eef')
+    def test_ipv4_HTTP_LC_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('0623aa1f-753d-44e7-afa1-017d274eace7')
+    def test_ipv4_HTTP_RR_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('96b709fa-dca3-4780-8de7-fb168d455d76')
+    def test_ipv4_HTTP_RR_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('0d9a8b32-0c13-49ea-8dd3-a124ec4ac6f9')
+    def test_ipv4_HTTP_SI_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('57c52d0c-0a62-4988-a02e-2f9f8b440d08')
+    def test_ipv4_HTTP_SI_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('a2dbf216-a974-45e1-822d-859f76c89ed6')
+    def test_ipv4_HTTP_SIP_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('926eeed9-ecf4-4d22-9417-ef7a7e0a7788')
+    def test_ipv4_HTTP_SIP_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('cd894c4f-2256-405f-aa6e-2f77973c749a')
+    def test_ipv6_HTTP_LC_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('3bbb8554-f757-4673-92e3-8593eef83f19')
+    def test_ipv6_HTTP_LC_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('141944cc-5e2c-4e83-88f8-f61a6797c9b7')
+    def test_ipv6_HTTP_RR_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('883db951-adb1-4e05-8369-99f38fde6b3c')
+    def test_ipv6_HTTP_RR_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('6759674b-dca0-4a48-b166-3f87dc1cc727')
+    def test_ipv6_HTTP_SI_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('683d9ef4-6af3-48e2-aba4-9f404d493467')
+    def test_ipv6_HTTP_SI_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('d816d324-2434-4812-9b3e-a3f0d4949008')
+    def test_ipv6_HTTP_SIP_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('d4cfe315-b6d6-4940-8ff6-5f5252028eec')
+    def test_ipv6_HTTP_SIP_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('fcc5c6cd-d1c2-4a49-8d26-2268608e59a6')
+    def test_HTTP_LC_member_list(self):
+        self._test_member_list(const.HTTP,
+                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('9ce7ad78-915b-42ce-b0d8-44d88a929f3d')
+    def test_HTTP_RR_member_list(self):
+        self._test_member_list(const.HTTP,
+                               const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('0d142f26-c9e4-45bf-8cd7-1f5659301047')
+    def test_HTTP_SI_member_list(self):
+        self._test_member_list(const.HTTP,
+                               const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('2f9d0974-2e55-49c1-b83a-8bdd6dfdb46c')
+    def test_HTTP_SIP_member_list(self):
+        self._test_member_list(const.HTTP,
+                               const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('2674b363-7922-494a-b121-cf415dbbb716')
+    def test_HTTP_LC_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('a99da0e8-0595-49a5-a788-efc37fad2dc2')
+    def test_HTTP_LC_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('7674ae04-7e92-44ef-9adf-40718d7ec705')
+    def test_HTTP_RR_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('2c4a29f4-be25-416c-9546-9585298cfe4c')
+    def test_HTTP_RR_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('6c88a35e-b7c1-4b14-bdae-1a710890555a')
+    def test_HTTP_SI_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('266b60e2-7c3a-4edb-950b-66d57aa64b80')
+    def test_HTTP_SI_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('7c4fcb3e-a994-4d39-97cc-929c022c001e')
+    def test_HTTP_SIP_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('704d04c3-e639-4dee-b55d-09ebf55f8a0d')
+    def test_HTTP_SIP_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('65680d48-1d49-4959-a7d1-677797e54f6b')
+    def test_HTTP_LC_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('52124440-c95c-48fb-af26-70377bcba7d6')
+    def test_HTTP_LC_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('c07572b8-e853-48f3-a8ea-37fc293a4724')
+    def test_HTTP_RR_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('f83993ce-b053-42ff-9022-612ed67e8db6')
+    def test_HTTP_RR_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('af40e333-caed-4808-a46c-05c977f3cebc')
+    def test_HTTP_SI_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('f63a9deb-4a45-42c4-9aeb-f7c304ecbc16')
+    def test_HTTP_SI_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('5215ecc4-fd47-451a-b073-399bad8b522c')
+    def test_HTTP_SIP_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('7c89fb05-d949-4c0f-8c61-7e55e494c76f')
+    def test_HTTP_SIP_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('8104628d-6f30-4037-ae65-c6f6c1b3af42')
+    def test_HTTP_LC_member_batch_update(self):
+        self._test_member_batch_update(const.HTTP,
+                                       const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('c4331afe-c129-44e8-8388-fcbbd28cf783')
+    def test_HTTP_LC_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.HTTP,
+                                       const.LB_ALGORITHM_LEAST_CONNECTIONS,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('5f412e52-8ee0-4ee5-8b0e-0e8fc68279a6')
+    def test_HTTP_RR_member_batch_update(self):
+        self._test_member_batch_update(const.HTTP,
+                                       const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('83e0a9f2-491f-46a8-b3ce-6969d70a4e9f')
+    def test_HTTP_RR_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.HTTP,
+                                       const.LB_ALGORITHM_ROUND_ROBIN,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('546ac0c3-4025-4c88-8276-1c05e7198e82')
+    def test_HTTP_SI_member_batch_update(self):
+        self._test_member_batch_update(const.HTTP,
+                                       const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('6c1fe175-8e99-4adf-934d-bee79c89fa02')
+    def test_HTTP_SI_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.HTTP,
+                                       const.LB_ALGORITHM_SOURCE_IP,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('617028e2-89fb-4e7e-ba62-1a8a7af697ca')
+    def test_HTTP_SIP_member_batch_update(self):
+        self._test_member_batch_update(const.HTTP,
+                                       const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('44a2508d-ecea-4f92-ba66-a64d6d7f12da')
+    def test_HTTP_SIP_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.HTTP,
+                                       const.LB_ALGORITHM_SOURCE_IP_PORT,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('8b6574a3-17e8-4950-b24e-66d0c28960d3')
+    def test_HTTP_LC_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_delete(pool_id)
+
+    @decorators.idempotent_id('f129ba5e-a16e-4178-924f-6a9c5b8b1589')
+    def test_HTTP_RR_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_delete(pool_id)
+
+    @decorators.idempotent_id('87d0eac7-e391-4633-88cb-e691eeeab4fc')
+    def test_HTTP_SI_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_delete(pool_id)
+
+    @decorators.idempotent_id('1c9f9dc5-4ba3-44cd-a840-fd0629abfddd')
+    def test_HTTP_SIP_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTP, pool_protocol=const.HTTP,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_delete(pool_id)
+
+
+class MemberHTTPSAPITest(MemberAPIBaseTest):
+
+    @decorators.idempotent_id('dce70b40-502b-4b1c-8592-180817324ea0')
+    def test_ipv4_HTTPS_LC_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('46555ea6-12a8-4961-b105-bffdead7abcd')
+    def test_ipv4_HTTPS_LC_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('5354ac6c-653d-43ce-8096-1f9de961de73')
+    def test_ipv4_HTTPS_RR_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('e5c8503a-4bc5-43ad-b0da-3e5c1ef719f7')
+    def test_ipv4_HTTPS_RR_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('df427d31-9843-4840-9137-6b88c633d329')
+    def test_ipv4_HTTPS_SI_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('e64c28f6-09f5-4fd8-a59e-bcf90975581a')
+    def test_ipv4_HTTPS_SI_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('55da07bc-bf2c-4924-aba3-a03456843e14')
+    def test_ipv4_HTTPS_SIP_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('6773a8bd-1c51-4040-84ba-1aa2b6c4280d')
+    def test_ipv4_HTTPS_SIP_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('6056724b-d046-497a-ae31-c02af67d4fbb')
+    def test_ipv6_HTTPS_LC_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('354e44d3-db08-4ba9-8e3e-8c3210542a86')
+    def test_ipv6_HTTPS_LC_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('364ba4b9-825a-4f92-9bf2-8d76bcba0288')
+    def test_ipv6_HTTPS_RR_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('70ba1deb-d644-437f-af80-4299461b20af')
+    def test_ipv6_HTTPS_RR_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('3d308996-3522-4c91-9bfd-48fedc2ed2f2')
+    def test_ipv6_HTTPS_SI_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('dc26ce07-d580-4a55-b7cd-1b4f09c13572')
+    def test_ipv6_HTTPS_SI_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('05684ab0-dff3-41aa-8b42-7f95fd6aa4ab')
+    def test_ipv6_HTTPS_SIP_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('ed42872c-1ffc-4210-9f69-5f7eb8ec732f')
+    def test_ipv6_HTTPS_SIP_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('8f6362a1-d98b-4696-b88d-41e1eb4a9f70')
+    def test_HTTPS_RR_member_list(self):
+        self._test_member_list(const.HTTPS,
+                               const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('a2be8c21-c7b1-4c1d-ab39-43042bf75a19')
+    def test_HTTPS_SI_member_list(self):
+        self._test_member_list(const.HTTPS,
+                               const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('d31c5b8b-7ec1-4e78-a821-30e9a1e05139')
+    def test_HTTPS_SIP_member_list(self):
+        self._test_member_list(const.HTTPS,
+                               const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('33450ca2-db09-451a-bd46-6f260bf520f5')
+    def test_HTTPS_LC_member_list(self):
+        self._test_member_list(const.HTTPS,
+                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('c3db94b3-a38c-4a0a-8c53-85888c2e1876')
+    def test_HTTPS_LC_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('5844580e-6d01-42dc-b951-d995c9612167')
+    def test_HTTPS_LC_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('a06a137d-f6d1-44a6-978b-22fe8e23752c')
+    def test_HTTPS_RR_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('bfe7dfea-878e-4e7c-afd8-9860d7282930')
+    def test_HTTPS_RR_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('c2c8ba90-6ade-4fd3-bf12-e15627983917')
+    def test_HTTPS_SI_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('4af933ae-5c6d-4849-af85-e06f7d5a661c')
+    def test_HTTPS_SI_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('69de0c60-3e4f-40cf-9bf7-d2b1e6c83715')
+    def test_HTTPS_SIP_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('2d970b1c-c157-4974-b605-b8e08d97e874')
+    def test_HTTPS_SIP_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('caf95728-5e9c-4295-bd4a-a15263ba5714')
+    def test_HTTPS_LC_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('d1d98798-20cb-4290-818c-e814911d25e5')
+    def test_HTTPS_LC_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('e419d49f-22e4-4331-985e-3a1cc8d0b6b0')
+    def test_HTTPS_RR_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('42ac5187-799a-4714-972c-fea6e1c6a7b2')
+    def test_HTTPS_RR_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('27c17512-51b4-49ae-ac92-3e141599cdda')
+    def test_HTTPS_SI_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('cc67064f-becc-4e31-b9e5-b3ea7e78a187')
+    def test_HTTPS_SI_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('edff98be-6208-4f1c-9cd3-376b7ac47f80')
+    def test_HTTPS_SIP_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('a1f214fe-6c09-4298-b03e-7069b615dec2')
+    def test_HTTPS_SIP_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('ee622c92-a4b4-41a6-96e3-b3b2429276a2')
+    def test_HTTPS_RR_member_batch_update(self):
+        self._test_member_batch_update(const.HTTPS,
+                                       const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('7bed4b1c-f862-45bf-ae30-3b4ad0b48870')
+    def test_HTTPS_RR_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.HTTPS,
+                                       const.LB_ALGORITHM_ROUND_ROBIN,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('5ed41de6-8994-4ba4-8107-29eab89fab1e')
+    def test_HTTPS_LC_member_batch_update(self):
+        self._test_member_batch_update(const.HTTPS,
+                                       const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('dd4d0a10-0473-47a2-8ec5-815fbdf0c5ee')
+    def test_HTTPS_LC_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.HTTPS,
+                                       const.LB_ALGORITHM_LEAST_CONNECTIONS,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('3e6c76e0-3630-45f0-a674-5d79b662812b')
+    def test_HTTPS_SI_member_batch_update(self):
+        self._test_member_batch_update(const.HTTPS,
+                                       const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('59303a97-cc97-441e-b1a6-395271ec2287')
+    def test_HTTPS_SI_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.HTTPS,
+                                       const.LB_ALGORITHM_SOURCE_IP,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('794137e5-28c1-4b0e-bc2f-fc030d03a689')
+    def test_HTTPS_SIP_member_batch_update(self):
+        self._test_member_batch_update(const.HTTPS,
+                                       const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('c1c8930d-0436-4075-b47a-f3bd263ab8a8')
+    def test_HTTPS_SIP_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.HTTPS,
+                                       const.LB_ALGORITHM_SOURCE_IP_PORT,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('a122557b-4824-4a4f-87f0-6ba5c9ca1e32')
+    def test_HTTPS_LC_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_delete(pool_id)
+
+    @decorators.idempotent_id('f961105a-9874-4765-b457-3de9f342e226')
+    def test_HTTPS_RR_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_delete(pool_id)
+
+    @decorators.idempotent_id('a919aa78-5221-4321-aa26-fcd3432d843c')
+    def test_HTTPS_SI_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_delete(pool_id)
+
+    @decorators.idempotent_id('93ef7ac1-da00-420d-a367-22e86d968e1c')
+    def test_HTTPS_SIP_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.HTTPS, pool_protocol=const.HTTPS,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_delete(pool_id)
+
+
+class MemberPROXYAPITest(MemberAPIBaseTest):
+
+    @decorators.idempotent_id('c1a5e297-f38e-4fc8-92a4-4177a37c4794')
+    def test_ipv4_PROXY_LC_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('dfe24159-96a4-4496-888e-e74acd9d390d')
+    def test_ipv4_PROXY_LC_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('b2c8632b-f833-4844-9af3-ffee655be6bf')
+    def test_ipv4_PROXY_RR_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('e565de98-88e2-4529-9730-a66073e31480')
+    def test_ipv4_PROXY_RR_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('5c32e2fd-9148-466c-b788-e11d7a48483b')
+    def test_ipv4_PROXY_SI_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('76435fb2-dcb3-4be2-ada9-2dbc375c100b')
+    def test_ipv4_PROXY_SI_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('ab462d7c-069d-4b55-b6a7-dd199bde65b3')
+    def test_ipv4_PROXY_SIP_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(4, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('b1f6f779-2535-4e47-add2-24561545ba59')
+    def test_ipv4_PROXY_SIP_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(4, pool_id)
+
+    @decorators.idempotent_id('0f8b924e-dd0b-44f9-92b6-8f3dfb0a720c')
+    def test_ipv6_PROXY_LC_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('d1efbfab-b674-4b78-8014-7ecf7ab464ac')
+    def test_ipv6_PROXY_LC_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('06facdb2-5b7e-4e8b-810d-8f829c619a6d')
+    def test_ipv6_PROXY_RR_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('4ec5a74b-06bd-4005-8fcc-25d1bced4807')
+    def test_ipv6_PROXY_RR_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('56944f91-bf4b-4e9a-9b05-6207e8184c75')
+    def test_ipv6_PROXY_SI_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('e8f4eb38-8e8b-485a-b70a-b1679ad58b66')
+    def test_ipv6_PROXY_SI_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('ab87132f-5a0e-40a1-9498-9883780d31a9')
+    def test_ipv6_PROXY_SIP_alt_monitor_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(6, pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('227d7f40-a224-4e67-8844-2d28abc5171e')
+    def test_ipv6_PROXY_SIP_member_create(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_create(6, pool_id)
+
+    @decorators.idempotent_id('c17241d4-5cff-41e2-9742-047647d61546')
+    def test_PROXY_LC_member_list(self):
+        self._test_member_list(const.PROXY,
+                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('ce4109f8-3bad-4965-95ec-7170519e4a3f')
+    def test_PROXY_RR_member_list(self):
+        self._test_member_list(const.PROXY,
+                               const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('1ab3978b-8a37-45d3-8e2c-aab4c2187d43')
+    def test_PROXY_SI_member_list(self):
+        self._test_member_list(const.PROXY,
+                               const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('15f8690b-f345-413c-9b4e-af39d546fbec')
+    def test_PROXY_SIP_member_list(self):
+        self._test_member_list(const.PROXY,
+                               const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('ebc52abf-9133-4922-902c-505f890bb44e')
+    def test_PROXY_LC_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('43f90043-65d4-483a-99ab-564f25acc0d7')
+    def test_PROXY_LC_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('007c4f0c-8192-4806-9c25-c2f27ea4ba57')
+    def test_PROXY_RR_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('0d6d2875-d1b3-4508-8e17-1c656a5f31ec')
+    def test_PROXY_RR_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('383148a5-a9ec-413a-a44c-85c1bbb39729')
+    def test_PROXY_SI_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('518c4d3f-2b5a-4f8a-9c5e-fad15127502e')
+    def test_PROXY_SI_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('28e1e3e7-454b-409d-84c3-1826f82ca9dd')
+    def test_PROXY_SIP_alt_monitor_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_show(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('189ec327-b1c5-47a8-a843-10963cba0a9c')
+    def test_PROXY_SIP_member_show(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_show(pool_id)
+
+    @decorators.idempotent_id('b22288fa-4e25-4779-bd78-6b4802926457')
+    def test_PROXY_LC_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('5ee3df40-381a-4497-9e31-df82d8c2e514')
+    def test_PROXY_LC_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('43d30b1d-0f99-4b46-ad37-542e899ceae7')
+    def test_PROXY_RR_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('d5cf47a6-a3bb-4238-a5cf-a74b122edce4')
+    def test_PROXY_RR_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('2061a0cf-49e0-49b8-af4d-f197cf84ef11')
+    def test_PROXY_SI_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('5946b163-8684-402a-b228-c0648a3e0734')
+    def test_PROXY_SI_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('56a21d8e-825a-4780-a073-41061a0d55ca')
+    def test_PROXY_SIP_alt_monitor_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_update(pool_id, alternate_monitor=True)
+
+    @decorators.idempotent_id('25a24e27-218b-4dcd-99aa-e9ca9f8163e5')
+    def test_PROXY_SIP_member_update(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_update(pool_id)
+
+    @decorators.idempotent_id('7ae0bd6f-d04c-4d53-bb7e-fef0680726db')
+    def test_PROXY_LC_member_batch_update(self):
+        self._test_member_batch_update(const.PROXY,
+                                       const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('de033003-1dcb-4896-ad5d-9e68e31addf0')
+    def test_PROXY_LC_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.PROXY,
+                                       const.LB_ALGORITHM_LEAST_CONNECTIONS,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('82325d1a-ad01-471e-bfb3-b75ca86ae8eb')
+    def test_PROXY_RR_member_batch_update(self):
+        self._test_member_batch_update(const.PROXY,
+                                       const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('098f73c5-e3c1-4dfa-bd7f-c87df90743e6')
+    def test_PROXY_RR_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.PROXY,
+                                       const.LB_ALGORITHM_ROUND_ROBIN,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('963d7e71-d8b7-4257-9b01-f1d7ab57cbc8')
+    def test_PROXY_SI_member_batch_update(self):
+        self._test_member_batch_update(const.PROXY,
+                                       const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('f55d8bff-ac68-4e3b-8f05-a9bb69bb0881')
+    def test_PROXY_SI_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.PROXY,
+                                       const.LB_ALGORITHM_SOURCE_IP,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('1ab05cf2-265e-4291-b17c-19caa0a1b6ff')
+    def test_PROXY_SIP_member_batch_update(self):
+        self._test_member_batch_update(const.PROXY,
+                                       const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('4de187b6-4948-4394-af6b-8828e96d8f3e')
+    def test_PROXY_SIP_alt_monitor_member_batch_update(self):
+        self._test_member_batch_update(const.PROXY,
+                                       const.LB_ALGORITHM_SOURCE_IP_PORT,
+                                       alternate_monitor=True)
+
+    @decorators.idempotent_id('069b8558-138f-4d6c-a3ec-9e803d5e2a14')
+    def test_PROXY_LC_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_delete(pool_id)
+
+    @decorators.idempotent_id('6bca4760-bfb4-4cee-b77f-a77abec3e38e')
+    def test_PROXY_RR_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_delete(pool_id)
+
+    @decorators.idempotent_id('92368eef-d9ce-47d9-b3f2-7624601010a0')
+    def test_PROXY_SI_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_delete(pool_id)
+
+    @decorators.idempotent_id('e83b9389-768f-4bcf-a650-17af01243d2b')
+    def test_PROXY_SIP_member_delete(self):
+        pool_id = self._listener_pool_create(
+            listener_protocol=const.TCP, pool_protocol=const.PROXY,
+            algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_delete(pool_id)
diff --git a/octavia_tempest_plugin/tests/api/v2/test_pool.py b/octavia_tempest_plugin/tests/api/v2/test_pool.py
index d9f5f80..375f7f4 100644
--- a/octavia_tempest_plugin/tests/api/v2/test_pool.py
+++ b/octavia_tempest_plugin/tests/api/v2/test_pool.py
@@ -29,13 +29,13 @@
 CONF = config.CONF
 
 
-class PoolAPITest(test_base.LoadBalancerBaseTest):
+class PoolAPIBaseTest(test_base.LoadBalancerBaseTest):
     """Test the pool object API."""
 
     @classmethod
     def resource_setup(cls):
         """Setup resources needed by the tests."""
-        super(PoolAPITest, cls).resource_setup()
+        super(PoolAPIBaseTest, cls).resource_setup()
 
         lb_name = data_utils.rand_name("lb_member_lb1_pool")
         lb_kwargs = {const.PROVIDER: CONF.load_balancer.provider,
@@ -54,283 +54,6 @@
                                 CONF.load_balancer.lb_build_interval,
                                 CONF.load_balancer.lb_build_timeout)
 
-    # Pool with Least Connections algorithm
-    @decorators.idempotent_id('29f1a69d-6a0d-4a85-b178-f50f5b4bdfbc')
-    def test_HTTP_LC_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.HTTP, protocol_port=10,
-                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('5086402a-2339-4238-bddb-d30508e6cc53')
-    def test_HTTP_LC_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.HTTP,
-                               pool_protocol=const.HTTP, protocol_port=11,
-                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('eb84fabc-68e6-44f7-955d-4919f045cd08')
-    def test_HTTPS_LC_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.HTTPS, protocol_port=12,
-                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('664fc4d3-70d9-41c5-b3f8-c006726062ae')
-    def test_HTTPS_LC_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.HTTPS,
-                               pool_protocol=const.HTTPS, protocol_port=13,
-                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('08e35f78-a85d-48d2-8ac3-14c5e68b64f7')
-    def test_PROXY_LC_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.PROXY, protocol_port=14,
-                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('044f460b-47ec-4e97-96be-c7ab812bfa16')
-    def test_PROXY_LC_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.TCP,
-                               pool_protocol=const.PROXY, protocol_port=15,
-                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('8f552da6-38f8-44b8-b69b-072cc1e232a6')
-    def test_TCP_LC_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.TCP, protocol_port=16,
-                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('728b974f-ff59-479b-ada5-de280bbaaf02')
-    def test_TCP_LC_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.TCP,
-                               pool_protocol=const.TCP, protocol_port=17,
-                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('0cb032d9-e092-476e-9aaf-463eea58fc16')
-    def test_UDP_LC_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.UDP, protocol_port=18,
-                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('9bf3bb05-ee36-47f3-b669-78f06a94035d')
-    def test_UDP_LC_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.UDP,
-                               pool_protocol=const.UDP, protocol_port=19,
-                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    # Pool with Round Robin algorithm
-    @decorators.idempotent_id('7587fe48-87ba-4538-9f03-190911f100ff')
-    def test_HTTP_RR_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.HTTP, protocol_port=20,
-                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('c9c0df79-f07e-428c-ae57-b9d4078eec79')
-    def test_HTTP_RR_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.HTTP,
-                               pool_protocol=const.HTTP, protocol_port=21,
-                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('cc940a8b-b21c-46f5-9976-d2c8dd73b626')
-    def test_HTTPS_RR_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.HTTPS, protocol_port=22,
-                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('10df2793-63b2-42a3-a5d0-9241a9d700a3')
-    def test_HTTPS_RR_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.HTTPS,
-                               pool_protocol=const.HTTPS, protocol_port=23,
-                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('4d6c124e-73ea-4b32-bd1c-3ff7be2c4e55')
-    def test_PROXY_RR_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.PROXY, protocol_port=24,
-                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('60406086-b0a9-4f55-8f64-df161981443c')
-    def test_PROXY_RR_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.TCP,
-                               pool_protocol=const.PROXY, protocol_port=25,
-                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('41a5f22e-80e8-4d85-bfd6-2726846ed2ce')
-    def test_TCP_RR_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.TCP, protocol_port=26,
-                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('b76432ae-1aa2-4048-b326-1cbda28415ac')
-    def test_TCP_RR_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.TCP,
-                               pool_protocol=const.TCP, protocol_port=27,
-                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('c09be35d-8a8b-4abd-8752-2cb4d7d7fab2')
-    def test_UDP_RR_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.UDP, protocol_port=28,
-                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('4fb59ed9-5c44-437e-a5f9-bb01b9ba6a72')
-    def test_UDP_RR_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.UDP,
-                               pool_protocol=const.UDP, protocol_port=29,
-                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    # Pool with Source IP algorithm
-    @decorators.idempotent_id('a8b1b41c-5c3c-4c17-a2d4-b7c344520e3d')
-    def test_HTTP_SI_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.HTTP, protocol_port=30,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('0136341c-4622-4f65-a59d-b9983331d627')
-    def test_HTTP_SI_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.HTTP,
-                               pool_protocol=const.HTTP, protocol_port=31,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('d69c5e0b-43b5-4afe-a94a-1a4f93e44a93')
-    def test_HTTPS_SI_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.HTTPS, protocol_port=32,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('04cc43f2-9eab-4552-b8c1-cea9e1325696')
-    def test_HTTPS_SI_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.HTTPS,
-                               pool_protocol=const.HTTPS, protocol_port=33,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('cc42779d-71f8-4a7c-8217-02127be344ce')
-    def test_PROXY_SI_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.PROXY, protocol_port=34,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('c845d8d3-30d7-42c3-8943-9a4582c62e2d')
-    def test_PROXY_SI_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.TCP,
-                               pool_protocol=const.PROXY, protocol_port=35,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('869b4208-5821-44f5-acf6-4f087c4dd79c')
-    def test_TCP_SI_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.TCP, protocol_port=36,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('4b0be593-b2e4-4704-a347-c36dae76aaad')
-    def test_TCP_SI_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.TCP,
-                               pool_protocol=const.TCP, protocol_port=37,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('47af95cb-685a-48de-9d17-66108cdfd3fa')
-    def test_UDP_SI_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.UDP, protocol_port=38,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('0115ab0c-e8fd-434a-9448-7fba55a8f27d')
-    def test_UDP_SI_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.UDP,
-                               pool_protocol=const.UDP, protocol_port=39,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    # Pool with Source IP Port algorithm
-    @decorators.idempotent_id('265ba978-a528-429c-9ef7-c36373ee2225')
-    def test_HTTP_SIP_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.HTTP, protocol_port=40,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('a07e2ff0-90f3-43d3-a7ec-5ca93b7f29bf')
-    def test_HTTP_SIP_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.HTTP,
-                               pool_protocol=const.HTTP, protocol_port=41,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('7da08af5-e225-46df-b0b4-a5f1834a5377')
-    def test_HTTPS_SIP_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.HTTPS, protocol_port=42,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('3d52a82e-e488-445a-8599-87e9bb7153eb')
-    def test_HTTPS_SIP_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.HTTPS,
-                               pool_protocol=const.HTTPS, protocol_port=43,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('ad4cb862-fa37-4874-99c1-511cdcd86f91')
-    def test_PROXY_SIP_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.PROXY, protocol_port=44,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('bcf76f26-e801-4ab4-b338-b210457d592e')
-    def test_PROXY_SIP_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.TCP,
-                               pool_protocol=const.PROXY, protocol_port=45,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('42382080-7fd5-46d7-afd7-d47c880f0397')
-    def test_TCP_SIP_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.TCP, protocol_port=46,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('53687dd3-e076-4e93-b917-93c76a160444')
-    def test_TCP_SIP_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.TCP,
-                               pool_protocol=const.TCP, protocol_port=47,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('02d40127-d46e-4aba-8428-96f6deff3554')
-    def test_UDP_SIP_pool_standalone_create(self):
-        self._test_pool_create(listener_protocol=None,
-                               pool_protocol=const.UDP, protocol_port=48,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('5f1acd3e-305d-40d5-81e9-fe6250411d49')
-    def test_UDP_SIP_pool_with_listener_create(self):
-        self._test_pool_create(listener_protocol=const.UDP,
-                               pool_protocol=const.UDP, protocol_port=49,
-                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    # Test with session persistence
-    @decorators.idempotent_id('c8b84032-1c20-4d85-9db2-2fe5b9eff37a')
-    def test_HTTP_RR_app_cookie_pool_with_listener_create(self):
-        self._test_pool_create(
-            listener_protocol=const.HTTP,
-            pool_protocol=const.HTTP, protocol_port=50,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_APP_COOKIE)
-
-    @decorators.idempotent_id('0296cccb-83be-425c-ac6a-828774734d5a')
-    def test_HTTP_RR_http_cookie_pool_with_listener_create(self):
-        self._test_pool_create(
-            listener_protocol=const.HTTP,
-            pool_protocol=const.HTTP, protocol_port=51,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_HTTP_COOKIE)
-
-    @decorators.idempotent_id('882263e6-d50f-47b4-9083-f76c2b92eef0')
-    def test_HTTP_RR_source_IP_pool_with_listener_create(self):
-        self._test_pool_create(
-            listener_protocol=const.HTTP,
-            pool_protocol=const.HTTP, protocol_port=52,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
-
-    @decorators.idempotent_id('1d5eed30-86bf-4bf4-87d0-22adee3defa1')
-    def test_UDP_RR_source_ip_pool_with_listener_create(self):
-        self._test_pool_create(
-            listener_protocol=const.UDP,
-            pool_protocol=const.UDP, protocol_port=53,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
-
     def _test_pool_create(self, listener_protocol, pool_protocol,
                           protocol_port, algorithm, session_persistence=None):
         """Tests pool create and basic show APIs.
@@ -510,86 +233,6 @@
             self.assertCountEqual(pool_kwargs[const.TAGS],
                                   pool[const.TAGS])
 
-    @decorators.idempotent_id('4b4c8021-f4dd-4826-b825-7e3dc0beaba4')
-    def test_HTTP_LC_pool_list(self):
-        self._test_pool_list(const.HTTP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('6959a32e-fb34-4f3e-be68-8880c6450016')
-    def test_HTTP_RR_pool_list(self):
-        self._test_pool_list(const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('b2cb9879-c1b3-491a-bd20-773bc57625b0')
-    def test_HTTP_SI_pool_list(self):
-        self._test_pool_list(const.HTTP, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('871b5a7f-c8f3-4d05-9533-f9498e2465fa')
-    def test_HTTP_SIP_pool_list(self):
-        self._test_pool_list(const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('8ace3b65-7183-4b55-837d-3e7f438ea079')
-    def test_HTTPS_LC_pool_list(self):
-        self._test_pool_list(const.HTTPS, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('7e01fa71-34fd-42e6-9db8-4b2a57cda38d')
-    def test_HTTPS_RR_pool_list(self):
-        self._test_pool_list(const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('25d4b0d2-ab46-40ad-afec-1b0afa88a559')
-    def test_HTTPS_SI_pool_list(self):
-        self._test_pool_list(const.HTTPS, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('250e6bf6-5017-47c9-ae12-1e64515d3bfd')
-    def test_HTTPS_SIP_pool_list(self):
-        self._test_pool_list(const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('f3f3565e-a6b3-4541-9fb3-d9900231771b')
-    def test_PROXY_LC_pool_list(self):
-        self._test_pool_list(const.PROXY, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('fb267dae-b4e3-4858-a85e-72ecb1d91eff')
-    def test_PROXY_RR_pool_list(self):
-        self._test_pool_list(const.PROXY, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('42a3e3e3-ad71-418e-a262-628a213a7b03')
-    def test_PROXY_SI_pool_list(self):
-        self._test_pool_list(const.PROXY, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('69d3f811-6ce8-403e-bae9-745d51cb268a')
-    def test_PROXY_SIP_pool_list(self):
-        self._test_pool_list(const.PROXY, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('f3a74c0c-3083-44a5-9938-a245176babcd')
-    def test_TCP_LC_pool_list(self):
-        self._test_pool_list(const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('1a0b616f-ee77-4ac1-bb5f-300c2a10a7f2')
-    def test_TCP_RR_pool_list(self):
-        self._test_pool_list(const.TCP, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('ec0fda75-f2d7-4fa6-ba91-c5eb9a7e9874')
-    def test_TCP_SI_pool_list(self):
-        self._test_pool_list(const.TCP, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('8ca217d0-705f-4a7a-87c2-752bb1ee88f1')
-    def test_TCP_SIP_pool_list(self):
-        self._test_pool_list(const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('ed26899d-a590-46fc-bf70-27c5a9c59cbf')
-    def test_UDP_LC_pool_list(self):
-        self._test_pool_list(const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('6fb6a6e3-ff65-4f2c-8876-2997d3903cfe')
-    def test_UDP_RR_pool_list(self):
-        self._test_pool_list(const.UDP, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('0bb02800-d7c9-4916-a532-ac1ac7b945d0')
-    def test_UDP_SI_pool_list(self):
-        self._test_pool_list(const.UDP, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('bdc7df5f-ffdb-48c8-823e-a3b5d76868a0')
-    def test_UDP_SIP_pool_list(self):
-        self._test_pool_list(const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
     def _test_pool_list(self, pool_protocol, algorithm):
         """Tests pool list API and field filtering.
 
@@ -970,111 +613,6 @@
             self.assertTrue(not any(["" in pool[const.TAGS]
                                      for pool in list_of_pools]))
 
-    @decorators.idempotent_id('416c72c6-ef63-4e70-b27e-3ed95b93c02d')
-    def test_HTTP_LC_pool_show(self):
-        self._test_pool_show(const.HTTP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('82568809-bdb9-444b-9790-128d0c328d72')
-    def test_HTTPS_LC_pool_show(self):
-        self._test_pool_show(const.HTTPS, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('93e4bc67-ce12-43fb-a50d-97de47c3a63f')
-    def test_PROXY_LC_pool_show(self):
-        self._test_pool_show(const.PROXY, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('ee910c1e-1704-4b41-99c1-0c1f904e577d')
-    def test_TCP_LC_pool_show(self):
-        self._test_pool_show(const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('5f4339f6-0387-44f4-a5f9-e385d44b5ee2')
-    def test_UDP_LC_pool_show(self):
-        self._test_pool_show(const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('b7932438-1aea-4175-a50c-984fee1c0cad')
-    def test_HTTP_RR_pool_show(self):
-        self._test_pool_show(const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('a1bffe2f-ce20-4d79-a168-bc930de5edcb')
-    def test_HTTPS_RR_pool_show(self):
-        self._test_pool_show(const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('4cf9fa5c-d8e0-4253-8b79-2eb59e066772')
-    def test_PROXY_RR_pool_show(self):
-        self._test_pool_show(const.PROXY, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('e6e91bb3-76b3-4ff8-ad60-d20ac1e64381')
-    def test_TCP_RR_pool_show(self):
-        self._test_pool_show(const.TCP, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('7c4a1c90-7fc2-42ee-ad78-d7c75b5a56d2')
-    def test_UDP_RR_pool_show(self):
-        self._test_pool_show(const.UDP, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('af1c1b10-a6ac-4f28-82ba-2c0770903a5c')
-    def test_HTTP_SI_pool_show(self):
-        self._test_pool_show(const.HTTP, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('64434a6d-222e-4056-bcc0-335ebe4f03ee')
-    def test_HTTPS_SI_pool_show(self):
-        self._test_pool_show(const.HTTPS, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('adbb7f3b-7a37-4a8e-a2b4-c3f827dad0ba')
-    def test_PROXY_SI_pool_show(self):
-        self._test_pool_show(const.PROXY, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('55f62d1a-33b0-4263-84af-672a30ee52bd')
-    def test_TCP_SI_pool_show(self):
-        self._test_pool_show(const.TCP, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('5b961eee-183d-435c-bdf5-b83ca68c4944')
-    def test_UDP_SI_pool_show(self):
-        self._test_pool_show(const.UDP, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('59964666-3dfe-4bad-81e0-bc5a4809c10c')
-    def test_HTTP_SIP_pool_show(self):
-        self._test_pool_show(const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('9f8f855c-cd09-4a74-b5f2-c5c13b59422e')
-    def test_HTTPS_SIP_pool_show(self):
-        self._test_pool_show(const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('1194bd18-20bc-43e7-b588-9f78a72e0021')
-    def test_PROXY_SIP_pool_show(self):
-        self._test_pool_show(const.PROXY, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('6003cbe8-73a5-416a-9be0-7aa5699dc157')
-    def test_TCP_SIP_pool_show(self):
-        self._test_pool_show(const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('1400529e-3a0c-4bac-b6ed-669fdd723956')
-    def test_UDP_SIP_pool_show(self):
-        self._test_pool_show(const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    # Test with session persistence
-    @decorators.idempotent_id('6fa12ae6-a61a-43d0-85d7-5367811c9c5a')
-    def test_HTTP_RR_app_cookie_pool_show(self):
-        self._test_pool_show(
-            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_APP_COOKIE)
-
-    @decorators.idempotent_id('4a1b6e2c-c216-4589-9ab6-2cd63217f06a')
-    def test_HTTP_RR_http_cookie_pool_show(self):
-        self._test_pool_show(
-            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_HTTP_COOKIE)
-
-    @decorators.idempotent_id('373f1c80-e51e-4260-b8d8-f6aeb512f81c')
-    def test_HTTP_RR_source_IP_pool_show(self):
-        self._test_pool_show(
-            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
-
-    @decorators.idempotent_id('bd732c36-bdaa-4591-bf4e-28268874d22c')
-    def test_UDP_RR_source_IP_pool_show(self):
-        self._test_pool_show(
-            const.UDP, const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
-
     def _test_pool_show(self, pool_protocol, algorithm,
                         session_persistence=None):
         """Tests pool show API.
@@ -1215,114 +753,6 @@
                 'PoolClient', 'show_pool',
                 expected_allowed, pool[const.ID])
 
-    @decorators.idempotent_id('d73755fe-ba3a-4248-9543-8e167a5aa7f4')
-    def test_HTTP_LC_pool_update(self):
-        self._test_pool_update(const.HTTP,
-                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('ca641999-7817-4f8f-a58b-2ccd7a5dca97')
-    def test_HTTPS_LC_pool_update(self):
-        self._test_pool_update(const.HTTPS,
-                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('67a2cbab-f4fc-41c8-93e8-97ddba39c1ab')
-    def test_PROXY_LC_pool_update(self):
-        self._test_pool_update(const.PROXY,
-                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('c9f1ed23-f6d4-4d44-9d22-bdc1fbe5854d')
-    def test_TCP_LC_pool_update(self):
-        self._test_pool_update(const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('8e6b8802-c4a7-43eb-a4e8-9f6bf7899a7d')
-    def test_UDP_LC_pool_update(self):
-        self._test_pool_update(const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('7bd0a6bf-57b4-46a6-83ef-f9991896658a')
-    def test_HTTP_RR_pool_update(self):
-        self._test_pool_update(const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('ac097c2e-4f79-4714-8de4-517598d37919')
-    def test_HTTPS_RR_pool_update(self):
-        self._test_pool_update(const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('4392bc21-c18e-4e25-bb7e-2c9e3777d784')
-    def test_PROXY_RR_pool_update(self):
-        self._test_pool_update(const.PROXY, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('f6a5970d-2f27-419b-a0ee-7a420ee7b396')
-    def test_TCP_RR_pool_update(self):
-        self._test_pool_update(const.TCP, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('a1cded67-9fd6-4155-8761-ce165d518b47')
-    def test_UDP_RR_pool_update(self):
-        self._test_pool_update(const.UDP, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('42a742d2-ef9c-47fd-8585-5588bb867431')
-    def test_HTTP_SI_pool_update(self):
-        self._test_pool_update(const.HTTP, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('3b4e6462-4e0c-4c05-bc30-d6f86f67bb60')
-    def test_HTTPS_SI_pool_update(self):
-        self._test_pool_update(const.HTTPS, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('d2cb7a0a-8268-46bc-a519-08474c42c4ca')
-    def test_PROXY_SI_pool_update(self):
-        self._test_pool_update(const.PROXY, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('84e63663-0bf7-45bc-a4d9-b3bbd664fd8c')
-    def test_TCP_SI_pool_update(self):
-        self._test_pool_update(const.TCP, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('cdb230b9-996a-4933-a7a2-a7b09465c18c')
-    def test_UDP_SI_pool_update(self):
-        self._test_pool_update(const.UDP, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('7c770af5-782e-453c-bd2e-41ec90b37907')
-    def test_HTTP_SIP_pool_update(self):
-        self._test_pool_update(const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('72cee49d-36d5-4b54-8883-8fe7be9fd0f0')
-    def test_HTTPS_SIP_pool_update(self):
-        self._test_pool_update(const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('f269293c-b6fa-4fe2-82a6-57fc8ef89260')
-    def test_PROXY_SIP_pool_update(self):
-        self._test_pool_update(const.PROXY, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('f5445a86-247f-4075-8b71-e4e5415d0bed')
-    def test_TCP_SIP_pool_update(self):
-        self._test_pool_update(const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('d9e1aeee-21c3-4b0f-9685-834768597607')
-    def test_UDP_SIP_pool_update(self):
-        self._test_pool_update(const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    # Test with session persistence
-    @decorators.idempotent_id('8677a512-77e1-4af3-96f7-8a3d66725e08')
-    def test_HTTP_RR_app_cookie_pool_update(self):
-        self._test_pool_update(
-            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_APP_COOKIE)
-
-    @decorators.idempotent_id('4d3b3a4a-a652-4dca-9a49-b14471ce5309')
-    def test_HTTP_RR_http_cookie_pool_update(self):
-        self._test_pool_update(
-            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_HTTP_COOKIE)
-
-    @decorators.idempotent_id('2e7bbf67-ed32-4a3c-b5ae-1aff8b07bacc')
-    def test_HTTP_RR_source_IP_pool_update(self):
-        self._test_pool_update(
-            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
-
-    @decorators.idempotent_id('28b90650-a612-4b10-981f-d3dd6a366e4f')
-    def test_UDP_RR_source_IP_pool_update(self):
-        self._test_pool_update(
-            const.UDP, const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
-
     def _test_pool_update(self, pool_protocol, algorithm,
                           session_persistence=None):
         """Tests pool update and show APIs.
@@ -1582,114 +1012,6 @@
         if session_persistence is not None:
             self.assertIsNone(pool.get(const.SESSION_PERSISTENCE))
 
-    @decorators.idempotent_id('008088c8-696e-47ba-bc18-75827fe5956b')
-    def test_HTTP_LC_pool_delete(self):
-        self._test_pool_delete(const.HTTP,
-                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('c4b2dad0-378f-4f85-a1f3-597de609b0f3')
-    def test_HTTPS_LC_pool_delete(self):
-        self._test_pool_delete(const.HTTPS,
-                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('d906c63e-6090-422c-9627-e5a971e1665c')
-    def test_PROXY_LC_pool_delete(self):
-        self._test_pool_delete(const.PROXY,
-                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('3bfd2d96-813b-48af-86e0-97361873a68a')
-    def test_TCP_LC_pool_delete(self):
-        self._test_pool_delete(const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('ea58bede-1934-480b-86fc-665b872fc946')
-    def test_UDP_LC_pool_delete(self):
-        self._test_pool_delete(const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('35ed3800-7a4a-47a6-9b94-c1033fff1112')
-    def test_HTTP_RR_pool_delete(self):
-        self._test_pool_delete(const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('c305126b-3ead-4ea8-a886-77d355c0d4a2')
-    def test_HTTPS_RR_pool_delete(self):
-        self._test_pool_delete(const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('729be91c-82c5-4b4e-9feb-08a1c786488b')
-    def test_PROXY_RR_pool_delete(self):
-        self._test_pool_delete(const.PROXY, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('a455dea2-19ce-435c-90ae-e143fe84245e')
-    def test_TCP_RR_pool_delete(self):
-        self._test_pool_delete(const.TCP, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('63559694-6b38-4bad-9f10-3675131b28c0')
-    def test_UDP_RR_pool_delete(self):
-        self._test_pool_delete(const.UDP, const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('06bec76b-8fbf-4be8-9350-92590ac48606')
-    def test_HTTP_SI_pool_delete(self):
-        self._test_pool_delete(const.HTTP, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('4b21149e-64f8-4e5f-8f71-020abbd0d0eb')
-    def test_HTTPS_SI_pool_delete(self):
-        self._test_pool_delete(const.HTTPS, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('277fba8f-d72b-47f0-9723-5e013f53fb7a')
-    def test_PROXY_SI_pool_delete(self):
-        self._test_pool_delete(const.PROXY, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('8411295f-aec0-40ab-a25d-a4677c711d98')
-    def test_TCP_SI_pool_delete(self):
-        self._test_pool_delete(const.TCP, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('33322f21-12cc-4f2e-b406-0c11b05a1c6e')
-    def test_UDP_SI_pool_delete(self):
-        self._test_pool_delete(const.UDP, const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('9b40351e-1140-4b98-974c-46bd1a19763d')
-    def test_HTTP_SIP_pool_delete(self):
-        self._test_pool_delete(const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('391a4ed7-be97-4231-8198-5c2802bc6e30')
-    def test_HTTPS_SIP_pool_delete(self):
-        self._test_pool_delete(const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('1f6b6b9c-96c6-420b-bc51-8568c081a1ee')
-    def test_PROXY_SIP_pool_delete(self):
-        self._test_pool_delete(const.PROXY, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('fe54f133-865a-4613-9cf0-0469c780f53e')
-    def test_TCP_SIP_pool_delete(self):
-        self._test_pool_delete(const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('7cac0520-c7ea-49cb-8b38-0e309af2ea53')
-    def test_UDP_SIP_pool_delete(self):
-        self._test_pool_delete(const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    # Test with session persistence
-    @decorators.idempotent_id('f9aa5a8c-4e2a-4029-8581-2980f1d111cf')
-    def test_HTTP_RR_app_cookie_pool_delete(self):
-        self._test_pool_delete(
-            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_APP_COOKIE)
-
-    @decorators.idempotent_id('12a31fb5-85fc-4ec8-9475-079dc06f358b')
-    def test_HTTP_RR_http_cookie_pool_delete(self):
-        self._test_pool_delete(
-            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_HTTP_COOKIE)
-
-    @decorators.idempotent_id('07528fe6-12a6-4fca-8819-9980e9d3db84')
-    def test_HTTP_RR_source_IP_pool_delete(self):
-        self._test_pool_delete(
-            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
-
-    @decorators.idempotent_id('cc69c0d0-9191-4faf-a154-e33df880f44e')
-    def test_UDP_RR_source_IP_pool_delete(self):
-        self._test_pool_delete(
-            const.UDP, const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
-
     def _test_pool_delete(self, pool_protocol, algorithm,
                           session_persistence=None):
         """Tests pool create and delete APIs.
@@ -1797,3 +1119,693 @@
             const.ACTIVE,
             CONF.load_balancer.check_interval,
             CONF.load_balancer.check_timeout)
+
+
+class PoolLeastConnectionsAPITest(PoolAPIBaseTest):
+    """Pool with Least Connections algorithm"""
+
+    @decorators.idempotent_id('29f1a69d-6a0d-4a85-b178-f50f5b4bdfbc')
+    def test_HTTP_LC_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.HTTP, protocol_port=10,
+                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('5086402a-2339-4238-bddb-d30508e6cc53')
+    def test_HTTP_LC_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.HTTP,
+                               pool_protocol=const.HTTP, protocol_port=11,
+                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('eb84fabc-68e6-44f7-955d-4919f045cd08')
+    def test_HTTPS_LC_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.HTTPS, protocol_port=12,
+                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('664fc4d3-70d9-41c5-b3f8-c006726062ae')
+    def test_HTTPS_LC_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.HTTPS,
+                               pool_protocol=const.HTTPS, protocol_port=13,
+                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('08e35f78-a85d-48d2-8ac3-14c5e68b64f7')
+    def test_PROXY_LC_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.PROXY, protocol_port=14,
+                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('044f460b-47ec-4e97-96be-c7ab812bfa16')
+    def test_PROXY_LC_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.TCP,
+                               pool_protocol=const.PROXY, protocol_port=15,
+                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('8f552da6-38f8-44b8-b69b-072cc1e232a6')
+    def test_TCP_LC_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.TCP, protocol_port=16,
+                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('728b974f-ff59-479b-ada5-de280bbaaf02')
+    def test_TCP_LC_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.TCP,
+                               pool_protocol=const.TCP, protocol_port=17,
+                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('0cb032d9-e092-476e-9aaf-463eea58fc16')
+    def test_UDP_LC_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.UDP, protocol_port=18,
+                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('9bf3bb05-ee36-47f3-b669-78f06a94035d')
+    def test_UDP_LC_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.UDP,
+                               pool_protocol=const.UDP, protocol_port=19,
+                               algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('4b4c8021-f4dd-4826-b825-7e3dc0beaba4')
+    def test_HTTP_LC_pool_list(self):
+        self._test_pool_list(const.HTTP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('d73755fe-ba3a-4248-9543-8e167a5aa7f4')
+    def test_HTTP_LC_pool_update(self):
+        self._test_pool_update(const.HTTP,
+                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('ca641999-7817-4f8f-a58b-2ccd7a5dca97')
+    def test_HTTPS_LC_pool_update(self):
+        self._test_pool_update(const.HTTPS,
+                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('67a2cbab-f4fc-41c8-93e8-97ddba39c1ab')
+    def test_PROXY_LC_pool_update(self):
+        self._test_pool_update(const.PROXY,
+                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('c9f1ed23-f6d4-4d44-9d22-bdc1fbe5854d')
+    def test_TCP_LC_pool_update(self):
+        self._test_pool_update(const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('8e6b8802-c4a7-43eb-a4e8-9f6bf7899a7d')
+    def test_UDP_LC_pool_update(self):
+        self._test_pool_update(const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('008088c8-696e-47ba-bc18-75827fe5956b')
+    def test_HTTP_LC_pool_delete(self):
+        self._test_pool_delete(const.HTTP,
+                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('c4b2dad0-378f-4f85-a1f3-597de609b0f3')
+    def test_HTTPS_LC_pool_delete(self):
+        self._test_pool_delete(const.HTTPS,
+                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('d906c63e-6090-422c-9627-e5a971e1665c')
+    def test_PROXY_LC_pool_delete(self):
+        self._test_pool_delete(const.PROXY,
+                               const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('3bfd2d96-813b-48af-86e0-97361873a68a')
+    def test_TCP_LC_pool_delete(self):
+        self._test_pool_delete(const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('ea58bede-1934-480b-86fc-665b872fc946')
+    def test_UDP_LC_pool_delete(self):
+        self._test_pool_delete(const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('8ace3b65-7183-4b55-837d-3e7f438ea079')
+    def test_HTTPS_LC_pool_list(self):
+        self._test_pool_list(const.HTTPS, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('416c72c6-ef63-4e70-b27e-3ed95b93c02d')
+    def test_HTTP_LC_pool_show(self):
+        self._test_pool_show(const.HTTP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('82568809-bdb9-444b-9790-128d0c328d72')
+    def test_HTTPS_LC_pool_show(self):
+        self._test_pool_show(const.HTTPS, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('93e4bc67-ce12-43fb-a50d-97de47c3a63f')
+    def test_PROXY_LC_pool_show(self):
+        self._test_pool_show(const.PROXY, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('ee910c1e-1704-4b41-99c1-0c1f904e577d')
+    def test_TCP_LC_pool_show(self):
+        self._test_pool_show(const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('5f4339f6-0387-44f4-a5f9-e385d44b5ee2')
+    def test_UDP_LC_pool_show(self):
+        self._test_pool_show(const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('f3f3565e-a6b3-4541-9fb3-d9900231771b')
+    def test_PROXY_LC_pool_list(self):
+        self._test_pool_list(const.PROXY, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('f3a74c0c-3083-44a5-9938-a245176babcd')
+    def test_TCP_LC_pool_list(self):
+        self._test_pool_list(const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('ed26899d-a590-46fc-bf70-27c5a9c59cbf')
+    def test_UDP_LC_pool_list(self):
+        self._test_pool_list(const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+
+class PoolRoundRobinAPITest(PoolAPIBaseTest):
+    """Pool with Round Robin algorithm"""
+
+    @decorators.idempotent_id('7587fe48-87ba-4538-9f03-190911f100ff')
+    def test_HTTP_RR_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.HTTP, protocol_port=20,
+                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('c9c0df79-f07e-428c-ae57-b9d4078eec79')
+    def test_HTTP_RR_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.HTTP,
+                               pool_protocol=const.HTTP, protocol_port=21,
+                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('cc940a8b-b21c-46f5-9976-d2c8dd73b626')
+    def test_HTTPS_RR_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.HTTPS, protocol_port=22,
+                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('10df2793-63b2-42a3-a5d0-9241a9d700a3')
+    def test_HTTPS_RR_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.HTTPS,
+                               pool_protocol=const.HTTPS, protocol_port=23,
+                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('4d6c124e-73ea-4b32-bd1c-3ff7be2c4e55')
+    def test_PROXY_RR_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.PROXY, protocol_port=24,
+                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('60406086-b0a9-4f55-8f64-df161981443c')
+    def test_PROXY_RR_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.TCP,
+                               pool_protocol=const.PROXY, protocol_port=25,
+                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('41a5f22e-80e8-4d85-bfd6-2726846ed2ce')
+    def test_TCP_RR_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.TCP, protocol_port=26,
+                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('b76432ae-1aa2-4048-b326-1cbda28415ac')
+    def test_TCP_RR_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.TCP,
+                               pool_protocol=const.TCP, protocol_port=27,
+                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('c09be35d-8a8b-4abd-8752-2cb4d7d7fab2')
+    def test_UDP_RR_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.UDP, protocol_port=28,
+                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('4fb59ed9-5c44-437e-a5f9-bb01b9ba6a72')
+    def test_UDP_RR_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.UDP,
+                               pool_protocol=const.UDP, protocol_port=29,
+                               algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('6959a32e-fb34-4f3e-be68-8880c6450016')
+    def test_HTTP_RR_pool_list(self):
+        self._test_pool_list(const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('7e01fa71-34fd-42e6-9db8-4b2a57cda38d')
+    def test_HTTPS_RR_pool_list(self):
+        self._test_pool_list(const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('fb267dae-b4e3-4858-a85e-72ecb1d91eff')
+    def test_PROXY_RR_pool_list(self):
+        self._test_pool_list(const.PROXY, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('1a0b616f-ee77-4ac1-bb5f-300c2a10a7f2')
+    def test_TCP_RR_pool_list(self):
+        self._test_pool_list(const.TCP, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('6fb6a6e3-ff65-4f2c-8876-2997d3903cfe')
+    def test_UDP_RR_pool_list(self):
+        self._test_pool_list(const.UDP, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('b7932438-1aea-4175-a50c-984fee1c0cad')
+    def test_HTTP_RR_pool_show(self):
+        self._test_pool_show(const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('a1bffe2f-ce20-4d79-a168-bc930de5edcb')
+    def test_HTTPS_RR_pool_show(self):
+        self._test_pool_show(const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('4cf9fa5c-d8e0-4253-8b79-2eb59e066772')
+    def test_PROXY_RR_pool_show(self):
+        self._test_pool_show(const.PROXY, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('e6e91bb3-76b3-4ff8-ad60-d20ac1e64381')
+    def test_TCP_RR_pool_show(self):
+        self._test_pool_show(const.TCP, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('7c4a1c90-7fc2-42ee-ad78-d7c75b5a56d2')
+    def test_UDP_RR_pool_show(self):
+        self._test_pool_show(const.UDP, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('7bd0a6bf-57b4-46a6-83ef-f9991896658a')
+    def test_HTTP_RR_pool_update(self):
+        self._test_pool_update(const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('ac097c2e-4f79-4714-8de4-517598d37919')
+    def test_HTTPS_RR_pool_update(self):
+        self._test_pool_update(const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('4392bc21-c18e-4e25-bb7e-2c9e3777d784')
+    def test_PROXY_RR_pool_update(self):
+        self._test_pool_update(const.PROXY, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('f6a5970d-2f27-419b-a0ee-7a420ee7b396')
+    def test_TCP_RR_pool_update(self):
+        self._test_pool_update(const.TCP, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('a1cded67-9fd6-4155-8761-ce165d518b47')
+    def test_UDP_RR_pool_update(self):
+        self._test_pool_update(const.UDP, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('35ed3800-7a4a-47a6-9b94-c1033fff1112')
+    def test_HTTP_RR_pool_delete(self):
+        self._test_pool_delete(const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('c305126b-3ead-4ea8-a886-77d355c0d4a2')
+    def test_HTTPS_RR_pool_delete(self):
+        self._test_pool_delete(const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('729be91c-82c5-4b4e-9feb-08a1c786488b')
+    def test_PROXY_RR_pool_delete(self):
+        self._test_pool_delete(const.PROXY, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('a455dea2-19ce-435c-90ae-e143fe84245e')
+    def test_TCP_RR_pool_delete(self):
+        self._test_pool_delete(const.TCP, const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('63559694-6b38-4bad-9f10-3675131b28c0')
+    def test_UDP_RR_pool_delete(self):
+        self._test_pool_delete(const.UDP, const.LB_ALGORITHM_ROUND_ROBIN)
+
+
+class PoolSourceIPAPITest(PoolAPIBaseTest):
+    """Pool with Source IP algorithm"""
+
+    @decorators.idempotent_id('a8b1b41c-5c3c-4c17-a2d4-b7c344520e3d')
+    def test_HTTP_SI_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.HTTP, protocol_port=30,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('0136341c-4622-4f65-a59d-b9983331d627')
+    def test_HTTP_SI_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.HTTP,
+                               pool_protocol=const.HTTP, protocol_port=31,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('d69c5e0b-43b5-4afe-a94a-1a4f93e44a93')
+    def test_HTTPS_SI_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.HTTPS, protocol_port=32,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('04cc43f2-9eab-4552-b8c1-cea9e1325696')
+    def test_HTTPS_SI_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.HTTPS,
+                               pool_protocol=const.HTTPS, protocol_port=33,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('cc42779d-71f8-4a7c-8217-02127be344ce')
+    def test_PROXY_SI_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.PROXY, protocol_port=34,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('c845d8d3-30d7-42c3-8943-9a4582c62e2d')
+    def test_PROXY_SI_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.TCP,
+                               pool_protocol=const.PROXY, protocol_port=35,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('869b4208-5821-44f5-acf6-4f087c4dd79c')
+    def test_TCP_SI_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.TCP, protocol_port=36,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('4b0be593-b2e4-4704-a347-c36dae76aaad')
+    def test_TCP_SI_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.TCP,
+                               pool_protocol=const.TCP, protocol_port=37,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('47af95cb-685a-48de-9d17-66108cdfd3fa')
+    def test_UDP_SI_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.UDP, protocol_port=38,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('0115ab0c-e8fd-434a-9448-7fba55a8f27d')
+    def test_UDP_SI_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.UDP,
+                               pool_protocol=const.UDP, protocol_port=39,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('b2cb9879-c1b3-491a-bd20-773bc57625b0')
+    def test_HTTP_SI_pool_list(self):
+        self._test_pool_list(const.HTTP, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('25d4b0d2-ab46-40ad-afec-1b0afa88a559')
+    def test_HTTPS_SI_pool_list(self):
+        self._test_pool_list(const.HTTPS, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('42a3e3e3-ad71-418e-a262-628a213a7b03')
+    def test_PROXY_SI_pool_list(self):
+        self._test_pool_list(const.PROXY, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('ec0fda75-f2d7-4fa6-ba91-c5eb9a7e9874')
+    def test_TCP_SI_pool_list(self):
+        self._test_pool_list(const.TCP, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('0bb02800-d7c9-4916-a532-ac1ac7b945d0')
+    def test_UDP_SI_pool_list(self):
+        self._test_pool_list(const.UDP, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('af1c1b10-a6ac-4f28-82ba-2c0770903a5c')
+    def test_HTTP_SI_pool_show(self):
+        self._test_pool_show(const.HTTP, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('64434a6d-222e-4056-bcc0-335ebe4f03ee')
+    def test_HTTPS_SI_pool_show(self):
+        self._test_pool_show(const.HTTPS, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('adbb7f3b-7a37-4a8e-a2b4-c3f827dad0ba')
+    def test_PROXY_SI_pool_show(self):
+        self._test_pool_show(const.PROXY, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('55f62d1a-33b0-4263-84af-672a30ee52bd')
+    def test_TCP_SI_pool_show(self):
+        self._test_pool_show(const.TCP, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('5b961eee-183d-435c-bdf5-b83ca68c4944')
+    def test_UDP_SI_pool_show(self):
+        self._test_pool_show(const.UDP, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('42a742d2-ef9c-47fd-8585-5588bb867431')
+    def test_HTTP_SI_pool_update(self):
+        self._test_pool_update(const.HTTP, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('3b4e6462-4e0c-4c05-bc30-d6f86f67bb60')
+    def test_HTTPS_SI_pool_update(self):
+        self._test_pool_update(const.HTTPS, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('d2cb7a0a-8268-46bc-a519-08474c42c4ca')
+    def test_PROXY_SI_pool_update(self):
+        self._test_pool_update(const.PROXY, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('84e63663-0bf7-45bc-a4d9-b3bbd664fd8c')
+    def test_TCP_SI_pool_update(self):
+        self._test_pool_update(const.TCP, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('cdb230b9-996a-4933-a7a2-a7b09465c18c')
+    def test_UDP_SI_pool_update(self):
+        self._test_pool_update(const.UDP, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('06bec76b-8fbf-4be8-9350-92590ac48606')
+    def test_HTTP_SI_pool_delete(self):
+        self._test_pool_delete(const.HTTP, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('4b21149e-64f8-4e5f-8f71-020abbd0d0eb')
+    def test_HTTPS_SI_pool_delete(self):
+        self._test_pool_delete(const.HTTPS, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('277fba8f-d72b-47f0-9723-5e013f53fb7a')
+    def test_PROXY_SI_pool_delete(self):
+        self._test_pool_delete(const.PROXY, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('8411295f-aec0-40ab-a25d-a4677c711d98')
+    def test_TCP_SI_pool_delete(self):
+        self._test_pool_delete(const.TCP, const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('33322f21-12cc-4f2e-b406-0c11b05a1c6e')
+    def test_UDP_SI_pool_delete(self):
+        self._test_pool_delete(const.UDP, const.LB_ALGORITHM_SOURCE_IP)
+
+
+class PoolSourceIPPortAPITest(PoolAPIBaseTest):
+    """Pool with Source IP Port algorithm"""
+
+    @decorators.idempotent_id('265ba978-a528-429c-9ef7-c36373ee2225')
+    def test_HTTP_SIP_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.HTTP, protocol_port=40,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('a07e2ff0-90f3-43d3-a7ec-5ca93b7f29bf')
+    def test_HTTP_SIP_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.HTTP,
+                               pool_protocol=const.HTTP, protocol_port=41,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('7da08af5-e225-46df-b0b4-a5f1834a5377')
+    def test_HTTPS_SIP_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.HTTPS, protocol_port=42,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('3d52a82e-e488-445a-8599-87e9bb7153eb')
+    def test_HTTPS_SIP_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.HTTPS,
+                               pool_protocol=const.HTTPS, protocol_port=43,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('ad4cb862-fa37-4874-99c1-511cdcd86f91')
+    def test_PROXY_SIP_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.PROXY, protocol_port=44,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('bcf76f26-e801-4ab4-b338-b210457d592e')
+    def test_PROXY_SIP_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.TCP,
+                               pool_protocol=const.PROXY, protocol_port=45,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('42382080-7fd5-46d7-afd7-d47c880f0397')
+    def test_TCP_SIP_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.TCP, protocol_port=46,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('53687dd3-e076-4e93-b917-93c76a160444')
+    def test_TCP_SIP_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.TCP,
+                               pool_protocol=const.TCP, protocol_port=47,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('02d40127-d46e-4aba-8428-96f6deff3554')
+    def test_UDP_SIP_pool_standalone_create(self):
+        self._test_pool_create(listener_protocol=None,
+                               pool_protocol=const.UDP, protocol_port=48,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('5f1acd3e-305d-40d5-81e9-fe6250411d49')
+    def test_UDP_SIP_pool_with_listener_create(self):
+        self._test_pool_create(listener_protocol=const.UDP,
+                               pool_protocol=const.UDP, protocol_port=49,
+                               algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('871b5a7f-c8f3-4d05-9533-f9498e2465fa')
+    def test_HTTP_SIP_pool_list(self):
+        self._test_pool_list(const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('250e6bf6-5017-47c9-ae12-1e64515d3bfd')
+    def test_HTTPS_SIP_pool_list(self):
+        self._test_pool_list(const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('69d3f811-6ce8-403e-bae9-745d51cb268a')
+    def test_PROXY_SIP_pool_list(self):
+        self._test_pool_list(const.PROXY, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('8ca217d0-705f-4a7a-87c2-752bb1ee88f1')
+    def test_TCP_SIP_pool_list(self):
+        self._test_pool_list(const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('bdc7df5f-ffdb-48c8-823e-a3b5d76868a0')
+    def test_UDP_SIP_pool_list(self):
+        self._test_pool_list(const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('59964666-3dfe-4bad-81e0-bc5a4809c10c')
+    def test_HTTP_SIP_pool_show(self):
+        self._test_pool_show(const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('9f8f855c-cd09-4a74-b5f2-c5c13b59422e')
+    def test_HTTPS_SIP_pool_show(self):
+        self._test_pool_show(const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('1194bd18-20bc-43e7-b588-9f78a72e0021')
+    def test_PROXY_SIP_pool_show(self):
+        self._test_pool_show(const.PROXY, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('6003cbe8-73a5-416a-9be0-7aa5699dc157')
+    def test_TCP_SIP_pool_show(self):
+        self._test_pool_show(const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('1400529e-3a0c-4bac-b6ed-669fdd723956')
+    def test_UDP_SIP_pool_show(self):
+        self._test_pool_show(const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('7c770af5-782e-453c-bd2e-41ec90b37907')
+    def test_HTTP_SIP_pool_update(self):
+        self._test_pool_update(const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('72cee49d-36d5-4b54-8883-8fe7be9fd0f0')
+    def test_HTTPS_SIP_pool_update(self):
+        self._test_pool_update(const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('f269293c-b6fa-4fe2-82a6-57fc8ef89260')
+    def test_PROXY_SIP_pool_update(self):
+        self._test_pool_update(const.PROXY, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('f5445a86-247f-4075-8b71-e4e5415d0bed')
+    def test_TCP_SIP_pool_update(self):
+        self._test_pool_update(const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('d9e1aeee-21c3-4b0f-9685-834768597607')
+    def test_UDP_SIP_pool_update(self):
+        self._test_pool_update(const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('9b40351e-1140-4b98-974c-46bd1a19763d')
+    def test_HTTP_SIP_pool_delete(self):
+        self._test_pool_delete(const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('391a4ed7-be97-4231-8198-5c2802bc6e30')
+    def test_HTTPS_SIP_pool_delete(self):
+        self._test_pool_delete(const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('1f6b6b9c-96c6-420b-bc51-8568c081a1ee')
+    def test_PROXY_SIP_pool_delete(self):
+        self._test_pool_delete(const.PROXY, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('fe54f133-865a-4613-9cf0-0469c780f53e')
+    def test_TCP_SIP_pool_delete(self):
+        self._test_pool_delete(const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('7cac0520-c7ea-49cb-8b38-0e309af2ea53')
+    def test_UDP_SIP_pool_delete(self):
+        self._test_pool_delete(const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+
+class PoolSessionPersistenceAPITest(PoolAPIBaseTest):
+    """Test with session persistence"""
+
+    @decorators.idempotent_id('c8b84032-1c20-4d85-9db2-2fe5b9eff37a')
+    def test_HTTP_RR_app_cookie_pool_with_listener_create(self):
+        self._test_pool_create(
+            listener_protocol=const.HTTP,
+            pool_protocol=const.HTTP, protocol_port=50,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_APP_COOKIE)
+
+    @decorators.idempotent_id('0296cccb-83be-425c-ac6a-828774734d5a')
+    def test_HTTP_RR_http_cookie_pool_with_listener_create(self):
+        self._test_pool_create(
+            listener_protocol=const.HTTP,
+            pool_protocol=const.HTTP, protocol_port=51,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_HTTP_COOKIE)
+
+    @decorators.idempotent_id('882263e6-d50f-47b4-9083-f76c2b92eef0')
+    def test_HTTP_RR_source_IP_pool_with_listener_create(self):
+        self._test_pool_create(
+            listener_protocol=const.HTTP,
+            pool_protocol=const.HTTP, protocol_port=52,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
+
+    @decorators.idempotent_id('1d5eed30-86bf-4bf4-87d0-22adee3defa1')
+    def test_UDP_RR_source_ip_pool_with_listener_create(self):
+        self._test_pool_create(
+            listener_protocol=const.UDP,
+            pool_protocol=const.UDP, protocol_port=53,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
+
+    @decorators.idempotent_id('8677a512-77e1-4af3-96f7-8a3d66725e08')
+    def test_HTTP_RR_app_cookie_pool_update(self):
+        self._test_pool_update(
+            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_APP_COOKIE)
+
+    @decorators.idempotent_id('4d3b3a4a-a652-4dca-9a49-b14471ce5309')
+    def test_HTTP_RR_http_cookie_pool_update(self):
+        self._test_pool_update(
+            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_HTTP_COOKIE)
+
+    @decorators.idempotent_id('2e7bbf67-ed32-4a3c-b5ae-1aff8b07bacc')
+    def test_HTTP_RR_source_IP_pool_update(self):
+        self._test_pool_update(
+            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
+
+    @decorators.idempotent_id('28b90650-a612-4b10-981f-d3dd6a366e4f')
+    def test_UDP_RR_source_IP_pool_update(self):
+        self._test_pool_update(
+            const.UDP, const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
+
+    @decorators.idempotent_id('6fa12ae6-a61a-43d0-85d7-5367811c9c5a')
+    def test_HTTP_RR_app_cookie_pool_show(self):
+        self._test_pool_show(
+            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_APP_COOKIE)
+
+    @decorators.idempotent_id('4a1b6e2c-c216-4589-9ab6-2cd63217f06a')
+    def test_HTTP_RR_http_cookie_pool_show(self):
+        self._test_pool_show(
+            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_HTTP_COOKIE)
+
+    @decorators.idempotent_id('373f1c80-e51e-4260-b8d8-f6aeb512f81c')
+    def test_HTTP_RR_source_IP_pool_show(self):
+        self._test_pool_show(
+            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
+
+    @decorators.idempotent_id('bd732c36-bdaa-4591-bf4e-28268874d22c')
+    def test_UDP_RR_source_IP_pool_show(self):
+        self._test_pool_show(
+            const.UDP, const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
+
+    @decorators.idempotent_id('f9aa5a8c-4e2a-4029-8581-2980f1d111cf')
+    def test_HTTP_RR_app_cookie_pool_delete(self):
+        self._test_pool_delete(
+            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_APP_COOKIE)
+
+    @decorators.idempotent_id('12a31fb5-85fc-4ec8-9475-079dc06f358b')
+    def test_HTTP_RR_http_cookie_pool_delete(self):
+        self._test_pool_delete(
+            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_HTTP_COOKIE)
+
+    @decorators.idempotent_id('07528fe6-12a6-4fca-8819-9980e9d3db84')
+    def test_HTTP_RR_source_IP_pool_delete(self):
+        self._test_pool_delete(
+            const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
+
+    @decorators.idempotent_id('cc69c0d0-9191-4faf-a154-e33df880f44e')
+    def test_UDP_RR_source_IP_pool_delete(self):
+        self._test_pool_delete(
+            const.UDP, const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
diff --git a/octavia_tempest_plugin/tests/scenario/v2/test_member.py b/octavia_tempest_plugin/tests/scenario/v2/test_member.py
index 3ec1b99..64f2248 100644
--- a/octavia_tempest_plugin/tests/scenario/v2/test_member.py
+++ b/octavia_tempest_plugin/tests/scenario/v2/test_member.py
@@ -40,14 +40,14 @@
         return self.current_port
 
 
-class MemberScenarioTest(test_base.LoadBalancerBaseTest):
+class MemberScenarioBaseTest(test_base.LoadBalancerBaseTest):
 
     member_address = '2001:db8:0:0:0:0:0:1'
 
     @classmethod
     def resource_setup(cls):
         """Setup shared resources needed by the tests."""
-        super(MemberScenarioTest, cls).resource_setup()
+        super(MemberScenarioBaseTest, cls).resource_setup()
 
         lb_name = data_utils.rand_name("lb_member_lb1_member")
         lb_kwargs = {const.PROVIDER: CONF.load_balancer.provider,
@@ -144,246 +144,6 @@
         cls.listener_pool_cache[listener_pool_key] = pool[const.ID]
         return pool[const.ID]
 
-    @decorators.idempotent_id('33abafca-ce57-479e-8480-843ef412d6a6')
-    def test_HTTP_LC_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.HTTP, const.HTTP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('eab4eb32-b26f-4fe1-a606-1574b5b6182c')
-    def test_HTTP_LC_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.HTTP, const.HTTP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('80355701-bc68-4cba-a9b3-4f35fc192b6a')
-    def test_HTTPS_LC_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.HTTPS, const.HTTPS, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('6f8fce94-b2aa-4497-b80f-74293d977d25')
-    def test_HTTPS_LC_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.HTTPS, const.HTTPS, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('0e45c423-db43-4fee-8442-d9daabe6b2aa')
-    def test_PROXY_LC_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.TCP, const.PROXY, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('3ea2aad1-5650-4ec6-8394-501de33cce70')
-    def test_PROXY_LC_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.TCP, const.PROXY, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('9b2e7e2d-776b-419c-9717-ab4fef9cd5ca')
-    def test_TCP_LC_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.TCP, const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('06b95367-dc81-41e5-9a53-981833fb2979')
-    def test_TCP_LC_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.TCP, const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('c70bd8c6-0f6a-4ee7-840f-a3355aefd471')
-    def test_UDP_LC_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.UDP, const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('0b4ec248-c6a0-4d29-b77e-189453ec0535')
-    def test_UDP_LC_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.UDP, const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('15c8c3e3-569c-4029-95df-a9f72049e267')
-    def test_HTTP_RR_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.HTTP, const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('a0f02494-ffb3-47be-8670-f56c0df9ec94')
-    def test_HTTP_RR_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.HTTP, const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('57aee0db-3295-42b7-a7d3-aae942a6cb41')
-    def test_HTTPS_RR_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.HTTPS, const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('6c3e5bd7-4573-4f6d-ac64-31b238c9ea51')
-    def test_HTTPS_RR_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.HTTPS, const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('e0ad1fa0-1fdb-472d-9d69-8968631c9239')
-    def test_PROXY_RR_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.TCP, const.PROXY, const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('534fbc38-1c70-4c67-8f89-74a6905b1c98')
-    def test_PROXY_RR_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.TCP, const.PROXY, const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('c4c72e4b-5abe-41df-9f1d-6a8a27c75a80')
-    def test_TCP_RR_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.TCP, const.TCP, const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('673425e0-2a57-4c92-a416-7b4e0824708f')
-    def test_TCP_RR_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.TCP, const.TCP, const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('f08c9efc-b69c-4c0f-a731-74ec8c17fc91')
-    def test_UDP_RR_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.UDP, const.UDP, const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('94829e1e-506e-4f3c-ab04-4e338787ccfd')
-    def test_UDP_RR_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.UDP, const.UDP, const.LB_ALGORITHM_ROUND_ROBIN)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('07d1e571-d12c-4e04-90d1-8f4f42610df3')
-    def test_HTTP_SI_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.HTTP, const.HTTP, const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('3910a7ec-63c5-4152-9fe1-ce21d3e1cdca')
-    def test_HTTP_SI_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.HTTP, const.HTTP, const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('32b0b541-29dc-464b-91c1-115413539de7')
-    def test_HTTPS_SI_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.HTTPS, const.HTTPS, const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('d59ea523-8dac-4e19-8df4-a7076a17296c')
-    def test_HTTPS_SI_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.HTTPS, const.HTTPS, const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('12348506-1cfc-4d62-9cc2-d380776a9154')
-    def test_PROXY_SI_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.TCP, const.PROXY, const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('5d3879a6-d103-4800-bca4-1ef18ecbee68')
-    def test_PROXY_SI_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.TCP, const.PROXY, const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('efb158e2-de75-4d8b-8566-a0fa5fd75173')
-    def test_TCP_SI_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.TCP, const.TCP, const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('4f1661e5-1dff-4910-9ecd-96327ea3e873')
-    def test_TCP_SI_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.TCP, const.TCP, const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('0984583b-daaf-4509-bf1f-ff3acf33836b')
-    def test_UDP_SI_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.UDP, const.UDP, const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('16b84495-e8f8-4e7b-b242-43a6e00fb8ad')
-    def test_UDP_SI_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.UDP, const.UDP, const.LB_ALGORITHM_SOURCE_IP)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('ab8f46fe-0c84-4755-a9a2-80cc1fbdea18')
-    def test_HTTP_SIP_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.HTTP, const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('7470bea5-9ea0-4e04-a82f-a0bed202b97d')
-    def test_HTTP_SIP_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.HTTP, const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('e59e9a7d-b6e7-43e9-b9d5-0717f113d769')
-    def test_HTTPS_SIP_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.HTTPS, const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('761e1acd-3f4c-4e02-89e1-f89adfe2e3f9')
-    def test_HTTPS_SIP_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.HTTPS, const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('ba7b0c73-df44-4a1a-a610-a107daabc36d')
-    def test_PROXY_SIP_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.TCP, const.PROXY, const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('ad43bc3f-2664-42c4-999f-9763facb8d15')
-    def test_PROXY_SIP_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.TCP, const.PROXY, const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('3341d05c-c199-496f-ac40-6248818ce831')
-    def test_TCP_SIP_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.TCP, const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('5872f1de-1a33-4c20-bc02-7d058e3c3b55')
-    def test_TCP_SIP_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.TCP, const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
-    @decorators.idempotent_id('9550835b-c9ef-44e3-8087-151c25a95168')
-    def test_UDP_SIP_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.UDP, const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_CRUD(pool_id)
-
-    @decorators.idempotent_id('5f40b080-0f2c-4791-a509-da7cfe9eace4')
-    def test_UDP_SIP_alt_monitor_member_crud(self):
-        pool_id = self._listener_pool_create(
-            const.UDP, const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT)
-        self._test_member_CRUD(pool_id, alternate_monitoring=True)
-
     def _test_member_CRUD(self, pool_id, alternate_monitoring=False):
         """Tests member create, read, update, delete
 
@@ -579,6 +339,69 @@
             CONF.load_balancer.check_interval,
             CONF.load_balancer.check_timeout)
 
+
+class MemberLeastConnectionsScenarioTest(MemberScenarioBaseTest):
+
+    @decorators.idempotent_id('33abafca-ce57-479e-8480-843ef412d6a6')
+    def test_HTTP_LC_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.HTTP, const.HTTP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('eab4eb32-b26f-4fe1-a606-1574b5b6182c')
+    def test_HTTP_LC_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.HTTP, const.HTTP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
+    @decorators.idempotent_id('80355701-bc68-4cba-a9b3-4f35fc192b6a')
+    def test_HTTPS_LC_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.HTTPS, const.HTTPS, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('6f8fce94-b2aa-4497-b80f-74293d977d25')
+    def test_HTTPS_LC_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.HTTPS, const.HTTPS, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
+    @decorators.idempotent_id('0e45c423-db43-4fee-8442-d9daabe6b2aa')
+    def test_PROXY_LC_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.TCP, const.PROXY, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('3ea2aad1-5650-4ec6-8394-501de33cce70')
+    def test_PROXY_LC_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.TCP, const.PROXY, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
+    @decorators.idempotent_id('9b2e7e2d-776b-419c-9717-ab4fef9cd5ca')
+    def test_TCP_LC_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.TCP, const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('06b95367-dc81-41e5-9a53-981833fb2979')
+    def test_TCP_LC_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.TCP, const.TCP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
+    @decorators.idempotent_id('c70bd8c6-0f6a-4ee7-840f-a3355aefd471')
+    def test_UDP_LC_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.UDP, const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('0b4ec248-c6a0-4d29-b77e-189453ec0535')
+    def test_UDP_LC_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.UDP, const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
     @decorators.idempotent_id('f9bc8ef1-cf21-41e5-819d-7561173e5286')
     @testtools.skipUnless(CONF.load_balancer.test_with_ipv6,
                           'IPv6 testing is disabled')
@@ -635,6 +458,69 @@
             const.UDP, const.UDP, const.LB_ALGORITHM_LEAST_CONNECTIONS)
         self._test_mixed_member_create(pool_id)
 
+
+class MemberRoundRobinScenarioTest(MemberScenarioBaseTest):
+
+    @decorators.idempotent_id('15c8c3e3-569c-4029-95df-a9f72049e267')
+    def test_HTTP_RR_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.HTTP, const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('a0f02494-ffb3-47be-8670-f56c0df9ec94')
+    def test_HTTP_RR_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.HTTP, const.HTTP, const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
+    @decorators.idempotent_id('57aee0db-3295-42b7-a7d3-aae942a6cb41')
+    def test_HTTPS_RR_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.HTTPS, const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('6c3e5bd7-4573-4f6d-ac64-31b238c9ea51')
+    def test_HTTPS_RR_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.HTTPS, const.HTTPS, const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
+    @decorators.idempotent_id('e0ad1fa0-1fdb-472d-9d69-8968631c9239')
+    def test_PROXY_RR_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.TCP, const.PROXY, const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('534fbc38-1c70-4c67-8f89-74a6905b1c98')
+    def test_PROXY_RR_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.TCP, const.PROXY, const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
+    @decorators.idempotent_id('c4c72e4b-5abe-41df-9f1d-6a8a27c75a80')
+    def test_TCP_RR_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.TCP, const.TCP, const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('673425e0-2a57-4c92-a416-7b4e0824708f')
+    def test_TCP_RR_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.TCP, const.TCP, const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
+    @decorators.idempotent_id('f08c9efc-b69c-4c0f-a731-74ec8c17fc91')
+    def test_UDP_RR_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.UDP, const.UDP, const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('94829e1e-506e-4f3c-ab04-4e338787ccfd')
+    def test_UDP_RR_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.UDP, const.UDP, const.LB_ALGORITHM_ROUND_ROBIN)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
     @decorators.idempotent_id('b8afb91d-9b85-4569-85c7-03453df8990b')
     @testtools.skipUnless(CONF.load_balancer.test_with_ipv6,
                           'IPv6 testing is disabled')
@@ -691,6 +577,69 @@
             const.UDP, const.UDP, const.LB_ALGORITHM_ROUND_ROBIN)
         self._test_mixed_member_create(pool_id)
 
+
+class MemberSourceIPScenarioTest(MemberScenarioBaseTest):
+
+    @decorators.idempotent_id('07d1e571-d12c-4e04-90d1-8f4f42610df3')
+    def test_HTTP_SI_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.HTTP, const.HTTP, const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('3910a7ec-63c5-4152-9fe1-ce21d3e1cdca')
+    def test_HTTP_SI_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.HTTP, const.HTTP, const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
+    @decorators.idempotent_id('32b0b541-29dc-464b-91c1-115413539de7')
+    def test_HTTPS_SI_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.HTTPS, const.HTTPS, const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('d59ea523-8dac-4e19-8df4-a7076a17296c')
+    def test_HTTPS_SI_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.HTTPS, const.HTTPS, const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
+    @decorators.idempotent_id('12348506-1cfc-4d62-9cc2-d380776a9154')
+    def test_PROXY_SI_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.TCP, const.PROXY, const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('5d3879a6-d103-4800-bca4-1ef18ecbee68')
+    def test_PROXY_SI_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.TCP, const.PROXY, const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
+    @decorators.idempotent_id('efb158e2-de75-4d8b-8566-a0fa5fd75173')
+    def test_TCP_SI_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.TCP, const.TCP, const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('4f1661e5-1dff-4910-9ecd-96327ea3e873')
+    def test_TCP_SI_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.TCP, const.TCP, const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
+    @decorators.idempotent_id('0984583b-daaf-4509-bf1f-ff3acf33836b')
+    def test_UDP_SI_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.UDP, const.UDP, const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('16b84495-e8f8-4e7b-b242-43a6e00fb8ad')
+    def test_UDP_SI_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.UDP, const.UDP, const.LB_ALGORITHM_SOURCE_IP)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
     @decorators.idempotent_id('cc7f9272-84a6-436c-a529-171b67a45b62')
     @testtools.skipUnless(CONF.load_balancer.test_with_ipv6,
                           'IPv6 testing is disabled')
@@ -747,6 +696,69 @@
             const.UDP, const.UDP, const.LB_ALGORITHM_SOURCE_IP)
         self._test_mixed_member_create(pool_id)
 
+
+class MemberSourceIPPortScenarioTest(MemberScenarioBaseTest):
+
+    @decorators.idempotent_id('ab8f46fe-0c84-4755-a9a2-80cc1fbdea18')
+    def test_HTTP_SIP_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.HTTP, const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('7470bea5-9ea0-4e04-a82f-a0bed202b97d')
+    def test_HTTP_SIP_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.HTTP, const.HTTP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
+    @decorators.idempotent_id('e59e9a7d-b6e7-43e9-b9d5-0717f113d769')
+    def test_HTTPS_SIP_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.HTTPS, const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('761e1acd-3f4c-4e02-89e1-f89adfe2e3f9')
+    def test_HTTPS_SIP_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.HTTPS, const.HTTPS, const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
+    @decorators.idempotent_id('ba7b0c73-df44-4a1a-a610-a107daabc36d')
+    def test_PROXY_SIP_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.TCP, const.PROXY, const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('ad43bc3f-2664-42c4-999f-9763facb8d15')
+    def test_PROXY_SIP_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.TCP, const.PROXY, const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
+    @decorators.idempotent_id('3341d05c-c199-496f-ac40-6248818ce831')
+    def test_TCP_SIP_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.TCP, const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('5872f1de-1a33-4c20-bc02-7d058e3c3b55')
+    def test_TCP_SIP_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.TCP, const.TCP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
+    @decorators.idempotent_id('9550835b-c9ef-44e3-8087-151c25a95168')
+    def test_UDP_SIP_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.UDP, const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_CRUD(pool_id)
+
+    @decorators.idempotent_id('5f40b080-0f2c-4791-a509-da7cfe9eace4')
+    def test_UDP_SIP_alt_monitor_member_crud(self):
+        pool_id = self._listener_pool_create(
+            const.UDP, const.UDP, const.LB_ALGORITHM_SOURCE_IP_PORT)
+        self._test_member_CRUD(pool_id, alternate_monitoring=True)
+
     @decorators.idempotent_id('b3dc557a-88ec-4bc6-84fd-c3aaab5d5920')
     @testtools.skipUnless(CONF.load_balancer.test_with_ipv6,
                           'IPv6 testing is disabled')
diff --git a/octavia_tempest_plugin/tests/scenario/v2/test_pool.py b/octavia_tempest_plugin/tests/scenario/v2/test_pool.py
index afaf302..3838fdf 100644
--- a/octavia_tempest_plugin/tests/scenario/v2/test_pool.py
+++ b/octavia_tempest_plugin/tests/scenario/v2/test_pool.py
@@ -28,12 +28,12 @@
 CONF = config.CONF
 
 
-class PoolScenarioTest(test_base.LoadBalancerBaseTest):
+class PoolScenarioBaseTest(test_base.LoadBalancerBaseTest):
 
     @classmethod
     def resource_setup(cls):
         """Setup resources needed by the tests."""
-        super(PoolScenarioTest, cls).resource_setup()
+        super(PoolScenarioBaseTest, cls).resource_setup()
 
         lb_name = data_utils.rand_name("lb_member_lb1_pool")
         lb_kwargs = {const.PROVIDER: CONF.load_balancer.provider,
@@ -53,283 +53,6 @@
                                 CONF.load_balancer.lb_build_interval,
                                 CONF.load_balancer.lb_build_timeout)
 
-    # Pool with Least Connections algorithm
-    @decorators.idempotent_id('f30bd185-ca13-45c1-8a2f-f4179e7f0c3a')
-    def test_HTTP_LC_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.HTTP, protocol_port=10,
-                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('d8c428b0-dee4-4374-8286-31e52aeb7fe5')
-    def test_HTTP_LC_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.HTTP,
-                             pool_protocol=const.HTTP, protocol_port=11,
-                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('82d8e035-4068-4bad-a87b-e4907bf6d464')
-    def test_HTTPS_LC_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.HTTPS, protocol_port=12,
-                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('726beb03-de8c-43cd-ba5f-e7d6faf627a3')
-    def test_HTTPS_LC_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.HTTPS,
-                             pool_protocol=const.HTTPS, protocol_port=13,
-                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('b3cef24e-343a-4e77-833b-422158d54673')
-    def test_PROXY_LC_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.PROXY, protocol_port=14,
-                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('f1edfb45-a9d3-4150-8bc9-4fc3427c6346')
-    def test_PROXY_LC_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.TCP,
-                             pool_protocol=const.PROXY, protocol_port=15,
-                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('d6d067c3-ec63-4b5d-a364-acc7493ae3b8')
-    def test_TCP_LC_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.TCP, protocol_port=16,
-                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('a159c345-9463-4c01-b571-086c789bd7d5')
-    def test_TCP_LC_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.TCP,
-                             pool_protocol=const.TCP, protocol_port=17,
-                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('6fea6a39-19eb-4a0e-b507-82ecc57c1dc5')
-    def test_UDP_LC_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.UDP, protocol_port=18,
-                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    @decorators.idempotent_id('6ce12d8c-ad59-4e48-8de1-d26926735457')
-    def test_UDP_LC_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.UDP,
-                             pool_protocol=const.UDP, protocol_port=19,
-                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
-
-    # Pool with Round Robin algorithm
-    @decorators.idempotent_id('dfa120bf-81b9-4f22-bb5e-7df660c18173')
-    def test_HTTP_RR_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.HTTP, protocol_port=20,
-                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('087da8ab-79c7-48ba-871c-5769185cea3e')
-    def test_HTTP_RR_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.HTTP,
-                             pool_protocol=const.HTTP, protocol_port=21,
-                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('6179a5d1-6425-4144-a437-b0d260b7b883')
-    def test_HTTPS_RR_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.HTTPS, protocol_port=22,
-                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('1b4585b4-c521-48e8-a69a-8a1d729a2949')
-    def test_HTTPS_RR_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.HTTPS,
-                             pool_protocol=const.HTTPS, protocol_port=23,
-                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('6b9f4f01-cb78-409a-b9fe-cbbeb27d0c5f')
-    def test_PROXY_RR_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.PROXY, protocol_port=24,
-                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('0228ea63-dff5-4dfb-b48a-193e8509caa8')
-    def test_PROXY_RR_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.TCP,
-                             pool_protocol=const.PROXY, protocol_port=25,
-                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('71088923-cfdf-4821-a6a8-c7c9045b624d')
-    def test_TCP_RR_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.TCP, protocol_port=26,
-                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('4b663772-5c6b-49a3-b592-49d91bd71ff1')
-    def test_TCP_RR_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.TCP,
-                             pool_protocol=const.TCP, protocol_port=27,
-                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('45aefaa0-c909-4861-91c6-517ea10285a5')
-    def test_UDP_RR_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.UDP, protocol_port=28,
-                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    @decorators.idempotent_id('cff21560-52be-439f-a41f-789d365db567')
-    def test_UDP_RR_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.UDP,
-                             pool_protocol=const.UDP, protocol_port=29,
-                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
-
-    # Pool with Source IP algorithm
-    @decorators.idempotent_id('4ef47185-ef22-4396-8c9c-b98b9b476605')
-    def test_HTTP_SI_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.HTTP, protocol_port=30,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('13a5caba-42a5-4b8c-a389-74d630a91687')
-    def test_HTTP_SI_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.HTTP,
-                             pool_protocol=const.HTTP, protocol_port=31,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('5ff7732a-7481-4c03-8efc-5ee794feb11a')
-    def test_HTTPS_SI_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.HTTPS, protocol_port=32,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('30f3d93c-cc22-4821-8805-d5c41023eccd')
-    def test_HTTPS_SI_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.HTTPS,
-                             pool_protocol=const.HTTPS, protocol_port=33,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('7cbb01b8-196b-4ac3-9fec-a41abf867850')
-    def test_PROXY_SI_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.PROXY, protocol_port=34,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('29327103-4949-4a77-a748-87ab725237b7')
-    def test_PROXY_SI_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.TCP,
-                             pool_protocol=const.PROXY, protocol_port=35,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('6a4dd425-d7d9-40dd-b451-feb4b3c551cc')
-    def test_TCP_SI_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.TCP, protocol_port=36,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('4391d6a5-bb1c-4ff0-9f74-7b8c43a0b150')
-    def test_TCP_SI_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.TCP,
-                             pool_protocol=const.TCP, protocol_port=37,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('211a688c-f495-4f32-a297-c64d240b5de0')
-    def test_UDP_SI_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.UDP, protocol_port=38,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    @decorators.idempotent_id('b19f1285-dbf2-4ac9-9199-3c3693148133')
-    def test_UDP_SI_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.UDP,
-                             pool_protocol=const.UDP, protocol_port=39,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
-
-    # Pool with Source IP Port algorithm
-    @decorators.idempotent_id('fee61d34-e272-42f5-92e2-69b515c6cded')
-    def test_HTTP_SIP_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.HTTP, protocol_port=40,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('d99948da-649d-493c-a74d-72e532df0605')
-    def test_HTTP_SIP_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.HTTP,
-                             pool_protocol=const.HTTP, protocol_port=41,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('b3c68f89-634e-4279-9546-9f2d2eac4bfa')
-    def test_HTTPS_SIP_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.HTTPS, protocol_port=42,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('4327f636-50c3-411c-b90e-0b907bdaffc5')
-    def test_HTTPS_SIP_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.HTTPS,
-                             pool_protocol=const.HTTPS, protocol_port=43,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('95a93e91-6ac0-40d5-999c-84a8b68c14f4')
-    def test_PROXY_SIP_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.PROXY, protocol_port=44,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('13893ac9-150f-4605-be68-6bdf65e2bb12')
-    def test_PROXY_SIP_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.TCP,
-                             pool_protocol=const.PROXY, protocol_port=45,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('d045ea39-b6dd-4171-bb90-2b9970e25303')
-    def test_TCP_SIP_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.TCP, protocol_port=46,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('ec22ab54-8e0a-4472-8f70-78c34f28dc36')
-    def test_TCP_SIP_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.TCP,
-                             pool_protocol=const.TCP, protocol_port=47,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('0e0f0299-8c5e-4d7c-a99e-85db43b45446')
-    def test_UDP_SIP_pool_standalone_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=None,
-                             pool_protocol=const.UDP, protocol_port=48,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    @decorators.idempotent_id('66d50010-13ca-4588-ae36-61bb783d556e')
-    def test_UDP_SIP_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(listener_protocol=const.UDP,
-                             pool_protocol=const.UDP, protocol_port=49,
-                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
-
-    # Test with session persistence
-    @decorators.idempotent_id('d6b8119b-40e9-487d-a037-9972a1e688e8')
-    def test_HTTP_RR_app_cookie_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(
-            listener_protocol=const.HTTP,
-            pool_protocol=const.HTTP, protocol_port=50,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_APP_COOKIE)
-
-    @decorators.idempotent_id('a67f2276-6469-48d4-bf7e-ddf6d8694dba')
-    def test_HTTP_RR_http_cookie_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(
-            listener_protocol=const.HTTP,
-            pool_protocol=const.HTTP, protocol_port=51,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_HTTP_COOKIE)
-
-    @decorators.idempotent_id('c248e3d8-43d9-4fd4-93af-845747c9b939')
-    def test_HTTP_RR_source_IP_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(
-            listener_protocol=const.HTTP,
-            pool_protocol=const.HTTP, protocol_port=52,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
-
-    @decorators.idempotent_id('dc7f0ed5-f94c-4498-9dca-5dbc08e7162f')
-    def test_UDP_RR_source_ip_pool_with_listener_CRUD(self):
-        self._test_pool_CRUD(
-            listener_protocol=const.UDP,
-            pool_protocol=const.UDP, protocol_port=53,
-            algorithm=const.LB_ALGORITHM_ROUND_ROBIN,
-            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
-
     def _test_pool_CRUD(self, listener_protocol, pool_protocol, protocol_port,
                         algorithm, session_persistence=None):
         """Tests pool create, read, update, delete
@@ -575,3 +298,292 @@
             const.ACTIVE,
             CONF.load_balancer.check_interval,
             CONF.load_balancer.check_timeout)
+
+
+class PoolLeastConnectionsScenarioTest(PoolScenarioBaseTest):
+    """Pool with Least Connections algorithm"""
+
+    @decorators.idempotent_id('f30bd185-ca13-45c1-8a2f-f4179e7f0c3a')
+    def test_HTTP_LC_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.HTTP, protocol_port=10,
+                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('d8c428b0-dee4-4374-8286-31e52aeb7fe5')
+    def test_HTTP_LC_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.HTTP,
+                             pool_protocol=const.HTTP, protocol_port=11,
+                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('82d8e035-4068-4bad-a87b-e4907bf6d464')
+    def test_HTTPS_LC_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.HTTPS, protocol_port=12,
+                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('726beb03-de8c-43cd-ba5f-e7d6faf627a3')
+    def test_HTTPS_LC_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.HTTPS,
+                             pool_protocol=const.HTTPS, protocol_port=13,
+                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('b3cef24e-343a-4e77-833b-422158d54673')
+    def test_PROXY_LC_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.PROXY, protocol_port=14,
+                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('f1edfb45-a9d3-4150-8bc9-4fc3427c6346')
+    def test_PROXY_LC_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.TCP,
+                             pool_protocol=const.PROXY, protocol_port=15,
+                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('d6d067c3-ec63-4b5d-a364-acc7493ae3b8')
+    def test_TCP_LC_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.TCP, protocol_port=16,
+                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('a159c345-9463-4c01-b571-086c789bd7d5')
+    def test_TCP_LC_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.TCP,
+                             pool_protocol=const.TCP, protocol_port=17,
+                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('6fea6a39-19eb-4a0e-b507-82ecc57c1dc5')
+    def test_UDP_LC_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.UDP, protocol_port=18,
+                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+    @decorators.idempotent_id('6ce12d8c-ad59-4e48-8de1-d26926735457')
+    def test_UDP_LC_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.UDP,
+                             pool_protocol=const.UDP, protocol_port=19,
+                             algorithm=const.LB_ALGORITHM_LEAST_CONNECTIONS)
+
+
+class PoolRoundRobinScenarioTest(PoolScenarioBaseTest):
+    """Pool with Round Robin algorithm"""
+
+    @decorators.idempotent_id('dfa120bf-81b9-4f22-bb5e-7df660c18173')
+    def test_HTTP_RR_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.HTTP, protocol_port=20,
+                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('087da8ab-79c7-48ba-871c-5769185cea3e')
+    def test_HTTP_RR_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.HTTP,
+                             pool_protocol=const.HTTP, protocol_port=21,
+                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('6179a5d1-6425-4144-a437-b0d260b7b883')
+    def test_HTTPS_RR_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.HTTPS, protocol_port=22,
+                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('1b4585b4-c521-48e8-a69a-8a1d729a2949')
+    def test_HTTPS_RR_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.HTTPS,
+                             pool_protocol=const.HTTPS, protocol_port=23,
+                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('6b9f4f01-cb78-409a-b9fe-cbbeb27d0c5f')
+    def test_PROXY_RR_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.PROXY, protocol_port=24,
+                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('0228ea63-dff5-4dfb-b48a-193e8509caa8')
+    def test_PROXY_RR_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.TCP,
+                             pool_protocol=const.PROXY, protocol_port=25,
+                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('71088923-cfdf-4821-a6a8-c7c9045b624d')
+    def test_TCP_RR_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.TCP, protocol_port=26,
+                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('4b663772-5c6b-49a3-b592-49d91bd71ff1')
+    def test_TCP_RR_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.TCP,
+                             pool_protocol=const.TCP, protocol_port=27,
+                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('45aefaa0-c909-4861-91c6-517ea10285a5')
+    def test_UDP_RR_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.UDP, protocol_port=28,
+                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    @decorators.idempotent_id('cff21560-52be-439f-a41f-789d365db567')
+    def test_UDP_RR_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.UDP,
+                             pool_protocol=const.UDP, protocol_port=29,
+                             algorithm=const.LB_ALGORITHM_ROUND_ROBIN)
+
+    # Test with session persistence
+    @decorators.idempotent_id('d6b8119b-40e9-487d-a037-9972a1e688e8')
+    def test_HTTP_RR_app_cookie_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(
+            listener_protocol=const.HTTP,
+            pool_protocol=const.HTTP, protocol_port=50,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_APP_COOKIE)
+
+    @decorators.idempotent_id('a67f2276-6469-48d4-bf7e-ddf6d8694dba')
+    def test_HTTP_RR_http_cookie_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(
+            listener_protocol=const.HTTP,
+            pool_protocol=const.HTTP, protocol_port=51,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_HTTP_COOKIE)
+
+    @decorators.idempotent_id('c248e3d8-43d9-4fd4-93af-845747c9b939')
+    def test_HTTP_RR_source_IP_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(
+            listener_protocol=const.HTTP,
+            pool_protocol=const.HTTP, protocol_port=52,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
+
+    @decorators.idempotent_id('dc7f0ed5-f94c-4498-9dca-5dbc08e7162f')
+    def test_UDP_RR_source_ip_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(
+            listener_protocol=const.UDP,
+            pool_protocol=const.UDP, protocol_port=53,
+            algorithm=const.LB_ALGORITHM_ROUND_ROBIN,
+            session_persistence=const.SESSION_PERSISTENCE_SOURCE_IP)
+
+
+class PoolSourceIPScenarioTest(PoolScenarioBaseTest):
+    """Pool with Source IP algorithm"""
+
+    @decorators.idempotent_id('4ef47185-ef22-4396-8c9c-b98b9b476605')
+    def test_HTTP_SI_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.HTTP, protocol_port=30,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('13a5caba-42a5-4b8c-a389-74d630a91687')
+    def test_HTTP_SI_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.HTTP,
+                             pool_protocol=const.HTTP, protocol_port=31,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('5ff7732a-7481-4c03-8efc-5ee794feb11a')
+    def test_HTTPS_SI_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.HTTPS, protocol_port=32,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('30f3d93c-cc22-4821-8805-d5c41023eccd')
+    def test_HTTPS_SI_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.HTTPS,
+                             pool_protocol=const.HTTPS, protocol_port=33,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('7cbb01b8-196b-4ac3-9fec-a41abf867850')
+    def test_PROXY_SI_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.PROXY, protocol_port=34,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('29327103-4949-4a77-a748-87ab725237b7')
+    def test_PROXY_SI_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.TCP,
+                             pool_protocol=const.PROXY, protocol_port=35,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('6a4dd425-d7d9-40dd-b451-feb4b3c551cc')
+    def test_TCP_SI_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.TCP, protocol_port=36,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('4391d6a5-bb1c-4ff0-9f74-7b8c43a0b150')
+    def test_TCP_SI_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.TCP,
+                             pool_protocol=const.TCP, protocol_port=37,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('211a688c-f495-4f32-a297-c64d240b5de0')
+    def test_UDP_SI_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.UDP, protocol_port=38,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+    @decorators.idempotent_id('b19f1285-dbf2-4ac9-9199-3c3693148133')
+    def test_UDP_SI_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.UDP,
+                             pool_protocol=const.UDP, protocol_port=39,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP)
+
+
+class PoolSourceIPPortScenarioTest(PoolScenarioBaseTest):
+    """Pool with Source IP Port algorithm"""
+
+    @decorators.idempotent_id('fee61d34-e272-42f5-92e2-69b515c6cded')
+    def test_HTTP_SIP_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.HTTP, protocol_port=40,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('d99948da-649d-493c-a74d-72e532df0605')
+    def test_HTTP_SIP_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.HTTP,
+                             pool_protocol=const.HTTP, protocol_port=41,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('b3c68f89-634e-4279-9546-9f2d2eac4bfa')
+    def test_HTTPS_SIP_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.HTTPS, protocol_port=42,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('4327f636-50c3-411c-b90e-0b907bdaffc5')
+    def test_HTTPS_SIP_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.HTTPS,
+                             pool_protocol=const.HTTPS, protocol_port=43,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('95a93e91-6ac0-40d5-999c-84a8b68c14f4')
+    def test_PROXY_SIP_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.PROXY, protocol_port=44,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('13893ac9-150f-4605-be68-6bdf65e2bb12')
+    def test_PROXY_SIP_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.TCP,
+                             pool_protocol=const.PROXY, protocol_port=45,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('d045ea39-b6dd-4171-bb90-2b9970e25303')
+    def test_TCP_SIP_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.TCP, protocol_port=46,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('ec22ab54-8e0a-4472-8f70-78c34f28dc36')
+    def test_TCP_SIP_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.TCP,
+                             pool_protocol=const.TCP, protocol_port=47,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('0e0f0299-8c5e-4d7c-a99e-85db43b45446')
+    def test_UDP_SIP_pool_standalone_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=None,
+                             pool_protocol=const.UDP, protocol_port=48,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
+
+    @decorators.idempotent_id('66d50010-13ca-4588-ae36-61bb783d556e')
+    def test_UDP_SIP_pool_with_listener_CRUD(self):
+        self._test_pool_CRUD(listener_protocol=const.UDP,
+                             pool_protocol=const.UDP, protocol_port=49,
+                             algorithm=const.LB_ALGORITHM_SOURCE_IP_PORT)
