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