196 lines
4.5 KiB
Markdown
196 lines
4.5 KiB
Markdown
# Supervisor End-to-End Tests
|
|
|
|
Comprehensive integration tests for all Hero Supervisor OpenRPC client methods.
|
|
|
|
## Prerequisites
|
|
|
|
1. **Redis Server Running:**
|
|
```bash
|
|
redis-server
|
|
```
|
|
|
|
2. **Supervisor Running:**
|
|
```bash
|
|
cd /Users/timurgordon/code/git.ourworld.tf/herocode/supervisor
|
|
./scripts/run.sh
|
|
```
|
|
|
|
## Running Tests
|
|
|
|
### Run All Tests
|
|
```bash
|
|
cargo test --test end_to_end
|
|
```
|
|
|
|
### Run Specific Test
|
|
```bash
|
|
cargo test --test end_to_end test_01_rpc_discover
|
|
```
|
|
|
|
### Run with Output
|
|
```bash
|
|
cargo test --test end_to_end -- --nocapture
|
|
```
|
|
|
|
### Run in Order (Sequential)
|
|
```bash
|
|
cargo test --test end_to_end -- --test-threads=1 --nocapture
|
|
```
|
|
|
|
## Test Coverage
|
|
|
|
### ✅ Discovery & Info
|
|
- `test_01_rpc_discover` - OpenRPC specification discovery
|
|
- `test_15_supervisor_info` - Supervisor information
|
|
|
|
### ✅ Runner Management
|
|
- `test_02_runner_register` - Register a new runner
|
|
- `test_03_runner_list` - List all runners
|
|
- `test_14_runner_remove` - Remove a runner
|
|
|
|
### ✅ Job Management
|
|
- `test_04_jobs_create` - Create a job without running
|
|
- `test_05_jobs_list` - List all jobs
|
|
- `test_06_job_run_simple` - Run a job and wait for result
|
|
- `test_07_job_status` - Get job status
|
|
- `test_08_job_get` - Get job by ID
|
|
- `test_09_job_delete` - Delete a job
|
|
|
|
### ✅ Authentication & API Keys
|
|
- `test_10_auth_verify` - Verify current API key
|
|
- `test_11_auth_key_create` - Create new API key
|
|
- `test_12_auth_key_list` - List all API keys
|
|
- `test_13_auth_key_remove` - Remove an API key
|
|
|
|
### ✅ Complete Workflow
|
|
- `test_99_complete_workflow` - End-to-end integration test
|
|
|
|
## Test Configuration
|
|
|
|
Tests use the following defaults:
|
|
- **Supervisor URL:** `http://127.0.0.1:3030`
|
|
- **Admin Secret:** `807470fd1e1ccc3fb997a1d4177cceb31a68cb355a4412c8fd6e66e517e902be`
|
|
- **Test Runner:** `test-runner` (all tests use this runner name)
|
|
|
|
**Important:** All tests use the same runner name (`test-runner`), so you only need to start one runner with that name to run all tests.
|
|
|
|
## Expected Behavior
|
|
|
|
### Successful Tests
|
|
All tests should pass when:
|
|
- Supervisor is running on port 3030
|
|
- Admin secret matches configuration
|
|
- Redis is accessible
|
|
|
|
### Expected Warnings
|
|
Some tests may show warnings if:
|
|
- `job.run` times out (no actual runner connected to Redis)
|
|
- Runners already exist from previous test runs
|
|
|
|
These are expected and don't indicate test failure.
|
|
|
|
## Troubleshooting
|
|
|
|
### Connection Refused
|
|
```
|
|
Error: tcp connect error, 127.0.0.1:3030, Connection refused
|
|
```
|
|
**Solution:** Start the supervisor with `./scripts/run.sh`
|
|
|
|
### Method Not Found
|
|
```
|
|
Error: Method not found
|
|
```
|
|
**Solution:** Rebuild supervisor with latest code:
|
|
```bash
|
|
cd /Users/timurgordon/code/git.ourworld.tf/herocode/supervisor
|
|
cargo build
|
|
```
|
|
|
|
### Authorization Failed
|
|
```
|
|
Error: Missing Authorization header
|
|
```
|
|
**Solution:** Check that `ADMIN_SECRET` in test matches supervisor configuration
|
|
|
|
### Job Tests Timeout
|
|
```
|
|
Error: JsonRpc(RequestTimeout)
|
|
```
|
|
**Solution:** Make sure you have a runner connected with the name `test-runner`:
|
|
```bash
|
|
cd /Users/timurgordon/code/git.ourworld.tf/herocode/runner/rust
|
|
cargo run --bin runner_osiris -- test-runner
|
|
```
|
|
|
|
## Continuous Integration
|
|
|
|
To run tests in CI:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# Start Redis
|
|
redis-server --daemonize yes
|
|
|
|
# Start Supervisor
|
|
cd /Users/timurgordon/code/git.ourworld.tf/herocode/supervisor
|
|
./scripts/run.sh &
|
|
SUPERVISOR_PID=$!
|
|
|
|
# Wait for supervisor to be ready
|
|
sleep 2
|
|
|
|
# Run tests
|
|
cargo test --test end_to_end
|
|
|
|
# Cleanup
|
|
kill $SUPERVISOR_PID
|
|
redis-cli shutdown
|
|
```
|
|
|
|
## Adding New Tests
|
|
|
|
1. Create a new test function:
|
|
```rust
|
|
#[tokio::test]
|
|
async fn test_XX_my_new_test() {
|
|
println!("\n🧪 Test: my.new.method");
|
|
let client = create_client().await;
|
|
// ... test code ...
|
|
println!("✅ my.new.method works");
|
|
}
|
|
```
|
|
|
|
2. Run it:
|
|
```bash
|
|
cargo test --test end_to_end test_XX_my_new_test -- --nocapture
|
|
```
|
|
|
|
## Test Output Example
|
|
|
|
```
|
|
🧪 Test: rpc.discover
|
|
✅ rpc.discover works
|
|
|
|
🧪 Test: runner.register
|
|
✅ runner.register works - registered: test-runner-e2e
|
|
|
|
🧪 Test: runner.list
|
|
✅ runner.list works - found 3 runners
|
|
- osiris
|
|
- freezone
|
|
- test-runner-e2e
|
|
|
|
🧪 Test: jobs.create
|
|
✅ jobs.create works - created job: 550e8400-e29b-41d4-a716-446655440000
|
|
|
|
...
|
|
```
|
|
|
|
## Notes
|
|
|
|
- Tests are designed to be idempotent (can run multiple times)
|
|
- Tests clean up after themselves when possible
|
|
- Some tests depend on previous test state (use `--test-threads=1` for strict ordering)
|
|
- Job execution tests may timeout if no runner is connected to Redis (this is expected)
|