my
$tmpdir
= File::Temp::tempdir(
'CLEANUP'
=> 1);
my
(
$tmpfile_fh
,
$tmpfile
) = File::Temp::tempfile(
'DIR'
=>
$tmpdir
);
my
$fs
= Filesys::POSIX->new( Filesys::POSIX::Mem->new );
$fs
->import_module(
'Filesys::POSIX::Extensions'
);
$fs
->mkpath(
'/mnt/mem'
);
$fs
->mount(
Filesys::POSIX::Mem->new,
'/mnt/mem'
,
'noatime'
=> 1
);
$fs
->
mkdir
(
'/bin'
);
$fs
->
map
(
$tmpfile
,
'/bin/sh'
);
my
$inode
=
$fs
->
stat
(
'/bin/sh'
);
{
ok(
ref
(
$inode
) eq
'Filesys::POSIX::Real::Inode'
,
"Filesys::POSIX->map() succeeded"
);
throws_ok {
$fs
->touch(
'/bin/false'
);
$fs
->
map
(
'/bin/false'
,
'/bin/false'
);
}
qr/^File exists/
,
"Filesys::POSIX->map() fails when destination exists"
;
}
{
$fs
->attach(
$inode
,
'/bin/bash'
);
ok(
$fs
->
stat
(
'/bin/bash'
) eq
$inode
,
"Filesys::POSIX->attach() operates expectedly"
);
throws_ok {
$fs
->touch(
'/bin/ksh'
);
$fs
->attach(
$inode
,
'/bin/ksh'
);
}
qr/^File exists/
,
"Filesys::POSIX->attach() will complain when destination exists"
;
}
{
$fs
->
mkdir
(
'/mnt/mem/bin'
);
$fs
->alias(
'/bin/bash'
,
'/mnt/mem/bin/bash'
);
ok(
$fs
->
stat
(
'/mnt/mem/bin/bash'
) eq
$inode
,
"Filesys::POSIX->alias() operates expectedly"
);
throws_ok {
$fs
->alias(
'/bin/sh'
,
'/mnt/mem/bin/bash'
);
}
qr/^File exists/
,
"Filesys::POSIX->alias() will complain when destination exists"
;
}
{
throws_ok {
$fs
->detach(
'/mnt/mem/bin/bash'
);
$fs
->
stat
(
'/mnt/mem/bin/bash'
);
}
qr/^No such file or directory/
,
"Filesys::POSIX->detach() operates expectedly"
;
throws_ok {
$fs
->detach(
'/mnt/mem/bin/bash'
);
}
qr/^No such file or directory/
,
"Filesys::POSIX->detach() will complain when specified inode does not exist"
;
}
{
$fs
->touch(
'/bin/true'
);
$fs
->replace(
'/bin/true'
,
$inode
);
ok(
$fs
->
stat
(
'/bin/true'
) eq
$inode
,
"Filesys::POSIX->replace() operates expectedly"
);
throws_ok {
$fs
->replace(
'/bin/csh'
,
$inode
);
}
qr/^No such file or directory/
,
"Filesys::POSIX->replace() will complain when specified path does not exist"
;
}