async def test_example(): node_a = KademliaServer() await node_a.listen(5801) node_b = KademliaServer() await node_b.listen(5802) await node_b.bootstrap([("127.0.0.1", 5801)]) key = "hello" value = "world" await node_b.set(key, value) await node_b.provide("hello") providers = await node_b.get_providers("hello") # print ("providers") # print (providers) # bmuller's handle_call_response wraps # every rpc call result in a list of tuples # [(True, [b'\xf9\xa1\xf5\x10a\xe5\xe0F'])] first_tuple = providers[0] # (True, [b'\xf9\xa1\xf5\x10a\xe5\xe0F']) first_providers = first_tuple[1] # [b'\xf9\xa1\xf5\x10a\xe5\xe0F'] first_provider = first_providers[0] assert node_b.node.peer_id == first_provider
async def test_simple_four_nodes(): node_a = KademliaServer() await node_a.listen(5801) node_b = KademliaServer() await node_b.listen(5802) node_c = KademliaServer() await node_c.listen(5803) node_d = KademliaServer() await node_d.listen(5804) node_a_value = await node_b.bootstrap([("127.0.0.1", 5801)]) node_a_kad_peerinfo = node_a_value[0] await node_c.bootstrap([("127.0.0.1", 5802)]) await node_d.bootstrap([("127.0.0.1", 5803)]) await node_b.set(node_a_kad_peerinfo.xor_id, peer_info_to_str(node_a_kad_peerinfo)) router = KadmeliaPeerRouter(node_d) returned_info = await router.find_peer( ID(node_a_kad_peerinfo.peer_id_bytes)) assert returned_info == node_a_kad_peerinfo
async def set_up_routers(router_confs): bootstrap_node = KademliaServer() await bootstrap_node.listen(router_confs[0]) routers = [KadmeliaPeerRouter(bootstrap_node)] for port in router_confs[1:]: node = KademliaServer() await node.listen(port) await node.bootstrap_node(("127.0.0.1", router_confs[0])) routers.append(KadmeliaPeerRouter(node)) return routers
async def test_simple_two_nodes(): node_a = KademliaServer() await node_a.listen(5678) node_b = KademliaServer() await node_b.listen(5679) node_a_value = await node_b.bootstrap([("127.0.0.1", 5678)]) node_a_kad_peerinfo = node_a_value[0] await node_a.set(node_a_kad_peerinfo.xor_id, repr(node_a_kad_peerinfo)) router = KadmeliaPeerRouter(node_b) returned_info = await router.find_peer(ID(node_a_kad_peerinfo.peer_id_bytes)) assert repr(returned_info) == repr(node_a_kad_peerinfo)
async def set_up_routers(router_confs: Tuple[int, int] = ( 0, 0)) -> List[KadmeliaPeerRouter]: """The default ``router_confs`` selects two free ports local to this machine.""" bootstrap_node = KademliaServer() # type: ignore await bootstrap_node.listen(router_confs[0]) routers = [KadmeliaPeerRouter(bootstrap_node)] for port in router_confs[1:]: node = KademliaServer() # type: ignore await node.listen(port) await node.bootstrap_node(bootstrap_node.address) routers.append(KadmeliaPeerRouter(node)) return routers
def initialize_default_kademlia_router( ksize: int = 20, alpha: int = 3, id_opt: ID = None, storage: IStorage = None) -> KadmeliaPeerRouter: """ initialize kadmelia router when no kademlia router is passed in :param ksize: The k parameter from the paper :param alpha: The alpha parameter from the paper :param id_opt: optional id for host :param storage: An instance that implements :interface:`~kademlia.storage.IStorage` :return: return a default kademlia instance """ if not id_opt: key_pair = generate_new_rsa_identity() id_opt = generate_peer_id_from(key_pair) node_id = id_opt.to_bytes() # ignore type for Kademlia module server = KademliaServer( # type: ignore ksize=ksize, alpha=alpha, node_id=node_id, storage=storage) return KadmeliaPeerRouter(server)
async def test_simple_three_nodes(): node_a = KademliaServer() await node_a.listen(5701) node_b = KademliaServer() await node_b.listen(5702) node_c = KademliaServer() await node_c.listen(5703) node_a_value = await node_b.bootstrap([("127.0.0.1", 5701)]) node_a_kad_peerinfo = node_a_value[0] await node_c.bootstrap([("127.0.0.1", 5702)]) await node_a.set(node_a_kad_peerinfo.xor_id, repr(node_a_kad_peerinfo)) router = KadmeliaPeerRouter(node_c) returned_info = await router.find_peer(node_a_kad_peerinfo.peer_id_obj) assert str(returned_info) == str(node_a_kad_peerinfo)
async def test_example(): node_a = KademliaServer() await node_a.listen() node_b = KademliaServer() await node_b.listen() # Bootstrap the node by connecting to other known nodes, in this case # replace 123.123.123.123 with the IP of another node and optionally # give as many ip/port combos as you can for other nodes. await node_b.bootstrap([node_a.address]) # set a value for the key "my-key" on the network value = "my-value" key = "my-key" await node_b.set(key, value) # get the value associated with "my-key" from the network assert await node_b.get(key) == value assert await node_a.get(key) == value
async def test_multiple_nodes_set_bootstrap_get(nodes_nr): node_bootstrap = KademliaServer() await node_bootstrap.listen(2000 + nodes_nr * 2) nodes = [] for i in range(nodes_nr): node = KademliaServer() addrs = [("127.0.0.1", 2000 + nodes_nr * 2)] await node.listen(2001 + i + nodes_nr * 2) await node.bootstrap(addrs) value = "my awesome value %d" % i key = "set from %d" % i await node.set(key, value) nodes.append(node) for i in range(nodes_nr): for node in nodes: value = "my awesome value %d" % i key = "set from %d" % i assert await node.get(key) == value
async def test_multiple_nodes_bootstrap_set_get(nodes_nr): node_bootstrap = KademliaServer() await node_bootstrap.listen(3000 + nodes_nr * 2) nodes = [] for i in range(nodes_nr): node = KademliaServer() addrs = [("127.0.0.1", 3000 + nodes_nr * 2)] await node.listen(3001 + i + nodes_nr * 2) await node.bootstrap(addrs) nodes.append(node) for i, node in enumerate(nodes): # set a value for the key "my-key" on the network value = "my awesome value %d" % i key = "set from %d" % i await node.set(key, value) for i in range(nodes_nr): for node in nodes: value = "my awesome value %d" % i key = "set from %d" % i assert await node.get(key) == value