You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bh...@apache.org on 2015/03/12 12:14:41 UTC
git commit: updated refs/heads/master to 5cdb25f
Repository: cloudstack
Updated Branches:
refs/heads/master a1e81a5d0 -> 5cdb25f41
CLOUDSTACK-8311: Adding test case to confirm Volume Snapshot for root disk is
... not allowed when VM snapshot is present for a VM
This closes #107
Signed-off-by: Rohit Yadav <ro...@shapeblue.com>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/5cdb25f4
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/5cdb25f4
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/5cdb25f4
Branch: refs/heads/master
Commit: 5cdb25f4124eda6a6ae87f7678feb1ed20902a78
Parents: a1e81a5
Author: Gaurav Aradhye <ga...@clogeny.com>
Authored: Wed Mar 11 13:51:00 2015 +0530
Committer: Rohit Yadav <ro...@shapeblue.com>
Committed: Thu Mar 12 16:43:48 2015 +0530
----------------------------------------------------------------------
test/integration/smoke/test_vm_snapshots.py | 121 ++++++++++++++++++++++-
1 file changed, 118 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5cdb25f4/test/integration/smoke/test_vm_snapshots.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_vm_snapshots.py b/test/integration/smoke/test_vm_snapshots.py
index 94c0f33..5d5cdc4 100644
--- a/test/integration/smoke/test_vm_snapshots.py
+++ b/test/integration/smoke/test_vm_snapshots.py
@@ -16,14 +16,16 @@
# under the License.
# Import Local Modules
-from marvin.codes import FAILED, KVM
+from marvin.codes import FAILED, KVM, PASS
from nose.plugins.attrib import attr
from marvin.cloudstackTestCase import cloudstackTestCase, unittest
-from marvin.lib.utils import random_gen, cleanup_resources
+from marvin.lib.utils import random_gen, cleanup_resources, validateList
from marvin.lib.base import (Account,
ServiceOffering,
VirtualMachine,
- VmSnapshot)
+ VmSnapshot,
+ Volume,
+ Snapshot)
from marvin.lib.common import (get_zone,
get_domain,
get_template)
@@ -273,3 +275,116 @@ class TestVmSnapshot(cloudstackTestCase):
None,
"Check list vm snapshot has be deleted"
)
+
+class TestSnapshots(cloudstackTestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ try:
+ cls._cleanup = []
+ cls.testClient = super(TestSnapshots, cls).getClsTestClient()
+ cls.api_client = cls.testClient.getApiClient()
+ cls.services = cls.testClient.getParsedTestDataConfig()
+ cls.hypervisor = cls.testClient.getHypervisorInfo()
+ if cls.hypervisor.lower() in (KVM.lower(), "hyperv", "lxc"):
+ raise unittest.SkipTest(
+ "VM snapshot feature is not supported on KVM, Hyper-V or LXC")
+ # Get Domain, Zone, Template
+ cls.domain = get_domain(cls.api_client)
+ cls.zone = get_zone(
+ cls.api_client,
+ cls.testClient.getZoneForTests())
+ cls.template = get_template(
+ cls.api_client,
+ cls.zone.id,
+ cls.services["ostype"]
+ )
+ if cls.zone.localstorageenabled:
+ cls.storagetype = 'local'
+ cls.services["service_offerings"][
+ "tiny"]["storagetype"] = 'local'
+ else:
+ cls.storagetype = 'shared'
+ cls.services["service_offerings"][
+ "tiny"]["storagetype"] = 'shared'
+
+ cls.services['mode'] = cls.zone.networktype
+ cls.services["virtual_machine"]["hypervisor"] = cls.hypervisor
+ cls.services["virtual_machine"]["zoneid"] = cls.zone.id
+ cls.services["virtual_machine"]["template"] = cls.template.id
+ cls.services["custom_volume"]["zoneid"] = cls.zone.id
+ # Creating Disk offering, Service Offering and Account
+ cls.service_offering = ServiceOffering.create(
+ cls.api_client,
+ cls.services["service_offerings"]["tiny"]
+ )
+ cls._cleanup.append(cls.service_offering)
+ cls.account = Account.create(
+ cls.api_client,
+ cls.services["account"],
+ domainid=cls.domain.id
+ )
+ cls._cleanup.append(cls.account)
+ except Exception as e:
+ cls.tearDownClass()
+ raise Exception("Warning: Exception in setup : %s" % e)
+ return
+
+ def setUp(self):
+
+ self.apiclient = self.testClient.getApiClient()
+ self.cleanup = []
+
+ def tearDown(self):
+ # Clean up, terminate the created resources
+ cleanup_resources(self.apiclient, self.cleanup)
+ return
+
+ @classmethod
+ def tearDownClass(cls):
+ try:
+ cleanup_resources(cls.api_client, cls._cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+
+ return
+
+ @attr(tags=["advanced", "basic", "smoke"], required_hardware="true")
+ def test_01_test_vm_volume_snapshot(self):
+ """
+ @Desc: Test that Volume snapshot for root volume not allowed
+ when VM snapshot is present for the VM
+ @Steps:
+ 1: Deploy a VM and create a VM snapshot for VM
+ 2: Try to create snapshot for the root volume of the VM,
+ It should fail
+ """
+
+ # Creating Virtual Machine
+ virtual_machine = VirtualMachine.create(
+ self.apiclient,
+ self.services["virtual_machine"],
+ accountid=self.account.name,
+ domainid=self.account.domainid,
+ serviceofferingid=self.service_offering.id,
+ )
+
+ VmSnapshot.create(
+ self.apiclient,
+ virtual_machine.id,
+ )
+
+ volumes = Volume.list(self.apiclient,
+ virtualmachineid=virtual_machine.id,
+ type="ROOT",
+ listall=True)
+
+ self.assertEqual(validateList(volumes)[0], PASS,
+ "Failed to get root volume of the VM")
+
+ volume = volumes[0]
+
+ with self.assertRaises(Exception):
+ Snapshot.create(self.apiclient,
+ volume_id=volume.id)
+ return