diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/bash_shared/common.sh | 1 | ||||
-rw-r--r-- | apps/bash_shared/defines.sh | 8 | ||||
-rw-r--r-- | apps/bash_shared/includes.sh | 9 | ||||
-rw-r--r-- | apps/compiler/includes/functions.sh | 19 | ||||
-rw-r--r-- | apps/installer/main.sh | 4 | ||||
-rw-r--r-- | apps/test-framework/README.md | 173 | ||||
-rwxr-xr-x | apps/test-framework/run-bash-tests.sh (renamed from apps/test-framework/run-tests.sh) | 0 | ||||
-rw-r--r-- | apps/test-framework/run-core-tests.sh | 17 | ||||
-rw-r--r-- | apps/test-framework/test-main.sh | 45 |
9 files changed, 221 insertions, 55 deletions
diff --git a/apps/bash_shared/common.sh b/apps/bash_shared/common.sh index 027a49bed3..acd23eacdf 100644 --- a/apps/bash_shared/common.sh +++ b/apps/bash_shared/common.sh @@ -1,6 +1,7 @@ function registerHooks() { acore_event_registerHooks "$@"; } function runHooks() { acore_event_runHooks "$@"; } +#shellcheck source=../../conf/dist/config.sh source "$AC_PATH_CONF/dist/config.sh" # include dist to avoid missing conf variables # first check if it's defined in env, otherwise use the default diff --git a/apps/bash_shared/defines.sh b/apps/bash_shared/defines.sh index 4f5372215c..4b014bd9c1 100644 --- a/apps/bash_shared/defines.sh +++ b/apps/bash_shared/defines.sh @@ -19,10 +19,10 @@ case $AC_PATH_ROOT in *) AC_PATH_ROOT=$PWD/$AC_PATH_ROOT;; esac -AC_PATH_CONF="$AC_PATH_ROOT/conf" +export AC_PATH_CONF="$AC_PATH_ROOT/conf" -AC_PATH_MODULES="$AC_PATH_ROOT/modules" +export AC_PATH_MODULES="$AC_PATH_ROOT/modules" -AC_PATH_DEPS="$AC_PATH_ROOT/deps" +export AC_PATH_DEPS="$AC_PATH_ROOT/deps" -AC_PATH_VAR="$AC_PATH_ROOT/var" +export AC_PATH_VAR="$AC_PATH_ROOT/var" diff --git a/apps/bash_shared/includes.sh b/apps/bash_shared/includes.sh index 63593e4c56..d2bf07db12 100644 --- a/apps/bash_shared/includes.sh +++ b/apps/bash_shared/includes.sh @@ -7,10 +7,17 @@ AC_PATH_APPS="$( cd "$( dirname "${BASH_SOURCE[0]}" )/../" && pwd )" AC_PATH_SHARED="$AC_PATH_APPS/bash_shared" +# shellcheck source=./defines.sh source "$AC_PATH_SHARED/defines.sh" +# shellcheck source=../../deps/acore/bash-lib/src/event/hooks.sh source "$AC_PATH_DEPS/acore/bash-lib/src/event/hooks.sh" +# shellcheck source=./common.sh source "$AC_PATH_SHARED/common.sh" -[[ "$OSTYPE" = "msys" ]] && AC_BINPATH_FULL="$BINPATH" || AC_BINPATH_FULL="$BINPATH/bin" +if [[ "$OSTYPE" = "msys" ]]; then + AC_BINPATH_FULL="$BINPATH" +else + export AC_BINPATH_FULL="$BINPATH/bin" +fi diff --git a/apps/compiler/includes/functions.sh b/apps/compiler/includes/functions.sh index 5f9581e7ce..c608cff24d 100644 --- a/apps/compiler/includes/functions.sh +++ b/apps/compiler/includes/functions.sh @@ -1,7 +1,14 @@ #!/usr/bin/env bash # Set SUDO variable - one liner -SUDO=$([ "$EUID" -ne 0 ] && echo "sudo" || echo "") +SUDO="" + +IS_SUDO_ENABLED=${AC_ENABLE_ROOT_CMAKE_INSTALL:-0} + +# Allow callers to opt-out from privilege escalation during install/perms adjustments +if [[ $IS_SUDO_ENABLED == 1 ]]; then + SUDO=$([ "$EUID" -ne 0 ] && echo "sudo" || echo "") +fi function comp_clean() { DIRTOCLEAN=${BUILDPATH:-var/build/obj} @@ -143,9 +150,13 @@ function comp_compile() { popd >> /dev/null || exit 1 # set all aplications SUID bit - echo "Setting permissions on binary files" - find "$AC_BINPATH_FULL" -mindepth 1 -maxdepth 1 -type f -exec $SUDO chown root:root -- {} + - find "$AC_BINPATH_FULL" -mindepth 1 -maxdepth 1 -type f -exec $SUDO chmod u+s -- {} + + if [[ $IS_SUDO_ENABLED == 0 ]]; then + echo "Skipping root ownership and SUID changes (IS_SUDO_ENABLED=0)" + else + echo "Setting permissions on binary files" + find "$AC_BINPATH_FULL" -mindepth 1 -maxdepth 1 -type f -exec $SUDO chown root:root -- {} + + find "$AC_BINPATH_FULL" -mindepth 1 -maxdepth 1 -type f -exec $SUDO chmod u+s -- {} + + fi [[ -f "$confDir/worldserver.conf.dist" ]] && \ cp -v --no-clobber "$confDir/worldserver.conf.dist" "$confDir/worldserver.conf" diff --git a/apps/installer/main.sh b/apps/installer/main.sh index b0772f76cf..fea9dc3acf 100644 --- a/apps/installer/main.sh +++ b/apps/installer/main.sh @@ -41,6 +41,7 @@ menu_items=( "client-data|gd|download client data from github repository (beta)" "run-worldserver|rw|execute a simple restarter for worldserver" "run-authserver|ra|execute a simple restarter for authserver" + "test|t|Run test framework" "docker|dr|Run docker tools" "version|v|Show AzerothCore version" "service-manager|sm|Run service manager to run authserver and worldserver in background" @@ -84,6 +85,9 @@ function handle_menu_command() { "run-authserver") inst_simple_restarter authserver ;; + "test") + bash "$AC_PATH_APPS/test-framework/test-main.sh" "$@" + ;; "docker") DOCKER=1 bash "$AC_PATH_ROOT/apps/docker/docker-cmd.sh" "$@" exit diff --git a/apps/test-framework/README.md b/apps/test-framework/README.md index dda5237067..61511bc364 100644 --- a/apps/test-framework/README.md +++ b/apps/test-framework/README.md @@ -6,7 +6,9 @@ This is the centralized test framework for all AzerothCore bash scripts. It prov ``` apps/test-framework/ -├── run-tests.sh # Universal test runner (single entry point) +├── test-main.sh # Unified test framework entry point +├── run-bash-tests.sh # Bash test runner for BATS tests +├── run-core-tests.sh # AzerothCore unit test runner ├── README.md # This documentation ├── bats_libs/ # Custom BATS libraries │ ├── acore-support.bash # Test setup and helpers @@ -17,38 +19,74 @@ apps/test-framework/ ## Quick Start +### Using acore.sh (Recommended): +```bash +# Run the unified test framework (interactive menu) +./acore.sh test + +# Run bash tests directly +./acore.sh test bash --all + +# Run AzerothCore unit tests +./acore.sh test core +``` + ### From any module directory: ```bash # Run tests for current module -../test-framework/run-tests.sh --dir . +../test-framework/run-bash-tests.sh --dir . ``` ### From test-framework directory: ```bash # Run all tests in all modules -./run-tests.sh --all +./run-bash-tests.sh --all # Run tests for specific module -./run-tests.sh startup-scripts +./run-bash-tests.sh startup-scripts # List available modules -./run-tests.sh --list +./run-bash-tests.sh --list # Run tests with debug info -./run-tests.sh --all --debug +./run-bash-tests.sh --all --debug ``` ### From project root: ```bash # Run all tests -apps/test-framework/run-tests.sh --all +apps/test-framework/run-bash-tests.sh --all # Run specific module -apps/test-framework/run-tests.sh startup-scripts +apps/test-framework/run-bash-tests.sh startup-scripts # Run with verbose output -apps/test-framework/run-tests.sh startup-scripts --verbose +apps/test-framework/run-bash-tests.sh startup-scripts --verbose +``` + +## Test Types + +The framework now supports two types of tests: + +1. **Bash Tests** - BATS-based tests for bash scripts and functionality +2. **Core Tests** - AzerothCore C++ unit tests + +### Unified Test Framework + +The test framework provides a unified entry point through `test-main.sh` which presents an interactive menu: + +- **bash**: Run BATS-based bash script tests +- **core**: Run AzerothCore C++ unit tests +- **quit**: Exit the test framework + +```bash +# Interactive test menu +./acore.sh test + +# Direct test execution +./acore.sh test bash --all # Run all bash tests +./acore.sh test core # Run core unit tests ``` ## Usage @@ -57,35 +95,35 @@ apps/test-framework/run-tests.sh startup-scripts --verbose ```bash # Run all tests -./run-tests.sh --all +./run-bash-tests.sh --all # Run tests for specific module -./run-tests.sh startup-scripts +./run-bash-tests.sh startup-scripts # Run tests matching pattern -./run-tests.sh --filter starter +./run-bash-tests.sh --filter starter # Run tests in specific directory -./run-tests.sh --dir apps/docker +./run-bash-tests.sh --dir apps/docker # Show available modules -./run-tests.sh --list +./run-bash-tests.sh --list # Show test count -./run-tests.sh --count +./run-bash-tests.sh --count ``` ### Output Formats ```bash # Pretty output (default) -./run-tests.sh --pretty +./run-bash-tests.sh --pretty # TAP output for CI/CD -./run-tests.sh --tap +./run-bash-tests.sh --tap # Verbose output with debug info -./run-tests.sh --verbose --debug +./run-bash-tests.sh --verbose --debug ``` ## Writing Tests @@ -205,17 +243,17 @@ debug_on_failure From your module directory: ```bash -../test-framework/run-tests.sh --dir . +../test-framework/run-bash-tests.sh --dir . ``` From the test framework: ```bash -./run-tests.sh my-module +./run-bash-tests.sh my-module ``` From project root: ```bash -apps/test-framework/run-tests.sh my-module +apps/test-framework/run-bash-tests.sh my-module ``` ## CI/CD Integration @@ -223,37 +261,73 @@ apps/test-framework/run-tests.sh my-module For continuous integration, use TAP output: ```bash -# In your CI script +# Recommended: Use acore.sh integration +./acore.sh test bash --tap --all > test-results.tap + +# Direct script usage cd apps/test-framework -./run-tests.sh --all --tap > test-results.tap +./run-bash-tests.sh --all --tap > test-results.tap # Or from project root -apps/test-framework/run-tests.sh --all --tap > test-results.tap +apps/test-framework/run-bash-tests.sh --all --tap > test-results.tap + +# Run core unit tests in CI +./acore.sh test core +``` + +## Core Tests + +The framework now includes support for AzerothCore's C++ unit tests through `run-core-tests.sh`: + +```bash +# Run core unit tests +./acore.sh test core + +# Direct script usage +apps/test-framework/run-core-tests.sh ``` +**Prerequisites for Core Tests:** +- Project must be built with unit tests enabled (`CBUILD_TESTING="ON"` inside `conf/config.sh` that works with the acore.sh compiler) +- Unit test binary should be available at `$BUILDPATH/src/test/unit_tests` + +The core test runner will: +1. Check if the unit test binary exists +2. Execute the AzerothCore unit tests +3. Return appropriate exit codes for CI/CD integration + ## Available Commands -All functionality is available through the single `run-tests.sh` script: +### Unified Test Framework Commands + +Recommended usage through `acore.sh`: +- `./acore.sh test` - Interactive test framework menu +- `./acore.sh test bash [options]` - Run bash tests with options +- `./acore.sh test core` - Run AzerothCore unit tests + +### Bash Test Commands + +All bash test functionality is available through the `run-bash-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 +- `./run-bash-tests.sh --all` - Run all tests in all modules +- `./run-bash-tests.sh <module>` - Run tests for specific module +- `./run-bash-tests.sh --dir <path>` - Run tests in specific directory +- `./run-bash-tests.sh --list` - List available modules +- `./run-bash-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) +- `./run-bash-tests.sh --verbose` - Verbose output with debug info +- `./run-bash-tests.sh --tap` - TAP output for CI/CD +- `./run-bash-tests.sh --debug` - Debug mode with failure details +- `./run-bash-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 +- `./run-bash-tests.sh --filter <pattern>` - Run tests matching pattern +- `./run-bash-tests.sh <module> --filter <pattern>` - Filter within module ### Utility Functions -- `./run-tests.sh --help` - Show help message +- `./run-bash-tests.sh --help` - Show help message - Install BATS: Use your system package manager (`apt install bats`, `brew install bats-core`, etc.) @@ -264,35 +338,42 @@ All functionality is available through the single `run-tests.sh` script: ### Running Specific Tests ```bash # Run only starter-related tests -./run-tests.sh --filter starter +./run-bash-tests.sh --filter starter # Run only tests in startup-scripts module -./run-tests.sh startup-scripts +./run-bash-tests.sh startup-scripts # Run all tests with verbose output -./run-tests.sh --all --verbose +./run-bash-tests.sh --all --verbose # Run tests in specific directory with debug -./run-tests.sh --dir apps/docker --debug +./run-bash-tests.sh --dir apps/docker --debug ``` ### Development Workflow ```bash +# Recommended: Use acore.sh for unified testing +./acore.sh test # Interactive menu +./acore.sh test bash --all # All bash tests +./acore.sh test core # Core unit tests + # While developing, run tests frequently from module directory cd apps/my-module -../test-framework/run-tests.sh --dir . +../test-framework/run-bash-tests.sh --dir . # Debug failing tests -../test-framework/run-tests.sh --dir . --debug --verbose +../test-framework/run-bash-tests.sh --dir . --debug --verbose # Run specific test pattern -../test-framework/run-tests.sh --dir . --filter my-feature +../test-framework/run-bash-tests.sh --dir . --filter my-feature # From project root - run all tests -apps/test-framework/run-tests.sh --all +./acore.sh test bash --all # Recommended +apps/test-framework/run-bash-tests.sh --all # Direct # Quick test count check -apps/test-framework/run-tests.sh --count +./acore.sh test bash --count # Recommended +apps/test-framework/run-bash-tests.sh --count # Direct ``` ## Benefits diff --git a/apps/test-framework/run-tests.sh b/apps/test-framework/run-bash-tests.sh index ce624a95a2..ce624a95a2 100755 --- a/apps/test-framework/run-tests.sh +++ b/apps/test-framework/run-bash-tests.sh diff --git a/apps/test-framework/run-core-tests.sh b/apps/test-framework/run-core-tests.sh new file mode 100644 index 0000000000..0f72fd572f --- /dev/null +++ b/apps/test-framework/run-core-tests.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + + # shellcheck source-path=SCRIPTDIR +CURRENT_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# shellcheck source=../bash_shared/includes.sh +source "$CURRENT_PATH/../bash_shared/includes.sh" + +TEST_PATH="$BUILDPATH/src/test/unit_tests" + +if [[ ! -f "$TEST_PATH" ]]; then + echo "Unit test binary not found at $TEST_PATH" + echo "Please ensure the project is built with unit tests enabled." + exit 1 +fi + +exec "$TEST_PATH" "$@"
\ No newline at end of file diff --git a/apps/test-framework/test-main.sh b/apps/test-framework/test-main.sh new file mode 100644 index 0000000000..c3a122989d --- /dev/null +++ b/apps/test-framework/test-main.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash + + # shellcheck source-path=SCRIPTDIR +CURRENT_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# shellcheck source=../bash_shared/includes.sh +source "$CURRENT_PATH/../bash_shared/includes.sh" +# shellcheck source=../bash_shared/menu_system.sh +source "$AC_PATH_APPS/bash_shared/menu_system.sh" + +# Menu: single ordered source of truth (no functions in strings) +# Format: "key|short|description" +menu_items=( + "bash|b|Run Bash tests" + "core|c|Run AzerothCore tests" + "quit|q|Exit from this menu" +) + + +# Menu command handler - called by menu system for each command +function handle_menu_command() { + local key="$1" + shift + + case "$key" in + "bash") + bash "$CURRENT_PATH/run-bash-tests.sh" "${@:-"--all"}" + ;; + "core") + # shellcheck source=./run-core-tests.sh + bash "$CURRENT_PATH/run-core-tests.sh" "$@" + ;; + "quit") + echo "Goodbye!" + exit + ;; + *) + echo "Invalid option. Use --help to see available commands." + return 1 + ;; + esac +} + +# Run the menu system +menu_run_with_items "TEST FRAMEWORK" handle_menu_command -- "${menu_items[@]}" -- "$@" |