DarkCat09
667e6433a6
Also tried +short and -Q options for dig and drill, but it only increased time. Anyway, now it's more convenient to append options.
92 lines
1.9 KiB
Bash
Executable file
92 lines
1.9 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
|
|
|
|
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_drill="ldns/drill/drill"
|
|
exe_hr="hickory-dns/target/release/resolve"
|
|
|
|
echo
|
|
echo '==> Checking deps'
|
|
which unbound
|
|
which hyperfine
|
|
exe_dig=$(built_or_system "$exe_dig" dig "build_dig.sh" bind-utils)
|
|
exe_drill=$(built_or_system "$exe_drill" drill "build_drill.sh" ldns)
|
|
exe_hr=$(built_or_system "$exe_hr" resolve "build_hr.sh")
|
|
|
|
|
|
echo
|
|
echo '==> Starting Unbound'
|
|
unbound -c ./unbound.conf -dp 2>unbound.log &
|
|
unbound_pid=$!
|
|
sleep 2
|
|
|
|
|
|
run_bench () {
|
|
hyperfine -N -w 30 \
|
|
"$exe_dig -p 2253 $1 $2 @127.0.0.1" \
|
|
"$exe_drill -p 2253 $1 $2 @127.0.0.1" \
|
|
"$exe_hr -n 127.0.0.1:2253 -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'
|