Files
onyx-prebootstrap/test
..
2025-10-15 19:13:35 -04:00
2025-10-15 19:13:35 -04:00

Onyx Integration Tests

This directory contains automated integration tests for the Onyx version control system.

Quick Start

Run the full integration test suite:

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:

./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:

# 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:

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