Deleted (7 files): - test_discovery.py, test_windsurf_integration.py (trivial assert True stubs) - pytest_simple.ini (unused --collect-only config) - conftest_path.py (duplicate of conftest.py path setup) - conftest_fixtures.py, conftest_full.py (unused conftest variants) Moved to integration/ (6 files): - test_blockchain_final.py, test_blockchain_nodes.py, test_blockchain_simple.py - test_basic_integration.py, test_integration_simple.py, test_working_integration.py Moved to fixtures/: - mock_blockchain_node.py tests/ root now has only conftest.py and README.md.
99 lines
2.8 KiB
Python
99 lines
2.8 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Simple test to verify blockchain nodes are working independently
|
|
and demonstrate how to configure them for networking
|
|
"""
|
|
|
|
import httpx
|
|
import json
|
|
import time
|
|
|
|
# Node URLs
|
|
NODES = {
|
|
"node1": "http://127.0.0.1:8082",
|
|
"node2": "http://127.0.0.1:8081",
|
|
}
|
|
|
|
def test_node_basic_functionality():
|
|
"""Test basic functionality of each node"""
|
|
print("Testing Blockchain Node Functionality")
|
|
print("=" * 60)
|
|
|
|
for name, url in NODES.items():
|
|
print(f"\nTesting {name}:")
|
|
|
|
# Check if node is responsive
|
|
try:
|
|
response = httpx.get(f"{url}/openapi.json", timeout=5)
|
|
print(f" ✅ Node responsive")
|
|
except:
|
|
print(f" ❌ Node not responding")
|
|
continue
|
|
|
|
# Get chain head
|
|
try:
|
|
response = httpx.get(f"{url}/rpc/head", timeout=5)
|
|
if response.status_code == 200:
|
|
head = response.json()
|
|
print(f" ✅ Chain height: {head.get('height', 'unknown')}")
|
|
else:
|
|
print(f" ❌ Failed to get chain head")
|
|
except:
|
|
print(f" ❌ Error getting chain head")
|
|
|
|
# Test faucet
|
|
try:
|
|
response = httpx.post(
|
|
f"{url}/rpc/admin/mintFaucet",
|
|
json={"address": "aitbc1test000000000000000000000000000000000000", "amount": 100},
|
|
timeout=5
|
|
)
|
|
if response.status_code == 200:
|
|
print(f" ✅ Faucet working")
|
|
else:
|
|
print(f" ❌ Faucet failed: {response.status_code}")
|
|
except:
|
|
print(f" ❌ Error testing faucet")
|
|
|
|
def show_networking_config():
|
|
"""Show how to configure nodes for networking"""
|
|
print("\n\nNetworking Configuration")
|
|
print("=" * 60)
|
|
|
|
print("""
|
|
To connect the blockchain nodes in a network, you need to:
|
|
|
|
1. Use a shared gossip backend (Redis or Starlette Broadcast):
|
|
|
|
For Starlette Broadcast (simpler):
|
|
- Node 1 .env:
|
|
GOSSIP_BACKEND=broadcast
|
|
GOSSIP_BROADCAST_URL=http://127.0.0.1:7070/gossip
|
|
|
|
- Node 2 .env:
|
|
GOSSIP_BACKEND=broadcast
|
|
GOSSIP_BROADCAST_URL=http://127.0.0.1:7070/gossip
|
|
|
|
2. Start a gossip relay service:
|
|
python -m aitbc_chain.gossip.relay --port 7070
|
|
|
|
3. Configure P2P discovery:
|
|
- Add peer list to configuration
|
|
- Ensure ports are accessible between nodes
|
|
|
|
4. For production deployment:
|
|
- Use Redis as gossip backend
|
|
- Configure proper network addresses
|
|
- Set up peer discovery mechanism
|
|
|
|
Current status: Nodes are running independently with memory backend.
|
|
They work correctly but don't share blocks or transactions.
|
|
""")
|
|
|
|
def main():
|
|
test_node_basic_functionality()
|
|
show_networking_config()
|
|
|
|
if __name__ == "__main__":
|
|
main()
|