Add sys import to test files and remove obsolete integration tests
Some checks failed
API Endpoint Tests / test-api-endpoints (push) Successful in 9s
Blockchain Synchronization Verification / sync-verification (push) Failing after 1s
CLI Tests / test-cli (push) Failing after 3s
Documentation Validation / validate-docs (push) Successful in 6s
Documentation Validation / validate-policies-strict (push) Successful in 2s
Integration Tests / test-service-integration (push) Successful in 40s
Multi-Node Blockchain Health Monitoring / health-check (push) Successful in 1s
P2P Network Verification / p2p-verification (push) Successful in 2s
Production Tests / Production Integration Tests (push) Successful in 21s
Python Tests / test-python (push) Successful in 13s
Security Scanning / security-scan (push) Failing after 46s
Smart Contract Tests / test-solidity (map[name:aitbc-token path:packages/solidity/aitbc-token]) (push) Successful in 17s
Smart Contract Tests / lint-solidity (push) Successful in 10s

- Add sys import to 29 test files across agent-coordinator, blockchain-event-bridge, blockchain-node, and coordinator-api
- Remove apps/blockchain-event-bridge/tests/test_integration.py (obsolete bridge integration tests)
- Remove apps/coordinator-api/tests/test_integration.py (obsolete API integration tests)
- Implement GPU registration in marketplace_gpu.py with GPURegistry model persistence
This commit is contained in:
aitbc
2026-04-23 16:43:17 +02:00
parent b8b1454573
commit e60cc3226c
134 changed files with 14321 additions and 1873 deletions

View File

