annotate usr/src/test/zfs-tests/tests/functional/acl/acl_common.kshlib @ 13899:0bcf78798346

3311 Want a test framework for arbitrary OS unit tests 3312 Add a testrunner package for OS unit tests 3313 Add a testrunner package to convert ZFS tests from STF Reviewed by: Matt Ahrens <matthew.ahrens@delphix.com> Reviewed by: Will Guyette <will.guyette@delphix.com> Reviewed by: Dan Kimmel <dan.kimmel@delphix.com> Reviewed by: Adam Leventhal <ahl@delphix.com> Reviewed by: Henrik Mattson <henrik.mattson@delphix.com> Reviewed by: Sonu Pillai <sonu.pillai@delphix.com> Reviewed by: Christopher Siden <chris.siden@delphix.com> Reviewed by: George Wilson <george.wilson@delphix.com> Reviewed by: Richard Lowe <richlowe@richlowe.net> Approved by: Richard Lowe <richlowe@richlowe.net>
author John Wren Kennedy <john.kennedy@delphix.com>
date Wed, 05 Dec 2012 22:04:50 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13899
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
1 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
2 # CDDL HEADER START
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
3 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
4 # The contents of this file are subject to the terms of the
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
5 # Common Development and Distribution License (the "License").
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
6 # You may not use this file except in compliance with the License.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
7 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
9 # or http://www.opensolaris.org/os/licensing.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
10 # See the License for the specific language governing permissions
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
11 # and limitations under the License.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
12 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
13 # When distributing Covered Code, include this CDDL HEADER in each
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
15 # If applicable, add the following below this CDDL HEADER, with the
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
16 # fields enclosed by brackets "[]" replaced with your own identifying
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
17 # information: Portions Copyright [yyyy] [name of copyright owner]
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
18 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
19 # CDDL HEADER END
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
20 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
21
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
22 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
23 # Copyright 2009 Sun Microsystems, Inc. All rights reserved.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
24 # Use is subject to license terms.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
25 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
26
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
27 . $STF_SUITE/tests/functional/acl/acl.cfg
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
28 . $STF_SUITE/include/libtest.shlib
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
29
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
30 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
31 # Get the given file/directory access mode
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
32 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
33 # $1 object -- file or directroy
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
34 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
35 function get_mode #<obj>
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
36 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
37 typeset obj=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
38 if (( ${#obj} == 0 )); then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
39 return 1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
40 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
41
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
42 $LS -ld $obj | $AWK '{print $1}'
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
43 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
44
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
45 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
46 # Get the given file/directory ACL
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
47 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
48 # $1 object -- file or directroy
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
49 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
50 function get_acl #<obj>
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
51 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
52 typeset obj=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
53 if (( ${#obj} == 0 )); then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
54 return 1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
55 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
56
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
57 $LS -vd $obj | $NAWK '(NR != 1) {print $0}'
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
58 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
59
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
60 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
61 # Get the given file/directory ACL
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
62 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
63 # $1 object -- file or directroy
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
64 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
65 function get_compact_acl #<obj>
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
66 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
67 typeset obj=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
68 if (( ${#obj} == 0 )); then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
69 return 1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
70 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
71
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
72 $LS -Vd $obj | $NAWK '(NR != 1) {print $0}'
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
73 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
74
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
75 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
76 # Check the given two files/directories have the same ACLs
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
77 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
78 # Return 0, if source object acl is equal to target object acl.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
79 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
80 # $1 source object
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
81 # $2 target object
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
82 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
83 function compare_acls #<src> <tgt>
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
84 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
85 typeset src=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
86 typeset tgt=$2
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
87
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
88 (( ${#src} == 0 || ${#tgt} == 0 )) && return 1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
89 [[ $src == $tgt ]] && return 0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
90
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
91 typeset tmpsrc=/tmp/compare_acls.src.$$
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
92 typeset tmptgt=/tmp/compare_acls.tgt.$$
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
93
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
94 get_acl $src > $tmpsrc
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
95 get_acl $tgt > $tmptgt
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
96 typeset -i ret=0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
97 $DIFF $tmpsrc $tmptgt > /dev/null 2>&1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
98 ret=$?
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
99 $RM -f $tmpsrc $tmptgt
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
100
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
101 if (( ret != 0 )); then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
102 return $ret
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
103 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
104
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
105 get_compact_acl $src > $tmpsrc
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
106 get_compact_acl $tgt > $tmptgt
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
107 $DIFF $tmpsrc $tmptgt > /dev/null 2>&1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
108 ret=$?
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
109 $RM -f $tmpsrc $tmptgt
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
110
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
111 return $ret
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
112 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
113
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
114 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
115 # Check that the given two objects have the same modes.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
116 # Return 0, if their modes are equal with each other. Otherwise, return 1.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
117 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
118 # $1 source object
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
119 # $2 target object
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
120 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
121 function compare_modes #<src> <tgt>
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
122 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
123 typeset src=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
124 typeset tgt=$2
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
125 typeset -i i=0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
126 set -A mode
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
127
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
128 (( ${#src} == 0 || ${#tgt} == 0 )) && return 1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
129 [[ $src == $tgt ]] && return 0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
130
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
131 typeset obj
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
132 for obj in $src $tgt
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
133 do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
134 mode[i]=$(get_mode $obj)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
135
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
136 (( i = i + 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
137 done
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
138
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
139 [[ ${mode[0]} != ${mode[1]} ]] && return 1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
140
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
141 return 0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
142 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
143
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
144 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
145 # Check that the given two objects have the same xattrs.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
146 # Return 0, if their xattrs are equal with each other. Otherwise, return 1.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
147 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
148 # $1 source object
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
149 # $2 target object
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
150 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
151 function compare_xattrs #<src> <tgt>
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
152 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
153 typeset src=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
154 typeset tgt=$2
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
155
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
156 (( ${#src} == 0 || ${#tgt} == 0 )) && return 1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
157 [[ $src == $tgt ]] && return 0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
158
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
159 typeset tmpsrc=/tmp/compare_xattrs.src.$$
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
160 typeset tmptgt=/tmp/compare_xattrs.tgt.$$
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
161
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
162 get_xattr $src > $tmpsrc
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
163 get_xattr $tgt > $tmptgt
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
164 typeset -i ret=0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
165 $DIFF $tmpsrc $tmptgt > /dev/null 2>&1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
166 ret=$?
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
167 $RM -f $tmpsrc $tmptgt
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
168
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
169 return $ret
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
170 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
171
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
172 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
173 # Check '+' is set for a given file/directory with 'ls [-l]' command
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
174 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
175 # $1 object -- file or directory.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
176 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
177 function plus_sign_check_l #<obj>
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
178 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
179 typeset obj=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
180 if (( ${#obj} == 0 )); then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
181 return 1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
182 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
183
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
184 $LS -ld $obj | $AWK '{print $1}' | $GREP "+\>" > /dev/null
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
185
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
186 return $?
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
187 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
188
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
189 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
190 # Check '+' is set for a given file/directory with 'ls [-v]' command
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
191 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
192 # $1 object -- file or directory.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
193 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
194 function plus_sign_check_v #<obj>
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
195 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
196 typeset obj=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
197 if (( ${#obj} == 0 )); then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
198 return 1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
199 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
200
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
201 $LS -vd $obj | $NAWK '(NR == 1) {print $1}' | $GREP "+\>" > /dev/null
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
202
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
203 return $?
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
204 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
205
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
206 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
207 # A wrapper function of c program
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
208 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
209 # $1 legal login name
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
210 # $2-n commands and options
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
211 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
212 function chgusr_exec #<login_name> <commands> [...]
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
213 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
214 $CHG_USR_EXEC $@
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
215 return $?
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
216 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
217
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
218 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
219 # Export the current user for the following usr_exec operating.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
220 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
221 # $1 legal login name
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
222 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
223 function set_cur_usr #<login_name>
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
224 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
225 export ZFS_ACL_CUR_USER=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
226 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
227
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
228 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
229 # Run commands by $ZFS_ACL_CUR_USER
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
230 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
231 # $1-n commands and options
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
232 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
233 function usr_exec #<commands> [...]
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
234 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
235 $CHG_USR_EXEC "$ZFS_ACL_CUR_USER" $@
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
236 return $?
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
237 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
238
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
239 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
240 # Count how many ACEs for the speficied file or directory.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
241 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
242 # $1 file or directroy name
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
243 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
244 function count_ACE #<file or dir name>
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
245 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
246 if [[ ! -e $1 ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
247 log_note "Need input file or directroy name."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
248 return 1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
249 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
250
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
251 $LS -vd $1 | $NAWK 'BEGIN {count=0}
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
252 (NR != 1)&&(/[0-9]:/) {count++}
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
253 END {print count}'
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
254
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
255 return 0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
256 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
257
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
258 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
259 # Get specified number ACE content of specified file or directory.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
260 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
261 # $1 file or directory name
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
262 # $2 specified number
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
263 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
264 function get_ACE #<file or dir name> <specified number> <verbose|compact>
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
265 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
266 if [[ ! -e $1 || $2 -ge $(count_ACE $1) ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
267 return 1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
268 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
269
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
270 typeset file=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
271 typeset -i num=$2
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
272 typeset format=${3:-verbose}
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
273 typeset -i next_num=-1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
274
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
275 typeset tmpfile=/tmp/tmp_get_ACE.$$
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
276 typeset line=""
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
277 typeset args
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
278
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
279 case $format in
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
280 verbose) args="-vd"
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
281 ;;
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
282 compact) args="-Vd"
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
283 ;;
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
284 *) log_fail "Invalid parameter as ($format), " \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
285 "only verbose|compact is supported."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
286 ;;
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
287 esac
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
288
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
289 $LS $args $file > $tmpfile
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
290 (( $? != 0 )) && log_fail "FAIL: $LS $args $file > $tmpfile"
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
291 while read line; do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
292 [[ -z $line ]] && continue
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
293 if [[ $args == -vd ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
294 if [[ $line == "$num":* ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
295 (( next_num = num + 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
296 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
297 if [[ $line == "$next_num":* ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
298 break
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
299 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
300 if (( next_num != -1 )); then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
301 print -n $line
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
302 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
303 else
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
304 if (( next_num == num )); then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
305 print -n $line
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
306 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
307 (( next_num += 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
308 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
309 done < $tmpfile
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
310
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
311 $RM -f $tmpfile
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
312 (( $? != 0 )) && log_fail "FAIL: $RM -f $tmpfile"
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
313 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
314
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
315 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
316 # Cleanup exist user/group.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
317 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
318 function cleanup_user_group
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
319 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
320 del_user $ZFS_ACL_ADMIN
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
321
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
322 del_user $ZFS_ACL_STAFF1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
323 del_user $ZFS_ACL_STAFF2
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
324 del_group $ZFS_ACL_STAFF_GROUP
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
325
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
326 del_user $ZFS_ACL_OTHER1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
327 del_user $ZFS_ACL_OTHER2
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
328 del_group $ZFS_ACL_OTHER_GROUP
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
329
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
330 return 0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
331 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
332
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
333 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
334 # Clean up testfile and test directory
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
335 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
336 function cleanup
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
337 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
338 if [[ -d $TESTDIR ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
339 cd $TESTDIR
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
340 $RM -rf $TESTDIR/*
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
341 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
342 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
343
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
344 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
345 # According to specified access or acl_spec, do relevant operating by using the
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
346 # specified user.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
347 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
348 # $1 specified user
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
349 # $2 node
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
350 # $3 acl_spec or access
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
351 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
352 function rwx_node #user node acl_spec|access
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
353 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
354 typeset user=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
355 typeset node=$2
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
356 typeset acl_spec=$3
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
357
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
358 if [[ $user == "" || $node == "" || $acl_spec == "" ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
359 log_note "node or acl_spec are not defined."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
360 return 1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
361 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
362
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
363 if [[ -d $node ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
364 case $acl_spec in
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
365 *:read_data:*|read_data)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
366 chgusr_exec $user $LS -l $node > /dev/null 2>&1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
367 return $? ;;
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
368 *:write_data:*|write_data)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
369 if [[ -f ${node}/tmpfile ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
370 log_must $RM -f ${node}/tmpfile
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
371 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
372 chgusr_exec $user $TOUCH ${node}/tmpfile > \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
373 /dev/null 2>&1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
374 return $? ;;
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
375 *"execute:"*|execute)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
376 chgusr_exec $user $FIND $node > /dev/null 2>&1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
377 return $? ;;
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
378 esac
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
379 else
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
380 case $acl_spec in
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
381 *:read_data:*|read_data)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
382 chgusr_exec $user $CAT $node > /dev/null 2>&1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
383 return $? ;;
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
384 *:write_data:*|write_data)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
385 chgusr_exec $user $DD if=/usr/bin/ls of=$node > \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
386 /dev/null 2>&1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
387 return $? ;;
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
388 *"execute:"*|execute)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
389 ZFS_ACL_ERR_STR=$(chgusr_exec $user $node 2>&1)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
390 return $? ;;
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
391 esac
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
392 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
393 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
394
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
395 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
396 # Get the given file/directory xattr
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
397 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
398 # $1 object -- file or directroy
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
399 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
400 function get_xattr #<obj>
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
401 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
402 typeset obj=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
403 typeset xattr
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
404 if (( ${#obj} == 0 )); then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
405 return 1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
406 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
407
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
408 for xattr in `$RUNAT $obj $LS | \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
409 /usr/xpg4/bin/egrep -v -e SUNWattr_ro -e SUNWattr_rw` ; do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
410 $RUNAT $obj $SUM $xattr
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
411 done
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
412 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
413
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
414 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
415 # Get the owner of a file/directory
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
416 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
417 function get_owner #node
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
418 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
419 typeset node=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
420 typeset value
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
421
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
422 if [[ -z $node ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
423 log_fail "node are not defined."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
424 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
425
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
426 if [[ -d $node ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
427 value=$($LS -dl $node | $AWK '{print $3}')
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
428 elif [[ -e $node ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
429 value=$($LS -l $node | $AWK '{print $3}')
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
430 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
431
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
432 $ECHO $value
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
433 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
434
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
435 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
436 # Get the group of a file/directory
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
437 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
438 function get_group #node
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
439 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
440 typeset node=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
441 typeset value
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
442
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
443 if [[ -z $node ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
444 log_fail "node are not defined."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
445 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
446
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
447 if [[ -d $node ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
448 value=$($LS -dl $node | $AWK '{print $4}')
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
449 elif [[ -e $node ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
450 value=$($LS -l $node | $AWK '{print $4}')
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
451 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
452
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
453 $ECHO $value
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
454 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
455
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
456
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
457 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
458 # Get the group name that a UID belongs to
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
459 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
460 function get_user_group #uid
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
461 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
462 typeset uid=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
463 typeset value
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
464
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
465 if [[ -z $uid ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
466 log_fail "UID not defined."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
467 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
468
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
469 value=$(id $uid)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
470
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
471 if [[ $? -eq 0 ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
472 value=${value##*\(}
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
473 value=${value%%\)*}
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
474 $ECHO $value
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
475 else
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
476 log_fail "Invalid UID (uid)."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
477 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
478 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
479
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
480 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
481 # Get the specified item of the specified string
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
482 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
483 # $1: Item number, count from 0.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
484 # $2-n: strings
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
485 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
486 function getitem
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
487 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
488 typeset -i n=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
489 shift
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
490
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
491 (( n += 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
492 eval echo \${$n}
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
493 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
494
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
495 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
496 # This function calculate the specified directory files checksum and write
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
497 # to the specified array.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
498 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
499 # $1 directory in which the files will be cksum.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
500 # $2 file array name which was used to store file cksum information.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
501 # $3 attribute array name which was used to store attribute information.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
502 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
503 function cksum_files #<dir> <file_array_name> <attribute_array_name>
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
504 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
505 typeset dir=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
506 typeset farr_name=$2
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
507 typeset aarr_name=$3
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
508
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
509 [[ ! -d $dir ]] && return
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
510 typeset oldpwd=$PWD
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
511 cd $dir
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
512 typeset files=$($LS file*)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
513
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
514 typeset -i i=0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
515 typeset -i n=0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
516 while (( i < NUM_FILE )); do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
517 typeset f=$(getitem $i $files)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
518 eval $farr_name[$i]=\$\(\$CKSUM $f\)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
519
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
520 typeset -i j=0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
521 while (( j < NUM_ATTR )); do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
522 eval $aarr_name[$n]=\$\(\$RUNAT \$f \$CKSUM \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
523 attribute.$j\)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
524
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
525 (( j += 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
526 (( n += 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
527 done
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
528
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
529 (( i += 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
530 done
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
531
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
532 cd $oldpwd
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
533 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
534
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
535 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
536 # This function compare two cksum results array.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
537 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
538 # $1 The array name which stored the cksum before operation.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
539 # $2 The array name which stored the cksum after operation.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
540 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
541 function compare_cksum #<array1> <array2>
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
542 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
543 typeset before=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
544 typeset after=$2
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
545 eval typeset -i count=\${#$before[@]}
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
546
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
547 typeset -i i=0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
548 while (( i < count )); do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
549 eval typeset var1=\${$before[$i]}
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
550 eval typeset var2=\${$after[$i]}
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
551
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
552 if [[ $var1 != $var2 ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
553 return 1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
554 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
555
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
556 (( i += 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
557 done
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
558
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
559 return 0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
560 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
561
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
562 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
563 # This function calculate all the files cksum information in current directory
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
564 # and output them to the specified file.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
565 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
566 # $1 directory from which the files will be cksum.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
567 # $2 cksum output file
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
568 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
569 function record_cksum #<outfile>
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
570 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
571 typeset dir=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
572 typeset outfile=$2
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
573
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
574 [[ ! -d ${outfile%/*} ]] && usr_exec $MKDIR -p ${outfile%/*}
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
575
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
576 usr_exec cd $dir ; $FIND . -depth -type f -exec cksum {} \\\; | \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
577 $SORT > $outfile
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
578 usr_exec cd $dir ; $FIND . -depth -type f -xattr -exec runat {} \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
579 cksum attribute* \\\; | $SORT >> $outfile
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
580 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
581
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
582 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
583 # The function create_files creates the directories and files that the script
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
584 # will operate on to test extended attribute functionality.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
585 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
586 # $1 The base directory in which to create directories and files.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
587 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
588 function create_files #<directory>
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
589 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
590 typeset basedir=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
591
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
592 [[ ! -d $basedir ]] && usr_exec $MKDIR -m 777 $basedir
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
593 [[ ! -d $RES_DIR ]] && usr_exec $MKDIR -m 777 $RES_DIR
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
594 [[ ! -d $INI_DIR ]] && usr_exec $MKDIR -m 777 $INI_DIR
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
595 [[ ! -d $TST_DIR ]] && usr_exec $MKDIR -m 777 $TST_DIR
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
596 [[ ! -d $TMP_DIR ]] && usr_exec $MKDIR -m 777 $TMP_DIR
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
597
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
598 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
599 # Create the original file and its attribute files.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
600 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
601 [[ ! -a $RES_DIR/file ]] && \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
602 usr_exec $FILE_WRITE -o create -f $RES_DIR/file \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
603 -b 1024 -d 0 -c 1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
604 [[ ! -a $RES_DIR/attribute ]] && \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
605 usr_exec $CP $RES_DIR/file $RES_DIR/attribute
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
606
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
607 typeset oldpwd=$PWD
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
608 cd $INI_DIR
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
609
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
610 typeset -i i=0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
611 while (( i < NUM_FILE )); do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
612 typeset dstfile=$INI_DIR/file.$$.$i
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
613 usr_exec $CP $RES_DIR/file $dstfile
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
614
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
615 typeset -i j=0
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
616 while (( j < NUM_ATTR )); do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
617 usr_exec $RUNAT $dstfile \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
618 $CP $RES_DIR/attribute ./attribute.$j
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
619 (( j += 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
620 done
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
621
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
622 (( i += 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
623 done
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
624
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
625 cd $oldpwd
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
626 }