File-Data
view release on metacpan or search on metacpan
$File::Data::FATAL=0;
$File::Data::REFERENCE=0;
$File::Data::DEBUG=0;
my $rj = './t/japh';
my $ro = './t/read';
my $rp = './t/perms';
my $rt = './t/rfi-'.$$.'_'.time;
my $rw = './t/write';
my $rx = './t/extra';
# CREATE (open) our files - with valid permissions
# =============================================================================
$i_test++; # 1
$i_errs = 0;
foreach my $perm (qw(ro > <)) {
my $o_ro = File::Data->new($ro, $perm); # read
unless (ref($o_ro)) {
$i_errs++;
print "[$i_test] failed read-only file($ro, $perm) => o_ro($o_ro)\n";
}
}
ok( !$i_errs, 'read' );
foreach my $perm ('', qw(rw +< +>)) {
my $o_rw = File::Data->new($rw, $perm); # write
unless (ref($o_rw)) {
$i_errs++;
print "[$i_test] failed read-write file($rw, $perm) => o_rw($o_rw)\n";
}
}
ok( !$i_errs, 'write' );
# =============================================================================
# $o_rx = undef; # how to close the file
# $o_rx->close;
# LOCK (ed)
# =============================================================================
$i_test++; # 2
$i_errs = 0;
{
$File::Data::SILENT=1;
my %file = (
'read' => File::Data->new($ro, 'ro'),
'write' => File::Data->new($rw),
);
foreach my $key (sort keys %file) { # cannot read/write twice
my $orig = $file{$key}->_var('filename');
my $o_new = File::Data->new($orig);
if ($o_new) {
$i_errs++;
print "[$i_test] re-read($orig) => o_new($o_new)!\n";
}
}
$File::Data::SILENT=0;
}
ok( !$i_errs, 'locked' );
# =============================================================================
# PERM (issions) _check_access
# =============================================================================
$i_test++; # 3
$i_errs = 0;
# invalid filename
{
$File::Data::SILENT=1;
foreach my $file ('', $rt, qw()) {
my $o_rp = File::Data->new('', '<'); # invalid filename
if ($o_rp) {
$i_errs++;
print "[$i_test] invalid file() => o_rp($o_rp)\n";
}
}
}
ok( !$i_errs, 'invalid filename' );
# invalid permissions
{ # things that _might_ look like valid permissions to someone else
foreach my $perms ($ro, $rw, $rt, qw(>+< ++ <> <+ - rad read write rww roo)) {
my $o_rp = File::Data->new($rp, $perms); # invalid perms
if ($o_rp) {
$i_errs++;
print "[$i_test] invalid permissions($perms) accepted => o_rp($o_rp)\n";
}
}
}
ok( !$i_errs, 'invalid permissions' );
# directory
{
foreach my $dir (qw(t .. ../)) { # todo - un*x only?
my $o_rp = File::Data->new($dir); # dirs
if ($o_rp) {
$i_errs++;
print "[$i_test] invalid directory(t) accepted => o_rp($o_rp)\n";
}
}
}
ok( !$i_errs, 'directory checks' );
# permissions
{
# $File::Data::SILENT=1;
my $root = !$<; #
foreach my $perm ('0000'..'0777') { #
next if $perm =~ /[89]/; # :-\
my $i_cnt = chmod oct($perm), $rp;
if ($i_cnt != 1) {
$i_errs++;
print "[$i_test] failed($i_cnt) to chmod($perm, $rp)\n";
} else {
my $o_rp = File::Data->new($rp); # perms
unless ((!$o_rp && $perm <= '0577' ||
$o_rp && $root) ||
( $o_rp && $perm >= '0600')) {
( run in 1.145 second using v1.01-cache-2.11-cpan-e1769b4cff6 )