diff --git a/manila_tempest_tests/tests/scenario/manager_share.py b/manila_tempest_tests/tests/scenario/manager_share.py
index 3f9e818..e828b0a 100644
--- a/manila_tempest_tests/tests/scenario/manager_share.py
+++ b/manila_tempest_tests/tests/scenario/manager_share.py
@@ -352,9 +352,10 @@
             self.shares_v2_client, share_id, "active",
             status_attr='access_rules_status')
 
-    def provide_access_to_auxiliary_instance(self, instance, share=None,
-                                             snapshot=None, access_level='rw',
-                                             client=None):
+    def _provide_access_to_client_identified_by_ip(self, instance, share=None,
+                                                   snapshot=None,
+                                                   access_level='rw',
+                                                   client=None):
         share = share or self.share
         client = client or self.shares_v2_client
         if not CONF.share.multitenancy_enabled:
@@ -377,14 +378,14 @@
                 share['id'], instance=instance, cleanup=False,
                 snapshot=snapshot, access_level=access_level, client=client)
 
-    def provide_access_to_client_identified_by_cephx(self, share=None,
-                                                     access_rule=None,
-                                                     access_level='rw',
-                                                     access_to=None,
-                                                     remote_client=None,
-                                                     locations=None,
-                                                     client=None,
-                                                     oc_size=20971520):
+    def _provide_access_to_client_identified_by_cephx(self, share=None,
+                                                      access_rule=None,
+                                                      access_level='rw',
+                                                      access_to=None,
+                                                      remote_client=None,
+                                                      locations=None,
+                                                      client=None,
+                                                      oc_size=20971520):
         """Provide an access to a client identified by cephx authentication
 
         :param: share: An existing share.
@@ -728,10 +729,67 @@
         return ip, version
 
 
-class BaseShareCEPHFSTest(ShareScenarioTest):
+class BaseShareScenarioNFSTest(ShareScenarioTest):
+    protocol = "nfs"
+
+    @classmethod
+    def skip_checks(cls):
+        super(BaseShareScenarioNFSTest, cls).skip_checks()
+        if cls.protocol not in CONF.share.enable_ip_rules_for_protocols:
+            message = ("%s tests for access rules other than IP are disabled" %
+                       cls.protocol)
+            raise cls.skipException(message)
+
+    def allow_access(self, access_level='rw', **kwargs):
+        snapshot = kwargs.get('snapshot')
+        return self._provide_access_to_client_identified_by_ip(
+            instance=kwargs['instance'], access_level=access_level,
+            snapshot=snapshot)
+
+    def mount_share(self, location, ssh_client, target_dir=None):
+
+        self.validate_ping_to_export_location(location, ssh_client)
+
+        target_dir = target_dir or "/mnt"
+        ssh_client.exec_command(
+            "sudo mount -vt nfs \"%s\" %s" % (location, target_dir)
+        )
+
+
+class BaseShareScenarioCIFSTest(ShareScenarioTest):
+    protocol = 'cifs'
+
+    @classmethod
+    def skip_checks(cls):
+        super(BaseShareScenarioCIFSTest, cls).skip_checks()
+        if cls.protocol not in CONF.share.enable_ip_rules_for_protocols:
+            message = ("%s tests for access rules other than IP are disabled" %
+                       cls.protocol)
+            raise cls.skipException(message)
+
+    def allow_access(self, access_level='rw', **kwargs):
+        snapshot = kwargs.get('snapshot')
+        return self._provide_access_to_client_identified_by_ip(
+            instance=kwargs['instance'],
+            snapshot=snapshot,
+            access_level=access_level)
+
+    def mount_share(self, location, ssh_client, target_dir=None):
+
+        self.validate_ping_to_export_location(location, ssh_client)
+
+        location = location.replace("\\", "/")
+        target_dir = target_dir or "/mnt"
+        ssh_client.exec_command(
+            "sudo mount.cifs \"%s\" %s -o guest" % (location, target_dir)
+        )
+
+
+class BaseShareScenarioCEPHFSTest(ShareScenarioTest):
+    protocol = 'cephfs'
 
     def allow_access(self, access_level='rw', access_rule=None, **kwargs):
-        return self.provide_access_to_client_identified_by_cephx(
+        return self._provide_access_to_client_identified_by_cephx(
             remote_client=kwargs['remote_client'],
             locations=kwargs['locations'], access_level=access_level,
             access_rule=access_rule)
@@ -762,4 +820,4 @@
         if getattr(self, 'mount_client', None):
             return remote_client.exec_command(
                 "sudo fusermount -uz %s" % target_dir)
-        super(BaseShareCEPHFSTest, self).unmount_share(remote_client)
+        super(BaseShareScenarioCEPHFSTest, self).unmount_share(remote_client)
diff --git a/manila_tempest_tests/tests/scenario/test_share_basic_ops.py b/manila_tempest_tests/tests/scenario/test_share_basic_ops.py
index b7d894b..29fa9a8 100644
--- a/manila_tempest_tests/tests/scenario/test_share_basic_ops.py
+++ b/manila_tempest_tests/tests/scenario/test_share_basic_ops.py
@@ -165,7 +165,7 @@
 
         instance = self.boot_instance(wait_until="BUILD")
         self.create_share()
-        exports = self.get_user_export_locations(self.share)
+        export_location = self.get_user_export_locations(self.share)[0]
         instance = self.wait_for_active_instance(instance["id"])
         self.share = self.shares_admin_v2_client.get_share(self.share['id'])
 
@@ -181,9 +181,12 @@
         dest_pool = dest_pool['name']
 
         remote_client = self.init_remote_client(instance)
-        self.provide_access_to_auxiliary_instance(instance)
 
-        self.mount_share(exports[0], remote_client)
+        self.allow_access(instance=instance,
+                          remote_client=remote_client,
+                          locations=export_location)
+
+        self.mount_share(export_location, remote_client)
 
         remote_client.exec_command("sudo mkdir -p /mnt/f1")
         remote_client.exec_command("sudo mkdir -p /mnt/f2")
@@ -250,6 +253,10 @@
 
         # 2 - Create share S1, ok, created
         parent_share = self.create_share()
+        parent_share_export_location = self.get_user_export_locations(
+            parent_share)[0]
+
+        # Create a client User Virtual Machine
         instance = self.wait_for_active_instance(instance["id"])
         self.addCleanup(self.servers_client.delete_server, instance['id'])
 
@@ -257,14 +264,18 @@
         remote_client = self.init_remote_client(instance)
 
         # 4 - Provide RW access to S1, ok, provided
-        self.provide_access_to_auxiliary_instance(instance, parent_share)
+        self.allow_access(instance=instance,
+                          remote_client=remote_client,
+                          locations=parent_share_export_location)
 
         # 5 - Try mount S1 to UVM, ok, mounted
-        user_export_location = self.get_user_export_locations(parent_share)[0]
+
         parent_share_dir = "/mnt/parent"
         remote_client.exec_command("sudo mkdir -p %s" % parent_share_dir)
 
-        self.mount_share(user_export_location, remote_client, parent_share_dir)
+        self.mount_share(parent_share_export_location,
+                         remote_client,
+                         parent_share_dir)
         self.addCleanup(self.unmount_share, remote_client, parent_share_dir)
 
         # 6 - Create "file1", ok, created
@@ -282,21 +293,26 @@
 
         # 10 - Try mount S2 - fail, access denied. We test that child share
         #      did not get access rules from parent share.
-        user_export_location = self.get_user_export_locations(child_share)[0]
+        child_share_export_location = self.get_user_export_locations(
+            child_share)[0]
         child_share_dir = "/mnt/child"
         remote_client.exec_command("sudo mkdir -p %s" % child_share_dir)
 
         self.assertRaises(
             exceptions.SSHExecCommandFailed,
             self.mount_share,
-            user_export_location, remote_client, child_share_dir,
+            child_share_export_location, remote_client, child_share_dir,
         )
 
         # 11 - Provide RW access to S2, ok, provided
-        self.provide_access_to_auxiliary_instance(instance, child_share)
+        self.allow_access(instance=instance,
+                          remote_client=remote_client,
+                          locations=child_share_export_location)
 
         # 12 - Try mount S2, ok, mounted
-        self.mount_share(user_export_location, remote_client, child_share_dir)
+        self.mount_share(child_share_export_location,
+                         remote_client,
+                         child_share_dir)
         self.addCleanup(self.unmount_share, remote_client, child_share_dir)
 
         # 13 - List files on S2, only "file1" exists
@@ -335,6 +351,9 @@
 
         # 2 - Create share S1, ok, created
         parent_share = self.create_share()
+        user_export_location = self.get_user_export_locations(parent_share)[0]
+
+        # Create client User Virtual Machine
         instance = self.wait_for_active_instance(instance["id"])
         self.addCleanup(self.servers_client.delete_server, instance['id'])
 
@@ -342,10 +361,11 @@
         remote_client = self.init_remote_client(instance)
 
         # 4 - Provide RW access to S1, ok, provided
-        self.provide_access_to_auxiliary_instance(instance, parent_share)
+        self.allow_access(instance=instance,
+                          remote_client=remote_client,
+                          locations=user_export_location)
 
         # 5 - Try mount S1 to UVM, ok, mounted
-        user_export_location = self.get_user_export_locations(parent_share)[0]
         parent_share_dir = "/mnt/parent"
         snapshot_dir = "/mnt/snapshot_dir"
         remote_client.exec_command("sudo mkdir -p %s" % parent_share_dir)
@@ -359,18 +379,21 @@
 
         # 7 - Create snapshot SS1 from S1, ok, created
         snapshot = self._create_snapshot(parent_share['id'])
+        snapshot_export_location = self.get_user_export_locations(
+            snapshot=snapshot)[0]
 
         # 8 - Create "file2" in share S1 - ok, created. We expect that
         # snapshot will not contain any data created after snapshot creation.
         remote_client.exec_command("sudo touch %s/file2" % parent_share_dir)
 
         # 9 - Allow access to SS1
-        self.provide_access_to_auxiliary_instance(instance, snapshot=snapshot)
+        self.allow_access(instance=instance,
+                          snapshot=snapshot,
+                          remote_client=remote_client,
+                          locations=snapshot_export_location)
 
         # 10 - Mount SS1
-        user_export_location = self.get_user_export_locations(
-            snapshot=snapshot)[0]
-        self.mount_share(user_export_location, remote_client, snapshot_dir)
+        self.mount_share(snapshot_export_location, remote_client, snapshot_dir)
         self.addCleanup(self.unmount_share, remote_client, snapshot_dir)
 
         # 11 - List files on SS1, only "file1" exists
@@ -387,54 +410,13 @@
             "sudo touch %s/file3" % snapshot_dir)
 
 
-class TestShareBasicOpsNFS(ShareBasicOpsBase):
-    protocol = "nfs"
-
-    @classmethod
-    def skip_checks(cls):
-        super(TestShareBasicOpsNFS, cls).skip_checks()
-        if cls.protocol not in CONF.share.enable_ip_rules_for_protocols:
-            message = ("%s tests for access rules other than IP are disabled" %
-                       cls.protocol)
-            raise cls.skipException(message)
-
-    def allow_access(self, access_level='rw', **kwargs):
-        return self.provide_access_to_auxiliary_instance(
-            instance=kwargs['instance'], access_level=access_level)
-
-    def mount_share(self, location, remote_client, target_dir=None):
-
-        self.validate_ping_to_export_location(location, remote_client)
-
-        target_dir = target_dir or "/mnt"
-        remote_client.exec_command(
-            "sudo mount -vt nfs \"%s\" %s" % (location, target_dir))
+class TestShareBasicOpsNFS(manager.BaseShareScenarioNFSTest,
+                           ShareBasicOpsBase):
+    ip_version = 4
 
 
-class TestShareBasicOpsCIFS(ShareBasicOpsBase):
-    protocol = "cifs"
-
-    @classmethod
-    def skip_checks(cls):
-        super(TestShareBasicOpsCIFS, cls).skip_checks()
-        if cls.protocol not in CONF.share.enable_ip_rules_for_protocols:
-            message = ("%s tests for access rules other than IP are disabled" %
-                       cls.protocol)
-            raise cls.skipException(message)
-
-    def allow_access(self, access_level='rw', **kwargs):
-        return self.provide_access_to_auxiliary_instance(
-            instance=kwargs['instance'], access_level=access_level)
-
-    def mount_share(self, location, remote_client, target_dir=None):
-
-        self.validate_ping_to_export_location(location, remote_client)
-
-        location = location.replace("\\", "/")
-        target_dir = target_dir or "/mnt"
-        remote_client.exec_command(
-            "sudo mount.cifs \"%s\" %s -o guest" % (location, target_dir)
-        )
+class TestShareBasicOpsCIFS(manager.BaseShareScenarioCIFSTest,
+                            ShareBasicOpsBase):
 
     @decorators.idempotent_id('4344a47a-d316-496b-97a4-12a59297950a')
     @tc.attr(base.TAG_NEGATIVE, base.TAG_BACKEND)
@@ -456,26 +438,28 @@
         raise self.skipException(msg)
 
 
-class TestShareBasicOpsCEPHFS(ShareBasicOpsBase, manager.BaseShareCEPHFSTest):
-    protocol = "cephfs"
-
+class TestBaseShareBasicOpsScenarioCEPHFS(manager.BaseShareScenarioCEPHFSTest,
+                                          ShareBasicOpsBase):
     @decorators.idempotent_id('9fb12879-45b3-4042-acac-82be338dbde1')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
     def test_mount_share_one_vm_with_ceph_fuse_client(self):
         self.mount_client = 'fuse'
-        super(TestShareBasicOpsCEPHFS, self).test_mount_share_one_vm()
+        super(TestBaseShareBasicOpsScenarioCEPHFS,
+              self).test_mount_share_one_vm()
 
     @decorators.idempotent_id('a2a70b94-f5fc-438a-9dfa-53aa60ee3949')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
     def test_write_with_ro_access_with_ceph_fuse_client(self):
         self.mount_client = 'fuse'
-        super(TestShareBasicOpsCEPHFS, self).test_write_with_ro_access()
+        super(TestBaseShareBasicOpsScenarioCEPHFS,
+              self).test_write_with_ro_access()
 
     @decorators.idempotent_id('c247f51f-0ffc-4a4f-894c-781647619faf')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
     def test_read_write_two_vms_with_ceph_fuse_client(self):
         self.mount_client = 'fuse'
-        super(TestShareBasicOpsCEPHFS, self).test_read_write_two_vms()
+        super(TestBaseShareBasicOpsScenarioCEPHFS,
+              self).test_read_write_two_vms()
 
 
 class TestShareBasicOpsNFSIPv6(TestShareBasicOpsNFS):
diff --git a/manila_tempest_tests/tests/scenario/test_share_extend.py b/manila_tempest_tests/tests/scenario/test_share_extend.py
index f0f378b..e5ecf3b 100644
--- a/manila_tempest_tests/tests/scenario/test_share_extend.py
+++ b/manila_tempest_tests/tests/scenario/test_share_extend.py
@@ -146,65 +146,23 @@
                 raise
 
 
-class TestShareExtendNFS(ShareExtendBase):
-    protocol = "nfs"
-
-    @classmethod
-    def skip_checks(cls):
-        super(ShareExtendBase, cls).skip_checks()
-        if cls.protocol not in CONF.share.enable_ip_rules_for_protocols:
-            message = ("%s tests for access rules other than IP are disabled" %
-                       cls.protocol)
-            raise cls.skipException(message)
-
-    def allow_access(self, access_level='rw', **kwargs):
-        return self.provide_access_to_auxiliary_instance(
-            instance=kwargs['instance'], access_level=access_level)
-
-    def mount_share(self, location, remote_client, target_dir=None):
-
-        self.validate_ping_to_export_location(location, remote_client)
-
-        target_dir = target_dir or "/mnt"
-        remote_client.exec_command(
-            "sudo mount -vt nfs \"%s\" %s" % (location, target_dir)
-        )
+class TestShareExtendNFS(manager.BaseShareScenarioNFSTest, ShareExtendBase):
+    ip_version = 4
 
 
-class TestShareExtendCIFS(ShareExtendBase):
-    protocol = "cifs"
-
-    @classmethod
-    def skip_checks(cls):
-        super(ShareExtendBase, cls).skip_checks()
-        if cls.protocol not in CONF.share.enable_ip_rules_for_protocols:
-            message = ("%s tests for access rules other than IP are disabled" %
-                       cls.protocol)
-            raise cls.skipException(message)
-
-    def allow_access(self, access_level='rw', **kwargs):
-        return self.provide_access_to_auxiliary_instance(
-            instance=kwargs['instance'], access_level=access_level)
-
-    def mount_share(self, location, remote_client, target_dir=None):
-
-        self.validate_ping_to_export_location(location, remote_client)
-
-        location = location.replace("\\", "/")
-        target_dir = target_dir or "/mnt"
-        remote_client.exec_command(
-            "sudo mount.cifs \"%s\" %s -o guest" % (location, target_dir)
-        )
+class TestShareExtendCIFS(manager.BaseShareScenarioCIFSTest, ShareExtendBase):
+    pass
 
 
-class TestShareExtendCEPHFS(ShareExtendBase, manager.BaseShareCEPHFSTest):
-    protocol = "cephfs"
+class TestBaseShareExtendScenarioCEPHFS(manager.BaseShareScenarioCEPHFSTest,
+                                        ShareExtendBase):
 
     @decorators.idempotent_id('9ca1e4a9-23e3-4da6-a63e-46e7919335e0')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
     def test_create_extend_and_write_with_ceph_fuse_client(self):
         self.mount_client = 'fuse'
-        super(TestShareExtendCEPHFS, self).test_create_extend_and_write()
+        super(TestBaseShareExtendScenarioCEPHFS,
+              self).test_create_extend_and_write()
 
 
 class TestShareExtendNFSIPv6(TestShareExtendNFS):
diff --git a/manila_tempest_tests/tests/scenario/test_share_manage_unmanage.py b/manila_tempest_tests/tests/scenario/test_share_manage_unmanage.py
index 0c60184..65fce38 100644
--- a/manila_tempest_tests/tests/scenario/test_share_manage_unmanage.py
+++ b/manila_tempest_tests/tests/scenario/test_share_manage_unmanage.py
@@ -83,7 +83,7 @@
         remote_client = self.init_remote_client(instance)
 
         LOG.debug('Step 4 - provide access to instance')
-        self.provide_access_to_auxiliary_instance(instance, share=share)
+        self._provide_access_to_client_identified_by_ip(instance, share=share)
 
         if utils.is_microversion_lt(CONF.share.max_api_microversion, "2.9"):
             locations = share['export_locations']
@@ -136,7 +136,7 @@
             self.shares_admin_v2_client, managed_share['id'], 'available')
 
         LOG.debug('Step 11 - grant access again')
-        self.provide_access_to_auxiliary_instance(
+        self._provide_access_to_client_identified_by_ip(
             instance,
             share=managed_share,
             client=self.shares_admin_v2_client)
@@ -177,31 +177,14 @@
             share_id=remanaged_share['id'])
 
 
-class ShareManageUnmanageNFS(ShareManageUnmanageBase):
-    protocol = "nfs"
-
-    def mount_share(self, location, remote_client, target_dir=None):
-
-        self.validate_ping_to_export_location(location, remote_client)
-
-        target_dir = target_dir or "/mnt"
-        remote_client.exec_command(
-            "sudo mount -vt nfs \"%s\" %s" % (location, target_dir)
-        )
+class ShareManageUnmanageNFS(manager.BaseShareScenarioNFSTest,
+                             ShareManageUnmanageBase):
+    ip_version = 4
 
 
-class ShareManageUnmanageCIFS(ShareManageUnmanageBase):
-    protocol = "cifs"
-
-    def mount_share(self, location, remote_client, target_dir=None):
-
-        self.validate_ping_to_export_location(location, remote_client)
-
-        location = location.replace("\\", "/")
-        target_dir = target_dir or "/mnt"
-        remote_client.exec_command(
-            "sudo mount.cifs \"%s\" %s -o guest" % (location, target_dir)
-        )
+class ShareManageUnmanageCIFS(manager.BaseShareScenarioCIFSTest,
+                              ShareManageUnmanageBase):
+    pass
 
 
 class ShareManageUnmanageNFSIPv6(ShareManageUnmanageNFS):
diff --git a/manila_tempest_tests/tests/scenario/test_share_shrink.py b/manila_tempest_tests/tests/scenario/test_share_shrink.py
index 2e1e44f..1ba860f 100644
--- a/manila_tempest_tests/tests/scenario/test_share_shrink.py
+++ b/manila_tempest_tests/tests/scenario/test_share_shrink.py
@@ -162,65 +162,22 @@
                 raise exceptions.TimeoutException(message)
 
 
-class TestShareShrinkNFS(ShareShrinkBase):
-    protocol = "nfs"
-
-    @classmethod
-    def skip_checks(cls):
-        super(ShareShrinkBase, cls).skip_checks()
-        if cls.protocol not in CONF.share.enable_ip_rules_for_protocols:
-            message = ("%s tests for access rules other than IP are disabled" %
-                       cls.protocol)
-            raise cls.skipException(message)
-
-    def allow_access(self, access_level='rw', **kwargs):
-        return self.provide_access_to_auxiliary_instance(
-            instance=kwargs['instance'], access_level=access_level)
-
-    def mount_share(self, location, ssh_client, target_dir=None):
-
-        self.validate_ping_to_export_location(location, ssh_client)
-
-        target_dir = target_dir or "/mnt"
-        ssh_client.exec_command(
-            "sudo mount -vt nfs \"%s\" %s" % (location, target_dir)
-        )
+class TestShareShrinkNFS(manager.BaseShareScenarioNFSTest, ShareShrinkBase):
+    ip_version = 4
 
 
-class TestShareShrinkCIFS(ShareShrinkBase):
-    protocol = "cifs"
-
-    @classmethod
-    def skip_checks(cls):
-        super(ShareShrinkBase, cls).skip_checks()
-        if cls.protocol not in CONF.share.enable_ip_rules_for_protocols:
-            message = ("%s tests for access rules other than IP are disabled" %
-                       cls.protocol)
-            raise cls.skipException(message)
-
-    def allow_access(self, access_level='rw', **kwargs):
-        return self.provide_access_to_auxiliary_instance(
-            instance=kwargs['instance'], access_level=access_level)
-
-    def mount_share(self, location, ssh_client, target_dir=None):
-
-        self.validate_ping_to_export_location(location, ssh_client)
-
-        location = location.replace("\\", "/")
-        target_dir = target_dir or "/mnt"
-        ssh_client.exec_command(
-            "sudo mount.cifs \"%s\" %s -o guest" % (location, target_dir)
-        )
+class TestShareShrinkCIFS(manager.BaseShareScenarioCIFSTest, ShareShrinkBase):
+    pass
 
 
-class TestShareShrinkCEPHFS(ShareShrinkBase, manager.BaseShareCEPHFSTest):
-    protocol = "cephfs"
-
+class TestBaseShareShrinkScenarioCEPHFS(manager.BaseShareScenarioCEPHFSTest,
+                                        ShareShrinkBase):
     @decorators.idempotent_id('7fb324ed-7479-4bd9-b022-b3739dee9bcb')
     @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)
     def test_create_shrink_and_write_with_ceph_fuse_client(self):
         self.mount_client = 'fuse'
-        super(TestShareShrinkCEPHFS, self).test_create_shrink_and_write()
+        super(TestBaseShareShrinkScenarioCEPHFS,
+              self).test_create_shrink_and_write()
 
 
 class TestShareShrinkNFSIPv6(TestShareShrinkNFS):
