Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
140 changes: 77 additions & 63 deletions test/integration/smoke/test_snapshots.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
list_snapshots)
from marvin.lib.decoratorGenerators import skipTestIf


class TestSnapshotRootDisk(cloudstackTestCase):

@classmethod
Expand All @@ -52,12 +53,13 @@ def setUpClass(cls):
cls._cleanup = []
if not cls.hypervisorNotSupported:
template = get_template(
cls.apiclient,
cls.zone.id,
cls.services["ostype"]
)
cls.apiclient,
cls.zone.id,
cls.services["ostype"]
)
if template == FAILED:
assert False, "get_template() failed to return template with description %s" % cls.services["ostype"]
assert False, "get_template() failed to return template with description %s" % cls.services[
"ostype"]

cls.services["domainid"] = cls.domain.id
cls.services["server_without_disk"]["zoneid"] = cls.zone.id
Expand All @@ -66,32 +68,33 @@ def setUpClass(cls):

# Create VMs, NAT Rules etc
cls.account = Account.create(
cls.apiclient,
cls.services["account"],
domainid=cls.domain.id
)
cls.apiclient,
cls.services["account"],
domainid=cls.domain.id
)
cls._cleanup.append(cls.account)
cls.service_offering = ServiceOffering.create(
cls.apiclient,
cls.services["service_offerings"]
)
cls.apiclient,
cls.services["service_offerings"]
)
cls._cleanup.append(cls.service_offering)
cls.virtual_machine = cls.virtual_machine_with_disk = \
VirtualMachine.create(
cls.apiclient,
cls.services["server_without_disk"],
templateid=template.id,
accountid=cls.account.name,
domainid=cls.account.domainid,
serviceofferingid=cls.service_offering.id,
mode=cls.services["mode"]
)
VirtualMachine.create(
cls.apiclient,
cls.services["server_without_disk"],
templateid=template.id,
accountid=cls.account.name,
domainid=cls.account.domainid,
zoneid=cls.zone.id,
serviceofferingid=cls.service_offering.id,
mode=cls.services["mode"]
)
return

@classmethod
def tearDownClass(cls):
try:
#Cleanup resources used
# Cleanup resources used
cleanup_resources(cls.apiclient, cls._cleanup)
except Exception as e:
raise Exception("Warning: Exception during cleanup : %s" % e)
Expand All @@ -105,14 +108,14 @@ def setUp(self):

def tearDown(self):
try:
#Clean up, terminate the created instance, volumes and snapshots
# Clean up, terminate the created instance, volumes and snapshots
cleanup_resources(self.apiclient, self.cleanup)
except Exception as e:
raise Exception("Warning: Exception during cleanup : %s" % e)
return

@skipTestIf("hypervisorNotSupported")
@attr(tags = ["advanced", "advancedns", "smoke"], required_hardware="true")
@attr(tags=["advanced", "advancedns", "smoke"], required_hardware="true")
def test_01_snapshot_root_disk(self):
"""Test Snapshot Root Disk
"""
Expand All @@ -123,65 +126,76 @@ def test_01_snapshot_root_disk(self):
# the reqd volume under
# /secondary/snapshots//$account_id/$volumeid/$snapshot_uuid
# 3. verify backup_snap_id was non null in the `snapshots` table
# 4. Verify that zoneid is returned in listSnapshots API response

volumes = list_volumes(
self.apiclient,
virtualmachineid=self.virtual_machine_with_disk.id,
type='ROOT',
listall=True
)
self.apiclient,
virtualmachineid=self.virtual_machine_with_disk.id,
type='ROOT',
listall=True
)

snapshot = Snapshot.create(
self.apiclient,
volumes[0].id,
account=self.account.name,
domainid=self.account.domainid
)
self.apiclient,
volumes[0].id,
account=self.account.name,
domainid=self.account.domainid
)
self.debug("Snapshot created: ID - %s" % snapshot.id)

snapshots = list_snapshots(
self.apiclient,
id=snapshot.id
)
self.apiclient,
id=snapshot.id
)
self.assertEqual(
isinstance(snapshots, list),
True,
"Check list response returns a valid list"
)
isinstance(snapshots, list),
True,
"Check list response returns a valid list"
)

self.assertNotEqual(
snapshots,
None,
"Check if result exists in list item call"
)
snapshots,
None,
"Check if result exists in list item call"
)
self.assertEqual(
snapshots[0].id,
snapshot.id,
"Check resource id in list resources call"
)
snapshots[0].id,
snapshot.id,
"Check resource id in list resources call"
)

self.assertIsNotNone(snapshots[0].zoneid,
"Zone id is not none in listSnapshots")
self.assertEqual(
snapshots[0].zoneid,
self.zone.id,
"Check zone id in the list snapshots"
)

self.debug(
"select backup_snap_id, account_id, volume_id from snapshots where uuid = '%s';" \
"select backup_snap_id, account_id, volume_id from snapshots where uuid = '%s';"
% str(snapshot.id)
)
)
qresultset = self.dbclient.execute(
"select backup_snap_id, account_id, volume_id from snapshots where uuid = '%s';" \
% str(snapshot.id)
)
"select backup_snap_id, account_id, volume_id from snapshots where uuid = '%s';"
% str(snapshot.id)
)
self.assertNotEqual(
len(qresultset),
0,
"Check DB Query result set"
)
len(qresultset),
0,
"Check DB Query result set"
)

qresult = qresultset[0]

snapshot_uuid = qresult[0] # backup_snap_id = snapshot UUID

self.assertNotEqual(
str(snapshot_uuid),
'NULL',
"Check if backup_snap_id is not null"
)
str(snapshot_uuid),
'NULL',
"Check if backup_snap_id is not null"
)

self.assertTrue(is_snapshot_on_nfs(self.apiclient, self.dbclient, self.config, self.zone.id, snapshot.id))
self.assertTrue(is_snapshot_on_nfs(
self.apiclient, self.dbclient, self.config, self.zone.id, snapshot.id))
return