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:
parent
93605bb138
commit
b1fa310c00
@ -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;
|
||||||
|
@ -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, ¶m, &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, ¶m, &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++], ¶m, &value);
|
||||||
|
if (value != NULL)
|
||||||
|
gctl_ro_param(req, param, -1, value);
|
||||||
|
}
|
||||||
|
|
||||||
if (verbose)
|
if (verbose)
|
||||||
gctl_dump(req, stdout);
|
gctl_dump(req, stdout);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user