1 #
2 # CDDL HEADER START
3 #
4 # The contents of this file are subject to the terms of the
5 # Common Development and Distribution License (the "License").
6 # You may not use this file except in compliance with the License.
7 #
8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 # or http://www.opensolaris.org/os/licensing.
10 # See the License for the specific language governing permissions
11 # and limitations under the License.
12 #
13 # When distributing Covered Code, include this CDDL HEADER in each
14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 # If applicable, add the following below this CDDL HEADER, with the
16 # fields enclosed by brackets "[]" replaced with your own identifying
17 # information: Portions Copyright [yyyy] [name of copyright owner]
18 #
19 # CDDL HEADER END
20 #
21
22 #
23 # Copyright 2010 Sun Microsystems, Inc. All rights reserved.
24 #
25
26 # a function that takes a file, then creates and verifies
27 # an xattr on that file. The xattr_contents is the file
28 # that should appear in the xattr namespace.
29
30 function create_xattr
31 { # filename xattr_name xattr_contents
32 typeset FILE=$1
33 typeset XATTR_NAME=$2
34 typeset XATTR_CONTENTS=$3
35
36 # read any empty xattr dir on that file
37 cti_execute_cmd "runat $FILE ls"
38
39 # create the xattr
40 cti_execute FAIL "runat $FILE cp $XATTR_CONTENTS $XATTR_NAME"
41 if [[ $? != 0 ]]; then
42 cti_fail "FAIL:In function create_xattr: "\
43 "create xattr-of-$FILE failed unexpectedly"
44 return
45 fi
46
47 verify_xattr $FILE $XATTR_NAME $XATTR_CONTENTS
48 }
49
50 # a function that compares the a single xattr between two files
51 # and checks to see if their contents are identical
52
53 function compare_xattrs
54 { # filename1 filename2 xattr_name
55 typeset FILE1=$1
56 typeset FILE2=$2
57 typeset XATTR_NAME=$3
58
59 cti_execute_cmd "runat $FILE1 cat $XATTR_NAME > /tmp/file1.$$"
60 cti_execute_cmd "runat $FILE2 cat $XATTR_NAME > /tmp/file2.$$"
61 cti_execute_cmd "diff /tmp/file1.$$ /tmp/file2.$$ \
62 >> /tmp/diffout.$$ 2>&1"
63 if [[ $? != 0 ]]; then
64 cti_fail "FAIL:In function compare_xattrs: "\
65 "compare xattr-of-$FILE1 with xattr-of-$FILE2 "\
66 "failed unexpectedly"
67 cti_report "diff xattrs-of-$FILE1 xattrs-of-$FILE2 "\
68 "printed you can see the file /tmp/diffout.$$"
69 return
70 else
71 cti_report "PASS:In function compare_xattrs: "\
72 "compare xattr-of-$FILE1 with xattr-of-$FILE2 "\
73 "succeeded as expected"
74 fi
75
76 cti_execute_cmd "rm /tmp/file1.$$ /tmp/file2.$$"
77 if [[ $? != 0 ]]; then
78 cti_fail "FAIL:In function compare_xattrs: "\
79 "rm temp file: /tmp/file1.$$ /tmp/file2.$$ "\
80 "failed unexpectedly"
81 return
82 else
83 cti_report "PASS:In function compare_xattrs: "\
84 "rm temp file: /tmp/file1.$$ /tmp/file2.$$ "\
85 "succeeded as expected"
86 fi
87 }
88
89 # verify xattr exists and has content matching xattr_contents
90
91 function verify_xattr
92 { # filename xattr_name xattr_contents
93 typeset FILE=$1
94 typeset XATTR_NAME=$2
95 typeset XATTR_CONTENTS=$3
96
97 cti_execute_cmd "runat $FILE diff $XATTR_NAME $XATTR_CONTENTS"
98 if [[ $? != 0 ]]; then
99 cti_fail "FAIL:In function verify_xattr: "\
100 "verify xattr-of-$FILE failed unexpectedly"
101 return
102 fi
103 }
104
105 function delete_xattr
106 { # filename xattr_name
107 typeset FILE=$1
108 typeset XATTR_NAME=$2
109
110 # delete the xattr
111 cti_execute_cmd "runat $FILE rm $XATTR_NAME"
112 if [[ $? != 0 ]]; then
113 cti_fail "FAIL:In function delete_xattr: "\
114 "delete xattr-of-$FILE failed unexpectedly"
115 return
116 else
117 cti_report "PASS:In function delete_xattr: "\
118 "delete xattr-of-$FILE succeeded as expected"
119 fi
120
121 # make sure it's gone (ls should fail)
122 cti_execute PASS "runat $FILE ls $XATTR_NAME"
123 if [[ $? == 0 ]]; then
124 cti_fail "FAIL:In function delete_xattr: "\
125 "$FILE has xattr named $XATTR_NAME unexpectedly"
126 return
127 else
128 cti_report "PASS:In function delete_xattr: "\
129 "$FILE does not have xattr named "\
130 "$XATTR_NAME as expected"
131 fi
132
133 }
134
135 # not sure about this : really this should be testing write/append
136
137 function verify_write_xattr
138 { # filename xattr_name
139 typeset FILE=$1
140 typeset XATTR_NAME=$2
141
142 cti_execute_cmd "runat $FILE dd if=/etc/passwd of=$XATTR_NAME"
143 if [[ $? != 0 ]]; then
144 cti_fail "FAIL:In function verify_write_xattr: "\
145 "create xattr-of-$FILE named $XATTR_NAME "\
146 "failed unexpectedly"
147 return
148 else
149 cti_report "PASS:In function verify_write_xattr: "\
150 "create xattr-of-$FILE named $XATTR_NAME succeeded"
151 fi
152
153 cti_execute_cmd "runat $FILE cat $XATTR_NAME \
154 > /tmp/$XATTR_NAME.$$ 2>&1"
155 if [[ $? != 0 ]]; then
156 cti_fail "FAIL:In function verify_write_xattr: "\
157 "cat xattr-of-$FILE named $XATTR_NAME "\
158 "failed unexpectedly"
159 return
160 else
161 cti_report "PASS:In function verify_write_xattr: "\
162 "cat xattr-of-$FILE named $XATTR_NAME succeeded"
163 fi
164
165 cti_execute_cmd "dd if=/etc/passwd of=/tmp/passwd_dd.$$"
166 cti_execute_cmd "diff /tmp/passwd_dd.$$ /tmp/$XATTR_NAME.$$"
167 if [[ $? != 0 ]]; then
168 cti_fail "FAIL:In function verify_write_xattr: "\
169 "diff xattr-of-$FILE named $XATTR_NAME failed"
170 return
171 else
172 cti_report "PASS:In function verify_write_xattr: "\
173 "diff xattr-of-$FILE named $XATTR_NAME succeeded"
174 fi
175
176 cti_execute_cmd "rm /tmp/passwd_dd.$$ /tmp/$XATTR_NAME.$$"
177 }
178
179 # this function is to create the expected output
180
181 function create_expected_output
182 { # expected_output_file contents_of_the_output
183 typeset FILE=$1
184 shift
185 if [[ -e $FILE ]]; then
186 cti_execute_cmd "rm $FILE"
187 fi
188
189 for line in $@
190 do
191 cti_execute_cmd "echo $line >> $FILE"
192 done
193 }