Files
aitbc/apps/miner/tests/test_unit_miner.py
aitbc e60cc3226c
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 test files and remove obsolete integration tests
- 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
2026-04-23 16:43:17 +02:00

182 lines
5.9 KiB
Python

"""Unit tests for miner service"""
import pytest
import sys
import sys
from pathlib import Path
from unittest.mock import Mock, patch, MagicMock
import subprocess
import production_miner
@pytest.mark.unit
def test_classify_architecture_4090():
"""Test architecture classification for RTX 4090"""
result = production_miner.classify_architecture("NVIDIA GeForce RTX 4090")
assert result == "ada_lovelace"
@pytest.mark.unit
def test_classify_architecture_3080():
"""Test architecture classification for RTX 3080"""
result = production_miner.classify_architecture("NVIDIA GeForce RTX 3080")
assert result == "ampere"
@pytest.mark.unit
def test_classify_architecture_2080():
"""Test architecture classification for RTX 2080"""
result = production_miner.classify_architecture("NVIDIA GeForce RTX 2080")
assert result == "turing"
@pytest.mark.unit
def test_classify_architecture_1080():
"""Test architecture classification for GTX 1080"""
result = production_miner.classify_architecture("NVIDIA GeForce GTX 1080")
assert result == "pascal"
@pytest.mark.unit
def test_classify_architecture_a100():
"""Test architecture classification for A100"""
result = production_miner.classify_architecture("NVIDIA A100")
assert result == "datacenter"
@pytest.mark.unit
def test_classify_architecture_unknown():
"""Test architecture classification for unknown GPU"""
result = production_miner.classify_architecture("Unknown GPU")
assert result == "unknown"
@pytest.mark.unit
def test_classify_architecture_case_insensitive():
"""Test architecture classification is case insensitive"""
result = production_miner.classify_architecture("nvidia rtx 4090")
assert result == "ada_lovelace"
@pytest.mark.unit
@patch('production_miner.subprocess.run')
def test_detect_cuda_version_success(mock_run):
"""Test CUDA version detection success"""
mock_run.return_value = Mock(returncode=0, stdout="12.0")
result = production_miner.detect_cuda_version()
assert result == "12.0"
@pytest.mark.unit
@patch('production_miner.subprocess.run')
def test_detect_cuda_version_failure(mock_run):
"""Test CUDA version detection failure"""
mock_run.side_effect = Exception("nvidia-smi not found")
result = production_miner.detect_cuda_version()
assert result is None
@pytest.mark.unit
@patch('production_miner.subprocess.run')
def test_get_gpu_info_success(mock_run):
"""Test GPU info retrieval success"""
mock_run.return_value = Mock(
returncode=0,
stdout="NVIDIA GeForce RTX 4090, 24576, 1024, 45"
)
result = production_miner.get_gpu_info()
assert result is not None
assert result["name"] == "NVIDIA GeForce RTX 4090"
assert result["memory_total"] == 24576
assert result["memory_used"] == 1024
assert result["utilization"] == 45
@pytest.mark.unit
@patch('production_miner.subprocess.run')
def test_get_gpu_info_failure(mock_run):
"""Test GPU info retrieval failure"""
mock_run.side_effect = Exception("nvidia-smi not found")
result = production_miner.get_gpu_info()
assert result is None
@pytest.mark.unit
@patch('production_miner.get_gpu_info')
@patch('production_miner.detect_cuda_version')
@patch('production_miner.classify_architecture')
def test_build_gpu_capabilities(mock_arch, mock_cuda, mock_gpu):
"""Test building GPU capabilities"""
mock_gpu.return_value = {"name": "RTX 4090", "memory_total": 24576}
mock_cuda.return_value = "12.0"
mock_arch.return_value = "ada_lovelace"
result = production_miner.build_gpu_capabilities()
assert result is not None
assert "gpu" in result
assert result["gpu"]["model"] == "RTX 4090"
assert result["gpu"]["architecture"] == "ada_lovelace"
assert result["gpu"]["edge_optimized"] is True
@pytest.mark.unit
@patch('production_miner.get_gpu_info')
def test_build_gpu_capabilities_no_gpu(mock_gpu):
"""Test building GPU capabilities when no GPU"""
mock_gpu.return_value = None
result = production_miner.build_gpu_capabilities()
assert result is not None
assert result["gpu"]["model"] == "Unknown GPU"
assert result["gpu"]["architecture"] == "unknown"
@pytest.mark.unit
@patch('production_miner.classify_architecture')
def test_build_gpu_capabilities_edge_optimized(mock_arch):
"""Test edge optimization flag"""
mock_arch.return_value = "ada_lovelace"
with patch('production_miner.get_gpu_info') as mock_gpu, \
patch('production_miner.detect_cuda_version') as mock_cuda:
mock_gpu.return_value = {"name": "RTX 4090", "memory_total": 24576}
mock_cuda.return_value = "12.0"
result = production_miner.build_gpu_capabilities()
assert result["gpu"]["edge_optimized"] is True
@pytest.mark.unit
@patch('production_miner.classify_architecture')
def test_build_gpu_capabilities_not_edge_optimized(mock_arch):
"""Test edge optimization flag for non-edge GPU"""
mock_arch.return_value = "pascal"
with patch('production_miner.get_gpu_info') as mock_gpu, \
patch('production_miner.detect_cuda_version') as mock_cuda:
mock_gpu.return_value = {"name": "GTX 1080", "memory_total": 8192}
mock_cuda.return_value = "11.0"
result = production_miner.build_gpu_capabilities()
assert result["gpu"]["edge_optimized"] is False
@pytest.mark.unit
@patch('production_miner.httpx.get')
def test_measure_coordinator_latency_success(mock_get):
"""Test coordinator latency measurement success"""
mock_get.return_value = Mock(status_code=200)
result = production_miner.measure_coordinator_latency()
assert result >= 0
@pytest.mark.unit
@patch('production_miner.httpx.get')
def test_measure_coordinator_latency_failure(mock_get):
"""Test coordinator latency measurement failure"""
mock_get.side_effect = Exception("Connection error")
result = production_miner.measure_coordinator_latency()
assert result == -1.0