Filesys-POSIX

 view release on metacpan or  search on metacpan

t/mount.t  view on Meta::CPAN

    my $fd = $fs->open( "$_/emptyfile", $O_CREAT );

    ok( !$@, "Filesys::POSIX->statfs('$_/') returns mount information" );
    ok(
        $mount->{'dev'} eq $expected,
        "Mount object for $_ lists expected device"
    );
    ok(
        $fs->fstatfs($fd) eq $mount,
        "Filesys::POSIX->fstatfs() on open file descriptor returns expected mount object"
    );

    $fs->close($fd);
}

{
    my $found = 0;

    foreach my $mount ( $fs->mountlist ) {
        $found++ if $mounts->{ $mount->{'path'} };
    }

    ok(
        $found == keys %$mounts,
        "Filesys::POSIX->mountlist() works expectedly"
    );
}

{
    $fs->chdir('/mnt/mem/tmp');
    ok(
        $fs->getcwd eq '/mnt/mem/tmp',
        "Filesys::POSIX->getcwd() reports /mnt/mem/tmp after a chdir()"
    );

    $fs->chdir('..');
    ok(
        $fs->getcwd eq '/mnt/mem',
        "Filesys::POSIX->getcwd() reports /mnt/mem after a chdir('..')"
    );

    $fs->chdir('..');
    ok(
        $fs->getcwd eq '/mnt',
        "Filesys::POSIX->getcwd() reports /mnt after a chdir('..')"
    );

    $fs->chdir('..');
    ok(
        $fs->getcwd eq '/',
        "Filesys::POSIX->getcwd() reports / after a chdir('..')"
    );
}

{
    my $fd = $fs->open( '/mnt/mem/test.txt', $O_CREAT );

    throws_errno_ok {
        $fs->unmount('/mnt/mem');
    }
    &Errno::EBUSY, "Filesys::POSIX->unmount() prevents unmounting busy filesystem /mnt/mem";

    $fs->close($fd);
    $fd = $fs->open( '/foo.txt', $O_CREAT );

    throws_errno_ok {
        $fs->unmount('/mnt/mem');
    }
    &Errno::EBUSY, "Filesys::POSIX->unmount() prevents unmounting busy filesystem /mnt/mem";

    throws_errno_ok {
        $fs->chdir('/mnt/mem');
        $fs->unmount('/mnt/mem');
    }
    &Errno::EBUSY, "Filesys::POSIX->unmount() fails when cwd is /mnt/mem";

    $fs->chdir('/');

    $fs->close($fd);
}

{
    $fs->mkdir("real");
    $fs->mkdir("real/0");
    my $inode = eval { $fs->stat('real/0') };
    ok($inode, 'Mkdir of real/0 succeeded');
    diag($@) if $@;

    $fs->mount( Filesys::POSIX::Real->new, 'real/0', path => '/' );
    $inode = eval { $fs->stat('real/0/etc/passwd') };
    ok( $inode, 'Mount at real/0 functions properly' );
    diag($@) if $@;
    $fs->unmount('real/0');
}

{
    $fs->unmount('/mnt/mem/tmp');
    $fs->unmount('/mnt/mem');

    throws_errno_ok {
        $fs->stat('/mnt/mem/tmp');
    }
    &Errno::ENOENT, "/mnt/mem/tmp can no longer be accessed after unmounting /mnt/mem";
}



( run in 0.673 second using v1.01-cache-2.11-cpan-39bf76dae61 )