gctl.t revision 152402
1150305Smarcel#!/usr/bin/env perl -w
2150305Smarcel#
3150305Smarcel# Copyright (c) 2005 Marcel Moolenaar
4150305Smarcel# All rights reserved.
5150305Smarcel#
6150305Smarcel# Redistribution and use in source and binary forms, with or without
7150305Smarcel# modification, are permitted provided that the following conditions
8150305Smarcel# are met:
9150305Smarcel#
10150305Smarcel# 1. Redistributions of source code must retain the above copyright
11150305Smarcel#    notice, this list of conditions and the following disclaimer.
12150305Smarcel# 2. Redistributions in binary form must reproduce the above copyright
13150305Smarcel#    notice, this list of conditions and the following disclaimer in the
14150305Smarcel#    documentation and/or other materials provided with the distribution.
15150305Smarcel#
16150305Smarcel# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17150305Smarcel# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18150305Smarcel# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19150305Smarcel# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20150305Smarcel# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21150305Smarcel# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22150305Smarcel# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23150305Smarcel# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24150305Smarcel# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25150305Smarcel# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26150305Smarcel#
27150305Smarcel# $FreeBSD: head/tools/regression/geom_gpt/gctl.t 152402 2005-11-13 22:02:04Z marcel $
28150305Smarcel
29150305Smarcelmy $srcdir = `dirname $0`;
30150305Smarcelchomp $srcdir;
31150305Smarcel
32150308Smarcelmy $cmd = "/tmp/gctl-$$";
33150305Smarcelmy $out = "$cmd.out";
34150308Smarcelmy $disk = "/tmp/disk-$$";
35150305Smarcel
36150308Smarcelmy %steps = (
37151172Smarcel    "000" => "gctl",
38151172Smarcel    "001" => "gctl verb=bogus",
39151172Smarcel    "010" => "gctl verb=create",
40151172Smarcel    "011" => "gctl verb=create provider=bogus",
41151172Smarcel    "020" => "mdcfg create pristine",
42152345Smarcel    "021" => "gctl verb=create provider=%dev% entries=-1",
43152345Smarcel    "022" => "gctl verb=create provider=%dev% entries=128",
44152345Smarcel    "023" => "gctl verb=create provider=%dev%",
45152402Smarcel    "024" => "gctl verb=bogus geom=%dev%",
46152402Smarcel    "025" => "conf",
47151172Smarcel    "030" => "gctl verb=add",
48151172Smarcel    "031" => "gctl verb=add geom=bogus",
49152345Smarcel    "032" => "gctl verb=add geom=%dev%",
50152345Smarcel    "033" => "gctl verb=add geom=%dev% type=bogus",
51152345Smarcel    "034" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace",
52152345Smarcel    "035" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=1",
53152345Smarcel    "036" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=34",
54152345Smarcel    "037" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=34 end=12345678",
55152345Smarcel    "038" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=34 end=546",
56152345Smarcel    "039" => "conf",
57151172Smarcel    "100" => "mdcfg destroy",
58151172Smarcel    "110" => "mdcfg create corrupted",
59152345Smarcel    "111" => "gctl verb=add geom=%dev%",
60151172Smarcel    "120" => "mdcfg destroy",
61150305Smarcel);
62150305Smarcel
63150308Smarcelmy %result = (
64151172Smarcel    "000" => "FAIL Verb missing",
65152402Smarcel    "001" => "FAIL 87 geom",
66151172Smarcel    "010" => "FAIL 87 provider",
67151172Smarcel    "011" => "FAIL 22 provider 'bogus'",
68151172Smarcel    "020" => "",
69151172Smarcel    "021" => "FAIL 22 entries -1",
70151172Smarcel    "022" => "PASS",
71152345Smarcel    "023" => "FAIL 17 geom '%dev%'",
72152402Smarcel    "024" => "FAIL 22 verb 'bogus'",
73152402Smarcel    "025" => "",
74151172Smarcel    "030" => "FAIL 87 geom",
75151172Smarcel    "031" => "FAIL 22 geom 'bogus'",
76151172Smarcel    "032" => "FAIL 87 type",
77151172Smarcel    "033" => "FAIL 22 type 'bogus'",
78151172Smarcel    "034" => "FAIL 87 start",
79151172Smarcel    "035" => "FAIL 22 start 1",
80151172Smarcel    "036" => "FAIL 87 end",
81151172Smarcel    "037" => "FAIL 22 end 12345678",
82151172Smarcel    "038" => "PASS",
83152345Smarcel    "039" => "",
84151172Smarcel    "100" => "",
85151172Smarcel    "110" => "",
86152345Smarcel    "111" => "FAIL 6 geom '%dev%'",
87151172Smarcel    "120" => "",
88150308Smarcel);
89150308Smarcel
90150308Smarcelmy $verbose = "";
91150308Smarcelif (exists $ENV{'TEST_VERBOSE'}) {
92150308Smarcel    $verbose = "-v";
93150305Smarcel}
94150305Smarcel
95150305Smarcel# Compile the driver...
96150305Smarcelmy $st = system("cc -o $cmd -g $srcdir/test.c -lgeom");
97150305Smarcelif ($st != 0) {
98150305Smarcel    print "1..0 # SKIP error compiling test.c\n";
99150305Smarcel    exit 0;
100150305Smarcel}
101150305Smarcel
102150305Smarcel# Make sure we have permission to use gctl...
103150305Smarcelif (`$cmd` =~ "^FAIL Permission denied") {
104150305Smarcel    print "1..0 # SKIP not enough permission\n";
105150305Smarcel    unlink $cmd;
106150305Smarcel    exit 0;
107150305Smarcel}
108150305Smarcel
109150308Smarcel$count = keys (%steps);
110150305Smarcelprint "1..$count\n";
111150305Smarcel
112151172Smarcelmy $nr = 1;
113152345Smarcelmy $dev = "n/a";
114151172Smarcelforeach my $key (sort keys %steps) {
115151172Smarcel    my ($action, $args) = split(/ /, $steps{$key}, 2);
116152345Smarcel    my $res = $result{$key};
117151172Smarcel    $args = "" if (not defined $args);
118152345Smarcel    $args =~ s/%dev%/$dev/g;
119152345Smarcel    $res =~ s/%dev%/$dev/g;
120152345Smarcel
121150308Smarcel    if ($action =~ "gctl") {
122151172Smarcel	system("$cmd $verbose $args | tee $out 2>&1");
123150308Smarcel	$st = `tail -1 $out`;
124151172Smarcel	if ($st =~ "^$res") {
125151172Smarcel	    print "ok $nr \# gctl($key)\n";
126150308Smarcel	} else {
127151172Smarcel	    print "not ok $nr \# gctl($key) - $st\n";
128150308Smarcel	}
129150308Smarcel	unlink $out;
130150308Smarcel    } elsif ($action =~ "mdcfg") {
131151172Smarcel	if ($args =~ "create") {
132150308Smarcel	    system("dd if=/dev/zero of=$disk count=1024 2>&1");
133151172Smarcel	    if ($args =~ "corrupted") {
134151172Smarcel		system("gpt create -p $disk");
135151172Smarcel	    }
136152345Smarcel	    $dev = `mdconfig -a -t vnode -f $disk`;
137152345Smarcel	    chomp $dev;
138151172Smarcel	} elsif ($args =~ "destroy") {
139152345Smarcel	    $dev =~ s/md/-u /g;
140152345Smarcel	    system("mdconfig -d $dev");
141150308Smarcel	    unlink $disk;
142152345Smarcel	    $dev = "n/a";
143150308Smarcel	}
144151172Smarcel	print "ok $nr \# mdcfg($key)\n";
145151172Smarcel    } elsif ($action =~ "conf") {
146152345Smarcel	system("sysctl -b kern.geom.conftxt | grep -a $dev");
147151172Smarcel	print "ok $nr \# conf($key)\n";
148150308Smarcel    }
149151172Smarcel    $nr += 1;
150150305Smarcel}
151150305Smarcel
152150305Smarcelunlink $cmd;
153150305Smarcelexit 0;
154