Files
aitbc/tests/integration/test_blockchain_integration.py
aitbc1 bfe6f94b75
Some checks failed
AITBC CI/CD Pipeline / lint-and-test (3.11) (push) Has been cancelled
AITBC CI/CD Pipeline / lint-and-test (3.12) (push) Has been cancelled
AITBC CI/CD Pipeline / lint-and-test (3.13) (push) Has been cancelled
AITBC CI/CD Pipeline / test-cli (push) Has been cancelled
AITBC CI/CD Pipeline / test-services (push) Has been cancelled
AITBC CI/CD Pipeline / test-production-services (push) Has been cancelled
AITBC CI/CD Pipeline / security-scan (push) Has been cancelled
AITBC CI/CD Pipeline / build (push) Has been cancelled
AITBC CI/CD Pipeline / deploy-staging (push) Has been cancelled
AITBC CI/CD Pipeline / deploy-production (push) Has been cancelled
AITBC CI/CD Pipeline / performance-test (push) Has been cancelled
AITBC CI/CD Pipeline / docs (push) Has been cancelled
AITBC CI/CD Pipeline / release (push) Has been cancelled
AITBC CI/CD Pipeline / notify (push) Has been cancelled
Security Scanning / Bandit Security Scan (apps/coordinator-api/src) (push) Has been cancelled
Security Scanning / Bandit Security Scan (cli/aitbc_cli) (push) Has been cancelled
Security Scanning / Bandit Security Scan (packages/py/aitbc-core/src) (push) Has been cancelled
Security Scanning / Bandit Security Scan (packages/py/aitbc-crypto/src) (push) Has been cancelled
Security Scanning / Bandit Security Scan (packages/py/aitbc-sdk/src) (push) Has been cancelled
Security Scanning / Bandit Security Scan (tests) (push) Has been cancelled
Security Scanning / CodeQL Security Analysis (javascript) (push) Has been cancelled
Security Scanning / CodeQL Security Analysis (python) (push) Has been cancelled
Security Scanning / Dependency Security Scan (push) Has been cancelled
Security Scanning / Container Security Scan (push) Has been cancelled
Security Scanning / OSSF Scorecard (push) Has been cancelled
Security Scanning / Security Summary Report (push) Has been cancelled
AITBC CLI Level 1 Commands Test / test-cli-level1 (3.11) (push) Has been cancelled
AITBC CLI Level 1 Commands Test / test-cli-level1 (3.12) (push) Has been cancelled
AITBC CLI Level 1 Commands Test / test-cli-level1 (3.13) (push) Has been cancelled
AITBC CLI Level 1 Commands Test / test-summary (push) Has been cancelled
chore: remove outdated documentation and reference files
- Remove debugging service documentation (DEBUgging_SERVICES.md)
- Remove development logs policy and quick reference guides
- Remove E2E test creation summary
- Remove gift certificate example file
- Remove GitHub pull summary documentation
2026-03-25 12:56:07 +01:00

