# 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 = # - 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 = # 8. delete the admin account and the user account # Validations, # 1. listAccounts name=admin-XABU1, state=enabled returns account # 2. listPhysicalNetworks should return at least one active # physical network # 3. listNetworkOfferings - name=mysharedoffering , should list # offering in disabled state # 4. listNetworkOfferings - name=mysharedoffering, should list # enabled offering # 5. listNetworks - name = mysharednetwork should list the # successfully created network, verify the guestIp ranges and # CIDR are as given in the createNetwork call # 6. No checks reqd # 7. a. listVirtualMachines should show both VMs in running state # in the user account and the admin account # b. VM's IPs shoud be in the range of the shared network ip ranges # Create admin account self.admin_account = Account.create( self.api_client, self.testdata["account"], admin=True, domainid=self.domain.id ) self.cleanup_accounts.append(self.admin_account) # verify that the account got created with state enabled list_accounts_response = Account.list( self.api_client, id=self.admin_account.id, listall=True ) self.assertEqual( isinstance(list_accounts_response, list), True, "listAccounts returned invalid object in response." ) self.assertNotEqual( len(list_accounts_response), 0, "listAccounts returned empty list." ) self.assertEqual( list_accounts_response[0].state, "enabled", "The admin account created is not enabled." ) self.debug("Admin type account created: %s" % self.admin_account.name) # Create an user account self.user_account = Account.create( self.api_client, self.testdata["account"], admin=False, domainid=self.domain.id ) self.cleanup_accounts.append(self.user_account) # verify that the account got created with state enabled list_accounts_response = Account.list( self.api_client, id=self.user_account.id, listall=True ) self.assertEqual( isinstance(list_accounts_response, list), True, "listAccounts returned invalid object in response." ) self.assertNotEqual( len(list_accounts_response), 0, "listAccounts returned empty list." ) self.assertEqual( list_accounts_response[0].state, "enabled", "The user account created is not enabled." ) self.debug("User type account created: %s" % self.user_account.name) physical_network, shared_vlan = get_free_vlan( self.api_client, self.zone.id) if shared_vlan is None: self.fail("Failed to get free vlan id for shared network") self.debug("Physical network found: %s" % physical_network.id) self.testdata["shared_network_offering"]["specifyVlan"] = "True" self.testdata["shared_network_offering"]["specifyIpRanges"] = "True" # Create Network Offering self.shared_network_offering = NetworkOffering.create( self.api_client, self.testdata["shared_network_offering"], conservemode=False ) # Verify that the network offering got created list_network_offerings_response = NetworkOffering.list( self.api_client, id=self.shared_network_offering.id ) self.assertEqual( isinstance(list_network_offerings_response, list), True, "listNetworkOfferings returned invalid object in response." ) self.assertNotEqual( len(list_network_offerings_response), 0, "listNetworkOfferings returned empty list." ) self.assertEqual( list_network_offerings_response[0].state, "Disabled", "The network offering created should be bydefault disabled." ) self.debug( "Shared Network offering created: %s" % self.shared_network_offering.id) # Update network offering state from disabled to enabled. NetworkOffering.update( self.shared_network_offering, self.api_client, id=self.shared_network_offering.id, state="enabled" ) # Verify that the state of the network offering is updated list_network_offerings_response = NetworkOffering.list( self.api_client, id=self.shared_network_offering.id ) self.assertEqual( isinstance(list_network_offerings_response, list), True, "listNetworkOfferings returned invalid object in response." ) self.assertNotEqual( len(list_network_offerings_response), 0, "listNetworkOfferings returned empty list." ) self.assertEqual( list_network_offerings_response[0].state, "Enabled", "The network offering state should get updated to Enabled." ) # create network using the shared network offering created self.testdata["shared_network"]["acltype"] = "Domain" self.testdata["shared_network"][ "networkofferingid"] = self.shared_network_offering.id self.testdata["shared_network"][ "physicalnetworkid"] = physical_network.id self.testdata["shared_network"]["vlan"] = shared_vlan self.network = Network.create( self.api_client, self.testdata["shared_network"], networkofferingid=self.shared_network_offering.id, zoneid=self.zone.id, ) self.cleanup_networks.append(self.network) list_networks_response = Network.list( self.api_client, id=self.network.id ) self.assertEqual( isinstance(list_networks_response, list), True, "listNetworks returned invalid object in response." ) self.assertNotEqual( len(list_networks_response), 0, "listNetworks returned empty list." ) self.assertEqual( list_networks_response[0].specifyipranges, True, "The network is created with ip range but the flag is\ set to False.") self.debug( "Shared Network created for scope domain: %s" % self.network.id) self.admin_account_virtual_machine = VirtualMachine.create( self.api_client, self.testdata["virtual_machine"], networkids=self.network.id, serviceofferingid=self.service_offering.id ) self.cleanup_vms.append(self.admin_account_virtual_machine) vms = VirtualMachine.list( self.api_client, id=self.admin_account_virtual_machine.id, listall=True ) self.assertEqual( isinstance(vms, list), True, "listVirtualMachines returned invalid object in response." ) self.assertNotEqual( len(vms), 0, "listVirtualMachines returned empty list." ) self.debug( "Virtual Machine created: %s" % self.admin_account_virtual_machine.id) ip_range = list( netaddr.iter_iprange( 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 = # - 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 = # 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 = # - 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 = # 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 = # - 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 = # 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 = # - 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 = # - gw = 172.16.15.1, startip = 172.16.15.2 , endip = 172.16.15.200 # - netmask=255.255.255.0 # - scope = all # 6. createNetwork again with same VLAN but different IP ranges and # gateway # 7. delete admin account # Validations, # 1. listAccounts state=enabled returns your account # 2. listNetworkOfferings - name=mysharedoffering , should list # offering in disabled state # 3. listNetworkOfferings - name=mysharedoffering, should list # enabled offering # 4. listPhysicalNetworks should return at least one active # physical network # 5. network creation shoud PASS # 6. network creation should FAIL since VLAN is already used by # previously created network # Create admin account self.admin_account = Account.create( self.api_client, self.testdata["account"], admin=True, domainid=self.domain.id ) self.cleanup_accounts.append(self.admin_account) # verify that the account got created with state enabled list_accounts_response = Account.list( self.api_client, id=self.admin_account.id, listall=True ) self.assertEqual( isinstance(list_accounts_response, list), True, "listAccounts returned invalid object in response." ) self.assertNotEqual( len(list_accounts_response), 0, "listAccounts returned empty list." ) self.assertEqual( list_accounts_response[0].state, "enabled", "The admin account created is not enabled." ) self.debug("Admin account created: %s" % self.admin_account.id) physical_network, shared_vlan = get_free_vlan( self.api_client, self.zone.id) if shared_vlan is None: self.fail("Failed to get free vlan id for shared network") self.debug("Physical Network found: %s" % physical_network.id) self.testdata["shared_network_offering"]["specifyVlan"] = "True" self.testdata["shared_network_offering"]["specifyIpRanges"] = "True" # Create Network Offering self.shared_network_offering = NetworkOffering.create( self.api_client, self.testdata["shared_network_offering"], conservemode=False ) # Verify that the network offering got created list_network_offerings_response = NetworkOffering.list( self.api_client, id=self.shared_network_offering.id ) self.assertEqual( isinstance(list_network_offerings_response, list), True, "listNetworkOfferings returned invalid object in response." ) self.assertNotEqual( len(list_network_offerings_response), 0, "listNetworkOfferings returned empty list." ) self.assertEqual( list_network_offerings_response[0].state, "Disabled", "The network offering created should be bydefault disabled." ) self.debug( "Shared Network Offering created: %s" % self.shared_network_offering.id) # Update network offering state from disabled to enabled. NetworkOffering.update( self.shared_network_offering, self.api_client, id=self.shared_network_offering.id, state="enabled" ) # Verify that the state of the network offering is updated list_network_offerings_response = NetworkOffering.list( self.api_client, id=self.shared_network_offering.id ) self.assertEqual( isinstance(list_network_offerings_response, list), True, "listNetworkOfferings returned invalid object in response." ) self.assertNotEqual( len(list_network_offerings_response), 0, "listNetworkOfferings returned empty list." ) self.assertEqual( list_network_offerings_response[0].state, "Enabled", "The network offering state should get updated to Enabled." ) # create network using the shared network offering created self.testdata["shared_network"]["acltype"] = "Domain" self.testdata["shared_network"][ "networkofferingid"] = self.shared_network_offering.id self.testdata["shared_network"][ "physicalnetworkid"] = physical_network.id self.testdata["shared_network"]["vlan"] = shared_vlan self.debug( "Creating a shared network in non-cloudstack VLAN %s" % shared_vlan) self.network = Network.create( self.api_client, self.testdata["shared_network"], networkofferingid=self.shared_network_offering.id, zoneid=self.zone.id, ) self.cleanup_networks.append(self.network) list_networks_response = Network.list( self.api_client, id=self.network.id ) self.assertEqual( isinstance(list_networks_response, list), True, "listNetworks returned invalid object in response." ) self.assertNotEqual( len(list_networks_response), 0, "listNetworks returned empty list." ) self.assertEqual( list_networks_response[0].specifyipranges, True, "The network is created with ip range but the flag is\ set to False.") self.debug("Network created: %s" % self.network.id) shared_network_subnet_number = random.randrange(1, 254) self.testdata["shared_network"]["gateway"] = "172.16." + \ str(shared_network_subnet_number) + ".1" self.testdata["shared_network"]["startip"] = "172.16." + \ str(shared_network_subnet_number) + ".2" self.testdata["shared_network"]["endip"] = "172.16." + \ str(shared_network_subnet_number) + ".20" self.testdata["shared_network"]["acltype"] = "domain" self.testdata["shared_network"][ "networkofferingid"] = self.shared_network_offering.id self.testdata["shared_network"][ "physicalnetworkid"] = physical_network.id try: self.network1 = Network.create( self.api_client, self.testdata["shared_network"], networkofferingid=self.shared_network_offering.id, zoneid=self.zone.id, ) self.cleanup_networks.append(self.network1) self.fail( "Network got created with used vlan id, which is invalid") except Exception as e: self.debug( "Network creation failed because the valn id being used by\ another network. Exception: %s" % e) @attr(tags=["advanced", "advancedns"], required_hardware="false") def test_deployVM_multipleSharedNetwork(self): """ Test Vm deployment with multiple shared networks """ # Steps, # 0. create a user account # 1. Create two shared Networks (scope=ALL, different IP ranges) # 2. deployVirtualMachine in both the above networkids within the # user account # 3. delete the user account # Validations, # 1. shared networks should be created successfully # 2. a. VM should deploy successfully # b. VM should be deployed in both networks and have IP in both the # networks # Create admin account self.admin_account = Account.create( self.api_client, self.testdata["account"], admin=True, domainid=self.domain.id ) self.cleanup_accounts.append(self.admin_account) # verify that the account got created with state enabled list_accounts_response = Account.list( self.api_client, id=self.admin_account.id, listall=True ) self.assertEqual( isinstance(list_accounts_response, list), True, "listAccounts returned invalid object in response." ) self.assertNotEqual( len(list_accounts_response), 0, "listAccounts returned empty list." ) self.assertEqual( list_accounts_response[0].state, "enabled", "The admin account created is not enabled." ) self.debug("Admin account created: %s" % self.admin_account.id) physical_network, shared_vlan = get_free_vlan( self.api_client, self.zone.id) if shared_vlan is None: self.fail("Failed to get free vlan id for shared network") self.debug("Physical Network found: %s" % physical_network.id) self.testdata["shared_network_offering"]["specifyVlan"] = "True" self.testdata["shared_network_offering"]["specifyIpRanges"] = "True" # Create Network Offering self.shared_network_offering = NetworkOffering.create( self.api_client, self.testdata["shared_network_offering"], conservemode=False ) # Verify that the network offering got created list_network_offerings_response = NetworkOffering.list( self.api_client, id=self.shared_network_offering.id ) self.assertEqual( isinstance(list_network_offerings_response, list), True, "listNetworkOfferings returned invalid object in response." ) self.assertNotEqual( len(list_network_offerings_response), 0, "listNetworkOfferings returned empty list." ) self.assertEqual( list_network_offerings_response[0].state, "Disabled", "The network offering created should be bydefault disabled." ) self.debug( "Shared Network offering created: %s" % self.shared_network_offering.id) # Update network offering state from disabled to enabled. NetworkOffering.update( self.shared_network_offering, self.api_client, id=self.shared_network_offering.id, state="enabled" ) # Verify that the state of the network offering is updated list_network_offerings_response = NetworkOffering.list( self.api_client, id=self.shared_network_offering.id ) self.assertEqual( isinstance(list_network_offerings_response, list), True, "listNetworkOfferings returned invalid object in response." ) self.assertNotEqual( len(list_network_offerings_response), 0, "listNetworkOfferings returned empty list." ) self.assertEqual( list_network_offerings_response[0].state, "Enabled", "The network offering state should get updated to Enabled." ) # create network using the shared network offering created self.testdata["shared_network"]["acltype"] = "domain" self.testdata["shared_network"][ "networkofferingid"] = self.shared_network_offering.id self.testdata["shared_network"][ "physicalnetworkid"] = physical_network.id self.testdata["shared_network"]["vlan"] = shared_vlan self.network = Network.create( self.api_client, self.testdata["shared_network"], networkofferingid=self.shared_network_offering.id, zoneid=self.zone.id, ) self.cleanup_networks.append(self.network) list_networks_response = Network.list( self.api_client, id=self.network.id ) self.assertEqual( isinstance(list_networks_response, list), True, "listNetworks returned invalid object in response." ) self.assertNotEqual( len(list_networks_response), 0, "listNetworks returned empty list." ) self.assertEqual( list_networks_response[0].specifyipranges, True, "The network is created with ip range but the flag is\ set to False.") self.debug("Shared Network created: %s" % self.network.id) shared_network_subnet_number = random.randrange(1, 254) self.testdata["shared_network"]["gateway"] = "172.16." + \ str(shared_network_subnet_number) + ".1" self.testdata["shared_network"]["startip"] = "172.16." + \ str(shared_network_subnet_number) + ".2" self.testdata["shared_network"]["endip"] = "172.16." + \ str(shared_network_subnet_number) + ".20" self.testdata["shared_network"]["acltype"] = "domain" self.testdata["shared_network"][ "networkofferingid"] = self.shared_network_offering.id self.testdata["shared_network"][ "physicalnetworkid"] = physical_network.id shared_vlan = get_free_vlan(self.api_client, self.zone.id)[1] if shared_vlan is None: self.fail("Failed to get free vlan id for shared network") self.testdata["shared_network"]["vlan"] = shared_vlan self.network1 = Network.create( self.api_client, self.testdata["shared_network"], networkofferingid=self.shared_network_offering.id, zoneid=self.zone.id, ) self.cleanup_networks.append(self.network1) list_networks_response = Network.list( self.api_client, id=self.network1.id ) self.assertEqual( isinstance(list_networks_response, list), True, "listNetworks returned invalid object in response." ) self.assertNotEqual( len(list_networks_response), 0, "listNetworks returned empty list." ) self.assertEqual( list_networks_response[0].specifyipranges, True, "The network is created with ip range but the flag is\ set to False.") self.debug("Network created: %s" % self.network1.id) self.network_admin_account_virtual_machine = VirtualMachine.create( self.api_client, self.testdata["virtual_machine"], accountid=self.admin_account.name, domainid=self.admin_account.domainid, networkids=self.network.id, serviceofferingid=self.service_offering.id ) vms = VirtualMachine.list( self.api_client, id=self.network_admin_account_virtual_machine.id, listall=True ) self.assertEqual( isinstance(vms, list), True, "listVirtualMachines returned invalid object in response." ) self.assertNotEqual( len(vms), 0, "listVirtualMachines returned empty list." ) self.debug( "Virtual Machine created: %s" % self.network_admin_account_virtual_machine.id) self.assertTrue( self.network_admin_account_virtual_machine.nic[0].ipaddress is not None, "ip should be assigned to running virtual machine") self.network1_admin_account_virtual_machine = VirtualMachine.create( self.api_client, self.testdata["virtual_machine"], accountid=self.admin_account.name, domainid=self.admin_account.domainid, networkids=self.network1.id, serviceofferingid=self.service_offering.id ) vms = VirtualMachine.list( self.api_client, id=self.network1_admin_account_virtual_machine.id, listall=True ) self.assertEqual( isinstance(vms, list), True, "listVirtualMachines returned invalid object in response." ) self.assertNotEqual( len(vms), 0, "listVirtualMachines returned empty list." ) self.debug( "Virtual Machine created: %s" % self.network1_admin_account_virtual_machine.id) self.assertTrue( self.network1_admin_account_virtual_machine.nic[0].ipaddress is not None, "ip should be assigned to running virtual machine") @attr(tags=["advanced", "advancedns"], required_hardware="true") def test_deployVM_isolatedAndShared(self): """ Test VM deployment in shared and isolated networks """ # Steps, # 0. create a user account # 1. Create one shared Network (scope=ALL, different IP ranges) # 2. Create one Isolated Network # 3. deployVirtualMachine in both the above networkids within # the user account # 4. apply FW rule and enable PF for port 22 for guest VM on # isolated network # 5. delete the user account # Validations, # 1. shared network should be created successfully # 2. isolated network should be created successfully # 3. # a. VM should deploy successfully # b. VM should be deployed in both networks and have IP in both # the networks # 4. FW and PF should apply successfully, ssh into the VM should work # over isolated network # Create admin account self.admin_account = Account.create( self.api_client, self.testdata["account"], admin=True, domainid=self.domain.id ) self.cleanup_accounts.append(self.admin_account) # verify that the account got created with state enabled list_accounts_response = Account.list( self.api_client, id=self.admin_account.id, listall=True ) self.assertEqual( isinstance(list_accounts_response, list), True, "listAccounts returned invalid object in response." ) self.assertNotEqual( len(list_accounts_response), 0, "listAccounts returned empty list." ) self.assertEqual( list_accounts_response[0].state, "enabled", "The admin account created is not enabled." ) self.debug("Admin type account created: %s" % self.admin_account.name) self.testdata["shared_network_offering"]["specifyVlan"] = "True" self.testdata["shared_network_offering"]["specifyIpRanges"] = "True" # Create Network Offering self.shared_network_offering = NetworkOffering.create( self.api_client, self.testdata["shared_network_offering"], conservemode=False ) # Verify that the network offering got created list_network_offerings_response = NetworkOffering.list( self.api_client, id=self.shared_network_offering.id ) self.assertEqual( isinstance(list_network_offerings_response, list), True, "listNetworkOfferings returned invalid object in response." ) self.assertNotEqual( len(list_network_offerings_response), 0, "listNetworkOfferings returned empty list." ) self.assertEqual( list_network_offerings_response[0].state, "Disabled", "The network offering created should be bydefault disabled." ) self.debug( "Shared Network offering created: %s" % self.shared_network_offering.id) # Update network offering state from disabled to enabled. NetworkOffering.update( self.shared_network_offering, self.api_client, id=self.shared_network_offering.id, state="enabled" ) # Verify that the state of the network offering is updated list_network_offerings_response = NetworkOffering.list( self.api_client, id=self.shared_network_offering.id ) self.assertEqual( isinstance(list_network_offerings_response, list), True, "listNetworkOfferings returned invalid object in response." ) self.assertNotEqual( len(list_network_offerings_response), 0, "listNetworkOfferings returned empty list." ) self.assertEqual( list_network_offerings_response[0].state, "Enabled", "The network offering state should get updated to Enabled." ) self.isolated_network_offering = NetworkOffering.create( self.api_client, self.testdata["isolated_network_offering"], conservemode=False ) # Update network offering state from disabled to enabled. NetworkOffering.update( self.isolated_network_offering, self.api_client, id=self.isolated_network_offering.id, state="enabled" ) # Verify that the state of the network offering is updated list_network_offerings_response = NetworkOffering.list( self.api_client, id=self.isolated_network_offering.id ) self.assertEqual( isinstance(list_network_offerings_response, list), True, "listNetworkOfferings returned invalid object in response." ) self.assertNotEqual( len(list_network_offerings_response), 0, "listNetworkOfferings returned empty list." ) self.assertEqual( list_network_offerings_response[0].state, "Enabled", "The isolated network offering state should get\ updated to Enabled.") self.debug( "Isolated Network Offering created: %s" % self.isolated_network_offering.id) physical_network, shared_vlan = get_free_vlan( self.api_client, self.zone.id) if shared_vlan is None: self.fail("Failed to get free vlan id for shared network") # create network using the shared network offering created self.testdata["shared_network"]["acltype"] = "domain" self.testdata["shared_network"][ "networkofferingid"] = self.shared_network_offering.id self.testdata["shared_network"][ "physicalnetworkid"] = physical_network.id self.testdata["shared_network"]["vlan"] = shared_vlan self.shared_network = Network.create( self.api_client, self.testdata["shared_network"], accountid=self.admin_account.name, domainid=self.admin_account.domainid, networkofferingid=self.shared_network_offering.id, zoneid=self.zone.id ) self.cleanup_networks.append(self.shared_network) list_networks_response = Network.list( self.api_client, id=self.shared_network.id ) self.assertEqual( isinstance(list_networks_response, list), True, "listNetworks returned invalid object in response." ) self.assertNotEqual( len(list_networks_response), 0, "listNetworks returned empty list." ) self.assertEqual( list_networks_response[0].specifyipranges, True, "The network is created with ip range but the flag is\ set to False.") self.debug("Shared Network created: %s" % self.shared_network.id) self.isolated_network = Network.create( self.api_client, self.testdata["isolated_network"], accountid=self.admin_account.name, domainid=self.admin_account.domainid, networkofferingid=self.isolated_network_offering.id, zoneid=self.zone.id ) self.cleanup_networks.append(self.isolated_network) list_networks_response = Network.list( self.api_client, id=self.isolated_network.id ) self.assertEqual( isinstance(list_networks_response, list), True, "listNetworks returned invalid object in response." ) self.assertNotEqual( len(list_networks_response), 0, "listNetworks returned empty list." ) self.debug("Isolated Network created: %s" % self.isolated_network.id) self.shared_network_admin_account_virtual_machine = \ VirtualMachine.create( self.api_client, self.testdata["virtual_machine"], accountid=self.admin_account.name, domainid=self.admin_account.domainid, networkids=self.shared_network.id, serviceofferingid=self.service_offering.id ) vms = VirtualMachine.list( self.api_client, id=self.shared_network_admin_account_virtual_machine.id, listall=True ) self.assertEqual( isinstance(vms, list), True, "listVirtualMachines returned invalid object in response." ) self.assertNotEqual( len(vms), 0, "listVirtualMachines returned empty list." ) self.debug( "Virtual Machine created: %s" % self.shared_network_admin_account_virtual_machine.id) self.assertTrue( self.shared_network_admin_account_virtual_machine.nic[0].ipaddress is not None, "ip should be assigned to running virtual machine") self.isolated_network_admin_account_virtual_machine = \ VirtualMachine.create( self.api_client, self.testdata["virtual_machine"], accountid=self.admin_account.name, domainid=self.admin_account.domainid, networkids=self.isolated_network.id, serviceofferingid=self.service_offering.id ) vms = VirtualMachine.list( self.api_client, id=self.isolated_network_admin_account_virtual_machine.id, listall=True ) self.assertEqual( isinstance(vms, list), True, "listVirtualMachines returned invalid object in response." ) self.assertNotEqual( len(vms), 0, "listVirtualMachines returned empty list." ) self.debug( "Virtual Machine created: %s" % self.isolated_network_admin_account_virtual_machine.id) self.assertTrue( self.isolated_network_admin_account_virtual_machine.nic[0].ipaddress is not None, "ip should be assigned to running virtual machine") self.debug( "Associating public IP for account: %s" % self.admin_account.name) self.public_ip = PublicIPAddress.create( self.api_client, accountid=self.admin_account.name, zoneid=self.zone.id, domainid=self.admin_account.domainid, networkid=self.isolated_network.id ) self.debug( "Associated %s with network %s" % (self.public_ip.ipaddress.ipaddress, self.isolated_network.id)) self.debug( "Creating PF rule for IP address: %s" % self.public_ip.ipaddress.ipaddress) public_ip = self.public_ip.ipaddress # Enable Static NAT for VM StaticNATRule.enable( self.api_client, public_ip.id, self.isolated_network_admin_account_virtual_machine.id ) self.debug("Enabled static NAT for public IP ID: %s" % public_ip.id) # Create Firewall rule on source NAT fw_rule = FireWallRule.create( self.api_client, ipaddressid=self.public_ip.ipaddress.id, protocol='TCP', cidrlist=[self.testdata["fwrule"]["cidr"]], startport=self.testdata["fwrule"]["startport"], endport=self.testdata["fwrule"]["endport"] ) self.debug("Created firewall rule: %s" % fw_rule.id) fw_rules = FireWallRule.list( self.api_client, id=fw_rule.id ) self.assertEqual( isinstance(fw_rules, list), True, "List fw rules should return a valid firewall rules" ) self.assertNotEqual( len(fw_rules), 0, "Length of fw rules response should not be zero" ) # Should be able to SSH VM try: self.debug( "SSH into VM: %s" % self.isolated_network_admin_account_virtual_machine.id) self.isolated_network_admin_account_virtual_machine.get_ssh_client( ipaddress=self.public_ip.ipaddress.ipaddress) except Exception as e: self.fail( "SSH Access failed for %s: %s" % (self.isolated_network_admin_account_virtual_machine.ipaddress, e)) @attr(tags=["advanced", "advancedns"], required_hardware="false") def test_networkWithsubdomainaccessTrue(self): """ Test Shared Network with subdomainaccess=True """ # Steps, # 1. create Network using shared network offering for scope=Account # and subdomainaccess=true. # Validations, # (Expected) API should fail saying that subdomainaccess cannot be # given when scope is Account # Create admin account self.admin_account = Account.create( self.api_client, self.testdata["account"], admin=True, domainid=self.domain.id ) self.cleanup_accounts.append(self.admin_account) # verify that the account got created with state enabled list_accounts_response = Account.list( self.api_client, id=self.admin_account.id, listall=True ) self.assertEqual( isinstance(list_accounts_response, list), True, "listAccounts returned invalid object in response." ) self.assertNotEqual( len(list_accounts_response), 0, "listAccounts returned empty list." ) self.assertEqual( list_accounts_response[0].state, "enabled", "The admin account created is not enabled." ) self.debug("Admin type account created: %s" % self.admin_account.id) physical_network, shared_vlan = get_free_vlan( self.api_client, self.zone.id) if shared_vlan is None: self.fail("Failed to get free vlan id for shared network") self.debug("Physical Network found: %s" % physical_network.id) self.testdata["shared_network_offering"]["specifyVlan"] = "True" self.testdata["shared_network_offering"]["specifyIpRanges"] = "True" # Create Network Offering self.shared_network_offering = NetworkOffering.create( self.api_client, self.testdata["shared_network_offering"], conservemode=False ) # Verify that the network offering got created list_network_offerings_response = NetworkOffering.list( self.api_client, id=self.shared_network_offering.id ) self.assertEqual( isinstance(list_network_offerings_response, list), True, "listNetworkOfferings returned invalid object in response." ) self.assertNotEqual( len(list_network_offerings_response), 0, "listNetworkOfferings returned empty list." ) self.assertEqual( list_network_offerings_response[0].state, "Disabled", "The network offering created should be bydefault disabled." ) self.debug( "Shared Network Offering created: %s" % self.shared_network_offering.id) # Update network offering state from disabled to enabled. NetworkOffering.update( self.shared_network_offering, self.api_client, id=self.shared_network_offering.id, state="enabled" ) # Verify that the state of the network offering is updated list_network_offerings_response = NetworkOffering.list( self.api_client, id=self.shared_network_offering.id ) self.assertEqual( isinstance(list_network_offerings_response, list), True, "listNetworkOfferings returned invalid object in response." ) self.assertNotEqual( len(list_network_offerings_response), 0, "listNetworkOfferings returned empty list." ) self.assertEqual( list_network_offerings_response[0].state, "Enabled", "The network offering state should get updated to Enabled." ) # create network using the shared network offering created self.testdata["shared_network"]["acltype"] = "Account" self.testdata["shared_network"][ "networkofferingid"] = self.shared_network_offering.id self.testdata["shared_network"][ "physicalnetworkid"] = physical_network.id self.testdata["shared_network"]["vlan"] = shared_vlan self.testdata["shared_network"]["subdomainaccess"] = "True" try: self.network = Network.create( self.api_client, self.testdata["shared_network"], accountid=self.admin_account.name, domainid=self.admin_account.domainid, networkofferingid=self.shared_network_offering.id, zoneid=self.zone.id ) self.fail("Network creation should fail.") except: self.debug( "Network creation failed because subdomainaccess parameter was\ passed when scope was account.") @attr(tags=["advanced", "advancedns"], required_hardware="false") def test_networkWithsubdomainaccessFalse(self): """ Test shared Network with subdomainaccess=False """ # Steps, # 1. create Network using shared network offering for scope=Account # and subdomainaccess=false # Validations, # (Expected) API should fail saying that subdomainaccess cannot be # given when scope is Account # Create admin account self.admin_account = Account.create( self.api_client, self.testdata["account"], admin=True, domainid=self.domain.id ) self.cleanup_accounts.append(self.admin_account) # verify that the account got created with state enabled list_accounts_response = Account.list( self.api_client, id=self.admin_account.id, listall=True ) self.assertEqual( isinstance(list_accounts_response, list), True, "listAccounts returned invalid object in response." ) self.assertNotEqual( len(list_accounts_response), 0, "listAccounts returned empty list." ) self.assertEqual( list_accounts_response[0].state, "enabled", "The admin account created is not enabled." ) self.debug("Admin type account created: %s" % self.admin_account.id) physical_network, shared_vlan = get_free_vlan( self.api_client, self.zone.id) if shared_vlan is None: self.fail("Failed to get free vlan id for shared network") self.debug("Physical Network found: %s" % physical_network.id) self.testdata["shared_network_offering"]["specifyVlan"] = "True" self.testdata["shared_network_offering"]["specifyIpRanges"] = "True" # Create Network Offering self.shared_network_offering = NetworkOffering.create( self.api_client, self.testdata["shared_network_offering"], conservemode=False ) # Verify that the network offering got created list_network_offerings_response = NetworkOffering.list( self.api_client, id=self.shared_network_offering.id ) self.assertEqual( isinstance(list_network_offerings_response, list), True, "listNetworkOfferings returned invalid object in response." ) self.assertNotEqual( len(list_network_offerings_response), 0, "listNetworkOfferings returned empty list." ) self.assertEqual( list_network_offerings_response[0].state, "Disabled", "The network offering created should be bydefault disabled." ) self.debug( "Shared Network Offering created: %s" % self.shared_network_offering.id) # Update network offering state from disabled to enabled. NetworkOffering.update( self.shared_network_offering, self.api_client, id=self.shared_network_offering.id, state="enabled" ) # Verify that the state of the network offering is updated list_network_offerings_response = NetworkOffering.list( self.api_client, id=self.shared_network_offering.id ) self.assertEqual( isinstance(list_network_offerings_response, list), True, "listNetworkOfferings returned invalid object in response." ) self.assertNotEqual( len(list_network_offerings_response), 0, "listNetworkOfferings returned empty list." ) self.assertEqual( list_network_offerings_response[0].state, "Enabled", "The network offering state should get updated to Enabled." ) # create network using the shared network offering created self.testdata["shared_network"]["acltype"] = "Account" self.testdata["shared_network"][ "networkofferingid"] = self.shared_network_offering.id self.testdata["shared_network"][ "physicalnetworkid"] = physical_network.id self.testdata["shared_network"]["vlan"] = shared_vlan self.testdata["shared_network"]["subdomainaccess"] = "False" try: self.network = Network.create( self.api_client, self.testdata["shared_network"], accountid=self.admin_account.name, domainid=self.admin_account.domainid, networkofferingid=self.shared_network_offering.id, zoneid=self.zone.id ) self.fail("Network creation should fail.") except: self.debug( "Network creation failed because subdomainaccess parameter\ was passed when scope was account.") @attr(tags=["advanced"], required_hardware="false") def test_escalation_ES1621(self): """ @summary: ES1621:Allow creating shared networks with overlapping ip ranges in different vlans @steps: Step1: Create an Admin account for the test Step2: Create shared network offering Step3: Update the network offering to Enabled state Step4: list network offering Step5: Create network with above offering Step6: List netwokrs and verify the network created in step5 in the response Step7: Create another network with offering,vlan and ip range same as in step6 Step8: Verify that network creationin Step7 should fail Step9: Repeat step6 with diff vlan but same ip range and network offering Step10: List netwokrs and verify the network created in step9 in the response Step11: Dislable network offering for the cleanup to delete at the end of the test """ # Creating Admin account self.admin_account = Account.create( self.api_client, self.testdata["account"], admin=True, domainid=self.domain.id ) self.cleanup_accounts.append(self.admin_account) # verify that the account got created with state enabled list_accounts_response = Account.list( self.api_client, id=self.admin_account.id, listall=True ) status = validateList(list_accounts_response) self.assertEqual( PASS, status[0], "listAccounts returned invalid object in response" ) self.assertEqual( list_accounts_response[0].state, "enabled", "The admin account created is not enabled." ) self.debug("Admin type account created: %s" % self.admin_account.name) physical_network, shared_vlan = get_free_vlan( self.api_client, self.zone.id) if shared_vlan is None: self.fail("Failed to get free vlan id for shared network") self.debug("Physical network found: %s" % physical_network.id) self.testdata["shared_network_offering"]["specifyVlan"] = "True" self.testdata["shared_network_offering"]["specifyIpRanges"] = "True" # Create Network Offering self.shared_network_offering = NetworkOffering.create( self.api_client, self.testdata["shared_network_offering"], conservemode=False ) # Verify that the network offering got created list_network_offerings_response = NetworkOffering.list( self.api_client, id=self.shared_network_offering.id ) status = validateList(list_network_offerings_response) self.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