You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ml...@apache.org on 2013/01/16 18:43:01 UTC
git commit: Summary: Adding integration test for resizing of volumes
Updated Branches:
refs/heads/resizevolume d8056c931 -> ac15f932d
Summary: Adding integration test for resizing of volumes
Submitted-by: Ryan Dietrich <ryan@betterservers.com
Signed-off-by: Marcus Sorensen <ma...@betterservers.com> 1358358209 -0700
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/ac15f932
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/ac15f932
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/ac15f932
Branch: refs/heads/resizevolume
Commit: ac15f932d940e82706b96c3bd48be66639b374ad
Parents: d8056c9
Author: Marcus Sorensen <ma...@betterservers.com>
Authored: Wed Jan 16 10:43:29 2013 -0700
Committer: Marcus Sorensen <ma...@betterservers.com>
Committed: Wed Jan 16 10:43:29 2013 -0700
----------------------------------------------------------------------
test/integration/smoke/test_volumes.py | 125 +++++++++++++++++++++-
tools/marvin/marvin/integration/lib/base.py | 6 +
2 files changed, 127 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ac15f932/test/integration/smoke/test_volumes.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_volumes.py b/test/integration/smoke/test_volumes.py
index 2d0cd49..fe36e4a 100644
--- a/test/integration/smoke/test_volumes.py
+++ b/test/integration/smoke/test_volumes.py
@@ -54,12 +54,20 @@ class Services:
"cpunumber": 1,
"cpuspeed": 100, # in MHz
"memory": 64, # In MBs
+ "storagetype": "local"
},
"disk_offering": {
"displaytext": "Small",
"name": "Small",
+ "storagetype": "local",
"disksize": 1
},
+ 'resized_disk_offering': {
+ "displaytext": "Resized",
+ "name": "Resized",
+ "storagetype": "local",
+ "disksize": 3
+ },
"volume_offerings": {
0: {
"diskname": "TestDiskServ",
@@ -77,8 +85,8 @@ class Services:
"diskdevice": "/dev/xvdb",
"ostype": 'CentOS 5.3 (64-bit)',
"mode": 'basic',
- "sleep": 60,
- "timeout": 10,
+ "sleep": 10,
+ "timeout": 600,
}
@@ -237,7 +245,7 @@ class TestCreateVolume(cloudstackTestCase):
ssh = self.virtual_machine.get_ssh_client(
reconnect=True
)
- c = "fdisk -l"
+ c = "/sbin/fdisk -l"
res = ssh.execute(c)
except Exception as e:
@@ -283,6 +291,16 @@ class TestVolumes(cloudstackTestCase):
cls.api_client,
cls.services["disk_offering"]
)
+ cls.resized_disk_offering = DiskOffering.create(
+ cls.api_client,
+ cls.services["resized_disk_offering"]
+ )
+ cls.custom_resized_disk_offering = DiskOffering.create(
+ cls.api_client,
+ cls.services["resized_disk_offering"],
+ custom=True
+ )
+
template = get_template(
cls.api_client,
cls.zone.id,
@@ -292,6 +310,8 @@ class TestVolumes(cloudstackTestCase):
cls.services["zoneid"] = cls.zone.id
cls.services["template"] = template.id
cls.services["diskofferingid"] = cls.disk_offering.id
+ cls.services['resizeddiskofferingid'] = cls.resized_disk_offering.id
+ cls.services['customresizeddiskofferingid'] = cls.custom_resized_disk_offering.id
# Create VMs, VMs etc
cls.account = Account.create(
@@ -321,6 +341,8 @@ class TestVolumes(cloudstackTestCase):
domainid=cls.account.account.domainid
)
cls._cleanup = [
+ cls.resized_disk_offering,
+ cls.custom_resized_disk_offering,
cls.service_offering,
cls.disk_offering,
cls.account
@@ -500,7 +522,102 @@ class TestVolumes(cloudstackTestCase):
)
@attr(tags = ["advanced", "advancedns", "smoke"])
- def test_07_delete_detached_volume(self):
+ def test_07_resize_fail(self):
+ """Verify invalid options fail to Resize a volume"""
+ # Verify the size is the new size is what we wanted it to be.
+ self.debug("Fail Resize Volume ID: %s" % self.volume.id)
+
+ # first, an invalid id
+ cmd = resizeVolume.resizeVolumeCmd()
+ cmd.id = "invalid id"
+ cmd.diskofferingid = self.services['resizeddiskofferingid']
+ success = False
+ try:
+ response = self.apiClient.resizeVolume(cmd)
+ except Exception as ex:
+ if str(ex) == "HTTP Error 431: 431":
+ success = True
+ self.assertEqual(success, True, "ResizeVolume - verify invalid id is handled appropriately")
+
+ # Next, we'll try an invalid disk offering id
+ cmd.id = self.volume.id
+ cmd.diskofferingid = "invalid id"
+ success = False
+ try:
+ response = self.apiClient.resizeVolume(cmd)
+ except Exception as ex:
+ if "need to specify a disk offering" in str(ex):
+ success = True
+ self.assertEqual(success, True, "ResizeVolume - verify disk offering is handled appropriately")
+
+ # Ok, now let's try and resize a volume that is not custom.
+ cmd.id = self.volume.id
+ cmd.diskofferingid = self.services['diskofferingid']
+ cmd.size = 4
+ currentSize = self.volume.size
+
+ self.apiClient.resizeVolume(cmd)
+ count = 0
+ success = True
+ while count < 10:
+ list_volume_response = list_volumes(
+ self.apiClient,
+ id=self.volume.id,
+ type='DATADISK'
+ )
+ for vol in list_volume_response:
+ if vol.id == self.volume.id and vol.size != currentSize:
+ success = False
+ if success:
+ break
+ else:
+ time.sleep(1)
+ count += 1
+
+ self.assertEqual(
+ success,
+ True,
+ "Verify the volume did not resize"
+ )
+
+
+ @attr(tags = ["advanced", "advancedns", "smoke"])
+ def test_08_resize_volume(self):
+ """Resize a volume"""
+ # Verify the size is the new size is what we wanted it to be.
+ self.debug("Resize Volume ID: %s" % self.volume.id)
+
+ cmd = resizeVolume.resizeVolumeCmd()
+ cmd.id = self.volume.id
+ cmd.diskofferingid = self.services['resizeddiskofferingid']
+
+ self.apiClient.resizeVolume(cmd)
+
+ count = 0
+ success = False
+ while count < 3:
+ list_volume_response = list_volumes(
+ self.apiClient,
+ id=self.volume.id,
+ type='DATADISK'
+ )
+ for vol in list_volume_response:
+ if vol.id == self.volume.id and vol.size == 3221225472L:
+ success = True
+ if success:
+ break
+ else:
+ time.sleep(10)
+ count += 1
+
+ self.assertEqual(
+ success,
+ True,
+ "Check if the volume resized appropriately"
+ )
+
+ @attr(tags = ["advanced", "advancedns", "smoke"])
+ def test_09_delete_detached_volume(self):
"""Delete a Volume unattached to an VM
"""
# Validate the following
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ac15f932/tools/marvin/marvin/integration/lib/base.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/integration/lib/base.py b/tools/marvin/marvin/integration/lib/base.py
index 0daea5d..446da83 100644
--- a/tools/marvin/marvin/integration/lib/base.py
+++ b/tools/marvin/marvin/integration/lib/base.py
@@ -509,6 +509,12 @@ class Volume:
[setattr(cmd, k, v) for k, v in kwargs.items()]
return(apiclient.listVolumes(cmd))
+ def resize(cls, apiclient, **kwargs):
+ """Resize a volume"""
+ cmd = resizeVolume.resizeVolumeCmd()
+ cmd.id = self.id
+ [setattr(cmd, k, v) for k, v in kwargs.items()]
+ return(apiclient.resizeVolume(cmd))
class Snapshot:
"""Manage Snapshot Lifecycle