mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2025-11-29 17:38:24 +08:00
feat(bash): test command in dashboard + fix tests (#23030)
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
2
.github/CODEOWNERS
vendored
Normal file
2
.github/CODEOWNERS
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Protect dashboard workflow – require explicit review
|
||||||
|
.github/workflows/dashboard-ci.yml @Yehonal
|
||||||
8
.github/workflows/dashboard-ci.yml
vendored
8
.github/workflows/dashboard-ci.yml
vendored
@@ -54,8 +54,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
TERM: xterm-256color
|
TERM: xterm-256color
|
||||||
run: |
|
run: |
|
||||||
cd apps/test-framework
|
./acore.sh test bash --tap --all
|
||||||
./run-tests.sh --tap --all
|
|
||||||
|
|
||||||
build-and-test:
|
build-and-test:
|
||||||
name: Build and Integration Test
|
name: Build and Integration Test
|
||||||
@@ -79,6 +78,7 @@ jobs:
|
|||||||
cp conf/dist/config.sh conf/config.sh
|
cp conf/dist/config.sh conf/config.sh
|
||||||
# Configure dashboard
|
# Configure dashboard
|
||||||
sed -i 's/MTHREADS=.*/MTHREADS="4"/' conf/config.sh
|
sed -i 's/MTHREADS=.*/MTHREADS="4"/' conf/config.sh
|
||||||
|
sed -i 's/CBUILD_TESTING=.*/CBUILD_TESTING="ON"/' conf/config.sh
|
||||||
|
|
||||||
- name: Test module commands
|
- name: Test module commands
|
||||||
run: |
|
run: |
|
||||||
@@ -105,6 +105,10 @@ jobs:
|
|||||||
./acore.sh module remove mod-duel-reset
|
./acore.sh module remove mod-duel-reset
|
||||||
./acore.sh module list
|
./acore.sh module list
|
||||||
|
|
||||||
|
- name: Run core tests
|
||||||
|
run: |
|
||||||
|
./acore.sh test core
|
||||||
|
|
||||||
- name: Test authserver dry-run
|
- name: Test authserver dry-run
|
||||||
run: |
|
run: |
|
||||||
cd env/dist/bin
|
cd env/dist/bin
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
function registerHooks() { acore_event_registerHooks "$@"; }
|
function registerHooks() { acore_event_registerHooks "$@"; }
|
||||||
function runHooks() { acore_event_runHooks "$@"; }
|
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
|
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
|
# first check if it's defined in env, otherwise use the default
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ case $AC_PATH_ROOT in
|
|||||||
*) AC_PATH_ROOT=$PWD/$AC_PATH_ROOT;;
|
*) AC_PATH_ROOT=$PWD/$AC_PATH_ROOT;;
|
||||||
esac
|
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"
|
||||||
|
|||||||
@@ -7,10 +7,17 @@ AC_PATH_APPS="$( cd "$( dirname "${BASH_SOURCE[0]}" )/../" && pwd )"
|
|||||||
|
|
||||||
AC_PATH_SHARED="$AC_PATH_APPS/bash_shared"
|
AC_PATH_SHARED="$AC_PATH_APPS/bash_shared"
|
||||||
|
|
||||||
|
# shellcheck source=./defines.sh
|
||||||
source "$AC_PATH_SHARED/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"
|
source "$AC_PATH_DEPS/acore/bash-lib/src/event/hooks.sh"
|
||||||
|
|
||||||
|
# shellcheck source=./common.sh
|
||||||
source "$AC_PATH_SHARED/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
|
||||||
|
|||||||
@@ -1,7 +1,14 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Set SUDO variable - one liner
|
# 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() {
|
function comp_clean() {
|
||||||
DIRTOCLEAN=${BUILDPATH:-var/build/obj}
|
DIRTOCLEAN=${BUILDPATH:-var/build/obj}
|
||||||
@@ -143,9 +150,13 @@ function comp_compile() {
|
|||||||
popd >> /dev/null || exit 1
|
popd >> /dev/null || exit 1
|
||||||
|
|
||||||
# set all aplications SUID bit
|
# set all aplications SUID bit
|
||||||
echo "Setting permissions on binary files"
|
if [[ $IS_SUDO_ENABLED == 0 ]]; then
|
||||||
find "$AC_BINPATH_FULL" -mindepth 1 -maxdepth 1 -type f -exec $SUDO chown root:root -- {} +
|
echo "Skipping root ownership and SUID changes (IS_SUDO_ENABLED=0)"
|
||||||
find "$AC_BINPATH_FULL" -mindepth 1 -maxdepth 1 -type f -exec $SUDO chmod u+s -- {} +
|
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" ]] && \
|
[[ -f "$confDir/worldserver.conf.dist" ]] && \
|
||||||
cp -v --no-clobber "$confDir/worldserver.conf.dist" "$confDir/worldserver.conf"
|
cp -v --no-clobber "$confDir/worldserver.conf.dist" "$confDir/worldserver.conf"
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ menu_items=(
|
|||||||
"client-data|gd|download client data from github repository (beta)"
|
"client-data|gd|download client data from github repository (beta)"
|
||||||
"run-worldserver|rw|execute a simple restarter for worldserver"
|
"run-worldserver|rw|execute a simple restarter for worldserver"
|
||||||
"run-authserver|ra|execute a simple restarter for authserver"
|
"run-authserver|ra|execute a simple restarter for authserver"
|
||||||
|
"test|t|Run test framework"
|
||||||
"docker|dr|Run docker tools"
|
"docker|dr|Run docker tools"
|
||||||
"version|v|Show AzerothCore version"
|
"version|v|Show AzerothCore version"
|
||||||
"service-manager|sm|Run service manager to run authserver and worldserver in background"
|
"service-manager|sm|Run service manager to run authserver and worldserver in background"
|
||||||
@@ -84,6 +85,9 @@ function handle_menu_command() {
|
|||||||
"run-authserver")
|
"run-authserver")
|
||||||
inst_simple_restarter authserver
|
inst_simple_restarter authserver
|
||||||
;;
|
;;
|
||||||
|
"test")
|
||||||
|
bash "$AC_PATH_APPS/test-framework/test-main.sh" "$@"
|
||||||
|
;;
|
||||||
"docker")
|
"docker")
|
||||||
DOCKER=1 bash "$AC_PATH_ROOT/apps/docker/docker-cmd.sh" "$@"
|
DOCKER=1 bash "$AC_PATH_ROOT/apps/docker/docker-cmd.sh" "$@"
|
||||||
exit
|
exit
|
||||||
|
|||||||
@@ -6,7 +6,9 @@ This is the centralized test framework for all AzerothCore bash scripts. It prov
|
|||||||
|
|
||||||
```
|
```
|
||||||
apps/test-framework/
|
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
|
├── README.md # This documentation
|
||||||
├── bats_libs/ # Custom BATS libraries
|
├── bats_libs/ # Custom BATS libraries
|
||||||
│ ├── acore-support.bash # Test setup and helpers
|
│ ├── acore-support.bash # Test setup and helpers
|
||||||
@@ -17,38 +19,74 @@ apps/test-framework/
|
|||||||
|
|
||||||
## Quick Start
|
## 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:
|
### From any module directory:
|
||||||
```bash
|
```bash
|
||||||
# Run tests for current module
|
# Run tests for current module
|
||||||
../test-framework/run-tests.sh --dir .
|
../test-framework/run-bash-tests.sh --dir .
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### From test-framework directory:
|
### From test-framework directory:
|
||||||
```bash
|
```bash
|
||||||
# Run all tests in all modules
|
# Run all tests in all modules
|
||||||
./run-tests.sh --all
|
./run-bash-tests.sh --all
|
||||||
|
|
||||||
# Run tests for specific module
|
# Run tests for specific module
|
||||||
./run-tests.sh startup-scripts
|
./run-bash-tests.sh startup-scripts
|
||||||
|
|
||||||
# List available modules
|
# List available modules
|
||||||
./run-tests.sh --list
|
./run-bash-tests.sh --list
|
||||||
|
|
||||||
# Run tests with debug info
|
# Run tests with debug info
|
||||||
./run-tests.sh --all --debug
|
./run-bash-tests.sh --all --debug
|
||||||
```
|
```
|
||||||
|
|
||||||
### From project root:
|
### From project root:
|
||||||
```bash
|
```bash
|
||||||
# Run all tests
|
# Run all tests
|
||||||
apps/test-framework/run-tests.sh --all
|
apps/test-framework/run-bash-tests.sh --all
|
||||||
|
|
||||||
# Run specific module
|
# Run specific module
|
||||||
apps/test-framework/run-tests.sh startup-scripts
|
apps/test-framework/run-bash-tests.sh startup-scripts
|
||||||
|
|
||||||
# Run with verbose output
|
# 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
|
## Usage
|
||||||
@@ -57,35 +95,35 @@ apps/test-framework/run-tests.sh startup-scripts --verbose
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Run all tests
|
# Run all tests
|
||||||
./run-tests.sh --all
|
./run-bash-tests.sh --all
|
||||||
|
|
||||||
# Run tests for specific module
|
# Run tests for specific module
|
||||||
./run-tests.sh startup-scripts
|
./run-bash-tests.sh startup-scripts
|
||||||
|
|
||||||
# Run tests matching pattern
|
# Run tests matching pattern
|
||||||
./run-tests.sh --filter starter
|
./run-bash-tests.sh --filter starter
|
||||||
|
|
||||||
# Run tests in specific directory
|
# Run tests in specific directory
|
||||||
./run-tests.sh --dir apps/docker
|
./run-bash-tests.sh --dir apps/docker
|
||||||
|
|
||||||
# Show available modules
|
# Show available modules
|
||||||
./run-tests.sh --list
|
./run-bash-tests.sh --list
|
||||||
|
|
||||||
# Show test count
|
# Show test count
|
||||||
./run-tests.sh --count
|
./run-bash-tests.sh --count
|
||||||
```
|
```
|
||||||
|
|
||||||
### Output Formats
|
### Output Formats
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Pretty output (default)
|
# Pretty output (default)
|
||||||
./run-tests.sh --pretty
|
./run-bash-tests.sh --pretty
|
||||||
|
|
||||||
# TAP output for CI/CD
|
# TAP output for CI/CD
|
||||||
./run-tests.sh --tap
|
./run-bash-tests.sh --tap
|
||||||
|
|
||||||
# Verbose output with debug info
|
# Verbose output with debug info
|
||||||
./run-tests.sh --verbose --debug
|
./run-bash-tests.sh --verbose --debug
|
||||||
```
|
```
|
||||||
|
|
||||||
## Writing Tests
|
## Writing Tests
|
||||||
@@ -205,17 +243,17 @@ debug_on_failure
|
|||||||
|
|
||||||
From your module directory:
|
From your module directory:
|
||||||
```bash
|
```bash
|
||||||
../test-framework/run-tests.sh --dir .
|
../test-framework/run-bash-tests.sh --dir .
|
||||||
```
|
```
|
||||||
|
|
||||||
From the test framework:
|
From the test framework:
|
||||||
```bash
|
```bash
|
||||||
./run-tests.sh my-module
|
./run-bash-tests.sh my-module
|
||||||
```
|
```
|
||||||
|
|
||||||
From project root:
|
From project root:
|
||||||
```bash
|
```bash
|
||||||
apps/test-framework/run-tests.sh my-module
|
apps/test-framework/run-bash-tests.sh my-module
|
||||||
```
|
```
|
||||||
|
|
||||||
## CI/CD Integration
|
## CI/CD Integration
|
||||||
@@ -223,37 +261,73 @@ apps/test-framework/run-tests.sh my-module
|
|||||||
For continuous integration, use TAP output:
|
For continuous integration, use TAP output:
|
||||||
|
|
||||||
```bash
|
```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
|
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
|
# 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
|
## 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
|
### Basic Test Execution
|
||||||
- `./run-tests.sh --all` - Run all tests in all modules
|
- `./run-bash-tests.sh --all` - Run all tests in all modules
|
||||||
- `./run-tests.sh <module>` - Run tests for specific module
|
- `./run-bash-tests.sh <module>` - Run tests for specific module
|
||||||
- `./run-tests.sh --dir <path>` - Run tests in specific directory
|
- `./run-bash-tests.sh --dir <path>` - Run tests in specific directory
|
||||||
- `./run-tests.sh --list` - List available modules
|
- `./run-bash-tests.sh --list` - List available modules
|
||||||
- `./run-tests.sh --count` - Show test count
|
- `./run-bash-tests.sh --count` - Show test count
|
||||||
|
|
||||||
### Output Control
|
### Output Control
|
||||||
- `./run-tests.sh --verbose` - Verbose output with debug info
|
- `./run-bash-tests.sh --verbose` - Verbose output with debug info
|
||||||
- `./run-tests.sh --tap` - TAP output for CI/CD
|
- `./run-bash-tests.sh --tap` - TAP output for CI/CD
|
||||||
- `./run-tests.sh --debug` - Debug mode with failure details
|
- `./run-bash-tests.sh --debug` - Debug mode with failure details
|
||||||
- `./run-tests.sh --pretty` - Pretty output (default)
|
- `./run-bash-tests.sh --pretty` - Pretty output (default)
|
||||||
|
|
||||||
### Test Filtering
|
### Test Filtering
|
||||||
- `./run-tests.sh --filter <pattern>` - Run tests matching pattern
|
- `./run-bash-tests.sh --filter <pattern>` - Run tests matching pattern
|
||||||
- `./run-tests.sh <module> --filter <pattern>` - Filter within module
|
- `./run-bash-tests.sh <module> --filter <pattern>` - Filter within module
|
||||||
|
|
||||||
### Utility Functions
|
### 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.)
|
- 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
|
### Running Specific Tests
|
||||||
```bash
|
```bash
|
||||||
# Run only starter-related tests
|
# Run only starter-related tests
|
||||||
./run-tests.sh --filter starter
|
./run-bash-tests.sh --filter starter
|
||||||
|
|
||||||
# Run only tests in startup-scripts module
|
# 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 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 in specific directory with debug
|
||||||
./run-tests.sh --dir apps/docker --debug
|
./run-bash-tests.sh --dir apps/docker --debug
|
||||||
```
|
```
|
||||||
|
|
||||||
### Development Workflow
|
### Development Workflow
|
||||||
```bash
|
```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
|
# While developing, run tests frequently from module directory
|
||||||
cd apps/my-module
|
cd apps/my-module
|
||||||
../test-framework/run-tests.sh --dir .
|
../test-framework/run-bash-tests.sh --dir .
|
||||||
|
|
||||||
# Debug failing tests
|
# Debug failing tests
|
||||||
../test-framework/run-tests.sh --dir . --debug --verbose
|
../test-framework/run-bash-tests.sh --dir . --debug --verbose
|
||||||
|
|
||||||
# Run specific test pattern
|
# 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
|
# 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
|
# 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
|
## Benefits
|
||||||
|
|||||||
17
apps/test-framework/run-core-tests.sh
Normal file
17
apps/test-framework/run-core-tests.sh
Normal file
@@ -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" "$@"
|
||||||
45
apps/test-framework/test-main.sh
Normal file
45
apps/test-framework/test-main.sh
Normal file
@@ -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[@]}" -- "$@"
|
||||||
9
conf/dist/config.sh
vendored
9
conf/dist/config.sh
vendored
@@ -108,6 +108,15 @@ CCUSTOMOPTIONS=${CCUSTOMOPTIONS:-''}
|
|||||||
AC_CCACHE=${AC_CCACHE:-false}
|
AC_CCACHE=${AC_CCACHE:-false}
|
||||||
export CCACHE_DIR=${CCACHE_DIR:-"$AC_PATH_VAR/ccache"}
|
export CCACHE_DIR=${CCACHE_DIR:-"$AC_PATH_VAR/ccache"}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Enable running the cmake install as root
|
||||||
|
# Installing as root allows to set the SUID bit on
|
||||||
|
# the worldserver binary. This is required if you want
|
||||||
|
# to bind the worldserver to reserved ports
|
||||||
|
# Default: 0 (false)
|
||||||
|
#
|
||||||
|
export AC_ENABLE_ROOT_CMAKE_INSTALL=${AC_ENABLE_ROOT_CMAKE_INSTALL:-0}
|
||||||
|
|
||||||
##############################################
|
##############################################
|
||||||
#
|
#
|
||||||
# GOOGLE PERF TOOLS
|
# GOOGLE PERF TOOLS
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||||
|
|
||||||
void AddScripts() {}
|
inline void AddScripts() {}
|
||||||
|
|
||||||
class WorldMock: public IWorld
|
class WorldMock: public IWorld
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,6 +19,8 @@
|
|||||||
#include "gmock/gmock.h"
|
#include "gmock/gmock.h"
|
||||||
#include "gtest/gtest.h"
|
#include "gtest/gtest.h"
|
||||||
#include "ArenaSeasonRewardsDistributor.h"
|
#include "ArenaSeasonRewardsDistributor.h"
|
||||||
|
#include "WorldMock.h"
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
class MockArenaSeasonTeamRewarder : public ArenaSeasonTeamRewarder
|
class MockArenaSeasonTeamRewarder : public ArenaSeasonTeamRewarder
|
||||||
{
|
{
|
||||||
@@ -31,12 +33,26 @@ class ArenaSeasonRewardDistributorTest : public ::testing::Test
|
|||||||
protected:
|
protected:
|
||||||
void SetUp() override
|
void SetUp() override
|
||||||
{
|
{
|
||||||
|
_previousWorld = std::move(sWorld);
|
||||||
|
_worldMock = new ::testing::NiceMock<WorldMock>();
|
||||||
|
ON_CALL(*_worldMock, getIntConfig(::testing::_)).WillByDefault(::testing::Return(0));
|
||||||
|
ON_CALL(*_worldMock, getIntConfig(CONFIG_LEGACY_ARENA_START_RATING)).WillByDefault(::testing::Return(1500));
|
||||||
|
ON_CALL(*_worldMock, getIntConfig(CONFIG_ARENA_START_RATING)).WillByDefault(::testing::Return(0));
|
||||||
|
sWorld.reset(_worldMock);
|
||||||
|
|
||||||
_mockRewarder = std::make_unique<MockArenaSeasonTeamRewarder>();
|
_mockRewarder = std::make_unique<MockArenaSeasonTeamRewarder>();
|
||||||
_distributor = std::make_unique<ArenaSeasonRewardDistributor>(_mockRewarder.get());
|
_distributor = std::make_unique<ArenaSeasonRewardDistributor>(_mockRewarder.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TearDown() override
|
||||||
|
{
|
||||||
|
sWorld = std::move(_previousWorld);
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_ptr<MockArenaSeasonTeamRewarder> _mockRewarder;
|
std::unique_ptr<MockArenaSeasonTeamRewarder> _mockRewarder;
|
||||||
std::unique_ptr<ArenaSeasonRewardDistributor> _distributor;
|
std::unique_ptr<ArenaSeasonRewardDistributor> _distributor;
|
||||||
|
std::unique_ptr<IWorld> _previousWorld;
|
||||||
|
::testing::NiceMock<WorldMock>* _worldMock = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
ArenaTeam ArenaTeamWithRating(int rating, int gamesPlayed)
|
ArenaTeam ArenaTeamWithRating(int rating, int gamesPlayed)
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#include "ArenaTeamMgr.h"
|
#include "ArenaTeamMgr.h"
|
||||||
#include "ArenaTeam.h"
|
#include "ArenaTeam.h"
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include "WorldMock.h"
|
||||||
|
|
||||||
// Used to expose Type property.
|
// Used to expose Type property.
|
||||||
class ArenaTeamTest : public ArenaTeam
|
class ArenaTeamTest : public ArenaTeam
|
||||||
@@ -46,6 +47,13 @@ class ArenaTeamFilterTest : public ::testing::Test
|
|||||||
protected:
|
protected:
|
||||||
void SetUp() override
|
void SetUp() override
|
||||||
{
|
{
|
||||||
|
_previousWorld = std::move(sWorld);
|
||||||
|
_worldMock = new ::testing::NiceMock<WorldMock>();
|
||||||
|
ON_CALL(*_worldMock, getIntConfig(::testing::_)).WillByDefault(::testing::Return(0));
|
||||||
|
ON_CALL(*_worldMock, getIntConfig(CONFIG_LEGACY_ARENA_START_RATING)).WillByDefault(::testing::Return(1500));
|
||||||
|
ON_CALL(*_worldMock, getIntConfig(CONFIG_ARENA_START_RATING)).WillByDefault(::testing::Return(0));
|
||||||
|
sWorld.reset(_worldMock);
|
||||||
|
|
||||||
team1 = ArenaTeamWithType(2); // 2v2
|
team1 = ArenaTeamWithType(2); // 2v2
|
||||||
team2 = ArenaTeamWithType(3); // 3v3
|
team2 = ArenaTeamWithType(3); // 3v3
|
||||||
team3 = ArenaTeamWithType(5); // 5v5
|
team3 = ArenaTeamWithType(5); // 5v5
|
||||||
@@ -60,12 +68,16 @@ protected:
|
|||||||
delete team1;
|
delete team1;
|
||||||
delete team2;
|
delete team2;
|
||||||
delete team3;
|
delete team3;
|
||||||
|
|
||||||
|
sWorld = std::move(_previousWorld);
|
||||||
}
|
}
|
||||||
|
|
||||||
ArenaTeamMgr::ArenaTeamContainer arenaTeams;
|
ArenaTeamMgr::ArenaTeamContainer arenaTeams;
|
||||||
ArenaTeam* team1;
|
ArenaTeam* team1;
|
||||||
ArenaTeam* team2;
|
ArenaTeam* team2;
|
||||||
ArenaTeam* team3;
|
ArenaTeam* team3;
|
||||||
|
std::unique_ptr<IWorld> _previousWorld;
|
||||||
|
::testing::NiceMock<WorldMock>* _worldMock = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Test for ArenaTeamFilterAllTeams: it should return all teams without filtering
|
// Test for ArenaTeamFilterAllTeams: it should return all teams without filtering
|
||||||
|
|||||||
Reference in New Issue
Block a user