903 lines
35 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Blockchain Smart Contract Integration Tests
Phase 8.2: Blockchain Smart Contract Integration (Weeks 3-4)
"""
import pytest
import asyncio
import time
import json
import requests
import hashlib
import secrets
from typing import Dict, List, Any, Optional, Tuple
from dataclasses import dataclass, asdict
from datetime import datetime, timedelta
import logging
from enum import Enum
# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class ContractType(Enum):
"""Smart contract types"""
AI_POWER_RENTAL = "ai_power_rental"
PAYMENT_PROCESSING = "payment_processing"
ESCROW_SERVICE = "escrow_service"
PERFORMANCE_VERIFICATION = "performance_verification"
DISPUTE_RESOLUTION = "dispute_resolution"
DYNAMIC_PRICING = "dynamic_pricing"
@dataclass
class SmartContract:
"""Smart contract configuration"""
contract_address: str
contract_type: ContractType
abi: Dict[str, Any]
bytecode: str
deployed: bool = False
gas_limit: int = 1000000
@dataclass
class Transaction:
"""Blockchain transaction"""
tx_hash: str
from_address: str
to_address: str
value: float
gas_used: int
gas_price: float
status: str
timestamp: datetime
block_number: int
@dataclass
class ContractExecution:
"""Contract execution result"""
contract_address: str
function_name: str
parameters: Dict[str, Any]
result: Dict[str, Any]
gas_used: int
execution_time: float
success: bool
class BlockchainIntegrationTests:
"""Test suite for blockchain smart contract integration"""
def __init__(self, blockchain_url: str = "http://127.0.0.1:8545"):
self.blockchain_url = blockchain_url
self.contracts = self._setup_contracts()
self.transactions = []
self.session = requests.Session()
self.session.timeout = 30
def _setup_contracts(self) -> Dict[ContractType, SmartContract]:
"""Setup smart contracts for testing"""
contracts = {}
# AI Power Rental Contract
contracts[ContractType.AI_POWER_RENTAL] = SmartContract(
contract_address="0x1234567890123456789012345678901234567890",
contract_type=ContractType.AI_POWER_RENTAL,
abi={
"name": "AIPowerRental",
"functions": [
"rentResource(resourceId, consumerId, durationHours)",
"completeRental(rentalId, performanceMetrics)",
"cancelRental(rentalId, reason)",
"getRentalStatus(rentalId)"
]
},
bytecode="0x608060405234801561001057600080fd5b50...",
gas_limit=800000
)
# Payment Processing Contract
contracts[ContractType.PAYMENT_PROCESSING] = SmartContract(
contract_address="0x2345678901234567890123456789012345678901",
contract_type=ContractType.PAYMENT_PROCESSING,
abi={
"name": "PaymentProcessing",
"functions": [
"processPayment(fromAgent, toAgent, amount, paymentType)",
"validatePayment(paymentId)",
"refundPayment(paymentId, reason)",
"getPaymentStatus(paymentId)"
]
},
bytecode="0x608060405234801561001057600080fd5b50...",
gas_limit=500000
)
# Escrow Service Contract
contracts[ContractType.ESCROW_SERVICE] = SmartContract(
contract_address="0x3456789012345678901234567890123456789012",
contract_type=ContractType.ESCROW_SERVICE,
abi={
"name": "EscrowService",
"functions": [
"createEscrow(payer, payee, amount, conditions)",
"releaseEscrow(escrowId)",
"disputeEscrow(escrowId, reason)",
"getEscrowStatus(escrowId)"
]
},
bytecode="0x608060405234801561001057600080fd5b50...",
gas_limit=600000
)
# Performance Verification Contract
contracts[ContractType.PERFORMANCE_VERIFICATION] = SmartContract(
contract_address="0x4567890123456789012345678901234567890123",
contract_type=ContractType.PERFORMANCE_VERIFICATION,
abi={
"name": "PerformanceVerification",
"functions": [
"submitPerformanceReport(rentalId, metrics)",
"verifyPerformance(rentalId)",
"calculatePerformanceScore(rentalId)",
"getPerformanceReport(rentalId)"
]
},
bytecode="0x608060405234801561001057600080fd5b50...",
gas_limit=400000
)
# Dispute Resolution Contract
contracts[ContractType.DISPUTE_RESOLUTION] = SmartContract(
contract_address="0x5678901234567890123456789012345678901234",
contract_type=ContractType.DISPUTE_RESOLUTION,
abi={
"name": "DisputeResolution",
"functions": [
"createDispute(disputer, disputee, reason, evidence)",
"voteOnDispute(disputeId, vote, reason)",
"resolveDispute(disputeId, resolution)",
"getDisputeStatus(disputeId)"
]
},
bytecode="0x608060405234801561001057600080fd5b50...",
gas_limit=700000
)
# Dynamic Pricing Contract
contracts[ContractType.DYNAMIC_PRICING] = SmartContract(
contract_address="0x6789012345678901234567890123456789012345",
contract_type=ContractType.DYNAMIC_PRICING,
abi={
"name": "DynamicPricing",
"functions": [
"updatePricing(resourceType, basePrice, demandFactor)",
"calculateOptimalPrice(resourceType, supply, demand)",
"getPricingHistory(resourceType, timeRange)",
"adjustPricingForMarketConditions()"
]
},
bytecode="0x608060405234801561001057600080fd5b50...",
gas_limit=300000
)
return contracts
def _generate_transaction_hash(self) -> str:
"""Generate a mock transaction hash"""
return "0x" + secrets.token_hex(32)
def _generate_address(self) -> str:
"""Generate a mock blockchain address"""
return "0x" + secrets.token_hex(20)
async def test_contract_deployment(self, contract_type: ContractType) -> Dict[str, Any]:
"""Test smart contract deployment"""
try:
contract = self.contracts[contract_type]
# Simulate contract deployment
deployment_payload = {
"contract_bytecode": contract.bytecode,
"abi": contract.abi,
"gas_limit": contract.gas_limit,
"sender": self._generate_address()
}
start_time = time.time()
response = self.session.post(
f"{self.blockchain_url}/v1/contracts/deploy",
json=deployment_payload,
timeout=20
)
end_time = time.time()
if response.status_code == 200:
result = response.json()
contract.deployed = True
return {
"contract_type": contract_type.value,
"contract_address": result.get("contract_address"),
"deployment_time": (end_time - start_time),
"gas_used": result.get("gas_used", contract.gas_limit),
"success": True,
"block_number": result.get("block_number")
}
else:
return {
"contract_type": contract_type.value,
"error": f"Deployment failed with status {response.status_code}",
"success": False
}
except Exception as e:
return {
"contract_type": contract_type.value,
"error": str(e),
"success": False
}
async def test_contract_execution(self, contract_type: ContractType, function_name: str, parameters: Dict[str, Any]) -> Dict[str, Any]:
"""Test smart contract function execution"""
try:
contract = self.contracts[contract_type]
if not contract.deployed:
return {
"contract_type": contract_type.value,
"function_name": function_name,
"error": "Contract not deployed",
"success": False
}
execution_payload = {
"contract_address": contract.contract_address,
"function_name": function_name,
"parameters": parameters,
"gas_limit": contract.gas_limit,
"sender": self._generate_address()
}
start_time = time.time()
response = self.session.post(
f"{self.blockchain_url}/v1/contracts/execute",
json=execution_payload,
timeout=15
)
end_time = time.time()
if response.status_code == 200:
result = response.json()
# Record transaction
transaction = Transaction(
tx_hash=self._generate_transaction_hash(),
from_address=execution_payload["sender"],
to_address=contract.contract_address,
value=parameters.get("value", 0),
gas_used=result.get("gas_used", 0),
gas_price=result.get("gas_price", 0),
status="confirmed",
timestamp=datetime.now(),
block_number=result.get("block_number", 0)
)
self.transactions.append(transaction)
return {
"contract_type": contract_type.value,
"function_name": function_name,
"execution_time": (end_time - start_time),
"gas_used": transaction.gas_used,
"transaction_hash": transaction.tx_hash,
"result": result.get("return_value"),
"success": True
}
else:
return {
"contract_type": contract_type.value,
"function_name": function_name,
"error": f"Execution failed with status {response.status_code}",
"success": False
}
except Exception as e:
return {
"contract_type": contract_type.value,
"function_name": function_name,
"error": str(e),
"success": False
}
async def test_ai_power_rental_contract(self) -> Dict[str, Any]:
"""Test AI power rental contract functionality"""
try:
# Deploy contract
deployment_result = await self.test_contract_deployment(ContractType.AI_POWER_RENTAL)
if not deployment_result["success"]:
return deployment_result
# Test resource rental
rental_params = {
"resourceId": "gpu_resource_001",
"consumerId": "agent_consumer_001",
"durationHours": 4,
"maxPricePerHour": 5.0,
"value": 20.0 # Total payment
}
rental_result = await self.test_contract_execution(
ContractType.AI_POWER_RENTAL,
"rentResource",
rental_params
)
if rental_result["success"]:
# Test rental completion
completion_params = {
"rentalId": rental_result["result"].get("rentalId"),
"performanceMetrics": {
"actualComputeHours": 3.8,
"performanceScore": 0.95,
"gpuUtilization": 0.87
}
}
completion_result = await self.test_contract_execution(
ContractType.AI_POWER_RENTAL,
"completeRental",
completion_params
)
return {
"deployment": deployment_result,
"rental": rental_result,
"completion": completion_result,
"overall_success": all([
deployment_result["success"],
rental_result["success"],
completion_result["success"]
])
}
else:
return {
"deployment": deployment_result,
"rental": rental_result,
"overall_success": False
}
except Exception as e:
return {"error": str(e), "overall_success": False}
async def test_payment_processing_contract(self) -> Dict[str, Any]:
"""Test payment processing contract functionality"""
try:
# Deploy contract
deployment_result = await self.test_contract_deployment(ContractType.PAYMENT_PROCESSING)
if not deployment_result["success"]:
return deployment_result
# Test payment processing
payment_params = {
"fromAgent": "agent_consumer_001",
"toAgent": "agent_provider_001",
"amount": 25.0,
"paymentType": "ai_power_rental",
"value": 25.0
}
payment_result = await self.test_contract_execution(
ContractType.PAYMENT_PROCESSING,
"processPayment",
payment_params
)
if payment_result["success"]:
# Test payment validation
validation_params = {
"paymentId": payment_result["result"].get("paymentId")
}
validation_result = await self.test_contract_execution(
ContractType.PAYMENT_PROCESSING,
"validatePayment",
validation_params
)
return {
"deployment": deployment_result,
"payment": payment_result,
"validation": validation_result,
"overall_success": all([
deployment_result["success"],
payment_result["success"],
validation_result["success"]
])
}
else:
return {
"deployment": deployment_result,
"payment": payment_result,
"overall_success": False
}
except Exception as e:
return {"error": str(e), "overall_success": False}
async def test_escrow_service_contract(self) -> Dict[str, Any]:
"""Test escrow service contract functionality"""
try:
# Deploy contract
deployment_result = await self.test_contract_deployment(ContractType.ESCROW_SERVICE)
if not deployment_result["success"]:
return deployment_result
# Test escrow creation
escrow_params = {
"payer": "agent_consumer_001",
"payee": "agent_provider_001",
"amount": 50.0,
"conditions": {
"resourceDelivered": True,
"performanceMet": True,
"timeframeMet": True
},
"value": 50.0
}
escrow_result = await self.test_contract_execution(
ContractType.ESCROW_SERVICE,
"createEscrow",
escrow_params
)
if escrow_result["success"]:
# Test escrow release
release_params = {
"escrowId": escrow_result["result"].get("escrowId")
}
release_result = await self.test_contract_execution(
ContractType.ESCROW_SERVICE,
"releaseEscrow",
release_params
)
return {
"deployment": deployment_result,
"creation": escrow_result,
"release": release_result,
"overall_success": all([
deployment_result["success"],
escrow_result["success"],
release_result["success"]
])
}
else:
return {
"deployment": deployment_result,
"creation": escrow_result,
"overall_success": False
}
except Exception as e:
return {"error": str(e), "overall_success": False}
async def test_performance_verification_contract(self) -> Dict[str, Any]:
"""Test performance verification contract functionality"""
try:
# Deploy contract
deployment_result = await self.test_contract_deployment(ContractType.PERFORMANCE_VERIFICATION)
if not deployment_result["success"]:
return deployment_result
# Test performance report submission
report_params = {
"rentalId": "rental_001",
"metrics": {
"computeHoursDelivered": 3.5,
"averageGPUUtilization": 0.89,
"taskCompletionRate": 0.97,
"errorRate": 0.02,
"responseTimeAvg": 0.08
}
}
report_result = await self.test_contract_execution(
ContractType.PERFORMANCE_VERIFICATION,
"submitPerformanceReport",
report_params
)
if report_result["success"]:
# Test performance verification
verification_params = {
"rentalId": "rental_001"
}
verification_result = await self.test_contract_execution(
ContractType.PERFORMANCE_VERIFICATION,
"verifyPerformance",
verification_params
)
return {
"deployment": deployment_result,
"report_submission": report_result,
"verification": verification_result,
"overall_success": all([
deployment_result["success"],
report_result["success"],
verification_result["success"]
])
}
else:
return {
"deployment": deployment_result,
"report_submission": report_result,
"overall_success": False
}
except Exception as e:
return {"error": str(e), "overall_success": False}
async def test_dispute_resolution_contract(self) -> Dict[str, Any]:
"""Test dispute resolution contract functionality"""
try:
# Deploy contract
deployment_result = await self.test_contract_deployment(ContractType.DISPUTE_RESOLUTION)
if not deployment_result["success"]:
return deployment_result
# Test dispute creation
dispute_params = {
"disputer": "agent_consumer_001",
"disputee": "agent_provider_001",
"reason": "Performance below agreed SLA",
"evidence": {
"performanceMetrics": {"actualScore": 0.75, "promisedScore": 0.90},
"logs": ["timestamp1: GPU utilization below threshold"],
"screenshots": ["performance_dashboard.png"]
}
}
dispute_result = await self.test_contract_execution(
ContractType.DISPUTE_RESOLUTION,
"createDispute",
dispute_params
)
if dispute_result["success"]:
# Test voting on dispute
vote_params = {
"disputeId": dispute_result["result"].get("disputeId"),
"vote": "favor_disputer",
"reason": "Evidence supports performance claim"
}
vote_result = await self.test_contract_execution(
ContractType.DISPUTE_RESOLUTION,
"voteOnDispute",
vote_params
)
return {
"deployment": deployment_result,
"dispute_creation": dispute_result,
"voting": vote_result,
"overall_success": all([
deployment_result["success"],
dispute_result["success"],
vote_result["success"]
])
}
else:
return {
"deployment": deployment_result,
"dispute_creation": dispute_result,
"overall_success": False
}
except Exception as e:
return {"error": str(e), "overall_success": False}
async def test_dynamic_pricing_contract(self) -> Dict[str, Any]:
"""Test dynamic pricing contract functionality"""
try:
# Deploy contract
deployment_result = await self.test_contract_deployment(ContractType.DYNAMIC_PRICING)
if not deployment_result["success"]:
return deployment_result
# Test pricing update
pricing_params = {
"resourceType": "nvidia_a100",
"basePrice": 2.5,
"demandFactor": 1.2,
"supplyFactor": 0.8
}
update_result = await self.test_contract_execution(
ContractType.DYNAMIC_PRICING,
"updatePricing",
pricing_params
)
if update_result["success"]:
# Test optimal price calculation
calculation_params = {
"resourceType": "nvidia_a100",
"supply": 15,
"demand": 25,
"marketConditions": {
"competitorPricing": [2.3, 2.7, 2.9],
"seasonalFactor": 1.1,
"geographicPremium": 0.15
}
}
calculation_result = await self.test_contract_execution(
ContractType.DYNAMIC_PRICING,
"calculateOptimalPrice",
calculation_params
)
return {
"deployment": deployment_result,
"pricing_update": update_result,
"price_calculation": calculation_result,
"overall_success": all([
deployment_result["success"],
update_result["success"],
calculation_result["success"]
])
}
else:
return {
"deployment": deployment_result,
"pricing_update": update_result,
"overall_success": False
}
except Exception as e:
return {"error": str(e), "overall_success": False}
async def test_transaction_speed(self) -> Dict[str, Any]:
"""Test blockchain transaction speed"""
try:
transaction_times = []
# Test multiple transactions
for i in range(10):
start_time = time.time()
# Simple contract execution
result = await self.test_contract_execution(
ContractType.PAYMENT_PROCESSING,
"processPayment",
{
"fromAgent": f"agent_{i}",
"toAgent": f"provider_{i}",
"amount": 1.0,
"paymentType": "test",
"value": 1.0
}
)
end_time = time.time()
if result["success"]:
transaction_times.append((end_time - start_time) * 1000) # Convert to ms
if transaction_times:
avg_time = sum(transaction_times) / len(transaction_times)
min_time = min(transaction_times)
max_time = max(transaction_times)
return {
"transaction_count": len(transaction_times),
"average_time_ms": avg_time,
"min_time_ms": min_time,
"max_time_ms": max_time,
"target_time_ms": 30000, # 30 seconds target
"within_target": avg_time <= 30000,
"success": True
}
else:
return {
"error": "No successful transactions",
"success": False
}
except Exception as e:
return {"error": str(e), "success": False}
async def test_payment_reliability(self) -> Dict[str, Any]:
"""Test AITBC payment processing reliability"""
try:
payment_results = []
# Test multiple payments
for i in range(20):
result = await self.test_contract_execution(
ContractType.PAYMENT_PROCESSING,
"processPayment",
{
"fromAgent": f"consumer_{i}",
"toAgent": f"provider_{i}",
"amount": 5.0,
"paymentType": "ai_power_rental",
"value": 5.0
}
)
payment_results.append(result["success"])
successful_payments = sum(payment_results)
total_payments = len(payment_results)
success_rate = (successful_payments / total_payments) * 100
return {
"total_payments": total_payments,
"successful_payments": successful_payments,
"success_rate_percent": success_rate,
"target_success_rate": 99.9,
"meets_target": success_rate >= 99.9,
"success": True
}
except Exception as e:
return {"error": str(e), "success": False}
# Test Fixtures
@pytest.fixture
async def blockchain_tests():
"""Create blockchain integration test instance"""
return BlockchainIntegrationTests()
# Test Classes
class TestContractDeployment:
"""Test smart contract deployment"""
@pytest.mark.asyncio
async def test_all_contracts_deployment(self, blockchain_tests):
"""Test deployment of all smart contracts"""
deployment_results = {}
for contract_type in ContractType:
result = await blockchain_tests.test_contract_deployment(contract_type)
deployment_results[contract_type.value] = result
# Assert all contracts deployed successfully
failed_deployments = [
contract for contract, result in deployment_results.items()
if not result.get("success", False)
]
assert len(failed_deployments) == 0, f"Failed deployments: {failed_deployments}"
# Assert deployment times are reasonable
slow_deployments = [
contract for contract, result in deployment_results.items()
if result.get("deployment_time", 0) > 10.0 # 10 seconds max
]
assert len(slow_deployments) == 0, f"Slow deployments: {slow_deployments}"
class TestAIPowerRentalContract:
"""Test AI power rental contract functionality"""
@pytest.mark.asyncio
async def test_complete_rental_workflow(self, blockchain_tests):
"""Test complete AI power rental workflow"""
result = await blockchain_tests.test_ai_power_rental_contract()
assert result.get("overall_success", False), "AI power rental workflow failed"
assert result["deployment"]["success"], "Contract deployment failed"
assert result["rental"]["success"], "Resource rental failed"
assert result["completion"]["success"], "Rental completion failed"
# Check transaction hash is generated
assert "transaction_hash" in result["rental"], "No transaction hash for rental"
assert "transaction_hash" in result["completion"], "No transaction hash for completion"
class TestPaymentProcessingContract:
"""Test payment processing contract functionality"""
@pytest.mark.asyncio
async def test_complete_payment_workflow(self, blockchain_tests):
"""Test complete payment processing workflow"""
result = await blockchain_tests.test_payment_processing_contract()
assert result.get("overall_success", False), "Payment processing workflow failed"
assert result["deployment"]["success"], "Contract deployment failed"
assert result["payment"]["success"], "Payment processing failed"
assert result["validation"]["success"], "Payment validation failed"
# Check payment ID is generated
assert "paymentId" in result["payment"]["result"], "No payment ID generated"
class TestEscrowServiceContract:
"""Test escrow service contract functionality"""
@pytest.mark.asyncio
async def test_complete_escrow_workflow(self, blockchain_tests):
"""Test complete escrow service workflow"""
result = await blockchain_tests.test_escrow_service_contract()
assert result.get("overall_success", False), "Escrow service workflow failed"
assert result["deployment"]["success"], "Contract deployment failed"
assert result["creation"]["success"], "Escrow creation failed"
assert result["release"]["success"], "Escrow release failed"
# Check escrow ID is generated
assert "escrowId" in result["creation"]["result"], "No escrow ID generated"
class TestPerformanceVerificationContract:
"""Test performance verification contract functionality"""
@pytest.mark.asyncio
async def test_performance_verification_workflow(self, blockchain_tests):
"""Test performance verification workflow"""
result = await blockchain_tests.test_performance_verification_contract()
assert result.get("overall_success", False), "Performance verification workflow failed"
assert result["deployment"]["success"], "Contract deployment failed"
assert result["report_submission"]["success"], "Performance report submission failed"
assert result["verification"]["success"], "Performance verification failed"
class TestDisputeResolutionContract:
"""Test dispute resolution contract functionality"""
@pytest.mark.asyncio
async def test_dispute_resolution_workflow(self, blockchain_tests):
"""Test dispute resolution workflow"""
result = await blockchain_tests.test_dispute_resolution_contract()
assert result.get("overall_success", False), "Dispute resolution workflow failed"
assert result["deployment"]["success"], "Contract deployment failed"
assert result["dispute_creation"]["success"], "Dispute creation failed"
assert result["voting"]["success"], "Dispute voting failed"
# Check dispute ID is generated
assert "disputeId" in result["dispute_creation"]["result"], "No dispute ID generated"
class TestDynamicPricingContract:
"""Test dynamic pricing contract functionality"""
@pytest.mark.asyncio
async def test_dynamic_pricing_workflow(self, blockchain_tests):
"""Test dynamic pricing workflow"""
result = await blockchain_tests.test_dynamic_pricing_contract()
assert result.get("overall_success", False), "Dynamic pricing workflow failed"
assert result["deployment"]["success"], "Contract deployment failed"
assert result["pricing_update"]["success"], "Pricing update failed"
assert result["price_calculation"]["success"], "Price calculation failed"
# Check optimal price is calculated
assert "optimalPrice" in result["price_calculation"]["result"], "No optimal price calculated"
class TestBlockchainPerformance:
"""Test blockchain performance metrics"""
@pytest.mark.asyncio
async def test_transaction_speed(self, blockchain_tests):
"""Test blockchain transaction speed"""
result = await blockchain_tests.test_transaction_speed()
assert result.get("success", False), "Transaction speed test failed"
assert result.get("within_target", False), "Transaction speed below target"
assert result.get("average_time_ms", 100000) <= 30000, "Average transaction time too high"
@pytest.mark.asyncio
async def test_payment_reliability(self, blockchain_tests):
"""Test AITBC payment processing reliability"""
result = await blockchain_tests.test_payment_reliability()
assert result.get("success", False), "Payment reliability test failed"
assert result.get("meets_target", False), "Payment reliability below target"
assert result.get("success_rate_percent", 0) >= 99.9, "Payment success rate too low"
if __name__ == "__main__":
pytest.main([__file__, "-v", "--tb=short"])