diff --git a/manila_tempest_tests/services/share/json/shares_client.py b/manila_tempest_tests/services/share/json/shares_client.py
index 660f16b..3eeea5e 100644
--- a/manila_tempest_tests/services/share/json/shares_client.py
+++ b/manila_tempest_tests/services/share/json/shares_client.py
@@ -751,3 +751,12 @@
         resp, body = self.get(uri)
         self.expected_success(200, resp.status)
         return json.loads(body)
+
+###############
+
+    def list_availability_zones(self):
+        """Get list of availability zones."""
+        uri = 'os-availability-zone'
+        resp, body = self.get(uri)
+        self.expected_success(200, resp.status)
+        return self._parse_resp(body)
diff --git a/manila_tempest_tests/tests/api/base.py b/manila_tempest_tests/tests/api/base.py
index a8f2b83..7beb289 100644
--- a/manila_tempest_tests/tests/api/base.py
+++ b/manila_tempest_tests/tests/api/base.py
@@ -713,9 +713,14 @@
 
     @classmethod
     def resource_setup(cls):
-        cls.username = CONF.identity.admin_username
-        cls.password = CONF.identity.admin_password
-        cls.tenant_name = CONF.identity.admin_tenant_name
+        if hasattr(CONF.identity, 'admin_username'):
+            cls.username = CONF.identity.admin_username
+            cls.password = CONF.identity.admin_password
+            cls.tenant_name = CONF.identity.admin_tenant_name
+        else:
+            cls.username = CONF.auth.admin_username
+            cls.password = CONF.auth.admin_password
+            cls.tenant_name = CONF.auth.admin_tenant_name
         cls.verify_nonempty(cls.username, cls.password, cls.tenant_name)
         cls.os = clients.AdminManager()
         admin_share_network_id = CONF.share.admin_share_network_id
diff --git a/manila_tempest_tests/tests/api/test_availability_zones.py b/manila_tempest_tests/tests/api/test_availability_zones.py
new file mode 100644
index 0000000..7330f41
--- /dev/null
+++ b/manila_tempest_tests/tests/api/test_availability_zones.py
@@ -0,0 +1,33 @@
+# Copyright 2015 mirantis Inc.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from tempest import test
+
+from manila_tempest_tests.tests.api import base
+
+
+class AvailabilityZonesTest(base.BaseSharesTest):
+
+    def _list_availability_zones_assertions(self, availability_zones):
+        self.assertTrue(len(availability_zones) > 0)
+        keys = ("created_at", "updated_at", "name", "id")
+        for az in availability_zones:
+            for key in keys:
+                self.assertIn(key, az)
+
+    @test.attr(type=["smoke", "gate"])
+    def test_list_availability_zones_extension(self):
+        azs = self.shares_client.list_availability_zones()
+        self._list_availability_zones_assertions(azs)
diff --git a/manila_tempest_tests/tests/api/test_limits.py b/manila_tempest_tests/tests/api/test_limits.py
index 044d601..5046b30 100644
--- a/manila_tempest_tests/tests/api/test_limits.py
+++ b/manila_tempest_tests/tests/api/test_limits.py
@@ -35,10 +35,12 @@
             "maxTotalShares",
             "maxTotalShareSnapshots",
             "maxTotalShareNetworks",
+            "maxTotalSnapshotGigabytes",
             "totalSharesUsed",
             "totalShareSnapshotsUsed",
             "totalShareNetworksUsed",
             "totalShareGigabytesUsed",
+            "totalSnapshotGigabytesUsed",
         ]
         [self.assertIn(key, limits["absolute"].keys()) for key in abs_keys]
 
@@ -54,7 +56,9 @@
         self.assertGreater(int(abs_l["maxTotalShares"]), -2)
         self.assertGreater(int(abs_l["maxTotalShareSnapshots"]), -2)
         self.assertGreater(int(abs_l["maxTotalShareNetworks"]), -2)
+        self.assertGreater(int(abs_l["maxTotalSnapshotGigabytes"]), -2)
         self.assertGreater(int(abs_l["totalSharesUsed"]), -2)
         self.assertGreater(int(abs_l["totalShareSnapshotsUsed"]), -2)
         self.assertGreater(int(abs_l["totalShareNetworksUsed"]), -2)
         self.assertGreater(int(abs_l["totalShareGigabytesUsed"]), -2)
+        self.assertGreater(int(abs_l["totalSnapshotGigabytesUsed"]), -2)
