fetch_ml/tests
Jeremie Fraeys 7ff2c6c487
refactor: reorganize integration tests
Move integration-appropriate tests from tests/unit/ to tests/integration/:
- tests/unit/simple_test.go -> tests/integration/simple_test.go
- tests/unit/deployments/traefik_compose_test.go -> tests/integration/traefik_compose_test.go
- tests/unit/worker_trust_test.go -> tests/integration/worker_trust_test.go

Update test package declarations and imports to reflect new locations.

These tests were misplaced in the unit tests directory but actually test
integration between components or external systems (Traefik, worker trust).
2026-03-12 16:37:42 -04:00
..
benchmarks feat(crypto,auth): harden KMS and improve permission handling 2026-03-12 12:04:32 -04:00
chaos test(chaos): add worker disconnect chaos test and queue improvements 2026-03-12 12:08:21 -04:00
e2e refactor(api): overhaul WebSocket handler and protocol layer 2026-03-12 12:01:21 -04:00
fault test(phase-7-9): audit verification, fault injection, integration tests 2026-02-23 20:26:01 -05:00
fixtures feat(tests): enable stress and long-running test suites 2026-03-12 14:05:45 -04:00
integration refactor: reorganize integration tests 2026-03-12 16:37:42 -04:00
load test(integration,unit): update test suites for new features and APIs 2026-03-12 12:09:15 -04:00
long_running feat(tests): enable stress and long-running test suites 2026-03-12 14:05:45 -04:00
property test(phase-6): property-based tests with gopter 2026-02-23 20:25:49 -05:00
scripts test: implement comprehensive test suite with multiple test types 2025-12-04 16:55:13 -05:00
security test(all): update test suite for scheduler and security features 2026-02-26 12:08:46 -05:00
stress feat(tests): enable stress and long-running test suites 2026-03-12 14:05:45 -04:00
testreport feat(tests): enable stress and long-running test suites 2026-03-12 14:05:45 -04:00
unit refactor: reorganize integration tests 2026-03-12 16:37:42 -04:00
README.md docs: update documentation for streamlined Makefile 2026-03-04 13:22:29 -05:00

Test Categories

1. Unit Tests (unit/)

  • Purpose: Test individual functions and components in isolation
  • Scope: Small, fast tests for specific functionality
  • Languages: Go and Zig tests
  • Usage: make test-unit

2. Integration Tests (integration/)

  • Purpose: Test component interactions and system integration
  • Scope: Multiple components working together
  • Dependencies: Requires Redis, database
  • Usage: make test-integration

3. End-to-End Tests (e2e/)

  • Purpose: Test complete user workflows and system behavior
  • Scope: Full system from user perspective
  • Dependencies: Complete system setup
  • Usage: make test-e2e

Note: Podman-based E2E (TestPodmanIntegration) is opt-in because it builds/runs containers. Enable it with FETCH_ML_E2E_PODMAN=1 go test ./tests/e2e/....

4. Performance Tests (benchmarks/)

  • Purpose: Measure performance characteristics and identify bottlenecks
  • Scope: API endpoints, ML experiments, payload handling
  • Metrics: Latency, throughput, memory usage
  • Usage: make benchmark

5. Load Tests (load/)

  • Purpose: Test system behavior under high load
  • Scope: Concurrent users, stress testing, spike testing
  • Scenarios: Light, medium, heavy load patterns
  • Usage: make load-test

6. Chaos Tests (chaos/)

  • Purpose: Test system resilience and failure recovery
  • Scope: Database failures, Redis failures, network issues
  • Scenarios: Connection failures, resource exhaustion, high concurrency
  • Usage: make chaos-test

Test Execution

Quick Test Commands

make test              # Run all tests
make test-unit         # Unit tests only
make test-integration  # Integration tests only
make test-e2e         # End-to-end tests only
make test-coverage    # All tests with coverage report

Performance Testing Commands

make benchmark         # Run performance benchmarks
make load-test         # Run load testing suite
make chaos-test        # Run chaos engineering tests
make complete-suite   # Run complete technical excellence suite

Individual Test Execution

# Run specific benchmark
go test -bench=BenchmarkAPIServer ./tests/benchmarks/

# Run specific chaos test
go test -v ./tests/chaos/ -run TestChaosTestSuite

# Run with coverage
go test -cover ./tests/unit/

Test Dependencies

Required Services

  • Redis: Required for integration, performance, and chaos tests
  • Database: SQLite for local, PostgreSQL for production-like tests
  • Docker/Podman: For container-based tests

Test Configuration

  • Test databases use isolated Redis DB numbers (4-7)
  • Temporary directories used for file-based tests
  • Test servers use random ports to avoid conflicts

Best Practices

Writing Tests

  1. Unit Tests: Test single functions, mock external dependencies
  2. Integration Tests: Test real component interactions
  3. Performance Tests: Use testing.B for benchmarks, include memory stats
  4. Chaos Tests: Simulate realistic failure scenarios

Test Organization

  1. Package Naming: Use descriptive package names (benchmarks, chaos, etc.)
  2. File Naming: Use *_test.go suffix, descriptive names
  3. Test Functions: Use Test* for unit tests, Benchmark* for performance

Cleanup

  1. Resources: Close database connections, Redis clients
  2. Temp Files: Use t.TempDir() for temporary files
  3. Test Data: Clean up Redis test databases after tests

Technical Excellence Features

The test suite includes advanced testing capabilities:

  • Performance Regression Detection: Automated detection of performance degradations
  • Chaos Engineering: System resilience testing under failure conditions
  • Load Testing: High-concurrency and stress testing scenarios
  • Profiling Tools: CPU, memory, and performance profiling
  • Architecture Decision Records: Documented technical decisions

CI/CD Integration

All tests are integrated into the CI/CD pipeline:

  • Unit tests run on every commit
  • Integration tests run on PRs
  • Performance tests run nightly
  • Chaos tests run before releases

Troubleshooting

Common Issues

  1. Redis Connection: Ensure Redis is running for integration tests
  2. Port Conflicts: Tests use random ports, but conflicts can occur
  3. Resource Limits: Chaos tests may hit system resource limits
  4. Test Isolation: Ensure tests don't interfere with each other

Debug Tips

  1. Use -v flag for verbose output
  2. Use -run flag to run specific tests
  3. Check test logs for detailed error information
  4. Use make test-coverage for coverage analysis