aboutsummaryrefslogtreecommitdiff
path: root/testdata/rrset_use_cached.rpl
blob: 8420ae02afe6dda90d1f2ebf58d3a3fcf7ee23ab (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
server:
	minimal-responses: no
	serve-expired: yes
	# The value does not matter, we will not simulate delay.
	# We do not want only serve-expired because fetches from that
	# apply a generous PREFETCH_LEEWAY.
	serve-expired-client-timeout: 1000
	# So that we can only have to give one SERVFAIL answer.
	outbound-msg-retry: 0

forward-zone: name: "." forward-addr: 216.0.0.1
CONFIG_END

SCENARIO_BEGIN RRset from cache updates the message TTL.

STEP 1 QUERY
ENTRY_BEGIN
	REPLY RD
	SECTION QUESTION
	www.example.com. IN A
ENTRY_END
; the query is sent to the forwarder - no cache yet.
STEP 2 CHECK_OUT_QUERY
ENTRY_BEGIN
	MATCH qname qtype opcode
	SECTION QUESTION
	www.example.com. IN A
ENTRY_END
STEP 3 REPLY
ENTRY_BEGIN
	MATCH opcode qtype qname
	ADJUST copy_id
	; authoritative answer
	REPLY QR AA RD RA NOERROR
	SECTION QUESTION
	www.example.com. IN A
	SECTION ANSWER
	www.example.com. 5 IN A 10.20.30.40
	SECTION AUTHORITY
	example.com. 10 IN NS ns.example.com.
	SECTION ADDITIONAL
	ns.example.com. 10 IN A 10.20.30.50
ENTRY_END
STEP 4 CHECK_ANSWER
ENTRY_BEGIN
	MATCH all ttl
	REPLY QR RD RA
	SECTION QUESTION
	www.example.com. IN A
	SECTION ANSWER
	www.example.com. 5 IN A 10.20.30.40
	SECTION AUTHORITY
	example.com. 10 IN NS ns.example.com.
	SECTION ADDITIONAL
	ns.example.com. 10 IN A 10.20.30.50
ENTRY_END

; Wait for the A RRSET to expire.
STEP 5 TIME_PASSES ELAPSE 6

STEP 6 QUERY
ENTRY_BEGIN
	REPLY RD
	SECTION QUESTION
	www.example.com. IN A
ENTRY_END
; expired answer will not be served due to serve-expired-client-timeout.
STEP 7 CHECK_OUT_QUERY
ENTRY_BEGIN
	MATCH qname qtype opcode
	SECTION QUESTION
	www.example.com. IN A
ENTRY_END
STEP 8 REPLY
ENTRY_BEGIN
	MATCH opcode qtype qname
	ADJUST copy_id
	; authoritative answer
	REPLY QR AA RD RA NOERROR
	SECTION QUESTION
	www.example.com. IN A
	SECTION ANSWER
	www.example.com. 5 IN A 10.20.30.40
	SECTION AUTHORITY
	example.com. 10 IN NS ns.example.com.
	SECTION ADDITIONAL
	ns.example.com. 10 IN A 10.20.30.50
ENTRY_END
; The cached NS related RRSETs will not be overwritten by the fresh answer.
; The message should have a TTL of 4 instead of 5 from above.
STEP 9 CHECK_ANSWER
ENTRY_BEGIN
	MATCH all ttl
	REPLY QR RD RA
	SECTION QUESTION
	www.example.com. IN A
	SECTION ANSWER
	www.example.com. 5 IN A 10.20.30.40
	SECTION AUTHORITY
	example.com. 4 IN NS ns.example.com.
	SECTION ADDITIONAL
	ns.example.com. 4 IN A 10.20.30.50
ENTRY_END

; Wait for the NS RRSETs to expire.
STEP 10 TIME_PASSES ELAPSE 5

STEP 11 QUERY
ENTRY_BEGIN
	REPLY RD
	SECTION QUESTION
	www.example.com. IN A
ENTRY_END
; The message should be expired, again no expired answer at this point due to
; serve-expired-client-timeout.
STEP 12 CHECK_OUT_QUERY
ENTRY_BEGIN
	MATCH qname qtype opcode
	SECTION QUESTION
	www.example.com. IN A
ENTRY_END
STEP 13 REPLY
ENTRY_BEGIN
	MATCH opcode qtype qname
	ADJUST copy_id
	REPLY QR RD RA SERVFAIL
	SECTION QUESTION
	www.example.com. IN A
ENTRY_END
; The SERVFAIL will trigger the serve-expired-client-timeout logic to try and
; replace the SERVFAIL with a possible cached (expired) answer.
; The A RRSET would be at 0TTL left (not expired) but the message should have
; been updated to use a TTL of 4 so expired by now.
; If the message TTL was not updated (bug), this message would be treated as
; non-expired and the now expired NS related RRSETs would fail sanity checks
; for non-expired messages. The result would be SERVFAIL here.
STEP 14 CHECK_ANSWER
ENTRY_BEGIN
	MATCH all ttl
	REPLY QR RD RA
	SECTION QUESTION
	www.example.com. IN A
	SECTION ANSWER
	www.example.com. 0 IN A 10.20.30.40
	SECTION AUTHORITY
	example.com. 30 IN NS ns.example.com.
	SECTION ADDITIONAL
	ns.example.com. 30 IN A 10.20.30.50
ENTRY_END

SCENARIO_END