3.5 KiB
3.5 KiB
Testing Strategy
This document outlines the testing strategy for the Calejo Control Adapter project.
Test Directory Structure
tests/
├── unit/ # Unit tests - test individual components in isolation
├── integration/ # Integration tests - test components working together
├── e2e/ # End-to-end tests - require external services (mocks)
├── fixtures/ # Test fixtures and data
├── utils/ # Test utilities
└── mock_services/ # Mock SCADA and optimizer services
Test Categories
1. Unit Tests (tests/unit/)
- Purpose: Test individual functions, classes, and modules in isolation
- Dependencies: None or minimal (mocked dependencies)
- Execution:
pytest tests/unit/ - Examples: Database clients, configuration validation, business logic
2. Integration Tests (tests/integration/)
- Purpose: Test how components work together
- Dependencies: May require database, but not external services
- Execution:
pytest tests/integration/ - Examples: Database integration, protocol handlers working together
3. End-to-End Tests (tests/e2e/)
- Purpose: Test complete workflows with external services
- Dependencies: Require mock SCADA and optimizer services
- Execution: Use dedicated runner scripts
- Examples: Complete SCADA-to-optimizer workflows
4. Mock Services (tests/mock_services/)
- Purpose: Simulate external SCADA and optimizer services
- Usage: Started by e2e test runners
- Ports: SCADA (8081), Optimizer (8082)
Test Runners
For E2E Tests (Mock-Dependent)
# Starts mock services and runs e2e tests
./scripts/run-reliable-e2e-tests.py
# Quick mock service verification
./scripts/test-mock-services.sh
# Full test environment setup
./scripts/setup-test-environment.sh
For Unit and Integration Tests
# Run all unit tests
pytest tests/unit/
# Run all integration tests
pytest tests/integration/
# Run specific test file
pytest tests/unit/test_database_client.py
Deployment Testing
Current Strategy
- Deployment Script:
deploy/ssh/deploy-remote.sh - Purpose: Deploy to production server (95.111.206.155)
- Testing: Manual verification after deployment
- Separation: Deployment is separate from automated testing
Recommended Enhancement
To add automated deployment testing:
- Create
tests/deployment/directory - Add smoke tests that verify deployment
- Run these tests after deployment
- Consider using staging environment for pre-production testing
Test Execution Guidelines
When to Run Which Tests
- Local Development: Run unit tests frequently
- Before Commits: Run unit + integration tests
- Before Deployment: Run all tests including e2e
- CI/CD Pipeline: Run all test categories
Mock Service Usage
- E2E tests require mock services to be running
- Use dedicated runners that manage service lifecycle
- Don't run e2e tests directly with pytest (they'll fail)
Adding New Tests
- Unit Tests: Add to
tests/unit/ - Integration Tests: Add to
tests/integration/ - E2E Tests: Add to
tests/e2e/and update runners if needed - Mock Services: Add to
tests/mock_services/if new services needed
Best Practices
- Keep tests fast and isolated
- Use fixtures for common setup
- Mock external dependencies in unit tests
- Write descriptive test names
- Include both happy path and error scenarios
- Use retry logic for flaky network operations