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 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     add_gks gks     
55     add_client client $MDS --lov lov1 --gks gks_svc --path $MOUNT
56 }
57
58 build_test_filter
59
60 cleanup() {
61     # make sure we are using the primary MDS, so the config log will
62     # be able to clean up properly.
63     activemds=`facet_active $SINGLEMDS`
64     if [ $activemds != "$SINGLEMDS" ]; then
65         fail $SINGLEMDS
66     fi
67     
68     umount $MOUNT2 || true
69     umount $MOUNT || true
70     rmmod llite
71
72     stop_gks gks 
73     for mds in `mds_list`; do
74         stop $mds ${FORCE} $MDSLCONFARGS
75     done
76     stop ost2 ${FORCE} --dump cleanup.log
77     stop ost ${FORCE} --dump cleanup.log
78     stop_lgssd
79     stop_lsvcgssd
80 }
81
82 if [ "$ONLY" == "cleanup" ]; then
83     sysctl -w portals.debug=0 || true
84     cleanup
85     exit
86 fi
87
88
89 setup() {
90     gen_config
91
92     start_krb5_kdc || exit 1
93     start_lsvcgssd || exit 2
94     start_lgssd || exit 3
95     start ost --reformat $OSTLCONFARGS 
96     start ost2 --reformat $OSTLCONFARGS 
97     [ "$DAEMONFILE" ] && $LCTL debug_daemon start $DAEMONFILE $DAEMONSIZE
98     for mds in `mds_list`; do
99         start $mds --reformat $MDSLCONFARGS
100     done
101     set -vx 
102     start_gks gks || exit 4
103     set -e
104     grep " $MOUNT " /proc/mounts || zconf_mount `hostname` $MOUNT
105     grep " $MOUNT2 " /proc/mounts || zconf_mount `hostname` $MOUNT2
106 }
107
108 $SETUP
109
110 if [ "$ONLY" == "setup" ]; then
111     exit 0
112 fi
113 disable_encrypt() {
114         NAME=$1
115         grep " $MOUNT " /proc/mounts && umount  $MOUNT
116         zconf_mount `hostname` $NAME    
117 }
118 enable_encrypt() {
119         NAME=$1
120         grep " $MOUNT " /proc/mounts && umount  $MOUNT
121         zconf_mount `hostname` $MOUNT
122         $LCTL set_crypt $MOUNT $CRYPT_TYPE
123 }
124
125 mkdir -p $DIR
126
127 test_1a() {
128         enable_encrypt $MOUNT
129         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/1a0
130         echo aaaaaaaaaaaaaaaaaaaa >> $DIR2/1a1
131         diff -u $DIR1/1a0 $DIR2/1a1 || error "files are different"
132         disable_encrypt $MOUNT
133         diff -u $DIR1/1a0 $DIR2/1a1 && error "write encryption failed"
134         enable_encrypt $MOUNT
135         diff -u $DIR1/1a0 $DIR2/1a1 || error "files are different"
136 }
137 run_test 1a "read/write encryption============="
138
139 test_2a() {
140         enable_encrypt $MOUNT
141         touch $DIR1/2a0
142         setfacl -m u:bin:rw $DIR1/2a0
143         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/2a0
144         echo aaaaaaaaaaaaaaaaaaaa >> $DIR2/2a1
145         diff -u $DIR1/2a0 $DIR2/2a1 || error "files are different"
146         disable_encrypt $MOUNT
147         diff -u $DIR1/2a0 $DIR2/2a1 && error "write encryption failed"
148         enable_encrypt $MOUNT
149         diff -u $DIR1/2a0 $DIR2/2a1 || error "files are different"
150 }
151 run_test 2a "read/write encryption with acl============="
152
153 test_3a() {
154         rm -rf $DIR1/3a*
155         enable_encrypt $MOUNT   
156         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/3a0
157         echo aaaaaaaaaaaaaaaaaaaa >> $DIR2/3a1
158         chown $RUN_UID $DIR1/3a0
159         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/3a0 || error "chown write error"
160         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/3a1  
161         diff -u $DIR1/3a0 $DIR2/3a1 || error "files are different"
162         disable_encrypt $MOUNT
163         diff -u $DIR1/3a0 $DIR2/3a1 && error "write encryption failed"
164         enable_encrypt $MOUNT   
165         diff -u $DIR1/3a0 $DIR2/3a1 || error "files are different"
166 }
167 run_test 3a "write chmod encryption============="
168
169 test_4a() {
170         rm -rf $DIR1/4a*
171         enable_encrypt $MOUNT   
172         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/4a0
173         echo aaaaaaaaaaaaaaaaaaaa >> $DIR2/4a1
174         setfacl -m u:bin:rw $DIR1/4a0
175         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/4a0 || error "chown write error"
176         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/4a1  
177         diff -u $DIR1/4a0 $DIR2/4a1 || error "files are different"
178         disable_encrypt $MOUNT
179         diff -u $DIR1/4a0 $DIR2/4a1 && error "write encryption failed"
180         enable_encrypt $MOUNT   
181         diff -u $DIR1/4a0 $DIR2/4a1 || error "files are different"
182 }
183 run_test 4a "write chacl encryption============="
184
185 test_5a() {
186         rm -rf $DIR1/5a*
187         enable_encrypt $MOUNT   
188         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/5a0
189         echo aaaaaaaaaaaaaaaaaaaa >> $DIR2/5a1
190         setfacl -m u:bin:rw $DIR1/5a0
191         chown $RUN_UID $DIR1/5a0
192         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/5a0 || error "chown write error"
193         echo aaaaaaaaaaaaaaaaaaaa >> $DIR1/5a1  
194         diff -u $DIR1/5a0 $DIR2/5a1 || error "files are different"
195         echo "enable crypt read success"
196         disable_encrypt $MOUNT
197         diff -u $DIR1/5a0 $DIR2/5a1 && error "write encryption failed"
198         enable_encrypt $MOUNT   
199         diff -u $DIR1/5a0 $DIR2/5a1 || error "files are different"
200 }
201 run_test 5a "write chacl encryption============="
202
203 $CLEANUP
204