/**
* Initialize a torture context
*/
-struct torture_context *torture_context_init(struct tevent_context *event_ctx,
- struct torture_results *results)
+struct torture_context *torture_context_init(TALLOC_CTX *mem_ctx,
+ struct tevent_context *event_ctx,
+ struct loadparm_context *lp_ctx,
+ struct torture_results *results,
+ char *outputdir_template)
{
- struct torture_context *torture = talloc_zero(event_ctx,
- struct torture_context);
+ struct torture_context *torture = NULL;
- if (torture == NULL)
+ SMB_ASSERT(event_ctx);
+ SMB_ASSERT(lp_ctx);
+ SMB_ASSERT(results);
+ SMB_ASSERT(outputdir_template);
+
+ torture = talloc_zero(mem_ctx, struct torture_context);
+ if (torture == NULL) {
return NULL;
+ }
torture->ev = event_ctx;
- torture->results = talloc_reference(torture, results);
+ torture->lp_ctx = lp_ctx;
+ torture->results = results;
/*
* We start with an empty subunit prefix
*/
torture_subunit_prefix_reset(torture, NULL);
+ torture->outputdir = mkdtemp(outputdir_template);
+ if (torture->outputdir == NULL) {
+ TALLOC_FREE(torture);
+ return NULL;
+ }
+
return torture;
}
const char *name);
int torture_suite_children_count(const struct torture_suite *suite);
-struct torture_context *torture_context_init(struct tevent_context *event_ctx, struct torture_results *results);
+struct torture_context *torture_context_init(TALLOC_CTX *mem_ctx,
+ struct tevent_context *event_ctx,
+ struct loadparm_context *lp_ctx,
+ struct torture_results *results,
+ char *outputdir_template);
struct torture_results *torture_results_init(TALLOC_CTX *mem_ctx, const struct torture_ui_ops *ui_ops);
OPT_DANGEROUS,OPT_SMB_PORTS,OPT_ASYNC,OPT_NUMPROGS,
OPT_EXTRA_USER,};
TALLOC_CTX *mem_ctx = NULL;
+ struct tevent_context *ev = NULL;
struct loadparm_context *lp_ctx = NULL;
bool ok;
}
results = torture_results_init(mem_ctx, ui_ops);
+ if (results == NULL) {
+ perror("torture_results_init() failed");
+ poptFreeContext(pc);
+ talloc_free(mem_ctx);
+ return 1;
+ }
+
+ ev = s4_event_context_init(mem_ctx);
+ if (ev == NULL) {
+ perror("s4_event_context_init() failed");
+ poptFreeContext(pc);
+ talloc_free(mem_ctx);
+ return 1;
+ }
- torture = torture_context_init(s4_event_context_init(mem_ctx),
- results);
if (basedir != NULL) {
if (basedir[0] != '/') {
fprintf(stderr, "Please specify an absolute path to --basedir\n");
talloc_free(mem_ctx);
return 1;
}
- outputdir = talloc_asprintf(torture, "%s/smbtortureXXXXXX", basedir);
+ outputdir = talloc_asprintf(mem_ctx, "%s/smbtortureXXXXXX", basedir);
} else {
- char *pwd = talloc_size(torture, PATH_MAX);
+ char *pwd = talloc_size(mem_ctx, PATH_MAX);
if (!getcwd(pwd, PATH_MAX)) {
fprintf(stderr, "Unable to determine current working directory\n");
poptFreeContext(pc);
talloc_free(mem_ctx);
return 1;
}
- outputdir = talloc_asprintf(torture, "%s/smbtortureXXXXXX", pwd);
+ outputdir = talloc_asprintf(mem_ctx, "%s/smbtortureXXXXXX", pwd);
}
if (!outputdir) {
fprintf(stderr, "Could not allocate per-run output dir\n");
talloc_free(mem_ctx);
return 1;
}
- torture->outputdir = mkdtemp(outputdir);
- if (!torture->outputdir) {
- perror("Failed to make temp output dir");
+
+ torture = torture_context_init(mem_ctx, ev, lp_ctx, results, outputdir);
+ if (torture == NULL) {
+ perror("torture_context_init() failed");
poptFreeContext(pc);
talloc_free(mem_ctx);
return 1;
}
- torture->lp_ctx = lp_ctx;
-
gensec_init();
if (shell) {
if (torture->results->returncode && correct) {
poptFreeContext(pc);
+ talloc_free(torture);
talloc_free(mem_ctx);
return(0);
} else {
poptFreeContext(pc);
+ talloc_free(torture);
talloc_free(mem_ctx);
return(1);
}