1#!perl -w 2 3# Before `make install' is performed this script should be runnable with 4# `make test'. After `make install' it should work as `perl Linux-xattr.t' 5 6########################## 7 8# change 'tests => 2' to 'tests => last_test_to_print'; 9 10use strict; 11use Test::More; 12use Config; 13 14BEGIN { 15 my $tlib = $0; 16 $tlib =~ s|/[^/]*$|/lib|; 17 push(@INC, $tlib); 18} 19use t::Support; 20 21if (t::Support::should_skip()) { 22 plan skip_all => 'Tests unsupported on this OS/filesystem'; 23} elsif (($Config{osname} eq 'darwin') && ($Config{osvers} =~ m/^[0-8]\./)) { 24 plan skip_all => "Mac OS X 10.4 and earlier don't support empty values"; 25} else { 26 plan tests => 12; 27} 28 29use File::Temp qw(tempfile); 30use File::Path; 31use File::ExtAttr qw(setfattr getfattr delfattr); 32use IO::File; 33 34my $TESTDIR = ($ENV{ATTR_TEST_DIR} || '.'); 35my ($fh, $filename) = tempfile( DIR => $TESTDIR ); 36 37close $fh or die "can't close $filename $!"; 38 39# Create a directory. 40my $dirname = "$filename.dir"; 41eval { mkpath($dirname); }; 42if ($@) { 43 warn "Couldn't create $dirname: $@"; 44} 45 46#todo: try wierd characters in here? 47# try unicode? 48my $key = "alskdfjadf2340zsdflksjdfa09eralsdkfjaldkjsldkfj"; 49my $val = ''; 50 51########################## 52# Filename-based tests # 53########################## 54 55foreach ( $filename, $dirname ) { 56 print "# using $_\n"; 57 58#for (1..30000) { #checking memory leaks 59 60 #will die if xattr stuff doesn't work at all 61 setfattr($_, "$key", $val) or die "setfattr failed on filename $_: $!"; 62 63 #set it 64 is (setfattr($_, "$key", $val), 1); 65 66 #read it back 67 is (getfattr($_, "$key"), $val); 68 69 #delete it 70 ok (delfattr($_, "$key")); 71 72 #check that it's gone 73 is (getfattr($_, "$key"), undef); 74 75#} 76} 77 78########################## 79# IO::Handle-based tests # 80########################## 81 82$fh = new IO::File("<$filename") or die "Unable to open $filename"; 83 84print "# using file descriptor ".$fh->fileno()."\n"; 85 86#for (1..30000) { #checking memory leaks 87 88 #will die if xattr stuff doesn't work at all 89 setfattr($fh, "$key", $val) 90 or die "setfattr failed on file descriptor ".$fh->fileno().": $!"; 91 92 #set it 93 is (setfattr($fh, "$key", $val), 1); 94 95 #read it back 96 is (getfattr($fh, "$key"), $val); 97 98 #delete it 99 ok (delfattr($fh, "$key")); 100 101 #check that it's gone 102 is (getfattr($fh, "$key"), undef); 103#} 104#print STDERR "done\n"; 105#<STDIN>; 106 107# todo: Add support for IO::Dir handles, and test here. 108 109END { 110 unlink $filename if $filename; 111 rmdir $dirname if $dirname; 112}; 113