1# #-- redis_reconnect_interval.test --# 2# source the master var file when it's there 3[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master 4# use .tpkg.var.test for in test variable passing 5[ -f .tpkg.var.test ] && source .tpkg.var.test 6 7PRE="../.." 8. ../common.sh 9# do the test 10 11# Check number of keys in the db 12# $1: socket to connect to 13# $2: expected number of keys 14redis_cli_check_keys () { 15 echo "> redis-cli connecting to $1 to check number of keys; expecting $2" 16 keys=$(redis-cli --no-raw -s $1 keys "*" | grep -vF empty | wc -l) 17 if test $keys -ne $2 18 then 19 echo "Expected $2 keys, got $keys" 20 exit 1 21 fi 22 echo "OK" 23} 24 25# Query and check the expected result 26# $1: query 27# $2: expected answer 28expect_answer () { 29 echo "> dig @127.0.0.1 -p $UNBOUND_PORT $1" 30 dig @127.0.0.1 -p $UNBOUND_PORT $1 > tmp.answer 31 if ! grep -F $2 tmp.answer 32 then 33 echo "Expected $2 in the answer, got:" 34 cat tmp.answer 35 exit 1 36 fi 37 echo "OK" 38} 39 40# Start test 41 42# check Redis server has no keys 43redis_cli_check_keys $REDIS_SOCKET 0 44 45# check Redis replica server has no keys 46redis_cli_check_keys $REDIS_REPLICA_SOCKET 0 47 48# query and check answer 49expect_answer redis.com 1.1.1.1 50 51# check Redis server has 1 key 52redis_cli_check_keys $REDIS_SOCKET 1 53 54# check Redis replica server has no keys 55redis_cli_check_keys $REDIS_REPLICA_SOCKET 0 56 57# change auth zone and reload 58cp after.zone redis.zone 59echo "$PRE/unbound-control -c ub.conf reload" 60$PRE/unbound-control -c ub.conf reload 61if test $? -ne 0; then 62 echo "wrong exit value after success" 63 exit 1 64fi 65 66# query and check answer 67# we are writing to server but reading from replica; which is not actually 68# replicating so the new answer will come through while overwriting the record 69# in the server. 70expect_answer redis.com 2.2.2.2 71 72# check Redis server has 1 key 73redis_cli_check_keys $REDIS_SOCKET 1 74 75# check Redis replica server has no keys 76redis_cli_check_keys $REDIS_REPLICA_SOCKET 0 77 78echo "> OK" 79 80# take down the redis server and observe reconnect attempts. 81# first the replica that it tries to read from. 82kill_pid $REDIS_REPLICA_PID 83$PRE/unbound-control -c ub.conf reload 84expect_answer redis.com 2.2.2.2 85# some more queries to exceed the limit on reconnects. 86expect_answer d1.redis.com NXDOMAIN 87expect_answer d2.redis.com NXDOMAIN 88expect_answer d3.redis.com NXDOMAIN 89expect_answer d4.redis.com NXDOMAIN 90expect_answer d5.redis.com NXDOMAIN 91# it has entered the wait period 92sleep 2 93expect_answer d6.redis.com NXDOMAIN 94 95kill_pid $REDIS_PID 96$PRE/unbound-control -c ub.conf reload 97expect_answer redis.com 2.2.2.2 98expect_answer d1.redis.com NXDOMAIN 99expect_answer d2.redis.com NXDOMAIN 100expect_answer d3.redis.com NXDOMAIN 101expect_answer d4.redis.com NXDOMAIN 102expect_answer d5.redis.com NXDOMAIN 103# it has entered the wait period 104sleep 2 105expect_answer d6.redis.com NXDOMAIN 106 107# bring up the redis server again. 108redis-server server.conf & 109REDIS_PID=$! 110echo "REDIS_PID=$REDIS_PID" >> .tpkg.var.test 111redis-server replica.conf & 112REDIS_REPLICA_PID=$! 113echo "REDIS_REPLICA_PID=$REDIS_REPLICA_PID" >> .tpkg.var.test 114 115expect_answer d7.redis.com NXDOMAIN 116expect_answer d8.redis.com NXDOMAIN 117sleep 2 118expect_answer d9.redis.com NXDOMAIN 119expect_answer d10.redis.com NXDOMAIN 120 121exit 0 122