o Extend the suite to run more than just the driver. We need to run

mdconfig(8), because we need a disk to work on.
o  Extend the number of tests now that we have a disk.
o  Simplify the driver. All parameters are ASCII strings now.
This commit is contained in:
Marcel Moolenaar 2005-09-19 06:51:57 +00:00
parent 93605bb138
commit b1fa310c00
2 changed files with 75 additions and 72 deletions

View File

@ -29,35 +29,50 @@
my $srcdir = `dirname $0`; my $srcdir = `dirname $0`;
chomp $srcdir; chomp $srcdir;
my $cmd = "/tmp/$$"; my $cmd = "/tmp/gctl-$$";
my $out = "$cmd.out"; my $out = "$cmd.out";
my $disk = "/tmp/disk-$$";
my $unit = "";
my %tests = ( my %steps = (
"" => "FAIL Verb missing", "1" => "gctl",
"-s verb=invalid" => "FAIL 22 verb 'invalid'", "2" => "gctl",
# create "3" => "gctl",
"-s verb=create" => "FAIL 87 provider", "4" => "gctl",
"-s verb=create -s provider=invalid" => "FAIL 22 provider 'invalid'", "5" => "mdcfg",
"6" => "gctl",
"7" => "gctl",
"8" => "gctl",
"9" => "mdcfg",
); );
sub run ($$) { my %args = (
local ($nr, $test) = @_; "1" => "",
local $st; "2" => "verb=invalid",
"3" => "verb=create",
"4" => "verb=create provider=invalid",
"5" => "create",
"6" => "verb=create provider=md%unit% entries=-1",
"7" => "verb=create provider=md%unit%",
"8" => "verb=create provider=md%unit%",
"9" => "destroy",
);
if (exists $ENV{'TEST_VERBOSE'}) { my %result = (
system("$cmd -v $test > $out 2>&1"); "1" => "FAIL Verb missing",
system("cat $out"); "2" => "FAIL 22 verb 'invalid'",
} "3" => "FAIL 87 provider",
else { "4" => "FAIL 22 provider 'invalid'",
system("$cmd $test > $out 2>&1"); #
} "6" => "FAIL 22 entries -1",
$st = `tail -1 $out`; "7" => "PASS",
if ($st =~ "^$tests{$test}") { "8" => "FAIL 17 geom 'md0'",
print "ok $nr\n"; #
} else { );
print "not ok $nr # $st\n";
} my $verbose = "";
unlink $out; if (exists $ENV{'TEST_VERBOSE'}) {
$verbose = "-v";
} }
# Compile the driver... # Compile the driver...
@ -74,12 +89,36 @@ if (`$cmd` =~ "^FAIL Permission denied") {
exit 0; exit 0;
} }
$count = keys (%tests); $count = keys (%steps);
print "1..$count\n"; print "1..$count\n";
my $nr=0; foreach my $nr (sort keys %steps) {
foreach $test (keys %tests) { my $action = $steps{$nr};
run ++$nr, $test; my $arg = $args{$nr};
if ($action =~ "gctl") {
$arg =~ s/%unit%/$unit/g;
system("$cmd $verbose $arg | tee $out 2>&1");
$st = `tail -1 $out`;
if ($st =~ "^$result{$nr}") {
print "ok $nr\n";
} else {
print "not ok $nr \# $st\n";
}
unlink $out;
} elsif ($action =~ "mdcfg") {
if ($arg =~ "create") {
system("dd if=/dev/zero of=$disk count=1024 2>&1");
$unit = `mdconfig -a -t vnode -f $disk`;
chomp $unit;
$unit =~ s/md//g;
} elsif ($arg =~ "destroy") {
system("mdconfig -d -u $unit");
unlink $disk;
$unit = "";
}
print "ok $nr\n";
}
} }
unlink $cmd; unlink $cmd;

View File

@ -59,58 +59,18 @@ parse(char *arg, char **param, char **value)
return (0); return (0);
} }
static int
add_int32(struct gctl_req *req, char *arg)
{
char *param, *nptr, *endptr;
uint32_t value;
int error;
error = parse(arg, &param, &nptr);
if (error)
return (error);
if (nptr == NULL)
return (EINVAL);
value = strtol(nptr, &endptr, 0);
if (*endptr)
return (EINVAL);
gctl_ro_param(req, param, sizeof(value), &value);
return (0);
}
static int
add_string(struct gctl_req *req, char *arg)
{
char *param, *value;
int error;
error = parse(arg, &param, &value);
if (error)
return (error);
if (value == NULL)
return (EINVAL);
gctl_ro_param(req, param, -1, value);
return (0);
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
struct gctl_req *req; struct gctl_req *req;
char *param, *value;
const char *s; const char *s;
int c; int c;
req = gctl_get_handle(); req = gctl_get_handle();
gctl_ro_param(req, "class", -1, "GPT"); gctl_ro_param(req, "class", -1, "GPT");
while ((c = getopt(argc, argv, "4:s:v")) != -1) { while ((c = getopt(argc, argv, "v")) != -1) {
switch (c) { switch (c) {
case '4': /* uint32_t */
add_int32(req, optarg);
break;
case 's': /* string */
add_string(req, optarg);
break;
case 'v': case 'v':
verbose = 1; verbose = 1;
break; break;
@ -121,8 +81,12 @@ int main(int argc, char *argv[])
break; break;
} }
} }
if (argc != optind)
usage(); while (optind < argc) {
parse(argv[optind++], &param, &value);
if (value != NULL)
gctl_ro_param(req, param, -1, value);
}
if (verbose) if (verbose)
gctl_dump(req, stdout); gctl_dump(req, stdout);