Unix SMB/CIFS implementation.
SMB torture tester
Copyright (C) Andrew Tridgell 1997-2003
- Copyright (C) Jelmer Vernooij 2006
+ Copyright (C) Jelmer Vernooij 2006-2008
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include "libcli/libcli.h"
#include "lib/ldb/include/ldb.h"
#include "lib/events/events.h"
-#include "dynconfig.h"
+#include "dynconfig/dynconfig.h"
-#include "torture/torture.h"
-#include "build.h"
-#include "lib/util/dlinklist.h"
+#include "torture/smbtorture.h"
+#include "../lib/util/dlinklist.h"
#include "librpc/rpc/dcerpc.h"
#include "param/param.h"
+#include "auth/credentials/credentials.h"
+
static bool run_matching(struct torture_context *torture,
const char *prefix,
const char *expr,
{
}
+static void subunit_print_testname(struct torture_context *ctx,
+ struct torture_tcase *tcase,
+ struct torture_test *test)
+{
+ if (!strcmp(tcase->name, test->name)) {
+ printf("%s", test->name);
+ } else {
+ printf("%s.%s", tcase->name, test->name);
+ }
+}
+
static void subunit_test_start(struct torture_context *ctx,
struct torture_tcase *tcase,
struct torture_test *test)
{
- printf("test: %s\n", test->name);
+ printf("test: ");
+ subunit_print_testname(ctx, tcase, test);
+ printf("\n");
}
static void subunit_test_result(struct torture_context *context,
{
switch (res) {
case TORTURE_OK:
- printf("success: %s", context->active_test->name);
+ printf("success: ");
break;
case TORTURE_FAIL:
- printf("failure: %s", context->active_test->name);
+ printf("failure: ");
break;
case TORTURE_ERROR:
- printf("error: %s", context->active_test->name);
+ printf("error: ");
break;
case TORTURE_SKIP:
- printf("skip: %s", context->active_test->name);
+ printf("skip: ");
break;
}
+ subunit_print_testname(context, context->active_tcase, context->active_test);
+
if (reason)
printf(" [\n%s\n]", reason);
printf("\n");
.test_result = quiet_test_result
};
-void run_shell(struct torture_context *tctx)
+static void run_shell(struct torture_context *tctx)
{
char *cline;
int argc;
run_test(tctx, argv[1]);
}
}
+ free(cline);
}
}
const char *basedir = NULL;
const char *extra_module = NULL;
static int list_tests = 0;
+ int num_extra_users = 0;
enum {OPT_LOADFILE=1000,OPT_UNCLIST,OPT_TIMELIMIT,OPT_DNS, OPT_LIST,
- OPT_DANGEROUS,OPT_SMB_PORTS,OPT_ASYNC,OPT_NUMPROGS};
+ OPT_DANGEROUS,OPT_SMB_PORTS,OPT_ASYNC,OPT_NUMPROGS,OPT_EXTRA_USER};
struct poptOption long_options[] = {
POPT_AUTOHELP
"number of simultaneous async requests", NULL},
{"maximum-runtime", 0, POPT_ARG_INT, &max_runtime, 0,
"set maximum time for smbtorture to live", "seconds"},
+ {"extra-user", 0, POPT_ARG_STRING, NULL, OPT_EXTRA_USER,
+ "extra user credentials", NULL},
POPT_COMMON_SAMBA
POPT_COMMON_CONNECTION
POPT_COMMON_CREDENTIALS
case OPT_SMB_PORTS:
lp_set_cmdline(cmdline_lp_ctx, "smb ports", poptGetOptArg(pc));
break;
+ case OPT_EXTRA_USER:
+ {
+ char *option = talloc_asprintf(NULL, "torture:extra_user%u",
+ ++num_extra_users);
+ char *value = poptGetOptArg(pc);
+ lp_set_cmdline(cmdline_lp_ctx, option, value);
+ talloc_free(option);
+ }
+ break;
}
}
alarm(max_runtime);
}
- ldb_global_init();
-
if (extra_module != NULL) {
init_module_fn fn = load_module(talloc_autofree_context(), poptGetOptArg(pc));
exit(1);
}
- torture = torture_context_init(talloc_autofree_context(), ui_ops);
+ torture = torture_context_init(s4_event_context_init(NULL), ui_ops);
if (basedir != NULL) {
if (basedir[0] != '/') {
fprintf(stderr, "Please specify an absolute path to --basedir\n");