temp for tree extraction

This commit is contained in:
2025-10-15 19:19:52 -04:00
commit ffa434630f
51 changed files with 9036 additions and 0 deletions

186
test/README.md Normal file
View 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