summaryrefslogtreecommitdiff
path: root/apps/test-framework/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'apps/test-framework/README.md')
-rw-r--r--apps/test-framework/README.md335
1 files changed, 335 insertions, 0 deletions
diff --git a/apps/test-framework/README.md b/apps/test-framework/README.md
new file mode 100644
index 0000000000..dda5237067
--- /dev/null
+++ b/apps/test-framework/README.md
@@ -0,0 +1,335 @@
+# AzerothCore Test Framework
+
+This is the centralized test framework for all AzerothCore bash scripts. It provides a unified way to write, run, and manage tests across all modules.
+
+## Structure
+
+```
+apps/test-framework/
+├── run-tests.sh # Universal test runner (single entry point)
+├── README.md # This documentation
+├── bats_libs/ # Custom BATS libraries
+│ ├── acore-support.bash # Test setup and helpers
+│ └── acore-assert.bash # Custom assertions
+└── helpers/ # Test utilities
+ └── test_common.sh # Common test functions and setup
+```
+
+## Quick Start
+
+### From any module directory:
+```bash
+# Run tests for current module
+../test-framework/run-tests.sh --dir .
+
+```
+
+### From test-framework directory:
+```bash
+# Run all tests in all modules
+./run-tests.sh --all
+
+# Run tests for specific module
+./run-tests.sh startup-scripts
+
+# List available modules
+./run-tests.sh --list
+
+# Run tests with debug info
+./run-tests.sh --all --debug
+```
+
+### From project root:
+```bash
+# Run all tests
+apps/test-framework/run-tests.sh --all
+
+# Run specific module
+apps/test-framework/run-tests.sh startup-scripts
+
+# Run with verbose output
+apps/test-framework/run-tests.sh startup-scripts --verbose
+```
+
+## Usage
+
+### Basic Commands
+
+```bash
+# Run all tests
+./run-tests.sh --all
+
+# Run tests for specific module
+./run-tests.sh startup-scripts
+
+# Run tests matching pattern
+./run-tests.sh --filter starter
+
+# Run tests in specific directory
+./run-tests.sh --dir apps/docker
+
+# Show available modules
+./run-tests.sh --list
+
+# Show test count
+./run-tests.sh --count
+```
+
+### Output Formats
+
+```bash
+# Pretty output (default)
+./run-tests.sh --pretty
+
+# TAP output for CI/CD
+./run-tests.sh --tap
+
+# Verbose output with debug info
+./run-tests.sh --verbose --debug
+```
+
+## Writing Tests
+
+### Basic Test Structure
+
+```bash
+#!/usr/bin/env bats
+
+# Load the AzerothCore test framework
+load '../../test-framework/bats_libs/acore-support'
+load '../../test-framework/bats_libs/acore-assert'
+
+setup() {
+ acore_test_setup # Standard setup
+ # or
+ startup_scripts_setup # For startup scripts
+ # or
+ compiler_setup # For compiler tests
+ # or
+ docker_setup # For docker tests
+}
+
+teardown() {
+ acore_test_teardown
+}
+
+@test "my test description" {
+ run my_command
+ assert_success
+ assert_output "expected output"
+}
+```
+
+### Available Setup Functions
+
+- `acore_test_setup` - Basic setup for all tests
+- `startup_scripts_setup` - Setup for startup script tests
+- `compiler_setup` - Setup for compiler tests
+- `docker_setup` - Setup for docker tests
+- `extractor_setup` - Setup for extractor tests
+
+### Custom Assertions
+
+```bash
+# Assert binary exists and is executable
+assert_binary_exists "$TEST_DIR/bin/authserver"
+
+# Assert server started correctly
+assert_acore_server_started "$output" "authserver"
+
+# Assert config was loaded
+assert_config_loaded "$output" "authserver.conf"
+
+# Assert build success
+assert_build_success "$output"
+
+# Assert timeout occurred (for long-running processes)
+assert_timeout "$status"
+
+# Assert log contains content
+assert_log_contains "$log_file" "Server started"
+```
+
+### Test Environment Variables
+
+When using the framework, these variables are automatically set:
+
+- `$TEST_DIR` - Temporary test directory
+- `$AC_TEST_ROOT` - Project root directory
+- `$AC_TEST_APPS` - Apps directory
+- `$BUILDPATH` - Build directory path
+- `$SRCPATH` - Source directory path
+- `$BINPATH` - Binary directory path
+- `$LOGS_PATH` - Logs directory path
+
+### Helper Functions
+
+```bash
+# Create test binary
+create_test_binary "authserver" 0 2 "Server started"
+
+# Create test config
+create_test_config "authserver.conf" "Database.Info = \"127.0.0.1;3306;root;pass;db\""
+
+# Create AzerothCore specific binaries and configs
+create_acore_binaries
+create_acore_configs
+
+# Run command with timeout
+run_with_timeout 5s my_command
+
+# Wait for condition
+wait_for_condition "test -f $TEST_DIR/ready" 10 1
+
+# Debug test failure
+debug_on_failure
+```
+
+## Module Integration
+
+### Adding Tests to a New Module
+
+1. Create a `test/` directory in your module:
+ ```bash
+ mkdir apps/my-module/test
+ ```
+
+2. Create test files (ending in `.bats`):
+ ```bash
+ touch apps/my-module/test/test_my_feature.bats
+ ```
+
+3. Write your tests using the framework (see examples above)
+
+### Running Tests
+
+From your module directory:
+```bash
+../test-framework/run-tests.sh --dir .
+```
+
+From the test framework:
+```bash
+./run-tests.sh my-module
+```
+
+From project root:
+```bash
+apps/test-framework/run-tests.sh my-module
+```
+
+## CI/CD Integration
+
+For continuous integration, use TAP output:
+
+```bash
+# In your CI script
+cd apps/test-framework
+./run-tests.sh --all --tap > test-results.tap
+
+# Or from project root
+apps/test-framework/run-tests.sh --all --tap > test-results.tap
+```
+
+## Available Commands
+
+All functionality is available through the single `run-tests.sh` script:
+
+### Basic Test Execution
+- `./run-tests.sh --all` - Run all tests in all modules
+- `./run-tests.sh <module>` - Run tests for specific module
+- `./run-tests.sh --dir <path>` - Run tests in specific directory
+- `./run-tests.sh --list` - List available modules
+- `./run-tests.sh --count` - Show test count
+
+### Output Control
+- `./run-tests.sh --verbose` - Verbose output with debug info
+- `./run-tests.sh --tap` - TAP output for CI/CD
+- `./run-tests.sh --debug` - Debug mode with failure details
+- `./run-tests.sh --pretty` - Pretty output (default)
+
+### Test Filtering
+- `./run-tests.sh --filter <pattern>` - Run tests matching pattern
+- `./run-tests.sh <module> --filter <pattern>` - Filter within module
+
+### Utility Functions
+- `./run-tests.sh --help` - Show help message
+- Install BATS: Use your system package manager (`apt install bats`, `brew install bats-core`, etc.)
+
+
+### Direct Script Usage
+
+## Examples
+
+### Running Specific Tests
+```bash
+# Run only starter-related tests
+./run-tests.sh --filter starter
+
+# Run only tests in startup-scripts module
+./run-tests.sh startup-scripts
+
+# Run all tests with verbose output
+./run-tests.sh --all --verbose
+
+# Run tests in specific directory with debug
+./run-tests.sh --dir apps/docker --debug
+```
+
+### Development Workflow
+```bash
+# While developing, run tests frequently from module directory
+cd apps/my-module
+../test-framework/run-tests.sh --dir .
+
+# Debug failing tests
+../test-framework/run-tests.sh --dir . --debug --verbose
+
+# Run specific test pattern
+../test-framework/run-tests.sh --dir . --filter my-feature
+
+# From project root - run all tests
+apps/test-framework/run-tests.sh --all
+
+# Quick test count check
+apps/test-framework/run-tests.sh --count
+```
+
+## Benefits
+
+1. **No Boilerplate**: Minimal setup required for new test modules
+2. **Consistent Environment**: All tests use the same setup/teardown
+3. **Reusable Utilities**: Common functions available across all tests
+4. **Centralized Management**: Single place to update test infrastructure
+5. **Flexible Execution**: Run tests for one module, multiple modules, or all modules
+6. **CI/CD Ready**: TAP output format supported
+7. **Easy Debugging**: Built-in debug helpers and verbose output
+
+## Dependencies
+
+- [BATS (Bash Automated Testing System)](https://github.com/bats-core/bats-core)
+- Standard Unix utilities (find, grep, timeout, etc.)
+
+Install BATS with your system package manager:
+```bash
+# Ubuntu/Debian
+sudo apt update && sudo apt install bats
+
+# Fedora/RHEL
+sudo dnf install bats
+
+# macOS
+brew install bats-core
+
+# Arch Linux
+sudo pacman -S bats
+```
+
+## Contributing
+
+When adding new test utilities:
+
+1. Add common functions to `helpers/test_common.sh`
+2. Add BATS-specific helpers to `bats_libs/acore-support.bash`
+3. Add custom assertions to `bats_libs/acore-assert.bash`
+4. Update this README with new functionality