Blame bin/tests/system/conf.sh.in

Packit Service ae04f2
#!/bin/sh
Packit Service ae04f2
#
Packit Service ae04f2
# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
Packit Service ae04f2
#
Packit Service ae04f2
# This Source Code Form is subject to the terms of the Mozilla Public
Packit Service ae04f2
# License, v. 2.0. If a copy of the MPL was not distributed with this
Packit Service ae04f2
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
Packit Service ae04f2
#
Packit Service ae04f2
# See the COPYRIGHT file distributed with this work for additional
Packit Service ae04f2
# information regarding copyright ownership.
Packit Service ae04f2
Packit Service ae04f2
#
Packit Service ae04f2
# Common configuration data for system tests, to be sourced into
Packit Service ae04f2
# other shell scripts.
Packit Service ae04f2
#
Packit Service ae04f2
Packit Service ae04f2
# Find the top of the BIND9 tree.
Packit Service ae04f2
TOP=@abs_top_builddir@
Packit Service ae04f2
Packit Service ae04f2
# Default algorithm for testing
Packit Service ae04f2
DEFAULT_ALGORITHM=RSASHA256
Packit Service ae04f2
DEFAULT_ALGORITHM_NUMBER=8
Packit Service ae04f2
DEFAULT_BITS=1280
Packit Service ae04f2
Packit Service ae04f2
# Provide TMPDIR variable for tests that need it.
Packit Service ae04f2
TMPDIR=${TMPDIR:-/tmp}
Packit Service ae04f2
Packit Service ae04f2
# must be different from DEFAULT_ALGORITHM
Packit Service ae04f2
ALTERNATIVE_ALGORITHM=RSASHA1
Packit Service ae04f2
ALTERNATIVE_ALGORITHM_NUMBER=5
Packit Service ae04f2
ALTERNATIVE_BITS=1280
Packit Service ae04f2
Packit Service ae04f2
# This is an algorithm that is used for tests against the
Packit Service ae04f2
# "disable-algorithms" configuration option.  Must be different from above
Packit Service ae04f2
# algorithms.
Packit Service ae04f2
DISABLED_ALGORITHM=ECDSAP384SHA384
Packit Service ae04f2
DISABLED_ALGORITHM_NUMBER=14
Packit Service ae04f2
DISABLED_BITS=384
Packit Service ae04f2
Packit Service ae04f2
NAMED=$TOP/bin/named/named
Packit Service ae04f2
# We must use "named -l" instead of "lwresd" because argv[0] is lost
Packit Service ae04f2
# if the program is libtoolized.
Packit Service ae04f2
LWRESD="$TOP/bin/named/named -l"
Packit Service ae04f2
DIG=$TOP/bin/dig/dig
Packit Service ae04f2
DELV=$TOP/bin/delv/delv
Packit Service ae04f2
RNDC=$TOP/bin/rndc/rndc
Packit Service ae04f2
NSUPDATE=$TOP/bin/nsupdate/nsupdate
Packit Service ae04f2
DDNSCONFGEN=$TOP/bin/confgen/ddns-confgen
Packit Service ae04f2
TSIGKEYGEN=$TOP/bin/confgen/tsig-keygen
Packit Service ae04f2
RNDCCONFGEN=$TOP/bin/confgen/rndc-confgen
Packit Service ae04f2
KEYGEN=$TOP/bin/dnssec/dnssec-keygen
Packit Service ae04f2
KEYFRLAB=$TOP/bin/dnssec/dnssec-keyfromlabel
Packit Service ae04f2
SIGNER=$TOP/bin/dnssec/dnssec-signzone
Packit Service ae04f2
REVOKE=$TOP/bin/dnssec/dnssec-revoke
Packit Service ae04f2
SETTIME=$TOP/bin/dnssec/dnssec-settime
Packit Service ae04f2
DSFROMKEY=$TOP/bin/dnssec/dnssec-dsfromkey
Packit Service ae04f2
HOST=$TOP/bin/dig/host
Packit Service ae04f2
IMPORTKEY=$TOP/bin/dnssec/dnssec-importkey
Packit Service ae04f2
CHECKDS=$TOP/bin/python/dnssec-checkds
Packit Service ae04f2
COVERAGE=$TOP/bin/python/dnssec-coverage
Packit Service ae04f2
KEYMGR=$TOP/bin/python/dnssec-keymgr
Packit Service ae04f2
CHECKZONE=$TOP/bin/check/named-checkzone
Packit Service ae04f2
CHECKCONF=$TOP/bin/check/named-checkconf
Packit Service ae04f2
PK11GEN="$TOP/bin/pkcs11/pkcs11-keygen -q -s ${SLOT:-0} -p ${HSMPIN:-1234}"
Packit Service ae04f2
PK11LIST="$TOP/bin/pkcs11/pkcs11-list -s ${SLOT:-0} -p ${HSMPIN:-1234}"
Packit Service ae04f2
PK11DEL="$TOP/bin/pkcs11/pkcs11-destroy -s ${SLOT:-0} -p ${HSMPIN:-1234} -w 0"
Packit Service ae04f2
JOURNALPRINT=$TOP/bin/tools/named-journalprint
Packit Service ae04f2
VERIFY=$TOP/bin/dnssec/dnssec-verify
Packit Service ae04f2
ARPANAME=$TOP/bin/tools/arpaname
Packit Service ae04f2
RESOLVE=$TOP/lib/samples/resolve
Packit Service ae04f2
RRCHECKER=$TOP/bin/tools/named-rrchecker
Packit Service ae04f2
GENRANDOM=$TOP/bin/tools/genrandom
Packit Service ae04f2
NSLOOKUP=$TOP/bin/dig/nslookup
Packit Service ae04f2
DNSTAPREAD=$TOP/bin/tools/dnstap-read
Packit Service ae04f2
MDIG=$TOP/bin/tools/mdig
Packit Service ae04f2
NZD2NZF=$TOP/bin/tools/named-nzd2nzf
Packit Service ae04f2
FSTRM_CAPTURE=@FSTRM_CAPTURE@
Packit Service ae04f2
FEATURETEST=$TOP/bin/tests/system/feature-test
Packit Service ae04f2
Packit Service ae04f2
RANDFILE=$TOP/bin/tests/system/random.data
Packit Service ae04f2
Packit Service ae04f2
BIGKEY=$TOP/bin/tests/system/rsabigexponent/bigkey
Packit Service ae04f2
GENCHECK=$TOP/bin/tests/system/rndc/gencheck
Packit Service ae04f2
KEYCREATE=$TOP/bin/tests/system/tkey/keycreate
Packit Service ae04f2
KEYDELETE=$TOP/bin/tests/system/tkey/keydelete
Packit Service ae04f2
LWTEST=$TOP/bin/tests/system/lwresd/lwtest
Packit Service ae04f2
MAKEJOURNAL=$TOP/bin/tests/makejournal
Packit Service ae04f2
PIPEQUERIES=$TOP/bin/tests/system/pipelined/pipequeries
Packit Service ae04f2
SAMPLEUPDATE=$TOP/lib/samples/sample-update
Packit Service ae04f2
Packit Service ae04f2
# we don't want a KRB5_CONFIG setting breaking the tests
Packit Service ae04f2
KRB5_CONFIG=/dev/null
Packit Service ae04f2
Packit Service ae04f2
# the amount of fake "entropy" to generate with GENRANDOM in
Packit Service ae04f2
# system tests
Packit Service ae04f2
RANDOMSIZE=4096
Packit Service ae04f2
Packit Service ae04f2
# The "stress" test is not run by default since it creates enough
Packit Service ae04f2
# load on the machine to make it unusable to other users.
Packit Service ae04f2
# The "dialup", "delzone", and "dupsigs" tests are also not run by
Packit Service ae04f2
# default because they take a very long time to complete.
Packit Service ae04f2
#
Packit Service ae04f2
# List of tests hard-coded to use ports 5300 and 9953. For this
Packit Service ae04f2
# reason, these must be run sequentially.
Packit Service ae04f2
SEQUENTIALDIRS="ecdsa eddsa gost lwresd @PKCS11_TEST@ tkey"
Packit Service ae04f2
Packit Service ae04f2
# List of tests that use ports assigned by caller (other than 5300
Packit Service ae04f2
# and 9953). Because separate blocks of ports can be used for teach
Packit Service ae04f2
# test, these tests can be run in parallel.
Packit Service ae04f2
#
Packit Service ae04f2
# Note: some of the longer-running tests are scheduled first,
Packit Service ae04f2
# in order to get more benefit from parallelism.
Packit Service ae04f2
PARALLELDIRS="dnssec rpzrecurse \
Packit Service ae04f2
	acl additional addzone allow-query autosign \
