Skip to content

Commit 2a15861

Browse files
committed
fix(p2p): status regression after entrypoint refactor
1 parent 995c208 commit 2a15861

File tree

6 files changed

+35
-8
lines changed

6 files changed

+35
-8
lines changed

hathor/p2p/peer_id.py

+6-3
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,15 @@ def __init__(self, auto_generate_keys: bool = True) -> None:
9191
self.generate_keys()
9292

9393
def __str__(self):
94-
entrypoints = [str(entrypoint) for entrypoint in self.entrypoints]
9594
return (
96-
f'PeerId(id={self.id}, entrypoints={entrypoints}, retry_timestamp={self.retry_timestamp}, '
95+
f'PeerId(id={self.id}, entrypoints={self.entrypoints_as_str()}, retry_timestamp={self.retry_timestamp}, '
9796
f'retry_interval={self.retry_interval})'
9897
)
9998

99+
def entrypoints_as_str(self) -> list[str]:
100+
"""Return a list of entrypoints serialized as str"""
101+
return list(map(str, self.entrypoints))
102+
100103
def merge(self, other: 'PeerId') -> None:
101104
""" Merge two PeerId objects, checking that they have the same
102105
id, public_key, and private_key. The entrypoints are merged without
@@ -251,7 +254,7 @@ def to_json(self, include_private_key: bool = False) -> dict[str, Any]:
251254
result = {
252255
'id': self.id,
253256
'pubKey': base64.b64encode(public_der).decode('utf-8'),
254-
'entrypoints': [str(ep) for ep in self.entrypoints],
257+
'entrypoints': self.entrypoints_as_str(),
255258
}
256259
if include_private_key:
257260
assert self.private_key is not None

hathor/p2p/resources/status.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def render_GET(self, request):
8383
for peer in self.manager.connections.peer_storage.values():
8484
known_peers.append({
8585
'id': peer.id,
86-
'entrypoints': peer.entrypoints,
86+
'entrypoints': peer.entrypoints_as_str(),
8787
'last_seen': now - peer.last_seen,
8888
'flags': [flag.value for flag in peer.flags],
8989
})
@@ -107,7 +107,7 @@ def render_GET(self, request):
107107
'state': self.manager.state.value,
108108
'network': self.manager.network,
109109
'uptime': now - self.manager.start_time,
110-
'entrypoints': self.manager.connections.my_peer.entrypoints,
110+
'entrypoints': self.manager.connections.my_peer.entrypoints_as_str(),
111111
},
112112
'peers_whitelist': self.manager.peers_whitelist,
113113
'known_peers': known_peers,

hathor/p2p/states/peer_id.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def send_peer_id(self) -> None:
7070
hello = {
7171
'id': my_peer.id,
7272
'pubKey': my_peer.get_public_key(),
73-
'entrypoints': my_peer.entrypoints,
73+
'entrypoints': my_peer.entrypoints_as_str(),
7474
}
7575
self.send_message(ProtocolMessages.PEER_ID, json_dumps(hello))
7676

hathor/p2p/states/ready.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ def send_peers(self, peer_list: Iterable['PeerId']) -> None:
166166
if peer.entrypoints:
167167
data.append({
168168
'id': peer.id,
169-
'entrypoints': [str(entrypoint) for entrypoint in peer.entrypoints],
169+
'entrypoints': peer.entrypoints_as_str(),
170170
})
171171
self.send_message(ProtocolMessages.PEERS, json_dumps(data))
172172
self.log.debug('send peers', peers=data)

tests/p2p/test_protocol.py

+21-1
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
from twisted.internet.protocol import Protocol
66
from twisted.python.failure import Failure
77

8+
from hathor.p2p.entrypoint import Entrypoint
89
from hathor.p2p.peer_id import PeerId
910
from hathor.p2p.protocol import HathorLineReceiver, HathorProtocol
1011
from hathor.simulator import FakeConnection
11-
from hathor.util import json_dumps
12+
from hathor.util import json_dumps, json_loadb
1213
from tests import unittest
1314

1415

@@ -69,6 +70,25 @@ def _check_cmd_and_value(self, result: bytes, expected: tuple[bytes, bytes]) ->
6970
def test_on_connect(self) -> None:
7071
self._check_result_only_cmd(self.conn.peek_tr1_value(), b'HELLO')
7172

73+
def test_peer_id_with_entrypoint(self) -> None:
74+
entrypoint_str = 'tcp://192.168.1.1:54321'
75+
entrypoint = Entrypoint.parse(entrypoint_str)
76+
self.peer_id1.entrypoints.append(entrypoint)
77+
self.peer_id2.entrypoints.append(entrypoint)
78+
self.conn.run_one_step() # HELLO
79+
80+
msg1 = self.conn.peek_tr1_value()
81+
cmd1, val1 = msg1.split(b' ', 1)
82+
data1 = json_loadb(val1)
83+
self.assertEqual(cmd1, b'PEER-ID')
84+
self.assertEqual(data1['entrypoints'], [entrypoint_str])
85+
86+
msg2 = self.conn.peek_tr2_value()
87+
cmd2, val2 = msg2.split(b' ', 1)
88+
data2 = json_loadb(val2)
89+
self.assertEqual(cmd2, b'PEER-ID')
90+
self.assertEqual(data2['entrypoints'], [entrypoint_str])
91+
7292
def test_invalid_command(self) -> None:
7393
self._send_cmd(self.conn.proto1, 'INVALID-CMD')
7494
self.conn.proto1.state.handle_error('')

tests/resources/p2p/test_status.py

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import hathor
55
from hathor.conf.unittests import SETTINGS
6+
from hathor.p2p.entrypoint import Entrypoint
67
from hathor.p2p.resources import StatusResource
78
from hathor.simulator import FakeConnection
89
from tests import unittest
@@ -15,8 +16,11 @@ class BaseStatusTest(_BaseResourceTest._ResourceTest):
1516
def setUp(self):
1617
super().setUp()
1718
self.web = StubSite(StatusResource(self.manager))
19+
self.entrypoint = Entrypoint.parse('tcp://192.168.1.1:54321')
20+
self.manager.connections.my_peer.entrypoints.append(self.entrypoint)
1821

1922
self.manager2 = self.create_peer('testnet')
23+
self.manager2.connections.my_peer.entrypoints.append(self.entrypoint)
2024
self.conn1 = FakeConnection(self.manager, self.manager2)
2125

2226
@inlineCallbacks

0 commit comments

Comments
 (0)