| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you 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. |
| """ Tests for API listing of disk offerings with different filters |
| """ |
| # Import Local Modules |
| from marvin.cloudstackTestCase import cloudstackTestCase |
| from marvin.codes import FAILED |
| from marvin.lib.base import (Account, |
| Domain, |
| Volume, |
| ServiceOffering, |
| DiskOffering, |
| VirtualMachine) |
| from marvin.lib.common import (get_domain, list_accounts, |
| list_zones, list_clusters, list_hosts) |
| # Import System modules |
| from nose.plugins.attrib import attr |
| |
| _multiprocess_shared_ = True |
| |
| |
| class TestListDiskOfferings(cloudstackTestCase): |
| |
| @classmethod |
| def setUpClass(cls): |
| testClient = super(TestListDiskOfferings, cls).getClsTestClient() |
| cls.apiclient = testClient.getApiClient() |
| cls.services = testClient.getParsedTestDataConfig() |
| cls.hypervisor = testClient.getHypervisorInfo() |
| cls.domain = get_domain(cls.apiclient) |
| cls.zones = list_zones(cls.apiclient) |
| cls.zone = cls.zones[0] |
| cls.clusters = list_clusters(cls.apiclient) |
| cls.cluster = cls.clusters[0] |
| cls.hosts = list_hosts(cls.apiclient) |
| cls.account = list_accounts(cls.apiclient, name="admin")[0] |
| cls._cleanup = [] |
| cls.disk_offerings = DiskOffering.list(cls.apiclient, listall=True) |
| |
| cls.disk_offering = DiskOffering.create(cls.apiclient, |
| cls.services["disk_offering"], |
| domainid=cls.domain.id) |
| cls._cleanup.append(cls.disk_offering) |
| |
| cls.child_domain_1 = Domain.create( |
| cls.apiclient, |
| cls.services["domain"], |
| parentdomainid=cls.domain.id |
| ) |
| cls._cleanup.append(cls.child_domain_1) |
| |
| cls.account_1 = Account.create( |
| cls.apiclient, |
| cls.services["account"], |
| admin=True, |
| domainid=cls.domain.id |
| ) |
| cls._cleanup.append(cls.account_1) |
| |
| cls.domainadmin_api_client = testClient.getUserApiClient( |
| UserName=cls.account_1.user[0].username, |
| DomainName=cls.domain.name, |
| type=2 |
| ) |
| |
| cls.disk_offering_child_domain = DiskOffering.create(cls.apiclient, |
| cls.services["disk_offering"], |
| domainid=cls.child_domain_1.id, |
| zoneid=cls.zone.id, |
| encrypt=True) |
| cls._cleanup.append(cls.disk_offering_child_domain) |
| |
| @classmethod |
| def tearDownClass(cls): |
| super(TestListDiskOfferings, cls).tearDownClass() |
| |
| @attr(tags=["advanced", "advancedns", "smoke", "basic"], required_hardware="false") |
| def test_01_list_disk_offerings_id_filter(self): |
| """ Test list disk offerings with id filter |
| """ |
| # List all disk offerings |
| disk_offerings = DiskOffering.list(self.apiclient, id=self.disk_offering.id) |
| self.assertTrue( |
| isinstance(disk_offerings, list), |
| "List disk offerings response is not a valid list" |
| ) |
| self.assertEqual( |
| len(disk_offerings), |
| 1, |
| "List disk offerings response has incorrect length" |
| ) |
| # Verify the id of the disk offering returned is the same as the one requested |
| self.assertEqual( |
| disk_offerings[0].id, |
| self.disk_offering.id, |
| "List disk offerings should return the disk offering requested" |
| ) |
| |
| disk_offerings = DiskOffering.list(self.apiclient, id=-1) |
| self.assertIsNone(disk_offerings, "List disk offerings response is not None") |
| |
| @attr(tags=["advanced", "advancedns", "smoke", "basic"], required_hardware="false") |
| def test_02_list_disk_offerings_name_filter(self): |
| """ Test list disk offerings with name filter |
| """ |
| disk_offerings = DiskOffering.list(self.apiclient, name=self.services["disk_offering"]["name"]) |
| self.assertTrue( |
| isinstance(disk_offerings, list), |
| "List disk offerings response is not a valid list" |
| ) |
| self.assertEqual( |
| len(disk_offerings), |
| 2, |
| "List disk offerings response has incorrect length" |
| ) |
| # Verify the name of the disk offering returned is the same as the one requested |
| self.assertEqual( |
| disk_offerings[0].name, |
| self.services["disk_offering"]["name"], |
| "List disk offerings should return the disk offering requested" |
| ) |
| self.assertEqual( |
| disk_offerings[1].name, |
| self.services["disk_offering"]["name"], |
| "List disk offerings should return the disk offering requested" |
| ) |
| |
| @attr(tags=["advanced", "advancedns", "smoke", "basic"], required_hardware="false") |
| def test_03_list_disk_offerings_zoneid_filter(self): |
| """ Test list disk offerings with zoneid filter |
| """ |
| disk_offerings_zone_1 = DiskOffering.list(self.apiclient, zoneid=self.zone.id) |
| self.assertTrue( |
| isinstance(disk_offerings_zone_1, list), |
| "List disk offerings response is not a valid list" |
| ) |
| self.assertEqual( |
| len(disk_offerings_zone_1) - len(self.disk_offerings), |
| 2, |
| "List disk offerings response has incorrect length" |
| ) |
| |
| for disk_offering in disk_offerings_zone_1: |
| self.assertTrue( |
| disk_offering.zoneid is None or disk_offering.zoneid == self.zone.id, |
| "List disk offerings should return the disk offering requested" |
| ) |
| |
| if len(self.zones) > 1: |
| disk_offerings_zone_2 = DiskOffering.list(self.apiclient, zoneid=self.zones[1].id) |
| self.assertTrue( |
| isinstance(disk_offerings_zone_2, list), |
| "List disk offerings response is not a valid list" |
| ) |
| for disk_offering in disk_offerings_zone_2: |
| self.assertTrue( |
| disk_offering.zoneid is None or disk_offering.zoneid == self.zones[1].id, |
| "List disk offerings should return the disk offering requested" |
| ) |
| |
| self.assertEqual(len(disk_offerings_zone_1) - len(disk_offerings_zone_2), 1) |
| |
| @attr(tags=["advanced", "advancedns", "smoke", "basic"], required_hardware="false") |
| def test_04_list_disk_offerings_domainid_filter(self): |
| """ Test list disk offerings with domainid filter |
| """ |
| disk_offerings = DiskOffering.list(self.apiclient, domainid=self.domain.id) |
| self.assertTrue( |
| isinstance(disk_offerings, list), |
| "List disk offerings response is not a valid list" |
| ) |
| self.assertEqual( |
| len(disk_offerings), |
| 1, |
| "List disk offerings response has incorrect length" |
| ) |
| self.assertEqual( |
| disk_offerings[0].domainid, |
| self.domain.id, |
| "List disk offerings should return the disk offering requested" |
| ) |
| |
| disk_offerings = DiskOffering.list(self.apiclient, domainid=self.child_domain_1.id) |
| self.assertTrue( |
| isinstance(disk_offerings, list), |
| "List disk offerings response is not a valid list" |
| ) |
| self.assertEqual( |
| len(disk_offerings), |
| 1, |
| "List disk offerings response has incorrect length" |
| ) |
| self.assertEqual( |
| disk_offerings[0].domainid, |
| self.child_domain_1.id, |
| "List disk offerings should return the disk offering requested" |
| ) |
| |
| disk_offerings = DiskOffering.list(self.apiclient, domainid=-1) |
| self.assertIsNone(disk_offerings, "List disk offerings response is not None") |
| |
| @attr(tags=["advanced", "advancedns", "smoke", "basic"], required_hardware="false") |
| def test_05_list_disk_offerings_encrypted_filter(self): |
| """ Test list disk offerings with encrypted filter |
| """ |
| disk_offerings = DiskOffering.list(self.apiclient, encrypt=True) |
| self.assertTrue( |
| isinstance(disk_offerings, list), |
| "List disk offerings response is not a valid list" |
| ) |
| |
| self.assertEqual( |
| len(disk_offerings), |
| 1, |
| "List disk offerings response has incorrect length" |
| ) |
| self.assertTrue( |
| disk_offerings[0].encrypt, |
| "List disk offerings should return the disk offering requested" |
| ) |
| |
| disk_offerings = DiskOffering.list(self.apiclient, encrypt=False) |
| self.assertTrue( |
| isinstance(disk_offerings, list), |
| "List disk offerings response is not a valid list" |
| ) |
| self.assertEqual( |
| len(disk_offerings) - len(self.disk_offerings), |
| 1, |
| "List disk offerings response has incorrect length" |
| ) |
| for disk_offering in disk_offerings: |
| self.assertFalse( |
| disk_offering.encrypt, |
| "List disk offerings should return the disk offering requested" |
| ) |
| |
| @attr(tags=["advanced", "advancedns", "smoke", "basic"], required_hardware="false") |
| def test_06_list_disk_offerings_keyword_filter(self): |
| """ Test list disk offerings with keyword filter |
| """ |
| disk_offerings = DiskOffering.list(self.apiclient, keyword=self.disk_offering.name) |
| self.assertTrue( |
| isinstance(disk_offerings, list), |
| "List disk offerings response is not a valid list" |
| ) |
| self.assertEqual( |
| len(disk_offerings), |
| 2, |
| "List disk offerings response has incorrect length" |
| ) |
| self.assertEqual( |
| disk_offerings[0].name, |
| self.disk_offering.name, |
| "List disk offerings should return the disk offering requested" |
| ) |
| self.assertEqual( |
| disk_offerings[1].name, |
| self.disk_offering.name, |
| "List disk offerings should return the disk offering requested" |
| ) |
| |
| disk_offerings = DiskOffering.list(self.apiclient, keyword="random") |
| self.assertIsNone(disk_offerings, "List disk offerings response is not None") |
| |
| @attr(tags=["advanced", "advancedns", "smoke", "basic"], required_hardware="false") |
| def test_07_list_disk_offering_isrecursive_filter(self): |
| """ Test list disk offerings with isrecursive parameter |
| """ |
| disk_offerings = DiskOffering.list(self.domainadmin_api_client, isrecursive=True) |
| self.assertTrue( |
| isinstance(disk_offerings, list), |
| "List disk offerings response is not a valid list" |
| ) |
| self.assertEqual( |
| len(disk_offerings) - len(self.disk_offerings), |
| 2, |
| "List disk offerings response has incorrect length" |
| ) |
| |
| disk_offerings = DiskOffering.list(self.domainadmin_api_client, isrecursive=False) |
| self.assertTrue( |
| isinstance(disk_offerings, list), |
| "List disk offerings response is not a valid list" |
| ) |
| self.assertEqual( |
| len(disk_offerings) - len(self.disk_offerings), |
| 1, |
| "List disk offerings response has incorrect length" |
| ) |
| |
| @attr(tags=["advanced", "advancedns", "smoke", "basic"], required_hardware="false") |
| def test_08_list_disk_offering_no_filter(self): |
| """ Test list disk offerings with no filters |
| """ |
| disk_offerings = DiskOffering.list(self.apiclient) |
| self.assertTrue( |
| isinstance(disk_offerings, list), |
| "List disk offerings response is not a valid list" |
| ) |
| self.assertEqual( |
| len(disk_offerings) - len(self.disk_offerings), |
| 2, |
| "List disk offerings response has incorrect length" |
| ) |