feat: add full Zonemaster stack with Docker and Spanish UI
- Clone all 5 Zonemaster component repos (LDNS, Engine, CLI, Backend, GUI) - Dockerfile.backend: 8-stage multi-stage build LDNS→Engine→CLI→Backend - Dockerfile.gui: Astro static build served via nginx - docker-compose.yml: backend (internal) + frontend (port 5353) - nginx.conf: root redirects to /es/, /api/ proxied to backend - zonemaster-gui/config.ts: defaultLanguage set to 'es' (Spanish) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
87
zonemaster-backend/script/zmtest
Executable file
87
zonemaster-backend/script/zmtest
Executable file
@@ -0,0 +1,87 @@
|
||||
#!/bin/sh
|
||||
|
||||
bindir="$(dirname "$0")"
|
||||
|
||||
ZMB="${bindir}/zmb"
|
||||
JQ="$(which jq)"
|
||||
|
||||
usage () {
|
||||
status="$1"
|
||||
message="$2"
|
||||
[ -n "$message" ] && printf "%s\n" "${message}" >&2
|
||||
echo "Usage: zmtest [OPTIONS] DOMAIN" >&2
|
||||
echo >&2
|
||||
echo "Options:" >&2
|
||||
echo " -h --help Show usage (this documentation)." >&2
|
||||
echo " -s URL --server URL Zonemaster Backend to query. Default is http://localhost:5000/" >&2
|
||||
echo " --noipv4 Run the test with IPv4 disabled." >&2
|
||||
echo " --noipv6 Run the test with IPv6 disabled." >&2
|
||||
echo " IPv4 and IPv6 follow the profile setting unless disabled by option." >&2
|
||||
echo " --lang LANG A language tag. Default is \"en\"." >&2
|
||||
echo " Valid values are determined by backend_config.ini." >&2
|
||||
echo " --profile PROFILE The name of a profile. Default is \"default\"." >&2
|
||||
echo " Valid values are determined by backend_config.ini except that" >&2
|
||||
echo " \"default\" is always a valid value." >&2
|
||||
exit "${status}"
|
||||
}
|
||||
|
||||
error () {
|
||||
status="$1"
|
||||
message="$2"
|
||||
printf "error: %s\n" "${message}" >&2
|
||||
exit "${status}"
|
||||
}
|
||||
|
||||
zmb () {
|
||||
server_url="$1"; shift
|
||||
output="$("${ZMB}" --server="${server_url}" "$@" 2>&1)" || error 1 "method $1: ${output}"
|
||||
json="$(printf "%s" "${output}" | "${JQ}" -S . 2>/dev/null)" || error 1 "method $1 did not return valid JSON output: ${output}"
|
||||
error="$(printf "%s" "${json}" | "${JQ}" -e .error 2>/dev/null)" && error 1 "method $1: ${error}"
|
||||
printf "%s" "${json}"
|
||||
}
|
||||
|
||||
[ -n "${JQ}" ] || error 2 "Dependency not found: jq"
|
||||
|
||||
domain=""
|
||||
server_url="http://localhost:5000/"
|
||||
ipv4=""
|
||||
ipv6=""
|
||||
lang="en"
|
||||
profile="default"
|
||||
while [ $# -gt 0 ] ; do
|
||||
case "$1" in
|
||||
-h|--help) usage 2; shift 1;;
|
||||
-s|--server) server_url="$2"; shift 2;;
|
||||
--noipv4) ipv4='--ipv4 false'; shift 1;;
|
||||
--noipv6) ipv6='--ipv6 false'; shift 1;;
|
||||
--lang) lang="$2"; shift 2;;
|
||||
--profile) profile="$2"; shift 2;;
|
||||
*) domain="$1" ; shift 1;;
|
||||
esac
|
||||
done
|
||||
[ -n "${domain}" ] || usage 2 "No domain specified"
|
||||
|
||||
# Start test
|
||||
output="$(zmb "${server_url}" start_domain_test --domain "${domain}" ${ipv4} ${ipv6} --profile "${profile}")" || exit $?
|
||||
testid="$(printf "%s" "${output}" | "${JQ}" -r .result)" || exit $?
|
||||
printf "testid: %s\n" "${testid}" >&2
|
||||
|
||||
if echo "${testid}" | grep -qE '[^0-9a-fA-F]' ; then
|
||||
error 1 "start_domain_test did not return a testid: ${testid}"
|
||||
fi
|
||||
|
||||
# Wait for test to finish
|
||||
while true
|
||||
do
|
||||
output="$(zmb "${server_url}" test_progress --test-id "${testid}")" || exit $?
|
||||
progress="$(printf "%s" "${output}" | "${JQ}" -r .result)" || exit $?
|
||||
printf "\r${progress}%% done" >&2
|
||||
if [ "${progress}" -eq 100 ] ; then
|
||||
echo >&2
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
||||
# Get test results
|
||||
zmb "${server_url}" get_test_results --test-id "${testid}" --lang "${lang}"
|
||||
Reference in New Issue
Block a user