def test_vxlan_update_for_lr(self): project = self._vnc_lib.project_read( fq_name=['default-domain', 'default-project']) project.set_vxlan_routing(True) self._vnc_lib.project_update(project) mock_zk = self._api_server._db_conn._zk_db # Create Logical Router lr = LogicalRouter('router-test-v4-%s' % self.id(), project) lr.set_vxlan_network_identifier('5001') lr.set_logical_router_type('vxlan-routing') lr_uuid = self._vnc_lib.logical_router_create(lr) lr_read = self._vnc_lib.logical_router_read(id=lr_uuid) vxlan_id = lr_read.get_vxlan_network_identifier() self.assertEqual(vxlan_id, '5001') lr.set_vxlan_network_identifier('5002') self._vnc_lib.logical_router_update(lr) lr_read = self._vnc_lib.logical_router_read(id=lr_uuid) vxlan_id = lr_read.get_vxlan_network_identifier() self.assertEqual(vxlan_id, '5002') int_vn_name = get_lr_internal_vn_name(lr_uuid) int_vn_fqname = ['default-domain', 'default-project', int_vn_name] self.assertEqual(':'.join(int_vn_fqname) + "_vxlan", mock_zk.get_vn_from_id(int(vxlan_id))) self._vnc_lib.logical_router_delete(id=lr_uuid)
def test_delete_lr_missing_vn_refs(self): # Get Project Ref project = self._vnc_lib.project_read( fq_name=['default-domain', 'default-project']) lr = LogicalRouter('router-test-missing_vn_refs-%s' % (self.id()), project) lr.set_logical_router_type('vxlan-routing') lr_uuid = self._vnc_lib.logical_router_create(lr) lr = self._vnc_lib.logical_router_read(id=lr_uuid) logger.debug('Created Logical Router ') # Create a VN Object vn = VirtualNetwork('%s-vn' % self.id(), project) self._vnc_lib.virtual_network_create(vn) # Create a Virtual Machine Interface that does not have VN Ref id_perms = IdPermsType(enable=True) vmi_no_vn_ref = VirtualMachineInterface(str(uuid.uuid4()), parent_obj=project, id_perms=id_perms) vmi_no_vn_ref.set_virtual_network(vn) vmi_uuid = self._vnc_lib.virtual_machine_interface_create( vmi_no_vn_ref) # Do not associate VN Ref to VMI and create lr.add_virtual_machine_interface(vmi_no_vn_ref) self._vnc_lib.logical_router_update(lr) vmi_obj = self._vnc_lib.virtual_machine_interface_read(id=vmi_uuid) vn_refs = vmi_obj.get_virtual_network_refs() vn_uuid = vn_refs[0]['uuid'] self._vnc_lib.ref_update('virtual_machine_interface', vmi_uuid, 'virtual_network', vn_uuid, None, 'DELETE') vmi_obj = self._vnc_lib.virtual_machine_interface_read(id=vmi_uuid) vn_refs = vmi_obj.get_virtual_network_refs() self.assertIsNone(vn_refs) # Create a VN Object vn2 = VirtualNetwork('%s-vn2' % self.id(), project) self._vnc_lib.virtual_network_create(vn2) # Create a Virtual Machine Interface that does not have VN Ref vmi_no_vn_ref_2 = VirtualMachineInterface(str(uuid.uuid4()), parent_obj=project, id_perms=id_perms) vmi_no_vn_ref_2.set_virtual_network(vn2) self._vnc_lib.virtual_machine_interface_create(vmi_no_vn_ref_2) # Do not associate VN Ref to VMI and create lr.add_virtual_machine_interface(vmi_no_vn_ref_2) self._vnc_lib.logical_router_update(lr) # Deleting directly from api-server as api server # will not allow deletion self._vnc_lib.logical_router_delete(id=lr.uuid)
def test_same_network_not_attached_to_lr(self): project = self._vnc_lib.project_read( ['default-domain', 'default-project']) ipam = self._vnc_lib.network_ipam_read( ['default-domain', 'default-project', 'default-network-ipam']) # Create subnets ipam_sn_v4_vn = IpamSubnetType(subnet=SubnetType('11.1.1.0', 24)) # Create VN my-vn vn = VirtualNetwork('%s-vn' % self.id(), project) vn.add_network_ipam(ipam, VnSubnetsType([ipam_sn_v4_vn])) self._vnc_lib.virtual_network_create(vn) net_obj = self._vnc_lib.virtual_network_read(id=vn.uuid) # Create v4 Ip object ip_obj = InstanceIp(name=str(uuid.uuid4()), instance_ip_family='v4') ip_obj.uuid = ip_obj.name # Create Port port_obj = self.create_port(project, net_obj) # Create Logical Router lr = LogicalRouter('router-test-v4-%s' % self.id(), project) lr.set_logical_router_type('snat-routing') self._vnc_lib.logical_router_create(lr) # Add Router Interface lr.add_virtual_machine_interface(port_obj) self._vnc_lib.logical_router_update(lr) # set router_external net_obj.set_router_external(True) self._vnc_lib.virtual_network_update(net_obj) with ExpectedException(BadRequest): lr.add_virtual_network(net_obj) self._vnc_lib.logical_router_update(lr) lr.del_virtual_network(net_obj) lr.del_virtual_machine_interface(port_obj) self._vnc_lib.logical_router_update(lr) lr.add_virtual_network(net_obj) self._vnc_lib.logical_router_update(lr) # Create Port port_obj = self.create_port(project, net_obj) with ExpectedException(BadRequest): lr.add_virtual_machine_interface(port_obj) self._vnc_lib.logical_router_update(lr) self._vnc_lib.logical_router_delete(id=lr.uuid)
def test_change_from_snat_to_vxlan(self): project = self._vnc_lib.project_read( fq_name=['default-domain', 'default-project']) # Create Logical Router enabled for SNAT. lr = LogicalRouter('router-test-snat-to-vxlan-%s' % (self.id()), project) lr.set_logical_router_type('snat-routing') lr_uuid = self._vnc_lib.logical_router_create(lr) lr = self._vnc_lib.logical_router_read(id=lr_uuid) logger.debug('Created Logical Router ') lr.set_logical_router_type('vxlan-routing') with ExpectedException(BadRequest): self._vnc_lib.logical_router_update(lr) logger.debug('PASS: Could not update LR from SNAT to VXLAN')
def test_vxlan_update_failure_for_lr(self): project = self._vnc_lib.project_read( fq_name=['default-domain', 'default-project']) project.set_vxlan_routing(True) self._vnc_lib.project_update(project) mock_zk = self._api_server._db_conn._zk_db # Create Logical Router lr1 = LogicalRouter('router-test-v4-%s' % self.id(), project) lr1.set_vxlan_network_identifier('5003') lr1.set_logical_router_type('vxlan-routing') lr1_uuid = self._vnc_lib.logical_router_create(lr1) lr1_read = self._vnc_lib.logical_router_read(id=lr1_uuid) vxlan_id1 = lr1_read.get_vxlan_network_identifier() self.assertEqual(vxlan_id1, '5003') lr2 = LogicalRouter('router-test-v4-%s-2' % self.id(), project) lr2.set_vxlan_network_identifier('5004') lr2.set_logical_router_type('vxlan-routing') lr2_uuid = self._vnc_lib.logical_router_create(lr2) lr2_read = self._vnc_lib.logical_router_read(id=lr2_uuid) vxlan_id2 = lr2_read.get_vxlan_network_identifier() self.assertEqual(vxlan_id2, '5004') lr2.set_vxlan_network_identifier('5003') with ExpectedException(BadRequest): self._vnc_lib.logical_router_update(lr2) lr_read = self._vnc_lib.logical_router_read(id=lr2_uuid) vxlan_id = lr_read.get_vxlan_network_identifier() self.assertEqual(vxlan_id, '5004') int_vn_name = get_lr_internal_vn_name(lr2_uuid) int_vn_fqname = ['default-domain', 'default-project', int_vn_name] self.assertEqual(':'.join(int_vn_fqname) + "_vxlan", mock_zk.get_vn_from_id(int(vxlan_id))) self._vnc_lib.logical_router_delete(id=lr1_uuid) self._vnc_lib.logical_router_delete(id=lr2_uuid)
def test_vxlan_routing_for_internal_vn(self): project = self._vnc_lib.project_read( fq_name=['default-domain', 'default-project']) project.set_vxlan_routing(True) self._vnc_lib.project_update(project) # Create Logical Router lr = LogicalRouter('router-test-v4-%s' % self.id(), project) lr.set_logical_router_type('vxlan-routing') lr_uuid = self._vnc_lib.logical_router_create(lr) lr = self._vnc_lib.logical_router_read(id=lr_uuid) # Check to see whether internal VN for VxLAN Routing is created. int_vn_name = get_lr_internal_vn_name(lr_uuid) int_vn_fqname = ['default-domain', 'default-project', int_vn_name] try: self._vnc_lib.virtual_network_read(fq_name=int_vn_fqname) except NoIdError as e: # Invisible objects do not come up in read # calls but throws up a exception saying the # object is invisible but cannot be read, confirming # the presence of the object. Hack! if "This object is not visible" not in str(e): assert (False) # Check to see if deleting the VN deletes the internal VN # that was created. self._vnc_lib.logical_router_delete(id=lr_uuid) try: self._vnc_lib.virtual_network_read(fq_name=int_vn_fqname) self.fail("Logical router internal virtual network was not " "removed") except NoIdError: pass # Check to see if we are able to disable VxLAN Routing # after LR is deleted in the project. project.set_vxlan_routing(False) self._vnc_lib.project_update(project)