示例#1
0
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
示例#2
0
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
示例#3
0
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
示例#4
0
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)
示例#5
0
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
示例#6
0
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)
示例#7
0
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)
示例#8
0
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
示例#9
0
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
示例#10
0
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