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