mirror of
https://github.com/varun-r-mallya/py-libp2p.git
synced 2025-12-31 20:36:24 +00:00
Completed: CertifiedAddrBook interface with related tests
This commit is contained in:
@ -3,7 +3,10 @@ from multiaddr import (
|
||||
Multiaddr,
|
||||
)
|
||||
|
||||
from libp2p.crypto.rsa import create_new_key_pair
|
||||
from libp2p.peer.envelope import Envelope, seal_record
|
||||
from libp2p.peer.id import ID
|
||||
from libp2p.peer.peer_record import PeerRecord
|
||||
from libp2p.peer.peerstore import (
|
||||
PeerStore,
|
||||
PeerStoreError,
|
||||
@ -84,3 +87,49 @@ def test_peers_with_addrs():
|
||||
store.clear_addrs(ID(b"peer2"))
|
||||
|
||||
assert set(store.peers_with_addrs()) == {ID(b"peer3")}
|
||||
|
||||
|
||||
def test_ceritified_addr_book():
|
||||
store = PeerStore()
|
||||
|
||||
key_pair = create_new_key_pair()
|
||||
peer_id = ID.from_pubkey(key_pair.public_key)
|
||||
addrs = [
|
||||
Multiaddr("/ip4/127.0.0.1/tcp/9000"),
|
||||
Multiaddr("/ip4/127.0.0.1/tcp/9001"),
|
||||
]
|
||||
ttl = 60
|
||||
|
||||
# Construct signed PereRecord
|
||||
record = PeerRecord(peer_id, addrs, 21)
|
||||
envelope = seal_record(record, key_pair.private_key)
|
||||
|
||||
result = store.consume_peer_record(envelope, ttl)
|
||||
assert result is True
|
||||
|
||||
# Retrieve the record
|
||||
retrieved = store.get_peer_record(peer_id)
|
||||
assert retrieved is not None
|
||||
assert isinstance(retrieved, Envelope)
|
||||
|
||||
addr_list = store.addrs(peer_id)
|
||||
assert set(addr_list) == set(addrs)
|
||||
|
||||
# Now try to push an older record (should be rejected)
|
||||
old_record = PeerRecord(peer_id, [Multiaddr("/ip4/10.0.0.1/tcp/4001")], 20)
|
||||
old_envelope = seal_record(old_record, key_pair.private_key)
|
||||
result = store.consume_peer_record(old_envelope, ttl)
|
||||
assert result is False
|
||||
|
||||
# Push a new record (should override)
|
||||
new_addrs = [Multiaddr("/ip4/192.168.0.1/tcp/5001")]
|
||||
new_record = PeerRecord(peer_id, new_addrs, 23)
|
||||
new_envelope = seal_record(new_record, key_pair.private_key)
|
||||
result = store.consume_peer_record(new_envelope, ttl)
|
||||
assert result is True
|
||||
|
||||
# Confirm the record is updated
|
||||
latest = store.get_peer_record(peer_id)
|
||||
assert isinstance(latest, Envelope)
|
||||
assert latest.record().seq == 23
|
||||
assert set(new_addrs).issubset(set(store.addrs(peer_id)))
|
||||
|
||||
Reference in New Issue
Block a user