[SCM] Samba Shared Repository - branch master updated
Jelmer Vernooij
jelmer at samba.org
Sat Apr 10 14:39:05 MDT 2010
The branch, master has been updated
via 664eacc... subunit: Don't abort when receiving test results from tests that weren't announced.
via 64bf8c4... selftest: Support passing --load-list to test runners.
via 4fb98b6... torture: Simplify torture suite running, call restricted test suite runner.
via 6b442f4... smbtorture: Remove unused shell feature.
via 24f3645... smbtorture: Support --load-list argument.
from 0b7bb7f... s4:registry - "patchfile_preg.c" - use more "sizeof"s on length specification
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 664eacc53a50415cd4f5534386501f640228f6c3
Author: Jelmer Vernooij <jelmer at samba.org>
Date: Sat Apr 10 22:35:57 2010 +0200
subunit: Don't abort when receiving test results from tests that weren't
announced.
commit 64bf8c400c8076316929cb6f06346bdf1c48d9d7
Author: Jelmer Vernooij <jelmer at samba.org>
Date: Sat Apr 10 22:20:12 2010 +0200
selftest: Support passing --load-list to test runners.
commit 4fb98b6856fd0174d0f41f390e28027da636c307
Author: Jelmer Vernooij <jelmer at samba.org>
Date: Sat Apr 10 21:24:33 2010 +0200
torture: Simplify torture suite running, call restricted test suite runner.
commit 6b442f43bc54555c60760eced131c2d50bf72a95
Author: Jelmer Vernooij <jelmer at samba.org>
Date: Fri Apr 9 01:59:01 2010 +0200
smbtorture: Remove unused shell feature.
commit 24f364517b4013f3467c873e5b1877fe5f1c1941
Author: Jelmer Vernooij <jelmer at samba.org>
Date: Fri Apr 9 01:58:28 2010 +0200
smbtorture: Support --load-list argument.
-----------------------------------------------------------------------
Summary of changes:
lib/torture/torture.c | 7 ++
lib/torture/torture.h | 5 ++
selftest/selftest.pl | 20 ++++--
selftest/subunithelper.py | 43 ++++++++---
source4/selftest/tests.sh | 15 ++++
source4/torture/smbtorture.c | 162 +++++++++++++++---------------------------
6 files changed, 130 insertions(+), 122 deletions(-)
Changeset truncated at 500 lines:
diff --git a/lib/torture/torture.c b/lib/torture/torture.c
index 9adf681..dcb28ee 100644
--- a/lib/torture/torture.c
+++ b/lib/torture/torture.c
@@ -304,6 +304,13 @@ bool torture_run_suite(struct torture_context *context,
return ret;
}
+bool torture_run_suite_restricted(struct torture_context *context,
+ struct torture_suite *suite, char **restricted)
+{
+ /* FIXME */
+ return false;
+}
+
void torture_ui_test_start(struct torture_context *context,
struct torture_tcase *tcase,
struct torture_test *test)
diff --git a/lib/torture/torture.h b/lib/torture/torture.h
index 6eb2c15..931937c 100644
--- a/lib/torture/torture.h
+++ b/lib/torture/torture.h
@@ -218,6 +218,11 @@ bool torture_suite_add_suite(struct torture_suite *suite,
bool torture_run_suite(struct torture_context *context,
struct torture_suite *suite);
+/* Run the specified testsuite recursively, but only the specified
+ * tests */
+bool torture_run_suite_restricted(struct torture_context *context,
+ struct torture_suite *suite, char **restricted);
+
/* Run the specified testcase */
bool torture_run_tcase(struct torture_context *context,
struct torture_tcase *tcase);
diff --git a/selftest/selftest.pl b/selftest/selftest.pl
index fb2e1a8..7bc14b1 100755
--- a/selftest/selftest.pl
+++ b/selftest/selftest.pl
@@ -125,6 +125,7 @@ use strict;
use FindBin qw($RealBin $Script);
use File::Spec;
+use File::Temp qw(tempfile);
use Getopt::Long;
use POSIX;
use Cwd qw(abs_path);
@@ -224,9 +225,9 @@ sub expand_environment_strings($)
return $s;
}
-sub run_testsuite($$$$$$)
+sub run_testsuite($$$$$)
{
- my ($envname, $name, $cmd, $i, $totalsuites, $tests_to_run) = @_;
+ my ($envname, $name, $cmd, $i, $totalsuites) = @_;
my $pcap_file = setup_pcap($name);
Subunit::start_testsuite($name);
@@ -639,7 +640,8 @@ sub read_testlist($)
open(IN, $filename) or die("Unable to open $filename: $!");
while (<IN>) {
- if ($_ eq "-- TEST --\n") {
+ if (/-- TEST(-LOADLIST)? --\n/) {
+ my $supports_loadlist = ($1 eq "-LOADLIST");
my $name = <IN>;
$name =~ s/\n//g;
my $env = <IN>;
@@ -648,7 +650,7 @@ sub read_testlist($)
$cmdline =~ s/\n//g;
if (should_run_test($name) == 1) {
$required_envs{$env} = 1;
- push (@ret, [$name, $env, $cmdline]);
+ push (@ret, [$name, $env, $cmdline, $supports_loadlist]);
}
} else {
print;
@@ -934,8 +936,16 @@ $envvarstr
next;
}
+ if ($$_[3] and $individual_tests and $individual_tests->{$name}) {
+ my ($fh, $listid_file) = tempfile(UNLINK => 0);
+ foreach (@{$individual_tests->{$name}}) {
+ print $fh "$_\n";
+ }
+ $cmd .= " --load-list=$listid_file";
+ }
+
run_testsuite($envname, $name, $cmd, $i, $suitestotal,
- ($individual_tests and $individual_tests->{$name}));
+ );
if (defined($opt_analyse_cmd)) {
system("$opt_analyse_cmd \"$name\"");
diff --git a/selftest/subunithelper.py b/selftest/subunithelper.py
index 2c5fa31..545178e 100644
--- a/selftest/subunithelper.py
+++ b/selftest/subunithelper.py
@@ -68,18 +68,36 @@ def parse_results(msg_ops, statistics, fh):
else:
reason = None
if result in ("success", "successful"):
- open_tests.pop() #FIXME: Check that popped value == $testname
- statistics['TESTS_EXPECTED_OK']+=1
- msg_ops.end_test(testname, "success", False, reason)
+ try:
+ open_tests.remove(testname)
+ except KeyError:
+ statistics['TESTS_ERROR']+=1
+ msg_ops.end_test(testname, "error", True,
+ "Test was never started")
+ else:
+ statistics['TESTS_EXPECTED_OK']+=1
+ msg_ops.end_test(testname, "success", False, reason)
elif result in ("xfail", "knownfail"):
- open_tests.pop() #FIXME: Check that popped value == $testname
- statistics['TESTS_EXPECTED_FAIL']+=1
- msg_ops.end_test(testname, "xfail", False, reason)
- expected_fail+=1
+ try:
+ open_tests.remove(testname)
+ except KeyError:
+ statistics['TESTS_ERROR']+=1
+ msg_ops.end_test(testname, "error", True,
+ "Test was never started")
+ else:
+ statistics['TESTS_EXPECTED_FAIL']+=1
+ msg_ops.end_test(testname, "xfail", False, reason)
+ expected_fail+=1
elif result in ("failure", "fail"):
- open_tests.pop() #FIXME: Check that popped value == $testname
- statistics['TESTS_UNEXPECTED_FAIL']+=1
- msg_ops.end_test(testname, "failure", True, reason)
+ try:
+ open_tests.remove(testname)
+ except KeyError:
+ statistics['TESTS_ERROR']+=1
+ msg_ops.end_test(testname, "error", True,
+ "Test was never started")
+ else:
+ statistics['TESTS_UNEXPECTED_FAIL']+=1
+ msg_ops.end_test(testname, "failure", True, reason)
elif result == "skip":
statistics['TESTS_SKIP']+=1
# Allow tests to be skipped without prior announcement of test
@@ -89,7 +107,10 @@ def parse_results(msg_ops, statistics, fh):
msg_ops.end_test(testname, "skip", False, reason)
elif result == "error":
statistics['TESTS_ERROR']+=1
- open_tests.pop() #FIXME: Check that popped value == $testname
+ try:
+ open_tests.remove(testname)
+ except KeyError:
+ pass
msg_ops.end_test(testname, "error", True, reason)
elif result == "skip-testsuite":
msg_ops.skip_testsuite(testname)
diff --git a/source4/selftest/tests.sh b/source4/selftest/tests.sh
index d4f7e47..da0b4e3 100755
--- a/source4/selftest/tests.sh
+++ b/source4/selftest/tests.sh
@@ -43,6 +43,21 @@ plantestsuite() {
echo $cmdline
}
+plantestsuite_loadlist() {
+ name=$1
+ env=$2
+ shift 2
+ cmdline="$*"
+ echo "-- TEST-LOADLIST --"
+ if [ "$env" = "none" ]; then
+ echo "samba4.$name"
+ else
+ echo "samba4.$name ($env)"
+ fi
+ echo $env
+ echo $cmdline
+}
+
skiptestsuite() {
name=$1
reason=$2
diff --git a/source4/torture/smbtorture.c b/source4/torture/smbtorture.c
index d3b1fea..baa9afe 100644
--- a/source4/torture/smbtorture.c
+++ b/source4/torture/smbtorture.c
@@ -37,56 +37,39 @@
static bool run_matching(struct torture_context *torture,
const char *prefix,
const char *expr,
+ char **restricted,
struct torture_suite *suite,
bool *matched)
{
bool ret = true;
+ struct torture_suite *o;
+ struct torture_tcase *t;
- if (suite == NULL) {
- struct torture_suite *o;
-
- for (o = (torture_root == NULL?NULL:torture_root->children); o; o = o->next) {
- if (gen_fnmatch(expr, o->name) == 0) {
- *matched = true;
- reload_charcnv(torture->lp_ctx);
+ for (o = suite->children; o; o = o->next) {
+ char *name = NULL;
+ if (prefix == NULL)
+ name = talloc_strdup(torture, o->name);
+ else
+ name = talloc_asprintf(torture, "%s-%s", prefix, o->name);
+ if (gen_fnmatch(expr, name) == 0) {
+ *matched = true;
+ reload_charcnv(torture->lp_ctx);
+ torture->active_testname = name;
+ if (restricted != NULL)
+ ret &= torture_run_suite_restricted(torture, o, restricted);
+ else
ret &= torture_run_suite(torture, o);
- continue;
- }
-
- ret &= run_matching(torture, o->name, expr, o, matched);
- }
- } else {
- char *name;
- struct torture_suite *c;
- struct torture_tcase *t;
-
- for (c = suite->children; c; c = c->next) {
- asprintf(&name, "%s-%s", prefix, c->name);
-
- if (gen_fnmatch(expr, name) == 0) {
- *matched = true;
- reload_charcnv(torture->lp_ctx);
- torture->active_testname = talloc_strdup(torture, prefix);
- ret &= torture_run_suite(torture, c);
- free(name);
- continue;
- }
-
- ret &= run_matching(torture, name, expr, c, matched);
-
- free(name);
}
+ ret &= run_matching(torture, name, expr, restricted, o, matched);
+ }
- for (t = suite->testcases; t; t = t->next) {
- asprintf(&name, "%s-%s", prefix, t->name);
- if (gen_fnmatch(expr, name) == 0) {
- *matched = true;
- reload_charcnv(torture->lp_ctx);
- torture->active_testname = talloc_strdup(torture, prefix);
- ret &= torture_run_tcase(torture, t);
- talloc_free(torture->active_testname);
- }
- free(name);
+ for (t = suite->testcases; t; t = t->next) {
+ char *name = talloc_asprintf(torture, "%s-%s", prefix, t->name);
+ if (gen_fnmatch(expr, name) == 0) {
+ *matched = true;
+ reload_charcnv(torture->lp_ctx);
+ torture->active_testname = name;
+ ret &= torture_run_tcase(torture, t);
}
}
@@ -98,20 +81,25 @@ 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)
+static bool run_test(struct torture_context *torture, const char *name,
+ char **restricted)
{
bool ret = true;
bool matched = false;
struct torture_suite *o;
if (strequal(name, "ALL")) {
+ if (restricted != NULL) {
+ printf("--load-list and ALL are incompatible\n");
+ return false;
+ }
for (o = torture_root->children; o; o = o->next) {
ret &= torture_run_suite(torture, o);
}
return ret;
}
- ret = run_matching(torture, NULL, name, NULL, &matched);
+ ret = run_matching(torture, NULL, name, restricted, torture_root, &matched);
if (!matched) {
printf("Unknown torture operation '%s'\n", name);
@@ -369,52 +357,6 @@ const static struct torture_ui_ops std_ui_ops = {
};
-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;
-
- 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], "set")) {
- if (argc < 3) {
- fprintf(stderr, "Usage: set <variable> <value>\n");
- } 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"
- " 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
****************************************************************************/
@@ -431,15 +373,16 @@ 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;
static int list_tests = 0;
int num_extra_users = 0;
+ char **restricted = NULL;
+ int num_restricted = -1;
enum {OPT_LOADFILE=1000,OPT_UNCLIST,OPT_TIMELIMIT,OPT_DNS, OPT_LIST,
OPT_DANGEROUS,OPT_SMB_PORTS,OPT_ASYNC,OPT_NUMPROGS,
- OPT_EXTRA_USER,};
+ OPT_EXTRA_USER,OPT_LOAD_LIST,};
struct poptOption long_options[] = {
POPT_AUTOHELP
@@ -459,7 +402,6 @@ 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},
@@ -469,6 +411,8 @@ int main(int argc,char *argv[])
"set maximum time for smbtorture to live", "seconds"},
{"extra-user", 0, POPT_ARG_STRING, NULL, OPT_EXTRA_USER,
"extra user credentials", NULL},
+ {"load-list", 0, POPT_ARG_STRING, NULL, OPT_LOAD_LIST,
+ "load a test id list from a text file", NULL},
POPT_COMMON_SAMBA
POPT_COMMON_CONNECTION
POPT_COMMON_CREDENTIALS
@@ -521,6 +465,14 @@ int main(int argc,char *argv[])
talloc_free(option);
}
break;
+ case OPT_LOAD_LIST:
+ restricted = file_lines_load(optarg, &num_restricted, 0,
+ talloc_autofree_context());
+ if (restricted == NULL) {
+ printf("Unable to read load list file '%s'\n", optarg);
+ exit(1);
+ }
+ break;
default:
printf("bad command line option\n");
exit(1);
@@ -586,15 +538,15 @@ int main(int argc,char *argv[])
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));
+ 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();
}
@@ -620,7 +572,7 @@ int main(int argc,char *argv[])
}
}
- if (!(argc_new >= 3 || (shell && argc_new >= 2))) {
+ if (!(argc_new >= 3)) {
usage(pc);
exit(1);
}
@@ -663,12 +615,10 @@ int main(int argc,char *argv[])
gensec_init(cmdline_lp_ctx);
if (argc_new == 0) {
- printf("You must specify a test to run, or 'ALL'\n");
- } else if (shell) {
- run_shell(torture);
+ printf("You must specify a testsuite to run, or 'ALL'\n");
} else {
for (i=2;i<argc_new;i++) {
- if (!run_test(torture, argv_new[i])) {
+ if (!run_test(torture, argv_new[i], restricted)) {
correct = false;
}
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list