Files
aitbc/apps/zk-circuits/tests/test_integration_zk_circuits.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

191 lines
5.9 KiB
Python

"""Integration tests for ZK circuit cache system"""
import pytest
import sys
import sys
from pathlib import Path
from unittest.mock import Mock, patch, MagicMock
import json
from zk_cache import ZKCircuitCache
from compile_cached import compile_circuit_cached
@pytest.mark.integration
def test_full_cache_workflow():
"""Test complete cache workflow: cache, validate, retrieve"""
cache = ZKCircuitCache()
# Create a test circuit file
test_file = Path("/tmp/test_workflow.circom")
test_file.write_text('pragma circom 2.0.0;')
output_dir = Path("/tmp/build/test_workflow")
output_dir.mkdir(parents=True, exist_ok=True)
# Create a dummy output file
output_file = output_dir / "test_workflow.r1cs"
output_file.write_text("dummy r1cs content")
try:
# Cache artifacts
cache.cache_artifacts(test_file, output_dir, 2.5)
# Validate cache
is_valid = cache.is_cache_valid(test_file, output_dir)
assert is_valid is True
# Retrieve cached artifacts
cached = cache.get_cached_artifacts(test_file, output_dir)
assert cached is not None
assert cached['compilation_time'] == 2.5
assert len(cached['output_files']) > 0
finally:
test_file.unlink()
import shutil
shutil.rmtree(output_dir.parent)
cache.clear_cache()
@pytest.mark.integration
def test_cache_invalidation():
"""Test cache invalidation when source changes"""
cache = ZKCircuitCache()
test_file = Path("/tmp/test_invalidation.circom")
test_file.write_text('pragma circom 2.0.0;')
output_dir = Path("/tmp/build/test_invalidation")
output_dir.mkdir(parents=True, exist_ok=True)
output_file = output_dir / "test_invalidation.r1cs"
output_file.write_text("dummy content")
try:
# Cache initial version
cache.cache_artifacts(test_file, output_dir, 1.0)
is_valid = cache.is_cache_valid(test_file, output_dir)
assert is_valid is True
# Modify source file
test_file.write_text('pragma circom 2.0.0;\ninclude "new.circom"')
# Cache should be invalid
is_valid = cache.is_cache_valid(test_file, output_dir)
assert is_valid is False
finally:
test_file.unlink()
import shutil
shutil.rmtree(output_dir.parent)
cache.clear_cache()
@pytest.mark.integration
def test_cache_stats_with_entries():
"""Test cache statistics with multiple entries"""
cache = ZKCircuitCache()
# Create multiple cache entries
for i in range(3):
test_file = Path(f"/tmp/test_stats_{i}.circom")
test_file.write_text(f'pragma circom 2.0.0; /* test {i} */')
output_dir = Path(f"/tmp/build/test_stats_{i}")
output_dir.mkdir(parents=True, exist_ok=True)
output_file = output_dir / f"test_stats_{i}.r1cs"
output_file.write_text(f"dummy content {i}")
cache.cache_artifacts(test_file, output_dir, 1.0 + i)
try:
stats = cache.get_cache_stats()
assert stats['entries'] == 3
assert stats['total_size_mb'] > 0
finally:
for i in range(3):
test_file = Path(f"/tmp/test_stats_{i}.circom")
if test_file.exists():
test_file.unlink()
import shutil
if Path("/tmp/build").exists():
shutil.rmtree("/tmp/build")
cache.clear_cache()
@pytest.mark.integration
def test_compile_circuit_cached_file_not_found():
"""Test compile_circuit_cached with nonexistent file"""
with pytest.raises(FileNotFoundError):
compile_circuit_cached("/nonexistent/file.circom", use_cache=False)
@pytest.mark.integration
def test_compile_circuit_cached_auto_output_dir():
"""Test compile_circuit_cached with auto-generated output directory"""
# Create a test circuit file
test_file = Path("/tmp/test_auto_dir.circom")
test_file.write_text('pragma circom 2.0.0;')
try:
result = compile_circuit_cached(str(test_file), use_cache=False)
# Should fail compilation but have output_dir set
assert 'output_dir' in result
assert 'test_auto_dir' in result['output_dir']
finally:
test_file.unlink()
@pytest.mark.integration
def test_compile_circuit_cached_with_cache_disabled():
"""Test compile_circuit_cached with cache disabled"""
cache = ZKCircuitCache()
test_file = Path("/tmp/test_no_cache.circom")
test_file.write_text('pragma circom 2.0.0;')
output_dir = Path("/tmp/build/test_no_cache")
output_dir.mkdir(parents=True, exist_ok=True)
try:
result = compile_circuit_cached(str(test_file), str(output_dir), use_cache=False)
assert result['cache_hit'] is False
finally:
test_file.unlink()
import shutil
shutil.rmtree(output_dir.parent)
@pytest.mark.integration
def test_compile_circuit_cached_cache_hit():
"""Test compile_circuit_cached with cache hit"""
cache = ZKCircuitCache()
test_file = Path("/tmp/test_cache_hit.circom")
test_file.write_text('pragma circom 2.0.0;')
output_dir = Path("/tmp/build/test_cache_hit")
output_dir.mkdir(parents=True, exist_ok=True)
# Create output file to make cache valid
output_file = output_dir / "test_cache_hit.r1cs"
output_file.write_text("dummy content")
try:
# First call - cache miss
result1 = compile_circuit_cached(str(test_file), str(output_dir), use_cache=False)
assert result1['cache_hit'] is False
# Cache the result manually
cache.cache_artifacts(test_file, output_dir, 2.0)
# Second call - should hit cache
result2 = compile_circuit_cached(str(test_file), str(output_dir), use_cache=True)
assert result2['cache_hit'] is True
finally:
test_file.unlink()
import shutil
shutil.rmtree(output_dir.parent)
cache.clear_cache()