gctl.t revision 152402
1#!/usr/bin/env perl -w
2#
3# Copyright (c) 2005 Marcel Moolenaar
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9#
10# 1. Redistributions of source code must retain the above copyright
11#    notice, this list of conditions and the following disclaimer.
12# 2. Redistributions in binary form must reproduce the above copyright
13#    notice, this list of conditions and the following disclaimer in the
14#    documentation and/or other materials provided with the distribution.
15#
16# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26#
27# $FreeBSD: head/tools/regression/geom_gpt/gctl.t 152402 2005-11-13 22:02:04Z marcel $
28
29my $srcdir = `dirname $0`;
30chomp $srcdir;
31
32my $cmd = "/tmp/gctl-$$";
33my $out = "$cmd.out";
34my $disk = "/tmp/disk-$$";
35
36my %steps = (
37    "000" => "gctl",
38    "001" => "gctl verb=bogus",
39    "010" => "gctl verb=create",
40    "011" => "gctl verb=create provider=bogus",
41    "020" => "mdcfg create pristine",
42    "021" => "gctl verb=create provider=%dev% entries=-1",
43    "022" => "gctl verb=create provider=%dev% entries=128",
44    "023" => "gctl verb=create provider=%dev%",
45    "024" => "gctl verb=bogus geom=%dev%",
46    "025" => "conf",
47    "030" => "gctl verb=add",
48    "031" => "gctl verb=add geom=bogus",
49    "032" => "gctl verb=add geom=%dev%",
50    "033" => "gctl verb=add geom=%dev% type=bogus",
51    "034" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace",
52    "035" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=1",
53    "036" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=34",
54    "037" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=34 end=12345678",
55    "038" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=34 end=546",
56    "039" => "conf",
57    "100" => "mdcfg destroy",
58    "110" => "mdcfg create corrupted",
59    "111" => "gctl verb=add geom=%dev%",
60    "120" => "mdcfg destroy",
61);
62
63my %result = (
64    "000" => "FAIL Verb missing",
65    "001" => "FAIL 87 geom",
66    "010" => "FAIL 87 provider",
67    "011" => "FAIL 22 provider 'bogus'",
68    "020" => "",
69    "021" => "FAIL 22 entries -1",
70    "022" => "PASS",
71    "023" => "FAIL 17 geom '%dev%'",
72    "024" => "FAIL 22 verb 'bogus'",
73    "025" => "",
74    "030" => "FAIL 87 geom",
75    "031" => "FAIL 22 geom 'bogus'",
76    "032" => "FAIL 87 type",
77    "033" => "FAIL 22 type 'bogus'",
78    "034" => "FAIL 87 start",
79    "035" => "FAIL 22 start 1",
80    "036" => "FAIL 87 end",
81    "037" => "FAIL 22 end 12345678",
82    "038" => "PASS",
83    "039" => "",
84    "100" => "",
85    "110" => "",
86    "111" => "FAIL 6 geom '%dev%'",
87    "120" => "",
88);
89
90my $verbose = "";
91if (exists $ENV{'TEST_VERBOSE'}) {
92    $verbose = "-v";
93}
94
95# Compile the driver...
96my $st = system("cc -o $cmd -g $srcdir/test.c -lgeom");
97if ($st != 0) {
98    print "1..0 # SKIP error compiling test.c\n";
99    exit 0;
100}
101
102# Make sure we have permission to use gctl...
103if (`$cmd` =~ "^FAIL Permission denied") {
104    print "1..0 # SKIP not enough permission\n";
105    unlink $cmd;
106    exit 0;
107}
108
109$count = keys (%steps);
110print "1..$count\n";
111
112my $nr = 1;
113my $dev = "n/a";
114foreach my $key (sort keys %steps) {
115    my ($action, $args) = split(/ /, $steps{$key}, 2);
116    my $res = $result{$key};
117    $args = "" if (not defined $args);
118    $args =~ s/%dev%/$dev/g;
119    $res =~ s/%dev%/$dev/g;
120
121    if ($action =~ "gctl") {
122	system("$cmd $verbose $args | tee $out 2>&1");
123	$st = `tail -1 $out`;
124	if ($st =~ "^$res") {
125	    print "ok $nr \# gctl($key)\n";
126	} else {
127	    print "not ok $nr \# gctl($key) - $st\n";
128	}
129	unlink $out;
130    } elsif ($action =~ "mdcfg") {
131	if ($args =~ "create") {
132	    system("dd if=/dev/zero of=$disk count=1024 2>&1");
133	    if ($args =~ "corrupted") {
134		system("gpt create -p $disk");
135	    }
136	    $dev = `mdconfig -a -t vnode -f $disk`;
137	    chomp $dev;
138	} elsif ($args =~ "destroy") {
139	    $dev =~ s/md/-u /g;
140	    system("mdconfig -d $dev");
141	    unlink $disk;
142	    $dev = "n/a";
143	}
144	print "ok $nr \# mdcfg($key)\n";
145    } elsif ($action =~ "conf") {
146	system("sysctl -b kern.geom.conftxt | grep -a $dev");
147	print "ok $nr \# conf($key)\n";
148    }
149    $nr += 1;
150}
151
152unlink $cmd;
153exit 0;
154