Remove outdated GPU marketplace endpoint and fix staking service logic

- Remove duplicate `/marketplace/gpu/{gpu_id}` endpoint from marketplace_gpu.py
- Remove marketplace_gpu router inclusion from main.py (already included elsewhere)
- Fix staking service staker_count logic to check existing stakes before increment/decrement
- Add minimum stake amount validation (100 AITBC)
- Add proper error handling for stake not found cases
- Fix staking pool update to commit and refresh after modifications
- Update CLI send_transaction to use chain
This commit is contained in:
aitbc
2026-04-13 22:07:51 +02:00
parent da630386cf
commit 7c51f3490b
140 changed files with 42080 additions and 267 deletions

257
tests/staking/README.md Normal file
View File

@@ -0,0 +1,257 @@
# AITBC Staking Tests Documentation
## Overview
This directory contains tests for the AITBC staking system, including the AgentStaking smart contract and the Python staking service.
## Test Structure
```
tests/
├── fixtures/
│ └── staking_fixtures.py # Shared fixtures for staking tests
├── services/
│ └── test_staking_service.py # Service-level tests
├── integration/
│ └── test_staking_lifecycle.py # Integration tests
└── staking/
└── README.md # This file
```
## Test Files
### Service Tests (`tests/services/test_staking_service.py`)
Tests the Python staking service business logic.
**Status**: 8/8 tests passing ✓
**Tests Covered**:
- Create stake with valid parameters
- Get stake by ID
- Get user stakes with filters
- Add to stake
- Calculate rewards
- Unsupported agent validation
- Invalid amount validation
- APY calculation verification
**Dependencies**:
- pytest
- sqlmodel
- SQLite (in-memory database)
**Run Command**:
```bash
/opt/aitbc/venv/bin/python -m pytest tests/services/test_staking_service.py -v
```
### Integration Tests (`tests/integration/test_staking_lifecycle.py`)
Tests the complete staking lifecycle end-to-end.
**Status**: 4/4 tests passing ✓
**Tests Covered**:
- Complete staking lifecycle (create, unbond, complete)
- Stake accumulation over time
- Multiple stakes on same agent
- Stakes with different performance tiers
**Dependencies**:
- pytest
- sqlmodel
- SQLite (in-memory database)
**Run Command**:
```bash
/opt/aitbc/venv/bin/python -m pytest tests/integration/test_staking_lifecycle.py -v
```
### Contract Tests (`contracts/test/AgentStaking.test.js`)
Tests the AgentStaking smart contract using Hardhat.
**Status**: Blocked by compilation errors in unrelated contracts
**Tests Implemented**:
- Create stake with valid parameters
- Initiate unbonding after lock period
- Complete unbonding after unbonding period
**Issue**: Unrelated contracts have DocstringParsingError and TypeError
**Run Command** (when unblocked):
```bash
cd /opt/aitbc/contracts
npx hardhat test test/AgentStaking.test.js
```
## Shared Fixtures (`tests/fixtures/staking_fixtures.py`)
Reusable fixtures for staking tests to avoid duplication.
**Available Fixtures**:
- `db_session` - In-memory SQLite database
- `staking_service` - StakingService instance
- `agent_wallet` - Default test agent wallet
- `staker_address` - Default test staker address
- `agent_metrics` - GOLD tier agent metrics
- `agent_metrics_bronze` - BRONZE tier agent metrics
- `agent_metrics_diamond` - DIAMOND tier agent metrics
- `staking_pool` - Test staking pool
- `stake_data` - Default stake creation data
- `large_stake_data` - Large stake data
- `small_stake_data` - Small stake data
- `invalid_stake_data` - Invalid stake data
- `created_stake` - Pre-created stake for testing
- `active_stake` - Active stake in database
- `unbonding_stake` - Unbonding stake in database
- `completed_stake` - Completed stake in database
- `multiple_stakes` - Multiple stakes for testing
**Helper Functions**:
- `calculate_expected_apy()` - Calculate expected APY
- `get_tier_multiplier()` - Get tier multiplier
- `get_lock_multiplier()` - Get lock period multiplier
## Test Runner
A dedicated test runner script is available to execute all staking tests:
**Location**: `/opt/aitbc/scripts/testing/run_staking_tests.sh`
**Run Command**:
```bash
/opt/aitbc/scripts/testing/run_staking_tests.sh
```
**Features**:
- Runs service, integration, and contract tests
- Generates combined test report
- Saves logs to `/var/log/aitbc/tests/staking/`
- Provides pass/fail status for each test suite
## Test Data Requirements
### Required Test Data
- Agent wallet addresses (for different performance tiers)
- Staker addresses (for creating stakes)
- Agent performance metrics (accuracy, success rates, submission counts)
- Staking pool data (initial state)
### Test Data Generation
Test data can be generated using the fixtures or by creating test data manually in fixtures.
## Known Issues
### Deprecation Warnings
- **Issue**: 63 deprecation warnings about `datetime.utcnow()`
- **Impact**: Warnings only - tests pass successfully
- **Fix**: Requires database migration to timezone-aware datetimes
- **Status**: Deferred - not critical for functionality
### Contract Test Blocking
- **Issue**: Compilation errors in unrelated contracts
- **Error Types**: DocstringParsingError, TypeError
- **Impact**: Cannot run AgentStaking contract tests
- **Fix Options**:
1. Fix compilation errors in affected contracts (proper solution)
2. Isolate AgentStaking testing with separate Hardhat config
3. Use mock contract deployment for initial testing
- **Status**: Deferred - service and integration tests provide good coverage
## Test Execution
### Run All Staking Tests
```bash
/opt/aitbc/scripts/testing/run_staking_tests.sh
```
### Run Service Tests Only
```bash
/opt/aitbc/venv/bin/python -m pytest tests/services/test_staking_service.py -v
```
### Run Integration Tests Only
```bash
/opt/aitbc/venv/bin/python -m pytest tests/integration/test_staking_lifecycle.py -v
```
### Run Contract Tests Only (when unblocked)
```bash
cd /opt/aitbc/contracts
npx hardhat test test/AgentStaking.test.js
```
## Test Coverage
### Current Coverage
- **Service Tests**: 8/8 tests passing (100%)
- **Integration Tests**: 4/4 tests passing (100%)
- **Contract Tests**: 0/3 tests (blocked)
### Coverage Areas
- ✅ Stake creation and validation
- ✅ APY calculation
- ✅ Unbonding operations
- ✅ Reward calculation
- ✅ Agent metrics management
- ✅ Staking pool operations
- ❌ Contract deployment (blocked)
- ❌ Contract execution (blocked)
- ❌ Contract events (blocked)
## Future Improvements
### High Priority
- [ ] Improve service test coverage with edge cases
- [ ] Add error handling tests
- [ ] Add performance tests
### Medium Priority
- [ ] Create test data generator script
- [ ] Add CI/CD integration
- [ ] Implement test parallelization
- [ ] Add performance benchmarks
### Low Priority (When Contract Tests Unblocked)
- [ ] Fix contract compilation errors
- [ ] Run contract tests
- [ ] Add contract-service integration tests
- [ ] Implement comprehensive end-to-end tests
## Troubleshooting
### Service Tests Fail
1. Check SQLite in-memory database initialization
2. Verify SQLModel imports are correct
3. Check session commit and refresh operations
4. Review fixture dependencies
### Integration Tests Fail
1. Verify service test dependencies
2. Check database session management
3. Ensure fixtures are properly isolated
4. Review time simulation logic
### Contract Tests Fail
1. Check Hardhat configuration
2. Verify contract dependencies (AIToken, PerformanceVerifier)
3. Ensure contract compilation succeeds
4. Review gas limits and transaction parameters
## Reports
Test reports are generated in `/var/log/aitbc/tests/staking/`:
- `service_tests_*.log` - Service test output
- `integration_tests_*.log` - Integration test output
- `contract_tests_*.log` - Contract test output
- `staking_test_report_*.txt` - Combined test report
## References
- **Test Plan**: `/opt/aitbc/tests/contracts/staking_test_plan.md`
- **Implementation Plan**: `/root/.windsurf/plans/staking-high-priority-tests-6c2d50.md`
- **Service Code**: `/opt/aitbc/apps/coordinator-api/src/app/services/staking_service.py`
- **Domain Models**: `/opt/aitbc/apps/coordinator-api/src/app/domain/bounty.py`