diff --git a/manila_tempest_tests/config.py b/manila_tempest_tests/config.py
index 63b3211..ddf11cd 100644
--- a/manila_tempest_tests/config.py
+++ b/manila_tempest_tests/config.py
@@ -36,7 +36,7 @@
                help="The minimum api microversion is configured to be the "
                     "value of the minimum microversion supported by Manila."),
     cfg.StrOpt("max_api_microversion",
-               default="2.7",
+               default="2.8",
                help="The maximum api microversion is configured to be the "
                     "value of the latest microversion supported by Manila."),
     cfg.StrOpt("region",
diff --git a/manila_tempest_tests/services/share/v2/json/shares_client.py b/manila_tempest_tests/services/share/v2/json/shares_client.py
index 877a82f..2282510 100644
--- a/manila_tempest_tests/services/share/v2/json/shares_client.py
+++ b/manila_tempest_tests/services/share/v2/json/shares_client.py
@@ -323,7 +323,8 @@
 
     def manage_share(self, service_host, protocol, export_path,
                      share_type_id, name=None, description=None,
-                     version=LATEST_MICROVERSION, url=None):
+                     is_public=False, version=LATEST_MICROVERSION,
+                     url=None):
         post_body = {
             "share": {
                 "export_path": export_path,
@@ -332,6 +333,7 @@
                 "share_type": share_type_id,
                 "name": name,
                 "description": description,
+                "is_public": is_public,
             }
         }
         if url is None:
diff --git a/manila_tempest_tests/tests/api/admin/test_share_manage.py b/manila_tempest_tests/tests/api/admin/test_share_manage.py
index 78255ca..78d28ee 100644
--- a/manila_tempest_tests/tests/api/admin/test_share_manage.py
+++ b/manila_tempest_tests/tests/api/admin/test_share_manage.py
@@ -75,31 +75,37 @@
             'share_type_id': cls.st['share_type']['id'],
             'share_protocol': cls.protocol,
         }}
-        # Create two shares in parallel
-        cls.shares = cls.create_shares([creation_data, creation_data])
 
+        # Data for creating shares in parallel
+        data = [creation_data, creation_data]
+        if float(CONF.share.max_api_microversion) >= 2.8:
+            data.append(creation_data)
+        shares_created = cls.create_shares(data)
+
+        cls.shares = []
         # Load all share data (host, etc.)
-        cls.share1 = cls.shares_v2_client.get_share(cls.shares[0]['id'])
-        cls.share2 = cls.shares_v2_client.get_share(cls.shares[1]['id'])
+        for share in shares_created:
+            # Unmanage shares from manila
+            cls.shares.append(cls.shares_client.get_share(share['id']))
+            cls.shares_client.unmanage_share(share['id'])
+            cls.shares_client.wait_for_resource_deletion(
+                share_id=share['id'])
 
-        # Unmanage shares from manila
-        for share_id in (cls.share1['id'], cls.share2['id']):
-            cls.shares_v2_client.unmanage_share(share_id)
-            cls.shares_v2_client.wait_for_resource_deletion(share_id=share_id)
-
-    @test.attr(type=["gate", "smoke"])
-    def test_manage(self):
-        name = "Name for 'managed' share that had ID %s" % self.share1["id"]
+    def _test_manage(self, share, is_public=False,
+                     version=CONF.share.max_api_microversion):
+        name = "Name for 'managed' share that had ID %s" % \
+               share['id']
         description = "Description for 'managed' share"
 
         # Manage share
         share = self.shares_v2_client.manage_share(
-            service_host=self.share1['host'],
-            export_path=self.share1['export_locations'][0],
-            protocol=self.share1['share_proto'],
+            service_host=share['host'],
+            export_path=share['export_locations'][0],
+            protocol=share['share_proto'],
             share_type_id=self.st['share_type']['id'],
             name=name,
             description=description,
+            is_public=is_public,
         )
 
         # Add managed share to cleanup queue
@@ -114,12 +120,17 @@
         get = self.shares_v2_client.get_share(share['id'], version="2.5")
         self.assertEqual(name, get['name'])
         self.assertEqual(description, get['description'])
-        self.assertEqual(self.share1['host'], get['host'])
-        self.assertEqual(self.share1['share_proto'], get['share_proto'])
+        self.assertEqual(share['host'], get['host'])
+        self.assertEqual(share['share_proto'], get['share_proto'])
         self.assertEqual(self.st['share_type']['name'], get['share_type'])
 
-        get = self.shares_v2_client.get_share(share['id'], version="2.6")
-        self.assertEqual(self.st['share_type']['id'], get['share_type'])
+        share = self.shares_v2_client.get_share(share['id'], version="2.6")
+        self.assertEqual(self.st['share_type']['id'], share['share_type'])
+
+        if float(version) >= 2.8:
+            self.assertEqual(is_public, share['is_public'])
+        else:
+            self.assertFalse(share['is_public'])
 
         # Delete share
         self.shares_v2_client.delete_share(share['id'])
@@ -128,6 +139,17 @@
                           self.shares_v2_client.get_share,
                           share['id'])
 
+    @testtools.skipIf(
+        float(CONF.share.max_api_microversion) < 2.8,
+        "Only for API Microversion >= 2.8")
+    @test.attr(type=["gate", "smoke"])
+    def test_manage_with_is_public_True(self):
+        self._test_manage(share=self.shares[2], is_public=True)
+
+    @test.attr(type=["gate", "smoke"])
+    def test_manage(self):
+        self._test_manage(share=self.shares[0])
+
     @test.attr(type=["gate", "smoke"])
     def test_manage_retry(self):
         # Manage share with invalid parameters
@@ -137,9 +159,9 @@
 
         for share_type_id, status in parameters:
             share = self.shares_v2_client.manage_share(
-                service_host=self.share2['host'],
-                export_path=self.share2['export_locations'][0],
-                protocol=self.share2['share_proto'],
+                service_host=self.shares[1]['host'],
+                export_path=self.shares[1]['export_locations'][0],
+                protocol=self.shares[1]['share_proto'],
                 share_type_id=share_type_id)
 
             # Add managed share to cleanup queue
