Store and use a replay of events for the DNS resolver. Used to test known scenarios to get known outcomes.
File format for replay files.
; unbound.conf options.
; ...
; additional commandline options to pass to unbound
COMMANDLINE cmdline_option
; autotrust key file contents, also adds auto-trust-anchor-file: "x" to cfg
AUTOTRUST_FILE id
; contents of that file
AUTOTRUST_END
; temp file names are echoed as "tmp/xxx.fname"
TEMPFILE_NAME fname
; temp file contents, inline, deleted at end of run
TEMPFILE_CONTENTS fname
; contents of that file
; this creates $INCLUDE /tmp/xxx.fname
$INCLUDE_TEMPFILE fname
TEMPFILE_END
CONFIG_END
; comment line.
SCENARIO_BEGIN name_of_scenario
RANGE_BEGIN start_time end_time
; give ip of the virtual server, it matches any ip if not present.
ADDRESS ip_address
match_entries
RANGE_END
; more RANGE items.
; go to the next moment
STEP time_step event_type [ADDRESS ip_address]
; event_type can be:
o NOTHING - nothing
o QUERY - followed by entry
o CHECK_ANSWER - followed by entry
o CHECK_OUT_QUERY - followed by entry (if copy-id it is also reply).
o REPLY - followed by entry
o TIMEOUT
o TIME_PASSES ELAPSE [seconds] - increase 'now' time counter, can be
a floating point number.
TIME_PASSES EVAL [macro] - expanded for seconds to move time.
o TRAFFIC - like CHECK_ANSWER, causes traffic to flow.
actually the traffic flows before this step is taken.
the step waits for traffic to stop.
o CHECK_AUTOTRUST [id] - followed by FILE_BEGIN [to match] FILE_END.
The file contents is macro expanded before match.
o CHECK_TEMPFILE [fname] - followed by FILE_BEGIN [to match] FILE_END
o INFRA_RTT [ip] [dp] [rtt] - update infra cache entry with rtt.
o ERROR
; following entry starts on the next line, ENTRY_BEGIN.
; more STEP items
SCENARIO_ENDCalculations, a macro-like system: ${$myvar + 3600}
STEP 10 ASSIGN myvar = 3600
; ASSIGN event. '=' is syntactic sugar here. 3600 is some expression.
${..} is macro expanded from its expression. Text substitution.
o $var replaced with its value. var is identifier [azAZ09_]*
o number is that number.
o ${variables and arithmetic }
o +, -, / and *. Note, evaluated left-to-right. Use ${} for brackets.
So again, no precedence rules, so 2+3*4 == ${2+3}*4 = 20.
Do 2+${3*4} to get 24.
o ${function params}
o ${time} is the current time for the simulated unbound.
o ${ctime value} is the text ctime(value), Fri 3 Aug 2009, ...
o ${timeout} is the time until next timeout in comm_timer list.
o ${range lower value upper} checks if lower<=value<=upper
returns value if check succeeds.; Example file
SCENARIO_BEGIN Example scenario
RANGE_BEGIN 0 100
ENTRY_BEGIN
; precoded answers to queries.
ENTRY_END
END_RANGE
STEP 0 QUERY
ENTRY_BEGIN
; query
ENTRY_END
; a query is sent out to the network by resolver.
; precoded answer from range is returned.
; algorithm will do precoded answers from RANGE immediately, except if
; the next step specifically checks for that OUT_QUERY.
; or if none of the precoded answers match.
STEP 1 CHECK_ANSWER
ENTRY_BEGIN
; what the reply should look like
ENTRY_END
; successful termination. (if the answer was OK).
; also, all answers must have been checked with CHECK_ANSWER.
; and, no more pending out_queries (that have not been checked).
SCENARIO_END
Definition in file replay.h.