tests.sh revision 1.1.1.5 1 #!/bin/sh
2 #
3 # Copyright (C) Internet Systems Consortium, Inc. ("ISC")
4 #
5 # This Source Code Form is subject to the terms of the Mozilla Public
6 # License, v. 2.0. If a copy of the MPL was not distributed with this
7 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 #
9 # See the COPYRIGHT file distributed with this work for additional
10 # information regarding copyright ownership.
11
12 SYSTEMTESTTOP=..
13 . $SYSTEMTESTTOP/conf.sh
14
15 RNDCCMD="$RNDC -c $SYSTEMTESTTOP/common/rndc.conf -p ${CONTROLPORT} -s"
16
17 status=0
18 n=0
19
20 #echo_i "check ans.pl server ($n)"
21 #$DIG -p ${PORT} @10.53.0.2 example NS
22 #$DIG -p ${PORT} @10.53.0.2 example SOA
23 #$DIG -p ${PORT} @10.53.0.2 ns.example A
24 #$DIG -p ${PORT} @10.53.0.2 ns.example AAAA
25 #$DIG -p ${PORT} @10.53.0.2 txt enable
26 #$DIG -p ${PORT} @10.53.0.2 txt disable
27 #$DIG -p ${PORT} @10.53.0.2 ns.example AAAA
28 #$DIG -p ${PORT} @10.53.0.2 txt enable
29 #$DIG -p ${PORT} @10.53.0.2 ns.example AAAA
30 #$DIG -p ${PORT} @10.53.0.2 data.example TXT
31 #$DIG -p ${PORT} @10.53.0.2 nodata.example TXT
32 #$DIG -p ${PORT} @10.53.0.2 nxdomain.example TXT
33
34 #
35 # First test server with serve-stale options set.
36 #
37 echo_i "test server with serve-stale options set"
38
39 n=`expr $n + 1`
40 echo_i "prime cache longttl.example ($n)"
41 ret=0
42 $DIG -p ${PORT} @10.53.0.1 longttl.example TXT > dig.out.test$n
43 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
44 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
45 if [ $ret != 0 ]; then echo_i "failed"; fi
46 status=`expr $status + $ret`
47
48 n=`expr $n + 1`
49 echo_i "prime cache data.example ($n)"
50 ret=0
51 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
52 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
53 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
54 if [ $ret != 0 ]; then echo_i "failed"; fi
55 status=`expr $status + $ret`
56
57 n=`expr $n + 1`
58 echo_i "prime cache nodata.example ($n)"
59 ret=0
60 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
61 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
62 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
63 if [ $ret != 0 ]; then echo_i "failed"; fi
64 status=`expr $status + $ret`
65
66 n=`expr $n + 1`
67 echo_i "prime cache nxdomain.example ($n)"
68 ret=0
69 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
70 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
71 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
72 if [ $ret != 0 ]; then echo_i "failed"; fi
73 status=`expr $status + $ret`
74
75 n=`expr $n + 1`
76 echo_i "verify prime cache statistics ($n)"
77 ret=0
78 rm -f ns1/named.stats
79 $RNDCCMD 10.53.0.1 stats > /dev/null 2>&1
80 [ -f ns1/named.stats ] || ret=1
81 cp ns1/named.stats ns1/named.stats.$n
82 # Check first 10 lines of Cache DB statistics. After prime queries, we expect
83 # two active TXT one nxrrset TXT, and one NXDOMAIN.
84 grep -A 10 "++ Cache DB RRsets ++" ns1/named.stats.$n > ns1/named.stats.$n.cachedb || ret=1
85 grep "2 TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
86 grep "1 !TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
87 grep "1 NXDOMAIN" ns1/named.stats.$n.cachedb > /dev/null || ret=1
88 if [ $ret != 0 ]; then echo_i "failed"; fi
89 status=`expr $status + $ret`
90
91 n=`expr $n + 1`
92 echo_i "disable responses from authoritative server ($n)"
93 ret=0
94 $DIG -p ${PORT} @10.53.0.2 txt disable > dig.out.test$n
95 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
96 grep "TXT.\"0\"" dig.out.test$n > /dev/null || ret=1
97 if [ $ret != 0 ]; then echo_i "failed"; fi
98 status=`expr $status + $ret`
99
100 sleep 1
101
102 n=`expr $n + 1`
103 echo_i "check 'rndc serve-stale status' ($n)"
104 ret=0
105 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
106 grep '_default: on (stale-answer-ttl=2 max-stale-ttl=3600)' rndc.out.test$n > /dev/null || ret=1
107 if [ $ret != 0 ]; then echo_i "failed"; fi
108 status=`expr $status + $ret`
109
110 n=`expr $n + 1`
111 echo_i "check stale data.example ($n)"
112 ret=0
113 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
114 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
115 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
116 grep "data\.example\..*2.*IN.*TXT.*A text record with a 1 second ttl" dig.out.test$n > /dev/null || ret=1
117 # Run rndc dumpdb, test whether the stale data has correct comment printed.
118 # The max-stale-ttl is 3600 seconds, so the comment should say the data is
119 # stale for somewhere between 3500-3599 seconds.
120 rndc_dumpdb ns1 || ret=1
121 awk '/; stale/ { x=$0; getline; print x, $0}' ns1/named_dump.db.test$n |
122 grep "; stale (will be retained for 35.. more seconds) data\.example.*A text record with a 1 second ttl" > /dev/null 2>&1 || ret=1
123 # Also make sure the not expired data does not have a stale comment.
124 awk '/; answer/ { x=$0; getline; print x, $0}' ns1/named_dump.db.test$n |
125 grep "; answer longttl\.example.*A text record with a 600 second ttl" > /dev/null 2>&1 || ret=1
126 if [ $ret != 0 ]; then echo_i "failed"; fi
127 status=`expr $status + $ret`
128
129 n=`expr $n + 1`
130 echo_i "check stale nodata.example ($n)"
131 ret=0
132 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
133 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
134 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
135 grep "example\..*2.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
136 if [ $ret != 0 ]; then echo_i "failed"; fi
137 status=`expr $status + $ret`
138
139 n=`expr $n + 1`
140 echo_i "check stale nxdomain.example ($n)"
141 ret=0
142 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
143 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
144 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
145 grep "example\..*2.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
146 if [ $ret != 0 ]; then echo_i "failed"; fi
147 status=`expr $status + $ret`
148
149 n=`expr $n + 1`
150 echo_i "verify stale cache statistics ($n)"
151 ret=0
152 rm -f ns1/named.stats
153 $RNDCCMD 10.53.0.1 stats > /dev/null 2>&1
154 [ -f ns1/named.stats ] || ret=1
155 cp ns1/named.stats ns1/named.stats.$n
156 # Check first 10 lines of Cache DB statistics. After serve-stale queries, we
157 # expect one active TXT RRset, one stale TXT, one stale nxrrset TXT, and one
158 # stale NXDOMAIN.
159 grep -A 10 "++ Cache DB RRsets ++" ns1/named.stats.$n > ns1/named.stats.$n.cachedb || ret=1
160 grep "1 TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
161 grep "1 #TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
162 grep "1 #!TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
163 grep "1 #NXDOMAIN" ns1/named.stats.$n.cachedb > /dev/null || ret=1
164 status=`expr $status + $ret`
165 if [ $ret != 0 ]; then echo_i "failed"; fi
166
167 n=`expr $n + 1`
168 echo_i "running 'rndc serve-stale off' ($n)"
169 ret=0
170 $RNDCCMD 10.53.0.1 serve-stale off || ret=1
171 if [ $ret != 0 ]; then echo_i "failed"; fi
172 status=`expr $status + $ret`
173
174 n=`expr $n + 1`
175 echo_i "check 'rndc serve-stale status' ($n)"
176 ret=0
177 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
178 grep '_default: off (rndc) (stale-answer-ttl=2 max-stale-ttl=3600)' rndc.out.test$n > /dev/null || ret=1
179 if [ $ret != 0 ]; then echo_i "failed"; fi
180 status=`expr $status + $ret`
181
182 n=`expr $n + 1`
183 echo_i "check stale data.example (serve-stale off) ($n)"
184 ret=0
185 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
186 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
187 if [ $ret != 0 ]; then echo_i "failed"; fi
188 status=`expr $status + $ret`
189 if [ $ret != 0 ]; then echo_i "failed"; fi
190 status=`expr $status + $ret`
191
192 n=`expr $n + 1`
193 echo_i "check stale nodata.example (serve-stale off) ($n)"
194 ret=0
195 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
196 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
197 if [ $ret != 0 ]; then echo_i "failed"; fi
198 status=`expr $status + $ret`
199
200 n=`expr $n + 1`
201 echo_i "check stale nxdomain.example (serve-stale off) ($n)"
202 ret=0
203 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
204 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
205 if [ $ret != 0 ]; then echo_i "failed"; fi
206 status=`expr $status + $ret`
207
208 n=`expr $n + 1`
209 echo_i "running 'rndc serve-stale on' ($n)"
210 ret=0
211 $RNDCCMD 10.53.0.1 serve-stale on || ret=1
212 if [ $ret != 0 ]; then echo_i "failed"; fi
213 status=`expr $status + $ret`
214
215 n=`expr $n + 1`
216 echo_i "check 'rndc serve-stale status' ($n)"
217 ret=0
218 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
219 grep '_default: on (rndc) (stale-answer-ttl=2 max-stale-ttl=3600)' rndc.out.test$n > /dev/null || ret=1
220 if [ $ret != 0 ]; then echo_i "failed"; fi
221 status=`expr $status + $ret`
222
223 n=`expr $n + 1`
224 echo_i "check stale data.example (serve-stale on) ($n)"
225 ret=0
226 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
227 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
228 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
229 grep "data\.example\..*2.*IN.*TXT.*A text record with a 1 second ttl" dig.out.test$n > /dev/null || ret=1
230 if [ $ret != 0 ]; then echo_i "failed"; fi
231 status=`expr $status + $ret`
232
233 n=`expr $n + 1`
234 echo_i "check stale nodata.example (serve-stale on) ($n)"
235 ret=0
236 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
237 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
238 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
239 grep "example\..*2.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
240 if [ $ret != 0 ]; then echo_i "failed"; fi
241 status=`expr $status + $ret`
242
243 n=`expr $n + 1`
244 echo_i "check stale nxdomain.example (serve-stale on) ($n)"
245 ret=0
246 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
247 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
248 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
249 grep "example\..*2.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
250 if [ $ret != 0 ]; then echo_i "failed"; fi
251 status=`expr $status + $ret`
252
253 n=`expr $n + 1`
254 echo_i "running 'rndc serve-stale no' ($n)"
255 ret=0
256 $RNDCCMD 10.53.0.1 serve-stale no || ret=1
257 if [ $ret != 0 ]; then echo_i "failed"; fi
258 status=`expr $status + $ret`
259
260 n=`expr $n + 1`
261 echo_i "check 'rndc serve-stale status' ($n)"
262 ret=0
263 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
264 grep '_default: off (rndc) (stale-answer-ttl=2 max-stale-ttl=3600)' rndc.out.test$n > /dev/null || ret=1
265 if [ $ret != 0 ]; then echo_i "failed"; fi
266 status=`expr $status + $ret`
267
268 n=`expr $n + 1`
269 echo_i "check stale data.example (serve-stale no) ($n)"
270 ret=0
271 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
272 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
273 if [ $ret != 0 ]; then echo_i "failed"; fi
274 status=`expr $status + $ret`
275
276 n=`expr $n + 1`
277 echo_i "check stale nodata.example (serve-stale no) ($n)"
278 ret=0
279 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
280 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
281 if [ $ret != 0 ]; then echo_i "failed"; fi
282 status=`expr $status + $ret`
283
284 n=`expr $n + 1`
285 echo_i "check stale nxdomain.example (serve-stale no) ($n)"
286 ret=0
287 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
288 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
289 if [ $ret != 0 ]; then echo_i "failed"; fi
290 status=`expr $status + $ret`
291
292 n=`expr $n + 1`
293 echo_i "running 'rndc serve-stale yes' ($n)"
294 ret=0
295 $RNDCCMD 10.53.0.1 serve-stale yes || ret=1
296 if [ $ret != 0 ]; then echo_i "failed"; fi
297 status=`expr $status + $ret`
298
299 n=`expr $n + 1`
300 echo_i "check 'rndc serve-stale status' ($n)"
301 ret=0
302 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
303 grep '_default: on (rndc) (stale-answer-ttl=2 max-stale-ttl=3600)' rndc.out.test$n > /dev/null || ret=1
304 if [ $ret != 0 ]; then echo_i "failed"; fi
305 status=`expr $status + $ret`
306
307 n=`expr $n + 1`
308 echo_i "check stale data.example (serve-stale yes) ($n)"
309 ret=0
310 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
311 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
312 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
313 grep "data\.example\..*2.*IN.*TXT.*A text record with a 1 second ttl" dig.out.test$n > /dev/null || ret=1
314 if [ $ret != 0 ]; then echo_i "failed"; fi
315 status=`expr $status + $ret`
316
317 n=`expr $n + 1`
318 echo_i "check stale nodata.example (serve-stale yes) ($n)"
319 ret=0
320 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
321 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
322 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
323 grep "example\..*2.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
324 if [ $ret != 0 ]; then echo_i "failed"; fi
325 status=`expr $status + $ret`
326
327 n=`expr $n + 1`
328 echo_i "check stale nxdomain.example (serve-stale yes) ($n)"
329 ret=0
330 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
331 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
332 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
333 grep "example\..*2.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
334 if [ $ret != 0 ]; then echo_i "failed"; fi
335 status=`expr $status + $ret`
336
337 n=`expr $n + 1`
338 echo_i "running 'rndc serve-stale off' ($n)"
339 ret=0
340 $RNDCCMD 10.53.0.1 serve-stale off || ret=1
341 if [ $ret != 0 ]; then echo_i "failed"; fi
342 status=`expr $status + $ret`
343
344 n=`expr $n + 1`
345 echo_i "running 'rndc serve-stale reset' ($n)"
346 ret=0
347 $RNDCCMD 10.53.0.1 serve-stale reset || ret=1
348 if [ $ret != 0 ]; then echo_i "failed"; fi
349 status=`expr $status + $ret`
350
351 n=`expr $n + 1`
352 echo_i "check 'rndc serve-stale status' ($n)"
353 ret=0
354 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
355 grep '_default: on (stale-answer-ttl=2 max-stale-ttl=3600)' rndc.out.test$n > /dev/null || ret=1
356 if [ $ret != 0 ]; then echo_i "failed"; fi
357 status=`expr $status + $ret`
358
359 n=`expr $n + 1`
360 echo_i "check stale data.example (serve-stale reset) ($n)"
361 ret=0
362 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
363 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
364 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
365 grep "data\.example\..*2.*IN.*TXT.*A text record with a 1 second ttl" dig.out.test$n > /dev/null || ret=1
366 if [ $ret != 0 ]; then echo_i "failed"; fi
367 status=`expr $status + $ret`
368
369 n=`expr $n + 1`
370 echo_i "check stale nodata.example (serve-stale reset) ($n)"
371 ret=0
372 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
373 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
374 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
375 grep "example\..*2.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
376 if [ $ret != 0 ]; then echo_i "failed"; fi
377 status=`expr $status + $ret`
378
379 n=`expr $n + 1`
380 echo_i "check stale nxdomain.example (serve-stale reset) ($n)"
381 ret=0
382 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
383 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
384 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
385 grep "example\..*2.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
386 if [ $ret != 0 ]; then echo_i "failed"; fi
387 status=`expr $status + $ret`
388
389 n=`expr $n + 1`
390 echo_i "running 'rndc serve-stale off' ($n)"
391 ret=0
392 $RNDCCMD 10.53.0.1 serve-stale off || ret=1
393 if [ $ret != 0 ]; then echo_i "failed"; fi
394 status=`expr $status + $ret`
395
396 n=`expr $n + 1`
397 echo_i "check 'rndc serve-stale status' ($n)"
398 ret=0
399 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
400 grep '_default: off (rndc) (stale-answer-ttl=2 max-stale-ttl=3600)' rndc.out.test$n > /dev/null || ret=1
401 if [ $ret != 0 ]; then echo_i "failed"; fi
402 status=`expr $status + $ret`
403
404 #
405 # Update named.conf.
406 # Test server with low max-stale-ttl.
407 #
408 echo_i "test server with serve-stale options set, low max-stale-ttl"
409
410 n=`expr $n + 1`
411 echo_i "updating ns1/named.conf ($n)"
412 ret=0
413 copy_setports ns1/named2.conf.in ns1/named.conf
414 if [ $ret != 0 ]; then echo_i "failed"; fi
415 status=`expr $status + $ret`
416
417 n=`expr $n + 1`
418 echo_i "running 'rndc reload' ($n)"
419 ret=0
420 rndc_reload ns1 10.53.0.1
421 if [ $ret != 0 ]; then echo_i "failed"; fi
422 status=`expr $status + $ret`
423
424 n=`expr $n + 1`
425 echo_i "check 'rndc serve-stale status' ($n)"
426 ret=0
427 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
428 grep '_default: off (rndc) (stale-answer-ttl=3 max-stale-ttl=35)' rndc.out.test$n > /dev/null || ret=1
429 if [ $ret != 0 ]; then echo_i "failed"; fi
430 status=`expr $status + $ret`
431
432 n=`expr $n + 1`
433 echo_i "flush cache, re-enable serve-stale and query again ($n)"
434 ret=0
435 $RNDCCMD 10.53.0.1 flushtree example > rndc.out.test$n.1 2>&1 || ret=1
436 $RNDCCMD 10.53.0.1 serve-stale on > rndc.out.test$n.2 2>&1 || ret=1
437 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
438 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
439 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
440 if [ $ret != 0 ]; then echo_i "failed"; fi
441 status=`expr $status + $ret`
442
443 n=`expr $n + 1`
444 echo_i "check 'rndc serve-stale status' ($n)"
445 ret=0
446 $RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
447 grep '_default: on (rndc) (stale-answer-ttl=3 max-stale-ttl=35)' rndc.out.test$n > /dev/null || ret=1
448 if [ $ret != 0 ]; then echo_i "failed"; fi
449 status=`expr $status + $ret`
450
451 n=`expr $n + 1`
452 echo_i "enable responses from authoritative server ($n)"
453 ret=0
454 $DIG -p ${PORT} @10.53.0.2 txt enable > dig.out.test$n
455 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
456 grep "TXT.\"1\"" dig.out.test$n > /dev/null || ret=1
457 if [ $ret != 0 ]; then echo_i "failed"; fi
458 status=`expr $status + $ret`
459
460 sleep 1
461
462 n=`expr $n + 1`
463 echo_i "prime cache longttl.example (low max-stale-ttl) ($n)"
464 ret=0
465 $DIG -p ${PORT} @10.53.0.1 longttl.example TXT > dig.out.test$n
466 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
467 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
468 if [ $ret != 0 ]; then echo_i "failed"; fi
469 status=`expr $status + $ret`
470
471 n=`expr $n + 1`
472 echo_i "prime cache data.example (low max-stale-ttl) ($n)"
473 ret=0
474 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
475 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
476 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
477 if [ $ret != 0 ]; then echo_i "failed"; fi
478 status=`expr $status + $ret`
479
480 n=`expr $n + 1`
481 echo_i "prime cache nodata.example (low max-stale-ttl) ($n)"
482 ret=0
483 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
484 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
485 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
486 if [ $ret != 0 ]; then echo_i "failed"; fi
487 status=`expr $status + $ret`
488
489 n=`expr $n + 1`
490 echo_i "prime cache nxdomain.example (low max-stale-ttl) ($n)"
491 ret=0
492 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
493 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
494 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
495 if [ $ret != 0 ]; then echo_i "failed"; fi
496 status=`expr $status + $ret`
497
498 n=`expr $n + 1`
499 echo_i "verify prime cache statistics (low max-stale-ttl) ($n)"
500 ret=0
501 rm -f ns1/named.stats
502 $RNDCCMD 10.53.0.1 stats > /dev/null 2>&1
503 [ -f ns1/named.stats ] || ret=1
504 cp ns1/named.stats ns1/named.stats.$n
505 # Check first 10 lines of Cache DB statistics. After prime queries, we expect
506 # two active TXT RRsets, one nxrrset TXT, and one NXDOMAIN.
507 grep -A 10 "++ Cache DB RRsets ++" ns1/named.stats.$n > ns1/named.stats.$n.cachedb || ret=1
508 grep "2 TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
509 grep "1 !TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
510 grep "1 NXDOMAIN" ns1/named.stats.$n.cachedb > /dev/null || ret=1
511 status=`expr $status + $ret`
512 if [ $ret != 0 ]; then echo_i "failed"; fi
513
514 n=`expr $n + 1`
515 echo_i "disable responses from authoritative server ($n)"
516 ret=0
517 $DIG -p ${PORT} @10.53.0.2 txt disable > dig.out.test$n
518 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
519 grep "TXT.\"0\"" dig.out.test$n > /dev/null || ret=1
520 if [ $ret != 0 ]; then echo_i "failed"; fi
521 status=`expr $status + $ret`
522
523 sleep 1
524
525 n=`expr $n + 1`
526 echo_i "check stale data.example (low max-stale-ttl) ($n)"
527 ret=0
528 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
529 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
530 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
531 grep "data\.example\..*3.*IN.*TXT.*A text record with a 1 second ttl" dig.out.test$n > /dev/null || ret=1
532 if [ $ret != 0 ]; then echo_i "failed"; fi
533 status=`expr $status + $ret`
534
535 n=`expr $n + 1`
536 echo_i "check stale nodata.example (low max-stale-ttl) ($n)"
537 ret=0
538 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
539 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
540 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
541 grep "example\..*3.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
542 if [ $ret != 0 ]; then echo_i "failed"; fi
543 status=`expr $status + $ret`
544
545 n=`expr $n + 1`
546 echo_i "check stale nxdomain.example (low max-stale-ttl) ($n)"
547 ret=0
548 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
549 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
550 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
551 grep "example\..*3.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
552 if [ $ret != 0 ]; then echo_i "failed"; fi
553 status=`expr $status + $ret`
554
555 n=`expr $n + 1`
556 echo_i "verify stale cache statistics (low max-stale-ttl) ($n)"
557 ret=0
558 rm -f ns1/named.stats
559 $RNDCCMD 10.53.0.1 stats > /dev/null 2>&1
560 [ -f ns1/named.stats ] || ret=1
561 cp ns1/named.stats ns1/named.stats.$n
562 # Check first 10 lines of Cache DB statistics. After serve-stale queries, we
563 # expect one active TXT RRset, one stale TXT, one stale nxrrset TXT, and one
564 # stale NXDOMAIN.
565 grep -A 10 "++ Cache DB RRsets ++" ns1/named.stats.$n > ns1/named.stats.$n.cachedb || ret=1
566 grep "1 TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
567 grep "1 #TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
568 grep "1 #!TXT" ns1/named.stats.$n.cachedb > /dev/null || ret=1
569 grep "1 #NXDOMAIN" ns1/named.stats.$n.cachedb > /dev/null || ret=1
570 status=`expr $status + $ret`
571 if [ $ret != 0 ]; then echo_i "failed"; fi
572
573 sleep 1
574
575 n=`expr $n + 1`
576 echo_i "check ancient data.example (low max-stale-ttl) ($n)"
577 ret=0
578 $DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
579 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
580 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
581 if [ $ret != 0 ]; then echo_i "failed"; fi
582 status=`expr $status + $ret`
583
584 n=`expr $n + 1`
585 echo_i "check ancient nodata.example (low max-stale-ttl) ($n)"
586 ret=0
587 $DIG -p ${PORT} @10.53.0.1 nodata.example TXT > dig.out.test$n
588 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
589 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
590 if [ $ret != 0 ]; then echo_i "failed"; fi
591 status=`expr $status + $ret`
592
593 n=`expr $n + 1`
594 echo_i "check ancient nxdomain.example (low max-stale-ttl) ($n)"
595 ret=0
596 $DIG -p ${PORT} @10.53.0.1 nxdomain.example TXT > dig.out.test$n
597 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
598 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
599 if [ $ret != 0 ]; then echo_i "failed"; fi
600 status=`expr $status + $ret`
601
602 #
603 # Now test server with no serve-stale options set.
604 #
605 echo_i "test server with no serve-stale options set"
606
607 n=`expr $n + 1`
608 echo_i "enable responses from authoritative server ($n)"
609 ret=0
610 $DIG -p ${PORT} @10.53.0.2 txt enable > dig.out.test$n
611 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
612 grep "TXT.\"1\"" dig.out.test$n > /dev/null || ret=1
613 if [ $ret != 0 ]; then echo_i "failed"; fi
614 status=`expr $status + $ret`
615
616 n=`expr $n + 1`
617 echo_i "prime cache longttl.example (max-stale-ttl default) ($n)"
618 ret=0
619 $DIG -p ${PORT} @10.53.0.3 longttl.example TXT > dig.out.test$n
620 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
621 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
622 if [ $ret != 0 ]; then echo_i "failed"; fi
623 status=`expr $status + $ret`
624
625 n=`expr $n + 1`
626 echo_i "prime cache data.example (max-stale-ttl default) ($n)"
627 ret=0
628 $DIG -p ${PORT} @10.53.0.3 data.example TXT > dig.out.test$n
629 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
630 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
631 grep "data\.example\..*1.*IN.*TXT.*A text record with a 1 second ttl" dig.out.test$n > /dev/null || ret=1
632 if [ $ret != 0 ]; then echo_i "failed"; fi
633 status=`expr $status + $ret`
634
635 n=`expr $n + 1`
636 echo_i "prime cache nodata.example (max-stale-ttl default) ($n)"
637 ret=0
638 $DIG -p ${PORT} @10.53.0.3 nodata.example TXT > dig.out.test$n
639 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
640 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
641 grep "example\..*1.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
642 if [ $ret != 0 ]; then echo_i "failed"; fi
643 status=`expr $status + $ret`
644
645 n=`expr $n + 1`
646 echo_i "prime cache nxdomain.example (max-stale-ttl default) ($n)"
647 ret=0
648 $DIG -p ${PORT} @10.53.0.3 nxdomain.example TXT > dig.out.test$n
649 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
650 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
651 grep "example\..*1.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
652 if [ $ret != 0 ]; then echo_i "failed"; fi
653 status=`expr $status + $ret`
654
655 n=`expr $n + 1`
656 echo_i "verify prime cache statistics (max-stale-ttl default) ($n)"
657 ret=0
658 rm -f ns3/named.stats
659 $RNDCCMD 10.53.0.3 stats > /dev/null 2>&1
660 [ -f ns3/named.stats ] || ret=1
661 cp ns3/named.stats ns3/named.stats.$n
662 # Check first 10 lines of Cache DB statistics. After prime queries, we expect
663 # two active TXT RRsets, one nxrrset TXT, and one NXDOMAIN.
664 grep -A 10 "++ Cache DB RRsets ++" ns3/named.stats.$n > ns3/named.stats.$n.cachedb || ret=1
665 grep "2 TXT" ns3/named.stats.$n.cachedb > /dev/null || ret=1
666 grep "1 !TXT" ns3/named.stats.$n.cachedb > /dev/null || ret=1
667 grep "1 NXDOMAIN" ns3/named.stats.$n.cachedb > /dev/null || ret=1
668 status=`expr $status + $ret`
669 if [ $ret != 0 ]; then echo_i "failed"; fi
670
671 n=`expr $n + 1`
672 echo_i "disable responses from authoritative server ($n)"
673 ret=0
674 $DIG -p ${PORT} @10.53.0.2 txt disable > dig.out.test$n
675 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
676 grep "TXT.\"0\"" dig.out.test$n > /dev/null || ret=1
677 if [ $ret != 0 ]; then echo_i "failed"; fi
678 status=`expr $status + $ret`
679
680 sleep 1
681
682 n=`expr $n + 1`
683 echo_i "check 'rndc serve-stale status' ($n)"
684 ret=0
685 $RNDCCMD 10.53.0.3 serve-stale status > rndc.out.test$n 2>&1 || ret=1
686 grep '_default: off (stale-answer-ttl=1 max-stale-ttl=604800)' rndc.out.test$n > /dev/null || ret=1
687 if [ $ret != 0 ]; then echo_i "failed"; fi
688 status=`expr $status + $ret`
689
690 n=`expr $n + 1`
691 echo_i "check fail of data.example (max-stale-ttl default) ($n)"
692 ret=0
693 $DIG -p ${PORT} @10.53.0.3 data.example TXT > dig.out.test$n
694 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
695 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
696 if [ $ret != 0 ]; then echo_i "failed"; fi
697 status=`expr $status + $ret`
698
699 n=`expr $n + 1`
700 echo_i "check fail of nodata.example (max-stale-ttl default) ($n)"
701 ret=0
702 $DIG -p ${PORT} @10.53.0.3 nodata.example TXT > dig.out.test$n
703 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
704 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
705 if [ $ret != 0 ]; then echo_i "failed"; fi
706 status=`expr $status + $ret`
707
708 n=`expr $n + 1`
709 echo_i "check fail of nxdomain.example (max-stale-ttl default) ($n)"
710 ret=0
711 $DIG -p ${PORT} @10.53.0.3 nxdomain.example TXT > dig.out.test$n
712 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
713 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
714 if [ $ret != 0 ]; then echo_i "failed"; fi
715 status=`expr $status + $ret`
716
717 n=`expr $n + 1`
718 echo_i "verify stale cache statistics (max-stale-ttl default) ($n)"
719 ret=0
720 rm -f ns3/named.stats
721 $RNDCCMD 10.53.0.3 stats > /dev/null 2>&1
722 [ -f ns3/named.stats ] || ret=1
723 cp ns3/named.stats ns3/named.stats.$n
724 # Check first 10 lines of Cache DB statistics. After last queries, we expect
725 # one active TXT RRset, one stale TXT, one stale nxrrset TXT, and one
726 # stale NXDOMAIN.
727 grep -A 10 "++ Cache DB RRsets ++" ns3/named.stats.$n > ns3/named.stats.$n.cachedb || ret=1
728 grep "1 TXT" ns3/named.stats.$n.cachedb > /dev/null || ret=1
729 grep "1 #TXT" ns3/named.stats.$n.cachedb > /dev/null || ret=1
730 grep "1 #!TXT" ns3/named.stats.$n.cachedb > /dev/null || ret=1
731 grep "1 #NXDOMAIN" ns3/named.stats.$n.cachedb > /dev/null || ret=1
732 status=`expr $status + $ret`
733 if [ $ret != 0 ]; then echo_i "failed"; fi
734
735 n=`expr $n + 1`
736 echo_i "check 'rndc serve-stale on' ($n)"
737 ret=0
738 $RNDCCMD 10.53.0.3 serve-stale on > rndc.out.test$n 2>&1 || ret=1
739 if [ $ret != 0 ]; then echo_i "failed"; fi
740 status=`expr $status + $ret`
741
742 n=`expr $n + 1`
743 echo_i "check 'rndc serve-stale status' ($n)"
744 ret=0
745 $RNDCCMD 10.53.0.3 serve-stale status > rndc.out.test$n 2>&1 || ret=1
746 grep '_default: on (rndc) (stale-answer-ttl=1 max-stale-ttl=604800)' rndc.out.test$n > /dev/null || ret=1
747 if [ $ret != 0 ]; then echo_i "failed"; fi
748 status=`expr $status + $ret`
749
750 n=`expr $n + 1`
751 echo_i "check data.example (max-stale-ttl default) ($n)"
752 ret=0
753 $DIG -p ${PORT} @10.53.0.3 data.example TXT > dig.out.test$n
754 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
755 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
756 grep "data\.example\..*1.*IN.*TXT.*A text record with a 1 second ttl" dig.out.test$n > /dev/null || ret=1
757 if [ $ret != 0 ]; then echo_i "failed"; fi
758 status=`expr $status + $ret`
759
760 n=`expr $n + 1`
761 echo_i "check nodata.example (max-stale-ttl default) ($n)"
762 ret=0
763 $DIG -p ${PORT} @10.53.0.3 nodata.example TXT > dig.out.test$n
764 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
765 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
766 grep "example\..*1.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
767 if [ $ret != 0 ]; then echo_i "failed"; fi
768 status=`expr $status + $ret`
769
770 n=`expr $n + 1`
771 echo_i "check nxdomain.example (max-stale-ttl default) ($n)"
772 ret=0
773 $DIG -p ${PORT} @10.53.0.3 nxdomain.example TXT > dig.out.test$n
774 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
775 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
776 grep "example\..*1.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
777 if [ $ret != 0 ]; then echo_i "failed"; fi
778 status=`expr $status + $ret`
779
780 #
781 # Now test server with serve-stale disabled.
782 #
783 echo_i "test server with serve-stale disabled"
784
785 n=`expr $n + 1`
786 echo_i "enable responses from authoritative server ($n)"
787 ret=0
788 $DIG -p ${PORT} @10.53.0.2 txt enable > dig.out.test$n
789 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
790 grep "TXT.\"1\"" dig.out.test$n > /dev/null || ret=1
791 if [ $ret != 0 ]; then echo_i "failed"; fi
792 status=`expr $status + $ret`
793
794 n=`expr $n + 1`
795 echo_i "prime cache longttl.example (serve-stale disabled) ($n)"
796 ret=0
797 $DIG -p ${PORT} @10.53.0.4 longttl.example TXT > dig.out.test$n
798 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
799 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
800 if [ $ret != 0 ]; then echo_i "failed"; fi
801 status=`expr $status + $ret`
802
803 n=`expr $n + 1`
804 echo_i "prime cache data.example (serve-stale disabled) ($n)"
805 ret=0
806 $DIG -p ${PORT} @10.53.0.4 data.example TXT > dig.out.test$n
807 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
808 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
809 grep "data\.example\..*1.*IN.*TXT.*A text record with a 1 second ttl" dig.out.test$n > /dev/null || ret=1
810 if [ $ret != 0 ]; then echo_i "failed"; fi
811 status=`expr $status + $ret`
812
813 n=`expr $n + 1`
814 echo_i "prime cache nodata.example (serve-stale disabled) ($n)"
815 ret=0
816 $DIG -p ${PORT} @10.53.0.4 nodata.example TXT > dig.out.test$n
817 grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
818 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
819 grep "example\..*1.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
820 if [ $ret != 0 ]; then echo_i "failed"; fi
821 status=`expr $status + $ret`
822
823 n=`expr $n + 1`
824 echo_i "prime cache nxdomain.example (serve-stale disabled) ($n)"
825 ret=0
826 $DIG -p ${PORT} @10.53.0.4 nxdomain.example TXT > dig.out.test$n
827 grep "status: NXDOMAIN" dig.out.test$n > /dev/null || ret=1
828 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
829 grep "example\..*1.*IN.*SOA" dig.out.test$n > /dev/null || ret=1
830 if [ $ret != 0 ]; then echo_i "failed"; fi
831 status=`expr $status + $ret`
832
833 n=`expr $n + 1`
834 echo_i "verify prime cache statistics (serve-stale disabled) ($n)"
835 ret=0
836 rm -f ns4/named.stats
837 $RNDCCMD 10.53.0.4 stats > /dev/null 2>&1
838 [ -f ns4/named.stats ] || ret=1
839 cp ns4/named.stats ns4/named.stats.$n
840 # Check first 10 lines of Cache DB statistics. After prime queries, we expect
841 # two active TXT RRsets, one nxrrset TXT, and one NXDOMAIN.
842 grep -A 10 "++ Cache DB RRsets ++" ns4/named.stats.$n > ns4/named.stats.$n.cachedb || ret=1
843 grep "2 TXT" ns4/named.stats.$n.cachedb > /dev/null || ret=1
844 grep "1 !TXT" ns4/named.stats.$n.cachedb > /dev/null || ret=1
845 grep "1 NXDOMAIN" ns4/named.stats.$n.cachedb > /dev/null || ret=1
846 status=`expr $status + $ret`
847 if [ $ret != 0 ]; then echo_i "failed"; fi
848
849 n=`expr $n + 1`
850 echo_i "disable responses from authoritative server ($n)"
851 ret=0
852 $DIG -p ${PORT} @10.53.0.2 txt disable > dig.out.test$n
853 grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
854 grep "TXT.\"0\"" dig.out.test$n > /dev/null || ret=1
855 if [ $ret != 0 ]; then echo_i "failed"; fi
856 status=`expr $status + $ret`
857
858 sleep 1
859
860 n=`expr $n + 1`
861 echo_i "check 'rndc serve-stale status' ($n)"
862 ret=0
863 $RNDCCMD 10.53.0.4 serve-stale status > rndc.out.test$n 2>&1 || ret=1
864 grep '_default: off (stale-answer-ttl=1 max-stale-ttl=604800)' rndc.out.test$n > /dev/null || ret=1
865 if [ $ret != 0 ]; then echo_i "failed"; fi
866 status=`expr $status + $ret`
867
868 n=`expr $n + 1`
869 echo_i "check fail of data.example (serve-stale disabled) ($n)"
870 ret=0
871 $DIG -p ${PORT} @10.53.0.4 data.example TXT > dig.out.test$n
872 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
873 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
874 if [ $ret != 0 ]; then echo_i "failed"; fi
875 status=`expr $status + $ret`
876
877 n=`expr $n + 1`
878 echo_i "check fail of nodata.example (serve-stale disabled) ($n)"
879 ret=0
880 $DIG -p ${PORT} @10.53.0.4 nodata.example TXT > dig.out.test$n
881 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
882 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
883 if [ $ret != 0 ]; then echo_i "failed"; fi
884 status=`expr $status + $ret`
885
886 n=`expr $n + 1`
887 echo_i "check fail of nxdomain.example (serve-stale disabled) ($n)"
888 ret=0
889 $DIG -p ${PORT} @10.53.0.4 nxdomain.example TXT > dig.out.test$n
890 grep "status: SERVFAIL" dig.out.test$n > /dev/null || ret=1
891 grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
892 if [ $ret != 0 ]; then echo_i "failed"; fi
893 status=`expr $status + $ret`
894
895 n=`expr $n + 1`
896 echo_i "verify stale cache statistics (serve-stale disabled) ($n)"
897 ret=0
898 rm -f ns4/named.stats
899 $RNDCCMD 10.53.0.4 stats > /dev/null 2>&1
900 [ -f ns4/named.stats ] || ret=1
901 cp ns4/named.stats ns4/named.stats.$n
902 # Check first 10 lines of Cache DB statistics. After last queries, we expect
903 # one active TXT RRset, one stale TXT, one stale nxrrset TXT, and one
904 # stale NXDOMAIN.
905 grep -A 10 "++ Cache DB RRsets ++" ns4/named.stats.$n > ns4/named.stats.$n.cachedb || ret=1
906 grep "1 TXT" ns4/named.stats.$n.cachedb > /dev/null || ret=1
907 grep "1 #TXT" ns4/named.stats.$n.cachedb > /dev/null || ret=1
908 grep "1 #!TXT" ns4/named.stats.$n.cachedb > /dev/null || ret=1
909 grep "1 #NXDOMAIN" ns4/named.stats.$n.cachedb > /dev/null || ret=1
910 status=`expr $status + $ret`
911 if [ $ret != 0 ]; then echo_i "failed"; fi
912
913 # Dump the cache.
914 n=`expr $n + 1`
915 echo_i "dump the cache (serve-stale disabled) ($n)"
916 ret=0
917 $RNDCCMD 10.53.0.4 dumpdb -cache > rndc.out.test$n 2>&1 || ret=1
918 done=0
919 for i in 0 1 2 3 4 5 6 7 8 9; do
920 grep '^; Dump complete$' ns4/named_dump4.db > /dev/null 2>&1 && done=1
921 if [ $done != 1 ]; then sleep 1; fi
922 done
923 if [ $done != 1 ]; then ret=1; fi
924 status=`expr $status + $ret`
925 if [ $ret != 0 ]; then echo_i "failed"; fi
926
927 echo_i "stop ns4"
928 $PERL $SYSTEMTESTTOP/stop.pl --use-rndc --port ${CONTROLPORT} serve-stale ns4
929
930 # Load the cache as if it was five minutes (RBTDB_VIRTUAL) older.
931 # Since max-stale-ttl defaults to a week, we need to adjust the date by
932 # one week and five minutes.
933 LASTWEEK=`TZ=UTC perl -e 'my $now = time();
934 my $oneWeekAgo = $now - 604800;
935 my $fiveMinutesAgo = $oneWeekAgo - 300;
936 my ($s, $m, $h, $d, $mo, $y) = (localtime($fiveMinutesAgo))[0, 1, 2, 3, 4, 5];
937 printf("%04d%02d%02d%02d%02d%02d", $y+1900, $mo+1, $d, $h, $m, $s);'`
938
939 n=`expr $n + 1`
940 echo_i "mock the cache date to $LASTWEEK (serve-stale disabled) ($n)"
941 ret=0
942 sed -E "s/DATE [0-9]{14}/DATE $LASTWEEK/g" ns4/named_dump4.db > ns4/named_dumpdb4.db.out || ret=1
943 cp ns4/named_dumpdb4.db.out ns4/named_dumpdb4.db
944 if [ $ret != 0 ]; then echo_i "failed"; fi
945 status=`expr $status + $ret`
946
947 echo_i "start ns4"
948 $PERL $SYSTEMTESTTOP/start.pl --noclean --restart --port ${PORT} serve-stale ns4
949
950 sleep 1
951
952 n=`expr $n + 1`
953 echo_i "verify ancient cache statistics (serve-stale disabled) ($n)"
954 ret=0
955 rm -f ns4/named.stats
956 $RNDCCMD 10.53.0.4 stats #> /dev/null 2>&1
957 [ -f ns4/named.stats ] || ret=1
958 cp ns4/named.stats ns4/named.stats.$n
959 # Check first 10 lines of Cache DB statistics. After last queries, we expect
960 # everything to be removed or scheduled to be removed.
961 grep -A 10 "++ Cache DB RRsets ++" ns4/named.stats.$n > ns4/named.stats.$n.cachedb || ret=1
962 grep "#TXT" ns4/named.stats.$n.cachedb > /dev/null && ret=1
963 grep "#!TXT" ns4/named.stats.$n.cachedb > /dev/null && ret=1
964 grep "#NXDOMAIN" ns4/named.stats.$n.cachedb > /dev/null && ret=1
965 status=`expr $status + $ret`
966 if [ $ret != 0 ]; then echo_i "failed"; fi
967
968 echo_i "exit status: $status"
969 [ $status -eq 0 ] || exit 1
970