def test_ordering_subnets_ip_version(self): """Order by ip_version primarily. Order by ip_version primarily, even when IPv4 is less full than IPv6 subnet. """ cidr4 = "0.0.0.0/30" # 2 bits last4 = netaddr.IPNetwork(cidr4).last cidr6 = "fffc::/127" # 1 bits last6 = netaddr.IPNetwork(cidr6).last with self._fixtures([ self._create_models(cidr4, 4, last4), self._create_models(cidr6, 6, last6) ]) as net: subnets = db_api.subnet_find_ordered_by_most_full( self.context, net['id'], segment_id=None, scope=db_api.ALL).all() self.assertEqual(subnets[0][0].ip_version, 4) self.assertEqual(subnets[1][0].ip_version, 6) subnets = db_api.subnet_find_ordered_by_least_full( self.context, net['id'], segment_id=None, scope=db_api.ALL).all() self.assertEqual(subnets[0][0].ip_version, 4) self.assertEqual(subnets[1][0].ip_version, 6)
def test_ordering_subnets_find_allocc_when_counts_unequal_size_equal(self): models = [] cidrs = ["0.0.0.0/31", "1.1.1.0/31", "2.2.2.0/31"] for cidr in cidrs: last = netaddr.IPNetwork(cidr).last models.append(self._create_models(cidr, 4, last)) with self._fixtures(models) as net: self._create_ip_address("2.2.2.1", 4, "2.2.2.0/31", net["id"]) self._create_ip_address("2.2.2.2", 4, "2.2.2.0/31", net["id"]) self._create_ip_address("1.1.1.1", 4, "1.1.1.0/31", net["id"]) subnets = db_api.subnet_find_ordered_by_most_full( self.context, net['id'], segment_id=None, scope=db_api.ALL).all() self.assertEqual(len(subnets), 3) self.assertEqual(subnets[0][0].cidr, "2.2.2.0/31") self.assertEqual(subnets[0][1], 2) self.assertEqual(subnets[1][0].cidr, "1.1.1.0/31") self.assertEqual(subnets[1][1], 1) self.assertEqual(subnets[2][0].cidr, "0.0.0.0/31") self.assertEqual(subnets[2][1], 0) subnets = db_api.subnet_find_ordered_by_least_full( self.context, net['id'], segment_id=None, scope=db_api.ALL).all() self.assertEqual(len(subnets), 3) self.assertEqual(subnets[0][0].cidr, "0.0.0.0/31") self.assertEqual(subnets[0][1], 0) self.assertEqual(subnets[1][0].cidr, "1.1.1.0/31") self.assertEqual(subnets[1][1], 1) self.assertEqual(subnets[2][0].cidr, "2.2.2.0/31") self.assertEqual(subnets[2][1], 2)
def test_ordering_subnets_ip_version(self): """Order by ip_version primarily. Order by ip_version primarily, even when IPv4 is less full than IPv6 subnet. """ cidr4 = "0.0.0.0/30" # 2 bits last4 = netaddr.IPNetwork(cidr4).last cidr6 = "fffc::/127" # 1 bits last6 = netaddr.IPNetwork(cidr6).last with self._fixtures([ self._create_models(cidr4, 4, last4), self._create_models(cidr6, 6, last6) ]) as net: subnets = db_api.subnet_find_ordered_by_most_full( self.context, net['id'], segment_id=None, scope=db_api.ALL).all() self.assertEqual(subnets[0][0].ip_version, 4) self.assertEqual(subnets[1][0].ip_version, 6) subnets = db_api.subnet_find_ordered_by_least_full( self.context, net['id'], segment_id=None, scope=db_api.ALL).all() self.assertEqual(subnets[0][0].ip_version, 4) self.assertEqual(subnets[1][0].ip_version, 6)
def test_ordering_subnets_find_allocc_when_counts_unequal_size_equal(self): models = [] cidrs = ["0.0.0.0/31", "1.1.1.0/31", "2.2.2.0/31"] for cidr in cidrs: last = netaddr.IPNetwork(cidr).last models.append(self._create_models(cidr, 4, last)) with self._fixtures(models) as net: self._create_ip_address("2.2.2.1", 4, "2.2.2.0/31", net["id"]) self._create_ip_address("2.2.2.2", 4, "2.2.2.0/31", net["id"]) self._create_ip_address("1.1.1.1", 4, "1.1.1.0/31", net["id"]) subnets = db_api.subnet_find_ordered_by_most_full( self.context, net['id'], segment_id=None, scope=db_api.ALL).all() self.assertEqual(len(subnets), 3) self.assertEqual(subnets[0][0].cidr, "2.2.2.0/31") self.assertEqual(subnets[0][1], 2) self.assertEqual(subnets[1][0].cidr, "1.1.1.0/31") self.assertEqual(subnets[1][1], 1) self.assertEqual(subnets[2][0].cidr, "0.0.0.0/31") self.assertEqual(subnets[2][1], 0) subnets = db_api.subnet_find_ordered_by_least_full( self.context, net['id'], segment_id=None, scope=db_api.ALL).all() self.assertEqual(len(subnets), 3) self.assertEqual(subnets[0][0].cidr, "0.0.0.0/31") self.assertEqual(subnets[0][1], 0) self.assertEqual(subnets[1][0].cidr, "1.1.1.0/31") self.assertEqual(subnets[1][1], 1) self.assertEqual(subnets[2][0].cidr, "2.2.2.0/31") self.assertEqual(subnets[2][1], 2)
def test_ordering_subnets_find_allocation_counts_when_count_equal(self): models = [] cidrs = ["0.0.0.0/31", "1.1.1.0/31", "2.2.2.0/31"] for cidr in cidrs: last = netaddr.IPNetwork(cidr).last models.append(self._create_models(cidr, 4, last)) with self._fixtures(models) as net: subnets = db_api.subnet_find_ordered_by_most_full( self.context, net['id'], segment_id=None, scope=db_api.ALL).all() self.assertEqual(len(subnets), 3) for subnet in subnets: self.assertIn(subnet[0]["cidr"], cidrs) subnets = db_api.subnet_find_ordered_by_least_full( self.context, net['id'], segment_id=None, scope=db_api.ALL).all() self.assertEqual(len(subnets), 3) for subnet in subnets: self.assertIn(subnet[0]["cidr"], cidrs)
def test_ordering_subnets_find_allocation_counts_when_count_equal(self): models = [] cidrs = ["0.0.0.0/31", "1.1.1.0/31", "2.2.2.0/31"] for cidr in cidrs: last = netaddr.IPNetwork(cidr).last models.append(self._create_models(cidr, 4, last)) with self._fixtures(models) as net: subnets = db_api.subnet_find_ordered_by_most_full( self.context, net['id'], segment_id=None, scope=db_api.ALL).all() self.assertEqual(len(subnets), 3) for subnet in subnets: self.assertIn(subnet[0]["cidr"], cidrs) subnets = db_api.subnet_find_ordered_by_least_full( self.context, net['id'], segment_id=None, scope=db_api.ALL).all() self.assertEqual(len(subnets), 3) for subnet in subnets: self.assertIn(subnet[0]["cidr"], cidrs)