| # 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 | |
| import 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 should 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( | |
| str( | |
| self.testdata["shared_network"]["startip"]), str( | |
| self.testdata["shared_network"]["endip"]))) | |
| if netaddr.IPAddress(str(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( | |
| str( | |
| self.testdata["shared_network"]["startip"]), str( | |
| self.testdata["shared_network"]["endip"]))) | |
| if netaddr.IPAddress(str(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( | |
| str( | |
| self.testdata["shared_network"]["startip"]), str( | |
| self.testdata["shared_network"]["endip"]))) | |
| if netaddr.IPAddress(str(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( | |
| str( | |
| self.testdata["shared_network"]["startip"]), str( | |
| self.testdata["shared_network"]["endip"]))) | |
| if netaddr.IPAddress(str(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( | |
| str( | |
| self.testdata["shared_network"]["startip"]), str( | |
| self.testdata["shared_network"]["endip"]))) | |
| if netaddr.IPAddress(str(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( | |
| str( | |
| self.testdata["shared_network"]["startip"]), str( | |
| self.testdata["shared_network"]["endip"]))) | |
| if netaddr.IPAddress(str(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 should 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.assertEqual( | |
| 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.assertEqual( | |
| 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.assertEqual( | |
| 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.assertEqual( | |
| 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") | |
| exceptionOccurred = response[0] | |
| isNetworkInDesiredState = response[1] | |
| exceptionMessage = response[2] | |
| if (exceptionOccurred 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") | |
| exceptionOccurred = response[0] | |
| isNetworkInDesiredState = response[1] | |
| exceptionMessage = response[2] | |
| if (exceptionOccurred or (not isNetworkInDesiredState)): | |
| self.fail(exceptionMessage) | |
| return | |
| # @attr(tags=["advanced", "advancedns", "dvs"], required_hardware="false") | |
| @attr(tags=["TODO"], 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=["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 |