Some checks failed
Blockchain Synchronization Verification / sync-verification (push) Failing after 8s
CLI Tests / test-cli (push) Successful in 10s
Contract Performance Benchmarks / benchmark-gas-usage (push) Successful in 1m22s
Contract Performance Benchmarks / benchmark-execution-time (push) Successful in 1m11s
Contract Performance Benchmarks / benchmark-throughput (push) Successful in 1m13s
Cross-Chain Functionality Tests / test-cross-chain-sync (push) Failing after 5s
Cross-Chain Functionality Tests / test-cross-chain-transactions (push) Successful in 5s
Cross-Chain Functionality Tests / test-cross-chain-bridge (push) Has been skipped
Cross-Chain Functionality Tests / test-multi-chain-consensus (push) Failing after 3s
Cross-Chain Functionality Tests / aggregate-results (push) Has been skipped
Cross-Node Transaction Testing / transaction-test (push) Successful in 5s
Deploy to Testnet / deploy-testnet (push) Successful in 1m14s
Contract Performance Benchmarks / compare-benchmarks (push) Has been cancelled
Documentation Validation / validate-docs (push) Failing after 10s
Multi-Node Stress Testing / stress-test (push) Has been cancelled
Node Failover Simulation / failover-test (push) Has been cancelled
Security Scanning / security-scan (push) Has been cancelled
Smart Contract Tests / test-solidity (map[name:aitbc-contracts path:contracts]) (push) Has been cancelled
Smart Contract Tests / test-solidity (map[name:aitbc-token path:packages/solidity/aitbc-token]) (push) Has been cancelled
Smart Contract Tests / test-foundry (push) Has been cancelled
Smart Contract Tests / lint-solidity (push) Has been cancelled
Smart Contract Tests / deploy-contracts (push) Has been cancelled
Documentation Validation / validate-policies-strict (push) Successful in 3s
Integration Tests / test-service-integration (push) Failing after 45s
Multi-Chain Island Architecture Tests / test-multi-chain-island (push) Failing after 2s
Multi-Node Blockchain Health Monitoring / health-check (push) Successful in 5s
P2P Network Verification / p2p-verification (push) Successful in 3s
Production Tests / Production Integration Tests (push) Failing after 7s
Python Tests / test-python (push) Failing after 46s
Staking Tests / test-staking-service (push) Failing after 2s
Staking Tests / test-staking-integration (push) Has been skipped
Staking Tests / test-staking-contract (push) Has been skipped
Staking Tests / run-staking-test-runner (push) Has been skipped
Systemd Sync / sync-systemd (push) Successful in 21s
API Endpoint Tests / test-api-endpoints (push) Failing after 12m19s
- Changed pytest calls to use `venv/bin/python -m pytest` with explicit config - Added `--rootdir "$PWD"` and `--import-mode=importlib` for consistent imports - Fixed PYTHONPATH to use absolute paths with $PWD prefix - Added smart contract security scanning for Solidity files - Added Circom circuit security checks for ZK proof circuits - Added ZK proof implementation security validation - Added contracts/** to security scanning workflow
94 lines
2.7 KiB
Python
94 lines
2.7 KiB
Python
"""
|
|
End-to-End Test Configuration
|
|
Fixtures and setup for E2E tests
|
|
"""
|
|
|
|
import pytest
|
|
import httpx
|
|
import os
|
|
from typing import AsyncGenerator, Generator
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def coordinator_url() -> str:
|
|
"""Coordinator API URL"""
|
|
return os.getenv("COORDINATOR_URL", "http://localhost:8011")
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def blockchain_url() -> str:
|
|
"""Blockchain RPC URL"""
|
|
return os.getenv("BLOCKCHAIN_URL", "http://localhost:8080")
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def marketplace_url() -> str:
|
|
"""Marketplace URL"""
|
|
return os.getenv("MARKETPLACE_URL", "http://localhost:8102")
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def api_key() -> str:
|
|
"""Test API key"""
|
|
return os.getenv("TEST_API_KEY", "test-api-key")
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
async def http_client() -> AsyncGenerator[httpx.AsyncClient, None]:
|
|
"""HTTP client for API calls"""
|
|
async with httpx.AsyncClient(timeout=30.0) as client:
|
|
yield client
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def sync_http_client() -> Generator[httpx.Client, None, None]:
|
|
"""Synchronous HTTP client for API calls"""
|
|
with httpx.Client(timeout=30.0) as client:
|
|
yield client
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def test_data():
|
|
"""Test data fixture"""
|
|
return {
|
|
"test_user": {
|
|
"user_id": "e2e-test-user-001",
|
|
"email": "e2e-test@example.com",
|
|
"wallet_address": "ait1e2etestuser001"
|
|
},
|
|
"test_job": {
|
|
"job_type": "ai_inference",
|
|
"parameters": {
|
|
"model": "gpt-4",
|
|
"prompt": "E2E test prompt",
|
|
"max_tokens": 100
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
def service_health_check(coordinator_url, blockchain_url, marketplace_url):
|
|
"""Check if required services are healthy"""
|
|
import time
|
|
|
|
def _check_service(url: str, service_name: str, max_retries: int = 30, health_path: str = "/v1/health") -> bool:
|
|
"""Check if a service is healthy"""
|
|
for i in range(max_retries):
|
|
try:
|
|
response = httpx.get(f"{url}{health_path}", timeout=5.0)
|
|
if response.status_code == 200:
|
|
return True
|
|
except Exception:
|
|
if i < max_retries - 1:
|
|
time.sleep(2)
|
|
pytest.skip(f"{service_name} not available at {url}")
|
|
return False
|
|
|
|
# Check all services with appropriate health endpoints
|
|
_check_service(coordinator_url, "Coordinator API", health_path="/v1/health")
|
|
_check_service(blockchain_url, "Blockchain Node", health_path="/health")
|
|
_check_service(marketplace_url, "Marketplace", health_path="/health")
|
|
|
|
return True
|