Files
aitbc/scripts/ci/test_api_endpoints.py
aitbc cc486ec571
Some checks failed
API Endpoint Tests / test-api-endpoints (push) Successful in 49s
Blockchain Synchronization Verification / sync-verification (push) Failing after 2s
CLI Tests / test-cli (push) Failing after 5s
Cross-Chain Functionality Tests / test-cross-chain-sync (push) Failing after 2s
Cross-Chain Functionality Tests / test-cross-chain-transactions (push) Successful in 2s
Cross-Chain Functionality Tests / test-cross-chain-bridge (push) Has been skipped
Cross-Chain Functionality Tests / test-multi-chain-consensus (push) Failing after 7s
Cross-Chain Functionality Tests / aggregate-results (push) Has been skipped
Deploy to Testnet / deploy-testnet (push) Has started running
Deploy to Testnet / notify-deployment (push) Has been cancelled
Integration Tests / test-service-integration (push) Successful in 3m4s
Multi-Node Blockchain Health Monitoring / health-check (push) Failing after 2s
P2P Network Verification / p2p-verification (push) Successful in 2s
Production Tests / Production Integration Tests (push) Successful in 20s
fix: enable multi-chain testing across all workflows
- Enable CHECK_CHAIN_ID_CONSISTENCY and set CHAINS in blockchain-sync-verification
- Add CHAINS environment variable to cli-level1-tests for blockchain commands
- Re-enable test-cross-chain-sync and test-multi-chain-consensus jobs
- Update cross-chain transaction tests to use ait-mainnet and ait-testnet
- Add CHAINS to cross-node-transaction-testing, multi-node-health, and production-tests
- Update test_api_endpoints.py to test both chain_id parameters
- Modify blockchain
2026-04-29 13:02:38 +02:00

98 lines
3.3 KiB
Python
Executable File

#!/usr/bin/env python3
"""CI test script for AITBC API endpoints."""
import os
import requests
import json
import time
import statistics
import sys
# Service ports (must match systemd config)
API_HOST = os.environ.get("AITBC_API_HOST", "localhost")
SERVICES = {
"coordinator": {"url": f"http://{API_HOST}:8000", "endpoints": ["/", "/health", "/info"]},
"exchange": {"url": f"http://{API_HOST}:8001", "endpoints": ["/", "/api/health", "/health", "/info"]},
"wallet": {"url": f"http://{API_HOST}:8003", "endpoints": ["/", "/health", "/wallets"]},
"blockchain_rpc": {"url": f"http://{API_HOST}:8006", "endpoints": ["/health", "/rpc/head", "/rpc/head?chain_id=ait-mainnet", "/rpc/head?chain_id=ait-testnet", "/rpc/mempool"]},
}
def test_service_endpoints(name, base_url, endpoints, timeout=5):
results = {"service": name, "endpoints": [], "success": True}
for ep in endpoints:
url = f"{base_url}{ep}"
try:
r = requests.get(url, timeout=timeout)
ok = r.status_code in (200, 404, 405)
results["endpoints"].append({"url": url, "status": r.status_code, "success": ok})
print(f" {'' if ok else ''} {url}: {r.status_code}")
if not ok:
results["success"] = False
except Exception as e:
results["endpoints"].append({"url": url, "error": str(e), "success": False})
print(f"{url}: {e}")
results["success"] = False
return results
def test_performance(apis, rounds=10, timeout=5):
results = {}
for name, url in apis:
times = []
ok_count = 0
for i in range(rounds):
try:
t0 = time.time()
r = requests.get(url, timeout=timeout)
dt = time.time() - t0
times.append(dt)
if r.status_code in (200, 404, 405):
ok_count += 1
except Exception:
pass
if times:
results[name] = {
"avg_ms": round(statistics.mean(times) * 1000, 1),
"min_ms": round(min(times) * 1000, 1),
"max_ms": round(max(times) * 1000, 1),
"success_rate": f"{ok_count}/{rounds}",
}
print(f" 📊 {name}: avg={results[name]['avg_ms']}ms ok={ok_count}/{rounds}")
else:
results[name] = {"error": "all requests failed"}
print(f"{name}: all requests failed")
return results
def main():
all_results = {}
overall_ok = True
for name, cfg in SERVICES.items():
print(f"\n🧪 Testing {name}...")
r = test_service_endpoints(name, cfg["url"], cfg["endpoints"])
all_results[name] = r
if not r["success"]:
overall_ok = False
print("\n⚡ Performance tests...")
perf = test_performance([
("Coordinator", f"http://{API_HOST}:8000/health"),
("Exchange", f"http://{API_HOST}:8001/api/health"),
("Wallet", f"http://{API_HOST}:8003/health"),
("Blockchain RPC", f"http://{API_HOST}:8006/health"),
])
all_results["performance"] = perf
with open("api-test-results.json", "w") as f:
json.dump(all_results, f, indent=2)
print(f"\n{'' if overall_ok else '⚠️'} API endpoint tests completed")
return 0 if overall_ok else 1
if __name__ == "__main__":
sys.exit(main())