@@ -0,0 +1,241 @@
"""Integration tests for miner service"""
import pytest
import sys
import sys
from pathlib import Path
from unittest.mock import Mock, patch, MagicMock
from datetime import datetime
import production_miner
@pytest.mark.integration
@patch('production_miner.httpx.get')
def test_check_ollama_success(mock_get):
"""Test Ollama check success"""
mock_get.return_value = Mock(
status_code=200,
json=lambda: {"models": [{"name": "llama3.2:latest"}, {"name": "mistral:latest"}]}
)
available, models = production_miner.check_ollama()
assert available is True
assert len(models) == 2
assert "llama3.2:latest" in models
@pytest.mark.integration
@patch('production_miner.httpx.get')
def test_check_ollama_failure(mock_get):
"""Test Ollama check failure"""
mock_get.return_value = Mock(status_code=500)
available, models = production_miner.check_ollama()
assert available is False
assert len(models) == 0
@pytest.mark.integration
@patch('production_miner.httpx.get')
def test_check_ollama_exception(mock_get):
"""Test Ollama check with exception"""
mock_get.side_effect = Exception("Connection refused")
available, models = production_miner.check_ollama()
assert available is False
assert len(models) == 0
@pytest.mark.integration
@patch('production_miner.httpx.get')
def test_wait_for_coordinator_success(mock_get):
"""Test waiting for coordinator success"""
mock_get.return_value = Mock(status_code=200)
result = production_miner.wait_for_coordinator()
assert result is True
@pytest.mark.integration
@patch('production_miner.httpx.get')
@patch('production_miner.time.sleep')
def test_wait_for_coordinator_failure(mock_sleep, mock_get):
"""Test waiting for coordinator failure after max retries"""
mock_get.side_effect = Exception("Connection refused")
result = production_miner.wait_for_coordinator()
assert result is False
@pytest.mark.integration
@patch('production_miner.httpx.post')
@patch('production_miner.build_gpu_capabilities')
def test_register_miner_success(mock_build, mock_post):
"""Test miner registration success"""
mock_build.return_value = {"gpu": {"model": "RTX 4090"}}
mock_post.return_value = Mock(
status_code=200,
json=lambda: {"session_token": "test-token-123"}
)
result = production_miner.register_miner()
assert result == "test-token-123"
@pytest.mark.integration
@patch('production_miner.httpx.post')
@patch('production_miner.build_gpu_capabilities')
def test_register_miner_failure(mock_build, mock_post):
"""Test miner registration failure"""
mock_build.return_value = {"gpu": {"model": "RTX 4090"}}
mock_post.return_value = Mock(status_code=400, text="Bad request")
result = production_miner.register_miner()
assert result is None
@pytest.mark.integration
@patch('production_miner.httpx.post')
@patch('production_miner.build_gpu_capabilities')
def test_register_miner_exception(mock_build, mock_post):
"""Test miner registration with exception"""
mock_build.return_value = {"gpu": {"model": "RTX 4090"}}
mock_post.side_effect = Exception("Connection error")
result = production_miner.register_miner()
assert result is None
@pytest.mark.integration
@patch('production_miner.httpx.post')
@patch('production_miner.get_gpu_info')
@patch('production_miner.classify_architecture')
@patch('production_miner.measure_coordinator_latency')
def test_send_heartbeat_with_gpu(mock_latency, mock_arch, mock_gpu, mock_post):
"""Test sending heartbeat with GPU info"""
mock_gpu.return_value = {"name": "RTX 4090", "memory_total": 24576, "memory_used": 1024, "utilization": 45}
mock_arch.return_value = "ada_lovelace"
mock_latency.return_value = 50.0
mock_post.return_value = Mock(status_code=200)
production_miner.send_heartbeat()
assert mock_post.called
@pytest.mark.integration
@patch('production_miner.httpx.post')
@patch('production_miner.get_gpu_info')
@patch('production_miner.classify_architecture')
@patch('production_miner.measure_coordinator_latency')
def test_send_heartbeat_without_gpu(mock_latency, mock_arch, mock_gpu, mock_post):
"""Test sending heartbeat without GPU info"""
mock_gpu.return_value = None
mock_post.return_value = Mock(status_code=200)
production_miner.send_heartbeat()
assert mock_post.called
@pytest.mark.integration
@patch('production_miner.httpx.post')
def test_submit_result_success(mock_post):
"""Test submitting job result success"""
mock_post.return_value = Mock(status_code=200)
production_miner.submit_result("job_123", {"result": {"status": "completed"}})
assert mock_post.called
@pytest.mark.integration
@patch('production_miner.httpx.post')
def test_submit_result_failure(mock_post):
"""Test submitting job result failure"""
mock_post.return_value = Mock(status_code=500, text="Server error")
production_miner.submit_result("job_123", {"result": {"status": "completed"}})
assert mock_post.called
@pytest.mark.integration
@patch('production_miner.httpx.post')
def test_poll_for_jobs_success(mock_post):
"""Test polling for jobs success"""
mock_post.return_value = Mock(
status_code=200,
json=lambda: {"job_id": "job_123", "payload": {"type": "inference"}}
)
result = production_miner.poll_for_jobs()
assert result is not None
assert result["job_id"] == "job_123"
@pytest.mark.integration
@patch('production_miner.httpx.post')
def test_poll_for_jobs_no_job(mock_post):
"""Test polling for jobs when no job available"""
mock_post.return_value = Mock(status_code=204)
result = production_miner.poll_for_jobs()
assert result is None
@pytest.mark.integration
@patch('production_miner.httpx.post')
def test_poll_for_jobs_failure(mock_post):
"""Test polling for jobs failure"""
mock_post.return_value = Mock(status_code=500, text="Server error")
result = production_miner.poll_for_jobs()
assert result is None
@pytest.mark.integration
@patch('production_miner.submit_result')
@patch('production_miner.httpx.post')
@patch('production_miner.get_gpu_info')
def test_execute_job_inference_success(mock_gpu, mock_post, mock_submit):
"""Test executing inference job success"""
mock_gpu.return_value = {"utilization": 80, "memory_used": 4096}
mock_post.return_value = Mock(
status_code=200,
json=lambda: {"response": "Test output", "eval_count": 100}
)
job = {"job_id": "job_123", "payload": {"type": "inference", "prompt": "test", "model": "llama3.2:latest"}}
result = production_miner.execute_job(job, ["llama3.2:latest"])
assert result is True
assert mock_submit.called
@pytest.mark.integration
@patch('production_miner.submit_result')
@patch('production_miner.httpx.post')
def test_execute_job_inference_no_models(mock_post, mock_submit):
"""Test executing inference job with no available models"""
job = {"job_id": "job_123", "payload": {"type": "inference", "prompt": "test"}}
result = production_miner.execute_job(job, [])
assert result is False
assert mock_submit.called
@pytest.mark.integration
@patch('production_miner.submit_result')
def test_execute_job_unsupported_type(mock_submit):
"""Test executing unsupported job type"""
job = {"job_id": "job_123", "payload": {"type": "unsupported"}}
result = production_miner.execute_job(job, ["llama3.2:latest"])
assert result is False
assert mock_submit.called
@pytest.mark.integration
@patch('production_miner.submit_result')
@patch('production_miner.httpx.post')
def test_execute_job_ollama_error(mock_post, mock_submit):
"""Test executing job when Ollama returns error"""
mock_post.return_value = Mock(status_code=500, text="Ollama error")
job = {"job_id": "job_123", "payload": {"type": "inference", "prompt": "test", "model": "llama3.2:latest"}}
result = production_miner.execute_job(job, ["llama3.2:latest"])
assert result is False
assert mock_submit.called
@pytest.mark.integration
@patch('production_miner.submit_result')
def test_execute_job_exception(mock_submit):
"""Test executing job with exception"""
job = {"job_id": "job_123", "payload": {"type": "inference", "prompt": "test"}}
result = production_miner.execute_job(job, ["llama3.2:latest"])
assert result is False
assert mock_submit.called