Some checks failed
API Endpoint Tests / test-api-endpoints (push) Failing after 5s
CLI Tests / test-cli (push) Failing after 3m17s
Documentation Validation / validate-docs (push) Successful in 8s
Documentation Validation / validate-policies-strict (push) Failing after 3s
Integration Tests / test-service-integration (push) Failing after 1s
Package Tests / Python package - aitbc-agent-sdk (push) Successful in 30s
Package Tests / Python package - aitbc-core (push) Failing after 11s
Package Tests / Python package - aitbc-crypto (push) Failing after 11s
Package Tests / Python package - aitbc-sdk (push) Failing after 12s
Package Tests / JavaScript package - aitbc-sdk-js (push) Successful in 6s
Package Tests / JavaScript package - aitbc-token (push) Failing after 18s
Production Tests / Production Integration Tests (push) Failing after 11s
Python Tests / test-python (push) Failing after 2m54s
Security Scanning / security-scan (push) Failing after 48s
- Add multi-candidate host discovery (localhost, host.docker.internal, gateway) in api-endpoint-tests - Pass discovered service host via AITBC_API_HOST environment variable to test script - Update test_api_endpoints.py to use AITBC_API_HOST for all service URLs - Add validate-policies-strict job to docs-validation workflow for policy Markdown files - Add job names to package-tests matrix for better CI output clarity - Add --import
98 lines
3.3 KiB
Python
Executable File
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/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())
|