Merge branch 'libp2p:main' into fix/cross_platform_path_tests

This commit is contained in:
yashksaini-coder
2025-09-02 03:22:56 +05:30
committed by GitHub
7 changed files with 54 additions and 8 deletions

View File

@ -297,6 +297,11 @@ class BasicHost(IHost):
protocol, handler = await self.multiselect.negotiate( protocol, handler = await self.multiselect.negotiate(
MultiselectCommunicator(net_stream), self.negotiate_timeout MultiselectCommunicator(net_stream), self.negotiate_timeout
) )
if protocol is None:
await net_stream.reset()
raise StreamFailure(
"Failed to negotiate protocol: no protocol selected"
)
except MultiselectError as error: except MultiselectError as error:
peer_id = net_stream.muxed_conn.peer_id peer_id = net_stream.muxed_conn.peer_id
logger.debug( logger.debug(

View File

@ -118,6 +118,8 @@ class SecurityMultistream(ABC):
# Select protocol if non-initiator # Select protocol if non-initiator
protocol, _ = await self.multiselect.negotiate(communicator) protocol, _ = await self.multiselect.negotiate(communicator)
if protocol is None: if protocol is None:
raise MultiselectError("fail to negotiate a security protocol") raise MultiselectError(
"Failed to negotiate a security protocol: no protocol selected"
)
# Return transport from protocol # Return transport from protocol
return self.transports[protocol] return self.transports[protocol]

View File

@ -85,7 +85,9 @@ class MuxerMultistream:
else: else:
protocol, _ = await self.multiselect.negotiate(communicator) protocol, _ = await self.multiselect.negotiate(communicator)
if protocol is None: if protocol is None:
raise MultiselectError("fail to negotiate a stream muxer protocol") raise MultiselectError(
"Fail to negotiate a stream muxer protocol: no protocol selected"
)
return self.transports[protocol] return self.transports[protocol]
async def new_conn(self, conn: ISecureConn, peer_id: ID) -> IMuxedConn: async def new_conn(self, conn: ISecureConn, peer_id: ID) -> IMuxedConn:

View File

@ -1,9 +1,7 @@
from libp2p.abc import ( from libp2p.abc import (
IListener,
IMuxedConn, IMuxedConn,
IRawConnection, IRawConnection,
ISecureConn, ISecureConn,
ITransport,
) )
from libp2p.custom_types import ( from libp2p.custom_types import (
TMuxerOptions, TMuxerOptions,
@ -43,10 +41,6 @@ class TransportUpgrader:
self.security_multistream = SecurityMultistream(secure_transports_by_protocol) self.security_multistream = SecurityMultistream(secure_transports_by_protocol)
self.muxer_multistream = MuxerMultistream(muxer_transports_by_protocol) self.muxer_multistream = MuxerMultistream(muxer_transports_by_protocol)
def upgrade_listener(self, transport: ITransport, listeners: IListener) -> None:
"""Upgrade multiaddr listeners to libp2p-transport listeners."""
# TODO: Figure out what to do with this function.
async def upgrade_security( async def upgrade_security(
self, self,
raw_conn: IRawConnection, raw_conn: IRawConnection,

View File

@ -0,0 +1 @@
Added multiselect type consistency in negotiate method. Updates all the usages of the method.

View File

@ -0,0 +1,5 @@
Remove unused upgrade_listener function from transport upgrader
- Remove unused `upgrade_listener` function from `libp2p/transport/upgrader.py` (Issue 2 from #726)
- Clean up unused imports related to the removed function
- Improve code maintainability by removing dead code

View File

@ -1,3 +1,10 @@
from unittest.mock import (
AsyncMock,
MagicMock,
)
import pytest
from libp2p import ( from libp2p import (
new_swarm, new_swarm,
) )
@ -10,6 +17,9 @@ from libp2p.host.basic_host import (
from libp2p.host.defaults import ( from libp2p.host.defaults import (
get_default_protocols, get_default_protocols,
) )
from libp2p.host.exceptions import (
StreamFailure,
)
def test_default_protocols(): def test_default_protocols():
@ -22,3 +32,30 @@ def test_default_protocols():
# NOTE: comparing keys for equality as handlers may be closures that do not compare # NOTE: comparing keys for equality as handlers may be closures that do not compare
# in the way this test is concerned with # in the way this test is concerned with
assert handlers.keys() == get_default_protocols(host).keys() assert handlers.keys() == get_default_protocols(host).keys()
@pytest.mark.trio
async def test_swarm_stream_handler_no_protocol_selected(monkeypatch):
key_pair = create_new_key_pair()
swarm = new_swarm(key_pair)
host = BasicHost(swarm)
# Create a mock net_stream
net_stream = MagicMock()
net_stream.reset = AsyncMock()
net_stream.muxed_conn.peer_id = "peer-test"
# Monkeypatch negotiate to simulate "no protocol selected"
async def fake_negotiate(comm, timeout):
return None, None
monkeypatch.setattr(host.multiselect, "negotiate", fake_negotiate)
# Now run the handler and expect StreamFailure
with pytest.raises(
StreamFailure, match="Failed to negotiate protocol: no protocol selected"
):
await host._swarm_stream_handler(net_stream)
# Ensure reset was called since negotiation failed
net_stream.reset.assert_awaited()