re-uploading work
This commit is contained in:
393
tests/QUICK_START.md
Normal file
393
tests/QUICK_START.md
Normal file
@@ -0,0 +1,393 @@
|
||||
# E2E Testing Quick Start Guide
|
||||
|
||||
**Last Updated**: 2026-01-22
|
||||
**Status**: ✅ Infrastructure Ready - Quick Test Passing (3/3)
|
||||
|
||||
---
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- **Attune API service running** on `http://localhost:8080` (or set `ATTUNE_API_URL`)
|
||||
- Python 3.8+ installed
|
||||
- Internet connection (for downloading test dependencies)
|
||||
|
||||
---
|
||||
|
||||
## Quick Validation (No Setup Required)
|
||||
|
||||
Test basic connectivity without installing dependencies:
|
||||
|
||||
```bash
|
||||
cd tests
|
||||
python3 quick_test.py
|
||||
```
|
||||
|
||||
**Expected Output:**
|
||||
```
|
||||
============================================================
|
||||
Attune E2E Quick Test
|
||||
============================================================
|
||||
API URL: http://localhost:8080
|
||||
|
||||
Testing /health endpoint...
|
||||
✓ Health check passed: {'status': 'ok'}
|
||||
|
||||
Testing authentication...
|
||||
Attempting registration...
|
||||
⚠ Registration returned: 200
|
||||
Attempting login...
|
||||
✓ Login successful, got token: eyJ0eXAiOiJKV1QiLCJh...
|
||||
✓ Authenticated as: test@attune.local
|
||||
|
||||
Testing pack endpoints...
|
||||
Fetching pack list...
|
||||
✓ Pack list retrieved: 0 packs found
|
||||
|
||||
============================================================
|
||||
Test Summary
|
||||
============================================================
|
||||
✓ PASS Health Check
|
||||
✓ PASS Authentication
|
||||
✓ PASS Pack Endpoints
|
||||
------------------------------------------------------------
|
||||
Total: 3/3 passed
|
||||
============================================================
|
||||
|
||||
✓ All tests passed! E2E environment is ready.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Full Test Suite
|
||||
|
||||
### 1. Setup (First Time Only)
|
||||
|
||||
```bash
|
||||
cd tests
|
||||
./run_e2e_tests.sh --setup
|
||||
```
|
||||
|
||||
This will:
|
||||
- Create a Python virtual environment at `tests/venvs/e2e`
|
||||
- Install all test dependencies (pytest, requests, etc.)
|
||||
- Verify dependencies are installed correctly
|
||||
|
||||
### 2. Run Tests
|
||||
|
||||
**Basic run:**
|
||||
```bash
|
||||
./run_e2e_tests.sh
|
||||
```
|
||||
|
||||
**Verbose output (recommended):**
|
||||
```bash
|
||||
./run_e2e_tests.sh -v
|
||||
```
|
||||
|
||||
**Run specific test:**
|
||||
```bash
|
||||
./run_e2e_tests.sh -k "test_api_health"
|
||||
```
|
||||
|
||||
**Stop on first failure:**
|
||||
```bash
|
||||
./run_e2e_tests.sh -s
|
||||
```
|
||||
|
||||
**With coverage report:**
|
||||
```bash
|
||||
./run_e2e_tests.sh --coverage
|
||||
```
|
||||
|
||||
**All options:**
|
||||
```bash
|
||||
./run_e2e_tests.sh -h
|
||||
```
|
||||
|
||||
### 3. Cleanup
|
||||
|
||||
```bash
|
||||
./run_e2e_tests.sh --teardown
|
||||
```
|
||||
|
||||
This removes:
|
||||
- Test artifacts
|
||||
- Log files
|
||||
- Pytest cache
|
||||
- Coverage reports
|
||||
|
||||
---
|
||||
|
||||
## Manual Test Execution (Advanced)
|
||||
|
||||
If you prefer to run pytest directly:
|
||||
|
||||
```bash
|
||||
# Activate virtual environment
|
||||
source tests/venvs/e2e/bin/activate
|
||||
|
||||
# Run tests
|
||||
cd tests
|
||||
pytest test_e2e_basic.py -v
|
||||
|
||||
# Deactivate when done
|
||||
deactivate
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Environment Variables
|
||||
|
||||
Configure test behavior via environment variables:
|
||||
|
||||
```bash
|
||||
# API endpoint (default: http://localhost:8080)
|
||||
export ATTUNE_API_URL="http://localhost:8080"
|
||||
|
||||
# Test timeout in seconds (default: 60)
|
||||
export TEST_TIMEOUT="60"
|
||||
|
||||
# Then run tests
|
||||
./run_e2e_tests.sh -v
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### API Service Not Running
|
||||
|
||||
**Error:**
|
||||
```
|
||||
✗ API service is not reachable at http://localhost:8080
|
||||
```
|
||||
|
||||
**Solution:**
|
||||
```bash
|
||||
# Start API service
|
||||
cd crates/api
|
||||
cargo run --release
|
||||
```
|
||||
|
||||
### Authentication Fails
|
||||
|
||||
**Error:**
|
||||
```
|
||||
✗ Login failed: 422 Client Error: Unprocessable Entity
|
||||
```
|
||||
|
||||
**Common Causes:**
|
||||
1. **Wrong field names**: Must use `"login"` not `"username"`
|
||||
2. **Password too short**: Minimum 8 characters required
|
||||
3. **Missing fields**: Both `login` and `password` are required
|
||||
|
||||
**Test credentials:**
|
||||
- Login: `test@attune.local`
|
||||
- Password: `TestPass123!` (min 8 chars)
|
||||
|
||||
### Import Errors
|
||||
|
||||
**Error:**
|
||||
```
|
||||
ModuleNotFoundError: No module named 'pytest'
|
||||
```
|
||||
|
||||
**Solution:**
|
||||
```bash
|
||||
# Run setup first
|
||||
./run_e2e_tests.sh --setup
|
||||
|
||||
# Or manually install dependencies
|
||||
pip install -r tests/requirements.txt
|
||||
```
|
||||
|
||||
### Pack Registration Fails
|
||||
|
||||
**Error:**
|
||||
```
|
||||
FileNotFoundError: [Errno 2] No such file or directory: 'tests/fixtures/packs/test_pack'
|
||||
```
|
||||
|
||||
**Solution:**
|
||||
```bash
|
||||
# Verify you're in the project root
|
||||
pwd # Should end with /attune
|
||||
|
||||
# Check test pack exists
|
||||
ls -la tests/fixtures/packs/test_pack/
|
||||
|
||||
# If missing, the repository may be incomplete
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Test Scenarios
|
||||
|
||||
### Currently Implemented
|
||||
|
||||
1. ✅ **Health Check** - Validates API is responding
|
||||
2. ✅ **Authentication** - User registration and login
|
||||
3. ✅ **Pack Registration** - Register test pack from local directory
|
||||
4. ✅ **Action Creation** - Create simple echo action
|
||||
5. ✅ **Timer Trigger Flow** - Create trigger, action, and rule (infrastructure only)
|
||||
6. 🔄 **Manual Execution** - Direct action execution (pending endpoint)
|
||||
|
||||
### Planned (Phase 3)
|
||||
|
||||
- Timer automation flow (sensor → event → rule → execution)
|
||||
- Workflow execution (3-task sequential workflow)
|
||||
- FIFO queue ordering (concurrency limits)
|
||||
- Inquiry (human-in-the-loop) flows
|
||||
- Secret management across services
|
||||
- Error handling and retry logic
|
||||
- WebSocket notifications
|
||||
- Dependency isolation (per-pack venvs)
|
||||
|
||||
---
|
||||
|
||||
## API Endpoint Reference
|
||||
|
||||
### Health Endpoints (No Auth)
|
||||
- `GET /health` - Basic health check
|
||||
- `GET /health/detailed` - Health with database status
|
||||
- `GET /health/ready` - Readiness probe
|
||||
- `GET /health/live` - Liveness probe
|
||||
|
||||
### Authentication Endpoints (No Auth)
|
||||
- `POST /auth/register` - Register new user
|
||||
- `POST /auth/login` - Login and get JWT token
|
||||
- `POST /auth/refresh` - Refresh access token
|
||||
|
||||
### Protected Endpoints (Auth Required)
|
||||
- `GET /auth/me` - Get current user info
|
||||
- `POST /auth/change-password` - Change password
|
||||
- `GET /api/v1/packs` - List packs
|
||||
- `POST /api/v1/packs/register` - Register pack
|
||||
- `GET /api/v1/actions` - List actions
|
||||
- `POST /api/v1/actions` - Create action
|
||||
- And all other `/api/v1/*` endpoints...
|
||||
|
||||
---
|
||||
|
||||
## Authentication Schema
|
||||
|
||||
### Register Request
|
||||
```json
|
||||
{
|
||||
"login": "newuser@example.com", // Min 3 chars (NOT "username")
|
||||
"password": "SecurePass123!", // Min 8 chars, max 128
|
||||
"display_name": "New User" // Optional (NOT "full_name")
|
||||
}
|
||||
```
|
||||
|
||||
### Login Request
|
||||
```json
|
||||
{
|
||||
"login": "user@example.com", // NOT "username"
|
||||
"password": "SecurePass123!" // Min 8 chars
|
||||
}
|
||||
```
|
||||
|
||||
### Login Response
|
||||
```json
|
||||
{
|
||||
"data": {
|
||||
"access_token": "eyJ0eXAiOiJKV1QiLCJh...",
|
||||
"refresh_token": "eyJ0eXAiOiJKV1QiLCJh...",
|
||||
"token_type": "Bearer",
|
||||
"expires_in": 3600,
|
||||
"user": {
|
||||
"id": 1,
|
||||
"login": "user@example.com",
|
||||
"display_name": "User Name"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## CI/CD Integration
|
||||
|
||||
### GitHub Actions Example
|
||||
|
||||
```yaml
|
||||
name: E2E Tests
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
e2e-tests:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:14
|
||||
env:
|
||||
POSTGRES_PASSWORD: postgres
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
|
||||
rabbitmq:
|
||||
image: rabbitmq:3.12-management
|
||||
options: >-
|
||||
--health-cmd "rabbitmq-diagnostics ping"
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Setup Rust
|
||||
uses: actions-rs/toolchain@v1
|
||||
with:
|
||||
toolchain: stable
|
||||
|
||||
- name: Start API Service
|
||||
run: |
|
||||
cd crates/api
|
||||
cargo run --release &
|
||||
sleep 5
|
||||
|
||||
- name: Run E2E Tests
|
||||
run: |
|
||||
./tests/run_e2e_tests.sh --setup -v
|
||||
|
||||
- name: Upload Test Reports
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: e2e-test-reports
|
||||
path: tests/htmlcov/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Getting Help
|
||||
|
||||
- **Documentation**: See `tests/README.md` for detailed test scenarios
|
||||
- **Work Summary**: `work-summary/2026-01-22-e2e-testing-phase2.md`
|
||||
- **Issues**: Check service logs in `tests/logs/` (if running via scripts)
|
||||
- **Quick Test**: Use `python3 tests/quick_test.py` to isolate API connectivity issues
|
||||
|
||||
---
|
||||
|
||||
## Status Summary
|
||||
|
||||
| Component | Status | Notes |
|
||||
|-----------|--------|-------|
|
||||
| Test Infrastructure | ✅ Complete | AttuneClient, fixtures, runner |
|
||||
| Quick Test | ✅ Passing | 3/3 tests passing |
|
||||
| Basic Tests | 🔄 Partial | 5 scenarios implemented |
|
||||
| Advanced Tests | 📋 Planned | Timer flow, workflows, FIFO |
|
||||
| CI/CD Integration | 📋 Planned | GitHub Actions workflow |
|
||||
|
||||
**Last Validation**: 2026-01-22 - Quick test confirmed: health ✓, auth ✓, pack endpoints ✓
|
||||
|
||||
---
|
||||
|
||||
**Ready to test? Start here:** `./tests/run_e2e_tests.sh --setup -v`
|
||||
Reference in New Issue
Block a user