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