Files
chess/test/README.md

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.