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