auto peer discovery: gossip known peers during sync, discover from_hash automatically
This commit is contained in:
parent
d201fa0bc9
commit
0ed4ec82ba
4 changed files with 87 additions and 1 deletions
|
|
@ -334,6 +334,50 @@ def test_sync_updated_content():
|
|||
shutil.rmtree(dir_b)
|
||||
|
||||
|
||||
def test_sync_peer_discovery():
|
||||
"""Peers should discover each other through sync gossip."""
|
||||
dir_a = tempfile.mkdtemp()
|
||||
dir_b = tempfile.mkdtemp()
|
||||
dir_c = tempfile.mkdtemp()
|
||||
try:
|
||||
db_a, ha = make_handler(dir_a)
|
||||
db_b, hb = make_handler(dir_b)
|
||||
db_c, hc = make_handler(dir_c)
|
||||
|
||||
now = "2026-06-05T12:00:00"
|
||||
db_a.create_thread("t1", "From A", "", "", "", "aaa", "", now)
|
||||
db_b.create_thread("t2", "From B", "", "", "", "bbb", "", now)
|
||||
db_c.create_thread("t3", "From C", "", "", "", "ccc", "", now)
|
||||
|
||||
# Seed: A knows B, B knows C
|
||||
db_a.add_known_peer("bbb")
|
||||
db_b.add_known_peer("ccc")
|
||||
# C doesn't know anyone yet
|
||||
|
||||
# B syncs with C — B sends its known peers (ccc's hash not in B's known peers since B is talking to C)
|
||||
# Actually, B knows C (bbb -> ccc), so when B sends sync request to C,
|
||||
# B includes known_peers. C learns about B.
|
||||
hc.handle_sync_request({
|
||||
"query": {},
|
||||
"threads": [dict(db_b.get_thread("t2"))],
|
||||
"posts": [], "upvotes": [],
|
||||
"from_hash": "bbb",
|
||||
"blocks": {"mine": [], "peers": []},
|
||||
"retractions": [],
|
||||
"known_peers": ["aaa"], # B tells C about A
|
||||
})
|
||||
|
||||
# C should now know about B (from auto-discovery of from_hash) and A (from known_peers)
|
||||
known = [r["instance_hash"] for r in db_c.get_synced_instances()]
|
||||
assert "bbb" in known, "C should auto-discover B from from_hash"
|
||||
assert "aaa" in known, "C should discover A from known_peers gossip"
|
||||
finally:
|
||||
import shutil
|
||||
shutil.rmtree(dir_a)
|
||||
shutil.rmtree(dir_b)
|
||||
shutil.rmtree(dir_c)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_sync_thread()
|
||||
test_sync_reply()
|
||||
|
|
@ -343,4 +387,5 @@ if __name__ == "__main__":
|
|||
test_sync_bidirectional()
|
||||
test_sync_block_gossip()
|
||||
test_sync_updated_content()
|
||||
test_sync_peer_discovery()
|
||||
print("all sync tests passed")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue