105 lines
2.4 KiB
Bash
Executable file
105 lines
2.4 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
IFS=$'\n'
|
|
set -eu -o pipefail
|
|
|
|
|
|
cleanup () {
|
|
echo
|
|
|
|
# if Unbound is not started, exit from function
|
|
[ -v unbound_pid ] || return
|
|
|
|
echo '==> Stopping Unbound'
|
|
kill -INT "$unbound_pid"
|
|
echo
|
|
}
|
|
|
|
trap cleanup EXIT
|
|
|
|
|
|
built_or_system () {
|
|
# args: [1]custom/build/path [2]program_name [3]build_script [4]package_name
|
|
|
|
if [ -e "$1" ]; then
|
|
echo "$2: using custom build at $1" >&2 # stderr; just a message to user
|
|
echo "$1" # stdout; captured into a variable with $(), see below
|
|
|
|
elif exe=$(which "$2"); then
|
|
echo "$exe" # stdout
|
|
echo "$exe" >&2
|
|
|
|
else
|
|
echo " ** $2: not found neither built nor in-system" >&2 # stderr
|
|
echo " use script './$3' to automatically build it at the correct path" >&2
|
|
|
|
# if $4 is set, say about possible pkg name
|
|
[ -v 4 ] && \
|
|
echo " or install it from your package manager, usually pkg is named '$4'" >&2
|
|
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
exe_dig="bind9/bin/dig/dig"
|
|
exe_kdig="knot-dns/src/kdig"
|
|
exe_drill="ldns/drill/drill"
|
|
exe_hr="hickory-dns/target/release/resolve"
|
|
exe_dog="dog/target/release/dog"
|
|
exe_doggo="doggo/doggo"
|
|
exe_q="q/q"
|
|
|
|
echo
|
|
echo '==> Checking deps'
|
|
which unbound
|
|
which hyperfine
|
|
exe_dig=$(built_or_system "$exe_dig" dig "build_dig.sh" bind-utils)
|
|
exe_kdig=$(built_or_system "$exe_kdig" kdig "build_kdig.sh" knot-utils)
|
|
exe_drill=$(built_or_system "$exe_drill" drill "build_drill.sh" ldns)
|
|
exe_hr=$(built_or_system "$exe_hr" resolve "build_hr.sh")
|
|
exe_dog=$(built_or_system "$exe_dog" dog "build_dog.sh")
|
|
exe_doggo=$(built_or_system "$exe_doggo" doggo "build_doggo.sh")
|
|
exe_q=$(built_or_system "$exe_q" q "build_q.sh")
|
|
|
|
|
|
echo
|
|
echo '==> Starting Unbound'
|
|
unbound -c ./unbound.conf -dp 2>unbound.log &
|
|
unbound_pid=$!
|
|
sleep 2
|
|
|
|
|
|
run_bench () {
|
|
hyperfine -N -w 200 \
|
|
"$exe_dig -p 2253 +short $1 $2 @127.0.0.1" \
|
|
"$exe_kdig -p 2253 +short $1 $2 @127.0.0.1" \
|
|
"$exe_drill -p 2253 -Q $1 $2 @127.0.0.1" \
|
|
"$exe_hr -n 127.0.0.1:2253 -t $1 $2" \
|
|
"$exe_dog -n 127.0.0.1:2253 -t $1 $2" \
|
|
"$exe_doggo -n 127.0.0.1:2253 --short -t $1 $2" \
|
|
"$exe_q -s 127.0.0.1:2253 -r -t $1 $2"
|
|
}
|
|
|
|
echo
|
|
echo '==> Benchmarks for A domain.tld.'
|
|
run_bench A domain.tld
|
|
|
|
echo
|
|
echo '==> Benchmarks for AAAA domain.tld.'
|
|
run_bench AAAA domain.tld
|
|
|
|
echo
|
|
echo '==> Benchmarks for MX domain.tld.'
|
|
run_bench MX domain.tld
|
|
|
|
echo
|
|
echo '==> Benchmarks for CNAME mail.domain.tld.'
|
|
run_bench A mail.domain.tld
|
|
|
|
echo
|
|
echo '==> Benchmarks for TXT txt.domain.tld.'
|
|
run_bench TXT txt.domain.tld
|
|
|
|
|
|
echo
|
|
echo '==> All done'
|