mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-22 07:41:16 -05:00
- Use an explicit 'reload_keep_cache' command and introduce test cases
for #569.
This commit is contained in:
parent
857d6ce3a1
commit
7716d26d46
8 changed files with 318 additions and 342 deletions
|
|
@ -682,10 +682,9 @@ do_stop(RES* ssl, struct worker* worker)
|
||||||
|
|
||||||
/** do the reload command */
|
/** do the reload command */
|
||||||
static void
|
static void
|
||||||
do_reload(RES* ssl, struct worker* worker, char* arg)
|
do_reload(RES* ssl, struct worker* worker, int reuse_cache)
|
||||||
{
|
{
|
||||||
arg = skipwhite(arg);
|
worker->reuse_cache = reuse_cache;
|
||||||
worker->reuse_cache = (strcmp(arg, "+keep-cache") == 0);
|
|
||||||
worker->need_to_exit = 0;
|
worker->need_to_exit = 0;
|
||||||
comm_base_exit(worker->base);
|
comm_base_exit(worker->base);
|
||||||
send_ok(ssl);
|
send_ok(ssl);
|
||||||
|
|
@ -3031,8 +3030,11 @@ execute_cmd(struct daemon_remote* rc, RES* ssl, char* cmd,
|
||||||
if(cmdcmp(p, "stop", 4)) {
|
if(cmdcmp(p, "stop", 4)) {
|
||||||
do_stop(ssl, worker);
|
do_stop(ssl, worker);
|
||||||
return;
|
return;
|
||||||
|
} else if(cmdcmp(p, "reload_keep_cache", 17)) {
|
||||||
|
do_reload(ssl, worker, 1);
|
||||||
|
return;
|
||||||
} else if(cmdcmp(p, "reload", 6)) {
|
} else if(cmdcmp(p, "reload", 6)) {
|
||||||
do_reload(ssl, worker, skipwhite(p+6));
|
do_reload(ssl, worker, 0);
|
||||||
return;
|
return;
|
||||||
} else if(cmdcmp(p, "stats_noreset", 13)) {
|
} else if(cmdcmp(p, "stats_noreset", 13)) {
|
||||||
do_stats(ssl, worker, 0);
|
do_stats(ssl, worker, 0);
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,12 @@ Stop the server. The server daemon exits.
|
||||||
.B reload
|
.B reload
|
||||||
Reload the server. This flushes the cache and reads the config file fresh.
|
Reload the server. This flushes the cache and reads the config file fresh.
|
||||||
.TP
|
.TP
|
||||||
|
.B reload_keep_cache
|
||||||
|
Reload the server but try to keep the RRset and message cache if
|
||||||
|
(re)configuration allows for it.
|
||||||
|
That means the caches sizes and the number of threads must not change between
|
||||||
|
reloads.
|
||||||
|
.TP
|
||||||
.B verbosity \fInumber
|
.B verbosity \fInumber
|
||||||
Change verbosity value for logging. Same values as \fBverbosity\fR keyword in
|
Change verbosity value for logging. Same values as \fBverbosity\fR keyword in
|
||||||
\fIunbound.conf\fR(5). This new setting lasts until the server is issued
|
\fIunbound.conf\fR(5). This new setting lasts until the server is issued
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,12 @@ usage(void)
|
||||||
printf(" stop stops the server\n");
|
printf(" stop stops the server\n");
|
||||||
printf(" reload reloads the server\n");
|
printf(" reload reloads the server\n");
|
||||||
printf(" (this flushes data, stats, requestlist)\n");
|
printf(" (this flushes data, stats, requestlist)\n");
|
||||||
printf(" reload +keep-cache ditto but keep RRset and message cache\n");
|
printf(" reload_keep_cache reloads the server but tries to\n");
|
||||||
|
printf(" keep the RRset and message cache\n");
|
||||||
|
printf(" if (re)configuration allows for it.\n");
|
||||||
|
printf(" That means the caches sizes and\n");
|
||||||
|
printf(" the number of threads must not\n");
|
||||||
|
printf(" change between reloads.\n");
|
||||||
printf(" stats print statistics\n");
|
printf(" stats print statistics\n");
|
||||||
printf(" stats_noreset peek at statistics\n");
|
printf(" stats_noreset peek at statistics\n");
|
||||||
#ifdef HAVE_SHMGET
|
#ifdef HAVE_SHMGET
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
server:
|
server:
|
||||||
verbosity: 2
|
verbosity: 2
|
||||||
# num-threads: 1
|
num-threads: 1
|
||||||
interface: 127.0.0.1
|
interface: 127.0.0.1
|
||||||
port: @PORT@
|
port: @PORT@
|
||||||
use-syslog: no
|
use-syslog: no
|
||||||
|
|
@ -9,6 +9,10 @@ server:
|
||||||
chroot: ""
|
chroot: ""
|
||||||
username: ""
|
username: ""
|
||||||
do-not-query-localhost: no
|
do-not-query-localhost: no
|
||||||
|
access-control: 127.0.0.1 allow_snoop
|
||||||
|
msg-cache-size: 4m
|
||||||
|
rrset-cache-size: 4m
|
||||||
|
minimal-responses: yes
|
||||||
remote-control:
|
remote-control:
|
||||||
control-enable: yes
|
control-enable: yes
|
||||||
control-interface: 127.0.0.1
|
control-interface: 127.0.0.1
|
||||||
|
|
@ -21,4 +25,3 @@ remote-control:
|
||||||
forward-zone:
|
forward-zone:
|
||||||
name: "."
|
name: "."
|
||||||
forward-addr: "127.0.0.1@@TOPORT@"
|
forward-addr: "127.0.0.1@@TOPORT@"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,364 +5,317 @@
|
||||||
[ -f .tpkg.var.test ] && source .tpkg.var.test
|
[ -f .tpkg.var.test ] && source .tpkg.var.test
|
||||||
|
|
||||||
PRE="../.."
|
PRE="../.."
|
||||||
|
. ../common.sh
|
||||||
|
|
||||||
# exit value is 1 on usage
|
# End the test
|
||||||
$PRE/unbound-control -h
|
# $1: exit value
|
||||||
if test $? -ne 1; then
|
end () {
|
||||||
echo "wrong exit value for usage."
|
echo "> cat logfiles"
|
||||||
exit 1
|
cat fwd.log
|
||||||
else
|
cat unbound.log
|
||||||
echo "exit value for usage: OK"
|
exit $1
|
||||||
fi
|
}
|
||||||
|
|
||||||
|
# Expect a given exit value of the previous command
|
||||||
|
# $1: the expected exit value
|
||||||
|
# $2: optional text to print when failing
|
||||||
|
expect_exit_value () {
|
||||||
|
if test $? -ne $1; then
|
||||||
|
if test -z "$2"; then
|
||||||
|
if test $1 -eq 1; then
|
||||||
|
msg="on error"
|
||||||
|
else
|
||||||
|
msg="after success"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
msg="$2"
|
||||||
|
fi
|
||||||
|
echo "wrong exit value $msg"
|
||||||
|
end 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Helper function for quering
|
||||||
|
# $@: at least the domain name to query and optional dig arguments
|
||||||
|
query () {
|
||||||
|
echo "> dig $@"
|
||||||
|
dig @127.0.0.1 -p $UNBOUND_PORT $@ | tee outfile
|
||||||
|
}
|
||||||
|
|
||||||
|
# Expect something in the answer
|
||||||
|
# $1: expected regular expression
|
||||||
|
expect_answer () {
|
||||||
|
echo "> check answer for \"$1\""
|
||||||
|
if grep "$1" outfile; then
|
||||||
|
echo "OK"
|
||||||
|
else
|
||||||
|
echo "Not OK"
|
||||||
|
end 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fail the test for unexpected answers
|
||||||
|
# $1: unexpected regular expression
|
||||||
|
fail_answer () {
|
||||||
|
echo "> \"$1\" should not be in answer"
|
||||||
|
if grep "$1" outfile; then
|
||||||
|
echo "Not OK"
|
||||||
|
end 1
|
||||||
|
else
|
||||||
|
echo "OK"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Issue an unbound-control command
|
||||||
|
# $@: command arguments
|
||||||
|
control_command () {
|
||||||
|
echo "$PRE/unbound-control $@"
|
||||||
|
$PRE/unbound-control $@ > outfile
|
||||||
|
}
|
||||||
|
|
||||||
|
# Dump the cache contents
|
||||||
|
# $@: optional options to unbound-control
|
||||||
|
cache_dump () {
|
||||||
|
echo "$PRE/unbound-control $@ dump_cache > cache.dump"
|
||||||
|
$PRE/unbound-control $@ dump_cache > cache.dump
|
||||||
|
}
|
||||||
|
|
||||||
|
# Load cache contents
|
||||||
|
# $@: optional options to unbound-control
|
||||||
|
cache_load () {
|
||||||
|
echo "$PRE/unbound-control $@ load_cache < cache.dump"
|
||||||
|
$PRE/unbound-control $@ load_cache < cache.dump
|
||||||
|
}
|
||||||
|
|
||||||
|
# Expect an entry in the cache dump
|
||||||
|
# $1: expected regular expression
|
||||||
|
expect_in_cache_dump () {
|
||||||
|
echo "> check cache dump for \"$1\""
|
||||||
|
if grep "$1" cache.dump; then
|
||||||
|
echo "OK cache dump"
|
||||||
|
else
|
||||||
|
echo "Not OK cache dump"
|
||||||
|
end 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Fail the test for unexpected entry in the cache dump
|
||||||
|
# $1: unexpected regular expression
|
||||||
|
fail_in_cache_dump () {
|
||||||
|
echo "> \"$1\" should not be in cache dump"
|
||||||
|
if grep "$1" cache.dump; then
|
||||||
|
echo "Not OK cache dump"
|
||||||
|
end 1
|
||||||
|
else
|
||||||
|
echo "OK cache dump"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# start the test
|
||||||
|
cp ub.conf main.conf
|
||||||
|
|
||||||
|
teststep "exit value is 1 on usage"
|
||||||
|
control_command -h
|
||||||
|
expect_exit_value 1 "for usage"
|
||||||
|
|
||||||
# use lock-verify if possible
|
# use lock-verify if possible
|
||||||
|
|
||||||
# test if the server is up.
|
teststep "test if the server is up"
|
||||||
echo "> dig www.example.com."
|
query www.example.com.
|
||||||
dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile
|
expect_answer "10.20.30.40"
|
||||||
echo "> check answer"
|
|
||||||
if grep "10.20.30.40" outfile; then
|
|
||||||
echo "OK"
|
|
||||||
else
|
|
||||||
echo "> cat logfiles"
|
|
||||||
cat fwd.log
|
|
||||||
cat unbound.log
|
|
||||||
echo "Not OK"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# exit value is 1 when a bad command is given.
|
teststep "exit value is 1 when a bad command is given"
|
||||||
echo "$PRE/unbound-control -c ub.conf blablargh"
|
control_command -c ub.conf blablargh
|
||||||
$PRE/unbound-control -c ub.conf blablargh
|
expect_exit_value 1
|
||||||
if test $? -ne 1; then
|
|
||||||
echo "wrong exit value on error."
|
|
||||||
echo "> cat logfiles"
|
|
||||||
cat fwd.log
|
|
||||||
cat unbound.lo
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "correct exit value on error"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# reload the server. test if the server came up by putting a new
|
# reload the server. test if the server came up by putting a new
|
||||||
# local-data element in the server.
|
# local-data element in the server.
|
||||||
|
teststep "reload the server"
|
||||||
echo "server: local-data: 'afterreload. IN A 5.6.7.8'" >> ub.conf
|
echo "server: local-data: 'afterreload. IN A 5.6.7.8'" >> ub.conf
|
||||||
echo "$PRE/unbound-control -c ub.conf reload"
|
control_command -c ub.conf reload
|
||||||
$PRE/unbound-control -c ub.conf reload
|
expect_exit_value 0
|
||||||
if test $? -ne 0; then
|
query afterreload.
|
||||||
echo "wrong exit value after success"
|
expect_answer "5.6.7.8"
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "> dig afterreload."
|
teststep "must have had at least 1 query since reload"
|
||||||
dig @127.0.0.1 -p $UNBOUND_PORT afterreload. | tee outfile
|
control_command -c ub.conf stats
|
||||||
echo "> check answer"
|
expect_exit_value 0
|
||||||
if grep "5.6.7.8" outfile; then
|
expect_answer "^total.num.queries=[1-9][0-9]*$"
|
||||||
echo "OK"
|
|
||||||
else
|
|
||||||
echo "> cat logfiles"
|
|
||||||
cat fwd.log
|
|
||||||
cat unbound.log
|
|
||||||
echo "Not OK"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# must have had queries now. 1 since reload.
|
teststep "check verbosity"
|
||||||
echo "$PRE/unbound-control -c ub.conf stats"
|
control_command -c ub.conf verbosity 2
|
||||||
$PRE/unbound-control -c ub.conf stats > tmp.$$
|
expect_exit_value 0
|
||||||
if test $? -ne 0; then
|
|
||||||
echo "wrong exit value after success"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if grep "^total.num.queries=[1-9][0-9]*$" tmp.$$; then
|
|
||||||
echo "OK"
|
|
||||||
else
|
|
||||||
echo "bad stats"
|
|
||||||
cat tmp.$$
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# verbosity
|
teststep "check syntax error in parse"
|
||||||
echo "$PRE/unbound-control -c ub.conf verbosity 2"
|
control_command -c ub.conf verbosity jkdf
|
||||||
$PRE/unbound-control -c ub.conf verbosity 2
|
expect_exit_value 1
|
||||||
if test $? -ne 0; then
|
|
||||||
echo "wrong exit value after success"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check syntax error in parse
|
teststep "check bad credentials"
|
||||||
echo "$PRE/unbound-control -c ub.conf verbosity jkdf"
|
|
||||||
$PRE/unbound-control -c ub.conf verbosity jkdf
|
|
||||||
if test $? -ne 1; then
|
|
||||||
echo "wrong exit value after failure"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check bad credentials
|
|
||||||
cp ub.conf bad.conf
|
cp ub.conf bad.conf
|
||||||
echo "remote-control:" >> bad.conf
|
cat conf.bad_credentials >> bad.conf
|
||||||
echo " server-key-file: bad_server.key" >> bad.conf
|
control_command -c bad.conf verbosity 2
|
||||||
echo " server-cert-file: bad_server.pem" >> bad.conf
|
expect_exit_value 1
|
||||||
echo " control-key-file: bad_control.key" >> bad.conf
|
|
||||||
echo " control-cert-file: bad_control.pem" >> bad.conf
|
|
||||||
echo "$PRE/unbound-control -c bad.conf verbosity 2"
|
|
||||||
$PRE/unbound-control -c bad.conf verbosity 2
|
|
||||||
if test $? -ne 1; then
|
|
||||||
echo "wrong exit value after failure"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check spoofedclient credentials
|
teststep "check spoofed client credentials"
|
||||||
rm -f bad.conf
|
rm -f bad.conf
|
||||||
cp ub.conf bad.conf
|
cp ub.conf bad.conf
|
||||||
echo "remote-control:" >> bad.conf
|
cat conf.spoofed_credentials >> bad.conf
|
||||||
echo " server-key-file: unbound_server.key" >> bad.conf
|
control_command -c bad.conf verbosity 2
|
||||||
echo " server-cert-file: unbound_server.pem" >> bad.conf
|
expect_exit_value 1
|
||||||
echo " control-key-file: bad_control.key" >> bad.conf
|
|
||||||
echo " control-cert-file: bad_control.pem" >> bad.conf
|
|
||||||
echo "$PRE/unbound-control -c bad.conf verbosity 2"
|
|
||||||
$PRE/unbound-control -c bad.conf verbosity 2
|
|
||||||
if test $? -ne 1; then
|
|
||||||
echo "wrong exit value after failure"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# create a new local zone
|
teststep "create a new local zone"
|
||||||
echo "> test of local zone"
|
control_command -c ub.conf local_zone example.net static
|
||||||
echo "$PRE/unbound-control -c ub.conf local_zone example.net static"
|
expect_exit_value 0
|
||||||
$PRE/unbound-control -c ub.conf local_zone example.net static
|
control_command -c ub.conf local_data www.example.net A 192.0.2.1
|
||||||
if test $? -ne 0; then
|
expect_exit_value 0
|
||||||
echo "wrong exit value after success"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "$PRE/unbound-control -c ub.conf local_data www.example.net A 192.0.2.1"
|
|
||||||
$PRE/unbound-control -c ub.conf local_data www.example.net A 192.0.2.1
|
|
||||||
if test $? -ne 0; then
|
|
||||||
echo "wrong exit value after success"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check that www.example.net exists
|
teststep "check that www.example.net exists"
|
||||||
echo "> dig www.example.net."
|
query www.example.net.
|
||||||
dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile
|
expect_answer "192.0.2.1"
|
||||||
echo "> check answer"
|
|
||||||
if grep "192.0.2.1" outfile; then
|
|
||||||
echo "OK"
|
|
||||||
else
|
|
||||||
echo "> cat logfiles"
|
|
||||||
cat fwd.log
|
|
||||||
cat unbound.log
|
|
||||||
echo "Not OK"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check that mail.example.net has nxdomain
|
teststep "check that mail.example.net has nxdomain"
|
||||||
echo "> dig mail.example.net."
|
query mail.example.net.
|
||||||
dig @127.0.0.1 -p $UNBOUND_PORT mail.example.net. | tee outfile
|
expect_answer "NXDOMAIN"
|
||||||
echo "> check answer"
|
|
||||||
if grep "NXDOMAIN" outfile; then
|
|
||||||
echo "OK"
|
|
||||||
else
|
|
||||||
echo "> cat logfiles"
|
|
||||||
cat fwd.log
|
|
||||||
cat unbound.log
|
|
||||||
echo "Not OK"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# remove www.example.net - check it gets nxdomain
|
teststep "remove www.example.net - check it gets nxdomain"
|
||||||
echo "$PRE/unbound-control -c ub.conf local_data_remove www.example.net"
|
control_command -c ub.conf local_data_remove www.example.net
|
||||||
$PRE/unbound-control -c ub.conf local_data_remove www.example.net
|
expect_exit_value 0
|
||||||
if test $? -ne 0; then
|
query www.example.net.
|
||||||
echo "wrong exit value after success"
|
expect_answer "NXDOMAIN"
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "> dig www.example.net."
|
|
||||||
dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile
|
|
||||||
echo "> check answer"
|
|
||||||
if grep "NXDOMAIN" outfile; then
|
|
||||||
echo "OK"
|
|
||||||
else
|
|
||||||
echo "> cat logfiles"
|
|
||||||
cat fwd.log
|
|
||||||
cat unbound.log
|
|
||||||
echo "Not OK"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# remove nonexistent name - check bug#287(segfault) does not happen.
|
teststep "remove nonexistent name - check bug#287(segfault) does not happen"
|
||||||
echo "$PRE/unbound-control -c ub.conf local_data_remove test.example.net"
|
control_command -c ub.conf local_data_remove test.example.net
|
||||||
$PRE/unbound-control -c ub.conf local_data_remove test.example.net
|
|
||||||
# if crash then then we get: error: could not SSL_read from unbound-control
|
# if crash then then we get: error: could not SSL_read from unbound-control
|
||||||
if test $? -ne 0; then
|
expect_exit_value 0
|
||||||
echo "wrong exit value after success"
|
|
||||||
cat unbound.log
|
|
||||||
echo "Not OK"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# remove example.net - check its gone.
|
teststep "remove example.net - check its gone"
|
||||||
echo "$PRE/unbound-control -c ub.conf local_zone_remove example.net"
|
control_command -c ub.conf local_zone_remove example.net
|
||||||
$PRE/unbound-control -c ub.conf local_zone_remove example.net
|
expect_exit_value 0
|
||||||
if test $? -ne 0; then
|
query www.example.net.
|
||||||
echo "wrong exit value after success"
|
expect_answer "SERVFAIL"
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "> dig www.example.net."
|
|
||||||
dig @127.0.0.1 -p $UNBOUND_PORT www.example.net. | tee outfile
|
|
||||||
echo "> check answer"
|
|
||||||
if grep "SERVFAIL" outfile; then
|
|
||||||
echo "OK"
|
|
||||||
else
|
|
||||||
echo "> cat logfiles"
|
|
||||||
cat fwd.log
|
|
||||||
cat unbound.log
|
|
||||||
echo "Not OK"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# dump the cache
|
teststep "dump the cache"
|
||||||
echo "> test cache dump"
|
query www.example.com.
|
||||||
# fillup cache
|
cache_dump -c ub.conf
|
||||||
echo "dig www.example.com"
|
expect_exit_value 0
|
||||||
dig @127.0.0.1 -p $UNBOUND_PORT www.example.com.
|
cat cache.dump
|
||||||
echo "$PRE/unbound-control -c ub.conf dump_cache"
|
expect_in_cache "10.20.30.40"
|
||||||
$PRE/unbound-control -c ub.conf dump_cache > tmp.$$
|
|
||||||
if test $? -ne 0; then
|
|
||||||
echo "wrong exit value after success"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
cat tmp.$$
|
|
||||||
if grep 10.20.30.40 tmp.$$; then
|
|
||||||
echo "OK example.com is in cache dump"
|
|
||||||
else
|
|
||||||
echo "Not OK cache dump"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# test lookup
|
control_command -c ub.conf lookup www.example.com
|
||||||
echo "$PRE/unbound-control -c ub.conf lookup www.example.com"
|
expect_exit_value 0
|
||||||
$PRE/unbound-control -c ub.conf lookup www.example.com
|
|
||||||
if test $? -ne 0; then
|
|
||||||
echo "wrong exit value after success"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
# answer to lookup is meaningless because of use a forwarder, oh well.
|
# answer to lookup is meaningless because of use a forwarder, oh well.
|
||||||
|
|
||||||
# load the cache dump.
|
teststep "load the cache dump"
|
||||||
echo "$PRE/unbound-control -c ub.conf load_cache < tmp.$$"
|
cache_load -c ub.conf
|
||||||
$PRE/unbound-control -c ub.conf load_cache < tmp.$$
|
expect_exit_value 0
|
||||||
if test $? -ne 0; then
|
query www.example.com.
|
||||||
echo "wrong exit value after success"
|
expect_answer "10.20.30.40"
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "> dig www.example.com."
|
|
||||||
dig @127.0.0.1 -p $UNBOUND_PORT www.example.com. | tee outfile
|
|
||||||
echo "> check answer"
|
|
||||||
if grep "10.20.30.40" outfile; then
|
|
||||||
echo "OK"
|
|
||||||
else
|
|
||||||
echo "> cat logfiles"
|
|
||||||
cat fwd.log
|
|
||||||
cat unbound.log
|
|
||||||
echo "Not OK"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# load local-zones from file
|
teststep "load local-zones from file"
|
||||||
echo "$PRE/unbound-control -c ub.conf local_zones < local_zones"
|
control_command -c ub.conf local_zones < local_zones
|
||||||
$PRE/unbound-control -c ub.conf local_zones < local_zones
|
expect_exit_value 0
|
||||||
if test $? -ne 0; then
|
query localzonefromfile
|
||||||
echo "wrong exit value after success"
|
expect_answer "REFUSED"
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "> dig localzonefromfile."
|
|
||||||
dig @127.0.0.1 -p $UNBOUND_PORT localzonefromfile | tee outfile
|
|
||||||
echo "> check answer"
|
|
||||||
if grep "REFUSED" outfile; then
|
|
||||||
echo "OK"
|
|
||||||
else
|
|
||||||
echo "Not OK"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# load local-data from file
|
teststep "load local-data from file"
|
||||||
echo "$PRE/unbound-control -c ub.conf local_datas < local_data"
|
control_command -c ub.conf local_datas < local_data
|
||||||
$PRE/unbound-control -c ub.conf local_datas < local_data
|
expect_exit_value 0
|
||||||
if test $? -ne 0; then
|
query -t txt localdatafromfile
|
||||||
echo "wrong exit value after success"
|
expect_answer "local data from file OK"
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "> dig localdatafromfile."
|
|
||||||
dig @127.0.0.1 -p $UNBOUND_PORT -t txt localdatafromfile | tee outfile
|
|
||||||
echo "> check answer"
|
|
||||||
if grep "local data from file OK" outfile; then
|
|
||||||
echo "OK"
|
|
||||||
else
|
|
||||||
echo "Not OK"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# remove local-zone and local-data from file
|
teststep "remove local-zone and local-data from file"
|
||||||
echo "$PRE/unbound-control -c ub.conf local_zones_remove < local_zones_remove"
|
control_command -c ub.conf local_zones_remove < local_zones_remove
|
||||||
$PRE/unbound-control -c ub.conf local_zones_remove < local_zones_remove
|
expect_exit_value 0
|
||||||
if test $? -ne 0; then
|
control_command -c ub.conf local_datas_remove < local_data_remove
|
||||||
echo "wrong exit value after success"
|
expect_exit_value 0
|
||||||
exit 1
|
control_command -c ub.conf list_local_zones
|
||||||
fi
|
fail_answer "localzonefromfile"
|
||||||
echo "$PRE/unbound-control -c ub.conf local_datas_remove < local_data_remove"
|
fail_answer "local data from file OK"
|
||||||
$PRE/unbound-control -c ub.conf local_datas_remove < local_data_remove
|
expect_answer "otherlocalzone"
|
||||||
if test $? -ne 0; then
|
|
||||||
echo "wrong exit value after success"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "> check zone and data removal list_local_zones"
|
|
||||||
$PRE/unbound-control -c ub.conf list_local_zones | tee outfile
|
|
||||||
if grep "localzonefromfile" outfile; then
|
|
||||||
echo "Not OK"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if grep "local data from file OK" outfile; then
|
|
||||||
echo "Not OK"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if grep "otherlocalzone" outfile; then
|
|
||||||
echo "OK"
|
|
||||||
else
|
|
||||||
echo "Not OK"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# flushing
|
teststep "flushing"
|
||||||
echo "$PRE/unbound-control -c ub.conf flush www.example.net"
|
control_command -c ub.conf flush www.example.net
|
||||||
$PRE/unbound-control -c ub.conf flush www.example.net
|
expect_exit_value 0
|
||||||
if test $? -ne 0; then
|
control_command -c ub.conf flush_type www.example.net TXT
|
||||||
echo "wrong exit value after success"
|
expect_exit_value 0
|
||||||
exit 1
|
control_command -c ub.conf flush_zone example.net
|
||||||
fi
|
expect_exit_value 0
|
||||||
|
|
||||||
echo "$PRE/unbound-control -c ub.conf flush_type www.example.net TXT"
|
teststep "reload the server for a clean state and populate the cache"
|
||||||
$PRE/unbound-control -c ub.conf flush_type www.example.net TXT
|
cp main.conf ub.conf
|
||||||
if test $? -ne 0; then
|
control_command -c ub.conf reload
|
||||||
echo "wrong exit value after success"
|
expect_exit_value 0
|
||||||
exit 1
|
query www.example.com
|
||||||
fi
|
expect_answer "10.20.30.40"
|
||||||
|
|
||||||
echo "$PRE/unbound-control -c ub.conf flush_zone example.net"
|
teststep "reload and check cache dump - should be empty"
|
||||||
$PRE/unbound-control -c ub.conf flush_zone example.net
|
control_command -c ub.conf reload
|
||||||
if test $? -ne 0; then
|
expect_exit_value 0
|
||||||
echo "wrong exit value after success"
|
cache_dump -c ub.conf
|
||||||
exit 1
|
expect_exit_value 0
|
||||||
fi
|
fail_in_cache_dump "www.example.com.*10.20.30.40"
|
||||||
|
fail_in_cache_dump "msg www.example.com. IN A"
|
||||||
|
|
||||||
# now stop the server
|
query www.example.com
|
||||||
echo "$PRE/unbound-control -c ub.conf stop"
|
expect_answer "10.20.30.40"
|
||||||
$PRE/unbound-control -c ub.conf stop
|
|
||||||
if test $? -ne 0; then
|
teststep "reload_keep_cache and check cache dump - should not be empty"
|
||||||
echo "wrong exit value after success"
|
control_command -c ub.conf reload_keep_cache
|
||||||
exit 1
|
expect_exit_value 0
|
||||||
fi
|
cache_dump -c ub.conf
|
||||||
# see if the server has really exited.
|
expect_exit_value 0
|
||||||
|
expect_in_cache_dump "www.example.com.*10.20.30.40"
|
||||||
|
expect_in_cache_dump "msg www.example.com. IN A"
|
||||||
|
query www.example.com +nordflag
|
||||||
|
expect_answer "10.20.30.40"
|
||||||
|
|
||||||
|
teststep "change msg-cache-size and reload_keep_cache - should be empty"
|
||||||
|
echo "server: msg-cache-size: 2m" >> ub.conf
|
||||||
|
control_command -c ub.conf reload_keep_cache
|
||||||
|
expect_exit_value 0
|
||||||
|
cache_dump -c ub.conf
|
||||||
|
expect_exit_value 0
|
||||||
|
fail_in_cache_dump "www.example.com.*10.20.30.40"
|
||||||
|
fail_in_cache_dump "msg www.example.com. IN A"
|
||||||
|
query www.example.com
|
||||||
|
expect_answer "10.20.30.40"
|
||||||
|
|
||||||
|
teststep "change rrset-cache-size and reload_keep_cache - should be empty"
|
||||||
|
echo "server: rrset-cache-size: 2m" >> ub.conf
|
||||||
|
control_command -c ub.conf reload_keep_cache
|
||||||
|
expect_exit_value 0
|
||||||
|
cache_dump -c ub.conf
|
||||||
|
expect_exit_value 0
|
||||||
|
fail_in_cache_dump "www.example.com.*10.20.30.40"
|
||||||
|
fail_in_cache_dump "msg www.example.com. IN A"
|
||||||
|
query www.example.com
|
||||||
|
expect_answer "10.20.30.40"
|
||||||
|
|
||||||
|
teststep "change num-threads and reload_keep_cache - should be empty"
|
||||||
|
echo "server: num-threads: 2" >> ub.conf
|
||||||
|
control_command -c ub.conf reload_keep_cache
|
||||||
|
expect_exit_value 0
|
||||||
|
cache_dump -c ub.conf
|
||||||
|
expect_exit_value 0
|
||||||
|
fail_in_cache_dump "www.example.com.*10.20.30.40"
|
||||||
|
fail_in_cache_dump "msg www.example.com. IN A"
|
||||||
|
query www.example.com
|
||||||
|
expect_answer "10.20.30.40"
|
||||||
|
|
||||||
|
teststep "change minimal-responses and reload_keep_cache - should not be empty"
|
||||||
|
echo "server: minimal-responses: no" >> ub.conf
|
||||||
|
control_command -c ub.conf reload_keep_cache
|
||||||
|
expect_exit_value 0
|
||||||
|
cache_dump -c ub.conf
|
||||||
|
expect_exit_value 0
|
||||||
|
expect_in_cache_dump "www.example.com.*10.20.30.40"
|
||||||
|
expect_in_cache_dump "msg www.example.com. IN A"
|
||||||
|
|
||||||
|
teststep "now stop the server"
|
||||||
|
control_command -c ub.conf stop
|
||||||
|
expect_exit_value 0
|
||||||
|
|
||||||
|
teststep "see if the server has really exited"
|
||||||
TRY_MAX=20
|
TRY_MAX=20
|
||||||
for (( try=0 ; try <= $TRY_MAX ; try++ )) ; do
|
for (( try=0 ; try <= $TRY_MAX ; try++ )) ; do
|
||||||
if kill -0 $UNBOUND_PID 2>&1 | tee tmp.$$; then
|
if kill -0 $UNBOUND_PID 2>&1 | tee tmp.$$; then
|
||||||
|
|
@ -379,11 +332,8 @@ for (( try=0 ; try <= $TRY_MAX ; try++ )) ; do
|
||||||
done
|
done
|
||||||
if kill -0 $UNBOUND_PID; then
|
if kill -0 $UNBOUND_PID; then
|
||||||
echo "still up!"
|
echo "still up!"
|
||||||
echo "> cat logfiles"
|
|
||||||
cat fwd.log
|
|
||||||
cat unbound.log
|
|
||||||
echo "not stopped, failure"
|
echo "not stopped, failure"
|
||||||
exit 1
|
end 1
|
||||||
else
|
else
|
||||||
echo "stopped OK"
|
echo "stopped OK"
|
||||||
|
|
||||||
|
|
@ -392,15 +342,9 @@ else
|
||||||
echo "lock-verify test worked."
|
echo "lock-verify test worked."
|
||||||
else
|
else
|
||||||
echo "lock-verify test failed."
|
echo "lock-verify test failed."
|
||||||
cat fwd.log
|
end 1
|
||||||
cat unbound.log
|
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "> cat logfiles"
|
end 0
|
||||||
cat fwd.log
|
|
||||||
cat unbound.log
|
|
||||||
echo "> OK"
|
|
||||||
exit 0
|
|
||||||
|
|
|
||||||
5
testdata/09-unbound-control.tdir/conf.bad_credentials
vendored
Normal file
5
testdata/09-unbound-control.tdir/conf.bad_credentials
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
remote-control:
|
||||||
|
server-key-file: bad_server.key
|
||||||
|
server-cert-file: bad_server.pem
|
||||||
|
control-key-file: bad_control.key
|
||||||
|
control-cert-file: bad_control.pem
|
||||||
5
testdata/09-unbound-control.tdir/conf.spoofed_credentials
vendored
Normal file
5
testdata/09-unbound-control.tdir/conf.spoofed_credentials
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
remote-control:
|
||||||
|
server-key-file: unbound_server.key
|
||||||
|
server-cert-file: unbound_server.pem
|
||||||
|
control-key-file: bad_control.key
|
||||||
|
control-cert-file: bad_control.pem
|
||||||
6
testdata/common.sh
vendored
6
testdata/common.sh
vendored
|
|
@ -29,6 +29,7 @@
|
||||||
# wait_server_up_or_fail: wait for server to come up or print a failure string
|
# wait_server_up_or_fail: wait for server to come up or print a failure string
|
||||||
# skip_test x : print message and skip test (must be called in .pre)
|
# skip_test x : print message and skip test (must be called in .pre)
|
||||||
# kill_pid : kill a server, make sure and wait for it to go down.
|
# kill_pid : kill a server, make sure and wait for it to go down.
|
||||||
|
# teststep : print the current test step in the output
|
||||||
|
|
||||||
|
|
||||||
# print error and exit
|
# print error and exit
|
||||||
|
|
@ -272,3 +273,8 @@ set_doxygen_path () {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Print the current test step in the output
|
||||||
|
teststep () {
|
||||||
|
echo
|
||||||
|
echo "STEP [ $1 ]"
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue