93 lines
2.5 KiB
Bash
Executable File
93 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ©AngelaMos | 2026
|
|
# test_runner.sh
|
|
#
|
|
# Test harness for the CIS auditor test suite
|
|
#
|
|
# Sources all project modules (constants, utils, registry, engine,
|
|
# report_json, baseline, registry_data, and all check files) plus the
|
|
# test_helpers assertion framework. Discovers test_*.sh files (excluding
|
|
# itself and test_helpers.sh), sources each one, introspects all
|
|
# functions matching the test_ prefix via declare -F, executes them in
|
|
# order, then cleans up by unsetting each test function. Supports
|
|
# running specific test files as CLI arguments or auto-discovering all
|
|
# files in the tests directory. Prints the aggregated pass/fail summary
|
|
# via print_results and exits non-zero on any failures.
|
|
#
|
|
# Connects to:
|
|
# tests/test_helpers.sh - assertion framework (setup_test, assert_*)
|
|
# all src/ modules - sourced to provide testable functions
|
|
# tests/test_*.sh - individual test files discovered and run
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
|
|
source "${PROJECT_DIR}/src/lib/constants.sh"
|
|
source "${PROJECT_DIR}/src/lib/utils.sh"
|
|
source "${PROJECT_DIR}/src/lib/registry.sh"
|
|
source "${PROJECT_DIR}/src/lib/engine.sh"
|
|
source "${PROJECT_DIR}/src/lib/report_json.sh"
|
|
source "${PROJECT_DIR}/src/lib/baseline.sh"
|
|
source "${PROJECT_DIR}/src/controls/registry_data.sh"
|
|
for f in "${PROJECT_DIR}/src/checks/"*.sh; do source "$f"; done
|
|
|
|
source "${SCRIPT_DIR}/test_helpers.sh"
|
|
|
|
QUIET="true"
|
|
|
|
run_test_file() {
|
|
local test_file="$1"
|
|
local file_name
|
|
file_name=$(basename "$test_file")
|
|
|
|
source "$test_file"
|
|
|
|
local test_fns
|
|
test_fns=$(declare -F | awk '{print $3}' | grep '^test_')
|
|
|
|
local fn
|
|
for fn in $test_fns; do
|
|
echo " Running: ${fn}"
|
|
"$fn"
|
|
done
|
|
|
|
for fn in $test_fns; do
|
|
unset -f "$fn"
|
|
done
|
|
}
|
|
|
|
main() {
|
|
local test_files=()
|
|
|
|
if [[ $# -gt 0 ]]; then
|
|
test_files=("$@")
|
|
else
|
|
for f in "${SCRIPT_DIR}"/test_*.sh; do
|
|
[[ "$(basename "$f")" == "test_helpers.sh" ]] && continue
|
|
[[ "$(basename "$f")" == "test_runner.sh" ]] && continue
|
|
test_files+=("$f")
|
|
done
|
|
fi
|
|
|
|
if [[ ${#test_files[@]} -eq 0 ]]; then
|
|
echo "No test files found" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "Running ${#test_files[@]} test file(s)..."
|
|
echo ""
|
|
|
|
local file
|
|
for file in "${test_files[@]}"; do
|
|
echo "[$(basename "$file")]"
|
|
run_test_file "$file"
|
|
echo ""
|
|
done
|
|
|
|
print_results
|
|
}
|
|
|
|
main "$@"
|