From ed81562a89ac580f85936dfd624c594ee3fe1792 Mon Sep 17 00:00:00 2001 From: Alex Stokes Date: Wed, 6 Nov 2019 14:55:17 -0800 Subject: [PATCH 1/3] Add `identify` and `ping` as default protocols --- libp2p/host/defaults.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/libp2p/host/defaults.py b/libp2p/host/defaults.py index a311132..a5d63ba 100644 --- a/libp2p/host/defaults.py +++ b/libp2p/host/defaults.py @@ -2,10 +2,16 @@ from collections import OrderedDict from typing import TYPE_CHECKING from libp2p.host.host_interface import IHost +from libp2p.host.ping import ID as PingID +from libp2p.host.ping import handle_ping +from libp2p.identity.identify.protocol import ID as IdentifyID +from libp2p.identity.identify.protocol import identify_handler_for if TYPE_CHECKING: from libp2p.typing import TProtocol, StreamHandlerFn def get_default_protocols(host: IHost) -> "OrderedDict[TProtocol, StreamHandlerFn]": - return OrderedDict() + return OrderedDict( + ((IdentifyID, identify_handler_for(host)), (PingID, handle_ping)) + ) From e61a5a677fd0797c551eb1635df0ec40de91e153 Mon Sep 17 00:00:00 2001 From: Alex Stokes Date: Wed, 6 Nov 2019 15:04:17 -0800 Subject: [PATCH 2/3] clean up tests w/ default protocols in place --- tests/host/test_basic_host.py | 4 +++- tests/host/test_ping.py | 22 +--------------------- 2 files changed, 4 insertions(+), 22 deletions(-) diff --git a/tests/host/test_basic_host.py b/tests/host/test_basic_host.py index 4d22222..f25f4e7 100644 --- a/tests/host/test_basic_host.py +++ b/tests/host/test_basic_host.py @@ -11,4 +11,6 @@ def test_default_protocols(): mux = host.get_mux() handlers = mux.handlers - assert handlers == get_default_protocols(host) + # NOTE: comparing keys for equality as handlers may be closures that do not compare in the way + # this test is concerned with + assert handlers.keys() == get_default_protocols(host).keys() diff --git a/tests/host/test_ping.py b/tests/host/test_ping.py index d6f0244..a5296f1 100644 --- a/tests/host/test_ping.py +++ b/tests/host/test_ping.py @@ -3,28 +3,16 @@ import secrets import pytest -from libp2p.host.ping import ID, PING_LENGTH, handle_ping +from libp2p.host.ping import ID, PING_LENGTH from libp2p.peer.peerinfo import info_from_p2p_addr from tests.utils import set_up_nodes_by_transport_opt -def _add_ping_to(host): - host.set_stream_handler(ID, handle_ping) - - @pytest.mark.asyncio async def test_ping_once(): transport_opt_list = [["/ip4/127.0.0.1/tcp/0"], ["/ip4/127.0.0.1/tcp/0"]] (host_a, host_b) = await set_up_nodes_by_transport_opt(transport_opt_list) - # NOTE: this will fail after we add ping as a default handler - # as a forced reminder to fix this test by removing the calls to - # `_add_ping_to` - assert host_a.get_mux().handlers == {} - assert host_b.get_mux().handlers == {} - _add_ping_to(host_a) - _add_ping_to(host_b) - addr = host_a.get_addrs()[0] info = info_from_p2p_addr(addr) await host_b.connect(info) @@ -45,14 +33,6 @@ async def test_ping_several(): transport_opt_list = [["/ip4/127.0.0.1/tcp/0"], ["/ip4/127.0.0.1/tcp/0"]] (host_a, host_b) = await set_up_nodes_by_transport_opt(transport_opt_list) - # NOTE: this will fail after we add ping as a default handler - # as a forced reminder to fix this test by removing the calls to - # `_add_ping_to` - assert host_a.get_mux().handlers == {} - assert host_b.get_mux().handlers == {} - _add_ping_to(host_a) - _add_ping_to(host_b) - addr = host_a.get_addrs()[0] info = info_from_p2p_addr(addr) await host_b.connect(info) From 9a23609b480896462125714c950425492d2bd243 Mon Sep 17 00:00:00 2001 From: Alex Stokes Date: Wed, 6 Nov 2019 15:21:30 -0800 Subject: [PATCH 3/3] type protocol IDs to satisfy mypy --- libp2p/host/ping.py | 3 ++- libp2p/identity/identify/protocol.py | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/libp2p/host/ping.py b/libp2p/host/ping.py index 46a28e0..9075f0b 100644 --- a/libp2p/host/ping.py +++ b/libp2p/host/ping.py @@ -4,8 +4,9 @@ import logging from libp2p.network.stream.exceptions import StreamEOF, StreamReset from libp2p.network.stream.net_stream_interface import INetStream from libp2p.peer.id import ID as PeerID +from libp2p.typing import TProtocol -ID = "/ipfs/ping/1.0.0" +ID = TProtocol("/ipfs/ping/1.0.0") PING_LENGTH = 32 RESP_TIMEOUT = 60 diff --git a/libp2p/identity/identify/protocol.py b/libp2p/identity/identify/protocol.py index b42e51a..390c0de 100644 --- a/libp2p/identity/identify/protocol.py +++ b/libp2p/identity/identify/protocol.py @@ -4,11 +4,11 @@ from multiaddr import Multiaddr from libp2p.host.host_interface import IHost from libp2p.network.stream.net_stream_interface import INetStream -from libp2p.typing import StreamHandlerFn +from libp2p.typing import StreamHandlerFn, TProtocol from .pb.identify_pb2 import Identify -ID = "/ipfs/id/1.0.0" +ID = TProtocol("/ipfs/id/1.0.0") PROTOCOL_VERSION = "ipfs/0.1.0" # TODO dynamically generate the agent version AGENT_VERSION = "py-libp2p/alpha"