replay.h File Reference

Store and use a replay of events for the DNS resolver. More...

#include "util/netevent.h"
#include "testcode/ldns-testpkts.h"
#include "util/rbtree.h"

Data Structures

struct  replay_scenario
 A replay scenario. More...
struct  replay_moment
 A replay moment. More...
struct  replay_range
 Range of timesteps, and canned replies to matching queries. More...
struct  replay_runtime
 Replay storage of runtime information. More...
struct  fake_pending
 Pending queries to network, fake replay version. More...
struct  replay_answer
 An answer that is pending to happen. More...
struct  fake_timer
 Timers with callbacks, fake replay version. More...
struct  replay_var
 Replay macro variable. More...

Functions

struct replay_scenarioreplay_scenario_read (FILE *in, const char *name, int *lineno)
 Read a replay scenario from the file.
void replay_scenario_delete (struct replay_scenario *scen)
 Delete scenario.
int replay_var_compare (const void *a, const void *b)
 compare two replay_vars
struct fake_timerreplay_get_oldest_timer (struct replay_runtime *runtime)
 get oldest enabled fake timer
rbtree_tmacro_store_create (void)
 Create variable storage.
void macro_store_delete (rbtree_t *store)
 Delete variable storage.
char * macro_process (rbtree_t *store, struct replay_runtime *runtime, char *text)
 Apply macro substitution to string.
char * macro_lookup (rbtree_t *store, char *name)
 Look up a macro value.
int macro_assign (rbtree_t *store, char *name, char *value)
 Set macro value.
void macro_print_debug (rbtree_t *store)
 Print macro variables stored as debug info.
void testbound_selftest (void)
 testbounds self test

Detailed Description

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
 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 ERROR
 ; following entry starts on the next line, ENTRY_BEGIN.
 ; more STEP items
 SCENARIO_END
 Calculations, 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
 

Function Documentation

struct replay_scenario* replay_scenario_read ( FILE *  in,
const char *  name,
int *  lineno 
) [read]

Read a replay scenario from the file.

Parameters:
in,: file to read from.
name,: name to print in errors.
lineno,: incremented for every line read.
Returns:
: Scenario. NULL if no scenario read.

References fatal_exit(), log_info(), make_scenario(), MAX_LINE_LEN, replay_scenario::mom_first, replay_scenario::mom_last, replay_moment::mom_next, replay_range::next_range, parse_keyword(), replay_scenario::range_list, replay_moment_read(), replay_range_read(), replay_scenario_delete(), and replay_moment::time_step.

Referenced by setup_playback().

void replay_scenario_delete ( struct replay_scenario scen  ) 
rbtree_t* macro_store_create ( void   ) 

Create variable storage.

Returns:
new or NULL on failure.

References rbtree_create(), and replay_var_compare().

Referenced by comm_base_create(), and testbound_selftest().

void macro_store_delete ( rbtree_t store  ) 

Delete variable storage.

Parameters:
store,: the macro storage to free up.

References del_macro(), and traverse_postorder().

Referenced by comm_base_delete(), and testbound_selftest().

char* macro_process ( rbtree_t store,
struct replay_runtime runtime,
char *  text 
)

Apply macro substitution to string.

Parameters:
store,: variable store.
runtime,: the runtime to look up values as needed.
text,: string to work on.
Returns:
newly malloced string with result.

References macro_expand(), and fake_timer::next.

Referenced by autotrust_check(), moment_assign(), testbound_selftest(), and time_passes().

char* macro_lookup ( rbtree_t store,
char *  name 
)

Look up a macro value.

Like calling ${$name}.

Parameters:
store,: variable store
name,: macro name
Returns:
newly malloced string with result or strdup("") if not found. or NULL on malloc failure.

References macro_getvar(), and replay_var::value.

Referenced by testbound_selftest().

int macro_assign ( rbtree_t store,
char *  name,
char *  value 
)

Set macro value.

Parameters:
store,: variable store
name,: macro name
value,: text to set it to. Not expanded.
Returns:
false on failure.

References rbnode_t::key, macro_getvar(), replay_var::name, replay_var::node, rbtree_insert(), and replay_var::value.

Referenced by moment_assign(), and testbound_selftest().

Generated on Thu Apr 22 00:30:17 2010 for unbound by  doxygen 1.6.3