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