Whamcloud - gitweb
6f7e140303fb85a7e6a5d547bb67e8091d4e5269
[fs/lustre-release.git] / lustre / tests / tmpfs-sanity.sh
1 #!/bin/bash
2
3 fail()
4 {
5         echo "ERROR: $@"
6         exit 1
7 }
8
9 check_xattr()
10 {
11         name=$1
12         value=$2
13         file="$3"
14         
15         if test "x$value" != "x<deleted>"; then
16                 res=`$getattr -n $name $file 2>/dev/null | grep -v "^#" | sed 's/\"//g'`
17         
18                 if test "x$res" = "x$name=$value"; then
19                         return 0
20                 else
21                         return 1
22                 fi
23         else
24                 res=`$getattr -d -m ".*" $file 2>/dev/null | grep -v "^#" | sed 's/\"//g'`
25                 
26                 if echo $res | grep $name > /dev/null 2>&1; then
27                         return 1
28                 else
29                         return 0
30                 fi
31         fi
32 }
33
34 test_del_xattr()
35 {
36         name=$1
37         file=$2
38         message=$3
39
40         echo -n "$message..."
41         `$setattr -x $name $file 2> /dev/null`
42         
43         if test "x$?" != "x0"; then
44                 echo "failed"
45                 return 1
46         else
47                 check_xattr $name "<deleted>" $file && echo "done" || echo "failed"
48                 return 0
49         fi
50 }
51
52 test_set_xattr()
53 {
54         name=$1
55         value=$2
56         file=$3
57         message=$4
58
59         echo -n "$message..."
60         `$setattr -n $name -v $value $file 2>/dev/null`
61
62         if test "x$?" != "x0"; then
63                 echo "failed"
64                 return 1
65         else
66                 check_xattr $name $value $file && echo "done" || echo "failed"
67                 return 0
68         fi
69 }
70
71 test_list_xattr()
72 {
73         file=$1
74         message=$2
75
76         echo -n "$message..."
77         `$setattr -n list_name0 -v list_value0 $file 2>/dev/null`
78         `$setattr -n list_name1 -v list_value1 $file 2>/dev/null`
79         `$setattr -n list_name2 -v list_value2 $file 2>/dev/null`
80
81         values=`$getattr -d -m ".*" $file 2>/dev/null | grep -v "^#" | \
82 grep list_name | sed 's/\"//g'`
83
84         i=0
85         
86         for chunk in $values; do
87                 if test "x$chunk" != "xlist_name$i=list_value$i"; then
88                         echo "failed"
89                         return 1
90                 fi
91                 
92                 let i=$i+1
93         done
94                 
95         echo "done"
96         return 0
97 }
98
99 # check each function related to xattrs
100 test_individual()
101 {
102         file="$1"
103
104         test_set_xattr test_name0 test_value0 $file "Create new attribute" &&
105         test_set_xattr test_name0 test_value012345 $file "Expanding attribute" &&
106         test_set_xattr test_name0 test_value0 $file "Shrinking attribute" &&
107         test_del_xattr test_name0 $file "Delete attribute"
108         test_list_xattr $file "Getting list of attributes"
109 }
110
111 # checking xattr code as whole working. Not implemented yet.
112 test_composite()
113 {
114         return 0
115 }
116
117 getattr=$(which getfattr 2>/dev/null)
118 setattr=$(which setfattr 2>/dev/null)
119
120 if test "x$getattr" = "x" -o "x$setattr" = "x"; then
121         fail "Can't find getfattr or setfattr utilities in current path."
122 fi
123
124 if ! mount | grep tmpfs > /dev/null 2>&1; then
125         fail "tmpfs is not mounted"
126 fi
127         
128 mntpoint=$(mount | grep tmpfs | awk '{print $3}')
129
130 if test "x$mntpoint" = "x"; then
131         fail "Can't find tmpfs mount point"
132 fi
133
134 rm -fr $mntpoint/test_file0 2> /dev/null
135 touch "$mntpoint/test_file0"
136
137 test_individual "$mntpoint/test_file0" && 
138 test_composite "$mntpoint/test_file0" && echo "All tests passed"