diff options
Diffstat (limited to 'contrib/unbound/testdata/redis_reconnect_interval.tdir/redis_reconnect_interval.test')
-rw-r--r-- | contrib/unbound/testdata/redis_reconnect_interval.tdir/redis_reconnect_interval.test | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/contrib/unbound/testdata/redis_reconnect_interval.tdir/redis_reconnect_interval.test b/contrib/unbound/testdata/redis_reconnect_interval.tdir/redis_reconnect_interval.test new file mode 100644 index 000000000000..ac15f50b06a9 --- /dev/null +++ b/contrib/unbound/testdata/redis_reconnect_interval.tdir/redis_reconnect_interval.test @@ -0,0 +1,121 @@ +# #-- 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 |