Electroneum
Loading...
Searching...
No Matches
replay.h File Reference
#include "util/netevent.h"
#include "testcode/testpkts.h"
#include "util/rbtree.h"
Include dependency graph for replay.h:

Go to the source code of this file.

Classes

struct  replay_scenario
struct  replay_moment
struct  replay_range
struct  replay_runtime
struct  fake_pending
struct  replay_answer
struct  fake_timer
struct  replay_var

Functions

struct replay_scenario * replay_scenario_read (FILE *in, const char *name, int *lineno)
void replay_scenario_delete (struct replay_scenario *scen)
int replay_var_compare (const void *a, const void *b)
struct fake_timer * replay_get_oldest_timer (struct replay_runtime *runtime)
rbtree_type * macro_store_create (void)
void macro_store_delete (rbtree_type *store)
char * macro_process (rbtree_type *store, struct replay_runtime *runtime, char *text)
char * macro_lookup (rbtree_type *store, char *name)
int macro_assign (rbtree_type *store, char *name, char *value)
void macro_print_debug (rbtree_type *store)
void testbound_selftest (void)

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
; 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_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

Definition in file replay.h.

Function Documentation

◆ macro_assign()

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

Set macro value.

Parameters
storevariable store
namemacro name
valuetext to set it to. Not expanded.
Returns
false on failure.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ macro_lookup()

char * macro_lookup ( rbtree_type * store,
char * name )

Look up a macro value. Like calling ${$name}.

Parameters
storevariable store
namemacro name
Returns
newly malloced string with result or strdup("") if not found. or NULL on malloc failure.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ macro_print_debug()

void macro_print_debug ( rbtree_type * store)

Print macro variables stored as debug info

Here is the call graph for this function:
Here is the caller graph for this function:

◆ macro_process()

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

Apply macro substitution to string.

Parameters
storevariable store.
runtimethe runtime to look up values as needed.
textstring to work on.
Returns
newly malloced string with result.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ macro_store_create()

rbtree_type * macro_store_create ( void )

Create variable storage

Returns
new or NULL on failure.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ macro_store_delete()

void macro_store_delete ( rbtree_type * store)

Delete variable storage

Parameters
storethe macro storage to free up.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ replay_get_oldest_timer()

struct fake_timer * replay_get_oldest_timer ( struct replay_runtime * runtime)

get oldest enabled fake timer

Here is the call graph for this function:
Here is the caller graph for this function:

◆ replay_scenario_delete()

void replay_scenario_delete ( struct replay_scenario * scen)

Delete scenario.

Parameters
scento delete.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ replay_scenario_read()

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

Read a replay scenario from the file.

Parameters
infile to read from.
namename to print in errors.
linenoincremented for every line read.
Returns
: Scenario. NULL if no scenario read.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ replay_var_compare()

int replay_var_compare ( const void * a,
const void * b )

compare two replay_vars

Here is the call graph for this function:
Here is the caller graph for this function:

◆ testbound_selftest()

void testbound_selftest ( void )

testbounds self test

Here is the call graph for this function:
Here is the caller graph for this function: