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