Whamcloud - gitweb
b=11564
[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                 echo "failed"
79                 return 1
80         }
81         
82         `$setattr -n list_name1 -v list_value1 $file 2>/dev/null` || {
83                 echo "failed"
84                 return 1
85         }
86         
87         `$setattr -n list_name2 -v list_value2 $file 2>/dev/null` || {
88                 echo "failed"
89                 return 1
90         }
91
92         values=`$getattr -d -m ".*" $file 2>/dev/null | grep -v "^#" | \
93 grep list_name | sed 's/\"//g'`
94
95         i=0
96         
97         for chunk in $values; do
98                 if test "x$chunk" != "xlist_name$i=list_value$i"; then
99                         echo "failed"
100                         return 1
101                 fi
102                 
103                 let i=$i+1
104         done
105                 
106         echo "done"
107         return 0
108 }
109
110 # check each function related to xattrs
111 test_individual()
112 {
113         file="$1"
114
115         test_set_xattr test_name0 test_value0 $file "Create new attribute" &&
116         test_set_xattr test_name0 test_value012345 $file "Expanding attribute" &&
117         test_set_xattr test_name0 test_value0123 $file "Shrinking attribute" &&
118         test_del_xattr test_name0 $file "Delete attribute"
119         test_list_xattr $file "Getting list of attributes"
120 }
121
122 # checking xattr code as a whole. Not implemented yet.
123 test_composite()
124 {
125         return 0
126 }
127
128 getattr=$(which getfattr 2>/dev/null)
129 setattr=$(which setfattr 2>/dev/null)
130
131 if test "x$getattr" = "x" -o "x$setattr" = "x"; then
132         fail "Can't find getfattr or setfattr utilities in current path."
133 fi
134
135 if ! mount | grep tmpfs > /dev/null 2>&1; then
136         fail "tmpfs is not mounted"
137 fi
138         
139 mntpoint=$(mount | grep tmpfs | awk '{print $3}')
140
141 if test "x$mntpoint" = "x"; then
142         fail "Can't find tmpfs mount point"
143 fi
144
145 rm -fr $mntpoint/test_file0 2> /dev/null
146 touch "$mntpoint/test_file0"
147
148 test_individual "$mntpoint/test_file0" && 
149 test_composite "$mntpoint/test_file0" && echo "All tests passed"