#!perl -w use strict; use Test::More; BEGIN { my $tlib = $0; $tlib =~ s|/[^/]*$|/lib|; push(@INC, $tlib); } use t::Support; if (t::Support::should_skip()) { plan skip_all => 'Tests unsupported on this OS/filesystem'; } else { plan tests => 40; } use File::Temp qw(tempfile); use File::Path; use File::ExtAttr::Tie; use File::ExtAttr qw(getfattr); my $TESTDIR = ($ENV{ATTR_TEST_DIR} || '.'); my ($fh, $filename) = tempfile( DIR => $TESTDIR ); close $fh or die "can't close $filename $!"; # Create a directory. my $dirname = "$filename.dir"; eval { mkpath($dirname); }; if ($@) { warn "Couldn't create $dirname: $@"; } foreach ( $filename, $dirname ) { print "# using $_\n"; my %extattr; my @ks; tie %extattr, 'File::ExtAttr::Tie', $_, { namespace => 'nonuser' }; # ok()? # Check there are no user extattrs. @ks = keys(%extattr); @ks = t::Support::filter_system_attrs(@ks); ok(scalar(@ks) == 0); # Test multiple attributes. my %test_attrs = ( 'foo' => '123', 'bar' => '456' ); my $k; my $err; foreach $k (sort(keys(%test_attrs))) { my $v = $test_attrs{$k}; # Check that creation works. $extattr{$k} = $v; $err = int $!; is ($err, $!{EOPNOTSUPP}); is(getfattr($_, "$k"), undef); # Check that updating works. $extattr{$k} = "$v$v"; $err = int $!; is ($err, $!{EOPNOTSUPP}); is(getfattr($_, "$k"), undef); $extattr{$k} = $v; $err = int $!; is ($err, $!{EOPNOTSUPP}); is(getfattr($_, "$k"), undef); # Check that deletion works. delete $extattr{$k}; is(getfattr($_, "$k"), undef); } # Recreate the keys and check that they're all in the hash. foreach $k (sort(keys(%test_attrs))) { my $v = $test_attrs{$k}; # Check that creation works. $extattr{$k} = $v; $err = int $!; is ($err, $!{EOPNOTSUPP}); is(getfattr($_, "$k"), undef); } # Check there are only our extattrs. @ks = keys(%extattr); @ks = t::Support::filter_system_attrs(@ks); ok(scalar(@ks) == 0); print '# '.join(' ', @ks)."\n"; } END { unlink $filename if $filename; rmdir $dirname if $dirname; };