1#!perl -w 2 3use strict; 4use Test::More; 5 6BEGIN { 7 my $tlib = $0; 8 $tlib =~ s|/[^/]*$|/lib|; 9 push(@INC, $tlib); 10} 11use t::Support; 12 13if (t::Support::should_skip()) { 14 plan skip_all => 'Tests unsupported on this OS/filesystem'; 15} else { 16 plan tests => 24; 17} 18 19use File::Temp qw(tempfile); 20use File::Path; 21use File::ExtAttr::Tie; 22use File::ExtAttr qw(getfattr); 23 24my $TESTDIR = ($ENV{ATTR_TEST_DIR} || '.'); 25my ($fh, $filename) = tempfile( DIR => $TESTDIR ); 26 27close $fh or die "can't close $filename $!"; 28 29# Create a directory. 30my $dirname = "$filename.dir"; 31eval { mkpath($dirname); }; 32if ($@) { 33 warn "Couldn't create $dirname: $@"; 34} 35 36foreach ( $filename, $dirname ) { 37 print "# using $_\n"; 38 39 my %extattr; 40 my @ks; 41 42 tie %extattr, 'File::ExtAttr::Tie', $_; # ok()? 43 44 # Check there are no user extattrs. 45 @ks = keys(%extattr); 46 @ks = t::Support::filter_system_attrs(@ks); 47 ok(scalar(@ks) == 0); 48 49 # Test multiple attributes. 50 my %test_attrs = ( 'foo' => '123', 'bar' => '456' ); 51 my $k; 52 53 foreach $k (sort(keys(%test_attrs))) 54 { 55 my $v = $test_attrs{$k}; 56 57 # Check that creation works. 58 $extattr{$k} = $v; 59 is(getfattr($_, "$k"), $v); 60 61 # Check that updating works. 62 $extattr{$k} = "$v$v"; 63 is(getfattr($_, "$k"), "$v$v"); 64 65 $extattr{$k} = $v; 66 is(getfattr($_, "$k"), $v); 67 68 # Check that deletion works. 69 delete $extattr{$k}; 70 is(getfattr($_, "$k"), undef); 71 } 72 73 # Recreate the keys and check that they're all in the hash. 74 75 foreach $k (sort(keys(%test_attrs))) 76 { 77 my $v = $test_attrs{$k}; 78 79 # Check that creation works. 80 $extattr{$k} = $v; 81 is(getfattr($_, "$k"), $v); 82 } 83 84 # Check there are only our extattrs. 85 @ks = keys(%extattr); 86 @ks = t::Support::filter_system_attrs(@ks); 87 ok(scalar(@ks) == scalar(keys(%test_attrs))); 88 print '# '.join(' ', @ks)."\n"; 89} 90 91END { 92 unlink $filename if $filename; 93 rmdir $dirname if $dirname; 94}; 95