CLOUDSTACK-4283: remove hardcoded shared_vlan from test_shared_networks

SharedNetwork creation requires a pre-setup VLAN outside of the guest
VLANs defined during zone creation. Use a VLAN tag outside the guest
range as a shared network vlan to create shared networks.

Signed-off-by: Prasanna Santhanam <tsp@apache.org>
(cherry picked from commit 35867ccbd90c824b4faae438dac99400babeff95)
This commit is contained in:
Prasanna Santhanam 2013-08-13 15:29:56 +05:30
parent 791092ee0e
commit 61b787975c
2 changed files with 74 additions and 190 deletions

View File

@ -25,8 +25,6 @@ from marvin.cloudstackAPI import *
from marvin.integration.lib.utils import *
from marvin.integration.lib.base import *
from marvin.integration.lib.common import *
from marvin.remoteSSHClient import remoteSSHClient
import datetime
import netaddr
class Services:
@ -48,7 +46,7 @@ class Services:
"username": "admin-XABU1",
# Random characters are appended for unique
# username
"password": "fr3sca",
"password": "password",
},
"service_offering": {
"name": "Tiny Instance",
@ -74,8 +72,6 @@ class Services:
"network": {
"name": "MySharedNetwork - Test",
"displaytext": "MySharedNetwork",
"networkofferingid":"1",
"vlan" :1200,
"gateway" :"172.16.15.1",
"netmask" :"255.255.255.0",
"startip" :"172.16.15.2",
@ -86,7 +82,6 @@ class Services:
"network1": {
"name": "MySharedNetwork - Test1",
"displaytext": "MySharedNetwork1",
"vlan" :1201,
"gateway" :"172.16.15.1",
"netmask" :"255.255.255.0",
"startip" :"172.16.15.21",
@ -237,6 +232,33 @@ class TestSharedNetworks(cloudstackTestCase):
return
def getFreeVlan(self, apiclient, zoneid):
"""
Find an unallocated VLAN outside the range allocated to the physical network.
@note: This does not guarantee that the VLAN is available for use in
the deployment's network gear
@return: physical_network, shared_vlan_tag
"""
list_physical_networks_response = PhysicalNetwork.list(
apiclient,
zoneid=zoneid
)
assert isinstance(list_physical_networks_response, list)
assert len(list_physical_networks_response) > 0, "No physical networks found in zone %s" % zoneid
physical_network = list_physical_networks_response[0]
vlans = xsplit(physical_network.vlan, ['-', ','])
assert len(vlans) > 0
assert int(vlans[0]) < int(vlans[-1]), "VLAN range %s was improperly split" % physical_network.vlan
shared_ntwk_vlan = int(vlans[-1]) + random.randrange(1, 20)
if shared_ntwk_vlan > 4095:
shared_ntwk_vlan = int(vlans[0]) - random.randrange(1, 20)
assert shared_ntwk_vlan > 0, "VLAN chosen %s is invalid < 0" % shared_ntwk_vlan
self.debug("Attempting free VLAN %s for shared network creation" % shared_ntwk_vlan)
return physical_network, shared_ntwk_vlan
@attr(tags=["advanced", "advancedns"])
def test_sharedNetworkOffering_01(self):
""" Test shared network Offering 01 """
@ -308,7 +330,7 @@ class TestSharedNetworks(cloudstackTestCase):
0,
"listPhysicalNetworks should return at least one physical network."
)
physical_network = list_physical_networks_response[0]
self.debug("Physical network found: %s" % physical_network.id)
@ -652,28 +674,13 @@ class TestSharedNetworks(cloudstackTestCase):
self.debug("User type account created: %s" % self.user_account.name)
#Verify that there should be at least one physical network present in zone.
list_physical_networks_response = PhysicalNetwork.list(
self.api_client,
zoneid=self.zone.id
)
self.assertEqual(
isinstance(list_physical_networks_response, list),
True,
"listPhysicalNetworks returned invalid object in response."
)
self.assertNotEqual(
len(list_physical_networks_response),
0,
"listPhysicalNetworks should return at least one physical network."
)
physical_network = list_physical_networks_response[0]
physical_network, shared_vlan = self.getFreeVlan(self.api_client, self.zone.id)
self.debug("Physical network found: %s" % physical_network.id)
self.services["network_offering"]["specifyVlan"] = "True"
self.services["network_offering"]["specifyIpRanges"] = "True"
#Create Network Offering
self.shared_network_offering = NetworkOffering.create(
@ -740,6 +747,7 @@ class TestSharedNetworks(cloudstackTestCase):
self.services["network"]["acltype"] = "Domain"
self.services["network"]["networkofferingid"] = self.shared_network_offering.id
self.services["network"]["physicalnetworkid"] = physical_network.id
self.services["network"]["vlan"] = shared_vlan
self.network = Network.create(
self.api_client,
@ -935,29 +943,13 @@ class TestSharedNetworks(cloudstackTestCase):
self.debug("User type account created: %s" % self.user_account.name)
#Verify that there should be at least one physical network present in zone.
list_physical_networks_response = PhysicalNetwork.list(
self.api_client,
zoneid=self.zone.id
)
self.assertEqual(
isinstance(list_physical_networks_response, list),
True,
"listPhysicalNetworks returned invalid object in response."
)
self.assertNotEqual(
len(list_physical_networks_response),
0,
"listPhysicalNetworks should return at least one physical network."
)
physical_network = list_physical_networks_response[0]
physical_network, shared_vlan = self.getFreeVlan(self.api_client, self.zone.id)
self.debug("Physical Network found: %s" % physical_network.id)
self.services["network_offering"]["specifyVlan"] = "True"
self.services["network_offering"]["specifyIpRanges"] = "True"
#Create Network Offering
self.shared_network_offering = NetworkOffering.create(
self.api_client,
@ -983,7 +975,7 @@ class TestSharedNetworks(cloudstackTestCase):
self.assertEqual(
list_network_offerings_response[0].state,
"Disabled",
"The network offering created should be bydefault disabled."
"The network offering created should be by default disabled."
)
self.debug("Shared Network Offering created: %s" % self.shared_network_offering.id)
@ -1020,6 +1012,7 @@ class TestSharedNetworks(cloudstackTestCase):
self.services["network"]["acltype"] = "Account"
self.services["network"]["networkofferingid"] = self.shared_network_offering.id
self.services["network"]["physicalnetworkid"] = physical_network.id
self.services["network"]["vlan"] = shared_vlan
self.network = Network.create(
self.api_client,
@ -1259,29 +1252,13 @@ class TestSharedNetworks(cloudstackTestCase):
self.debug("Domain user account created: %s" % self.domain_user_account.id)
#Verify that there should be at least one physical network present in zone.
list_physical_networks_response = PhysicalNetwork.list(
self.api_client,
zoneid=self.zone.id
)
self.assertEqual(
isinstance(list_physical_networks_response, list),
True,
"listPhysicalNetworks returned invalid object in response."
)
self.assertNotEqual(
len(list_physical_networks_response),
0,
"listPhysicalNetworks should return at least one physical network."
)
physical_network = list_physical_networks_response[0]
physical_network, shared_vlan = self.getFreeVlan(self.api_client, self.zone.id)
self.debug("Physical Network found: %s" % physical_network.id)
self.services["network_offering"]["specifyVlan"] = "True"
self.services["network_offering"]["specifyIpRanges"] = "True"
#Create Network Offering
self.shared_network_offering = NetworkOffering.create(
self.api_client,
@ -1346,6 +1323,7 @@ class TestSharedNetworks(cloudstackTestCase):
self.services["network"]["acltype"] = "domain"
self.services["network"]["networkofferingid"] = self.shared_network_offering.id
self.services["network"]["physicalnetworkid"] = physical_network.id
self.services["network"]["vlan"] = shared_vlan
self.network = Network.create(
self.api_client,
@ -1581,28 +1559,13 @@ class TestSharedNetworks(cloudstackTestCase):
self.debug("Project2 created: %s" % self.project2.id)
#Verify that there should be at least one physical network present in zone.
list_physical_networks_response = PhysicalNetwork.list(
self.api_client,
zoneid=self.zone.id
)
self.assertEqual(
isinstance(list_physical_networks_response, list),
True,
"listPhysicalNetworks returned invalid object in response."
)
self.assertNotEqual(
len(list_physical_networks_response),
0,
"listPhysicalNetworks should return at least one physical network."
)
physical_network = list_physical_networks_response[0]
physical_network, shared_vlan = self.getFreeVlan(self.api_client, self.zone.id)
self.debug("Physical Network found: %s" % physical_network.id)
self.services["network_offering"]["specifyVlan"] = "True"
self.services["network_offering"]["specifyIpRanges"] = "True"
#Create Network Offering
self.shared_network_offering = NetworkOffering.create(
@ -1630,7 +1593,7 @@ class TestSharedNetworks(cloudstackTestCase):
self.assertEqual(
list_network_offerings_response[0].state,
"Disabled",
"The network offering created should be bydefault disabled."
"The network offering created should be by default disabled."
)
#Update network offering state from disabled to enabled.
@ -1668,6 +1631,7 @@ class TestSharedNetworks(cloudstackTestCase):
self.services["network"]["acltype"] = "account"
self.services["network"]["networkofferingid"] = self.shared_network_offering.id
self.services["network"]["physicalnetworkid"] = physical_network.id
self.services["network"]["vlan"] = shared_vlan
self.network = Network.create(
self.api_client,
@ -1804,25 +1768,7 @@ class TestSharedNetworks(cloudstackTestCase):
self.debug("Domain admin account created: %s" % self.admin_account.id)
#Verify that there should be at least one physical network present in zone.
list_physical_networks_response = PhysicalNetwork.list(
self.api_client,
zoneid=self.zone.id
)
self.assertEqual(
isinstance(list_physical_networks_response, list),
True,
"listPhysicalNetworks returned invalid object in response."
)
self.assertNotEqual(
len(list_physical_networks_response),
0,
"listPhysicalNetworks should return at least one physical network."
)
physical_network = list_physical_networks_response[0]
self.debug("Physical Network found: %s" % physical_network.id)
physical_network, shared_vlan = self.getFreeVlan(self.api_client, self.zone.id)
self.services["network_offering"]["specifyVlan"] = "True"
self.services["network_offering"]["specifyIpRanges"] = "True"
@ -1892,6 +1838,7 @@ class TestSharedNetworks(cloudstackTestCase):
self.services["network"]["acltype"] = "domain"
self.services["network"]["networkofferingid"] = self.shared_network_offering.id
self.services["network"]["physicalnetworkid"] = physical_network.id
self.services["network"]["vlan"] = shared_vlan
try:
self.network = Network.create(
@ -1900,10 +1847,12 @@ class TestSharedNetworks(cloudstackTestCase):
networkofferingid=self.shared_network_offering.id,
zoneid=self.zone.id,
)
self.fail("Network created with used vlan id, which is invalid")
self.fail("Network created with used vlan %s id, which is invalid" % shared_vlan)
except Exception as e:
self.debug("Network creation failed because the valn id being used by another network.")
@attr(tags=["advanced", "advancedns"])
def test_createSharedNetwork_usedVlan2(self):
""" Test Shared Network with used vlan 02 """
@ -1962,28 +1911,8 @@ class TestSharedNetworks(cloudstackTestCase):
)
self.debug("Admin account created: %s" % self.admin_account.id)
#Verify that there should be at least one physical network present in zone.
list_physical_networks_response = PhysicalNetwork.list(
self.api_client,
zoneid=self.zone.id
)
self.assertEqual(
isinstance(list_physical_networks_response, list),
True,
"listPhysicalNetworks returned invalid object in response."
)
self.assertNotEqual(
len(list_physical_networks_response),
0,
"listPhysicalNetworks should return at least one physical network."
)
physical_network = list_physical_networks_response[0]
start_vlan, end_vlan = physical_network.vlan.split('-')
self.assert_(int(start_vlan) < int(end_vlan), "VLAN range %s was improperly split" % physical_network.vlan)
shared_ntwk_vlan = int(end_vlan) + 1
self.assert_(shared_ntwk_vlan < 4095, "VLAN chosen %s is invalid > 4095" % shared_ntwk_vlan)
physical_network, shared_ntwk_vlan = self.getFreeVlan(self.api_client, self.zone.id)
self.debug("Physical Network found: %s" % physical_network.id)
@ -2152,23 +2081,7 @@ class TestSharedNetworks(cloudstackTestCase):
self.debug("Admin account created: %s" % self.admin_account.id)
#Verify that there should be at least one physical network present in zone.
list_physical_networks_response = PhysicalNetwork.list(
self.api_client,
zoneid=self.zone.id
)
self.assertEqual(
isinstance(list_physical_networks_response, list),
True,
"listPhysicalNetworks returned invalid object in response."
)
self.assertNotEqual(
len(list_physical_networks_response),
0,
"listPhysicalNetworks should return at least one physical network."
)
physical_network = list_physical_networks_response[0]
physical_network, shared_vlan = self.getFreeVlan(self.api_client, self.zone.id)
self.debug("Physical Network found: %s" % physical_network.id)
@ -2239,6 +2152,7 @@ class TestSharedNetworks(cloudstackTestCase):
self.services["network"]["acltype"] = "domain"
self.services["network"]["networkofferingid"] = self.shared_network_offering.id
self.services["network"]["physicalnetworkid"] = physical_network.id
self.services["network"]["vlan"] = shared_vlan
self.network = Network.create(
self.api_client,
@ -2274,6 +2188,7 @@ class TestSharedNetworks(cloudstackTestCase):
self.services["network1"]["acltype"] = "domain"
self.services["network1"]["networkofferingid"] = self.shared_network_offering.id
self.services["network1"]["physicalnetworkid"] = physical_network.id
self.services["network1"]["vlan"] = self.getFreeVlan(self.api_client, self.zone.id)
self.network1 = Network.create(
self.api_client,
@ -2514,28 +2429,14 @@ class TestSharedNetworks(cloudstackTestCase):
)
self.debug("Isolated Network Offering created: %s" % self.isolated_network_offering.id)
#Verify that there should be at least one physical network present in zone.
list_physical_networks_response = PhysicalNetwork.list(
self.api_client,
zoneid=self.zone.id
)
self.assertEqual(
isinstance(list_physical_networks_response, list),
True,
"listPhysicalNetworks returned invalid object in response."
)
self.assertNotEqual(
len(list_physical_networks_response),
0,
"listPhysicalNetworks should return at least one physical network."
)
physical_network = list_physical_networks_response[0]
physical_network, shared_vlan = self.getFreeVlan(self.api_client, self.zone.id)
#create network using the shared network offering created
self.services["network"]["acltype"] = "domain"
self.services["network"]["networkofferingid"] = self.shared_network_offering.id
self.services["network"]["physicalnetworkid"] = physical_network.id
self.services["network"]["vlan"] = shared_vlan
self.shared_network = Network.create(
self.api_client,
self.services["network"],
@ -2754,23 +2655,7 @@ class TestSharedNetworks(cloudstackTestCase):
self.debug("Admin type account created: %s" % self.admin_account.id)
#Verify that there should be at least one physical network present in zone.
list_physical_networks_response = PhysicalNetwork.list(
self.api_client,
zoneid=self.zone.id
)
self.assertEqual(
isinstance(list_physical_networks_response, list),
True,
"listPhysicalNetworks returned invalid object in response."
)
self.assertNotEqual(
len(list_physical_networks_response),
0,
"listPhysicalNetworks should return at least one physical network."
)
physical_network = list_physical_networks_response[0]
physical_network, shared_vlan = self.getFreeVlan(self.api_client, self.zone.id)
self.debug("Physical Network found: %s" % physical_network.id)
@ -2840,6 +2725,7 @@ class TestSharedNetworks(cloudstackTestCase):
self.services["network"]["acltype"] = "Account"
self.services["network"]["networkofferingid"] = self.shared_network_offering.id
self.services["network"]["physicalnetworkid"] = physical_network.id
self.services["network"]["vlan"] = shared_vlan
self.services["network"]["subdomainaccess"] = "True"
try:
@ -2898,23 +2784,7 @@ class TestSharedNetworks(cloudstackTestCase):
self.debug("Admin type account created: %s" % self.admin_account.id)
#Verify that there should be at least one physical network present in zone.
list_physical_networks_response = PhysicalNetwork.list(
self.api_client,
zoneid=self.zone.id
)
self.assertEqual(
isinstance(list_physical_networks_response, list),
True,
"listPhysicalNetworks returned invalid object in response."
)
self.assertNotEqual(
len(list_physical_networks_response),
0,
"listPhysicalNetworks should return at least one physical network."
)
physical_network = list_physical_networks_response[0]
physical_network, shared_vlan = self.getFreeVlan(self.api_client, self.zone.id)
self.debug("Physical Network found: %s" % physical_network.id)
@ -2983,6 +2853,7 @@ class TestSharedNetworks(cloudstackTestCase):
self.services["network"]["acltype"] = "Account"
self.services["network"]["networkofferingid"] = self.shared_network_offering.id
self.services["network"]["physicalnetworkid"] = physical_network.id
self.services["network"]["vlan"] = shared_vlan
self.services["network"]["subdomainaccess"] = "False"
try:

View File

@ -195,3 +195,16 @@ def isAlmostEqual(first_digit, second_digit, range=0):
except Exception as e:
raise e
return digits_equal_within_range
def xsplit(txt, seps):
"""
Split a string in `txt` by list of delimiters in `seps`
@param txt: string to split
@param seps: list of separators
@return: list of split units
"""
default_sep = seps[0]
for sep in seps[1:]: # we skip seps[0] because that's the default separator
txt = txt.replace(sep, default_sep)
return [i.strip() for i in txt.split(default_sep)]