Document project architecture and asset provenance
This commit is contained in:
parent
930acdb1a6
commit
866cc0fc06
10 changed files with 705 additions and 0 deletions
186
scripts/run_validations.sh
Executable file
186
scripts/run_validations.sh
Executable file
|
|
@ -0,0 +1,186 @@
|
|||
#!/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'
|
||||
Loading…
Add table
Add a link
Reference in a new issue