temp for tree extraction
This commit is contained in:
186
test/README.md
Normal file
186
test/README.md
Normal file
@ -0,0 +1,186 @@
|
||||
# Onyx Integration Tests
|
||||
|
||||
This directory contains automated integration tests for the Onyx version control system.
|
||||
|
||||
## Quick Start
|
||||
|
||||
Run the full integration test suite:
|
||||
|
||||
```bash
|
||||
make integration
|
||||
```
|
||||
|
||||
This will:
|
||||
1. Build the `onx` and `onxd` binaries
|
||||
2. Create an isolated test environment in `/tmp/onyx-repo-test-{TIMESTAMP}`
|
||||
3. Run all integration tests
|
||||
4. Clean up automatically
|
||||
5. Report results with pass/fail status
|
||||
|
||||
## What Gets Tested
|
||||
|
||||
The integration test (`integration_test.sh`) validates all Milestone 2 functionality:
|
||||
|
||||
### Test Coverage (24 assertions)
|
||||
|
||||
1. **Repository Initialization** (6 tests)
|
||||
- `.git` directory created
|
||||
- `.onx` directory created
|
||||
- `oplog` file exists
|
||||
- `workstreams.json` created with correct structure
|
||||
- `.gitignore` created
|
||||
- Workstreams uses map structure (not array)
|
||||
|
||||
2. **Daemon Management** (3 tests)
|
||||
- Daemon starts successfully
|
||||
- PID file created
|
||||
- Status command reports running state
|
||||
|
||||
3. **Automatic Snapshots** (4 tests)
|
||||
- File changes detected
|
||||
- Workspace state file updated
|
||||
- Git ref created (`refs/onyx/workspaces/current`)
|
||||
- Snapshot commit created
|
||||
|
||||
4. **Save Command** (3 tests)
|
||||
- First commit saved successfully
|
||||
- Workstreams.json updated
|
||||
- Branch ref created (`refs/onyx/workstreams/{name}/commit-1`)
|
||||
|
||||
5. **Commit Chains** (3 tests)
|
||||
- Second commit saves successfully
|
||||
- Parent-child relationship established
|
||||
- Sequential branch refs created
|
||||
|
||||
6. **Undo Command** (3 tests)
|
||||
- Undo operation executes
|
||||
- Oplog contains undo entry
|
||||
- **state_before is non-null** (validates the fix!)
|
||||
|
||||
7. **Daemon Cleanup** (2 tests)
|
||||
- Daemon stops gracefully
|
||||
- PID file removed
|
||||
- Status reports not running
|
||||
|
||||
## Test Environment
|
||||
|
||||
- **Location**: `/tmp/onyx-repo-test-{UNIX_TIMESTAMP}`
|
||||
- **Isolation**: Each test run creates a fresh directory
|
||||
- **Cleanup**: Automatic cleanup on completion or interruption
|
||||
- **Binaries**: Uses `bin/onx` and `bin/onxd` from project root
|
||||
|
||||
## Test Output
|
||||
|
||||
The script provides color-coded output:
|
||||
- 🔵 **Blue** - Informational messages
|
||||
- 🟢 **Green** - Tests that passed
|
||||
- 🔴 **Red** - Tests that failed
|
||||
- 🟡 **Yellow** - Section headers
|
||||
|
||||
Example output:
|
||||
```
|
||||
=====================================
|
||||
Test 1: Repository Initialization
|
||||
=====================================
|
||||
[INFO] Initializing Onyx repository...
|
||||
[PASS] Directory exists: .git
|
||||
[PASS] Directory exists: .onx
|
||||
...
|
||||
|
||||
Total Tests: 24
|
||||
Passed: 24
|
||||
Failed: 0
|
||||
|
||||
========================================
|
||||
ALL TESTS PASSED! ✓
|
||||
========================================
|
||||
```
|
||||
|
||||
## Manual Execution
|
||||
|
||||
You can run the test script directly:
|
||||
|
||||
```bash
|
||||
./test/integration_test.sh
|
||||
```
|
||||
|
||||
The script will:
|
||||
- Check for required binaries
|
||||
- Create test environment
|
||||
- Run all test suites
|
||||
- Report detailed results
|
||||
- Clean up on exit (even if interrupted with Ctrl+C)
|
||||
|
||||
## CI/CD Integration
|
||||
|
||||
The integration test is designed for automated testing:
|
||||
|
||||
- **Exit Code**: Returns 0 on success, 1 on failure
|
||||
- **Isolated**: No dependencies on external state
|
||||
- **Deterministic**: Should produce same results on each run
|
||||
- **Fast**: Completes in ~10 seconds
|
||||
|
||||
Example CI usage:
|
||||
```yaml
|
||||
# GitHub Actions
|
||||
- name: Run Integration Tests
|
||||
run: make integration
|
||||
```
|
||||
|
||||
## Debugging Failed Tests
|
||||
|
||||
If tests fail:
|
||||
|
||||
1. **Check the test output** - Shows which specific assertion failed
|
||||
2. **Review the test directory** - Check `/tmp/onyx-repo-test-*` if cleanup failed
|
||||
3. **Run manually** - Execute `./test/integration_test.sh` for more control
|
||||
4. **Check logs** - Look for daemon errors in test output
|
||||
|
||||
Common issues:
|
||||
- Daemon not stopping: Check for stale processes with `ps aux | grep onxd`
|
||||
- Permission errors: Ensure `/tmp` is writable
|
||||
- Binary not found: Run `make build` first
|
||||
|
||||
## Test Architecture
|
||||
|
||||
The test script uses:
|
||||
- **Assertions**: Helper functions for validation
|
||||
- **Counters**: Track pass/fail statistics
|
||||
- **Cleanup Trap**: Ensures cleanup even on script interruption
|
||||
- **Color Output**: Makes results easy to read
|
||||
|
||||
Key functions:
|
||||
- `assert_file_exists()` - Verify file creation
|
||||
- `assert_file_contains()` - Validate file content
|
||||
- `assert_ref_exists()` - Check Git references
|
||||
- `assert_command_success()` - Verify command execution
|
||||
|
||||
## Extending Tests
|
||||
|
||||
To add new tests:
|
||||
|
||||
1. Add a new test section in `integration_test.sh`
|
||||
2. Use assertion functions for validation
|
||||
3. Increment test counters appropriately
|
||||
4. Update this README with new coverage
|
||||
|
||||
Example:
|
||||
```bash
|
||||
log_section "Test X: New Feature"
|
||||
log_info "Testing new feature..."
|
||||
"$ONX_BIN" new-command
|
||||
assert_file_exists "expected_file"
|
||||
```
|
||||
|
||||
## Requirements
|
||||
|
||||
- Go 1.24.2+
|
||||
- Bash shell
|
||||
- Write access to `/tmp`
|
||||
- `make` utility
|
||||
|
||||
## Related Documentation
|
||||
|
||||
- [INTEGRATION.md](../INTEGRATION.md) - Manual integration testing guide
|
||||
- [CLAUDE.md](../CLAUDE.md) - Project overview for Claude Code
|
||||
- [notes/checklist.md](../notes/checklist.md) - Implementation milestones
|
Reference in New Issue
Block a user