mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-22 07:41:16 -05:00
122 lines
3.1 KiB
Text
122 lines
3.1 KiB
Text
|
|
# #-- redis_reconnect_interval.test --#
|
||
|
|
# source the master var file when it's there
|
||
|
|
[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
|
||
|
|
# use .tpkg.var.test for in test variable passing
|
||
|
|
[ -f .tpkg.var.test ] && source .tpkg.var.test
|
||
|
|
|
||
|
|
PRE="../.."
|
||
|
|
. ../common.sh
|
||
|
|
# do the test
|
||
|
|
|
||
|
|
# Check number of keys in the db
|
||
|
|
# $1: socket to connect to
|
||
|
|
# $2: expected number of keys
|
||
|
|
redis_cli_check_keys () {
|
||
|
|
echo "> redis-cli connecting to $1 to check number of keys; expecting $2"
|
||
|
|
keys=$(redis-cli --no-raw -s $1 keys "*" | grep -vF empty | wc -l)
|
||
|
|
if test $keys -ne $2
|
||
|
|
then
|
||
|
|
echo "Expected $2 keys, got $keys"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
echo "OK"
|
||
|
|
}
|
||
|
|
|
||
|
|
# Query and check the expected result
|
||
|
|
# $1: query
|
||
|
|
# $2: expected answer
|
||
|
|
expect_answer () {
|
||
|
|
echo "> dig @127.0.0.1 -p $UNBOUND_PORT $1"
|
||
|
|
dig @127.0.0.1 -p $UNBOUND_PORT $1 > tmp.answer
|
||
|
|
if ! grep -F $2 tmp.answer
|
||
|
|
then
|
||
|
|
echo "Expected $2 in the answer, got:"
|
||
|
|
cat tmp.answer
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
echo "OK"
|
||
|
|
}
|
||
|
|
|
||
|
|
# Start test
|
||
|
|
|
||
|
|
# check Redis server has no keys
|
||
|
|
redis_cli_check_keys $REDIS_SOCKET 0
|
||
|
|
|
||
|
|
# check Redis replica server has no keys
|
||
|
|
redis_cli_check_keys $REDIS_REPLICA_SOCKET 0
|
||
|
|
|
||
|
|
# query and check answer
|
||
|
|
expect_answer redis.com 1.1.1.1
|
||
|
|
|
||
|
|
# check Redis server has 1 key
|
||
|
|
redis_cli_check_keys $REDIS_SOCKET 1
|
||
|
|
|
||
|
|
# check Redis replica server has no keys
|
||
|
|
redis_cli_check_keys $REDIS_REPLICA_SOCKET 0
|
||
|
|
|
||
|
|
# change auth zone and reload
|
||
|
|
cp after.zone redis.zone
|
||
|
|
echo "$PRE/unbound-control -c ub.conf reload"
|
||
|
|
$PRE/unbound-control -c ub.conf reload
|
||
|
|
if test $? -ne 0; then
|
||
|
|
echo "wrong exit value after success"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# query and check answer
|
||
|
|
# we are writing to server but reading from replica; which is not actually
|
||
|
|
# replicating so the new answer will come through while overwriting the record
|
||
|
|
# in the server.
|
||
|
|
expect_answer redis.com 2.2.2.2
|
||
|
|
|
||
|
|
# check Redis server has 1 key
|
||
|
|
redis_cli_check_keys $REDIS_SOCKET 1
|
||
|
|
|
||
|
|
# check Redis replica server has no keys
|
||
|
|
redis_cli_check_keys $REDIS_REPLICA_SOCKET 0
|
||
|
|
|
||
|
|
echo "> OK"
|
||
|
|
|
||
|
|
# take down the redis server and observe reconnect attempts.
|
||
|
|
# first the replica that it tries to read from.
|
||
|
|
kill_pid $REDIS_REPLICA_PID
|
||
|
|
$PRE/unbound-control -c ub.conf reload
|
||
|
|
expect_answer redis.com 2.2.2.2
|
||
|
|
# some more queries to exceed the limit on reconnects.
|
||
|
|
expect_answer d1.redis.com NXDOMAIN
|
||
|
|
expect_answer d2.redis.com NXDOMAIN
|
||
|
|
expect_answer d3.redis.com NXDOMAIN
|
||
|
|
expect_answer d4.redis.com NXDOMAIN
|
||
|
|
expect_answer d5.redis.com NXDOMAIN
|
||
|
|
# it has entered the wait period
|
||
|
|
sleep 2
|
||
|
|
expect_answer d6.redis.com NXDOMAIN
|
||
|
|
|
||
|
|
kill_pid $REDIS_PID
|
||
|
|
$PRE/unbound-control -c ub.conf reload
|
||
|
|
expect_answer redis.com 2.2.2.2
|
||
|
|
expect_answer d1.redis.com NXDOMAIN
|
||
|
|
expect_answer d2.redis.com NXDOMAIN
|
||
|
|
expect_answer d3.redis.com NXDOMAIN
|
||
|
|
expect_answer d4.redis.com NXDOMAIN
|
||
|
|
expect_answer d5.redis.com NXDOMAIN
|
||
|
|
# it has entered the wait period
|
||
|
|
sleep 2
|
||
|
|
expect_answer d6.redis.com NXDOMAIN
|
||
|
|
|
||
|
|
# bring up the redis server again.
|
||
|
|
redis-server server.conf &
|
||
|
|
REDIS_PID=$!
|
||
|
|
echo "REDIS_PID=$REDIS_PID" >> .tpkg.var.test
|
||
|
|
redis-server replica.conf &
|
||
|
|
REDIS_REPLICA_PID=$!
|
||
|
|
echo "REDIS_REPLICA_PID=$REDIS_REPLICA_PID" >> .tpkg.var.test
|
||
|
|
|
||
|
|
expect_answer d7.redis.com NXDOMAIN
|
||
|
|
expect_answer d8.redis.com NXDOMAIN
|
||
|
|
sleep 2
|
||
|
|
expect_answer d9.redis.com NXDOMAIN
|
||
|
|
expect_answer d10.redis.com NXDOMAIN
|
||
|
|
|
||
|
|
exit 0
|