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 2014/03/11 01:13:04 UTC
[3/4] git commit: updated refs/heads/resize-root to 79bd6f1
resizeroot: test for deployVirtualMachine with root disk size
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/a0801a5d
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/a0801a5d
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/a0801a5d
Branch: refs/heads/resize-root
Commit: a0801a5d420a3394b3f4e3ef58996db08aa98134
Parents: bfb9e82
Author: Marcus Sorensen <ma...@betterservers.com>
Authored: Mon Feb 10 13:48:27 2014 -0700
Committer: Marcus Sorensen <ma...@betterservers.com>
Committed: Mon Feb 10 13:48:27 2014 -0700
----------------------------------------------------------------------
.../smoke/test_deploy_vm_root_resize.py | 179 +++++++++++++++++++
tools/marvin/marvin/integration/lib/base.py | 7 +-
2 files changed, 184 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a0801a5d/test/integration/smoke/test_deploy_vm_root_resize.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_deploy_vm_root_resize.py b/test/integration/smoke/test_deploy_vm_root_resize.py
new file mode 100644
index 0000000..a6584a2
--- /dev/null
+++ b/test/integration/smoke/test_deploy_vm_root_resize.py
@@ -0,0 +1,179 @@
+# 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.
+
+#Test from the Marvin - Testing in Python wiki
+
+#All tests inherit from cloudstackTestCase
+from marvin.cloudstackTestCase import cloudstackTestCase
+
+#Import Integration Libraries
+
+#base - contains all resources as entities and defines create, delete, list operations on them
+from marvin.integration.lib.base import Account, VirtualMachine, ServiceOffering
+
+#utils - utility classes for common cleanup, external library wrappers etc
+from marvin.integration.lib.utils import cleanup_resources
+
+#common - commonly used methods for all tests are listed here
+from marvin.integration.lib.common import get_zone, get_domain, get_template, list_volumes
+
+from nose.plugins.attrib import attr
+
+class TestData(object):
+ """Test data object that is required to create resources
+ """
+ def __init__(self):
+ self.testdata = {
+ #data to create an account
+ "account": {
+ "email": "test@test.com",
+ "firstname": "Test",
+ "lastname": "User",
+ "username": "test",
+ "password": "password",
+ },
+ #data reqd for virtual machine creation
+ "virtual_machine" : {
+ "name" : "testvm",
+ "displayname" : "Test VM",
+ },
+ #small service offering
+ "service_offering": {
+ "small": {
+ "name": "Small Instance",
+ "displaytext": "Small Instance",
+ "cpunumber": 1,
+ "cpuspeed": 100,
+ "memory": 256,
+ },
+ },
+ "ostype": 'CentOS 5.3 (64-bit)',
+ }
+
+class TestDeployVM(cloudstackTestCase):
+ """Test deploy a VM into a user account
+ """
+
+ def setUp(self):
+ self.testdata = TestData().testdata
+ self.apiclient = self.testClient.getApiClient()
+
+ # Get Zone, Domain and Default Built-in template
+ self.domain = get_domain(self.apiclient, self.testdata)
+ self.zone = get_zone(self.apiclient, self.testdata)
+ self.testdata["mode"] = self.zone.networktype
+# self.template = get_template(self.apiclient, self.zone.id, self.testdata["ostype"])
+ self.template = get_template(self.apiclient, self.zone.id, self.testdata["ostype"], templatetype='USER', services = {"template":'31f52a4d-5681-43f7-8651-ad4aaf823618'})
+
+
+ #create a user account
+ self.account = Account.create(
+ self.apiclient,
+ self.testdata["account"],
+ domainid=self.domain.id
+ )
+ #create a service offering
+ self.service_offering = ServiceOffering.create(
+ self.apiclient,
+ self.testdata["service_offering"]["small"]
+ )
+ #build cleanup list
+ self.cleanup = [
+ self.service_offering,
+ self.account
+ ]
+
+ @attr(tags = ['advanced', 'simulator', 'basic', 'sg'])
+ def test_deploy_vm_root_resize(self):
+ """Test Deploy Virtual Machine With Root Resize
+
+ # Validate the following:
+ # 1. listVirtualMachines returns accurate information
+ # 2. root disk has new size per listVolumes
+ # 3. Rejects non-supported hypervisor types
+ """
+ self.apiclient.hypervisor = 'KVM'
+ self.virtual_machine = VirtualMachine.create(
+ self.apiclient,
+ self.testdata["virtual_machine"],
+ accountid=self.account.name,
+ zoneid=self.zone.id,
+ domainid=self.account.domainid,
+ serviceofferingid=self.service_offering.id,
+ templateid=self.template.id,
+ rootdisksize=10
+ )
+
+ list_vms = VirtualMachine.list(self.apiclient, id=self.virtual_machine.id)
+
+ self.debug(
+ "Verify listVirtualMachines response for virtual machine: %s"\
+ % self.virtual_machine.id
+ )
+
+ self.assertEqual(
+ isinstance(list_vms, list),
+ True,
+ "List VM response was not a valid list"
+ )
+ self.assertNotEqual(
+ len(list_vms),
+ 0,
+ "List VM response was empty"
+ )
+
+ vm = list_vms[0]
+ self.assertEqual(
+ vm.id,
+ self.virtual_machine.id,
+ "Virtual Machine ids do not match"
+ )
+ self.assertEqual(
+ vm.name,
+ self.virtual_machine.name,
+ "Virtual Machine names do not match"
+ )
+ self.assertEqual(
+ vm.state,
+ "Running",
+ msg="VM is not in Running state"
+ )
+
+ # get root vol from created vm, verify it is 10G
+ list_volume_response = list_volumes(
+ self.apiclient,
+ virtualmachineid=self.virtual_machine.id,
+ type='ROOT',
+ listall=True
+ )
+
+ rootvolume = list_volume_response[0]
+ success = False
+ if rootvolume is not None and rootvolume.size == 10737418240L:
+ success = True
+
+ self.assertEqual(
+ success,
+ True,
+ "Check if the root volume resized appropriately"
+ )
+
+ def tearDown(self):
+ try:
+ cleanup_resources(self.apiclient, self.cleanup)
+ except Exception as e:
+ self.debug("Warning! Exception in tearDown: %s" % e)
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a0801a5d/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 7449d8c..3005a30 100755
--- a/tools/marvin/marvin/integration/lib/base.py
+++ b/tools/marvin/marvin/integration/lib/base.py
@@ -325,7 +325,7 @@ class VirtualMachine:
securitygroupids=None, projectid=None, startvm=None,
diskofferingid=None, affinitygroupnames=None, affinitygroupids=None, group=None,
hostid=None, keypair=None, ipaddress=None, mode='default', method='GET',
- customcpunumber=None, customcpuspeed=None, custommemory=None):
+ customcpunumber=None, customcpuspeed=None, custommemory=None, rootdisksize=None):
"""Create the instance"""
cmd = deployVirtualMachine.deployVirtualMachineCmd()
@@ -413,7 +413,7 @@ class VirtualMachine:
if "userdata" in services:
cmd.userdata = base64.urlsafe_b64encode(services["userdata"])
- cmd.details = [{"cpuNumber": "","cpuSpeed":"","memory":""}]
+ cmd.details = [{"cpuNumber": "","cpuSpeed":"","memory":"","rootdisksize":""}]
if customcpunumber:
cmd.details[0]["cpuNumber"] = customcpunumber
@@ -424,6 +424,9 @@ class VirtualMachine:
if custommemory:
cmd.details[0]["memory"] = custommemory
+ if rootdisksize:
+ cmd.details[0]["rootdisksize"] = rootdisksize
+
if group:
cmd.group = group