#!/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 4 echo echo '==> Benchmarks for A domain.tld.' hyperfine -N -w 30 \ "$exe_dig -p 2253 domain.tld @127.0.0.1" \ "$exe_drill -p 2253 domain.tld @127.0.0.1" \ "$exe_hr -n 127.0.0.1:2253 domain.tld" echo echo '==> Benchmarks for AAAA domain.tld.' hyperfine -N -w 30 \ "$exe_dig -p 2253 aaaa domain.tld @127.0.0.1" \ "$exe_drill -p 2253 aaaa domain.tld @127.0.0.1" \ "$exe_hr -n 127.0.0.1:2253 -t AAAA domain.tld" echo echo '==> Benchmarks for MX domain.tld.' hyperfine -N -w 30 \ "$exe_dig -p 2253 mx domain.tld @127.0.0.1" \ "$exe_drill -p 2253 mx domain.tld @127.0.0.1" \ "$exe_hr -n 127.0.0.1:2253 -t MX domain.tld" echo echo '==> Benchmarks for CNAME mail.domain.tld.' hyperfine -N -w 30 \ "$exe_dig -p 2253 mail.domain.tld @127.0.0.1" \ "$exe_drill -p 2253 mail.domain.tld @127.0.0.1" \ "$exe_hr -n 127.0.0.1:2253 mail.domain.tld" echo echo '==> All done'