Packit Service ae04f2
	builtin cacheclean case catz chain \
Packit Service ae04f2
	checkconf checknames checkzone \
Packit Service ae04f2
	@CHECKDS@ @COVERAGE@ @KEYMGR@ \
Packit Service ae04f2
	cookie database digdelv dlv dlz dlzexternal \
Packit Service ae04f2
	dns64 @DNSTAP@ dscp dsdigest dyndb \
Packit Service ae04f2
	ednscompliance emptyzones \
Packit Service ae04f2
	fetchlimit filter-aaaa formerr forward \
Packit Service ae04f2
	geoip geoip2 glue idna inline integrity ixfr \
Packit Service ae04f2
	legacy limits logfileconfig \
Packit Service ae04f2
	masterfile masterformat metadata mkeys \
Packit Service ae04f2
	names notify nslookup nsupdate nzd2nzf \
Packit Service ae04f2
	pending pipelined \
Packit Service ae04f2
	reclimit redirect resolver rndc rootkeysentinel rpz \
Packit Service ae04f2
	rrchecker rrl rrsetorder rsabigexponent runtime \
Packit Service ae04f2
	sfcache smartsign sortlist \
Packit Service ae04f2
	spf staticstub statistics statschannel stub \
Packit Service ae04f2
	tcp tsig tsiggss \
