summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/samba4-knownfail1
-rw-r--r--source4/torture/smbtorture.c24
-rw-r--r--source4/torture/torture.c8
-rw-r--r--source4/torture/ui.h2
4 files changed, 29 insertions, 6 deletions
diff --git a/source4/samba4-knownfail b/source4/samba4-knownfail
index b8f82b96426..22909585792 100644
--- a/source4/samba4-knownfail
+++ b/source4/samba4-knownfail
@@ -27,3 +27,4 @@ RPC-NETLOGON.*/LogonControl2
RPC-NETLOGON.*/GetAnyDCName
RPC-NETLOGON.*/DsrEnumerateDomainTrusts
RPC-NETLOGON.*/DsrGetDcSiteCoverageW
+RPC-DRSUAPI.*/DsReplicaUpdateRefs
diff --git a/source4/torture/smbtorture.c b/source4/torture/smbtorture.c
index d461828431e..89e13b06452 100644
--- a/source4/torture/smbtorture.c
+++ b/source4/torture/smbtorture.c
@@ -238,6 +238,11 @@ static void usage(poptContext pc)
printf("Tests are:");
+ if (torture_root == NULL) {
+ printf("NO TESTS LOADED\n");
+ exit(1);
+ }
+
for (o = torture_root->children; o; o = o->next) {
printf("\n%s (%s):\n ", o->description, o->name);
@@ -480,6 +485,7 @@ int main(int argc,char *argv[])
int shell = False;
static const char *ui_ops_name = "simple";
const char *basedir = NULL;
+ const char *extra_module = NULL;
static int list_tests = 0;
char *host = NULL, *share = NULL;
enum {OPT_LOADFILE=1000,OPT_UNCLIST,OPT_TIMELIMIT,OPT_DNS, OPT_LIST,
@@ -502,6 +508,7 @@ int main(int argc,char *argv[])
{"parse-dns", 'D', POPT_ARG_STRING, NULL, OPT_DNS, "parse-dns", NULL},
{"dangerous", 'X', POPT_ARG_NONE, NULL, OPT_DANGEROUS,
"run dangerous tests (eg. wiping out password database)", NULL},
+ {"load-module", 0, POPT_ARG_STRING, &extra_module, 0, "load tests from DSO file", "SOFILE"},
{"shell", 0, POPT_ARG_NONE, &shell, True, "Run shell", NULL},
{"target", 'T', POPT_ARG_STRING, &target, 0, "samba3|samba4|other", NULL},
{"async", 'a', POPT_ARG_NONE, NULL, OPT_ASYNC,
@@ -572,9 +579,24 @@ int main(int argc,char *argv[])
alarm(max_runtime);
}
- torture_init();
ldb_global_init();
+ if (extra_module != NULL) {
+ init_module_fn fn = load_module(talloc_autofree_context(), poptGetOptArg(pc));
+
+ if (fn == NULL)
+ d_printf("Unable to load module from %s\n", poptGetOptArg(pc));
+ else {
+ status = fn();
+ if (NT_STATUS_IS_ERR(status)) {
+ d_printf("Error initializing module %s: %s\n",
+ poptGetOptArg(pc), nt_errstr(status));
+ }
+ }
+ } else {
+ torture_init();
+ }
+
if (list_tests) {
print_test_list();
return 0;
diff --git a/source4/torture/torture.c b/source4/torture/torture.c
index 9231fe45edd..803e0c6bd78 100644
--- a/source4/torture/torture.c
+++ b/source4/torture/torture.c
@@ -32,13 +32,16 @@ _PUBLIC_ int torture_failures=1;
_PUBLIC_ int torture_seed=0;
_PUBLIC_ int torture_numasync=100;
-struct torture_suite *torture_root = NULL;
+struct torture_suite *torture_root;
bool torture_register_suite(struct torture_suite *suite)
{
if (!suite)
return true;
+ if (torture_root == NULL)
+ torture_root = talloc_zero(talloc_autofree_context(), struct torture_suite);
+
return torture_suite_add_suite(torture_root, suite);
}
@@ -63,9 +66,6 @@ int torture_init(void)
init_module_fn static_init[] = STATIC_torture_MODULES;
init_module_fn *shared_init = load_samba_modules(NULL, "torture");
- torture_root = talloc_zero(talloc_autofree_context(),
- struct torture_suite);
-
run_init_functions(static_init);
run_init_functions(shared_init);
diff --git a/source4/torture/ui.h b/source4/torture/ui.h
index 289fad59304..71c21223159 100644
--- a/source4/torture/ui.h
+++ b/source4/torture/ui.h
@@ -87,7 +87,7 @@ struct torture_context
bool returncode;
- char *outputdir;
+ const char *outputdir;
int level;
struct event_context *ev;
};