83 lines
2.3 KiB
Markdown
Executable File
83 lines
2.3 KiB
Markdown
Executable File
# Chess API Test Suite
|
|
|
|
This directory contains comprehensive test suites for the Chess API server, covering both API functionality and database persistence.
|
|
|
|
## Prerequisites
|
|
|
|
- `jq` - JSON processor
|
|
- `curl` - HTTP client
|
|
- `sqlite3` - SQLite CLI (for database tests only)
|
|
- Compiled `chessd` binary in parent directory
|
|
|
|
## Test Suites
|
|
|
|
### 1. API Functionality Tests (`test-api.sh`)
|
|
|
|
Tests all API endpoints, error handling, rate limiting, and game logic.
|
|
|
|
**Running the test:**
|
|
```bash
|
|
# Start server in development mode (required for tests to pass)
|
|
../chessd -dev
|
|
|
|
# In another terminal, run tests
|
|
./test-api.sh
|
|
```
|
|
|
|
**Coverage:**
|
|
- Game creation and management (HvH, HvC, CvC)
|
|
- Move validation and execution
|
|
- Computer move triggering with "cccc"
|
|
- Undo functionality
|
|
- Player configuration changes
|
|
- Rate limiting (dev mode: 20 req/s)
|
|
- Security hardening and input validation
|
|
|
|
### 2. Database Persistence Tests (`test-db.sh`)
|
|
|
|
Tests database storage, async writes, and data integrity.
|
|
|
|
**Running the test:**
|
|
```bash
|
|
# Terminal 1: Start server with database
|
|
./run-server-with-db.sh ../chessd
|
|
|
|
# Terminal 2: Run database tests
|
|
./test-db.sh
|
|
|
|
# When done, press Ctrl+C in Terminal 1
|
|
```
|
|
|
|
**Coverage:**
|
|
- Game and move persistence
|
|
- Async write buffer behavior
|
|
- Multi-game isolation
|
|
- Undo effects on database
|
|
- WAL mode verification
|
|
- Foreign key constraints
|
|
|
|
## Important Notes
|
|
|
|
1. **Development Mode Required**: The server MUST be started with `-dev` flag for tests to pass. This enables:
|
|
- Relaxed rate limiting (20 req/s instead of 10)
|
|
- WAL mode for SQLite (better concurrency)
|
|
|
|
2. **Database Tests**: The `run-server-with-db.sh` script automatically:
|
|
- Creates a temporary test database
|
|
- Initializes the schema
|
|
- Cleans up on exit (Ctrl+C)
|
|
|
|
3. **Test Isolation**: Each test suite can be run independently. The database tests use a separate `test.db` file that doesn't affect production data.
|
|
|
|
## Troubleshooting
|
|
|
|
**Rate limiting failures:** Ensure server is running with `-dev` flag
|
|
**Database test failures:** Check that no other instance is using `test.db`
|
|
**Port conflicts:** Default port is 8080, ensure it's available
|
|
|
|
## Exit Codes
|
|
|
|
- `0` - All tests passed
|
|
- `1` - One or more tests failed
|
|
|
|
Check colored output for detailed pass/fail information for each test case. |