Files
zonemaster.es/zonemaster-backend/script/zmtest
Malin 8d4eaa1489 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>
2026-04-21 08:19:24 +02:00

88 lines
2.9 KiB
Bash
Executable File

#!/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}"