Whamcloud - gitweb
b=7178
[fs/lustre-release.git] / lustre / tests / sanity-crypto.sh
1 #!/bin/sh
2
3 set -e
4
5 #
6 # This test needs to be run on the client
7 #
8
9 LUSTRE=${LUSTRE:-`dirname $0`/..}
10 . $LUSTRE/tests/test-framework.sh
11
12 init_test_env $@
13
14 . ${CONFIG:=$LUSTRE/tests/cfg/lmv.sh}
15
16 build_test_filter
17
18 assert_env MDSCOUNT
19
20 SETUP=${SETUP:-"setup"}
21 CLEANUP=${CLEANUP:-"cleanup"}
22
23 DIR1=${DIR1:-$MOUNT1}
24 DIR2=${DIR2:-$MOUNT2}
25 CRYPT_TYPE=${CRYPT_TYPE:-"gks"}
26 RUN_UID=${RUN_UID:-1000}
27 if [ `using_krb5_sec $SECURITY` == 'n' ] ; then
28     ALWAYS_EXCEPT="0c $ALWAYS_EXCEPT"
29 fi
30
31 gen_config() {
32     rm -f $XMLCONFIG
33
34     if [ "$MDSCOUNT" -gt 1 ]; then
35         add_lmv lmv1_svc
36         for mds in `mds_list`; do
37             MDSDEV=$TMP/${mds}-`hostname`
38             add_mds $mds --dev $MDSDEV --size $MDSSIZE --lmv lmv1_svc
39         done
40         add_lov_to_lmv lov1 lmv1_svc --stripe_sz $STRIPE_BYTES \
41             --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0
42         MDS=lmv1
43     else
44         add_mds $SINGLEMDS --dev $MDSDEV --size $MDSSIZE
45         if [ ! -z "$$SINGLEMDSfailover_HOST" ]; then
46              add_mdsfailover $SINGLEMDS --dev $MDSDEV --size $MDSSIZE
47         fi
48         add_lov lov1 $SINGLEMDS --stripe_sz $STRIPE_BYTES \
49             --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0
50         MDS=$SINGLEMDS_svc
51     fi
52     add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE
53     add_ost ost2 --lov lov1 --dev ${OSTDEV}-2 --size $OSTSIZE
54     if [ $CRYPT_TYPE == "gks" ]; then 
55         add_gks gks     
56         add_client client $MDS --lov lov1 --gks gks_svc --path $MOUNT
57     else
58         add_client client $MDS --lov lov1 --path $MOUNT
59     fi
60         
61 }
62
63 build_test_filter
64
65 cleanup() {
66     # make sure we are using the primary MDS, so the config log will
67     # be able to clean up properly.
68     activemds=`facet_active $SINGLEMDS`
69     if [ $activemds != "$SINGLEMDS" ]; then
70         fail $SINGLEMDS
71     fi
72     
73     umount $MOUNT2 || true
74     umount $MOUNT || true
75     rmmod llite
76     if [ $CRYPT_TYPE == "gks" ]; then
77         stop_gks gks 
78     fi
79     for mds in `mds_list`; do
80         stop $mds ${FORCE} $MDSLCONFARGS
81     done
82     stop ost2 ${FORCE} --dump cleanup.log
83     stop ost ${FORCE} --dump cleanup.log
84     stop_lgssd
85     stop_lsvcgssd
86 }
87
88 if [ "$ONLY" == "cleanup" ]; then
89     sysctl -w portals.debug=0 || true
90     cleanup
91     exit
92 fi
93
94
95 setup() {
96     gen_config
97
98     start_krb5_kdc || exit 1
99     start_lsvcgssd || exit 2
100     start_lgssd || exit 3
101     start ost --reformat $OSTLCONFARGS 
102     start ost2 --reformat $OSTLCONFARGS 
103     [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
104     for mds in `mds_list`; do
105         start $mds --reformat $MDSLCONFARGS
106     done
107     if [ $CRYPT_TYPE == "gks" ]; then
108         start_gks gks || exit 4
109     fi
110     grep " $MOUNT " /proc/mounts || zconf_mount `hostname` $MOUNT
111     grep " $MOUNT2 " /proc/mounts || zconf_mount `hostname` $MOUNT2
112 }
113
114 $SETUP
115
116 if [ "$ONLY" == "setup" ]; then
117     exit 0
118 fi
119 disable_encrypt() {
120         NAME=$1
121         grep " $MOUNT " /proc/mounts && umount  $MOUNT
122         zconf_mount `hostname` $NAME    
123 }
124 enable_encrypt() {
125         NAME=$1
126         grep " $MOUNT " /proc/mounts && umount  $MOUNT
127         zconf_mount `hostname` $MOUNT
128         $LCTL set_crypt $MOUNT $CRYPT_TYPE
129 }
130
131 mkdir -p $DIR
132
133 test_1a() {
134         enable_encrypt $MOUNT
135         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/1a0
136         echo aaaaaaaaaaaaaaaaaaaa >> $DIR2/1a1
137         diff -u $DIR1/1a0 $DIR2/1a1 || error "files are different"
138         disable_encrypt $MOUNT
139         diff -u $DIR1/1a0 $DIR2/1a1 && error "write encryption failed"
140         enable_encrypt $MOUNT
141         diff -u $DIR1/1a0 $DIR2/1a1 || error "files are different"
142 }
143 run_test 1a "read/write encryption============="
144
145 test_2a() {
146         enable_encrypt $MOUNT
147         touch $DIR1/2a0
148         setfacl -m u:bin:rw $DIR1/2a0
149         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/2a0
150         echo aaaaaaaaaaaaaaaaaaaa >> $DIR2/2a1
151         diff -u $DIR1/2a0 $DIR2/2a1 || error "files are different"
152         disable_encrypt $MOUNT
153         diff -u $DIR1/2a0 $DIR2/2a1 && error "write encryption failed"
154         enable_encrypt $MOUNT
155         diff -u $DIR1/2a0 $DIR2/2a1 || error "files are different"
156 }
157 run_test 2a "read/write encryption with acl============="
158
159 test_3a() {
160         rm -rf $DIR1/3a*
161         enable_encrypt $MOUNT   
162         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/3a0
163         echo aaaaaaaaaaaaaaaaaaaa >> $DIR2/3a1
164         chown $RUN_UID $DIR1/3a0
165         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/3a0 || error "chown write error"
166         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/3a1  
167         diff -u $DIR1/3a0 $DIR2/3a1 || error "files are different"
168         disable_encrypt $MOUNT
169         diff -u $DIR1/3a0 $DIR2/3a1 && error "write encryption failed"
170         enable_encrypt $MOUNT   
171         diff -u $DIR1/3a0 $DIR2/3a1 || error "files are different"
172 }
173 run_test 3a "write chown encryption============="
174
175 test_4a() {
176         rm -rf $DIR1/4a*
177         enable_encrypt $MOUNT   
178         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/4a0
179         echo aaaaaaaaaaaaaaaaaaaa >> $DIR2/4a1
180         setfacl -m u:bin:rw $DIR1/4a0
181         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/4a0 || error "chown write error"
182         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/4a1  
183         diff -u $DIR1/4a0 $DIR2/4a1 || error "files are different"
184         disable_encrypt $MOUNT
185         diff -u $DIR1/4a0 $DIR2/4a1 && error "write encryption failed"
186         enable_encrypt $MOUNT   
187         diff -u $DIR1/4a0 $DIR2/4a1 || error "files are different"
188 }
189 run_test 4a "write chacl encryption============="
190
191 test_5a() {
192         rm -rf $DIR1/5a*
193         enable_encrypt $MOUNT   
194         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/5a0
195         echo aaaaaaaaaaaaaaaaaaaa >> $DIR2/5a1
196         setfacl -m u:bin:rw $DIR1/5a0
197         chown $RUN_UID $DIR1/5a0
198         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/5a0 || error "chown write error"
199         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/5a1  
200         diff -u $DIR1/5a0 $DIR2/5a1 || error "files are different"
201         echo "enable crypt read success"
202         disable_encrypt $MOUNT
203         diff -u $DIR1/5a0 $DIR2/5a1 && error "write encryption failed"
204         enable_encrypt $MOUNT   
205         diff -u $DIR1/5a0 $DIR2/5a1 || error "files are different"
206 }
207 run_test 5a "write chacl encryption============="
208
209 test_6a() {
210         rm -rf $DIR1/6a*
211         enable_encrypt $MOUNT   
212         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/6a0
213         echo aaaaaaaaaaaaaaaaaaaa >> $DIR2/6a1
214         chown 0600 $DIR1/6a0
215         setfacl -m u:bin:rw $DIR1/6a0
216         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/6a0 || error "chown write error"
217         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/6a1  
218         diff -u $DIR1/6a0 $DIR2/6a1 || error "files are different"
219         echo "enable crypt read success"
220         disable_encrypt $MOUNT
221         diff -u $DIR1/6a0 $DIR2/6a1 && error "write encryption failed"
222         enable_encrypt $MOUNT   
223         diff -u $DIR1/6a0 $DIR2/6a1 || error "files are different"
224 }
225 run_test 6a "write chmod/setfacl encryption============="
226
227 $CLEANUP
228