def test_sort_peer_nodes_no_longer_than_k(self): """ Ensure that no more than constants.K contacts are returned from the sort_peer_nodes function despite a longer list being passed in. """ contacts = [] for i in range(512): contact = PeerNode(2 ** i, "192.168.0.%d" % i, 9999, self.version, 0) contacts.append(contact) target_key = long_to_hex(2 ** 256) result = sort_peer_nodes(contacts, target_key) self.assertEqual(constants.K, len(result))
def test_sort_peer_nodes(self): """ Ensures that the sort_peer_nodes function returns the list ordered in such a way that the contacts closest to the target key are at the head of the list. """ contacts = [] for i in range(512): contact = PeerNode(2 ** i, "192.168.0.%d" % i, 9999, self.version, 0) contacts.append(contact) target_key = long_to_hex(2 ** 256) result = sort_peer_nodes(contacts, target_key) # Ensure results are in the correct order. def key(node): return distance(node.network_id, target_key) sorted_nodes = sorted(result, key=key) self.assertEqual(sorted_nodes, result) # Ensure the order is from lowest to highest in terms of distance distances = [distance(x.network_id, target_key) for x in result] self.assertEqual(sorted(distances), distances)