xref: /netbsd-src/external/bsd/unbound/dist/testdata/tcp_reuse.tdir/tcp_reuse.test (revision d0eba39ba71d0ccd0f91ae4c5ff83442e84710bf)
1*d0eba39bSchristos# #-- tcp_reuse.test --#
2*d0eba39bSchristos# source the master var file when it's there
3*d0eba39bSchristos[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
4*d0eba39bSchristos# use .tpkg.var.test for in test variable passing
5*d0eba39bSchristos[ -f .tpkg.var.test ] && source .tpkg.var.test
6*d0eba39bSchristos
7*d0eba39bSchristosPRE="../.."
8*d0eba39bSchristos. ../common.sh
9*d0eba39bSchristos
10*d0eba39bSchristosget_make
11*d0eba39bSchristos(cd $PRE; $MAKE streamtcp)
12*d0eba39bSchristos
13*d0eba39bSchristosecho "> query www1.example.com."
14*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www1.example.com. A IN >outfile 2>&1
15*d0eba39bSchristoscat outfile
16*d0eba39bSchristosif test "$?" -ne 0; then
17*d0eba39bSchristos	echo "exit status not OK"
18*d0eba39bSchristos	echo "> cat logfiles"
19*d0eba39bSchristos	cat outfile
20*d0eba39bSchristos	cat unbound2.log
21*d0eba39bSchristos	cat unbound.log
22*d0eba39bSchristos	echo "Not OK"
23*d0eba39bSchristos	exit 1
24*d0eba39bSchristosfi
25*d0eba39bSchristosif grep "www1.example.com" outfile | grep "10.20.30.41"; then
26*d0eba39bSchristos	echo "content OK"
27*d0eba39bSchristoselse
28*d0eba39bSchristos	echo "result contents not OK, for www1.example.com"
29*d0eba39bSchristos	echo "> cat logfiles"
30*d0eba39bSchristos	cat outfile
31*d0eba39bSchristos	cat unbound2.log
32*d0eba39bSchristos	cat unbound.log
33*d0eba39bSchristos	echo "result contents not OK, for www1.example.com"
34*d0eba39bSchristos	exit 1
35*d0eba39bSchristosfi
36*d0eba39bSchristosecho "OK"
37*d0eba39bSchristosecho ""
38*d0eba39bSchristos
39*d0eba39bSchristos# this should be reused on the same tcp stream:
40*d0eba39bSchristosecho "> query www2.example.com."
41*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www2.example.com. A IN >outfile 2>&1
42*d0eba39bSchristoscat outfile
43*d0eba39bSchristosif test "$?" -ne 0; then
44*d0eba39bSchristos	echo "exit status not OK"
45*d0eba39bSchristos	echo "> cat logfiles"
46*d0eba39bSchristos	cat outfile
47*d0eba39bSchristos	cat unbound2.log
48*d0eba39bSchristos	cat unbound.log
49*d0eba39bSchristos	echo "Not OK"
50*d0eba39bSchristos	exit 1
51*d0eba39bSchristosfi
52*d0eba39bSchristosif grep "www2.example.com" outfile | grep "10.20.30.42"; then
53*d0eba39bSchristos	echo "content OK"
54*d0eba39bSchristoselse
55*d0eba39bSchristos	echo "result contents not OK, for www2.example.com"
56*d0eba39bSchristos	echo "> cat logfiles"
57*d0eba39bSchristos	cat outfile
58*d0eba39bSchristos	cat unbound2.log
59*d0eba39bSchristos	cat unbound.log
60*d0eba39bSchristos	echo "result contents not OK, for www2.example.com"
61*d0eba39bSchristos	exit 1
62*d0eba39bSchristosfi
63*d0eba39bSchristos
64*d0eba39bSchristosecho "> query refuse.net."
65*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT refuse.net. A IN >outfile 2>&1
66*d0eba39bSchristoscat outfile
67*d0eba39bSchristosif test "$?" -ne 0; then
68*d0eba39bSchristos	echo "exit status not OK"
69*d0eba39bSchristos	echo "> cat logfiles"
70*d0eba39bSchristos	cat outfile
71*d0eba39bSchristos	cat unbound2.log
72*d0eba39bSchristos	cat unbound.log
73*d0eba39bSchristos	echo "Not OK"
74*d0eba39bSchristos	exit 1
75*d0eba39bSchristosfi
76*d0eba39bSchristosif grep "rcode: SERVFAIL" outfile; then
77*d0eba39bSchristos	echo "content OK"
78*d0eba39bSchristoselse
79*d0eba39bSchristos	echo "result contents not OK, for refuse.net"
80*d0eba39bSchristos	echo "> cat logfiles"
81*d0eba39bSchristos	cat outfile
82*d0eba39bSchristos	cat unbound2.log
83*d0eba39bSchristos	cat unbound.log
84*d0eba39bSchristos	echo "result contents not OK, for refuse.net"
85*d0eba39bSchristos	exit 1
86*d0eba39bSchristosfi
87*d0eba39bSchristos
88*d0eba39bSchristosecho "> query www3.example.com."
89*d0eba39bSchristosecho "> query www4.example.com."
90*d0eba39bSchristosecho "> query www5.example.com."
91*d0eba39bSchristosecho "> query www6.example.com."
92*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www3.example.com. A IN >outfile3 2>&1 &
93*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www4.example.com. A IN >outfile4 2>&1 &
94*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www5.example.com. A IN >outfile5 2>&1 &
95*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT www6.example.com. A IN >outfile6 2>&1 &
96*d0eba39bSchristoswait
97*d0eba39bSchristosif test "$?" -ne 0; then
98*d0eba39bSchristos	echo "exit status not OK"
99*d0eba39bSchristos	echo "> cat logfiles"
100*d0eba39bSchristos	cat outfile3
101*d0eba39bSchristos	cat outfile4
102*d0eba39bSchristos	cat outfile5
103*d0eba39bSchristos	cat outfile6
104*d0eba39bSchristos	cat unbound2.log
105*d0eba39bSchristos	cat unbound.log
106*d0eba39bSchristos	echo "Not OK"
107*d0eba39bSchristos	exit 1
108*d0eba39bSchristosfi
109*d0eba39bSchristosif grep "www3.example.com" outfile3 | grep "10.20.30.43"; then
110*d0eba39bSchristos	echo "content OK"
111*d0eba39bSchristoselse
112*d0eba39bSchristos	echo "result contents not OK, for www3.example.com"
113*d0eba39bSchristos	echo "> cat logfiles"
114*d0eba39bSchristos	cat outfile3
115*d0eba39bSchristos	cat outfile4
116*d0eba39bSchristos	cat outfile5
117*d0eba39bSchristos	cat outfile6
118*d0eba39bSchristos	cat unbound2.log
119*d0eba39bSchristos	cat unbound.log
120*d0eba39bSchristos	echo "result contents not OK, for www3.example.com"
121*d0eba39bSchristos	exit 1
122*d0eba39bSchristosfi
123*d0eba39bSchristosif grep "www4.example.com" outfile4 | grep "10.20.30.44"; then
124*d0eba39bSchristos	echo "content OK"
125*d0eba39bSchristoselse
126*d0eba39bSchristos	echo "result contents not OK, for www4.example.com"
127*d0eba39bSchristos	echo "> cat logfiles"
128*d0eba39bSchristos	cat outfile3
129*d0eba39bSchristos	cat outfile4
130*d0eba39bSchristos	cat outfile5
131*d0eba39bSchristos	cat outfile6
132*d0eba39bSchristos	cat unbound2.log
133*d0eba39bSchristos	cat unbound.log
134*d0eba39bSchristos	echo "result contents not OK, for www4.example.com"
135*d0eba39bSchristos	exit 1
136*d0eba39bSchristosfi
137*d0eba39bSchristosif grep "www5.example.com" outfile5 | grep "10.20.30.45"; then
138*d0eba39bSchristos	echo "content OK"
139*d0eba39bSchristoselse
140*d0eba39bSchristos	echo "result contents not OK, for www5.example.com"
141*d0eba39bSchristos	echo "> cat logfiles"
142*d0eba39bSchristos	cat outfile3
143*d0eba39bSchristos	cat outfile4
144*d0eba39bSchristos	cat outfile5
145*d0eba39bSchristos	cat outfile6
146*d0eba39bSchristos	cat unbound2.log
147*d0eba39bSchristos	cat unbound.log
148*d0eba39bSchristos	echo "result contents not OK, for www5.example.com"
149*d0eba39bSchristos	exit 1
150*d0eba39bSchristosfi
151*d0eba39bSchristosif grep "www6.example.com" outfile6 | grep "10.20.30.46"; then
152*d0eba39bSchristos	echo "content OK"
153*d0eba39bSchristoselse
154*d0eba39bSchristos	echo "result contents not OK, for www6.example.com"
155*d0eba39bSchristos	echo "> cat logfiles"
156*d0eba39bSchristos	cat outfile3
157*d0eba39bSchristos	cat outfile4
158*d0eba39bSchristos	cat outfile5
159*d0eba39bSchristos	cat outfile6
160*d0eba39bSchristos	cat unbound2.log
161*d0eba39bSchristos	cat unbound.log
162*d0eba39bSchristos	echo "result contents not OK, for www6.example.com"
163*d0eba39bSchristos	exit 1
164*d0eba39bSchristosfi
165*d0eba39bSchristos
166*d0eba39bSchristosecho "> query a1.more.net a2.more.net a3.more.net a4.more.net a5.more.net"
167*d0eba39bSchristos$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a1.more.net A IN a2.more.net A IN a3.more.net A IN a4.more.net A IN a5.more.net A IN >outfile 2>&1
168*d0eba39bSchristosif test "$?" -ne 0; then
169*d0eba39bSchristos	echo "exit status not OK"
170*d0eba39bSchristos	echo "> cat logfiles"
171*d0eba39bSchristos	cat outfile
172*d0eba39bSchristos	cat unbound2.log
173*d0eba39bSchristos	cat unbound.log
174*d0eba39bSchristos	echo "Not OK"
175*d0eba39bSchristos	exit 1
176*d0eba39bSchristosfi
177*d0eba39bSchristoscat outfile
178*d0eba39bSchristosfor x in a1.more.net a2.more.net a3.more.net a4.more.net a5.more.net; do
179*d0eba39bSchristos	if grep "$x" outfile | grep "10.20.30.40"; then
180*d0eba39bSchristos		echo "content OK for $x"
181*d0eba39bSchristos	else
182*d0eba39bSchristos		echo "result contents not OK, for $x"
183*d0eba39bSchristos		echo "> cat logfiles"
184*d0eba39bSchristos		cat outfile
185*d0eba39bSchristos		cat unbound2.log
186*d0eba39bSchristos		cat unbound.log
187*d0eba39bSchristos		echo "result contents not OK, for $x"
188*d0eba39bSchristos		exit 1
189*d0eba39bSchristos	fi
190*d0eba39bSchristosdone
191*d0eba39bSchristos
192*d0eba39bSchristos# make the server timeout to drop the upstream connection
193*d0eba39bSchristosecho "> sleep 15"
194*d0eba39bSchristossleep 15
195*d0eba39bSchristos# see if we are still up.
196*d0eba39bSchristosecho "> query a7.more.net"
197*d0eba39bSchristos$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a7.more.net A IN >outfile 2>&1
198*d0eba39bSchristosif test "$?" -ne 0; then
199*d0eba39bSchristos	echo "exit status not OK"
200*d0eba39bSchristos	echo "> cat logfiles"
201*d0eba39bSchristos	cat outfile
202*d0eba39bSchristos	cat unbound2.log
203*d0eba39bSchristos	cat unbound.log
204*d0eba39bSchristos	echo "Not OK"
205*d0eba39bSchristos	exit 1
206*d0eba39bSchristosfi
207*d0eba39bSchristoscat outfile
208*d0eba39bSchristosfor x in a7.more.net; do
209*d0eba39bSchristos	if grep "$x" outfile | grep "10.20.30.40"; then
210*d0eba39bSchristos		echo "content OK for $x"
211*d0eba39bSchristos	else
212*d0eba39bSchristos		echo "result contents not OK, for $x"
213*d0eba39bSchristos		echo "> cat logfiles"
214*d0eba39bSchristos		cat outfile
215*d0eba39bSchristos		cat unbound2.log
216*d0eba39bSchristos		cat unbound.log
217*d0eba39bSchristos		echo "result contents not OK, for $x"
218*d0eba39bSchristos		exit 1
219*d0eba39bSchristos	fi
220*d0eba39bSchristosdone
221*d0eba39bSchristos
222*d0eba39bSchristos# dropconn.drop.net make the server drop the connection.
223*d0eba39bSchristosecho "> query a11.more.net a12.more.net dropconn.drop.net a14.more.net a15.more.net"
224*d0eba39bSchristos$PRE/streamtcp -a -f 127.0.0.1@$UNBOUND_PORT a11.more.net A IN a12.more.net A IN dropconn.drop.net A IN a14.more.net A IN a15.more.net A IN >outfile 2>&1
225*d0eba39bSchristosif test "$?" -ne 0; then
226*d0eba39bSchristos	echo "exit status not OK"
227*d0eba39bSchristos	echo "> cat logfiles"
228*d0eba39bSchristos	cat outfile
229*d0eba39bSchristos	cat unbound2.log
230*d0eba39bSchristos	cat unbound.log
231*d0eba39bSchristos	echo "Not OK"
232*d0eba39bSchristos	exit 1
233*d0eba39bSchristosfi
234*d0eba39bSchristoscat outfile
235*d0eba39bSchristos# cannot really check outfile, because it may or may not have answers depending
236*d0eba39bSchristos# on how fast the other server responds or the drop happens, but there are
237*d0eba39bSchristos# a bunch of connection drops, whilst resolving the other queries.
238*d0eba39bSchristos
239*d0eba39bSchristosecho "> query drop.net."
240*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT drop.net. A IN >outfile 2>&1
241*d0eba39bSchristoscat outfile
242*d0eba39bSchristosif test "$?" -ne 0; then
243*d0eba39bSchristos	echo "exit status not OK"
244*d0eba39bSchristos	echo "> cat logfiles"
245*d0eba39bSchristos	cat outfile
246*d0eba39bSchristos	cat unbound2.log
247*d0eba39bSchristos	cat unbound.log
248*d0eba39bSchristos	echo "Not OK"
249*d0eba39bSchristos	exit 1
250*d0eba39bSchristosfi
251*d0eba39bSchristosif grep "rcode: SERVFAIL" outfile; then
252*d0eba39bSchristos	echo "content OK"
253*d0eba39bSchristoselse
254*d0eba39bSchristos	echo "result contents not OK, for drop.net"
255*d0eba39bSchristos	echo "> cat logfiles"
256*d0eba39bSchristos	cat outfile
257*d0eba39bSchristos	cat unbound2.log
258*d0eba39bSchristos	cat unbound.log
259*d0eba39bSchristos	echo "result contents not OK, for drop.net"
260*d0eba39bSchristos	exit 1
261*d0eba39bSchristosfi
262*d0eba39bSchristos
263*d0eba39bSchristos
264*d0eba39bSchristos# timeouts at the end. (so that the server is not marked as failed for
265*d0eba39bSchristos# the other tests).
266*d0eba39bSchristosecho "> query q1.drop.net."
267*d0eba39bSchristosecho "> query q2.drop.net."
268*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT q1.drop.net. A IN >outfile1 2>&1 &
269*d0eba39bSchristos$PRE/streamtcp -f 127.0.0.1@$UNBOUND_PORT q2.drop.net. A IN >outfile2 2>&1 &
270*d0eba39bSchristoswait
271*d0eba39bSchristosif test "$?" -ne 0; then
272*d0eba39bSchristos	echo "exit status not OK"
273*d0eba39bSchristos	echo "> cat logfiles"
274*d0eba39bSchristos	cat outfile1
275*d0eba39bSchristos	cat outfile2
276*d0eba39bSchristos	cat unbound2.log
277*d0eba39bSchristos	cat unbound.log
278*d0eba39bSchristos	echo "Not OK"
279*d0eba39bSchristos	exit 1
280*d0eba39bSchristosfi
281*d0eba39bSchristoscat outfile1
282*d0eba39bSchristoscat outfile2
283*d0eba39bSchristosif grep "rcode: SERVFAIL" outfile1; then
284*d0eba39bSchristos	echo "content OK"
285*d0eba39bSchristoselse
286*d0eba39bSchristos	echo "result contents not OK, for q1.drop.net"
287*d0eba39bSchristos	echo "> cat logfiles"
288*d0eba39bSchristos	cat outfile1
289*d0eba39bSchristos	cat outfile2
290*d0eba39bSchristos	cat unbound2.log
291*d0eba39bSchristos	cat unbound.log
292*d0eba39bSchristos	echo "result contents not OK, for q1.drop.net"
293*d0eba39bSchristos	exit 1
294*d0eba39bSchristosfi
295*d0eba39bSchristosif grep "rcode: SERVFAIL" outfile2; then
296*d0eba39bSchristos	echo "content OK"
297*d0eba39bSchristoselse
298*d0eba39bSchristos	echo "result contents not OK, for q2.drop.net"
299*d0eba39bSchristos	echo "> cat logfiles"
300*d0eba39bSchristos	cat outfile1
301*d0eba39bSchristos	cat outfile2
302*d0eba39bSchristos	cat unbound2.log
303*d0eba39bSchristos	cat unbound.log
304*d0eba39bSchristos	echo "result contents not OK, for q2.drop.net"
305*d0eba39bSchristos	exit 1
306*d0eba39bSchristosfi
307*d0eba39bSchristos
308*d0eba39bSchristosecho "OK"
309*d0eba39bSchristosexit 0
310