Cache falloff test.

testbound can pass config options from replay file to unbound.


git-svn-id: file:///svn/unbound/trunk@199 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
Wouter Wijngaards
2007-03-27 09:32:08 +00:00
parent 46aeacc723
commit 4ad4cbdf74
11 changed files with 202 additions and 17 deletions
+9 -10
View File
@@ -234,11 +234,10 @@ make_scenario(char* line)
}
struct replay_scenario*
replay_scenario_read(FILE* in, const char* name)
replay_scenario_read(FILE* in, const char* name, int* lineno)
{
char line[MAX_LINE_LEN];
char *parse;
int lineno = 0;
struct replay_scenario* scen = NULL;
uint16_t ttl = 3600;
ldns_rdf* or = NULL;
@@ -247,7 +246,7 @@ replay_scenario_read(FILE* in, const char* name)
while(fgets(line, MAX_LINE_LEN-1, in)) {
parse=line;
lineno++;
(*lineno)++;
while(isspace(*parse))
parse++;
if(!*parse)
@@ -257,26 +256,26 @@ replay_scenario_read(FILE* in, const char* name)
if(parse_keyword(&parse, "SCENARIO_BEGIN")) {
scen = make_scenario(parse);
if(!scen)
fatal_exit("%d: could not make scen", lineno);
fatal_exit("%d: could not make scen", *lineno);
continue;
}
if(!scen)
fatal_exit("%d: expected SCENARIO", lineno);
fatal_exit("%d: expected SCENARIO", *lineno);
if(parse_keyword(&parse, "RANGE_BEGIN")) {
struct replay_range* newr = replay_range_read(parse,
in, name, &lineno, line, &ttl, &or, &prev);
in, name, lineno, line, &ttl, &or, &prev);
if(!newr)
fatal_exit("%d: bad range", lineno);
fatal_exit("%d: bad range", *lineno);
newr->next_range = scen->range_list;
scen->range_list = newr;
} else if(parse_keyword(&parse, "STEP")) {
struct replay_moment* mom = replay_moment_read(parse,
in, name, &lineno, &ttl, &or, &prev);
in, name, lineno, &ttl, &or, &prev);
if(!mom)
fatal_exit("%d: bad moment", lineno);
fatal_exit("%d: bad moment", *lineno);
if(scen->mom_last &&
scen->mom_last->time_step >= mom->time_step)
fatal_exit("%d: time goes backwards", lineno);
fatal_exit("%d: time goes backwards", *lineno);
if(scen->mom_last)
scen->mom_last->mom_next = mom;
else scen->mom_first = mom;
+3 -1
View File
@@ -263,9 +263,11 @@ struct replay_answer {
* Read a replay scenario from the file.
* @param in: file to read from.
* @param name: name to print in errors.
* @param lineno: incremented for every line read.
* @return: Scenario. NULL if no scenario read.
*/
struct replay_scenario* replay_scenario_read(FILE* in, const char* name);
struct replay_scenario* replay_scenario_read(FILE* in, const char* name,
int* lineno);
/**
* Delete scenario.
+52 -6
View File
@@ -51,6 +51,9 @@
#include "daemon/unbound.c"
#undef main
/** maximum line length for lines in the replay file. */
#define MAX_LINE_LEN 1024
/** give commandline usage for testbound. */
static void
testbound_usage()
@@ -107,25 +110,66 @@ static void
echo_cmdline(int argc, char* argv[])
{
int i;
printf("testbound is starting:");
fprintf(stderr, "testbound is starting:");
for(i=0; i<argc; i++) {
printf(" [%s]", argv[i]);
fprintf(stderr, " [%s]", argv[i]);
}
printf("\n");
fprintf(stderr, "\n");
}
/** process config elements */
static void
setup_config(FILE* in, char* configfile, int* lineno,
int* pass_argc, char* pass_argv[])
{
char line[MAX_LINE_LEN];
char* parse;
FILE* cfg;
sprintf(configfile, "/tmp/testbound_cfg_%u.tmp", (unsigned)getpid());
add_opts("-c", pass_argc, pass_argv);
add_opts(configfile, pass_argc, pass_argv);
cfg = fopen(configfile, "w");
if(!cfg) fatal_exit("could not open %s: %s",
configfile, strerror(errno));
line[MAX_LINE_LEN-1] = 0;
while(fgets(line, MAX_LINE_LEN-1, in)) {
parse = line;
(*lineno)++;
while(isspace(*parse))
parse++;
if(!*parse || parse[0] == ';')
continue;
if(strncmp(parse, "COMMANDLINE", 11) == 0) {
parse[strlen(parse)-1] = 0; /* strip off \n */
add_opts(parse+11, pass_argc, pass_argv);
continue;
}
if(strncmp(parse, "CONFIG_END", 10) == 0) {
fclose(cfg);
return;
}
fputs(line, cfg);
}
fatal_exit("No CONFIG_END in input file");
}
/** read playback file */
static struct replay_scenario*
setup_playback(const char* filename)
setup_playback(const char* filename, char* configfile,
int* pass_argc, char* pass_argv[])
{
struct replay_scenario* scen = NULL;
int lineno = 0;
if(filename) {
FILE *in = fopen(filename, "r");
if(!in) {
perror(filename);
exit(1);
}
scen = replay_scenario_read(in, filename);
setup_config(in, configfile, &lineno, pass_argc, pass_argv);
scen = replay_scenario_read(in, filename, &lineno);
fclose(in);
if(!scen)
fatal_exit("Could not read: %s", filename);
@@ -150,6 +194,7 @@ main(int argc, char* argv[])
int init_optind = optind;
char* init_optarg = optarg;
struct replay_scenario* scen = NULL;
char cfgfile[128];
log_init(NULL);
log_info("Start of %s testbound program.", PACKAGE_STRING);
@@ -180,7 +225,7 @@ main(int argc, char* argv[])
}
/* setup test environment */
scen = setup_playback(playback_file);
scen = setup_playback(playback_file, cfgfile, &pass_argc, pass_argv);
/* init fake event backend */
fake_event_init(scen);
@@ -194,6 +239,7 @@ main(int argc, char* argv[])
/* run the normal daemon */
res = daemon_main(pass_argc, pass_argv);
unlink(cfgfile);
fake_event_cleanup();
for(c=1; c<pass_argc; c++)
free(pass_argv[c]);