mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-30 14:07:59 +00:00
Added system test for stale-refresh-time
This test works as follow: - Query for data.example rrset. - Sleep until its TTL expires (2 secs). - Disable authoritative server. - Query for data.example again. - Since server is down, answer come from stale cache, which has a configured stale-answer-ttl of 3 seconds. - Enable authoritative server. - Query for data.example again - Since last query before activating authoritative server failed, and since 'stale-refresh-time' seconds hasn't elapsed yet, answer should come from stale cache and not from the authoritative server.
This commit is contained in:
@@ -471,10 +471,6 @@ grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
|
|||||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||||
status=$((status+ret))
|
status=$((status+ret))
|
||||||
|
|
||||||
# keep track of time so we can access these rrset later,
|
|
||||||
# when we expect them to become ancient.
|
|
||||||
t1=`$PERL -e 'print time()'`
|
|
||||||
|
|
||||||
n=$((n+1))
|
n=$((n+1))
|
||||||
echo_i "prime cache othertype.example (low max-stale-ttl) ($n)"
|
echo_i "prime cache othertype.example (low max-stale-ttl) ($n)"
|
||||||
ret=0
|
ret=0
|
||||||
@@ -502,6 +498,10 @@ grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
|
|||||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||||
status=$((status+ret))
|
status=$((status+ret))
|
||||||
|
|
||||||
|
# keep track of time so we can access these rrset later,
|
||||||
|
# when we expect them to become ancient.
|
||||||
|
t1=`$PERL -e 'print time()'`
|
||||||
|
|
||||||
n=$((n+1))
|
n=$((n+1))
|
||||||
echo_i "verify prime cache statistics (low max-stale-ttl) ($n)"
|
echo_i "verify prime cache statistics (low max-stale-ttl) ($n)"
|
||||||
ret=0
|
ret=0
|
||||||
@@ -656,6 +656,100 @@ grep "ANSWER: 0," dig.out.test$n > /dev/null || ret=1
|
|||||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||||
status=$((status+ret))
|
status=$((status+ret))
|
||||||
|
|
||||||
|
# Test stale-refresh-time when serve-stale is enabled via rndc.
|
||||||
|
# Steps for testing stale-refresh-time option (default).
|
||||||
|
# 1. Prime cache data.example txt
|
||||||
|
# 2. Disable responses from authoritative server.
|
||||||
|
# 3. Sleep for TTL duration so rrset TTL expires (2 sec)
|
||||||
|
# 4. Query data.example
|
||||||
|
# 5. Check if response come from stale rrset (3 sec TTL)
|
||||||
|
# 6. Enable responses from authoritative server.
|
||||||
|
# 7. Query data.example
|
||||||
|
# 8. Check if response come from stale rrset, since the query
|
||||||
|
# is within stale-refresh-time window.
|
||||||
|
n=$((n+1))
|
||||||
|
echo_i "flush cache, enable responses from authoritative server ($n)"
|
||||||
|
ret=0
|
||||||
|
$RNDCCMD 10.53.0.1 flushtree example > rndc.out.test$n.1 2>&1 || ret=1
|
||||||
|
$DIG -p ${PORT} @10.53.0.2 txt enable > dig.out.test$n
|
||||||
|
grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
|
||||||
|
grep "TXT.\"1\"" dig.out.test$n > /dev/null || ret=1
|
||||||
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||||
|
status=$((status+ret))
|
||||||
|
|
||||||
|
n=$((n+1))
|
||||||
|
echo_i "check 'rndc serve-stale status' ($n)"
|
||||||
|
ret=0
|
||||||
|
$RNDCCMD 10.53.0.1 serve-stale status > rndc.out.test$n 2>&1 || ret=1
|
||||||
|
grep '_default: on (rndc) (stale-answer-ttl=3 max-stale-ttl=20)' rndc.out.test$n > /dev/null || ret=1
|
||||||
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||||
|
status=$((status+ret))
|
||||||
|
|
||||||
|
# Step 1.
|
||||||
|
n=$((n+1))
|
||||||
|
echo_i "prime cache data.example (stale-refresh-time rndc) ($n)"
|
||||||
|
ret=0
|
||||||
|
$DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
|
||||||
|
grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
|
||||||
|
grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
|
||||||
|
grep "data\.example\..*2.*IN.*TXT.*A text record with a 2 second ttl" dig.out.test$n > /dev/null || ret=1
|
||||||
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||||
|
status=$((status+ret))
|
||||||
|
|
||||||
|
# Step 2.
|
||||||
|
n=$((n+1))
|
||||||
|
echo_i "disable responses from authoritative server ($n)"
|
||||||
|
ret=0
|
||||||
|
$DIG -p ${PORT} @10.53.0.2 txt disable > dig.out.test$n
|
||||||
|
grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
|
||||||
|
grep "TXT.\"0\"" dig.out.test$n > /dev/null || ret=1
|
||||||
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||||
|
status=$((status+ret))
|
||||||
|
|
||||||
|
# Step 3.
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
# Step 4.
|
||||||
|
n=$((n+1))
|
||||||
|
echo_i "sending query for test ($n)"
|
||||||
|
$DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$n
|
||||||
|
|
||||||
|
# Step 5.
|
||||||
|
echo_i "check stale data.example (stale-refresh-time rndc) ($n)"
|
||||||
|
ret=0
|
||||||
|
grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
|
||||||
|
grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
|
||||||
|
grep "data\.example\..*3.*IN.*TXT.*A text record with a 2 second ttl" dig.out.test$n > /dev/null || ret=1
|
||||||
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||||
|
status=$((status+ret))
|
||||||
|
|
||||||
|
# Step 6.
|
||||||
|
n=$((n+1))
|
||||||
|
echo_i "enable responses from authoritative server ($n)"
|
||||||
|
ret=0
|
||||||
|
$DIG -p ${PORT} @10.53.0.2 txt enable > dig.out.test$n
|
||||||
|
grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
|
||||||
|
grep "TXT.\"1\"" dig.out.test$n > /dev/null || ret=1
|
||||||
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||||
|
status=$((status+ret))
|
||||||
|
|
||||||
|
# Step 7.
|
||||||
|
echo_i "sending query for test $((n+1))"
|
||||||
|
$DIG -p ${PORT} @10.53.0.1 data.example TXT > dig.out.test$((n+1)) &
|
||||||
|
|
||||||
|
# ensure the file has been written before proceeding
|
||||||
|
waitfile dig.out.test$((n+1))
|
||||||
|
|
||||||
|
# Step 8.
|
||||||
|
n=$((n+1))
|
||||||
|
echo_i "check stale data.example comes from cache (stale-refresh-time rndc) ($n)"
|
||||||
|
ret=0
|
||||||
|
grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
|
||||||
|
grep "ANSWER: 1," dig.out.test$n > /dev/null || ret=1
|
||||||
|
grep "data\.example\..*3.*IN.*TXT.*A text record with a 2 second ttl" dig.out.test$n > /dev/null || ret=1
|
||||||
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||||
|
status=$((status+ret))
|
||||||
|
|
||||||
#
|
#
|
||||||
# Now test server with no serve-stale options set.
|
# Now test server with no serve-stale options set.
|
||||||
#
|
#
|
||||||
|
Reference in New Issue
Block a user