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