diff --git a/libp2p/protocol_muxer/multiselect_communicator.py b/libp2p/protocol_muxer/multiselect_communicator.py index a66a5642..6f7b715d 100644 --- a/libp2p/protocol_muxer/multiselect_communicator.py +++ b/libp2p/protocol_muxer/multiselect_communicator.py @@ -20,10 +20,10 @@ class MultiselectCommunicator(IMultiselectCommunicator): msg_bytes = encode_delim(msg_str.encode()) try: await self.read_writer.write(msg_bytes) - except IOException: + except IOException as error: raise MultiselectCommunicatorError( "fail to write to multiselect communicator" - ) + ) from error async def read(self) -> str: """ @@ -32,8 +32,8 @@ class MultiselectCommunicator(IMultiselectCommunicator): try: data = await read_delim(self.read_writer) # `IOException` includes `IncompleteReadError` and `StreamError` - except (ParseError, IOException, ValueError): + except (ParseError, IOException) as error: raise MultiselectCommunicatorError( "fail to read from multiselect communicator" - ) + ) from error return data.decode() diff --git a/libp2p/utils.py b/libp2p/utils.py index 0e15b567..4844f0e1 100644 --- a/libp2p/utils.py +++ b/libp2p/utils.py @@ -73,9 +73,8 @@ def encode_delim(msg: bytes) -> bytes: async def read_delim(reader: Reader) -> bytes: msg_bytes = await read_varint_prefixed_bytes(reader) - # TODO: Investigate if it is possible to have empty `msg_bytes` - if len(msg_bytes) != 0 and msg_bytes[-1:] != b"\n": - raise ValueError(f'msg_bytes is not delimited by b"\\n": msg_bytes={msg_bytes}') + if len(msg_bytes) == 0 or msg_bytes[-1:] != b"\n": + raise ParseError(f'msg_bytes is not delimited by b"\\n": msg_bytes={msg_bytes}') return msg_bytes[:-1] diff --git a/tests/interop/test_bindings.py b/tests/interop/test_bindings.py index 1e78ff43..dc0a2707 100644 --- a/tests/interop/test_bindings.py +++ b/tests/interop/test_bindings.py @@ -22,6 +22,5 @@ async def test_connect(hosts, p2pds): assert len(host.get_network().connections) == 1 # Test: `disconnect` from Go await p2pd.control.disconnect(host.get_id()) - # FIXME: Failed to handle disconnect await asyncio.sleep(0.01) assert len(host.get_network().connections) == 0