def test_remove_after_releasing_some_addresses(self): """ remove after releasing some addresses shouldn't remove block """ # Assign IP block self._stub.AddIPBlock(self._block_msg) # Allocate 2 IPs alloc_request0 = AllocateIPRequest( sid=self._sid0, version=AllocateIPRequest.IPV4, apn=self._apn0, ) ip_msg0 = self._stub.AllocateIPAddress(alloc_request0) alloc_request1 = AllocateIPRequest( sid=self._sid1, version=AllocateIPRequest.IPV4, apn=self._apn0, ) self._stub.AllocateIPAddress(alloc_request1) # Test remove without force -- should not remove block remove_request0 = RemoveIPBlockRequest( ip_blocks=[self._block_msg], force=False, ) resp = self._stub.RemoveIPBlock(remove_request0) expect = RemoveIPBlockResponse() self.assertEqual(expect, resp) # Ensure that block has not been removed resp = self._stub.ListAddedIPv4Blocks(Void()) expect = ListAddedIPBlocksResponse() expect.ip_block_list.extend([self._block_msg]) self.assertEqual(expect, resp) # Release the allocated IPs release_request0 = ReleaseIPRequest( sid=self._sid0, ip=ip_msg0.ip_list[0], apn=self._apn0, ) resp = self._stub.ReleaseIPAddress(release_request0) self.assertEqual(resp, Void()) # Test remove without force -- should not remove block remove_request1 = RemoveIPBlockRequest( ip_blocks=[self._block_msg], force=False, ) resp = self._stub.RemoveIPBlock(remove_request1) expect = RemoveIPBlockResponse() self.assertEqual(expect, resp) # Ensure that block has not been removed resp = self._stub.ListAddedIPv4Blocks(Void()) expect = ListAddedIPBlocksResponse() expect.ip_block_list.extend([self._block_msg]) self.assertEqual(expect, resp)
def remove_ip_blocks(self, blocks): try: ip_blocks = [ IPBlock(version={ 4: IPAddress.IPV4, 6: IPAddress.IPV6 }[block.version], net_address=block.network_address.packed, prefix_len=block.prefixlen) for block in blocks ] response = self._mobility_stub.RemoveIPBlock( RemoveIPBlockRequest(ip_blocks=ip_blocks, force=False)) removed_ip_block_list = () for block in response.ip_blocks: address_bytes = block.net_address address_int = int.from_bytes(address_bytes, byteorder='big') address = ipaddress.ip_address(address_int) removed_ip_block_list += (ipaddress.ip_network( "%s/%d" % (address, block.prefix_len)), ) return removed_ip_block_list except grpc.RpcError as error: err_code = error.exception().code() if (err_code == grpc.StatusCode.FAILED_PRECONDITION): logging.info("Ignoring FAILED_PRECONDITION exception") else: raise
def _setup_ip_block(client): ip_blocks_rsp = client.ListAddedIPv4Blocks(Void()) remove_blocks_req = RemoveIPBlockRequest(force=True) for block in ip_blocks_rsp.ip_block_list: remove_blocks_req.ip_blocks.append(block) client.RemoveIPBlock(remove_blocks_req) ip_block = ipaddress.ip_network('192.168.128.0/20') client.AddIPBlock(IPBlock(version=IPBlock.IPV4, net_address=ip_block.network_address.packed, prefix_len=ip_block.prefixlen))
def test_remove_no_assigned_blocks(self): """ remove should return nothing """ remove_request0 = RemoveIPBlockRequest(ip_blocks=[self._block_msg], force=False) resp = self._stub.RemoveIPBlock(remove_request0) expect = RemoveIPBlockResponse() self.assertEqual(expect, resp) resp = self._stub.ListAddedIPv4Blocks(Void()) expect = ListAddedIPBlocksResponse() self.assertEqual(expect, resp)
def test_remove_allocated_assigned_block_with_force(self): """ remove should return nothing """ self._stub.AddIPBlock(self._block_msg) alloc_request0 = AllocateIPRequest(sid=self._sid0, version=AllocateIPRequest.IPV4) self._stub.AllocateIPAddress(alloc_request0) remove_request0 = RemoveIPBlockRequest(ip_blocks=[self._block_msg], force=True) resp = self._stub.RemoveIPBlock(remove_request0) expect = RemoveIPBlockResponse() expect.ip_blocks.extend([self._block_msg]) self.assertEqual(expect, resp) resp = self._stub.ListAddedIPv4Blocks(Void()) expect = ListAddedIPBlocksResponse() self.assertEqual(expect, resp)
def remove_ip_block_handler(client, args): ipblock_msgs = () for ipblock in args.ipblocks: ipblock_msg = IPBlock() if ipblock.version == 4: ipblock_msg.version = IPBlock.IPV4 else: print("Error: IP version %d is not supported yet" % ipblock.version) return ipblock_msg.net_address = ipblock.network_address.packed ipblock_msg.prefix_len = ipblock.prefixlen ipblock_msgs += (ipblock_msg, ) request = RemoveIPBlockRequest(ip_blocks=ipblock_msgs, force=args.force) remove_response = client.RemoveIPBlock(request) print("IPv4 Blocks Removed: ") for block_msg in remove_response.ip_blocks: ip = ipaddress.ip_address(block_msg.net_address) block = ipaddress.ip_network("%s/%d" % (ip, block_msg.prefix_len)) print("\t%s" % block)