def test_get_ix_network(self, *_): api = PeeringDB() ix_network_id = 1 with patch("peeringdb.http.requests.get", return_value=MockedResponse(status_code=404)): # Must not exist self.assertIsNone(api.get_ix_network(0)) # Using an API call (no cached data) ix_network = api.get_ix_network(ix_network_id) self.assertEqual(ix_network.id, ix_network_id) # Save the data inside the cache details = { "id": ix_network.id, "asn": ix_network.asn, "name": ix_network.name, "ix_id": ix_network.ix_id, "ixlan_id": ix_network.ixlan_id, } network_ixlan = NetworkIXLAN(**details) network_ixlan.save() # Using no API calls (cached data) ix_network = api.get_ix_network(ix_network_id) self.assertEqual(ix_network.id, ix_network_id)
def test_get_ix_network(self): api = PeeringDB() ix_network_id = 29146 # Must not exist self.assertIsNone(api.get_ix_network(0)) # Using an API call (no cached data) ix_network = api.get_ix_network(ix_network_id) self.assertEqual(ix_network.id, ix_network_id) # Save the data inside the cache details = { "id": ix_network.id, "asn": ix_network.asn, "name": ix_network.name, "ix_id": ix_network.ix_id, "ixlan_id": ix_network.ixlan_id, } network_ixlan = NetworkIXLAN(**details) network_ixlan.save() # Using no API calls (cached data) ix_network = api.get_ix_network(ix_network_id) self.assertEqual(ix_network.id, ix_network_id)
def get_available_peers(self): # Not linked to PeeringDB, cannot determine peers if not self.peeringdb_id: return None # Get the IX LAN we are belonging to api = PeeringDB() network_ixlan = api.get_ix_network(self.peeringdb_id) # Get all peering sessions currently existing existing_sessions = self.get_peering_sessions() ipv4_sessions = [] ipv6_sessions = [] for session in existing_sessions: ip = ipaddress.ip_address(session.ip_address) if ip.version == 6: ipv6_sessions.append(str(ip)) elif ip.version == 4: ipv4_sessions.append(str(ip)) else: self.logger.debug("peering session with strange ip: %s", ip) # Find all peers belonging to the same IX and order them by ASN # Exclude our own ASN and already existing sessions return PeerRecord.objects.filter( Q(network_ixlan__ixlan_id=network_ixlan.ixlan_id) & ~Q(network__asn=settings.MY_ASN) & ( ~Q(network_ixlan__ipaddr6__in=ipv6_sessions) | ~Q(network_ixlan__ipaddr4__in=ipv4_sessions) ) ).order_by("network__asn")