Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion node/rustchain_p2p_sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -404,11 +404,15 @@ def stop_health_checks(self):

def add_p2p_endpoints(app, peer_manager, block_sync, tx_gossip):
"""Add P2P endpoints to Flask app"""
from flask import jsonify, request

@app.route('/p2p/announce', methods=['POST'])
def announce_peer():
"""Endpoint for peer nodes to announce themselves"""
data = request.get_json()
data = request.get_json(silent=True)
if not isinstance(data, dict):
return jsonify({"ok": False, "error": "JSON object required"}), 400

peer_url = data.get('peer_url')

if peer_url:
Expand Down
54 changes: 54 additions & 0 deletions node/tests/test_p2p_sync_routes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# SPDX-License-Identifier: MIT

from flask import Flask

from node.rustchain_p2p_sync import add_p2p_endpoints


class StubPeerManager:
db_path = ":memory:"

def __init__(self):
self.peers = []

def add_peer(self, peer_url):
self.peers.append(peer_url)
return True

def get_active_peers(self):
return list(self.peers)


def build_client():
app = Flask(__name__)
peer_manager = StubPeerManager()
add_p2p_endpoints(app, peer_manager, block_sync=None, tx_gossip=None)
return app.test_client(), peer_manager


def test_p2p_announce_accepts_valid_peer_url():
client, peer_manager = build_client()

response = client.post("/p2p/announce", json={"peer_url": "http://peer.example:8088"})

assert response.status_code == 200
assert response.get_json() == {"ok": True, "peers": 1}
assert peer_manager.peers == ["http://peer.example:8088"]


def test_p2p_announce_rejects_non_object_json():
client, _ = build_client()

response = client.post("/p2p/announce", json=["peer_url", "http://peer.example:8088"])

assert response.status_code == 400
assert response.get_json() == {"ok": False, "error": "JSON object required"}


def test_p2p_announce_rejects_missing_peer_url():
client, _ = build_client()

response = client.post("/p2p/announce", json={})

assert response.status_code == 400
assert response.get_json() == {"ok": False, "error": "peer_url required"}
Loading