1 ; config options 2 server: 3 target-fetch-policy: "0 0 0 0 0" 4 qname-minimisation: no 5 minimal-responses: no 6 serve-expired: yes 7 serve-expired-reply-ttl: 123 8 ; at least one second, so we can time skip past the timer in the 9 ; testbound script steps, but also reply within the time. 10 serve-expired-client-timeout: 1200 11 module-config: "cachedb iterator" 12 discard-timeout: 3000 13 ede: yes 14 ede-serve-expired: yes 15 16 cachedb: 17 backend: "testframe" 18 secret-seed: "testvalue" 19 cachedb-check-when-serve-expired: yes 20 21 stub-zone: 22 name: "." 23 stub-addr: 193.0.14.129 24 CONFIG_END 25 26 SCENARIO_BEGIN Test cachedb and serve-expired-client-timeout. 27 28 ; K.ROOT-SERVERS.NET. 29 RANGE_BEGIN 0 400 30 ADDRESS 193.0.14.129 31 ENTRY_BEGIN 32 MATCH opcode qtype qname 33 ADJUST copy_id 34 REPLY QR NOERROR 35 SECTION QUESTION 36 . IN NS 37 SECTION ANSWER 38 . IN NS K.ROOT-SERVERS.NET. 39 SECTION ADDITIONAL 40 K.ROOT-SERVERS.NET. IN A 193.0.14.129 41 ENTRY_END 42 43 ENTRY_BEGIN 44 MATCH opcode subdomain 45 ADJUST copy_id copy_query 46 REPLY QR NOERROR 47 SECTION QUESTION 48 com. IN NS 49 SECTION AUTHORITY 50 com. IN NS a.gtld-servers.net. 51 SECTION ADDITIONAL 52 a.gtld-servers.net. IN A 192.5.6.30 53 ENTRY_END 54 RANGE_END 55 56 ; a.gtld-servers.net. 57 RANGE_BEGIN 0 400 58 ADDRESS 192.5.6.30 59 ENTRY_BEGIN 60 MATCH opcode subdomain 61 ADJUST copy_id copy_query 62 REPLY QR NOERROR 63 SECTION QUESTION 64 example.com. IN NS 65 SECTION AUTHORITY 66 example.com. IN NS ns2.example.com. 67 SECTION ADDITIONAL 68 ns2.example.com. IN A 1.2.3.5 69 ENTRY_END 70 71 ENTRY_BEGIN 72 MATCH opcode subdomain 73 ADJUST copy_id copy_query 74 REPLY QR NOERROR 75 SECTION QUESTION 76 foo.com. IN NS 77 SECTION AUTHORITY 78 foo.com. IN NS ns.example.com. 79 ENTRY_END 80 RANGE_END 81 82 ; ns2.example.com. 83 RANGE_BEGIN 0 60 84 ADDRESS 1.2.3.5 85 ENTRY_BEGIN 86 MATCH opcode qname qtype 87 REPLY QR AA NOERROR 88 SECTION QUESTION 89 www.example.com. IN A 90 SECTION ANSWER 91 www.example.com. 200 IN A 1.2.3.4 92 ENTRY_END 93 94 ENTRY_BEGIN 95 MATCH opcode qname qtype 96 REPLY QR AA NOERROR 97 SECTION QUESTION 98 www2.example.com. IN A 99 SECTION ANSWER 100 ; TTL lower than serve-expired-reply-ttl on purpose 101 www2.example.com. 100 IN A 1.2.3.5 102 ENTRY_END 103 RANGE_END 104 105 ; ns2.example.com. - after a change 106 RANGE_BEGIN 80 90 107 ADDRESS 1.2.3.5 108 ENTRY_BEGIN 109 MATCH opcode qname qtype 110 REPLY QR AA NOERROR 111 SECTION QUESTION 112 www.example.com. IN A 113 SECTION ANSWER 114 www.example.com. 200 IN A 1.2.3.6 115 ENTRY_END 116 117 ENTRY_BEGIN 118 MATCH opcode qname qtype 119 REPLY QR AA NOERROR 120 SECTION QUESTION 121 www2.example.com. IN A 122 SECTION ANSWER 123 ; TTL lower than serve-expired-reply-ttl on purpose 124 www2.example.com. 100 IN A 1.2.3.7 125 ENTRY_END 126 RANGE_END 127 128 ; ns2.example.com. - steps 90-120 not responding. 129 130 ; ns2.example.com. - after a change 131 RANGE_BEGIN 130 140 132 ADDRESS 1.2.3.5 133 ENTRY_BEGIN 134 MATCH opcode qname qtype 135 REPLY QR AA NOERROR 136 SECTION QUESTION 137 www.example.com. IN A 138 SECTION ANSWER 139 www.example.com. 200 IN A 1.2.3.8 140 ENTRY_END 141 142 ENTRY_BEGIN 143 MATCH opcode qname qtype 144 REPLY QR AA NOERROR 145 SECTION QUESTION 146 www2.example.com. IN A 147 SECTION ANSWER 148 ; TTL lower than serve-expired-reply-ttl on purpose 149 www2.example.com. 100 IN A 1.2.3.9 150 ENTRY_END 151 RANGE_END 152 153 ; ns2.example.com. - steps 150-160 not responding. 154 155 ; ns2.example.com. - after a change 156 RANGE_BEGIN 170 200 157 ADDRESS 1.2.3.5 158 ENTRY_BEGIN 159 MATCH opcode qname qtype 160 REPLY QR AA NOERROR 161 SECTION QUESTION 162 www.example.com. IN A 163 SECTION ANSWER 164 www.example.com. 200 IN A 1.2.3.10 165 ENTRY_END 166 167 ENTRY_BEGIN 168 MATCH opcode qname qtype 169 REPLY QR AA NOERROR 170 SECTION QUESTION 171 www2.example.com. IN A 172 SECTION ANSWER 173 www2.example.com. 100 IN A 1.2.3.11 174 ENTRY_END 175 RANGE_END 176 177 ; make time not 0 178 STEP 2 TIME_PASSES ELAPSE 212 179 180 ; Get an entry in cache. 181 STEP 4 QUERY 182 ENTRY_BEGIN 183 REPLY RD 184 SECTION QUESTION 185 www.example.com. IN A 186 ENTRY_END 187 188 ; get the answer for it 189 STEP 10 CHECK_ANSWER 190 ENTRY_BEGIN 191 MATCH all 192 REPLY QR RD RA NOERROR 193 SECTION QUESTION 194 www.example.com. IN A 195 SECTION ANSWER 196 www.example.com. 200 IN A 1.2.3.4 197 ENTRY_END 198 199 ; Get another query in cache. 200 STEP 20 QUERY 201 ENTRY_BEGIN 202 REPLY RD 203 SECTION QUESTION 204 www2.example.com. IN A 205 ENTRY_END 206 207 ; get the answer for it 208 STEP 30 CHECK_ANSWER 209 ENTRY_BEGIN 210 MATCH all 211 REPLY QR RD RA NOERROR 212 SECTION QUESTION 213 www2.example.com. IN A 214 SECTION ANSWER 215 www2.example.com. 100 IN A 1.2.3.5 216 ENTRY_END 217 218 ; www.example.com and www2.example.com are in cache, www2 in cachedb. 219 STEP 40 FLUSH_MESSAGE www2.example.com. IN A 220 ; now www in cache, www2 not in cache, www2 in cachedb. 221 ; because of the client timeout, it should be able to use the 222 ; response from cachedb for www2. 223 224 ; make 2 seconds pass to decrement the TTL on the response, 225 ; the upstream TTL would be 200, cachedb 198. 226 STEP 48 TIME_PASSES ELAPSE 2 227 228 STEP 50 QUERY 229 ENTRY_BEGIN 230 REPLY RD 231 SECTION QUESTION 232 www2.example.com. IN A 233 ENTRY_END 234 235 STEP 60 CHECK_ANSWER 236 ENTRY_BEGIN 237 MATCH all ttl 238 REPLY QR RD RA NOERROR 239 SECTION QUESTION 240 www2.example.com. IN A 241 SECTION ANSWER 242 www2.example.com. 98 IN A 1.2.3.5 243 ENTRY_END 244 245 ; make both cache and cachedb expired 246 STEP 70 TIME_PASSES ELAPSE 200 247 248 ; www and www2 expired in cache, www2 expired in cachedb. 249 ; the query should now try to resolve and complete within the 250 ; client timeout, and return the upstream version. 251 ; the upstream is changed to give a different one now. 252 STEP 80 QUERY 253 ENTRY_BEGIN 254 REPLY RD 255 SECTION QUESTION 256 www2.example.com. IN A 257 ENTRY_END 258 259 STEP 90 CHECK_ANSWER 260 ENTRY_BEGIN 261 MATCH all ttl 262 REPLY QR RD RA NOERROR 263 SECTION QUESTION 264 www2.example.com. IN A 265 SECTION ANSWER 266 www2.example.com. 100 IN A 1.2.3.7 267 ENTRY_END 268 269 ; expire the data again 270 STEP 100 TIME_PASSES ELAPSE 200 271 272 ; the query should now try to resolve, but the upstream is not 273 ; responsive for several testbound steps. When the timer expires, 274 ; the expired answer should be returned. 275 276 ; www2 expired in cache and www2 expired in cachedb. 277 STEP 110 QUERY 278 ENTRY_BEGIN 279 REPLY RD DO 280 SECTION QUESTION 281 www2.example.com. IN A 282 ENTRY_END 283 284 ; make 2 seconds pass to go past the client timeout 285 STEP 112 TIME_PASSES ELAPSE 2 286 287 STEP 120 CHECK_ANSWER 288 ENTRY_BEGIN 289 MATCH all ttl ede=3 290 REPLY QR RD RA DO NOERROR 291 SECTION QUESTION 292 www2.example.com. IN A 293 SECTION ANSWER 294 www2.example.com. 100 IN A 1.2.3.7 295 ENTRY_END 296 297 ; make traffic flow to resolve the query, server responds. 298 STEP 130 TRAFFIC 299 300 ; expire the data again 301 STEP 140 TIME_PASSES ELAPSE 200 302 303 ; The client query tries to resolve, but gets no immediate answer, 304 ; so the expired data is used. But the expired data is in cache and 305 ; the query is not in cachedb. 306 STEP 150 QUERY 307 ENTRY_BEGIN 308 REPLY RD DO 309 SECTION QUESTION 310 www.example.com. IN A 311 ENTRY_END 312 313 ; make 2 seconds pass to go past the client timeout 314 STEP 152 TIME_PASSES ELAPSE 2 315 316 STEP 160 CHECK_ANSWER 317 ENTRY_BEGIN 318 MATCH all ttl ede=3 319 REPLY QR RD RA DO NOERROR 320 SECTION QUESTION 321 www.example.com. IN A 322 SECTION ANSWER 323 www.example.com. 123 IN A 1.2.3.4 324 ENTRY_END 325 326 ; make traffic flow to resolve the query, server responds. 327 STEP 170 TRAFFIC 328 329 ; now the client query tries to resolve, and completes within the client 330 ; timeout, but there is expired data in cache but not in cachedb. 331 STEP 180 QUERY 332 ENTRY_BEGIN 333 REPLY RD 334 SECTION QUESTION 335 www2.example.com. IN A 336 ENTRY_END 337 338 STEP 190 CHECK_ANSWER 339 ENTRY_BEGIN 340 MATCH all ttl 341 REPLY QR RD RA NOERROR 342 SECTION QUESTION 343 www2.example.com. IN A 344 SECTION ANSWER 345 www2.example.com. 100 IN A 1.2.3.11 346 ENTRY_END 347 348 SCENARIO_END 349