You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by wi...@apache.org on 2014/09/28 11:40:46 UTC
[46/50] [abbrv] git commit: updated
refs/heads/statscollector-graphite to 621156c
Test script to verify vm deployment with two networks in SG enabled advanced zone
Test data to deploy new data center and execute test using the deployed zone
Signed-off-by: sanjeev <sa...@apache.org>
Incorporated review comments provided in RR 25097
Fixed review comments mentioned in RR25293
Conflicts:
tools/marvin/marvin/config/test_data.py
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/9e5da759
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/9e5da759
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/9e5da759
Branch: refs/heads/statscollector-graphite
Commit: 9e5da759b315955cf5bc8d606f6929ac1603708f
Parents: e5efa70
Author: sanjeev <sa...@apache.org>
Authored: Wed Aug 13 16:11:11 2014 +0530
Committer: sanjeev <sa...@apache.org>
Committed: Fri Sep 26 16:08:58 2014 +0530
----------------------------------------------------------------------
.../component/test_advancedsg_networks.py | 197 ++++++++++++++++++-
tools/marvin/marvin/config/test_data.py | 41 +++-
2 files changed, 226 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9e5da759/test/integration/component/test_advancedsg_networks.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_advancedsg_networks.py b/test/integration/component/test_advancedsg_networks.py
index 85ab697..fddca9b 100644
--- a/test/integration/component/test_advancedsg_networks.py
+++ b/test/integration/component/test_advancedsg_networks.py
@@ -29,26 +29,35 @@ from marvin.lib.base import (Zone,
VpcOffering,
VPC,
SecurityGroup,
- Host)
+ Host,
+ )
from marvin.lib.common import (get_domain,
get_zone,
get_template,
get_free_vlan,
list_virtual_machines,
- wait_for_cleanup)
+ wait_for_cleanup,
+ )
from marvin.lib.utils import (cleanup_resources,
random_gen,
- validateList)
+ validateList,)
from marvin.cloudstackAPI import (authorizeSecurityGroupIngress,
revokeSecurityGroupIngress,
- deleteSecurityGroup)
+ deleteSecurityGroup,
+ listCapacity)
+from marvin import deployDataCenter
from nose.plugins.attrib import attr
-from marvin.codes import PASS
+from marvin.codes import PASS,FAIL,FAILED
+from netaddr import iter_iprange
import time
import sys
import random
+import json
+import os
+from platform import system
+
class TestCreateZoneSG(cloudstackTestCase):
@@ -1251,6 +1260,59 @@ class TestNetworksInAdvancedSG_VmOperations(cloudstackTestCase):
return
+ def dump_config_deploy_DC(self):
+ configLines = []
+ #Read zone and ip range information from config file
+ file = self.services["test_34_DeployVM_in_SecondSGNetwork"]["config"]
+ with open(file, 'r') as fp:
+ for line in fp:
+ ws = line.strip()
+ if not ws.startswith("#"):
+ configLines.append(ws)
+ config = json.loads("\n".join(configLines))
+ config['zones'][0]['name'] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["zone"]
+ config['zones'][0]['ipranges'][0]['startip'] = \
+ self.services["test_34_DeployVM_in_SecondSGNetwork"]["ipranges"][0]["startip"]
+ config['zones'][0]['ipranges'][0]['endip'] = \
+ self.services["test_34_DeployVM_in_SecondSGNetwork"]["ipranges"][0]["endip"]
+ config['zones'][0]['ipranges'][0]['vlan'] = \
+ self.services["test_34_DeployVM_in_SecondSGNetwork"]["ipranges"][0]["vlan"]
+ config['zones'][0]['ipranges'][0]['gateway'] = \
+ self.services["test_34_DeployVM_in_SecondSGNetwork"]["ipranges"][0]["gateway"]
+ config["dbSvr"]["dbSvr"] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["dbSvr"]["dbSvr"]
+ config["dbSvr"]["passwd"] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["dbSvr"]["passwd"]
+ config["dbSvr"]["db"] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["dbSvr"]["db"]
+ config["dbSvr"]["port"] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["dbSvr"]["port"]
+ config["dbSvr"]["user"] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["dbSvr"]["user"]
+ config['mgtSvr'][0]['mgtSvrIp'] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["mgtSvr"][0]["mgtSvrIp"]
+ config['mgtSvr'][0]["passwd"] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["mgtSvr"][0]["passwd"]
+ config['mgtSvr'][0]["user"] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["mgtSvr"][0]["user"]
+ config['mgtSvr'][0]["port"] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["mgtSvr"][0]["port"]
+ config['zones'][0]['pods'][0]['clusters'][0]['primaryStorages'][0]['url'] = \
+ "nfs://10.147.28.6:/export/home/sandbox/primary_"+str(random.randrange(0,1000,3))
+ config['zones'][0]['pods'][0]['clusters'][0]['primaryStorages'][0]['name'] = \
+ "PS_"+str(random.randrange(0,1000,3))
+ config['zones'][0]['secondaryStorages'][0]['url'] = \
+ "nfs://10.147.28.6:/export/home/sandbox/sstor_"+str(random.randrange(0,1000,3))
+ if system().lower() != 'windows':
+ config_file = "/tmp/advsg.cfg"
+ with open(config_file, 'w+') as fp:
+ fp.write(json.dump(config, indent=4))
+ cfg_file = file.split('/')[-1]
+ file2 = file.replace("/setup/dev/advanced/"+cfg_file, "")
+ file2 = file2+"/tools/marvin/marvin/deployDataCenter.py"
+ else :
+ config_file = "D:\\advsg.cfg"
+ with open(config_file, 'w+') as fp:
+ fp.write(json.dumps(config, indent=4))
+ cfg_file = file.split('\\')[-1]
+ file2 = file.replace("\setup\dev\\"+cfg_file, "")
+ file2 = file2+"\\tools\marvin\marvin\deployDataCenter.py"
+ #Run deployDataCenter with new config file stored in \tmp
+ self.debug("Executing deployAndRun")
+ status = os.system("%s -i %s" %(file2, config_file))
+ return status
+
@attr(tags = ["advancedsg"])
def test__16_AccountSpecificNwAccess(self):
""" Test account specific network access of users"""
@@ -2078,6 +2140,131 @@ class TestNetworksInAdvancedSG_VmOperations(cloudstackTestCase):
self.assertEqual(vm_list[0].hostid, hosts_to_migrate[0].id, "VM host id does not reflect the migration")
return
+ @attr(tags=["advancedsg"], required_hardware="false")
+ def test_34_DeployVM_in_SecondSGNetwork(self):
+ """
+ @Desc: VM Cannot deploy to second network in advanced SG network
+ @step1:Create shared SG network1
+ @step2: Consume all ip addresses in network1
+ @step3: Create shared SG network2
+ @step4: Deploy vm without specifying the network id
+ @step5: Verify that vm deployment should pick network2 and should not fail by picking network1
+ """
+ #Deploy data center with custom data
+ status = self.dump_config_deploy_DC()
+ if status == 1:
+ self.fail("Deploy DataCenter failed.")
+ zone_list = Zone.list(
+ self.api_client,
+ name=self.services["test_34_DeployVM_in_SecondSGNetwork"]["zone"]
+ )
+ status = validateList(zone_list)
+ self.assertEquals(status[0],PASS,"Failed to list the zones")
+ count = 0
+ """
+ In simulator environment default guest os template should be in ready state immediately after the ssvm is up.
+ In worst case test would wait for 100sec for the template to get ready else it would fail.
+ """
+ while (count < 10):
+ time.sleep(10)
+ template = get_template(
+ self.api_client,
+ zone_list[0].id
+ )
+ if template != FAILED and str(template.isready).lower() == 'true':
+ break
+ else:
+ count=count+1
+ if count == 10:
+ self.fail("Template is not in ready state even after 100sec. something wrong with the SSVM")
+ self.debug("Creating virtual machine in default shared network to consume all IPs")
+ vm_1 = VirtualMachine.create(
+ self.api_client,
+ self.services["virtual_machine"],
+ templateid=template.id,
+ zoneid=zone_list[0].id,
+ serviceofferingid=self.service_offering.id
+ )
+ self.assertIsNotNone(vm_1,"Failed to deploy vm in default shared network")
+ self.cleanup_vms.append(vm_1)
+ #verify that all the IPs are consumed in the default shared network
+ cmd = listCapacity.listCapacityCmd()
+ cmd.type=8
+ cmd.zoneid = zone_list[0].id
+ cmd.fetchlatest='true'
+ count = 0
+ """
+ Created zone with only 4 guest IP addresses so limiting the loop count to 4
+ """
+ while count < 5:
+ listCapacityRes = self.api_client.listCapacity(cmd)
+ self.assertEqual(validateList(listCapacityRes)[0],PASS,"listCapacity returned invalid list")
+ percentused = listCapacityRes[0].percentused
+ if percentused == '100':
+ break
+ self.debug("Creating virtual machine in default shared network to consume all IPs")
+ vm = VirtualMachine.create(
+ self.api_client,
+ self.services["virtual_machine"],
+ templateid=template.id,
+ zoneid=zone_list[0].id,
+ serviceofferingid=self.service_offering.id
+ )
+ self.assertIsNotNone(vm,"Failed to deploy vm in default shared network")
+ self.cleanup_vms.append(vm)
+ count = count+1
+ if count == 5:
+ self.fail("IPs are not getting consumed. Please check the setup")
+ #Create another SG enabled shared network after consuming all IPs
+ self.services["shared_network_sg"]["acltype"] = "domain"
+ self.services["shared_network_sg"]["networkofferingid"] = self.shared_network_offering_sg.id
+ physical_network, vlan = get_free_vlan(self.api_client, zone_list[0].id)
+ #create network using the shared network offering created
+ self.services["shared_network_sg"]["vlan"] = vlan
+ self.services["shared_network_sg"]["physicalnetworkid"] = physical_network.id
+ nwIPs = 3
+ self.setSharedNetworkParams("shared_network_sg", range=nwIPs)
+ self.debug("Creating shared sg network1 with vlan %s" % vlan)
+ shared_network = Network.create(
+ self.api_client,
+ self.services["shared_network_sg"],
+ networkofferingid=self.shared_network_offering_sg.id,
+ zoneid=zone_list[0].id
+ )
+ self.assertIsNotNone(shared_network,"shared SG network1 creation failed")
+ self.cleanup_networks.append(shared_network)
+ # Deploying 1 VM will exhaust the IP range because we are passing range as 2, and one of the IPs
+ # already gets consumed by the virtual router of the shared network
+ self.debug("Deploying vm2 without passing network id after consuming all IPs from default shared nw")
+ try:
+ vm_2 = VirtualMachine.create(
+ self.api_client,
+ self.services["virtual_machine"],
+ templateid=template.id,
+ zoneid=zone_list[0].id,
+ serviceofferingid=self.service_offering.id
+ )
+ vm2_res = VirtualMachine.list(
+ self.api_client,
+ id=vm_2.id
+ )
+ self.assertEqual(validateList(vm2_res)[0],PASS,"Failed to list vms in new network")
+ vm_ip = vm2_res[0].nic[0].ipaddress
+ ips_in_new_network = []
+ ip_gen = iter_iprange(
+ self.services["shared_network_sg"]["startip"],
+ self.services["shared_network_sg"]["endip"]
+ )
+ #construct ip list using start and end ips in the network
+ for i in range(0,nwIPs):
+ ips_in_new_network.append(str(ip_gen.next()))
+ if vm_ip not in ips_in_new_network:
+ self.fail("vm did not get the ip from new SG enabled shared network")
+ self.cleanup_vms.append(vm_2)
+ except Exception as e:
+ self.fail("Failed to deploy vm with two advanced sg networks %s" % e)
+ return
+
class TestSecurityGroups_BasicSanity(cloudstackTestCase):
@classmethod
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/9e5da759/tools/marvin/marvin/config/test_data.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/config/test_data.py b/tools/marvin/marvin/config/test_data.py
index a73f9bc..b13d8fe 100644
--- a/tools/marvin/marvin/config/test_data.py
+++ b/tools/marvin/marvin/config/test_data.py
@@ -940,7 +940,7 @@ test_data = {
"name": "hostantiaffinity",
"type": "host anti-affinity",
},
- "vgpu":{
+ "vgpu":{
"disk_offering":{
"displaytext": "Small",
"name": "Small",
@@ -1180,8 +1180,6 @@ test_data = {
"username": "testD12B",
"password": "password",
},
-
-
"domain2": {
"name": "D2",
},
@@ -1200,7 +1198,6 @@ test_data = {
"username": "testD2A",
"password": "password",
},
-
"accountROOTA": {
"email": "testROOTA@test.com",
"firstname": "testROOTA",
@@ -1346,8 +1343,7 @@ test_data = {
"username": "rmurphy",
"password": "internalcloudstackpassword",
},
- "ldapConfiguration_1":
- {
+ "ldapConfiguration_1": {
"basedn": "dc=cloudstack,dc=org",
"emailAttribute": "mail",
"userObject": "inetOrgPerson",
@@ -1356,5 +1352,36 @@ test_data = {
"port": "10389",
"ldapUsername": "rmurphy",
"ldapPassword": "password"
- }
+ },
+
+ "test_34_DeployVM_in_SecondSGNetwork": {
+ "zone": "advsg",
+ "config": "D:\ACS-Repo\setup\dev\\advancedsg.cfg",#Absolute path to cfg file
+ #For sample configuration please refer to <ACS repo>/setup/dev/advancedsg.cfg
+ "template": "CentOS 5.3(64-bit) no GUI (Simulator)",
+ "dbSvr": {
+ "dbSvr": "10.146.0.133",
+ "passwd": "cloud",
+ "db": "cloud",
+ "port": 3306,
+ "user": "cloud"
+ },
+ "mgtSvr": [
+ {
+ "mgtSvrIp": "10.146.0.133",
+ "passwd": "password",
+ "user": "root",
+ "port": 8096
+ }
+ ],
+ "ipranges": [
+ {
+ "startip": "10.147.32.150",
+ "endip": "10.147.32.153",
+ "netmask": "255.255.255.0",
+ "vlan": "32",
+ "gateway": "10.147.32.1"
+ }
+ ]
+ },
}