summaryrefslogtreecommitdiff
path: root/source4/torture
diff options
context:
space:
mode:
Diffstat (limited to 'source4/torture')
-rw-r--r--source4/torture/config.mk5
-rw-r--r--source4/torture/shell.c79
-rw-r--r--source4/torture/smbtorture.c77
-rw-r--r--source4/torture/smbtorture.h5
-rw-r--r--source4/torture/wscript_build2
5 files changed, 107 insertions, 61 deletions
diff --git a/source4/torture/config.mk b/source4/torture/config.mk
index 25e9b5377b..09af078d80 100644
--- a/source4/torture/config.mk
+++ b/source4/torture/config.mk
@@ -280,7 +280,10 @@ PRIVATE_DEPENDENCIES = \
# End BINARY smbtorture
#################################
-smbtorture_OBJ_FILES = $(torturesrcdir)/smbtorture.o $(torturesrcdir)/torture.o
+smbtorture_OBJ_FILES = \
+ $(torturesrcdir)/smbtorture.o \
+ $(torturesrcdir)/torture.o \
+ $(torturesrcdir)/shell.o
PUBLIC_HEADERS += $(torturesrcdir)/smbtorture.h
MANPAGES += $(torturesrcdir)/man/smbtorture.1
diff --git a/source4/torture/shell.c b/source4/torture/shell.c
new file mode 100644
index 0000000000..1da4c59081
--- /dev/null
+++ b/source4/torture/shell.c
@@ -0,0 +1,79 @@
+/*
+ Unix SMB/CIFS implementation.
+ SMB torture tester
+ Copyright (C) Andrew Tridgell 1997-2003
+ 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
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "includes.h"
+#include "system/readline.h"
+#include "lib/smbreadline/smbreadline.h"
+#include "torture/smbtorture.h"
+
+void torture_shell(struct torture_context *tctx)
+{
+ char *cline;
+ int argc;
+ const char **argv;
+ int ret;
+
+ while (1) {
+ cline = smb_readline("torture> ", NULL, NULL);
+
+ if (cline == NULL)
+ return;
+
+#if HAVE_ADD_HISTORY
+ add_history(cline);
+#endif
+
+ ret = poptParseArgvString(cline, &argc, &argv);
+ if (ret != 0) {
+ fprintf(stderr, "Error parsing line\n");
+ continue;
+ }
+
+ if (!strcmp(argv[0], "quit")) {
+ return;
+ } else if (!strcmp(argv[0], "list")) {
+ torture_print_tests(true);
+ } else if (!strcmp(argv[0], "set")) {
+ if (argc < 3) {
+ lp_dump(tctx->lp_ctx, stdout,
+ false /* show_defaults */,
+ 0 /* skip services */);
+ } else {
+ char *name = talloc_asprintf(NULL, "torture:%s", argv[1]);
+ lp_set_cmdline(tctx->lp_ctx, name, argv[2]);
+ talloc_free(name);
+ }
+ } else if (!strcmp(argv[0], "help")) {
+ fprintf(stderr, "Available commands:\n"
+ " help - This help command\n"
+ " list - List the available\n"
+ " run - Run test\n"
+ " set - Change variables\n"
+ "\n");
+ } else if (!strcmp(argv[0], "run")) {
+ if (argc < 2) {
+ fprintf(stderr, "Usage: run TEST-NAME [OPTIONS...]\n");
+ } else {
+ torture_run_named_tests(tctx, argv[1]);
+ }
+ }
+ free(cline);
+ }
+}
diff --git a/source4/torture/smbtorture.c b/source4/torture/smbtorture.c
index 96014a2206..b7140d70a5 100644
--- a/source4/torture/smbtorture.c
+++ b/source4/torture/smbtorture.c
@@ -40,7 +40,7 @@
static bool run_matching(struct torture_context *torture,
const char *prefix,
const char *expr,
- char **restricted,
+ const char **restricted,
struct torture_suite *suite,
bool *matched)
{
@@ -94,8 +94,8 @@ static bool run_matching(struct torture_context *torture,
/****************************************************************************
run a specified test or "ALL"
****************************************************************************/
-static bool run_test(struct torture_context *torture, const char *name,
- char **restricted)
+bool torture_run_named_tests(struct torture_context *torture, const char *name,
+ const char **restricted)
{
bool ret = true;
bool matched = false;
@@ -249,6 +249,15 @@ static void print_test_list(void)
}
}
+void torture_print_tests(bool structured)
+{
+ if (structured) {
+ print_structured_test_list();
+ } else {
+ print_test_list();
+ }
+}
+
_NORETURN_ static void usage(poptContext pc)
{
poptPrintUsage(pc, stdout, 0);
@@ -377,61 +386,6 @@ const static struct torture_ui_ops std_ui_ops = {
.progress = simple_progress,
};
-static void run_shell(struct torture_context *tctx)
-{
- char *cline;
- int argc;
- const char **argv;
- int ret;
-
- while (1) {
- cline = smb_readline("torture> ", NULL, NULL);
-
- if (cline == NULL)
- return;
-
-#if HAVE_ADD_HISTORY
- add_history(cline);
-#endif
-
- ret = poptParseArgvString(cline, &argc, &argv);
- if (ret != 0) {
- fprintf(stderr, "Error parsing line\n");
- continue;
- }
-
- if (!strcmp(argv[0], "quit")) {
- return;
- } else if (!strcmp(argv[0], "list")) {
- print_structured_test_list();
- } else if (!strcmp(argv[0], "set")) {
- if (argc < 3) {
- lp_dump(tctx->lp_ctx, stdout,
- false /* show_defaults */,
- 0 /* skip services */);
- } else {
- char *name = talloc_asprintf(NULL, "torture:%s", argv[1]);
- lp_set_cmdline(tctx->lp_ctx, name, argv[2]);
- talloc_free(name);
- }
- } else if (!strcmp(argv[0], "help")) {
- fprintf(stderr, "Available commands:\n"
- " help - This help command\n"
- " list - List the available\n"
- " run - Run test\n"
- " set - Change variables\n"
- "\n");
- } else if (!strcmp(argv[0], "run")) {
- if (argc < 2) {
- fprintf(stderr, "Usage: run TEST-NAME [OPTIONS...]\n");
- } else {
- run_test(tctx, argv[1]);
- }
- }
- free(cline);
- }
-}
-
/****************************************************************************
main program
****************************************************************************/
@@ -448,6 +402,7 @@ int main(int argc,char *argv[])
poptContext pc;
static const char *target = "other";
NTSTATUS status;
+ int shell = false;
static const char *ui_ops_name = "subunit";
const char *basedir = NULL;
const char *extra_module = NULL;
@@ -477,6 +432,7 @@ int main(int argc,char *argv[])
{"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,
"run async tests", NULL},
@@ -695,9 +651,12 @@ int main(int argc,char *argv[])
if (argc_new == 0) {
printf("You must specify a testsuite to run, or 'ALL'\n");
+ } else if (shell) {
+ torture_shell(torture);
} else {
for (i=2;i<argc_new;i++) {
- if (!run_test(torture, argv_new[i], restricted)) {
+ if (!torture_run_named_tests(torture, argv_new[i],
+ (const char **)restricted)) {
correct = false;
}
}
diff --git a/source4/torture/smbtorture.h b/source4/torture/smbtorture.h
index b45ce65f50..8ad58bf71c 100644
--- a/source4/torture/smbtorture.h
+++ b/source4/torture/smbtorture.h
@@ -36,6 +36,11 @@ extern int torture_numasync;
struct torture_test;
int torture_init(void);
bool torture_register_suite(struct torture_suite *suite);
+void torture_shell(struct torture_context *tctx);
+void torture_print_tests(bool structured);
+bool torture_run_named_tests(struct torture_context *torture, const char *name,
+ const char **restricted);
+bool torture_parse_target(struct loadparm_context *lp_ctx, const char *target);
/* Server Functionality Support */
diff --git a/source4/torture/wscript_build b/source4/torture/wscript_build
index 798e8c7d72..05b47e427a 100644
--- a/source4/torture/wscript_build
+++ b/source4/torture/wscript_build
@@ -141,7 +141,7 @@ bld.SAMBA_MODULE('TORTURE_NTP',
TORTURE_MODULES = 'TORTURE_BASIC TORTURE_RAW torture_rpc TORTURE_RAP TORTURE_AUTH TORTURE_NBENCH TORTURE_UNIX TORTURE_LDAP TORTURE_NBT TORTURE_NET TORTURE_NTP torture_registry'
bld.SAMBA_SUBSYSTEM('torturemain',
- source='smbtorture.c torture.c',
+ source='smbtorture.c torture.c shell.c',
subsystem_name='smbtorture',
deps='torture popt POPT_SAMBA POPT_CREDENTIALS dcerpc LIBCLI_SMB SMBREADLINE ' + TORTURE_MODULES,
needs_python=True