mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
3752 lines
133 KiB
Python
3752 lines
133 KiB
Python
# 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.
|
|
|
|
""" P1 tests for shared networks
|
|
"""
|
|
from nose.plugins.attrib import attr
|
|
from marvin.cloudstackTestCase import cloudstackTestCase, unittest
|
|
from marvin.cloudstackAPI import rebootRouter, stopRouter, startRouter
|
|
from marvin.lib.base import (Account,
|
|
Network,
|
|
NetworkOffering,
|
|
VirtualMachine,
|
|
Project,
|
|
PhysicalNetwork,
|
|
Domain,
|
|
StaticNATRule,
|
|
FireWallRule,
|
|
ServiceOffering,
|
|
PublicIPAddress,
|
|
Router,
|
|
NATRule)
|
|
from marvin.lib.utils import (cleanup_resources,
|
|
validateList)
|
|
from marvin.lib.common import (get_domain,
|
|
get_zone,
|
|
get_template,
|
|
get_free_vlan,
|
|
wait_for_cleanup,
|
|
verifyRouterState,
|
|
verifyGuestTrafficPortGroups)
|
|
from marvin.sshClient import SshClient
|
|
from marvin.codes import PASS
|
|
from ddt import ddt, data
|
|
import time
|
|
import random
|
|
import netaddr
|
|
|
|
|
|
@ddt
|
|
class TestSharedNetworks(cloudstackTestCase):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
cls.testClient = super(TestSharedNetworks, cls).getClsTestClient()
|
|
cls.api_client = cls.testClient.getApiClient()
|
|
|
|
cls.testdata = cls.testClient.getParsedTestDataConfig()
|
|
# Get Zone, Domain and templates
|
|
cls.domain = get_domain(cls.api_client)
|
|
cls.zone = get_zone(cls.api_client, cls.testClient.getZoneForTests())
|
|
cls.hypervisor = cls.testClient.getHypervisorInfo()
|
|
cls.template = get_template(
|
|
cls.api_client,
|
|
cls.zone.id,
|
|
cls.testdata["ostype"]
|
|
)
|
|
|
|
cls.testdata["virtual_machine"]["zoneid"] = cls.zone.id
|
|
cls.testdata["virtual_machine"]["template"] = cls.template.id
|
|
|
|
cls.service_offering = ServiceOffering.create(
|
|
cls.api_client,
|
|
cls.testdata["service_offering"]
|
|
)
|
|
|
|
cls.testdata["shared_network_offering"]["specifyVlan"] = "True"
|
|
cls.testdata["shared_network_offering"]["specifyIpRanges"] = "True"
|
|
|
|
cls.shared_network_offering = NetworkOffering.create(
|
|
cls.api_client,
|
|
cls.testdata["shared_network_offering"],
|
|
conservemode=False
|
|
)
|
|
|
|
NetworkOffering.update(
|
|
cls.shared_network_offering,
|
|
cls.api_client,
|
|
id=cls.shared_network_offering.id,
|
|
state="enabled"
|
|
)
|
|
|
|
cls.testdata["shared_network_offering_all_services"]["specifyVlan"] = "True"
|
|
cls.testdata["shared_network_offering_all_services"]["specifyIpRanges"] = "True"
|
|
|
|
cls.shared_network_offering_all_services = NetworkOffering.create(
|
|
cls.api_client,
|
|
cls.testdata["shared_network_offering_all_services"],
|
|
conservemode=False
|
|
)
|
|
|
|
NetworkOffering.update(
|
|
cls.shared_network_offering_all_services,
|
|
cls.api_client,
|
|
id=cls.shared_network_offering_all_services.id,
|
|
state="enabled"
|
|
)
|
|
|
|
cls._cleanup = [
|
|
cls.service_offering
|
|
]
|
|
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.api_client = self.testClient.getApiClient()
|
|
self.dbclient = self.testClient.getDbConnection()
|
|
|
|
# Set the subnet number of shared networks randomly prior to execution
|
|
# of each test case to avoid overlapping of ip addresses
|
|
shared_network_subnet_number = random.randrange(1, 254)
|
|
|
|
self.testdata["shared_network"]["netmask"] = "255.255.255.0"
|
|
self.testdata["shared_network"]["gateway"] = "172.16." + \
|
|
str(shared_network_subnet_number) + ".1"
|
|
self.testdata["shared_network"]["startip"] = "172.16." + \
|
|
str(shared_network_subnet_number) + ".2"
|
|
self.testdata["shared_network"]["endip"] = "172.16." + \
|
|
str(shared_network_subnet_number) + ".20"
|
|
|
|
self.cleanup = []
|
|
self.cleanup_networks = []
|
|
self.cleanup_accounts = []
|
|
self.cleanup_domains = []
|
|
self.cleanup_projects = []
|
|
self.cleanup_vms = []
|
|
return
|
|
|
|
def tearDown(self):
|
|
try:
|
|
# Clean up, terminate the created network offerings
|
|
cleanup_resources(self.api_client, self.cleanup)
|
|
except Exception as e:
|
|
raise Exception("Warning: Exception during cleanup : %s" % e)
|
|
|
|
# below components is not a part of cleanup because to mandate the
|
|
# order and to cleanup network
|
|
try:
|
|
for vm in self.cleanup_vms:
|
|
vm.delete(self.api_client)
|
|
except Exception as e:
|
|
raise Exception(
|
|
"Warning: Exception during virtual machines cleanup : %s" %
|
|
e)
|
|
|
|
try:
|
|
for project in self.cleanup_projects:
|
|
project.delete(self.api_client)
|
|
except Exception as e:
|
|
raise Exception(
|
|
"Warning: Exception during project cleanup : %s" %
|
|
e)
|
|
|
|
try:
|
|
for account in self.cleanup_accounts:
|
|
account.delete(self.api_client)
|
|
except Exception as e:
|
|
raise Exception(
|
|
"Warning: Exception during account cleanup : %s" %
|
|
e)
|
|
|
|
# Wait till all resources created are cleaned up completely and then
|
|
# attempt to delete domains
|
|
wait_for_cleanup(self.api_client, ["account.cleanup.interval"])
|
|
|
|
try:
|
|
for network in self.cleanup_networks:
|
|
network.delete(self.api_client)
|
|
except Exception:
|
|
self.debug("Network %s failed to delete. Moving on" % network.id)
|
|
pass # because domain/account deletion will get rid of the network
|
|
|
|
try:
|
|
for domain in self.cleanup_domains:
|
|
domain.delete(self.api_client)
|
|
except Exception as e:
|
|
raise Exception(
|
|
"Warning: Exception during domain cleanup : %s" %
|
|
e)
|
|
|
|
return
|
|
|
|
def verifyRouterResponse(self, router_response, ip):
|
|
if (router_response) and (isinstance(router_response, list)) and \
|
|
(router_response[0].state == "Running") and \
|
|
(router_response[0].publicip == ip):
|
|
return True
|
|
return False
|
|
|
|
@attr(tags=["advanced", "advancedns"], required_hardware="false")
|
|
def test_sharedNetworkOffering_01(self):
|
|
""" Test shared network Offering 01 """
|
|
|
|
# Steps,
|
|
# 1. create an Admin Account - admin-XABU1
|
|
# 2. listPhysicalNetworks in available zone
|
|
# 3. createNetworkOffering:
|
|
# - name = "MySharedOffering"
|
|
# - guestiptype="shared"
|
|
# - services = {Dns, Dhcp, UserData}
|
|
# - conservemode = false
|
|
# - specifyVlan = true
|
|
# - specifyIpRanges = true
|
|
# 4. Enable network offering - updateNetworkOffering - state=Enabled
|
|
# 5. delete the admin account
|
|
# Validations,
|
|
# 1. listAccounts name=admin-XABU1, state=enabled returns your account
|
|
# 2. listPhysicalNetworks should return at least one active physical
|
|
# network
|
|
# 3. listNetworkOfferings - name=mysharedoffering , should list
|
|
# offering in disabled state
|
|
# 4. listNetworkOfferings - name=mysharedoffering, should list
|
|
# enabled offering
|
|
|
|
# Create an account
|
|
self.account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=True,
|
|
domainid=self.domain.id
|
|
)
|
|
|
|
self.cleanup_accounts.append(self.account)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.account.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_accounts_response, list),
|
|
True,
|
|
"listAccounts returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_accounts_response),
|
|
0,
|
|
"listAccounts returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The admin account created is not enabled."
|
|
)
|
|
|
|
self.debug("Admin Type account created: %s" % self.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]
|
|
|
|
self.debug("Physical network found: %s" % physical_network.id)
|
|
|
|
self.testdata["shared_network_offering"]["specifyVlan"] = "True"
|
|
self.testdata["shared_network_offering"]["specifyIpRanges"] = "True"
|
|
|
|
# Create Network Offering
|
|
self.shared_network_offering = NetworkOffering.create(
|
|
self.api_client,
|
|
self.testdata["shared_network_offering"],
|
|
conservemode=False
|
|
)
|
|
|
|
# Verify that the network offering got created
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Disabled",
|
|
"The network offering created should be bydefault disabled."
|
|
)
|
|
|
|
# Update network offering state from disabled to enabled.
|
|
NetworkOffering.update(
|
|
self.shared_network_offering,
|
|
self.api_client,
|
|
id=self.shared_network_offering.id,
|
|
state="enabled"
|
|
)
|
|
# Verify that the state of the network offering is updated
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Enabled",
|
|
"The network offering state should get updated to Enabled."
|
|
)
|
|
self.debug(
|
|
"NetworkOffering created and enabled: %s" %
|
|
self.shared_network_offering.id)
|
|
|
|
@attr(tags=["advanced", "advancedns"], required_hardware="false")
|
|
def test_sharedNetworkOffering_02(self):
|
|
""" Test Shared Network Offering 02 """
|
|
|
|
# Steps,
|
|
# 1. create an Admin Account - admin-XABU1
|
|
# 2. listPhysicalNetworks in available zone
|
|
# 3. createNetworkOffering:
|
|
# - name = "MySharedOffering"
|
|
# - guestiptype="shared"
|
|
# - services = {Dns, Dhcp, UserData}
|
|
# - conservemode = false
|
|
# - specifyVlan = false
|
|
# - specifyIpRanges = false
|
|
# 4. delete the admin account
|
|
# Validations,
|
|
# 1. listAccounts name=admin-XABU1, state=enabled returns your account
|
|
# 2. listPhysicalNetworks should return at least one active physical
|
|
# network
|
|
# 3. createNetworkOffering fails - vlan should be specified in
|
|
# advanced zone
|
|
|
|
# Create an account
|
|
self.account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=True,
|
|
domainid=self.domain.id
|
|
)
|
|
|
|
self.cleanup_accounts.append(self.account)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.account.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_accounts_response, list),
|
|
True,
|
|
"listAccounts returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_accounts_response),
|
|
0,
|
|
"listAccounts returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The admin account created is not enabled."
|
|
)
|
|
|
|
self.debug("Admin type account created: %s" % self.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]
|
|
|
|
self.debug("Physical network found: %s" % physical_network.id)
|
|
|
|
self.testdata["shared_network_offering"]["specifyVlan"] = "False"
|
|
self.testdata["shared_network_offering"]["specifyIpRanges"] = "False"
|
|
|
|
try:
|
|
# Create Network Offering
|
|
self.shared_network_offering = NetworkOffering.create(
|
|
self.api_client,
|
|
self.testdata["shared_network_offering"],
|
|
conservemode=False
|
|
)
|
|
self.fail(
|
|
"Network offering got created with vlan as False in advance\
|
|
mode and shared guest type, which is invalid case.")
|
|
except Exception as e:
|
|
self.debug(
|
|
"Network Offering creation failed with vlan as False\
|
|
in advance mode and shared guest type. Exception: %s" %
|
|
e)
|
|
|
|
@attr(tags=["advanced", "advancedns"], required_hardware="false")
|
|
def test_sharedNetworkOffering_03(self):
|
|
""" Test Shared Network Offering 03 """
|
|
|
|
# Steps,
|
|
# 1. create an Admin Account - admin-XABU1
|
|
# 2. listPhysicalNetworks in available zone
|
|
# 3. createNetworkOffering:
|
|
# - name = "MySharedOffering"
|
|
# - guestiptype="shared"
|
|
# - services = {Dns, Dhcp, UserData}
|
|
# - conservemode = false
|
|
# - specifyVlan = true
|
|
# - specifyIpRanges = false
|
|
# 4. delete the admin account
|
|
# Validations,
|
|
# 1. listAccounts name=admin-XABU1, state=enabled returns your account
|
|
# 2. listPhysicalNetworks should return at least one active physical
|
|
# network
|
|
# 3. createNetworkOffering fails - ip ranges should be specified when
|
|
# creating shared network offering
|
|
|
|
# Create an account
|
|
self.account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=True,
|
|
domainid=self.domain.id
|
|
)
|
|
|
|
self.cleanup_accounts.append(self.account)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.account.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_accounts_response, list),
|
|
True,
|
|
"listAccounts returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_accounts_response),
|
|
0,
|
|
"listAccounts returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The admin account created is not enabled."
|
|
)
|
|
|
|
self.debug("Admin Type account created: %s" % self.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]
|
|
|
|
self.debug("Physical Network found: %s" % physical_network.id)
|
|
|
|
self.testdata["shared_network_offering"]["specifyVlan"] = "True"
|
|
self.testdata["shared_network_offering"]["specifyIpRanges"] = "False"
|
|
|
|
try:
|
|
# Create Network Offering
|
|
self.shared_network_offering = NetworkOffering.create(
|
|
self.api_client,
|
|
self.testdata["shared_network_offering"],
|
|
conservemode=False
|
|
)
|
|
self.fail(
|
|
"Network offering got created with vlan as True and ip ranges\
|
|
as False in advance mode and with shared guest type,\
|
|
which is invalid case.")
|
|
except Exception as e:
|
|
self.debug(
|
|
"Network Offering creation failed with vlan as true and ip\
|
|
ranges as False in advance mode and with shared guest type.\
|
|
Exception : %s" % e)
|
|
|
|
@attr(tags=["advanced", "advancedns"], required_hardware="false")
|
|
def test_createSharedNetwork_All(self):
|
|
""" Test Shared Network ALL """
|
|
|
|
# Steps,
|
|
# 1. create an Admin Account - admin-XABU1
|
|
# 2. listPhysicalNetworks in available zone
|
|
# 3. createNetworkOffering:
|
|
# - name = "MySharedOffering"
|
|
# - guestiptype="shared"
|
|
# - services = {Dns, Dhcp, UserData}
|
|
# - conservemode = false
|
|
# - specifyVlan = true
|
|
# - specifyIpRanges = true
|
|
# 4. Create network offering - updateNetworkOffering - state=Enabled
|
|
# 5. createNetwork
|
|
# - name = mysharednetwork, displaytext = mysharednetwork
|
|
# - vlan = 123 (say)
|
|
# - networkofferingid = <mysharedoffering>
|
|
# - gw = 172.16.15.1, startip = 172.16.15.2 , endip = 172.16.15.200
|
|
# - netmask=255.255.255.0
|
|
# - scope = all
|
|
# 6. create User account - user-ASJDK
|
|
# 7. deployVirtualMachine in this account and in admin account &
|
|
# within networkid = <mysharednetwork>
|
|
# 8. delete the admin account and the user account
|
|
# Validations,
|
|
# 1. listAccounts name=admin-XABU1, state=enabled returns account
|
|
# 2. listPhysicalNetworks should return at least one active
|
|
# physical network
|
|
# 3. listNetworkOfferings - name=mysharedoffering , should list
|
|
# offering in disabled state
|
|
# 4. listNetworkOfferings - name=mysharedoffering, should list
|
|
# enabled offering
|
|
# 5. listNetworks - name = mysharednetwork should list the
|
|
# successfully created network, verify the guestIp ranges and
|
|
# CIDR are as given in the createNetwork call
|
|
# 6. No checks reqd
|
|
# 7. a. listVirtualMachines should show both VMs in running state
|
|
# in the user account and the admin account
|
|
# b. VM's IPs shoud be in the range of the shared network ip ranges
|
|
|
|
# Create admin account
|
|
self.admin_account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=True,
|
|
domainid=self.domain.id
|
|
)
|
|
|
|
self.cleanup_accounts.append(self.admin_account)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.admin_account.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_accounts_response, list),
|
|
True,
|
|
"listAccounts returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_accounts_response),
|
|
0,
|
|
"listAccounts returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The admin account created is not enabled."
|
|
)
|
|
|
|
self.debug("Admin type account created: %s" % self.admin_account.name)
|
|
|
|
# Create an user account
|
|
self.user_account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=False,
|
|
domainid=self.domain.id
|
|
)
|
|
|
|
self.cleanup_accounts.append(self.user_account)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.user_account.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_accounts_response, list),
|
|
True,
|
|
"listAccounts returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_accounts_response),
|
|
0,
|
|
"listAccounts returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The user account created is not enabled."
|
|
)
|
|
|
|
self.debug("User type account created: %s" % self.user_account.name)
|
|
|
|
physical_network, shared_vlan = get_free_vlan(
|
|
self.api_client, self.zone.id)
|
|
if shared_vlan is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
|
|
self.debug("Physical network found: %s" % physical_network.id)
|
|
|
|
self.testdata["shared_network_offering"]["specifyVlan"] = "True"
|
|
self.testdata["shared_network_offering"]["specifyIpRanges"] = "True"
|
|
|
|
# Create Network Offering
|
|
self.shared_network_offering = NetworkOffering.create(
|
|
self.api_client,
|
|
self.testdata["shared_network_offering"],
|
|
conservemode=False
|
|
)
|
|
|
|
# Verify that the network offering got created
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Disabled",
|
|
"The network offering created should be bydefault disabled."
|
|
)
|
|
|
|
self.debug(
|
|
"Shared Network offering created: %s" %
|
|
self.shared_network_offering.id)
|
|
|
|
# Update network offering state from disabled to enabled.
|
|
NetworkOffering.update(
|
|
self.shared_network_offering,
|
|
self.api_client,
|
|
id=self.shared_network_offering.id,
|
|
state="enabled"
|
|
)
|
|
|
|
# Verify that the state of the network offering is updated
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Enabled",
|
|
"The network offering state should get updated to Enabled."
|
|
)
|
|
|
|
# create network using the shared network offering created
|
|
self.testdata["shared_network"]["acltype"] = "Domain"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan
|
|
|
|
self.network = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id,
|
|
)
|
|
|
|
self.cleanup_networks.append(self.network)
|
|
|
|
list_networks_response = Network.list(
|
|
self.api_client,
|
|
id=self.network.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_networks_response, list),
|
|
True,
|
|
"listNetworks returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_networks_response),
|
|
0,
|
|
"listNetworks returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_networks_response[0].specifyipranges,
|
|
True,
|
|
"The network is created with ip range but the flag is\
|
|
set to False.")
|
|
|
|
self.debug(
|
|
"Shared Network created for scope domain: %s" %
|
|
self.network.id)
|
|
|
|
self.admin_account_virtual_machine = VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
networkids=self.network.id,
|
|
serviceofferingid=self.service_offering.id
|
|
)
|
|
|
|
self.cleanup_vms.append(self.admin_account_virtual_machine)
|
|
|
|
vms = VirtualMachine.list(
|
|
self.api_client,
|
|
id=self.admin_account_virtual_machine.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(vms, list),
|
|
True,
|
|
"listVirtualMachines returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(vms),
|
|
0,
|
|
"listVirtualMachines returned empty list."
|
|
)
|
|
|
|
self.debug(
|
|
"Virtual Machine created: %s" %
|
|
self.admin_account_virtual_machine.id)
|
|
|
|
ip_range = list(
|
|
netaddr.iter_iprange(
|
|
unicode(
|
|
self.testdata["shared_network"]["startip"]), unicode(
|
|
self.testdata["shared_network"]["endip"])))
|
|
if netaddr.IPAddress(unicode(vms[0].nic[0].ipaddress)) not in ip_range:
|
|
self.fail(
|
|
"Virtual machine ip should be from the ip range assigned to\
|
|
network created.")
|
|
|
|
self.user_account_virtual_machine = VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
accountid=self.user_account.name,
|
|
domainid=self.user_account.domainid,
|
|
serviceofferingid=self.service_offering.id,
|
|
networkids=self.network.id
|
|
)
|
|
vms = VirtualMachine.list(
|
|
self.api_client,
|
|
id=self.user_account_virtual_machine.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(vms, list),
|
|
True,
|
|
"listVirtualMachines returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(vms),
|
|
0,
|
|
"listVirtualMachines returned empty list."
|
|
)
|
|
|
|
self.debug(
|
|
"Virtual Machine created: %s" %
|
|
self.user_account_virtual_machine.id)
|
|
|
|
ip_range = list(
|
|
netaddr.iter_iprange(
|
|
unicode(
|
|
self.testdata["shared_network"]["startip"]), unicode(
|
|
self.testdata["shared_network"]["endip"])))
|
|
if netaddr.IPAddress(unicode(vms[0].nic[0].ipaddress)) not in ip_range:
|
|
self.fail(
|
|
"Virtual machine ip should be from the ip range assigned to\
|
|
network created.")
|
|
|
|
@attr(tags=["advanced", "advancedns"], required_hardware="false")
|
|
def test_createSharedNetwork_accountSpecific(self):
|
|
""" Test Shared Network with scope account """
|
|
|
|
# Steps,
|
|
# 1. create an Admin Account - admin-XABU1
|
|
# create a user account = user-SOPJD
|
|
# 2. listPhysicalNetworks in available zone
|
|
# 3. createNetworkOffering:
|
|
# - name = "MySharedOffering"
|
|
# - guestiptype="shared"
|
|
# - services = {Dns, Dhcp, UserData}
|
|
# - conservemode = false
|
|
# - specifyVlan = true
|
|
# - specifyIpRanges = true
|
|
# 4. Enable network offering - updateNetworkOffering - state=Enabled
|
|
# 5. createNetwork
|
|
# - name = mysharednetwork, displaytext = mysharednetwork
|
|
# - vlan = 123 (say)
|
|
# - networkofferingid = <mysharedoffering>
|
|
# - gw = 172.16.15.1, startip = 172.16.15.2 , endip = 172.16.15.200
|
|
# - netmask=255.255.255.0
|
|
# - scope = account, account = user-SOPJD, domain = ROOT
|
|
# 6. deployVirtualMachine in this account and in admin account
|
|
# & within networkid = <mysharednetwork>
|
|
# 7. delete the admin account and the user account
|
|
# Validations,
|
|
# 1. listAccounts name=admin-XABU1 and user-SOPJD, state=enabled
|
|
# returns your account
|
|
# 2. listPhysicalNetworks should return at least one active
|
|
# physical network
|
|
# 3. listNetworkOfferings - name=mysharedoffering , should list
|
|
# offering in disabled state
|
|
# 4. listNetworkOfferings - name=mysharedoffering, should list
|
|
# enabled offering
|
|
# 5. listNetworks - name = mysharednetwork should list the
|
|
# successfully created network, verify the guestIp ranges and CIDR
|
|
# are as given in the createNetwork call
|
|
# 6. VM deployed in admin account should FAIL to deploy
|
|
# VM should be deployed in user account only
|
|
# verify VM's IP is within shared network range
|
|
|
|
# Create admin account
|
|
self.admin_account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=True,
|
|
domainid=self.domain.id
|
|
)
|
|
|
|
self.cleanup_accounts.append(self.admin_account)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.admin_account.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_accounts_response, list),
|
|
True,
|
|
"listAccounts returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_accounts_response),
|
|
0,
|
|
"listAccounts returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The admin account created is not enabled."
|
|
)
|
|
|
|
self.debug("Admin type account created: %s" % self.admin_account.name)
|
|
|
|
# Create an user account
|
|
self.user_account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=False,
|
|
domainid=self.domain.id
|
|
)
|
|
|
|
self.cleanup_accounts.append(self.user_account)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.user_account.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_accounts_response, list),
|
|
True,
|
|
"listAccounts returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_accounts_response),
|
|
0,
|
|
"listAccounts returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The user account created is not enabled."
|
|
)
|
|
|
|
self.debug("User type account created: %s" % self.user_account.name)
|
|
|
|
physical_network, shared_vlan = get_free_vlan(
|
|
self.api_client, self.zone.id)
|
|
if shared_vlan is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
|
|
self.debug("Physical Network found: %s" % physical_network.id)
|
|
|
|
self.testdata["shared_network_offering"]["specifyVlan"] = "True"
|
|
self.testdata["shared_network_offering"]["specifyIpRanges"] = "True"
|
|
|
|
# Create Network Offering
|
|
self.shared_network_offering = NetworkOffering.create(
|
|
self.api_client,
|
|
self.testdata["shared_network_offering"],
|
|
conservemode=False
|
|
)
|
|
|
|
# Verify that the network offering got created
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Disabled",
|
|
"The network offering created should be by default disabled."
|
|
)
|
|
|
|
self.debug(
|
|
"Shared Network Offering created: %s" %
|
|
self.shared_network_offering.id)
|
|
|
|
# Update network offering state from disabled to enabled.
|
|
NetworkOffering.update(
|
|
self.shared_network_offering,
|
|
self.api_client,
|
|
id=self.shared_network_offering.id,
|
|
state="enabled"
|
|
)
|
|
# Verify that the state of the network offering is updated
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Enabled",
|
|
"The network offering state should get updated to Enabled."
|
|
)
|
|
|
|
# create network using the shared network offering created
|
|
self.testdata["shared_network"]["acltype"] = "Account"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan
|
|
|
|
self.network = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
accountid=self.user_account.name,
|
|
domainid=self.user_account.domainid,
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id
|
|
)
|
|
|
|
self.cleanup_networks.append(self.network)
|
|
|
|
list_networks_response = Network.list(
|
|
self.api_client,
|
|
id=self.network.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_networks_response, list),
|
|
True,
|
|
"listNetworks returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_networks_response),
|
|
0,
|
|
"listNetworks returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_networks_response[0].specifyipranges,
|
|
True,
|
|
"The network is created with ip range but the flag is\
|
|
set to False.")
|
|
|
|
self.debug("Network created: %s" % self.network.id)
|
|
|
|
try:
|
|
self.admin_account_virtual_machine = VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
accountid=self.admin_account.name,
|
|
domainid=self.admin_account.domainid,
|
|
networkids=self.network.id,
|
|
serviceofferingid=self.service_offering.id
|
|
)
|
|
self.fail(
|
|
"Virtual Machine got created in admin account with network\
|
|
created but the network used is of scope account and for\
|
|
user account.")
|
|
except Exception as e:
|
|
self.debug(
|
|
"Virtual Machine creation failed as network used have scoped\
|
|
only for user account. Exception: %s" % e)
|
|
|
|
self.user_account_virtual_machine = VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
accountid=self.user_account.name,
|
|
domainid=self.user_account.domainid,
|
|
networkids=self.network.id,
|
|
serviceofferingid=self.service_offering.id
|
|
)
|
|
vms = VirtualMachine.list(
|
|
self.api_client,
|
|
id=self.user_account_virtual_machine.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(vms, list),
|
|
True,
|
|
"listVirtualMachines returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(vms),
|
|
0,
|
|
"listVirtualMachines returned empty list."
|
|
)
|
|
|
|
ip_range = list(
|
|
netaddr.iter_iprange(
|
|
unicode(
|
|
self.testdata["shared_network"]["startip"]), unicode(
|
|
self.testdata["shared_network"]["endip"])))
|
|
if netaddr.IPAddress(unicode(vms[0].nic[0].ipaddress)) not in ip_range:
|
|
self.fail(
|
|
"Virtual machine ip should be from the ip range assigned\
|
|
to network created.")
|
|
|
|
@attr(tags=["advanced", "advancedns"], required_hardware="false")
|
|
def test_createSharedNetwork_domainSpecific(self):
|
|
""" Test Shared Network with scope domain """
|
|
|
|
# Steps,
|
|
# 1. create an Admin Account - admin-XABU1
|
|
# create a domain - DOM
|
|
# create a domain admin account = domadmin-SOPJD
|
|
# create a user in domain - DOM
|
|
# 2. listPhysicalNetworks in available zone
|
|
# 3. createNetworkOffering:
|
|
# - name = "MySharedOffering"
|
|
# - guestiptype="shared"
|
|
# - services = {Dns, Dhcp, UserData}
|
|
# - conservemode = false
|
|
# - specifyVlan = true
|
|
# - specifyIpRanges = true
|
|
# 4. Enable network offering - updateNetworkOffering - state=Enabled
|
|
# 5. createNetwork
|
|
# - name = mysharednetwork, displaytext = mysharednetwork
|
|
# - vlan = 123 (say)
|
|
# - networkofferingid = <mysharedoffering>
|
|
# - gw = 172.16.15.1, startip = 172.16.15.2 , endip = 172.16.15.200
|
|
# - netmask=255.255.255.0
|
|
# - scope = domain, domain = DOM
|
|
# 6. deployVirtualMachine in this admin, domainadmin and user account
|
|
# & within networkid = <mysharednetwork>
|
|
# 7. delete all the accounts
|
|
# Validations,
|
|
# 1. listAccounts state=enabled returns your accounts,
|
|
# listDomains - DOM should be created
|
|
# 2. listPhysicalNetworks should return at least one
|
|
# active physical network
|
|
# 3. listNetworkOfferings - name=mysharedoffering , should list
|
|
# offering in disabled state
|
|
# 4. listNetworkOfferings - name=mysharedoffering, should list
|
|
# enabled offering
|
|
# 5. listNetworks - name = mysharednetwork should list the
|
|
# successfully created network, verify the guestIp ranges and
|
|
# CIDR are as given in the createNetwork call
|
|
# 6. VM should NOT be deployed in admin account
|
|
# VM should be deployed in user account and domain admin account
|
|
# verify VM's IP are within shared network range
|
|
|
|
# Create admin account
|
|
self.admin_account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=True,
|
|
domainid=self.domain.id
|
|
)
|
|
|
|
self.cleanup_accounts.append(self.admin_account)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.admin_account.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_accounts_response, list),
|
|
True,
|
|
"listAccounts returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_accounts_response),
|
|
0,
|
|
"listAccounts returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The admin account created is not enabled."
|
|
)
|
|
|
|
self.debug("Admin type account created: %s" % self.admin_account.id)
|
|
|
|
# create domain
|
|
self.dom_domain = Domain.create(
|
|
self.api_client,
|
|
self.testdata["domain"],
|
|
)
|
|
|
|
self.cleanup_domains.append(self.dom_domain)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_domains_response = Domain.list(
|
|
self.api_client,
|
|
id=self.dom_domain.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_domains_response, list),
|
|
True,
|
|
"listDomains returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_domains_response),
|
|
0,
|
|
"listDomains returned empty list."
|
|
)
|
|
|
|
self.debug("Domain created: %s" % self.dom_domain.id)
|
|
|
|
# Create admin account
|
|
self.domain_admin_account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=True,
|
|
domainid=self.dom_domain.id
|
|
)
|
|
|
|
self.cleanup_accounts.append(self.domain_admin_account)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.domain_admin_account.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_accounts_response, list),
|
|
True,
|
|
"listAccounts returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_accounts_response),
|
|
0,
|
|
"listAccounts returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The domain admin account created is not enabled."
|
|
)
|
|
|
|
self.debug(
|
|
"Domain admin account created: %s" %
|
|
self.domain_admin_account.id)
|
|
|
|
# Create an user account
|
|
self.domain_user_account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=False,
|
|
domainid=self.dom_domain.id
|
|
)
|
|
|
|
self.cleanup_accounts.append(self.domain_user_account)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.domain_user_account.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_accounts_response, list),
|
|
True,
|
|
"listAccounts returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_accounts_response),
|
|
0,
|
|
"listAccounts returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The domain user account created is not enabled."
|
|
)
|
|
|
|
self.debug(
|
|
"Domain user account created: %s" %
|
|
self.domain_user_account.id)
|
|
|
|
physical_network, shared_vlan = get_free_vlan(
|
|
self.api_client, self.zone.id)
|
|
if shared_vlan is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
|
|
self.debug("Physical Network found: %s" % physical_network.id)
|
|
|
|
self.testdata["shared_network_offering"]["specifyVlan"] = "True"
|
|
self.testdata["shared_network_offering"]["specifyIpRanges"] = "True"
|
|
|
|
# Create Network Offering
|
|
self.shared_network_offering = NetworkOffering.create(
|
|
self.api_client,
|
|
self.testdata["shared_network_offering"],
|
|
conservemode=False
|
|
)
|
|
|
|
# Verify that the network offering got created
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Disabled",
|
|
"The network offering created should be by default disabled."
|
|
)
|
|
|
|
self.debug(
|
|
"Shared Network Offering created: %s" %
|
|
self.shared_network_offering.id)
|
|
|
|
# Update network offering state from disabled to enabled.
|
|
NetworkOffering.update(
|
|
self.shared_network_offering,
|
|
self.api_client,
|
|
id=self.shared_network_offering.id,
|
|
state="enabled"
|
|
)
|
|
|
|
# Verify that the state of the network offering is updated
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Enabled",
|
|
"The network offering state should get updated to Enabled."
|
|
)
|
|
|
|
# create network using the shared network offering created
|
|
self.testdata["shared_network"]["acltype"] = "domain"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan
|
|
|
|
self.network = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
accountid=self.domain_admin_account.name,
|
|
domainid=self.dom_domain.id,
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id
|
|
)
|
|
|
|
self.cleanup_networks.append(self.network)
|
|
|
|
list_networks_response = Network.list(
|
|
self.api_client,
|
|
id=self.network.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_networks_response, list),
|
|
True,
|
|
"listNetworks returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_networks_response),
|
|
0,
|
|
"listNetworks returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_networks_response[0].specifyipranges,
|
|
True,
|
|
"The network is created with ip range but the flag is\
|
|
set to False.")
|
|
|
|
self.debug("Shared Network created: %s" % self.network.id)
|
|
|
|
try:
|
|
self.admin_account_virtual_machine = VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
accountid=self.admin_account.name,
|
|
domainid=self.admin_account.domainid,
|
|
networkids=self.network.id,
|
|
serviceofferingid=self.service_offering.id
|
|
)
|
|
self.fail(
|
|
"Virtual Machine got created in admin account with network\
|
|
specified but the network used is of scope domain and admin\
|
|
account is not part of this domain.")
|
|
except Exception as e:
|
|
self.debug(
|
|
"Virtual Machine creation failed as network used have scoped\
|
|
only for DOM domain. Exception: %s" % e)
|
|
|
|
self.domain_user_account_virtual_machine = VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
accountid=self.domain_user_account.name,
|
|
domainid=self.domain_user_account.domainid,
|
|
networkids=self.network.id,
|
|
serviceofferingid=self.service_offering.id
|
|
)
|
|
self.cleanup_vms.append(self.domain_user_account_virtual_machine)
|
|
vms = VirtualMachine.list(
|
|
self.api_client,
|
|
id=self.domain_user_account_virtual_machine.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(vms, list),
|
|
True,
|
|
"listVirtualMachines returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(vms),
|
|
0,
|
|
"listVirtualMachines returned empty list."
|
|
)
|
|
|
|
ip_range = list(
|
|
netaddr.iter_iprange(
|
|
unicode(
|
|
self.testdata["shared_network"]["startip"]), unicode(
|
|
self.testdata["shared_network"]["endip"])))
|
|
if netaddr.IPAddress(unicode(vms[0].nic[0].ipaddress)) not in ip_range:
|
|
self.fail(
|
|
"Virtual machine ip should be from the ip range\
|
|
assigned to network created.")
|
|
|
|
self.domain_admin_account_virtual_machine = VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
accountid=self.domain_admin_account.name,
|
|
domainid=self.domain_admin_account.domainid,
|
|
networkids=self.network.id,
|
|
serviceofferingid=self.service_offering.id
|
|
)
|
|
self.cleanup_vms.append(self.domain_admin_account_virtual_machine)
|
|
vms = VirtualMachine.list(
|
|
self.api_client,
|
|
id=self.domain_admin_account_virtual_machine.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(vms, list),
|
|
True,
|
|
"listVirtualMachines returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(vms),
|
|
0,
|
|
"listVirtualMachines returned empty list."
|
|
)
|
|
|
|
ip_range = list(
|
|
netaddr.iter_iprange(
|
|
unicode(
|
|
self.testdata["shared_network"]["startip"]), unicode(
|
|
self.testdata["shared_network"]["endip"])))
|
|
if netaddr.IPAddress(unicode(vms[0].nic[0].ipaddress)) not in ip_range:
|
|
self.fail(
|
|
"Virtual machine ip should be from the ip range assigne\
|
|
to network created.")
|
|
|
|
@attr(tags=["advanced", "advancedns"], required_hardware="false")
|
|
def test_createSharedNetwork_projectSpecific(self):
|
|
""" Test Shared Network with scope project """
|
|
|
|
# Steps,
|
|
# 1. create an Admin Account - admin-XABU1
|
|
# create a project - proj-SADJKS
|
|
# create another project - proj-SLDJK
|
|
# 2. listPhysicalNetworks in available zone
|
|
# 3. createNetworkOffering:
|
|
# - name = "MySharedOffering"
|
|
# - guestiptype="shared"
|
|
# - services = {Dns, Dhcp, UserData}
|
|
# - conservemode = false
|
|
# - specifyVlan = true
|
|
# - specifyIpRanges = true
|
|
# 4. Enable network offering - updateNetworkOffering - state=Enabled
|
|
# 5. createNetwork
|
|
# - name = mysharednetwork, displaytext = mysharednetwork
|
|
# - vlan = 123 (say)
|
|
# - networkofferingid = <mysharedoffering>
|
|
# - gw = 172.16.15.1, startip = 172.16.15.2 , endip = 172.16.15.200
|
|
# - netmask=255.255.255.0
|
|
# - scope = project, project = proj-SLDJK
|
|
# 6. deployVirtualMachine in admin, project and user account & within
|
|
# networkid = <mysharednetwork>
|
|
# 7. delete all the accounts
|
|
# Validations,
|
|
# 1. listAccounts state=enabled returns your accounts, listDomains
|
|
# - DOM should be created
|
|
# 2. listPhysicalNetworks should return at least one active physical
|
|
# network
|
|
# 3. listNetworkOfferings - name=mysharedoffering , should list
|
|
# offering in disabled state
|
|
# 4. listNetworkOfferings - name=mysharedoffering, should list
|
|
# enabled offering
|
|
# 5. listNetworks - name = mysharednetwork should list the
|
|
# successfully created network, verify the guestIp ranges
|
|
# and CIDR are as given in the createNetwork call
|
|
# 6. VM should NOT be deployed in admin account and user account
|
|
# VM should be deployed in project account only
|
|
# verify VM's IP are within shared network range
|
|
|
|
# Create admin account
|
|
self.admin_account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=True,
|
|
domainid=self.domain.id
|
|
)
|
|
|
|
self.cleanup_accounts.append(self.admin_account)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.admin_account.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_accounts_response, list),
|
|
True,
|
|
"listAccounts returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_accounts_response),
|
|
0,
|
|
"listAccounts returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The admin account created is not enabled."
|
|
)
|
|
|
|
self.debug("Admin account created: %s" % self.admin_account.id)
|
|
|
|
self.testdata["project"]["name"] = "proj-SADJKS"
|
|
self.testdata["project"]["displaytext"] = "proj-SADJKS"
|
|
|
|
self.project1 = Project.create(
|
|
self.api_client,
|
|
self.testdata["project"],
|
|
account=self.admin_account.name,
|
|
domainid=self.admin_account.domainid
|
|
)
|
|
|
|
self.cleanup_projects.append(self.project1)
|
|
|
|
list_projects_response = Project.list(
|
|
self.api_client,
|
|
id=self.project1.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_projects_response, list),
|
|
True,
|
|
"listProjects returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_projects_response),
|
|
0,
|
|
"listProjects should return at least one."
|
|
)
|
|
|
|
self.debug("Project created: %s" % self.project1.id)
|
|
|
|
self.testdata["project"]["name"] = "proj-SLDJK"
|
|
self.testdata["project"]["displaytext"] = "proj-SLDJK"
|
|
|
|
self.project2 = Project.create(
|
|
self.api_client,
|
|
self.testdata["project"],
|
|
account=self.admin_account.name,
|
|
domainid=self.admin_account.domainid
|
|
)
|
|
|
|
self.cleanup_projects.append(self.project2)
|
|
|
|
list_projects_response = Project.list(
|
|
self.api_client,
|
|
id=self.project2.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_projects_response, list),
|
|
True,
|
|
"listProjects returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_projects_response),
|
|
0,
|
|
"listProjects should return at least one."
|
|
)
|
|
|
|
self.debug("Project2 created: %s" % self.project2.id)
|
|
|
|
physical_network, shared_vlan = get_free_vlan(
|
|
self.api_client, self.zone.id)
|
|
if shared_vlan is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
|
|
self.debug("Physical Network found: %s" % physical_network.id)
|
|
|
|
self.testdata["shared_network_offering"]["specifyVlan"] = "True"
|
|
self.testdata["shared_network_offering"]["specifyIpRanges"] = "True"
|
|
|
|
# Create Network Offering
|
|
self.shared_network_offering = NetworkOffering.create(
|
|
self.api_client,
|
|
self.testdata["shared_network_offering"],
|
|
conservemode=False
|
|
)
|
|
|
|
# Verify that the network offering got created
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Disabled",
|
|
"The network offering created should be by default disabled."
|
|
)
|
|
|
|
# Update network offering state from disabled to enabled.
|
|
NetworkOffering.update(
|
|
self.shared_network_offering,
|
|
self.api_client,
|
|
id=self.shared_network_offering.id,
|
|
state="enabled"
|
|
)
|
|
|
|
# Verify that the state of the network offering is updated
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Enabled",
|
|
"The network offering state should get updated to Enabled."
|
|
)
|
|
|
|
self.debug(
|
|
"Shared Network found: %s" %
|
|
self.shared_network_offering.id)
|
|
|
|
# create network using the shared network offering created
|
|
self.testdata["shared_network"]["acltype"] = "account"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan
|
|
|
|
self.network = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
projectid=self.project1.id,
|
|
domainid=self.admin_account.domainid,
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id
|
|
)
|
|
self.cleanup_networks.append(self.network)
|
|
|
|
list_networks_response = Network.list(
|
|
self.api_client,
|
|
id=self.network.id,
|
|
projectid=self.project1.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_networks_response, list),
|
|
True,
|
|
"listNetworks returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_networks_response),
|
|
0,
|
|
"listNetworks returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_networks_response[0].specifyipranges,
|
|
True,
|
|
"The network is created with ip range but the flag is\
|
|
set to False")
|
|
|
|
self.debug("Shared Network created: %s" % self.network.id)
|
|
|
|
with self.assertRaises(Exception):
|
|
self.project2_admin_account_virtual_machine =\
|
|
VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
networkids=self.network.id,
|
|
projectid=self.project2.id,
|
|
serviceofferingid=self.service_offering.id)
|
|
self.debug("Deploying a vm to project other than the one in which \
|
|
network is created raised an Exception as expected")
|
|
self.project1_admin_account_virtual_machine = VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
networkids=self.network.id,
|
|
projectid=self.project1.id,
|
|
serviceofferingid=self.service_offering.id
|
|
)
|
|
vms = VirtualMachine.list(
|
|
self.api_client,
|
|
id=self.project1_admin_account_virtual_machine.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(vms, list),
|
|
True,
|
|
"listVirtualMachines returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(vms),
|
|
0,
|
|
"listVirtualMachines returned empty list."
|
|
)
|
|
|
|
ip_range = list(
|
|
netaddr.iter_iprange(
|
|
unicode(
|
|
self.testdata["shared_network"]["startip"]), unicode(
|
|
self.testdata["shared_network"]["endip"])))
|
|
if netaddr.IPAddress(unicode(vms[0].nic[0].ipaddress)) not in ip_range:
|
|
self.fail(
|
|
"Virtual machine ip should be from the ip range assigned\
|
|
to network created.")
|
|
|
|
@unittest.skip(
|
|
"skipped - This is a redundant case and also this\
|
|
is causing issue for rest fo the cases ")
|
|
@attr(tags=["advanced", "advancedns", "NA"])
|
|
def test_createSharedNetwork_usedVlan(self):
|
|
""" Test Shared Network with used vlan 01 """
|
|
|
|
# Steps,
|
|
# 1. create an Admin account
|
|
# 2. create a shared NetworkOffering
|
|
# 3. enable the network offering
|
|
# 4. listPhysicalNetworks
|
|
# - vlan = guest VLAN range = 10-90 (say)
|
|
# 5. createNetwork
|
|
# - name = mysharednetwork, displaytext = mysharednetwork
|
|
# - vlan = any vlan between 10-90
|
|
# - networkofferingid = <mysharedoffering>
|
|
# - gw = 172.16.15.1, startip = 172.16.15.2 , endip = 172.16.15.200
|
|
# - netmask=255.255.255.0
|
|
# - scope = all
|
|
# 6. delete admin account
|
|
# Validations,
|
|
# 1. listAccounts state=enabled returns your account
|
|
# 2. listNetworkOfferings - name=mysharedoffering , should list
|
|
# offering in disabled state
|
|
# 3. listNetworkOfferings - name=mysharedoffering, should list
|
|
# enabled offering
|
|
# 4. listPhysicalNetworks should return at least one active
|
|
# physical network
|
|
# 5. network creation should FAIL since VLAN is used for
|
|
# guest networks
|
|
|
|
# Create admin account
|
|
self.admin_account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=True,
|
|
domainid=self.domain.id
|
|
)
|
|
|
|
self.cleanup_accounts.append(self.admin_account)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.admin_account.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_accounts_response, list),
|
|
True,
|
|
"listAccounts returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_accounts_response),
|
|
0,
|
|
"listAccounts returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The admin account created is not enabled."
|
|
)
|
|
|
|
self.debug("Domain admin account created: %s" % self.admin_account.id)
|
|
|
|
physical_network, shared_vlan = get_free_vlan(
|
|
self.api_client, self.zone.id)
|
|
if shared_vlan is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
|
|
self.testdata["shared_network_offering"]["specifyVlan"] = "True"
|
|
self.testdata["shared_network_offering"]["specifyIpRanges"] = "True"
|
|
|
|
# Create Network Offering
|
|
self.shared_network_offering = NetworkOffering.create(
|
|
self.api_client,
|
|
self.testdata["shared_network_offering"],
|
|
conservemode=False
|
|
)
|
|
|
|
# Verify that the network offering got created
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Disabled",
|
|
"The network offering created should be bydefault disabled."
|
|
)
|
|
|
|
self.debug(
|
|
"Shared Network Offering created: %s" %
|
|
self.shared_network_offering.id)
|
|
|
|
# Update network offering state from disabled to enabled.
|
|
NetworkOffering.update(
|
|
self.shared_network_offering,
|
|
self.api_client,
|
|
id=self.shared_network_offering.id,
|
|
state="enabled"
|
|
)
|
|
|
|
# Verify that the state of the network offering is updated
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Enabled",
|
|
"The network offering state should get updated to Enabled."
|
|
)
|
|
|
|
# create network using the shared network offering created
|
|
self.testdata["shared_network"]["vlan"] = str.split(
|
|
str(physical_network.vlan), "-")[0]
|
|
self.testdata["shared_network"]["acltype"] = "domain"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan
|
|
|
|
try:
|
|
self.network = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id,
|
|
)
|
|
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. Exception: %s" % e)
|
|
|
|
@attr(tags=["advanced", "advancedns"], required_hardware="false")
|
|
def test_createSharedNetwork_usedVlan2(self):
|
|
""" Test Shared Network with used vlan 02 """
|
|
|
|
# Steps,
|
|
# 1. create an Admin account
|
|
# 2. create a shared NetworkOffering
|
|
# 3. enable the network offering
|
|
# 4. listPhysicalNetworks
|
|
# - vlan = guest VLAN range = 10-90 (say)
|
|
# 5. createNetwork
|
|
# - name = mysharednetwork, displaytext = mysharednetwork
|
|
# - vlan = any vlan beyond 10-90 (123 for eg)
|
|
# - networkofferingid = <mysharedoffering>
|
|
# - gw = 172.16.15.1, startip = 172.16.15.2 , endip = 172.16.15.200
|
|
# - netmask=255.255.255.0
|
|
# - scope = all
|
|
# 6. createNetwork again with same VLAN but different IP ranges and
|
|
# gateway
|
|
# 7. delete admin account
|
|
# Validations,
|
|
# 1. listAccounts state=enabled returns your account
|
|
# 2. listNetworkOfferings - name=mysharedoffering , should list
|
|
# offering in disabled state
|
|
# 3. listNetworkOfferings - name=mysharedoffering, should list
|
|
# enabled offering
|
|
# 4. listPhysicalNetworks should return at least one active
|
|
# physical network
|
|
# 5. network creation shoud PASS
|
|
# 6. network creation should FAIL since VLAN is already used by
|
|
# previously created network
|
|
|
|
# Create admin account
|
|
self.admin_account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=True,
|
|
domainid=self.domain.id
|
|
)
|
|
self.cleanup_accounts.append(self.admin_account)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.admin_account.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_accounts_response, list),
|
|
True,
|
|
"listAccounts returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_accounts_response),
|
|
0,
|
|
"listAccounts returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The admin account created is not enabled."
|
|
)
|
|
|
|
self.debug("Admin account created: %s" % self.admin_account.id)
|
|
|
|
physical_network, shared_vlan = get_free_vlan(
|
|
self.api_client, self.zone.id)
|
|
if shared_vlan is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
|
|
self.debug("Physical Network found: %s" % physical_network.id)
|
|
|
|
self.testdata["shared_network_offering"]["specifyVlan"] = "True"
|
|
self.testdata["shared_network_offering"]["specifyIpRanges"] = "True"
|
|
|
|
# Create Network Offering
|
|
self.shared_network_offering = NetworkOffering.create(
|
|
self.api_client,
|
|
self.testdata["shared_network_offering"],
|
|
conservemode=False
|
|
)
|
|
|
|
# Verify that the network offering got created
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Disabled",
|
|
"The network offering created should be bydefault disabled."
|
|
)
|
|
|
|
self.debug(
|
|
"Shared Network Offering created: %s" %
|
|
self.shared_network_offering.id)
|
|
|
|
# Update network offering state from disabled to enabled.
|
|
NetworkOffering.update(
|
|
self.shared_network_offering,
|
|
self.api_client,
|
|
id=self.shared_network_offering.id,
|
|
state="enabled"
|
|
)
|
|
|
|
# Verify that the state of the network offering is updated
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Enabled",
|
|
"The network offering state should get updated to Enabled."
|
|
)
|
|
|
|
# create network using the shared network offering created
|
|
self.testdata["shared_network"]["acltype"] = "Domain"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan
|
|
self.debug(
|
|
"Creating a shared network in non-cloudstack VLAN %s" %
|
|
shared_vlan)
|
|
self.network = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id,
|
|
)
|
|
|
|
self.cleanup_networks.append(self.network)
|
|
|
|
list_networks_response = Network.list(
|
|
self.api_client,
|
|
id=self.network.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_networks_response, list),
|
|
True,
|
|
"listNetworks returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_networks_response),
|
|
0,
|
|
"listNetworks returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_networks_response[0].specifyipranges,
|
|
True,
|
|
"The network is created with ip range but the flag is\
|
|
set to False.")
|
|
|
|
self.debug("Network created: %s" % self.network.id)
|
|
|
|
shared_network_subnet_number = random.randrange(1, 254)
|
|
|
|
self.testdata["shared_network"]["gateway"] = "172.16." + \
|
|
str(shared_network_subnet_number) + ".1"
|
|
self.testdata["shared_network"]["startip"] = "172.16." + \
|
|
str(shared_network_subnet_number) + ".2"
|
|
self.testdata["shared_network"]["endip"] = "172.16." + \
|
|
str(shared_network_subnet_number) + ".20"
|
|
|
|
self.testdata["shared_network"]["acltype"] = "domain"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
|
|
try:
|
|
self.network1 = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id,
|
|
)
|
|
self.cleanup_networks.append(self.network1)
|
|
self.fail(
|
|
"Network got created with used vlan id, which is invalid")
|
|
except Exception as e:
|
|
self.debug(
|
|
"Network creation failed because the valn id being used by\
|
|
another network. Exception: %s" % e)
|
|
|
|
@attr(tags=["advanced", "advancedns"], required_hardware="false")
|
|
def test_deployVM_multipleSharedNetwork(self):
|
|
""" Test Vm deployment with multiple shared networks """
|
|
|
|
# Steps,
|
|
# 0. create a user account
|
|
# 1. Create two shared Networks (scope=ALL, different IP ranges)
|
|
# 2. deployVirtualMachine in both the above networkids within the
|
|
# user account
|
|
# 3. delete the user account
|
|
# Validations,
|
|
# 1. shared networks should be created successfully
|
|
# 2. a. VM should deploy successfully
|
|
# b. VM should be deployed in both networks and have IP in both the
|
|
# networks
|
|
|
|
# Create admin account
|
|
self.admin_account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=True,
|
|
domainid=self.domain.id
|
|
)
|
|
|
|
self.cleanup_accounts.append(self.admin_account)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.admin_account.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_accounts_response, list),
|
|
True,
|
|
"listAccounts returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_accounts_response),
|
|
0,
|
|
"listAccounts returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The admin account created is not enabled."
|
|
)
|
|
|
|
self.debug("Admin account created: %s" % self.admin_account.id)
|
|
|
|
physical_network, shared_vlan = get_free_vlan(
|
|
self.api_client, self.zone.id)
|
|
if shared_vlan is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
|
|
self.debug("Physical Network found: %s" % physical_network.id)
|
|
|
|
self.testdata["shared_network_offering"]["specifyVlan"] = "True"
|
|
self.testdata["shared_network_offering"]["specifyIpRanges"] = "True"
|
|
|
|
# Create Network Offering
|
|
self.shared_network_offering = NetworkOffering.create(
|
|
self.api_client,
|
|
self.testdata["shared_network_offering"],
|
|
conservemode=False
|
|
)
|
|
|
|
# Verify that the network offering got created
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Disabled",
|
|
"The network offering created should be bydefault disabled."
|
|
)
|
|
|
|
self.debug(
|
|
"Shared Network offering created: %s" %
|
|
self.shared_network_offering.id)
|
|
|
|
# Update network offering state from disabled to enabled.
|
|
NetworkOffering.update(
|
|
self.shared_network_offering,
|
|
self.api_client,
|
|
id=self.shared_network_offering.id,
|
|
state="enabled"
|
|
)
|
|
|
|
# Verify that the state of the network offering is updated
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Enabled",
|
|
"The network offering state should get updated to Enabled."
|
|
)
|
|
|
|
# create network using the shared network offering created
|
|
self.testdata["shared_network"]["acltype"] = "domain"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan
|
|
|
|
self.network = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id,
|
|
)
|
|
|
|
self.cleanup_networks.append(self.network)
|
|
|
|
list_networks_response = Network.list(
|
|
self.api_client,
|
|
id=self.network.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_networks_response, list),
|
|
True,
|
|
"listNetworks returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_networks_response),
|
|
0,
|
|
"listNetworks returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_networks_response[0].specifyipranges,
|
|
True,
|
|
"The network is created with ip range but the flag is\
|
|
set to False.")
|
|
|
|
self.debug("Shared Network created: %s" % self.network.id)
|
|
|
|
shared_network_subnet_number = random.randrange(1, 254)
|
|
|
|
self.testdata["shared_network"]["gateway"] = "172.16." + \
|
|
str(shared_network_subnet_number) + ".1"
|
|
self.testdata["shared_network"]["startip"] = "172.16." + \
|
|
str(shared_network_subnet_number) + ".2"
|
|
self.testdata["shared_network"]["endip"] = "172.16." + \
|
|
str(shared_network_subnet_number) + ".20"
|
|
|
|
self.testdata["shared_network"]["acltype"] = "domain"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
|
|
shared_vlan = get_free_vlan(self.api_client, self.zone.id)[1]
|
|
if shared_vlan is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan
|
|
|
|
self.network1 = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id,
|
|
)
|
|
|
|
self.cleanup_networks.append(self.network1)
|
|
|
|
list_networks_response = Network.list(
|
|
self.api_client,
|
|
id=self.network1.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_networks_response, list),
|
|
True,
|
|
"listNetworks returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_networks_response),
|
|
0,
|
|
"listNetworks returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_networks_response[0].specifyipranges,
|
|
True,
|
|
"The network is created with ip range but the flag is\
|
|
set to False.")
|
|
|
|
self.debug("Network created: %s" % self.network1.id)
|
|
|
|
self.network_admin_account_virtual_machine = VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
accountid=self.admin_account.name,
|
|
domainid=self.admin_account.domainid,
|
|
networkids=self.network.id,
|
|
serviceofferingid=self.service_offering.id
|
|
)
|
|
vms = VirtualMachine.list(
|
|
self.api_client,
|
|
id=self.network_admin_account_virtual_machine.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(vms, list),
|
|
True,
|
|
"listVirtualMachines returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(vms),
|
|
0,
|
|
"listVirtualMachines returned empty list."
|
|
)
|
|
|
|
self.debug(
|
|
"Virtual Machine created: %s" %
|
|
self.network_admin_account_virtual_machine.id)
|
|
|
|
self.assertTrue(
|
|
self.network_admin_account_virtual_machine.nic[0].ipaddress
|
|
is not None,
|
|
"ip should be assigned to running virtual machine")
|
|
|
|
self.network1_admin_account_virtual_machine = VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
accountid=self.admin_account.name,
|
|
domainid=self.admin_account.domainid,
|
|
networkids=self.network1.id,
|
|
serviceofferingid=self.service_offering.id
|
|
)
|
|
vms = VirtualMachine.list(
|
|
self.api_client,
|
|
id=self.network1_admin_account_virtual_machine.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(vms, list),
|
|
True,
|
|
"listVirtualMachines returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(vms),
|
|
0,
|
|
"listVirtualMachines returned empty list."
|
|
)
|
|
self.debug(
|
|
"Virtual Machine created: %s" %
|
|
self.network1_admin_account_virtual_machine.id)
|
|
|
|
self.assertTrue(
|
|
self.network1_admin_account_virtual_machine.nic[0].ipaddress
|
|
is not None,
|
|
"ip should be assigned to running virtual machine")
|
|
|
|
@attr(tags=["advanced", "advancedns"], required_hardware="true")
|
|
def test_deployVM_isolatedAndShared(self):
|
|
""" Test VM deployment in shared and isolated networks """
|
|
|
|
# Steps,
|
|
# 0. create a user account
|
|
# 1. Create one shared Network (scope=ALL, different IP ranges)
|
|
# 2. Create one Isolated Network
|
|
# 3. deployVirtualMachine in both the above networkids within
|
|
# the user account
|
|
# 4. apply FW rule and enable PF for port 22 for guest VM on
|
|
# isolated network
|
|
# 5. delete the user account
|
|
# Validations,
|
|
# 1. shared network should be created successfully
|
|
# 2. isolated network should be created successfully
|
|
# 3.
|
|
# a. VM should deploy successfully
|
|
# b. VM should be deployed in both networks and have IP in both
|
|
# the networks
|
|
# 4. FW and PF should apply successfully, ssh into the VM should work
|
|
# over isolated network
|
|
|
|
# Create admin account
|
|
self.admin_account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=True,
|
|
domainid=self.domain.id
|
|
)
|
|
|
|
self.cleanup_accounts.append(self.admin_account)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.admin_account.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_accounts_response, list),
|
|
True,
|
|
"listAccounts returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_accounts_response),
|
|
0,
|
|
"listAccounts returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The admin account created is not enabled."
|
|
)
|
|
|
|
self.debug("Admin type account created: %s" % self.admin_account.name)
|
|
|
|
self.testdata["shared_network_offering"]["specifyVlan"] = "True"
|
|
self.testdata["shared_network_offering"]["specifyIpRanges"] = "True"
|
|
|
|
# Create Network Offering
|
|
self.shared_network_offering = NetworkOffering.create(
|
|
self.api_client,
|
|
self.testdata["shared_network_offering"],
|
|
conservemode=False
|
|
)
|
|
|
|
# Verify that the network offering got created
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Disabled",
|
|
"The network offering created should be bydefault disabled."
|
|
)
|
|
|
|
self.debug(
|
|
"Shared Network offering created: %s" %
|
|
self.shared_network_offering.id)
|
|
|
|
# Update network offering state from disabled to enabled.
|
|
NetworkOffering.update(
|
|
self.shared_network_offering,
|
|
self.api_client,
|
|
id=self.shared_network_offering.id,
|
|
state="enabled"
|
|
)
|
|
|
|
# Verify that the state of the network offering is updated
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Enabled",
|
|
"The network offering state should get updated to Enabled."
|
|
)
|
|
|
|
self.isolated_network_offering = NetworkOffering.create(
|
|
self.api_client,
|
|
self.testdata["isolated_network_offering"],
|
|
conservemode=False
|
|
)
|
|
|
|
# Update network offering state from disabled to enabled.
|
|
NetworkOffering.update(
|
|
self.isolated_network_offering,
|
|
self.api_client,
|
|
id=self.isolated_network_offering.id,
|
|
state="enabled"
|
|
)
|
|
|
|
# Verify that the state of the network offering is updated
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.isolated_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Enabled",
|
|
"The isolated network offering state should get\
|
|
updated to Enabled.")
|
|
|
|
self.debug(
|
|
"Isolated Network Offering created: %s" %
|
|
self.isolated_network_offering.id)
|
|
|
|
physical_network, shared_vlan = get_free_vlan(
|
|
self.api_client, self.zone.id)
|
|
if shared_vlan is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
|
|
# create network using the shared network offering created
|
|
self.testdata["shared_network"]["acltype"] = "domain"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan
|
|
|
|
self.shared_network = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
accountid=self.admin_account.name,
|
|
domainid=self.admin_account.domainid,
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id
|
|
)
|
|
|
|
self.cleanup_networks.append(self.shared_network)
|
|
|
|
list_networks_response = Network.list(
|
|
self.api_client,
|
|
id=self.shared_network.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_networks_response, list),
|
|
True,
|
|
"listNetworks returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_networks_response),
|
|
0,
|
|
"listNetworks returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_networks_response[0].specifyipranges,
|
|
True,
|
|
"The network is created with ip range but the flag is\
|
|
set to False.")
|
|
|
|
self.debug("Shared Network created: %s" % self.shared_network.id)
|
|
|
|
self.isolated_network = Network.create(
|
|
self.api_client,
|
|
self.testdata["isolated_network"],
|
|
accountid=self.admin_account.name,
|
|
domainid=self.admin_account.domainid,
|
|
networkofferingid=self.isolated_network_offering.id,
|
|
zoneid=self.zone.id
|
|
)
|
|
|
|
self.cleanup_networks.append(self.isolated_network)
|
|
|
|
list_networks_response = Network.list(
|
|
self.api_client,
|
|
id=self.isolated_network.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_networks_response, list),
|
|
True,
|
|
"listNetworks returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_networks_response),
|
|
0,
|
|
"listNetworks returned empty list."
|
|
)
|
|
|
|
self.debug("Isolated Network created: %s" % self.isolated_network.id)
|
|
|
|
self.shared_network_admin_account_virtual_machine = \
|
|
VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
accountid=self.admin_account.name,
|
|
domainid=self.admin_account.domainid,
|
|
networkids=self.shared_network.id,
|
|
serviceofferingid=self.service_offering.id
|
|
)
|
|
vms = VirtualMachine.list(
|
|
self.api_client,
|
|
id=self.shared_network_admin_account_virtual_machine.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(vms, list),
|
|
True,
|
|
"listVirtualMachines returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(vms),
|
|
0,
|
|
"listVirtualMachines returned empty list."
|
|
)
|
|
self.debug(
|
|
"Virtual Machine created: %s" %
|
|
self.shared_network_admin_account_virtual_machine.id)
|
|
|
|
self.assertTrue(
|
|
self.shared_network_admin_account_virtual_machine.nic[0].ipaddress
|
|
is not None,
|
|
"ip should be assigned to running virtual machine")
|
|
|
|
self.isolated_network_admin_account_virtual_machine = \
|
|
VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
accountid=self.admin_account.name,
|
|
domainid=self.admin_account.domainid,
|
|
networkids=self.isolated_network.id,
|
|
serviceofferingid=self.service_offering.id
|
|
)
|
|
vms = VirtualMachine.list(
|
|
self.api_client,
|
|
id=self.isolated_network_admin_account_virtual_machine.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(vms, list),
|
|
True,
|
|
"listVirtualMachines returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(vms),
|
|
0,
|
|
"listVirtualMachines returned empty list."
|
|
)
|
|
|
|
self.debug(
|
|
"Virtual Machine created: %s" %
|
|
self.isolated_network_admin_account_virtual_machine.id)
|
|
|
|
self.assertTrue(
|
|
self.isolated_network_admin_account_virtual_machine.nic[0].ipaddress
|
|
is not None,
|
|
"ip should be assigned to running virtual machine")
|
|
|
|
self.debug(
|
|
"Associating public IP for account: %s" %
|
|
self.admin_account.name)
|
|
self.public_ip = PublicIPAddress.create(
|
|
self.api_client,
|
|
accountid=self.admin_account.name,
|
|
zoneid=self.zone.id,
|
|
domainid=self.admin_account.domainid,
|
|
networkid=self.isolated_network.id
|
|
)
|
|
|
|
self.debug(
|
|
"Associated %s with network %s" %
|
|
(self.public_ip.ipaddress.ipaddress, self.isolated_network.id))
|
|
self.debug(
|
|
"Creating PF rule for IP address: %s" %
|
|
self.public_ip.ipaddress.ipaddress)
|
|
|
|
public_ip = self.public_ip.ipaddress
|
|
|
|
# Enable Static NAT for VM
|
|
StaticNATRule.enable(
|
|
self.api_client,
|
|
public_ip.id,
|
|
self.isolated_network_admin_account_virtual_machine.id
|
|
)
|
|
|
|
self.debug("Enabled static NAT for public IP ID: %s" % public_ip.id)
|
|
# Create Firewall rule on source NAT
|
|
fw_rule = FireWallRule.create(
|
|
self.api_client,
|
|
ipaddressid=self.public_ip.ipaddress.id,
|
|
protocol='TCP',
|
|
cidrlist=[self.testdata["fwrule"]["cidr"]],
|
|
startport=self.testdata["fwrule"]["startport"],
|
|
endport=self.testdata["fwrule"]["endport"]
|
|
)
|
|
self.debug("Created firewall rule: %s" % fw_rule.id)
|
|
|
|
fw_rules = FireWallRule.list(
|
|
self.api_client,
|
|
id=fw_rule.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(fw_rules, list),
|
|
True,
|
|
"List fw rules should return a valid firewall rules"
|
|
)
|
|
|
|
self.assertNotEqual(
|
|
len(fw_rules),
|
|
0,
|
|
"Length of fw rules response should not be zero"
|
|
)
|
|
|
|
# Should be able to SSH VM
|
|
try:
|
|
self.debug(
|
|
"SSH into VM: %s" %
|
|
self.isolated_network_admin_account_virtual_machine.id)
|
|
self.isolated_network_admin_account_virtual_machine.get_ssh_client(
|
|
ipaddress=self.public_ip.ipaddress.ipaddress)
|
|
except Exception as e:
|
|
self.fail(
|
|
"SSH Access failed for %s: %s" %
|
|
(self.isolated_network_admin_account_virtual_machine.ipaddress,
|
|
e))
|
|
|
|
@attr(tags=["advanced", "advancedns"], required_hardware="false")
|
|
def test_networkWithsubdomainaccessTrue(self):
|
|
""" Test Shared Network with subdomainaccess=True """
|
|
|
|
# Steps,
|
|
# 1. create Network using shared network offering for scope=Account
|
|
# and subdomainaccess=true.
|
|
# Validations,
|
|
# (Expected) API should fail saying that subdomainaccess cannot be
|
|
# given when scope is Account
|
|
|
|
# Create admin account
|
|
self.admin_account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=True,
|
|
domainid=self.domain.id
|
|
)
|
|
|
|
self.cleanup_accounts.append(self.admin_account)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.admin_account.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_accounts_response, list),
|
|
True,
|
|
"listAccounts returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_accounts_response),
|
|
0,
|
|
"listAccounts returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The admin account created is not enabled."
|
|
)
|
|
|
|
self.debug("Admin type account created: %s" % self.admin_account.id)
|
|
|
|
physical_network, shared_vlan = get_free_vlan(
|
|
self.api_client, self.zone.id)
|
|
if shared_vlan is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
|
|
self.debug("Physical Network found: %s" % physical_network.id)
|
|
|
|
self.testdata["shared_network_offering"]["specifyVlan"] = "True"
|
|
self.testdata["shared_network_offering"]["specifyIpRanges"] = "True"
|
|
|
|
# Create Network Offering
|
|
self.shared_network_offering = NetworkOffering.create(
|
|
self.api_client,
|
|
self.testdata["shared_network_offering"],
|
|
conservemode=False
|
|
)
|
|
|
|
# Verify that the network offering got created
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Disabled",
|
|
"The network offering created should be bydefault disabled."
|
|
)
|
|
|
|
self.debug(
|
|
"Shared Network Offering created: %s" %
|
|
self.shared_network_offering.id)
|
|
|
|
# Update network offering state from disabled to enabled.
|
|
NetworkOffering.update(
|
|
self.shared_network_offering,
|
|
self.api_client,
|
|
id=self.shared_network_offering.id,
|
|
state="enabled"
|
|
)
|
|
# Verify that the state of the network offering is updated
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Enabled",
|
|
"The network offering state should get updated to Enabled."
|
|
)
|
|
|
|
# create network using the shared network offering created
|
|
self.testdata["shared_network"]["acltype"] = "Account"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan
|
|
self.testdata["shared_network"]["subdomainaccess"] = "True"
|
|
|
|
try:
|
|
self.network = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
accountid=self.admin_account.name,
|
|
domainid=self.admin_account.domainid,
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id
|
|
)
|
|
self.fail("Network creation should fail.")
|
|
except:
|
|
self.debug(
|
|
"Network creation failed because subdomainaccess parameter was\
|
|
passed when scope was account.")
|
|
|
|
@attr(tags=["advanced", "advancedns"], required_hardware="false")
|
|
def test_networkWithsubdomainaccessFalse(self):
|
|
""" Test shared Network with subdomainaccess=False """
|
|
|
|
# Steps,
|
|
# 1. create Network using shared network offering for scope=Account
|
|
# and subdomainaccess=false
|
|
# Validations,
|
|
# (Expected) API should fail saying that subdomainaccess cannot be
|
|
# given when scope is Account
|
|
|
|
# Create admin account
|
|
self.admin_account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=True,
|
|
domainid=self.domain.id
|
|
)
|
|
|
|
self.cleanup_accounts.append(self.admin_account)
|
|
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.admin_account.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_accounts_response, list),
|
|
True,
|
|
"listAccounts returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_accounts_response),
|
|
0,
|
|
"listAccounts returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The admin account created is not enabled."
|
|
)
|
|
|
|
self.debug("Admin type account created: %s" % self.admin_account.id)
|
|
|
|
physical_network, shared_vlan = get_free_vlan(
|
|
self.api_client, self.zone.id)
|
|
if shared_vlan is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
|
|
self.debug("Physical Network found: %s" % physical_network.id)
|
|
|
|
self.testdata["shared_network_offering"]["specifyVlan"] = "True"
|
|
self.testdata["shared_network_offering"]["specifyIpRanges"] = "True"
|
|
|
|
# Create Network Offering
|
|
self.shared_network_offering = NetworkOffering.create(
|
|
self.api_client,
|
|
self.testdata["shared_network_offering"],
|
|
conservemode=False
|
|
)
|
|
|
|
# Verify that the network offering got created
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Disabled",
|
|
"The network offering created should be bydefault disabled."
|
|
)
|
|
|
|
self.debug(
|
|
"Shared Network Offering created: %s" %
|
|
self.shared_network_offering.id)
|
|
|
|
# Update network offering state from disabled to enabled.
|
|
NetworkOffering.update(
|
|
self.shared_network_offering,
|
|
self.api_client,
|
|
id=self.shared_network_offering.id,
|
|
state="enabled"
|
|
)
|
|
# Verify that the state of the network offering is updated
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
self.assertEqual(
|
|
isinstance(list_network_offerings_response, list),
|
|
True,
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertNotEqual(
|
|
len(list_network_offerings_response),
|
|
0,
|
|
"listNetworkOfferings returned empty list."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Enabled",
|
|
"The network offering state should get updated to Enabled."
|
|
)
|
|
|
|
# create network using the shared network offering created
|
|
self.testdata["shared_network"]["acltype"] = "Account"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan
|
|
self.testdata["shared_network"]["subdomainaccess"] = "False"
|
|
|
|
try:
|
|
self.network = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
accountid=self.admin_account.name,
|
|
domainid=self.admin_account.domainid,
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id
|
|
)
|
|
self.fail("Network creation should fail.")
|
|
except:
|
|
self.debug(
|
|
"Network creation failed because subdomainaccess parameter\
|
|
was passed when scope was account.")
|
|
|
|
@attr(tags=["advanced"], required_hardware="false")
|
|
def test_escalation_ES1621(self):
|
|
"""
|
|
@summary: ES1621:Allow creating shared networks with overlapping
|
|
ip ranges in different vlans
|
|
@steps:
|
|
Step1: Create an Admin account for the test
|
|
Step2: Create shared network offering
|
|
Step3: Update the network offering to Enabled state
|
|
Step4: list network offering
|
|
Step5: Create network with above offering
|
|
Step6: List netwokrs and verify the network created in
|
|
step5 in the response
|
|
Step7: Create another network with offering,vlan and ip range
|
|
same as in step6
|
|
Step8: Verify that network creationin Step7 should fail
|
|
Step9: Repeat step6 with diff vlan but same ip range and network
|
|
offering
|
|
Step10: List netwokrs and verify the network created in step9
|
|
in the response
|
|
Step11: Dislable network offering for the cleanup to delete at
|
|
the end of the test
|
|
"""
|
|
# Creating Admin account
|
|
self.admin_account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
admin=True,
|
|
domainid=self.domain.id
|
|
)
|
|
self.cleanup_accounts.append(self.admin_account)
|
|
# verify that the account got created with state enabled
|
|
list_accounts_response = Account.list(
|
|
self.api_client,
|
|
id=self.admin_account.id,
|
|
listall=True
|
|
)
|
|
status = validateList(list_accounts_response)
|
|
self.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"listAccounts returned invalid object in response"
|
|
)
|
|
self.assertEqual(
|
|
list_accounts_response[0].state,
|
|
"enabled",
|
|
"The admin account created is not enabled."
|
|
)
|
|
self.debug("Admin type account created: %s" % self.admin_account.name)
|
|
physical_network, shared_vlan = get_free_vlan(
|
|
self.api_client, self.zone.id)
|
|
if shared_vlan is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
self.debug("Physical network found: %s" % physical_network.id)
|
|
self.testdata["shared_network_offering"]["specifyVlan"] = "True"
|
|
self.testdata["shared_network_offering"]["specifyIpRanges"] = "True"
|
|
# Create Network Offering
|
|
self.shared_network_offering = NetworkOffering.create(
|
|
self.api_client,
|
|
self.testdata["shared_network_offering"],
|
|
conservemode=False
|
|
)
|
|
# Verify that the network offering got created
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
status = validateList(list_network_offerings_response)
|
|
self.assertEquals(
|
|
PASS,
|
|
status[0],
|
|
"listNetworkOfferings returned invalid object in response."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Disabled",
|
|
"The network offering created should be bydefault disabled."
|
|
)
|
|
self.debug(
|
|
"Shared Network offering created: %s" %
|
|
self.shared_network_offering.id)
|
|
# Update network offering state from disabled to enabled.
|
|
NetworkOffering.update(
|
|
self.shared_network_offering,
|
|
self.api_client,
|
|
id=self.shared_network_offering.id,
|
|
state="enabled"
|
|
)
|
|
# Verify that the state of the network offering is updated
|
|
list_network_offerings_response = NetworkOffering.list(
|
|
self.api_client,
|
|
id=self.shared_network_offering.id
|
|
)
|
|
status = validateList(list_network_offerings_response)
|
|
self.assertEquals(
|
|
PASS,
|
|
status[0],
|
|
"listNetworkOfferings returned invalid object in\
|
|
response after enabling it."
|
|
)
|
|
self.assertEqual(
|
|
list_network_offerings_response[0].state,
|
|
"Enabled",
|
|
"The network offering state should get updated to Enabled."
|
|
)
|
|
# create network using the shared network offering created
|
|
self.testdata["shared_network"]["acltype"] = "Domain"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan
|
|
self.network = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id,
|
|
)
|
|
self.cleanup_networks.append(self.network)
|
|
list_networks_response = Network.list(
|
|
self.api_client,
|
|
id=self.network.id
|
|
)
|
|
status = validateList(list_accounts_response)
|
|
self.assertEquals(
|
|
PASS,
|
|
status[0],
|
|
"listNetworks returned invalid object in response."
|
|
)
|
|
self.assertEqual(
|
|
list_networks_response[0].specifyipranges,
|
|
True,
|
|
"The network is created with ip range but the flag is\
|
|
set to False.")
|
|
self.debug(
|
|
"Shared Network created for scope domain: %s" %
|
|
self.network.id)
|
|
# Create another network with same ip range and vlan. It should fail
|
|
try:
|
|
self.network1 = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id,
|
|
)
|
|
self.cleanup_networks.append(self.network1)
|
|
self.fail(
|
|
"CS is allowing to create shared network with ip range and\
|
|
vlan same as used by another shared network")
|
|
except Exception as e:
|
|
self.debug("Network Creation Exception Raised: %s" % e)
|
|
# Create another shared network with overlapped ip range but different
|
|
# vlan
|
|
physical_network, shared_vlan1 = get_free_vlan(
|
|
self.api_client, self.zone.id)
|
|
if shared_vlan1 is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan1
|
|
self.network2 = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id,
|
|
)
|
|
self.cleanup_networks.append(self.network2)
|
|
list_networks_response = Network.list(
|
|
self.api_client,
|
|
id=self.network2.id
|
|
)
|
|
status = validateList(list_networks_response)
|
|
self.assertEquals(
|
|
PASS,
|
|
status[0],
|
|
"listNetworks returned invalid object in response after\
|
|
creating with overlapped ip range in diff vlan."
|
|
)
|
|
self.assertEqual(
|
|
list_networks_response[0].specifyipranges,
|
|
True,
|
|
"The network is created with ip range but the flag is set to\
|
|
False after creating with overlapped ip range in diff vlan")
|
|
self.debug(
|
|
"Shared Network created for scope domain: %s" %
|
|
self.network2.id)
|
|
# Update network offering state from enabled to disabled.
|
|
NetworkOffering.update(
|
|
self.shared_network_offering,
|
|
self.api_client,
|
|
id=self.shared_network_offering.id,
|
|
state="disabled"
|
|
)
|
|
self.cleanup_networks.append(self.shared_network_offering)
|
|
return
|
|
|
|
@data(True, False)
|
|
@attr(tags=["advanced", "advancedns", "dvs"], required_hardware="false")
|
|
def test_restart_network(self, cleanup):
|
|
""" Test restart shared Network
|
|
|
|
# Steps
|
|
# 1. Create a shared network in an account
|
|
# 2. Deploy a VM in the network
|
|
# 3. Restart the network with cleanup true and false
|
|
# 4. List the router for the network and verify that publicip of
|
|
the router remain the same
|
|
"""
|
|
|
|
# Create admin account
|
|
account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
domainid=self.domain.id
|
|
)
|
|
self.cleanup_accounts.append(account)
|
|
|
|
physical_network, shared_vlan = get_free_vlan(
|
|
self.api_client, self.zone.id)
|
|
if shared_vlan is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
|
|
self.debug("Physical network found: %s" % physical_network.id)
|
|
|
|
# create network using the shared network offering created
|
|
self.testdata["shared_network"]["acltype"] = "Domain"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan
|
|
|
|
shared_network = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id,
|
|
)
|
|
|
|
self.cleanup_networks.append(shared_network)
|
|
|
|
self.debug(
|
|
"Shared Network created for scope domain: %s" %
|
|
shared_network.id)
|
|
|
|
VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
networkids=shared_network.id,
|
|
serviceofferingid=self.service_offering.id
|
|
)
|
|
|
|
list_router_response = Router.list(
|
|
self.api_client,
|
|
networkid=shared_network.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
validateList(list_router_response)[0],
|
|
PASS,
|
|
"Router list validation failed"
|
|
)
|
|
router = list_router_response[0]
|
|
# Store old values before restart
|
|
old_publicip = router.publicip
|
|
|
|
shared_network.restart(self.api_client, cleanup=cleanup)
|
|
|
|
# Get router details after restart
|
|
list_router_response = Router.list(
|
|
self.api_client,
|
|
networkid=shared_network.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
validateList(list_router_response)[0],
|
|
PASS,
|
|
"Router list validation failed"
|
|
)
|
|
router = list_router_response[0]
|
|
|
|
self.assertEqual(
|
|
router.publicip,
|
|
old_publicip,
|
|
"Public IP of the router should remain same after network restart"
|
|
)
|
|
return
|
|
|
|
@attr(tags=["advanced", "advancedns", "dvs"], required_hardware="false")
|
|
def test_reboot_router(self):
|
|
"""Test reboot router
|
|
|
|
# Steps
|
|
# 1. Create a shared network in an account
|
|
# 2. Deploy a VM in the network
|
|
# 3. Restart the router related to shared network
|
|
# 4. List the router for the network and verify that publicip of
|
|
the router remain the same
|
|
"""
|
|
|
|
# Create admin account
|
|
account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
domainid=self.domain.id
|
|
)
|
|
self.cleanup_accounts.append(account)
|
|
|
|
physical_network, shared_vlan = get_free_vlan(
|
|
self.api_client, self.zone.id)
|
|
if shared_vlan is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
|
|
self.debug("Physical network found: %s" % physical_network.id)
|
|
|
|
# create network using the shared network offering created
|
|
self.testdata["shared_network"]["acltype"] = "Domain"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan
|
|
|
|
shared_network = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id,
|
|
)
|
|
|
|
self.cleanup_networks.append(shared_network)
|
|
|
|
self.debug(
|
|
"Shared Network created for scope domain: %s" %
|
|
shared_network.id)
|
|
|
|
vm = VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
networkids=shared_network.id,
|
|
serviceofferingid=self.service_offering.id
|
|
)
|
|
self.cleanup_vms.append(vm)
|
|
|
|
list_router_response = Router.list(
|
|
self.api_client,
|
|
networkid=shared_network.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
validateList(list_router_response)[0],
|
|
PASS,
|
|
"Router list validation failed"
|
|
)
|
|
router = list_router_response[0]
|
|
# Store old values before restart
|
|
public_ip = router.publicip
|
|
|
|
self.debug("Rebooting the router with ID: %s" % router.id)
|
|
# Stop the router
|
|
cmd = rebootRouter.rebootRouterCmd()
|
|
cmd.id = router.id
|
|
self.api_client.rebootRouter(cmd)
|
|
|
|
isRouterRunningSuccessfully = False
|
|
|
|
# List routers to check state of router
|
|
retries_cnt = 6
|
|
while retries_cnt >= 0:
|
|
router_response = Router.list(
|
|
self.api_client,
|
|
id=router.id
|
|
)
|
|
if self.verifyRouterResponse(router_response, public_ip):
|
|
isRouterRunningSuccessfully = True
|
|
break
|
|
time.sleep(10)
|
|
retries_cnt = retries_cnt - 1
|
|
|
|
if not isRouterRunningSuccessfully:
|
|
self.fail(
|
|
"Router response after reboot is either is invalid\
|
|
or in stopped state")
|
|
return
|
|
|
|
@attr(tags=["advanced", "advancedns", "dvs"], required_hardware="false")
|
|
def test_stop_start_router(self):
|
|
"""Test stop and start router
|
|
|
|
# Steps
|
|
# 1. Create a shared network in an account
|
|
# 2. Deploy a VM in the network
|
|
# 3. Stop the router related to shared network and start it again
|
|
# 4. List the router for the network and verify that publicip of
|
|
the router remain the same
|
|
"""
|
|
|
|
# Create admin account
|
|
account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
domainid=self.domain.id
|
|
)
|
|
self.cleanup_accounts.append(account)
|
|
|
|
physical_network, shared_vlan = get_free_vlan(
|
|
self.api_client, self.zone.id)
|
|
if shared_vlan is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
|
|
self.debug("Physical network found: %s" % physical_network.id)
|
|
|
|
# create network using the shared network offering created
|
|
self.testdata["shared_network"]["acltype"] = "Domain"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan
|
|
|
|
shared_network = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id,
|
|
)
|
|
|
|
self.cleanup_networks.append(shared_network)
|
|
|
|
self.debug(
|
|
"Shared Network created for scope domain: %s" %
|
|
shared_network.id)
|
|
|
|
vm = VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
networkids=shared_network.id,
|
|
serviceofferingid=self.service_offering.id
|
|
)
|
|
self.cleanup_vms.append(vm)
|
|
|
|
list_router_response = Router.list(
|
|
self.api_client,
|
|
networkid=shared_network.id,
|
|
listall=True
|
|
)
|
|
self.assertEqual(
|
|
validateList(list_router_response)[0],
|
|
PASS,
|
|
"Router list validation failed"
|
|
)
|
|
router = list_router_response[0]
|
|
|
|
self.debug("Stopping the router with ID: %s" % router.id)
|
|
# Reboot the router
|
|
cmd = stopRouter.stopRouterCmd()
|
|
cmd.id = router.id
|
|
self.api_client.stopRouter(cmd)
|
|
|
|
response = verifyRouterState(self.api_client, router.id, "stopped")
|
|
exceptionOccured = response[0]
|
|
isNetworkInDesiredState = response[1]
|
|
exceptionMessage = response[2]
|
|
|
|
if (exceptionOccured or (not isNetworkInDesiredState)):
|
|
self.fail(exceptionMessage)
|
|
|
|
self.debug("Starting the router with ID: %s" % router.id)
|
|
# Reboot the router
|
|
cmd = startRouter.startRouterCmd()
|
|
cmd.id = router.id
|
|
self.api_client.startRouter(cmd)
|
|
|
|
response = verifyRouterState(self.api_client, router.id, "running")
|
|
exceptionOccured = response[0]
|
|
isNetworkInDesiredState = response[1]
|
|
exceptionMessage = response[2]
|
|
|
|
if (exceptionOccured or (not isNetworkInDesiredState)):
|
|
self.fail(exceptionMessage)
|
|
return
|
|
|
|
@attr(tags=["advanced", "advancedns", "dvs"], required_hardware="false")
|
|
def test_acquire_ip(self):
|
|
"""Test acquire IP in shared network
|
|
|
|
# Steps
|
|
# 1. Create a shared network in an account
|
|
# 2. Deploy a VM in the network
|
|
# 3. Acquire a public IP in the network
|
|
# 4. List the public IP by passing the id, it should be listed properly
|
|
# 5. Create Firewall and NAT rules for the public IP and verify that
|
|
ssh to vm works using the public IP
|
|
# 6. Disassociate the public IP and try to list the public IP
|
|
# 7. The list should be empty
|
|
"""
|
|
|
|
# Create admin account
|
|
account = Account.create(
|
|
self.api_client,
|
|
self.testdata["account"],
|
|
domainid=self.domain.id
|
|
)
|
|
self.cleanup_accounts.append(account)
|
|
|
|
physical_network, shared_vlan = get_free_vlan(
|
|
self.api_client, self.zone.id)
|
|
if shared_vlan is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
|
|
self.debug("Physical network found: %s" % physical_network.id)
|
|
|
|
# create network using the shared network offering created
|
|
self.testdata["shared_network"]["acltype"] = "Domain"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering_all_services.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan
|
|
|
|
shared_network = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
networkofferingid=self.shared_network_offering_all_services.id,
|
|
zoneid=self.zone.id,
|
|
)
|
|
|
|
self.cleanup_networks.append(shared_network)
|
|
|
|
self.debug(
|
|
"Shared Network created for scope domain: %s" %
|
|
shared_network.id)
|
|
|
|
vm = VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
networkids=shared_network.id,
|
|
serviceofferingid=self.service_offering.id
|
|
)
|
|
self.cleanup_vms.append(vm)
|
|
|
|
public_ip = PublicIPAddress.create(
|
|
self.api_client,
|
|
accountid=account.name,
|
|
zoneid=self.zone.id,
|
|
domainid=account.domainid,
|
|
networkid=shared_network.id)
|
|
|
|
# listPublicIpAddresses should return newly created public IP
|
|
list_pub_ip_addr_resp = PublicIPAddress.list(
|
|
self.api_client,
|
|
id=public_ip.ipaddress.id
|
|
)
|
|
self.assertEqual(
|
|
validateList(list_pub_ip_addr_resp)[0],
|
|
PASS,
|
|
"IP address list validation failed"
|
|
)
|
|
self.assertEqual(
|
|
list_pub_ip_addr_resp[0].id,
|
|
public_ip.ipaddress.id,
|
|
"Check Correct IP Address is returned in the List Call"
|
|
)
|
|
|
|
FireWallRule.create(
|
|
self.api_client,
|
|
ipaddressid=public_ip.ipaddress.id,
|
|
protocol='TCP',
|
|
cidrlist=[
|
|
self.testdata["fwrule"]["cidr"]],
|
|
startport=self.testdata["fwrule"]["startport"],
|
|
endport=self.testdata["fwrule"]["endport"])
|
|
|
|
NATRule.create(
|
|
self.api_client,
|
|
vm,
|
|
self.testdata["natrule"],
|
|
ipaddressid=public_ip.ipaddress.id,
|
|
networkid=shared_network.id)
|
|
|
|
SshClient(
|
|
public_ip.ipaddress.ipaddress,
|
|
vm.ssh_port,
|
|
vm.username,
|
|
vm.password
|
|
)
|
|
|
|
public_ip.delete(self.api_client)
|
|
|
|
list_pub_ip_addr_resp = PublicIPAddress.list(
|
|
self.api_client,
|
|
id=public_ip.ipaddress.id
|
|
)
|
|
|
|
self.assertEqual(
|
|
list_pub_ip_addr_resp,
|
|
None,
|
|
"Check if disassociated IP Address is no longer available"
|
|
)
|
|
return
|
|
|
|
@attr(tags=["advanced", "dvs"], required_hardware="true")
|
|
def test_guest_traffic_port_groups_shared_network(self):
|
|
""" Verify vcenter port groups are created for shared network
|
|
|
|
# Steps,
|
|
# 1. Create a shared network
|
|
# 2. Deploy a VM in shared network so that router is
|
|
# created
|
|
# 3. Verify that corresponding port groups are created
|
|
for guest traffic
|
|
"""
|
|
|
|
if self.hypervisor.lower() != "vmware":
|
|
self.skipTest("This test is intended for only vmware")
|
|
|
|
physical_network, shared_vlan = get_free_vlan(
|
|
self.api_client, self.zone.id)
|
|
if shared_vlan is None:
|
|
self.fail("Failed to get free vlan id for shared network")
|
|
|
|
self.testdata["shared_network_offering"]["specifyVlan"] = "True"
|
|
self.testdata["shared_network_offering"]["specifyIpRanges"] = "True"
|
|
|
|
# Create Network Offering
|
|
self.shared_network_offering = NetworkOffering.create(
|
|
self.api_client,
|
|
self.testdata["shared_network_offering"],
|
|
conservemode=False
|
|
)
|
|
|
|
# Update network offering state from disabled to enabled.
|
|
NetworkOffering.update(
|
|
self.shared_network_offering,
|
|
self.api_client,
|
|
id=self.shared_network_offering.id,
|
|
state="enabled"
|
|
)
|
|
|
|
# create network using the shared network offering created
|
|
self.testdata["shared_network"]["acltype"] = "Domain"
|
|
self.testdata["shared_network"][
|
|
"networkofferingid"] = self.shared_network_offering.id
|
|
self.testdata["shared_network"][
|
|
"physicalnetworkid"] = physical_network.id
|
|
self.testdata["shared_network"]["vlan"] = shared_vlan
|
|
|
|
self.network = Network.create(
|
|
self.api_client,
|
|
self.testdata["shared_network"],
|
|
networkofferingid=self.shared_network_offering.id,
|
|
zoneid=self.zone.id,
|
|
)
|
|
self.cleanup_networks.append(self.network)
|
|
|
|
vm = VirtualMachine.create(
|
|
self.api_client,
|
|
self.testdata["virtual_machine"],
|
|
networkids=self.network.id,
|
|
serviceofferingid=self.service_offering.id
|
|
)
|
|
self.cleanup_vms.append(vm)
|
|
|
|
routers = Router.list(self.api_client,
|
|
networkid=self.network.id,
|
|
listall=True)
|
|
|
|
self.assertEqual(validateList(routers)[0], PASS,
|
|
"No Router associated with the network found")
|
|
|
|
response = verifyGuestTrafficPortGroups(self.api_client,
|
|
self.config,
|
|
self.zone)
|
|
self.assertEqual(response[0], PASS, response[1])
|
|
return
|