File-Data

 view release on metacpan or  search on metacpan

t/test.t  view on Meta::CPAN


$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 )