You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by an...@apache.org on 2013/10/03 08:06:38 UTC
[40/50] git commit: updated refs/heads/4.2 to 86c9363
CLOUDSTACK-702: Adding test for deploying vm in new cidr 1. Add guest ip range in new cidr and deploy vm in that
Signed-off-by: sanjeevneelarapu <sa...@citrix.com>
Signed-off-by: venkataswamybabu budumuru <ve...@citrix.com>
(cherry picked from commit ff2bd3d44325ef915cb3d7b11a966c9c7c387cb3)
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/a34bf457
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/a34bf457
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/a34bf457
Branch: refs/heads/4.2
Commit: a34bf457dfb3726842c1fde002be61c53b0a60d7
Parents: 94f741b
Author: sanjeevneelarapu <sa...@citrix.com>
Authored: Mon Sep 23 16:41:11 2013 +0530
Committer: venkataswamybabu budumuru <ve...@citrix.com>
Committed: Mon Sep 30 14:56:08 2013 +0530
----------------------------------------------------------------------
.../component/maint/test_multiple_ip_ranges.py | 337 +++++++++++++++++++
1 file changed, 337 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/a34bf457/test/integration/component/maint/test_multiple_ip_ranges.py
----------------------------------------------------------------------
diff --git a/test/integration/component/maint/test_multiple_ip_ranges.py b/test/integration/component/maint/test_multiple_ip_ranges.py
new file mode 100644
index 0000000..782957c
--- /dev/null
+++ b/test/integration/component/maint/test_multiple_ip_ranges.py
@@ -0,0 +1,337 @@
+# 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 Multiple IP Ranges feature
+"""
+from marvin.cloudstackTestCase import *
+from marvin.cloudstackAPI import *
+from marvin.cloudstackException import cloudstackAPIException
+from marvin.integration.lib.utils import *
+from marvin.integration.lib.base import *
+from marvin.integration.lib.common import *
+#from netaddr import *
+import netaddr
+
+from nose.plugins.attrib import attr
+
+class Services:
+ """Test Multiple IP Ranges
+ """
+ def __init__(self):
+ self.services = {
+ "account": {
+ "email": "test@test.com",
+ "firstname": "Test",
+ "lastname": "User",
+ "username": "test",
+ # Random characters are appended for unique
+ # username
+ "password": "password",
+ },
+ "service_offering": {
+ "name": "Tiny Instance",
+ "displaytext": "Tiny Instance",
+ "cpunumber": 1,
+ "cpuspeed": 200, # in MHz
+ "memory": 256, # In MBs
+ },
+ "disk_offering": {
+ "displaytext": "Small Disk",
+ "name": "Small Disk",
+ "disksize": 1
+ },
+ "templates": {
+ "displaytext": 'Template',
+ "name": 'Template',
+ "ostype": "CentOS 5.3 (64-bit)",
+ "templatefilter": 'self',
+ },
+ "vlan_ip_range": {
+ "startip": "",
+ "endip": "",
+ "netmask": "",
+ "gateway": "",
+ "forvirtualnetwork": "false",
+ "vlan": "untagged",
+ },
+ "server_without_disk": {
+ "displayname": "Test VM-No Disk",
+ "username": "root",
+ "password": "password",
+ "hypervisor": 'XenServer',
+ },
+ "cidr": {
+ "name": "cidr1 -Test",
+ "gateway" :"10.147.43.1",
+ "netmask" :"255.255.255.128",
+ "startip" :"10.147.43.3",
+ "endip" :"10.147.43.10",
+ },
+ "ostype": "CentOS 5.3 (64-bit)",
+ "sleep": 60,
+ "timeout": 10,
+ }
+
+class TestMultipleIpRanges(cloudstackTestCase):
+ """Test Multiple IP Ranges for guest network
+ """
+
+
+ @classmethod
+ def setUpClass(cls):
+ cls.api_client = super(TestMultipleIpRanges, cls).getClsTestClient().getApiClient()
+ cls.services = Services().services
+ # Get Zone, Domain and templates
+ cls.domain = get_domain(cls.api_client, cls.services)
+ cls.zone = get_zone(cls.api_client, cls.services)
+ cls.pod = get_pod(cls.api_client, cls.zone.id, cls.services)
+ cls.services['mode'] = cls.zone.networktype
+ cls.services["domainid"] = cls.domain.id
+ cls.services["zoneid"] = cls.zone.id
+ cls.account = Account.create(
+ cls.api_client,
+ cls.services["account"],
+ domainid=cls.domain.id
+ )
+ cls.services["account"] = cls.account.name
+ cls.disk_offering = DiskOffering.create(
+ cls.api_client,
+ cls.services["disk_offering"]
+ )
+ cls.service_offering = ServiceOffering.create(
+ cls.api_client,
+ cls.services["service_offering"]
+ )
+ cls.template = get_template(
+ cls.api_client,
+ cls.zone.id,
+ cls.services["ostype"]
+ )
+ cls.services["templates"]["ostypeid"] = cls.template.ostypeid
+ cls.services["diskoffering"] = cls.disk_offering.id
+ cls._cleanup = [
+ cls.account,
+ ]
+ return
+
+ @classmethod
+ def tearDownClass(cls):
+ try:
+ #Cleanup resources used
+ cleanup_resources(cls.api_client, cls._cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def setUp(self):
+ self.apiclient = self.testClient.getApiClient()
+ self.dbclient = self.testClient.getDbConnection()
+ self.cleanup = [ ]
+ return
+
+ def tearDown(self):
+ try:
+ #Clean up, terminate the resources created
+ cleanup_resources(self.apiclient, self.cleanup)
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ def verify_vlan_range(self,vlan,services):
+ #compare vlan_list response with configured values
+ self.assertEqual(
+ isinstance(vlan, list),
+ True,
+ "Check list response returned a valid list"
+ )
+ self.assertNotEqual(
+ len(vlan),
+ 0,
+ "check list vlan response"
+ )
+ self.assertEqual(
+ str(vlan[0].startip),
+ str(services["startip"]),
+ "Start IP in vlan ip range is not matched with the configured start ip"
+ )
+ self.assertEqual(
+ str(vlan[0].endip),
+ str(services["endip"]),
+ "End IP in vlan ip range is not matched with the configured end ip"
+ )
+ self.assertEqual(
+ str(vlan[0].gateway),
+ str(services["gateway"]),
+ "gateway in vlan ip range is not matched with the configured gateway"
+ )
+ self.assertEqual(
+ str(vlan[0].netmask),
+ str(services["netmask"]),
+ "netmask in vlan ip range is not matched with the configured netmask"
+ )
+ return
+
+ def list_Routers(self):
+ """Check if any VR is already present in the setup
+ Will return True if yes else return False
+ """
+ list_zone = Zone.list(self.apiclient)
+ network_type = list_zone[0].networktype
+ sg_enabled = list_zone[0].securitygroupsenabled
+ if network_type == "Basic":
+ vr_list = Router.list(self.apiclient, listall='true')
+ self.debug("vr list {}".format(vr_list))
+ if isinstance(vr_list,list) and len(vr_list) > 0:
+ self.debug("VR is running in the setup")
+ return True
+ else:
+ self.debug("VR is not present in the setup")
+ return False
+ elif network_type == "Advanced" and sg_enabled == True:
+ nw_list = Network.list(
+ self.apiclient,
+ supportedservices='SecurityGroup',
+ )
+ nw_id = nw_list[0].id
+ vr_list = Router.list(
+ self.apiclient,
+ networkid = nw_id,
+ listall = 'true',
+ )
+ if isinstance(vr_list, list) and len(vr_list) > 0:
+ self.debug("VR is present in the setup")
+ return True
+ else :
+ self.debug("VR is not present in the setup")
+ return False
+ else :
+ self.debug("Network type is not shared")
+ return None
+
+ def test_01_deploy_vm_in_new_cidr(self):
+ """Deploy guest vm after adding guest IP range in new CIDR
+
+ 1.Add IP range in new CIDR
+ 2.Deploy guest vm
+ """
+ dc_id = self.dbclient.execute(
+ "select id from data_center where uuid = '%s';" % str(self.services["zoneid"])
+ )
+ dc_id = dc_id[0][0]
+ id_list = self.dbclient.execute(
+ "select id from user_ip_address where allocated is null and data_center_id = '%s';" % str(dc_id)
+ )
+ ip_list = []
+ for i in range(len(id_list)):
+ ip_list.append(id_list[i][0])
+ #Check if VR is already present in the setup
+ vr_state = self.list_Routers();
+ if vr_state is True :
+ for id in ip_list:
+ self.dbclient.execute(
+ "update user_ip_address set allocated=now() where id = '%s';" % str(id)
+ )
+ else :
+ ip_list = ip_list[:-2]
+ for id in ip_list:
+ self.dbclient.execute(
+ "update user_ip_address set allocated=now() where id = '%s';" % str(id)
+ )
+ #Add IP range in the new CIDR
+ test_gateway = self.services["cidr"]["gateway"]
+ test_startIp = self.services["cidr"]["startip"]
+ test_endIp = self.services["cidr"]["endip"]
+ test_netmask = self.services["cidr"]["netmask"]
+ #Populating services with new IP range
+ self.services["vlan_ip_range"]["startip"] = test_startIp
+ self.services["vlan_ip_range"]["endip"] = test_endIp
+ self.services["vlan_ip_range"]["gateway"] = test_gateway
+ self.services["vlan_ip_range"]["netmask"] = test_netmask
+ self.services["vlan_ip_range"]["zoneid"] = self.zone.id
+ self.services["vlan_ip_range"]["podid"] = self.pod.id
+ #create new vlan ip range
+ new_vlan = PublicIpRange.create(self.apiclient, self.services["vlan_ip_range"])
+ self.debug("Created new vlan range with startip:%s and endip:%s" %(test_startIp,test_endIp))
+ self.cleanup.append(new_vlan)
+ new_vlan_res = new_vlan.list(self.apiclient,id=new_vlan.vlan.id)
+ #Compare list output with configured values
+ self.verify_vlan_range(new_vlan_res,self.services["vlan_ip_range"])
+ #Deploy vm in existing subnet if VR is not present
+ if vr_state is False :
+ vm_res = VirtualMachine.create(
+ self.apiclient,
+ self.services["server_without_disk"],
+ templateid = self.template.id,
+ accountid = self.account.name,
+ domainid = self.services["domainid"],
+ zoneid = self.services["zoneid"],
+ serviceofferingid = self.service_offering.id,
+ mode = self.services["mode"],
+ )
+ self.cleanup.append(vm_res)
+ #Deploy guest vm
+ try :
+ self.virtual_machine = VirtualMachine.create(
+ self.apiclient,
+ self.services["server_without_disk"],
+ templateid = self.template.id,
+ accountid = self.account.name,
+ domainid = self.services["domainid"],
+ zoneid = self.services["zoneid"],
+ serviceofferingid = self.service_offering.id,
+ mode = self.services["mode"],
+ )
+ except Exception as e :
+ raise Exception("Warning: Exception during vm deployment: {}".format(e))
+ finally :
+ #Mark ip_Adddresses allocated state to Null which were marked as allocated at the beginning of the test
+ for id in ip_list :
+ self.dbclient.execute(
+ "update user_ip_address set allocated=default where id = '%s';" % str(id)
+ )
+ self.vm_response = VirtualMachine.list(
+ self.apiclient,
+ id = self.virtual_machine.id
+ )
+ self.assertEqual(
+ isinstance(self.vm_response, list),
+ True,
+ "Check VM list response returned a valid list"
+ )
+ self.ip_range = list(netaddr.iter_iprange(unicode(self.services["cidr"]["startip"]), unicode(self.services["cidr"]["endip"])))
+ self.nic_ip = netaddr.IPAddress(unicode(self.vm_response[0].nic[0].ipaddress))
+ self.debug("vm got {} as ip address".format(self.nic_ip))
+ self.assertIn(
+ self.nic_ip,
+ self.ip_range,
+ "VM did not get the ip address from the new ip range"
+ )
+ self.virtual_machine.delete(self.apiclient)
+ expunge_del = Configurations.list(
+ self.apiclient,
+ name = 'expunge.delay'
+ )
+ expunge_int = Configurations.list(
+ self.apiclient,
+ name = 'expunge.interval'
+ )
+ wait_time = int(expunge_del[0].value) + int(expunge_int[0].value) + int(30)
+
+ self.debug("Waiting for {} seconds for the vm to expunge".format(wait_time))
+ #wait for the vm to expunge
+ time.sleep(wait_time)
+ return
+