1150305Smarcel#!/usr/bin/env perl -w 2150305Smarcel# 3157622Smarcel# Copyright (c) 2005, 2006 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: releng/10.2/tools/regression/geom_gpt/gctl.t 157622 2006-04-10 04:13:44Z marcel $ 28150305Smarcel 29150305Smarcelmy $srcdir = `dirname $0`; 30150305Smarcelchomp $srcdir; 31150305Smarcel 32150308Smarcelmy $cmd = "/tmp/gctl-$$"; 33150305Smarcelmy $out = "$cmd.out"; 34150308Smarcelmy $disk = "/tmp/disk-$$"; 35157622Smarcelmy $mntpt = "/tmp/mount-$$"; 36150305Smarcel 37150308Smarcelmy %steps = ( 38151172Smarcel "000" => "gctl", 39151172Smarcel "001" => "gctl verb=bogus", 40151172Smarcel "010" => "gctl verb=create", 41151172Smarcel "011" => "gctl verb=create provider=bogus", 42151172Smarcel "020" => "mdcfg create pristine", 43152345Smarcel "021" => "gctl verb=create provider=%dev% entries=-1", 44152345Smarcel "022" => "gctl verb=create provider=%dev% entries=128", 45152345Smarcel "023" => "gctl verb=create provider=%dev%", 46157622Smarcel "024" => "gctl verb=modify geom=%dev%", 47152402Smarcel "025" => "conf", 48151172Smarcel "030" => "gctl verb=add", 49151172Smarcel "031" => "gctl verb=add geom=bogus", 50152345Smarcel "032" => "gctl verb=add geom=%dev%", 51152345Smarcel "033" => "gctl verb=add geom=%dev% type=bogus", 52152345Smarcel "034" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace", 53152345Smarcel "035" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=1", 54152345Smarcel "036" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=34", 55152345Smarcel "037" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=34 end=12345678", 56157622Smarcel "038" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=162 end=417 entry=129", 57157622Smarcel "039" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=162 end=417 entry:8=5", 58157622Smarcel "040" => "gctl verb=add geom=%dev% type=83d34ed5-c4ff-11da-b65b-000347c5d7f3 start=34 end=161 entry=5", 59157622Smarcel "041" => "gctl verb=add geom=%dev% type=83d34ed5-c4ff-11da-b65b-000347c5d7f3 start=34 end=546", 60157622Smarcel "042" => "gctl verb=add geom=%dev% type=83d34ed5-c4ff-11da-b65b-000347c5d7f3 start=162 end=417", 61157622Smarcel "043" => "gctl verb=add geom=%dev% type=83d34ed5-c4ff-11da-b65b-000347c5d7f3 start=100 end=300", 62157622Smarcel "044" => "gctl verb=add geom=%dev% type=83d34ed5-c4ff-11da-b65b-000347c5d7f3 start=300 end=500", 63157622Smarcel "045" => "gctl verb=add geom=%dev% type=83d34ed5-c4ff-11da-b65b-000347c5d7f3 start=34 end=161 entry:8", 64157622Smarcel "046" => "gctl verb=add geom=%dev% type=d2bd4509-c4ff-11da-b4cc-00306e39b62f start=418 end=546 entry:8", 65157622Smarcel "047" => "conf", 66157622Smarcel "050" => "gctl verb=remove geom=%dev% entry=5", 67157622Smarcel "051" => "gctl verb=remove geom=%dev% entry=2", 68157622Smarcel "052" => "gctl verb=remove geom=%dev% entry=1", 69157622Smarcel "053" => "gctl verb=remove geom=%dev% entry=1", 70157622Smarcel "054" => "conf", 71157622Smarcel "060" => "gctl verb=add geom=%dev% type=516e7cb6-6ecf-11d6-8ff8-00022d09712b start=34 end=546 entry:8=1", 72157622Smarcel "061" => "mount %dev%p1", 73157622Smarcel "062" => "gctl verb=remove geom=%dev% entry=1", 74157622Smarcel "063" => "umount %dev%p1", 75157622Smarcel "064" => "gctl verb=remove geom=%dev% entry=1", 76157622Smarcel "065" => "conf", 77151172Smarcel "100" => "mdcfg destroy", 78151172Smarcel "110" => "mdcfg create corrupted", 79152345Smarcel "111" => "gctl verb=add geom=%dev%", 80151172Smarcel "120" => "mdcfg destroy", 81150305Smarcel); 82150305Smarcel 83150308Smarcelmy %result = ( 84151172Smarcel "000" => "FAIL Verb missing", 85157622Smarcel "001" => "FAIL 22 verb 'bogus'", 86151172Smarcel "010" => "FAIL 87 provider", 87151172Smarcel "011" => "FAIL 22 provider 'bogus'", 88151172Smarcel "020" => "", 89151172Smarcel "021" => "FAIL 22 entries -1", 90151172Smarcel "022" => "PASS", 91152345Smarcel "023" => "FAIL 17 geom '%dev%'", 92157622Smarcel "024" => "FAIL 87 entry", 93157622Smarcel "025" => "b1856477950e5786898c8f01361196cf", 94151172Smarcel "030" => "FAIL 87 geom", 95151172Smarcel "031" => "FAIL 22 geom 'bogus'", 96151172Smarcel "032" => "FAIL 87 type", 97151172Smarcel "033" => "FAIL 22 type 'bogus'", 98151172Smarcel "034" => "FAIL 87 start", 99151172Smarcel "035" => "FAIL 22 start 1", 100151172Smarcel "036" => "FAIL 87 end", 101151172Smarcel "037" => "FAIL 22 end 12345678", 102157622Smarcel "038" => "FAIL 22 entry 129", 103157622Smarcel "039" => "PASS entry=5", 104157622Smarcel "040" => "FAIL 17 entry 5", 105157622Smarcel "041" => "FAIL 28 start/end 34/546", 106157622Smarcel "042" => "FAIL 28 start/end 162/417", 107157622Smarcel "043" => "FAIL 28 start/end 100/300", 108157622Smarcel "044" => "FAIL 28 start/end 300/500", 109157622Smarcel "045" => "PASS entry=1", 110157622Smarcel "046" => "PASS entry=2", 111157622Smarcel "047" => "50783a39eecfc62a29db24381e12b9d8", 112157622Smarcel "050" => "PASS", 113157622Smarcel "051" => "PASS", 114157622Smarcel "052" => "PASS", 115157622Smarcel "053" => "FAIL 2 entry 1", 116157622Smarcel "054" => "b1856477950e5786898c8f01361196cf", 117157622Smarcel "060" => "PASS", 118157622Smarcel "061" => "PASS", 119157622Smarcel "062" => "FAIL 16", 120157622Smarcel "063" => "PASS", 121157622Smarcel "064" => "PASS", 122157622Smarcel "065" => "b1856477950e5786898c8f01361196cf", 123151172Smarcel "100" => "", 124151172Smarcel "110" => "", 125152345Smarcel "111" => "FAIL 6 geom '%dev%'", 126151172Smarcel "120" => "", 127150308Smarcel); 128150308Smarcel 129150308Smarcelmy $verbose = ""; 130150308Smarcelif (exists $ENV{'TEST_VERBOSE'}) { 131150308Smarcel $verbose = "-v"; 132150305Smarcel} 133150305Smarcel 134150305Smarcel# Compile the driver... 135150305Smarcelmy $st = system("cc -o $cmd -g $srcdir/test.c -lgeom"); 136150305Smarcelif ($st != 0) { 137150305Smarcel print "1..0 # SKIP error compiling test.c\n"; 138150305Smarcel exit 0; 139150305Smarcel} 140150305Smarcel 141150305Smarcel# Make sure we have permission to use gctl... 142150305Smarcelif (`$cmd` =~ "^FAIL Permission denied") { 143150305Smarcel print "1..0 # SKIP not enough permission\n"; 144150305Smarcel unlink $cmd; 145150305Smarcel exit 0; 146150305Smarcel} 147150305Smarcel 148150308Smarcel$count = keys (%steps); 149150305Smarcelprint "1..$count\n"; 150150305Smarcel 151151172Smarcelmy $nr = 1; 152152345Smarcelmy $dev = "n/a"; 153151172Smarcelforeach my $key (sort keys %steps) { 154151172Smarcel my ($action, $args) = split(/ /, $steps{$key}, 2); 155152345Smarcel my $res = $result{$key}; 156151172Smarcel $args = "" if (not defined $args); 157152345Smarcel $args =~ s/%dev%/$dev/g; 158152345Smarcel $res =~ s/%dev%/$dev/g; 159152345Smarcel 160157622Smarcel if ($action =~ "^gctl") { 161151172Smarcel system("$cmd $verbose $args | tee $out 2>&1"); 162150308Smarcel $st = `tail -1 $out`; 163151172Smarcel if ($st =~ "^$res") { 164151172Smarcel print "ok $nr \# gctl($key)\n"; 165150308Smarcel } else { 166151172Smarcel print "not ok $nr \# gctl($key) - $st\n"; 167150308Smarcel } 168150308Smarcel unlink $out; 169157622Smarcel } elsif ($action =~ "^mdcfg") { 170157622Smarcel if ($args =~ "^create") { 171150308Smarcel system("dd if=/dev/zero of=$disk count=1024 2>&1"); 172151172Smarcel if ($args =~ "corrupted") { 173151172Smarcel system("gpt create -p $disk"); 174151172Smarcel } 175152345Smarcel $dev = `mdconfig -a -t vnode -f $disk`; 176152345Smarcel chomp $dev; 177157622Smarcel } elsif ($args =~ "^destroy") { 178152345Smarcel $dev =~ s/md/-u /g; 179152345Smarcel system("mdconfig -d $dev"); 180150308Smarcel unlink $disk; 181152345Smarcel $dev = "n/a"; 182150308Smarcel } 183151172Smarcel print "ok $nr \# mdcfg($key)\n"; 184157622Smarcel } elsif ($action =~ "^conf") { 185157622Smarcel system("sysctl -b kern.geom.conftxt | grep -a $dev | sed -e s:$disk:DISK:g -e s:$dev:DEV:g | sort | md5 -p | tee $out 2>&1"); 186157622Smarcel $st = `tail -1 $out`; 187157622Smarcel if ($st =~ "^$res") { 188157622Smarcel print "ok $nr \# conf($key)\n"; 189157622Smarcel } else { 190157622Smarcel print "not ok $nr \# conf($key) - $st\n"; 191157622Smarcel } 192157622Smarcel unlink $out; 193157622Smarcel } elsif ($action =~ "^mount") { 194157622Smarcel system("mkdir $mntpt-$args"); 195157622Smarcel system("newfs $args"); 196157622Smarcel system("mount -t ufs /dev/$args $mntpt-$args"); 197157622Smarcel print "ok $nr \# mount($key)\n"; 198157622Smarcel } elsif ($action =~ "^umount") { 199157622Smarcel system("umount $mntpt-$args"); 200157622Smarcel system("rmdir $mntpt-$args"); 201157622Smarcel print "ok $nr \# umount($key)\n"; 202150308Smarcel } 203151172Smarcel $nr += 1; 204150305Smarcel} 205150305Smarcel 206150305Smarcelunlink $cmd; 207150305Smarcelexit 0; 208