Packit Service ae04f2
	unknown upforwd verify views wildcard \
Packit Service ae04f2
	xfer xferquota zero zonechecks"
Packit Service ae04f2
Packit Service ae04f2
SUBDIRS="$SEQUENTIALDIRS $PARALLELDIRS"
Packit Service ae04f2
Packit Service ae04f2
# Things that are different on Windows
Packit Service ae04f2
KILL=kill
Packit Service ae04f2
DIFF=diff
Packit Service ae04f2
DOS2UNIX=true
Packit Service ae04f2
# There's no trailing period on Windows
Packit Service ae04f2
TP=.
Packit Service ae04f2
Packit Service ae04f2
# Use the CONFIG_SHELL detected by configure for tests
Packit Service ae04f2
SHELL=@SHELL@
Packit Service ae04f2
Packit Service ae04f2
# CURL will be empty if no program was found by configure
Packit Service ae04f2
CURL=@CURL@
Packit Service ae04f2
Packit Service ae04f2
# XMLLINT will be empty if no program was found by configure
Packit Service ae04f2
XMLLINT=@XMLLINT@
Packit Service ae04f2
Packit Service ae04f2
# XSLTPROC will be empty if no program was found by configure
Packit Service ae04f2
XSLTPROC=@XSLTPROC@
Packit Service ae04f2
Packit Service ae04f2
# PERL will be an empty string if no perl interpreter was found.
Packit Service ae04f2
PERL=@PERL@
Packit Service ae04f2
Packit Service ae04f2
testsock6() {
Packit Service ae04f2
	if test -n "$PERL" \
Packit Service ae04f2
		&& $PERL -e "use IO::Socket::INET6;" 2> /dev/null \
Packit Service ae04f2
		&& grep "^#define WANT_IPV6 1" "$TOP/config.h" > /dev/null 2>&1
Packit Service ae04f2
	then
Packit Service ae04f2
		$PERL "$TOP/bin/tests/system/testsock6.pl" "$@"
Packit Service ae04f2
	else
Packit Service ae04f2
		false
Packit Service ae04f2
	fi
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
# Windows process management leave empty
Packit Service ae04f2
PSSUSPEND=
Packit Service ae04f2
Packit Service ae04f2
PYTHON=@PYTHON@
Packit Service ae04f2
Packit Service ae04f2
#
Packit Service ae04f2
# Determine if we support various optional features.
Packit Service ae04f2
#
Packit Service ae04f2
CHECK_DSA=@CHECK_DSA@
Packit Service ae04f2
HAVEXMLSTATS=@XMLSTATS@
Packit Service ae04f2
HAVEJSONSTATS=@JSONSTATS@
Packit Service ae04f2
ZLIB=@ZLIB@
Packit Service ae04f2
NZD=@NZD_TOOLS@
Packit Service ae04f2
Packit Service ae04f2
. ${TOP}/version
Packit Service ae04f2
Packit Service ae04f2
#
Packit Service ae04f2
# Set up color-coded test output
Packit Service ae04f2
#
Packit Service ae04f2
if [ ${SYSTEMTEST_FORCE_COLOR:-0} -eq 1 ] || test -t 1 && type tput > /dev/null 2>&1 && tput setaf 7 > /dev/null 2>&1 ; then
Packit Service ae04f2
    COLOR_END=`tput setaf 4`    # blue
Packit Service ae04f2
    COLOR_FAIL=`tput setaf 1`   # red
Packit Service ae04f2
    COLOR_INFO=`tput bold`      # bold
Packit Service ae04f2
    COLOR_NONE=`tput sgr0`
Packit Service ae04f2
    COLOR_PASS=`tput setaf 2`   # green
Packit Service ae04f2
    COLOR_START=`tput setaf 4`  # blue
Packit Service ae04f2
    COLOR_WARN=`tput setaf 3`   # yellow
Packit Service ae04f2
else
Packit Service ae04f2
    # set to empty strings so printf succeeds
Packit Service ae04f2
    COLOR_END=''
Packit Service ae04f2
    COLOR_FAIL=''
Packit Service ae04f2
    COLOR_INFO=''
Packit Service ae04f2
    COLOR_NONE=''
Packit Service ae04f2
    COLOR_PASS=''
Packit Service ae04f2
    COLOR_START=''
Packit Service ae04f2
    COLOR_WARN=''
Packit Service ae04f2
fi
Packit Service ae04f2
Packit Service ae04f2
SYSTESTDIR="`basename $PWD`"
Packit Service ae04f2
Packit Service ae04f2
if type printf > /dev/null 2>&1
Packit Service ae04f2
then
Packit Service ae04f2
	echofail () {
Packit Service ae04f2
		printf "${COLOR_FAIL}%s${COLOR_NONE}\n" "$*"
Packit Service ae04f2
	}
Packit Service ae04f2
	echowarn () {
Packit Service ae04f2
		printf "${COLOR_WARN}%s${COLOR_NONE}\n" "$*"
Packit Service ae04f2
	}
Packit Service ae04f2
	echopass () {
Packit Service ae04f2
		printf "${COLOR_PASS}%s${COLOR_NONE}\n" "$*"
Packit Service ae04f2
	}
Packit Service ae04f2
	echoinfo () {
Packit Service ae04f2
		printf "${COLOR_INFO}%s${COLOR_NONE}\n" "$*"
Packit Service ae04f2
	}
Packit Service ae04f2
	echostart () {
Packit Service ae04f2
		printf "${COLOR_START}%s${COLOR_NONE}\n" "$*"
Packit Service ae04f2
	}
Packit Service ae04f2
	echoend () {
Packit Service ae04f2
		printf "${COLOR_END}%s${COLOR_NONE}\n" "$*"
Packit Service ae04f2
	}
Packit Service ae04f2
	echo_i() {
Packit Service ae04f2
	    printf '%s\n' "$*" | while read -r __LINE ; do
Packit Service ae04f2
	       echoinfo "I:$SYSTESTDIR:$__LINE"
Packit Service ae04f2
	    done
Packit Service ae04f2
	}
Packit Service ae04f2
Packit Service ae04f2
	echo_ic() {
Packit Service ae04f2
	    printf '%s\n' "$*" | while read -r __LINE ; do
Packit Service ae04f2
	       echoinfo "I:$SYSTESTDIR:  $__LINE"
Packit Service ae04f2
	    done
Packit Service ae04f2
	}
Packit Service ae04f2
Packit Service ae04f2
	echo_d() {
Packit Service ae04f2
	    printf '%s\n' "$*" | while read -r __LINE ; do
Packit Service ae04f2
	       echoinfo "D:$SYSTESTDIR:$__LINE"
Packit Service ae04f2
	    done
Packit Service ae04f2
	}
Packit Service ae04f2
else
Packit Service ae04f2
	echofail () {
Packit Service ae04f2
		echo "$*"
Packit Service ae04f2
	}
Packit Service ae04f2
	echowarn () {
Packit Service ae04f2
		echo "$*"
Packit Service ae04f2
	}
Packit Service ae04f2
	echopass () {
Packit Service ae04f2
		echo "$*"
Packit Service ae04f2
	}
Packit Service ae04f2
	echoinfo () {
Packit Service ae04f2
		echo "$*"
Packit Service ae04f2
	}
Packit Service ae04f2
	echostart () {
Packit Service ae04f2
		echo "$*"
Packit Service ae04f2
	}
Packit Service ae04f2
	echoend () {
Packit Service ae04f2
		echo "$*"
Packit Service ae04f2
	}
Packit Service ae04f2
Packit Service ae04f2
	echo_i() {
Packit Service ae04f2
	    echo "$@" | while read -r __LINE ; do
Packit Service ae04f2
	       echoinfo "I:$SYSTESTDIR:$__LINE"
Packit Service ae04f2
	    done
Packit Service ae04f2
	}
Packit Service ae04f2
Packit Service ae04f2
	echo_ic() {
Packit Service ae04f2
	    echo "$@" | while read -r __LINE ; do
Packit Service ae04f2
	       echoinfo "I:$SYSTESTDIR:  $__LINE"
Packit Service ae04f2
	    done
Packit Service ae04f2
	}
Packit Service ae04f2
Packit Service ae04f2
	echo_d() {
Packit Service ae04f2
	    echo "$@" | while read -r __LINE ; do
Packit Service ae04f2
	       echoinfo "D:$SYSTESTDIR:$__LINE"
Packit Service ae04f2
	    done
Packit Service ae04f2
	}
Packit Service ae04f2
fi
Packit Service ae04f2
Packit Service ae04f2
cat_i() {
Packit Service ae04f2
    while read -r __LINE ; do
Packit Service ae04f2
       echoinfo "I:$SYSTESTDIR:$__LINE"
Packit Service ae04f2
    done
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
cat_d() {
Packit Service ae04f2
    while read -r __LINE ; do
Packit Service ae04f2
       echoinfo "D:$SYSTESTDIR:$__LINE"
Packit Service ae04f2
    done
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
Packit Service ae04f2
digcomp() {
Packit Service ae04f2
    output=`$PERL $SYSTEMTESTTOP/digcomp.pl "$@"`
Packit Service ae04f2
    result=$?
Packit Service ae04f2
    [ -n "$output" ] &&  { echo "digcomp failed:"; echo "$output"; } | cat_i
Packit Service ae04f2
    return $result
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
#
Packit Service ae04f2
# Useful functions in test scripts
Packit Service ae04f2
#
Packit Service ae04f2
Packit Service ae04f2
# assert_int_equal: compare two integer variables, $1 and $2
Packit Service ae04f2
#
Packit Service ae04f2
# If $1 and $2 are equal, return 0; if $1 and $2 are not equal, report
Packit Service ae04f2
# the error using the description of the tested variable provided in $3
Packit Service ae04f2
# and return 1.
Packit Service ae04f2
assert_int_equal() {
Packit Service ae04f2
	found="$1"
Packit Service ae04f2
	expected="$2"
Packit Service ae04f2
	description="$3"
Packit Service ae04f2
Packit Service ae04f2
	if [ "${expected}" -ne "${found}" ]; then
Packit Service ae04f2
		echo_i "incorrect ${description}: got ${found}, expected ${expected}"
Packit Service ae04f2
		return 1
Packit Service ae04f2
	fi
Packit Service ae04f2
Packit Service ae04f2
	return 0
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
# keyfile_to_keys_section: helper function for keyfile_to_*_keys() which
Packit Service ae04f2
# converts keyfile data into a configuration section using the supplied
Packit Service ae04f2
# parameters
Packit Service ae04f2
keyfile_to_keys_section() {
Packit Service ae04f2
    section_name=$1
Packit Service ae04f2
    key_prefix=$2
Packit Service ae04f2
    shift
Packit Service ae04f2
    shift
Packit Service ae04f2
    echo "$section_name {"
Packit Service ae04f2
    for keyname in $*; do
Packit Service ae04f2
	awk '!/^; /{
Packit Service ae04f2
	    printf "\t\""$1"\" "
Packit Service ae04f2
	    printf "'"$key_prefix"'"
Packit Service ae04f2
	    printf $4 " " $5 " " $6 " \""
Packit Service ae04f2
	    for (i=7; i<=NF; i++) printf $i
Packit Service ae04f2
	    printf "\";\n"
Packit Service ae04f2
	}' $keyname.key
Packit Service ae04f2
    done
Packit Service ae04f2
    echo "};"
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
# keyfile_to_trusted_keys: convert key data contained in the keyfile(s)
Packit Service ae04f2
# provided to a "trusted-keys" section suitable for including in a
Packit Service ae04f2
# resolver's configuration file
Packit Service ae04f2
keyfile_to_trusted_keys() {
Packit Service ae04f2
    keyfile_to_keys_section "trusted-keys" "" $*
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
# keyfile_to_managed_keys: convert key data contained in the keyfile(s)
Packit Service ae04f2
# provided to a "managed-keys" section suitable for including in a
Packit Service ae04f2
# resolver's configuration file
Packit Service ae04f2
keyfile_to_managed_keys() {
Packit Service ae04f2
    keyfile_to_keys_section "managed-keys" "initial-key " $*
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
# keyfile_to_key_id: convert a key file name to a key ID
Packit Service ae04f2
#
Packit Service ae04f2
# For a given key file name (e.g. "Kexample.+013+06160") provided as $1,
Packit Service ae04f2
# print the key ID with leading zeros stripped ("6160" for the
Packit Service ae04f2
# aforementioned example).
Packit Service ae04f2
keyfile_to_key_id() {
Packit Service ae04f2
	echo "$1" | sed "s/.*+0\{0,4\}//"
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
# nextpart*() - functions for reading files incrementally
Packit Service ae04f2
#
Packit Service ae04f2
# These functions aim to facilitate looking for (or waiting for)
Packit Service ae04f2
# messages which may be logged more than once throughout the lifetime of
Packit Service ae04f2
# a given named instance by outputting just the part of the file which
Packit Service ae04f2
# has been appended since the last time we read it.
Packit Service ae04f2
#
Packit Service ae04f2
# Calling some of these functions causes temporary *.prev files to be
Packit Service ae04f2
# created that need to be cleaned up manually (usually by a given system
Packit Service ae04f2
# test's clean.sh script).
Packit Service ae04f2
#
Packit Service ae04f2
# Note that unlike other nextpart*() functions, nextpartread() is not
Packit Service ae04f2
# meant to be directly used in system tests; its sole purpose is to
Packit Service ae04f2
# reduce code duplication below.
Packit Service ae04f2
#
Packit Service ae04f2
# A quick usage example:
Packit Service ae04f2
#
Packit Service ae04f2
#     $ echo line1 > named.log
Packit Service ae04f2
#     $ echo line2 >> named.log
Packit Service ae04f2
#     $ nextpart named.log
Packit Service ae04f2
#     line1
Packit Service ae04f2
#     line2
Packit Service ae04f2
#     $ echo line3 >> named.log
Packit Service ae04f2
#     $ nextpart named.log
Packit Service ae04f2
#     line3
Packit Service ae04f2
#     $ nextpart named.log
Packit Service ae04f2
#     $ echo line4 >> named.log
Packit Service ae04f2
#     $ nextpartpeek named.log
Packit Service ae04f2
#     line4
Packit Service ae04f2
#     $ nextpartpeek named.log
Packit Service ae04f2
#     line4
Packit Service ae04f2
#     $ nextpartreset named.log
Packit Service ae04f2
#     $ nextpartpeek named.log
Packit Service ae04f2
#     line1
Packit Service ae04f2
#     line2
Packit Service ae04f2
#     line3
Packit Service ae04f2
#     line4
Packit Service ae04f2
#     $ nextpart named.log
Packit Service ae04f2
#     line1
Packit Service ae04f2
#     line2
Packit Service ae04f2
#     line3
Packit Service ae04f2
#     line4
Packit Service ae04f2
#     $ nextpart named.log
Packit Service ae04f2
#     $
Packit Service ae04f2
Packit Service ae04f2
# nextpartreset: reset the marker used by nextpart() and nextpartpeek()
Packit Service ae04f2
# so that it points to the start of the given file
Packit Service ae04f2
nextpartreset() {
Packit Service ae04f2
    echo "0" > $1.prev
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
# nextpartread: read everything that's been appended to a file since the
Packit Service ae04f2
# last time nextpart() was called and print it to stdout, print the
Packit Service ae04f2
# total number of lines read from that file so far to stderr
Packit Service ae04f2
nextpartread() {
Packit Service ae04f2
    [ -f $1.prev ] || nextpartreset $1
Packit Service ae04f2
    prev=`cat $1.prev`
Packit Service ae04f2
    awk "NR > $prev "'{ print }
Packit Service ae04f2
         END          { print NR > "/dev/stderr" }' $1
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
# nextpart: read everything that's been appended to a file since the
Packit Service ae04f2
# last time nextpart() was called
Packit Service ae04f2
nextpart() {
Packit Service ae04f2
	nextpartread $1 2> $1.prev.tmp
Packit Service ae04f2
	mv $1.prev.tmp $1.prev
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
# nextpartpeek: read everything that's been appended to a file since the
Packit Service ae04f2
# last time nextpart() was called
Packit Service ae04f2
nextpartpeek() {
Packit Service ae04f2
	nextpartread $1 2> /dev/null
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
# _search_log: look for message $1 in file $2 with nextpart().
Packit Service ae04f2
_search_log() (
Packit Service ae04f2
	msg="$1"
Packit Service ae04f2
	file="$2"
Packit Service ae04f2
	nextpart "$file" | grep -F "$msg" > /dev/null
Packit Service ae04f2
)
Packit Service ae04f2
Packit Service ae04f2
# _search_log_peek: look for message $1 in file $2 with nextpartpeek().
Packit Service ae04f2
_search_log_peek() (
Packit Service ae04f2
	msg="$1"
Packit Service ae04f2
	file="$2"
Packit Service ae04f2
	nextpartpeek "$file" | grep -F "$msg" > /dev/null
Packit Service ae04f2
)
Packit Service ae04f2
Packit Service ae04f2
# wait_for_log: wait until message $2 in file $3 appears.  Bail out after
Packit Service ae04f2
# $1 seconds.  This needs to be used in conjunction with a prior call to
Packit Service ae04f2
# nextpart() or nextpartreset() on the same file to guarantee the offset is
Packit Service ae04f2
# set correctly.  Tests using wait_for_log() are responsible for cleaning up
Packit Service ae04f2
# the created <file>.prev files.
Packit Service ae04f2
wait_for_log() (
Packit Service ae04f2
	timeout="$1"
Packit Service ae04f2
	msg="$2"
Packit Service ae04f2
	file="$3"
Packit Service ae04f2
	retry_quiet "$timeout" _search_log "$msg" "$file" && return 0
Packit Service ae04f2
	echo_i "exceeded time limit waiting for '$msg' in $file"
Packit Service ae04f2
        return 1
Packit Service ae04f2
)
Packit Service ae04f2
Packit Service ae04f2
# wait_for_log_peek: similar to wait_for_log() but peeking, so the file offset
Packit Service ae04f2
# does not change.
Packit Service ae04f2
wait_for_log_peek() (
Packit Service ae04f2
	timeout="$1"
Packit Service ae04f2
	msg="$2"
Packit Service ae04f2
	file="$3"
Packit Service ae04f2
	retry_quiet "$timeout" _search_log_peek "$msg" "$file" && return 0
Packit Service ae04f2
	echo_i "exceeded time limit waiting for '$msg' in $file"
Packit Service ae04f2
        return 1
Packit Service ae04f2
)
Packit Service ae04f2
Packit Service ae04f2
# _retry: keep running a command until it succeeds, up to $1 times, with
Packit Service ae04f2
# one-second intervals, optionally printing a message upon every attempt
Packit Service ae04f2
_retry() {
Packit Service ae04f2
	__retries="${1}"
Packit Service ae04f2
	shift
Packit Service ae04f2
Packit Service ae04f2
	while :; do
Packit Service ae04f2
		if "$@"; then
Packit Service ae04f2
			return 0
Packit Service ae04f2
		fi
Packit Service ae04f2
		__retries=$((__retries-1))
Packit Service ae04f2
		if [ "${__retries}" -gt 0 ]; then
Packit Service ae04f2
			if [ "${__retry_quiet}" -ne 1 ]; then
Packit Service ae04f2
				echo_i "retrying"
Packit Service ae04f2
			fi
Packit Service ae04f2
			sleep 1
Packit Service ae04f2
		else
Packit Service ae04f2
			return 1
Packit Service ae04f2
		fi
Packit Service ae04f2
	done
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
# retry: call _retry() in verbose mode
Packit Service ae04f2
retry() {
Packit Service ae04f2
	__retry_quiet=0
Packit Service ae04f2
	_retry "$@"
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
# retry_quiet: call _retry() in silent mode
Packit Service ae04f2
retry_quiet() {
Packit Service ae04f2
	__retry_quiet=1
Packit Service ae04f2
	_retry "$@"
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
# rndc_dumpdb: call "rndc dumpdb [...]" and wait until it completes
Packit Service ae04f2
#
Packit Service ae04f2
# The first argument is the name server instance to send the command to, in the
Packit Service ae04f2
# form of "nsX" (where "X" is the instance number), e.g. "ns5".  The remaining
Packit Service ae04f2
# arguments, if any, are appended to the rndc command line after "dumpdb".
Packit Service ae04f2
#
Packit Service ae04f2
# Control channel configuration for the name server instance to send the
Packit Service ae04f2
# command to must match the contents of bin/tests/system/common/rndc.conf.
Packit Service ae04f2
#
Packit Service ae04f2
# rndc output is stored in a file called rndc.out.test${n}; the "n" variable is
Packit Service ae04f2
# required to be set by the calling tests.sh script.
Packit Service ae04f2
#
Packit Service ae04f2
# Return 0 if the dump completes successfully; return 1 if rndc returns an exit
Packit Service ae04f2
# code other than 0 or if the "; Dump complete" string does not appear in the
Packit Service ae04f2
# dump within 10 seconds.
Packit Service ae04f2
rndc_dumpdb() {
Packit Service ae04f2
	__ret=0
Packit Service ae04f2
	__dump_complete=0
Packit Service ae04f2
	__server="${1}"
Packit Service ae04f2
	__ip="10.53.0.`echo "${__server}" | tr -c -d "0-9"`"
Packit Service ae04f2
Packit Service ae04f2
	shift
Packit Service ae04f2
	${RNDC} -c ../common/rndc.conf -p "${CONTROLPORT}" -s "${__ip}" dumpdb "$@" > "rndc.out.test${n}" 2>&1 || __ret=1
Packit Service ae04f2
Packit Service ae04f2
	for _ in 0 1 2 3 4 5 6 7 8 9
Packit Service ae04f2
	do
Packit Service ae04f2
		if grep '^; Dump complete$' "${__server}/named_dump.db" > /dev/null; then
Packit Service ae04f2
			mv "${__server}/named_dump.db" "${__server}/named_dump.db.test${n}"
Packit Service ae04f2
			__dump_complete=1
Packit Service ae04f2
			break
Packit Service ae04f2
		fi
Packit Service ae04f2
		sleep 1
Packit Service ae04f2
	done
Packit Service ae04f2
Packit Service ae04f2
	if [ ${__dump_complete} -eq 0 ]; then
Packit Service ae04f2
		echo_i "timed out waiting for 'rndc dumpdb' to finish"
Packit Service ae04f2
		__ret=1
Packit Service ae04f2
	fi
Packit Service ae04f2
Packit Service ae04f2
	return ${__ret}
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
# copy_setports - Copy Configuration File and Replace Ports
Packit Service ae04f2
#
Packit Service ae04f2
# Convenience function to copy a configuration file, replacing the tokens
Packit Service ae04f2
# QUERYPORT, CONTROLPORT and EXTRAPORT[1-8] with the values of the equivalent
Packit Service ae04f2
# environment variables. (These values are set by "run.sh", which calls the
Packit Service ae04f2
# scripts invoking this function.)
Packit Service ae04f2
#
Packit Service ae04f2
# Usage:
Packit Service ae04f2
#   copy_setports infile outfile
Packit Service ae04f2
Packit Service ae04f2
copy_setports() {
Packit Service ae04f2
    sed -e "s/@PORT@/${PORT}/g" \
Packit Service ae04f2
	-e "s/@EXTRAPORT1@/${EXTRAPORT1}/g" \
Packit Service ae04f2
	-e "s/@EXTRAPORT2@/${EXTRAPORT2}/g" \
Packit Service ae04f2
	-e "s/@EXTRAPORT3@/${EXTRAPORT3}/g" \
Packit Service ae04f2
	-e "s/@EXTRAPORT4@/${EXTRAPORT4}/g" \
Packit Service ae04f2
	-e "s/@EXTRAPORT5@/${EXTRAPORT5}/g" \
Packit Service ae04f2
	-e "s/@EXTRAPORT6@/${EXTRAPORT6}/g" \
Packit Service ae04f2
	-e "s/@EXTRAPORT7@/${EXTRAPORT7}/g" \
Packit Service ae04f2
	-e "s/@EXTRAPORT8@/${EXTRAPORT8}/g" \
Packit Service ae04f2
	-e "s/@CONTROLPORT@/${CONTROLPORT}/g" \
Packit Service ae04f2
	-e "s/@DEFAULT_ALGORITHM@/${DEFAULT_ALGORITHM}/g" \
Packit Service ae04f2
	-e "s/@DEFAULT_ALGORITHM_NUMBER@/${DEFAULT_ALGORITHM_NUMBER}/g" \
Packit Service ae04f2
	-e "s/@DEFAULT_BITS@/${DEFAULT_BITS}/g" \
Packit Service ae04f2
	-e "s/@ALTERNATIVE_ALGORITHM@/${ALTERNATIVE_ALGORITHM}/g" \
Packit Service ae04f2
	-e "s/@ALTERNATIVE_ALGORITHM_NUMBER@/${ALTERNATIVE_ALGORITHM_NUMBER}/g" \
Packit Service ae04f2
	-e "s/@ALTERNATIVE_BITS@/${ALTERNATIVE_BITS}/g" \
Packit Service ae04f2
	-e "s/@DISABLED_ALGORITHM@/${DISABLED_ALGORITHM}/g" \
Packit Service ae04f2
	-e "s/@DISABLED_ALGORITHM_NUMBER@/${DISABLED_ALGORITHM_NUMBER}/g" \
Packit Service ae04f2
	-e "s/@DISABLED_BITS@/${DISABLED_BITS}/g" \
Packit Service ae04f2
	$1 > $2
Packit Service ae04f2
}
Packit Service ae04f2
Packit Service ae04f2
#
Packit Service ae04f2
# Export command paths
Packit Service ae04f2
#
Packit Service ae04f2
export ARPANAME
Packit Service ae04f2
export BIGKEY
Packit Service ae04f2
export CHECKZONE
Packit Service ae04f2
export CYGWIN
Packit Service ae04f2
export DESCRIPTION
Packit Service ae04f2
export DIG
Packit Service ae04f2
export FEATURETEST
Packit Service ae04f2
export FSTRM_CAPTURE
Packit Service ae04f2
export GENCHECK
Packit Service ae04f2
export JOURNALPRINT
Packit Service ae04f2
export KEYCREATE
Packit Service ae04f2
export KEYDELETE
Packit Service ae04f2
export KEYFRLAB
Packit Service ae04f2
export KEYGEN
Packit Service ae04f2
export KEYSETTOOL
Packit Service ae04f2
export KEYSIGNER
Packit Service ae04f2
export KRB5_CONFIG
Packit Service ae04f2
export LWRESD
Packit Service ae04f2
export LWTEST
Packit Service ae04f2
export MAKEJOURNAL
Packit Service ae04f2
export MDIG
Packit Service ae04f2
export NAMED
Packit Service ae04f2
export NSLOOKUP
Packit Service ae04f2
export NSUPDATE
Packit Service ae04f2
export NZD2NZF
Packit Service ae04f2
export PERL
Packit Service ae04f2
export PIPEQUERIES
Packit Service ae04f2
export PK11DEL
Packit Service ae04f2
export PK11GEN
Packit Service ae04f2
export PK11LIST
Packit Service ae04f2
export PSSUSPEND
Packit Service ae04f2
export PYTHON
Packit Service ae04f2
export RANDFILE
Packit Service ae04f2
export RESOLVE
Packit Service ae04f2
export RNDC
Packit Service ae04f2
export RRCHECKER
Packit Service ae04f2
export SAMPLEUPDATE
Packit Service ae04f2
export SIGNER
Packit Service ae04f2
export SUBDIRS
Packit Service ae04f2
export TMPDIR