diff --git a/octavia_tempest_plugin/tests/api/v2/test_healthmonitor.py b/octavia_tempest_plugin/tests/api/v2/test_healthmonitor.py
index 9f38193..da14ec6 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.
@@ -349,150 +205,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.
 
@@ -950,150 +662,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.
 
@@ -1214,150 +782,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.
@@ -1564,150 +988,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.
@@ -1812,3 +1092,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_pool.py b/octavia_tempest_plugin/tests/api/v2/test_pool.py
index 339fee6..bc717a7 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.
@@ -521,86 +244,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.
 
@@ -966,111 +609,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.
@@ -1216,114 +754,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.
@@ -1589,114 +1019,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.
@@ -1810,3 +1132,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 bdd47a9..90c49e7 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 07394cf..d2618e4 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
@@ -580,3 +303,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)
