1#!/usr/bin/perl -w 2use test::helper qw($_point $_loop $_opts $_real $_pidfile); 3use strict; 4use Errno qw(:POSIX); 5use Test::More tests => 3; 6 7sub is_mounted { 8 my $diag = -e '/proc/mounts' ? `cat /proc/mounts` : ($^O eq 'linux' ? `/bin/mount` : ($^O eq 'solaris' ? `/usr/sbin/mount` : `/sbin/mount`)); 9 my $pattern = $^O eq 'solaris' ? qr{^$_point }m : qr{ (?:/private)?$_point }; 10 return $diag =~ $pattern; 11} 12 13ok(!is_mounted(),"already mounted"); 14ok(-f $_loop,"loopback exists"); 15 16mkdir $_point; 17mkdir $_real; 18diag "mounting $_loop to $_point"; 19open REALSTDOUT, '>&STDOUT'; 20open REALSTDERR, '>&STDERR'; 21open STDOUT, '>', '/dev/null'; 22open STDERR, '>&', \*STDOUT; 23system("perl -Iblib/lib -Iblib/arch $_loop $_opts $_point"); 24open STDOUT, '>&', \*REALSTDOUT; 25open STDERR, '>&', \*REALSTDERR; 26 27my ($success, $count) = (0,0); 28while ($count++ < 50 && !$success) { 29 select(undef, undef, undef, 0.1); 30 ($success) = is_mounted(); 31} 32diag "Mounted in ", $count/10, " secs"; 33 34ok($success,"mount succeeded"); 35system("rm -rf $_real"); 36unless($success) { 37 kill('INT',`cat $_pidfile`); 38 unlink($_pidfile); 39} else { 40 mkdir($_real); 41} 42