Merge "Add Cinder quota negatives"
diff --git a/tempest/api/volume/admin/test_volume_quotas_negative.py b/tempest/api/volume/admin/test_volume_quotas_negative.py
new file mode 100644
index 0000000..292f8ed
--- /dev/null
+++ b/tempest/api/volume/admin/test_volume_quotas_negative.py
@@ -0,0 +1,83 @@
+# Copyright 2014 OpenStack Foundation
+# 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.api.volume import base
+from tempest import exceptions
+from tempest import test
+
+
+class VolumeQuotasNegativeTestJSON(base.BaseVolumeV1AdminTest):
+ _interface = "json"
+ force_tenant_isolation = True
+
+ @classmethod
+ @test.safe_setup
+ def setUpClass(cls):
+ super(VolumeQuotasNegativeTestJSON, cls).setUpClass()
+ demo_user = cls.isolated_creds.get_primary_user()
+ cls.demo_tenant_id = demo_user.get('tenantId')
+ cls.shared_quota_set = {'gigabytes': 3, 'volumes': 1, 'snapshots': 1}
+
+ # NOTE(gfidente): no need to restore original quota set
+ # after the tests as they only work with tenant isolation.
+ resp, quota_set = cls.quotas_client.update_quota_set(
+ cls.demo_tenant_id,
+ **cls.shared_quota_set)
+
+ # NOTE(gfidente): no need to delete in tearDown as
+ # they are created using utility wrapper methods.
+ cls.volume = cls.create_volume()
+ cls.snapshot = cls.create_snapshot(cls.volume['id'])
+
+ @test.attr(type='negative')
+ def test_quota_volumes(self):
+ self.assertRaises(exceptions.OverLimit,
+ self.volumes_client.create_volume,
+ size=1)
+
+ @test.attr(type='negative')
+ def test_quota_volume_snapshots(self):
+ self.assertRaises(exceptions.OverLimit,
+ self.snapshots_client.create_snapshot,
+ self.volume['id'])
+
+ @test.attr(type='negative')
+ def test_quota_volume_gigabytes(self):
+ # NOTE(gfidente): quota set needs to be changed for this test
+ # or we may be limited by the volumes or snaps quota number, not by
+ # actual gigs usage; next line ensures shared set is restored.
+ self.addCleanup(self.quotas_client.update_quota_set,
+ self.demo_tenant_id,
+ **self.shared_quota_set)
+
+ new_quota_set = {'gigabytes': 2, 'volumes': 2, 'snapshots': 1}
+ resp, quota_set = self.quotas_client.update_quota_set(
+ self.demo_tenant_id,
+ **new_quota_set)
+ self.assertRaises(exceptions.OverLimit,
+ self.volumes_client.create_volume,
+ size=1)
+
+ new_quota_set = {'gigabytes': 2, 'volumes': 1, 'snapshots': 2}
+ resp, quota_set = self.quotas_client.update_quota_set(
+ self.demo_tenant_id,
+ **self.shared_quota_set)
+ self.assertRaises(exceptions.OverLimit,
+ self.snapshots_client.create_snapshot,
+ self.volume['id'])
+
+
+class VolumeQuotasNegativeTestXML(VolumeQuotasNegativeTestJSON):
+ _interface = "xml"