annotate usr/src/test/zfs-tests/tests/functional/acl/nontrivial/zfs_acl_chmod_rwx_002_pos.ksh @ 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 #!/bin/ksh -p
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
2 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
3 # CDDL HEADER START
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
4 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
5 # 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
6 # 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
7 # 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
8 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
9 # 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
10 # 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
11 # 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
12 # 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
13 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
14 # 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
15 # 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
16 # 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
17 # 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
18 # 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
19 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
20 # CDDL HEADER END
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 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
24 # 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
25 # 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
26 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
27
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
28 . $STF_SUITE/tests/functional/acl/acl_common.kshlib
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 # DESCRIPTION:
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
32 # chmod A{+|-|=} read_data|write_data|execute for owner@ group@ or
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
33 # everyone@ correctly alters mode bits .
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 # STRATEGY:
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
36 # 1. Loop root and non-root user.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
37 # 2. Get the random initial map.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
38 # 3. Get the random ACL string.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
39 # 4. Separately chmod +|-|= read_data|write_data|execute
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
40 # 5. Check map bits
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
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
43 verify_runnable "both"
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 log_assert "chmod A{+|-|=} read_data|write_data|execute for owner@, group@ " \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
46 "or everyone@ correctly alters mode bits."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
47 log_onexit cleanup
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
48
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
49 set -A bits 0 1 2 3 4 5 6 7
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
50 set -A a_flag owner group everyone
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
51 set -A a_access read_data write_data execute
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
52 set -A a_type allow deny
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
53
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
54 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
55 # Get a random item from an array.
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 # $1 the base set
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 function random_select #array_name
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 typeset arr_name=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
62 typeset -i ind
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
63
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
64 eval typeset -i cnt=\${#${arr_name}[@]}
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
65 (( ind = $RANDOM % cnt ))
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 eval print \${${arr_name}[$ind]}
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
68 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
69
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
70 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
71 # Create a random string according to array name, the item number and
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
72 # separated tag.
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 # $1 array name where the function get the elements
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
75 # $2 the items number which you want to form the random string
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
76 # $3 the separated tag
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 function form_random_str #<array_name> <count> <sep>
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 typeset arr_name=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
81 typeset -i count=${2:-1}
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
82 typeset sep=${3:-""}
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
83
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
84 typeset str=""
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
85 while (( count > 0 )); do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
86 str="${str}$(random_select $arr_name)${sep}"
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 (( count -= 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
89 done
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 print $str
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
92 }
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 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
95 # According to the original bits, the input ACE access and ACE type, return the
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
96 # expect bits after 'chmod A0{+|=}'.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
97 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
98 # $1 bits which was make up of three bit 'rwx'
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
99 # $2 ACE access which is read_data, write_data or execute
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
100 # $3 ACE type which is allow or deny
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
101 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
102 function cal_bits #bits acl_access acl_type
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
103 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
104 typeset bits=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
105 typeset acl_access=$2
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
106 typeset acl_type=$3
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
107 set -A bit r w x
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
108
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
109 typeset tmpbits=""
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
110 typeset -i i=0 j
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
111 while (( i < 3 )); do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
112 if [[ $acl_access == *"${a_access[i]}"* ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
113 if [[ $acl_type == "allow" ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
114 tmpbits="$tmpbits${bit[i]}"
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
115 elif [[ $acl_type == "deny" ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
116 tmpbits="${tmpbits}-"
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
117 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
118 else
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
119 (( j = i + 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
120 tmpbits="$tmpbits$(get_substr $bits $j 1)"
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
121 fi
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 (( i += 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
124 done
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
125
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
126 echo "$tmpbits"
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
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
129 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
130 # Based on the initial node map before chmod and the ace-spec, check if chmod
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
131 # has the correct behaven to map bits.
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
132 #
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
133 function check_test_result #init_mode node acl_flag acl_access a_type
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
134 {
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
135 typeset init_mode=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
136 typeset node=$2
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
137 typeset acl_flag=$3
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
138 typeset acl_access=$4
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
139 typeset acl_type=$5
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 typeset -3L u_bits=$init_mode
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
142 typeset g_bits=$(get_substr $init_mode 4 3)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
143 typeset -3R o_bits=$init_mode
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 if [[ $acl_flag == "owner" || $acl_flag == "everyone" ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
146 u_bits=$(cal_bits $u_bits $acl_access $acl_type)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
147 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
148 if [[ $acl_flag == "group" || $acl_flag == "everyone" ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
149 g_bits=$(cal_bits $g_bits $acl_access $acl_type)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
150 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
151 if [[ $acl_flag == "everyone" ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
152 o_bits=$(cal_bits $o_bits $acl_access $acl_type)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
153 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
154
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
155 typeset cur_mode=$(get_mode $node)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
156 cur_mode=$(get_substr $cur_mode 2 9)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
157
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
158 if [[ $cur_mode == $u_bits$g_bits$o_bits ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
159 log_note "SUCCESS: Current map($cur_mode) ==" \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
160 "expected map($u_bits$g_bits$o_bits)"
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
161 else
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
162 log_fail "FAIL: Current map($cur_mode) != " \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
163 "expected map($u_bits$g_bits$o_bits)"
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
164 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
165 }
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
166
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
167 function test_chmod_map #<node>
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 typeset node=$1
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
170 typeset init_mask acl_flag acl_access acl_type
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
171 typeset -i cnt
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 if (( ${#node} == 0 )); then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
174 log_fail "FAIL: file name or directroy name is not defined."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
175 fi
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 # Get the initial map
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
178 init_mask=$(form_random_str bits 3)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
179 # Get ACL flag, access & type
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
180 acl_flag=$(form_random_str a_flag)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
181 (( cnt = ($RANDOM % ${#a_access[@]}) + 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
182 acl_access=$(form_random_str a_access $cnt '/')
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
183 acl_access=${acl_access%/}
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
184 acl_type=$(form_random_str a_type)
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 typeset acl_spec=${acl_flag}@:${acl_access}:${acl_type}
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 # Set the initial map and back the initial ACEs
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
189 typeset orig_ace=/tmp/orig_ace.$$
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
190 typeset cur_ace=/tmp/cur_ace.$$
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 for operator in "A0+" "A0="; do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
193 log_must usr_exec $CHMOD $init_mask $node
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
194 init_mode=$(get_mode $node)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
195 init_mode=$(get_substr $init_mode 2 9)
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
196 log_must usr_exec eval "$LS -vd $node > $orig_ace"
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
197
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
198 # To "A=", firstly add one ACE which can't modify map
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
199 if [[ $operator == "A0=" ]]; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
200 log_must $CHMOD A0+user:$ZFS_ACL_OTHER1:execute:deny \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
201 $node
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
202 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
203 log_must usr_exec $CHMOD $operator$acl_spec $node
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
204 check_test_result \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
205 $init_mode $node $acl_flag $acl_access $acl_type
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 # Check "chmod A-"
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
208 log_must usr_exec $CHMOD A0- $node
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
209 log_must usr_exec eval "$LS -vd $node > $cur_ace"
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
210
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
211 if $DIFF $orig_ace $cur_ace; then
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
212 log_note "SUCCESS: original ACEs equivalence the " \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
213 "current ACEs. 'chmod A-' succeeded."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
214 else
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
215 log_fail "FAIL: 'chmod A-' failed."
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
216 fi
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
217 done
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 [[ -f $orig_ace ]] && log_must usr_exec $RM -f $orig_ace
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
220 [[ -f $cur_ace ]] && log_must usr_exec $RM -f $cur_ace
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
221 }
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 for user in root $ZFS_ACL_STAFF1; do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
224 set_cur_usr $user
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
225
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
226 typeset -i loop_cnt=20
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
227 while (( loop_cnt > 0 )); do
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
228 log_must usr_exec $TOUCH $testfile
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
229 test_chmod_map $testfile
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
230 log_must $RM -f $testfile
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
231
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
232 log_must usr_exec $MKDIR $testdir
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
233 test_chmod_map $testdir
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
234 log_must $RM -rf $testdir
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
235
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
236 (( loop_cnt -= 1 ))
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
237 done
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
238 done
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 log_pass "chmod A{+|-|=} read_data|write_data|execute for owner@, group@ " \
0bcf78798346 3311 Want a test framework for arbitrary OS unit tests
John Wren Kennedy <john.kennedy@delphix.com>
parents:
diff changeset
241 "oreveryone@ correctly alters mode bits passed."