xref: /freebsd/contrib/unbound/testdata/redis_reconnect_interval.tdir/redis_reconnect_interval.test (revision b2efd602aea8b3cbc3fb215b9611946d04fceb10)
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