187 lines
4.6 KiB
Bash
187 lines
4.6 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
readonly SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
readonly PROJECT_ROOT="$(cd -- "${SCRIPT_DIR}/.." && pwd)"
|
||
|
|
readonly GODOT_BIN="${GODOT_BIN:-godot}"
|
||
|
|
readonly TEST_TIMEOUT_SECONDS="${TEST_TIMEOUT_SECONDS:-120}"
|
||
|
|
readonly RUN_ROOT="$(mktemp -d -t netfishing-validations.XXXXXX)"
|
||
|
|
|
||
|
|
readonly -a QUICK_TESTS=(
|
||
|
|
"tests/android_readiness_validation.gd"
|
||
|
|
"tests/fish_catalog_content_validation.gd"
|
||
|
|
"tests/fish_quality_validation.gd"
|
||
|
|
"tests/fishing_audio_validation.gd"
|
||
|
|
"tests/fishing_surface_validation.gd"
|
||
|
|
"tests/logbook_validation.gd"
|
||
|
|
"tests/player_experience_validation.gd"
|
||
|
|
"tests/shoreline_ambience_validation.gd"
|
||
|
|
"tests/surface_drawing_validation.gd"
|
||
|
|
"tests/terrain_projection_validation.gd"
|
||
|
|
"tests/world_time_validation.gd"
|
||
|
|
"tests/world_weather_validation.gd"
|
||
|
|
)
|
||
|
|
|
||
|
|
readonly -a RUNTIME_TESTS=(
|
||
|
|
"tests/inventory_notepad_art_validation.gd"
|
||
|
|
"tests/logbook_runtime_validation.gd"
|
||
|
|
"tests/player_experience_ui_validation.gd"
|
||
|
|
"tests/ui_scaling_runtime_validation.gd"
|
||
|
|
)
|
||
|
|
|
||
|
|
readonly -a HOST_TESTS=(
|
||
|
|
"tests/art_tools_validation.gd"
|
||
|
|
"tests/economy_regression_validation.gd"
|
||
|
|
"tests/fish_hotbar_showcase_validation.gd"
|
||
|
|
"tests/fishing_authority_validation.gd"
|
||
|
|
"tests/job_system_validation.gd"
|
||
|
|
"tests/surface_drawing_runtime_validation.gd"
|
||
|
|
)
|
||
|
|
|
||
|
|
readonly -a NETWORK_TESTS=(
|
||
|
|
"tests/economy_regression_validation.gd"
|
||
|
|
"tests/fish_showcase_multiplayer_validation.gd"
|
||
|
|
"tests/fishing_multiplayer_validation.gd"
|
||
|
|
"tests/job_multiplayer_validation.gd"
|
||
|
|
"tests/surface_drawing_multiplayer_validation.gd"
|
||
|
|
"tests/world_time_multiplayer_validation.gd"
|
||
|
|
)
|
||
|
|
|
||
|
|
cleanup() {
|
||
|
|
rm -rf -- "${RUN_ROOT}"
|
||
|
|
}
|
||
|
|
trap cleanup EXIT INT TERM
|
||
|
|
|
||
|
|
usage() {
|
||
|
|
printf 'Usage: %s {quick|full|host|network|all|--list}\n' "$0"
|
||
|
|
}
|
||
|
|
|
||
|
|
prepare_root() {
|
||
|
|
local name="$1"
|
||
|
|
local root="${RUN_ROOT}/${name}"
|
||
|
|
mkdir -p -- "${root}/data" "${root}/config" "${root}/cache"
|
||
|
|
printf '%s\n' "${root}"
|
||
|
|
}
|
||
|
|
|
||
|
|
run_test() {
|
||
|
|
local script="$1"
|
||
|
|
local name="${script#tests/}"
|
||
|
|
name="${name%.gd}"
|
||
|
|
local root
|
||
|
|
root="$(prepare_root "${name}")"
|
||
|
|
printf '\n==> %s\n' "${script}"
|
||
|
|
XDG_DATA_HOME="${root}/data" \
|
||
|
|
XDG_CONFIG_HOME="${root}/config" \
|
||
|
|
XDG_CACHE_HOME="${root}/cache" \
|
||
|
|
timeout "${TEST_TIMEOUT_SECONDS}s" "${GODOT_BIN}" \
|
||
|
|
--headless --path "${PROJECT_ROOT}" --script "${script}"
|
||
|
|
}
|
||
|
|
|
||
|
|
run_network_test() {
|
||
|
|
local script="$1"
|
||
|
|
local name="${script#tests/}"
|
||
|
|
name="${name%.gd}"
|
||
|
|
local host_root client_root host_pid host_status client_status
|
||
|
|
host_root="$(prepare_root "${name}-host")"
|
||
|
|
client_root="$(prepare_root "${name}-client")"
|
||
|
|
printf '\n==> %s (host + client)\n' "${script}"
|
||
|
|
XDG_DATA_HOME="${host_root}/data" \
|
||
|
|
XDG_CONFIG_HOME="${host_root}/config" \
|
||
|
|
XDG_CACHE_HOME="${host_root}/cache" \
|
||
|
|
timeout "${TEST_TIMEOUT_SECONDS}s" "${GODOT_BIN}" \
|
||
|
|
--headless --path "${PROJECT_ROOT}" --script "${script}" -- host \
|
||
|
|
>"${host_root}/output.log" 2>&1 &
|
||
|
|
host_pid=$!
|
||
|
|
sleep 0.75
|
||
|
|
set +e
|
||
|
|
XDG_DATA_HOME="${client_root}/data" \
|
||
|
|
XDG_CONFIG_HOME="${client_root}/config" \
|
||
|
|
XDG_CACHE_HOME="${client_root}/cache" \
|
||
|
|
timeout "${TEST_TIMEOUT_SECONDS}s" "${GODOT_BIN}" \
|
||
|
|
--headless --path "${PROJECT_ROOT}" --script "${script}" -- client \
|
||
|
|
>"${client_root}/output.log" 2>&1
|
||
|
|
client_status=$?
|
||
|
|
wait "${host_pid}"
|
||
|
|
host_status=$?
|
||
|
|
set -e
|
||
|
|
printf '%s\n' '-- host output --'
|
||
|
|
sed -n '1,240p' "${host_root}/output.log"
|
||
|
|
printf '%s\n' '-- client output --'
|
||
|
|
sed -n '1,240p' "${client_root}/output.log"
|
||
|
|
if ((host_status != 0 || client_status != 0)); then
|
||
|
|
printf 'error: host exited %d; client exited %d\n' \
|
||
|
|
"${host_status}" "${client_status}" >&2
|
||
|
|
return 1
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
run_quick() {
|
||
|
|
local test_script
|
||
|
|
for test_script in "${QUICK_TESTS[@]}"; do
|
||
|
|
run_test "${test_script}"
|
||
|
|
done
|
||
|
|
}
|
||
|
|
|
||
|
|
run_full() {
|
||
|
|
local test_script
|
||
|
|
run_quick
|
||
|
|
for test_script in "${RUNTIME_TESTS[@]}"; do
|
||
|
|
run_test "${test_script}"
|
||
|
|
done
|
||
|
|
}
|
||
|
|
|
||
|
|
run_host() {
|
||
|
|
local test_script
|
||
|
|
for test_script in "${HOST_TESTS[@]}"; do
|
||
|
|
run_test "${test_script}"
|
||
|
|
done
|
||
|
|
}
|
||
|
|
|
||
|
|
run_network() {
|
||
|
|
local test_script
|
||
|
|
for test_script in "${NETWORK_TESTS[@]}"; do
|
||
|
|
run_network_test "${test_script}"
|
||
|
|
done
|
||
|
|
}
|
||
|
|
|
||
|
|
list_tests() {
|
||
|
|
printf '%s\n' 'Quick tests:'
|
||
|
|
printf ' %s\n' "${QUICK_TESTS[@]}"
|
||
|
|
printf '%s\n' 'Additional full-suite tests:'
|
||
|
|
printf ' %s\n' "${RUNTIME_TESTS[@]}"
|
||
|
|
printf '%s\n' 'Single-process tests requiring a local UDP bind:'
|
||
|
|
printf ' %s\n' "${HOST_TESTS[@]}"
|
||
|
|
printf '%s\n' 'Paired network tests:'
|
||
|
|
printf ' %s\n' "${NETWORK_TESTS[@]}"
|
||
|
|
}
|
||
|
|
|
||
|
|
case "${1:-}" in
|
||
|
|
quick)
|
||
|
|
run_quick
|
||
|
|
;;
|
||
|
|
full)
|
||
|
|
run_full
|
||
|
|
;;
|
||
|
|
host)
|
||
|
|
run_host
|
||
|
|
;;
|
||
|
|
network)
|
||
|
|
run_network
|
||
|
|
;;
|
||
|
|
all)
|
||
|
|
run_full
|
||
|
|
run_host
|
||
|
|
run_network
|
||
|
|
;;
|
||
|
|
--list)
|
||
|
|
list_tests
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
usage >&2
|
||
|
|
exit 2
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
printf '\nAll requested validations passed.\n'
|