diff options
Diffstat (limited to 'source4/torture/smbtorture.c')
-rw-r--r-- | source4/torture/smbtorture.c | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/source4/torture/smbtorture.c b/source4/torture/smbtorture.c index b615dd66ad..b47127ff3f 100644 --- a/source4/torture/smbtorture.c +++ b/source4/torture/smbtorture.c @@ -425,6 +425,33 @@ const static struct torture_ui_ops quiet_ui_ops = { .test_result = quiet_test_result }; +void run_recipe(struct torture_context *tctx, const char *recipe) +{ + int numlines, i, ret; + char **lines; + + lines = file_lines_load(recipe, &numlines, NULL); + if (lines == NULL) { + fprintf(stderr, "Unable to load file %s\n", recipe); + return; + } + + for (i = 0; i < numlines; i++) { + int argc; + char **argv; + + ret = poptParseArgvString(lines[i], &argc, &argv); + if (ret != 0) { + fprintf(stderr, "Error parsing line\n"); + continue; + } + + run_test(tctx, argv[0]); + } + + talloc_free(lines); +} + void run_shell(struct torture_context *tctx) { char *cline; @@ -523,7 +550,7 @@ int main(int argc,char *argv[]) setlinebuf(stdout); /* we are never interested in SIGPIPE */ - BlockSignals(true,SIGPIPE); + BlockSignals(true, SIGPIPE); pc = poptGetContext("smbtorture", argc, (const char **) argv, long_options, POPT_CONTEXT_KEEP_FIRST); @@ -649,7 +676,9 @@ int main(int argc,char *argv[]) double rate; int unexpected_failures; for (i=2;i<argc_new;i++) { - if (!run_test(torture, argv_new[i])) { + if (argv_new[i][0] == '@') { + run_recipe(torture, argv_new[i]+1); + } else if (!run_test(torture, argv_new[i])) { correct = false; } } |