diff --git a/octavia_tempest_plugin/config.py b/octavia_tempest_plugin/config.py
index 0587a5c..58ddf13 100644
--- a/octavia_tempest_plugin/config.py
+++ b/octavia_tempest_plugin/config.py
@@ -15,7 +15,6 @@
 
 from oslo_config import cfg
 from oslo_log import log as logging
-from tempest import config
 
 from octavia_tempest_plugin.common import constants as const
 
@@ -311,12 +310,3 @@
                      'scope? This configuration value should be same as '
                      'octavia.conf: [oslo_policy].enforce_scope option.'),
 ]
-
-
-def is_tungstenfabric_backend_enabled():
-    """Return True if TungstenFabric is used as a backend."""
-    try:
-        sdn = getattr(config.CONF, 'sdn')
-        return getattr(sdn, 'service_name', None) == 'tungstenfabric'
-    except cfg.NoSuchOptError:
-        return False
diff --git a/octavia_tempest_plugin/services/load_balancer/v2/base_client.py b/octavia_tempest_plugin/services/load_balancer/v2/base_client.py
index 5e2298c..ce3aa55 100644
--- a/octavia_tempest_plugin/services/load_balancer/v2/base_client.py
+++ b/octavia_tempest_plugin/services/load_balancer/v2/base_client.py
@@ -60,7 +60,8 @@
         retry=tenacity.retry_if_exception_type(exceptions.Conflict),
         wait=tenacity.wait_incrementing(
             const.RETRY_INITIAL_DELAY, const.RETRY_BACKOFF, const.RETRY_MAX),
-        stop=tenacity.stop_after_attempt(const.RETRY_ATTEMPTS))
+        stop=tenacity.stop_after_attempt(const.RETRY_ATTEMPTS),
+        reraise=True)
     def _create_object(self, parent_id=None, return_object_only=True,
                        **kwargs):
         """Create an object.
@@ -221,7 +222,8 @@
         retry=tenacity.retry_if_exception_type(exceptions.Conflict),
         wait=tenacity.wait_incrementing(
             const.RETRY_INITIAL_DELAY, const.RETRY_BACKOFF, const.RETRY_MAX),
-        stop=tenacity.stop_after_attempt(const.RETRY_ATTEMPTS))
+        stop=tenacity.stop_after_attempt(const.RETRY_ATTEMPTS),
+        reraise=True)
     def _update_object(self, obj_id, parent_id=None, return_object_only=True,
                        **kwargs):
         """Update an object.
@@ -279,7 +281,8 @@
         retry=tenacity.retry_if_exception_type(exceptions.Conflict),
         wait=tenacity.wait_incrementing(
             const.RETRY_INITIAL_DELAY, const.RETRY_BACKOFF, const.RETRY_MAX),
-        stop=tenacity.stop_after_attempt(const.RETRY_ATTEMPTS))
+        stop=tenacity.stop_after_attempt(const.RETRY_ATTEMPTS),
+        reraise=True)
     def _delete_obj(self, obj_id, parent_id=None, ignore_errors=False,
                     cascade=False):
         """Delete an object.
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 3bd41fa..8615e02 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
@@ -582,3 +305,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)
diff --git a/octavia_tempest_plugin/tests/test_base.py b/octavia_tempest_plugin/tests/test_base.py
index e758be3..55e4d1b 100644
--- a/octavia_tempest_plugin/tests/test_base.py
+++ b/octavia_tempest_plugin/tests/test_base.py
@@ -34,7 +34,6 @@
 
 from octavia_tempest_plugin.common import cert_utils
 from octavia_tempest_plugin.common import constants as const
-from octavia_tempest_plugin import config as config_octavia
 from octavia_tempest_plugin.tests import RBAC_tests
 from octavia_tempest_plugin.tests import validators
 from octavia_tempest_plugin.tests import waiters
@@ -875,7 +874,7 @@
             cls.webserver2_public_ip))
 
         if (CONF.load_balancer.test_with_ipv6 and not
-                config_octavia.is_tungstenfabric_backend_enabled()):
+                config.is_tungstenfabric_backend_enabled()):
             # Enable the IPv6 nic in webserver 1
             cls._enable_ipv6_nic_webserver(
                 cls.webserver1_public_ip, cls.lb_member_keypair['private_key'],
@@ -1055,7 +1054,7 @@
                 network_id=network['id'],
                 mac_address=instance_network[0]['OS-EXT-IPS-MAC:mac_addr'])
             port_id = result['ports'][0]['id']
-            if config_octavia.is_tungstenfabric_backend_enabled():
+            if config.is_tungstenfabric_backend_enabled():
                 port = result['ports'][0]
                 fixed_ip = None
                 for ip in port["fixed_ips"]:
