def test_get_deallocated_ips_non_admin_both(self): with self._stubs() as (ip1, ip2): reserved_ip = ip_addr.update_ip_address(self.context, ip2["id"], self.ip_address_dealloc) self.assertNotIn('_deallocated', reserved_ip) ip_addresses = db_api.ip_address_find(self.context, scope=db_api.ALL) self.assertEqual(len(ip_addresses), 2) for ip in ip_addresses: if ip["id"] == ip1["id"]: self.assertEqual(ip["_deallocated"], False) elif ip["id"] == ip2["id"]: self.assertEqual(ip["_deallocated"], True) deallocated_ips = ip_addr.get_ip_addresses(self.context) self.assertEqual(len(deallocated_ips), 1) self.assertEqual(ip1['id'], deallocated_ips[0]['id']) self.assertNotIn('_deallocated', deallocated_ips[0]) filters = {'deallocated': 'True'} deallocated_ips1 = ip_addr.get_ip_addresses( self.context, **filters) self.assertEqual(len(deallocated_ips1), 1) filters = {'deallocated': 'False'} deallocated_ips1 = ip_addr.get_ip_addresses( self.context, **filters) self.assertEqual(len(deallocated_ips1), 1) filters = {'deallocated': 'both'} deallocated_ips = ip_addr.get_ip_addresses(self.context, **filters) self.assertEqual(len(deallocated_ips), 1) self.assertEqual(ip1['id'], deallocated_ips[0]['id']) self.assertNotIn('_deallocated', deallocated_ips[0])
def test_get_deallocated_ips_admin_both(self): self.context.is_admin = True with self._stubs() as (ip1, ip2): reserved_ip = ip_addr.update_ip_address(self.context, ip2["id"], self.ip_address_dealloc) self.assertEqual(reserved_ip["_deallocated"], True) deallocated_ips = ip_addr.get_ip_addresses(self.context) self.assertEqual(len(deallocated_ips), 1) self.assertEqual(ip1['id'], deallocated_ips[0]['id']) self.assertEqual(deallocated_ips[0]['_deallocated'], False) filters = {'deallocated': 'True'} deallocated_ips = ip_addr.get_ip_addresses(self.context, **filters) self.assertEqual(len(deallocated_ips), 1) self.assertEqual(reserved_ip['id'], deallocated_ips[0]['id']) self.assertEqual(deallocated_ips[0]['_deallocated'], True) filters = {'deallocated': 'False'} deallocated_ips = ip_addr.get_ip_addresses(self.context, **filters) self.assertEqual(len(deallocated_ips), 1) self.assertEqual(ip1['id'], deallocated_ips[0]['id']) self.assertEqual(deallocated_ips[0]['_deallocated'], False) filters = {'deallocated': 'both'} deallocated_ips = ip_addr.get_ip_addresses(self.context, **filters) self.assertEqual(len(deallocated_ips), 2) for ip in deallocated_ips: if ip["id"] == ip1["id"]: self.assertEqual(ip["_deallocated"], False) elif ip["id"] == ip2["id"]: self.assertEqual(ip["_deallocated"], True)
def _stubs(self): with mock.patch("neutron.common.rpc.get_notifier"), \ mock.patch("neutron.quota.QUOTAS.limit_check"): mac = {'mac_address_range': dict(cidr="AA:BB:CC")} self.context.is_admin = True macrng_api.create_mac_address_range(self.context, mac) self.context.is_admin = False network_info = dict(name="public", tenant_id="fake", network_plugin="BASE", ipam_strategy="ANY") network_info = {"network": network_info} network = network_api.create_network(self.context, network_info) subnet = db_api.subnet_create(self.context, tenant_id="fake", cidr="192.168.10.0/24", network_id=network['id']) fixed_ips = [dict(subnet_id=subnet['id'], enabled=True, ip_address=self.addr)] port = dict(port=dict(network_id=network['id'], tenant_id=self.context.tenant_id, device_id=2, fixed_ips=fixed_ips)) port_api.create_port(self.context, port) self.context.is_admin = True filters = {"deallocated": "both"} ip = ip_addr.get_ip_addresses(self.context, **filters) self.context.is_admin = False yield ip[0]
def _stubs(self): with mock.patch("neutron.common.rpc.get_notifier"), \ mock.patch("neutron.quota.QUOTAS.limit_check"): mac = {'mac_address_range': dict(cidr="AA:BB:CC")} self.context.is_admin = True macrng_api.create_mac_address_range(self.context, mac) self.context.is_admin = False network_info = dict(name="public", tenant_id="fake", network_plugin="BASE", ipam_strategy="ANY") network_info = {"network": network_info} network = network_api.create_network(self.context, network_info) subnet = db_api.subnet_create(self.context, tenant_id="fake", cidr="192.168.10.0/24", network_id=network['id']) fixed_ips = [ dict(subnet_id=subnet['id'], enabled=True, ip_address=self.addr) ] port = dict(port=dict(network_id=network['id'], tenant_id=self.context.tenant_id, device_id=2, fixed_ips=fixed_ips)) port_api.create_port(self.context, port) self.context.is_admin = True filters = {"deallocated": "both"} ip = ip_addr.get_ip_addresses(self.context, **filters) self.context.is_admin = False yield ip[0]
def test_get_deallocated_ips_non_admin_empty(self): with self._stubs() as ip: reserved_ip = ip_addr.update_ip_address(self.context, ip["id"], self.ip_address_dealloc) ip_address = db_api.ip_address_find(self.context, id=reserved_ip["id"], scope=db_api.ONE) self.assertEqual(ip_address["deallocated"], True) deallocated_ips = ip_addr.get_ip_addresses(self.context) self.assertEqual(len(deallocated_ips), 0)
def test_get_deallocated_ips_non_admin_empty(self): with self._stubs() as ip: reserved_ip = ip_addr.update_ip_address(self.context, ip["id"], self.ip_address_dealloc) ip_address = db_api.ip_address_find( self.context, id=reserved_ip["id"], scope=db_api.ONE) self.assertEqual(ip_address["deallocated"], True) deallocated_ips = ip_addr.get_ip_addresses(self.context) self.assertEqual(len(deallocated_ips), 0)
def test_get_deallocated_ips_admin(self): self.context.is_admin = True with self._stubs() as ip: reserved_ip = ip_addr.update_ip_address(self.context, ip["id"], self.ip_address_dealloc) ip_address = db_api.ip_address_find(self.context, id=reserved_ip["id"], scope=db_api.ONE) self.assertEqual(ip_address["deallocated"], True) filters = {'deallocated': 'True'} deallocated_ips = ip_addr.get_ip_addresses(self.context, **filters) self.assertEqual(len(deallocated_ips), 1) self.assertEqual(reserved_ip['id'], deallocated_ips[0]['id']) self.assertEqual(deallocated_ips[0]['_deallocated'], True)
def test_get_deallocated_ips_non_admin_both(self): with self._stubs() as (ip1, ip2): reserved_ip = ip_addr.update_ip_address(self.context, ip2["id"], self.ip_address_dealloc) self.assertNotIn('_deallocated', reserved_ip) ip_addresses = db_api.ip_address_find( self.context, scope=db_api.ALL) self.assertEqual(len(ip_addresses), 2) for ip in ip_addresses: if ip["id"] == ip1["id"]: self.assertEqual(ip["_deallocated"], False) elif ip["id"] == ip2["id"]: self.assertEqual(ip["_deallocated"], True) deallocated_ips = ip_addr.get_ip_addresses(self.context) self.assertEqual(len(deallocated_ips), 1) self.assertEqual(ip1['id'], deallocated_ips[0]['id']) self.assertNotIn('_deallocated', deallocated_ips[0]) filters = {'deallocated': 'True'} deallocated_ips1 = ip_addr.get_ip_addresses(self.context, **filters) self.assertEqual(len(deallocated_ips1), 1) filters = {'deallocated': 'False'} deallocated_ips1 = ip_addr.get_ip_addresses(self.context, **filters) self.assertEqual(len(deallocated_ips1), 1) filters = {'deallocated': 'both'} deallocated_ips = ip_addr.get_ip_addresses(self.context, **filters) self.assertEqual(len(deallocated_ips), 1) self.assertEqual(ip1['id'], deallocated_ips[0]['id']) self.assertNotIn('_deallocated', deallocated_ips[0])
def test_get_deallocated_ips_admin(self): self.context.is_admin = True with self._stubs() as ip: reserved_ip = ip_addr.update_ip_address(self.context, ip["id"], self.ip_address_dealloc) ip_address = db_api.ip_address_find( self.context, id=reserved_ip["id"], scope=db_api.ONE) self.assertEqual(ip_address["deallocated"], True) filters = {'deallocated': 'True'} deallocated_ips = ip_addr.get_ip_addresses(self.context, **filters) self.assertEqual(len(deallocated_ips), 1) self.assertEqual(reserved_ip['id'], deallocated_ips[0]['id']) self.assertEqual(deallocated_ips[0]['_deallocated'], True)
def get_ip_addresses(self, context, **filters): return ip_addresses.get_ip_addresses(context, **filters)
def test_filter_ip_by_device_and_service(self): def _make_body(service): body = dict(service=service) port_info = {"port": dict(body)} return port_info with self._stubs(self.network, self.subnet, self.ports_info4) as ( net, sub, ports): port_ids1 = [ports[0]['id'], ports[1]['id']] port_ids2 = [ports[2]['id'], ports[3]['id']] filters = dict(device_id='a') ips = ip_api.get_ip_addresses(self.context, **filters) self.assertEqual(1, len(ips)) shared_ip1 = {'ip_address': dict(port_ids=port_ids1, network_id=net['id'], version=4)} ip1 = ip_api.create_ip_address(self.context, shared_ip1) self.assertEqual(2, len(ip1['port_ids'])) shared_ip2 = {'ip_address': dict(port_ids=port_ids2, network_id=net['id'], version=4)} ip2 = ip_api.create_ip_address(self.context, shared_ip2) self.assertEqual(2, len(ip2['port_ids'])) ports_ip = ip_api.get_ports_for_ip_address(self.context, ip1['id']) self.assertEqual(2, len(ports_ip)) ports_ip = ip_api.get_ports_for_ip_address(self.context, ip2['id']) self.assertEqual(2, len(ports_ip)) filters = dict(device_id='a') ips = ip_api.get_ip_addresses(self.context, **filters) self.assertEqual(2, len(ips)) filters = dict(device_id='x') ips = ip_api.get_ip_addresses(self.context, **filters) self.assertEqual(0, len(ips)) filters = dict(device_id='a', service='derp') ips = ip_api.get_ip_addresses(self.context, **filters) self.assertEqual(0, len(ips)) filters = dict(service='derp') ips = ip_api.get_ip_addresses(self.context, **filters) self.assertEqual(0, len(ips)) filters = dict(device_id='a', service='none') ips = ip_api.get_ip_addresses(self.context, **filters) self.assertEqual(2, len(ips)) port_ip_update = ip_api.update_port_for_ip_address updated_port = port_ip_update(self.context, ip1['id'], ports[0]['id'], _make_body('derp')) self.assertEqual('derp', updated_port.get('service')) filters = dict(device_id='a', service='derp') ips = ip_api.get_ip_addresses(self.context, **filters) self.assertEqual(1, len(ips)) filters = dict(device_id='a', service='derp', type=ip_types.FIXED) ips = ip_api.get_ip_addresses(self.context, **filters) self.assertEqual(0, len(ips)) filters = dict(device_id='a', service='derp', type=ip_types.SHARED) ips = ip_api.get_ip_addresses(self.context, **filters) self.assertEqual(1, len(ips))