glusterfs
297 строк · 8.0 Кб
1#!/bin/bash
2
3. $(dirname $0)/../include.rc
4. $(dirname $0)/../volume.rc
5. $(dirname $0)/../geo-rep.rc
6. $(dirname $0)/../env.rc
7
8SCRIPT_TIMEOUT=900
9
10### Basic Non-root geo-rep setup test with Distribute Replicate volumes
11
12##Cleanup and start glusterd
13cleanup;
14TEST glusterd;
15TEST pidof glusterd
16
17
18##Variables
19GEOREP_CLI="$CLI volume geo-replication"
20primary=$GMV0
21secondary=${H0}::${GSV0}
22num_active=2
23num_passive=2
24primary_mnt=$M0
25secondary_mnt=$M1
26
27##User and group to be used for non-root geo-rep setup
28usr="nroot"
29grp="ggroup"
30
31secondary_url=$usr@$secondary
32secondary_vol=$GSV0
33ssh_url=$usr@$H0
34
35#Cleanup stale keys
36sed -i '/^command=.*SSH_ORIGINAL_COMMAND#.*/d' /home/$usr/.ssh/authorized_keys
37sed -i '/^command=.*gsyncd.*/d' /home/$usr/.ssh/authorized_keys
38
39############################################################
40#SETUP VOLUMES AND VARIABLES
41
42##create_and_start_primary_volume
43TEST $CLI volume create $GMV0 replica 2 $H0:$B0/${GMV0}{1,2,3,4};
44TEST $CLI volume start $GMV0
45
46##create_and_start_secondary_volume
47TEST $CLI volume create $GSV0 replica 2 $H0:$B0/${GSV0}{1,2,3,4};
48TEST $CLI volume start $GSV0
49
50##Mount primary
51#TEST glusterfs -s $H0 --volfile-id $GMV0 $M0
52
53##Mount secondary
54#TEST glusterfs -s $H0 --volfile-id $GSV0 $M1
55
56
57##########################################################
58#TEST FUNCTIONS
59
60function distribute_key_non_root()
61{
62${GLUSTER_LIBEXECDIR}/set_geo_rep_pem_keys.sh $usr $primary $secondary_vol
63echo $?
64}
65
66
67function check_status_non_root()
68{
69local search_key=$1
70$GEOREP_CLI $primary $secondary_url status | grep -F "$search_key" | wc -l
71}
72
73
74function check_and_clean_group()
75{
76if [ $(getent group $grp) ]
77then
78groupdel $grp;
79echo $?
80else
81echo 0
82fi
83}
84
85function clean_lock_files()
86{
87if [ ! -f /etc/passwd.lock ];
88then
89rm -rf /etc/passwd.lock;
90fi
91
92if [ ! -f /etc/group.lock ];
93then
94rm -rf /etc/group.lock;
95fi
96
97if [ ! -f /etc/shadow.lock ];
98then
99rm -rf /etc/shadow.lock;
100fi
101
102if [ ! -f /etc/gshadow.lock ];
103then
104rm -rf /etc/gshadow.lock;
105fi
106}
107
108
109###########################################################
110#SETUP NON-ROOT GEO REPLICATION
111
112##Create ggroup group
113##First test if group exists and then create new one
114
115EXPECT_WITHIN $GEO_REP_TIMEOUT 0 check_and_clean_group
116
117##cleanup *.lock files
118
119clean_lock_files
120
121TEST /usr/sbin/groupadd $grp
122
123clean_lock_files
124##Del if exists and create non-root user and assign it to newly created group
125userdel -r -f $usr
126TEST /usr/sbin/useradd -G $grp $usr
127
128export PASS=$( (echo $RANDOM ; date +%s) | sha256sum | base64 | head -c 32)
129##Modify password for non-root user to have control over distributing ssh-key
130echo "$usr:$PASS" | chpasswd
131
132##Set up mountbroker root
133TEST gluster-mountbroker setup /var/mountbroker-root $grp
134
135##Associate volume and non-root user to the mountbroker
136TEST gluster-mountbroker add $secondary_vol $usr
137
138##Check ssh setting for clear text passwords
139sed '/^PasswordAuthentication /{s/no/yes/}' -i /etc/ssh/sshd_config && grep '^PasswordAuthentication ' /etc/ssh/sshd_config && service sshd restart
140
141
142##Restart glusterd to reflect mountbroker changages
143TEST killall_gluster;
144TEST glusterd;
145TEST pidof glusterd;
146
147##Create, start and mount meta_volume
148TEST $CLI volume create $META_VOL replica 3 $H0:$B0/${META_VOL}{1,2,3};
149TEST $CLI volume start $META_VOL
150TEST mkdir -p $META_MNT
151EXPECT_WITHIN ${PROCESS_UP_TIMEOUT} "3" brick_count ${META_VOL}
152TEST glusterfs -s $H0 --volfile-id $META_VOL $META_MNT
153
154##Mount primary
155EXPECT_WITHIN ${PROCESS_UP_TIMEOUT} "4" brick_count $GMV0
156TEST glusterfs -s $H0 --volfile-id $GMV0 $M0
157
158##Mount secondary
159EXPECT_WITHIN ${PROCESS_UP_TIMEOUT} "4" brick_count $GSV0
160TEST glusterfs -s $H0 --volfile-id $GSV0 $M1
161
162## Check status of mount-broker
163TEST gluster-mountbroker status
164
165
166##Setup password-less ssh for non-root user
167#sshpass -p "pass" ssh-copy-id -i ~/.ssh/id_rsa.pub $ssh_url
168##Run ssh agent
169eval "$(ssh-agent -s)"
170
171
172##Create a temp script to echo the SSH password, used by SSH_ASKPASS
173
174SSH_ASKPASS_DIR=$(mktemp -d /tmp/ssh-askpass_XXXXXXXXXXXX)
175SSH_ASKPASS_SCRIPT=$SSH_ASKPASS_DIR/ssh-askpass.sh
176cat > ${SSH_ASKPASS_SCRIPT} <<EOL
177#!/bin/bash
178echo "${PASS}"
179EOL
180chmod u+x ${SSH_ASKPASS_SCRIPT}
181
182##set no display, necessary for ssh to use with setsid and SSH_ASKPASS
183export DISPLAY
184
185export SSH_ASKPASS=${SSH_ASKPASS_SCRIPT}
186
187DISPLAY=: setsid ssh-copy-id -o 'PreferredAuthentications=password' -o 'StrictHostKeyChecking=no' -i ~/.ssh/id_rsa.pub $ssh_url
188
189##Setting up PATH for gluster binaries in case of source installation
190##ssh -oNumberOfPasswordPrompts=0 -oStrictHostKeyChecking=no $ssh_url "echo "export PATH=$PATH:/usr/local/sbin" >> ~/.bashrc"
191
192##Creating secret pem pub file
193TEST gluster-georep-sshkey generate
194
195##Create geo-rep non-root setup
196
197TEST $GEOREP_CLI $primary $secondary_url create push-pem
198
199#check for session creation
200EXPECT_WITHIN $GEO_REP_TIMEOUT 4 check_status_non_root "Created"
201#Config gluster-command-dir
202TEST $GEOREP_CLI $primary $secondary_url config gluster-command-dir ${GLUSTER_CMD_DIR}
203
204#Config gluster-command-dir
205TEST $GEOREP_CLI $primary $secondary_url config secondary-gluster-command-dir ${GLUSTER_CMD_DIR}
206
207## Test for key distribution
208
209EXPECT_WITHIN $GEO_REP_TIMEOUT 0 distribute_key_non_root
210
211##Wait for common secret pem file to be created
212EXPECT_WITHIN $GEO_REP_TIMEOUT 0 check_common_secret_file
213
214#Enable_metavolume
215TEST $GEOREP_CLI $primary $secondary config use_meta_volume true
216
217#Start_georep
218TEST $GEOREP_CLI $primary $secondary_url start
219
220## Meta volume is enabled so looking for 2 Active and 2 Passive sessions
221
222EXPECT_WITHIN $GEO_REP_TIMEOUT 2 check_status_non_root "Active"
223
224EXPECT_WITHIN $GEO_REP_TIMEOUT 2 check_status_non_root "Passive"
225
226#Pause geo-replication session
227TEST $GEOREP_CLI $primary $secondary_url pause
228
229#Resume geo-replication session
230TEST $GEOREP_CLI $primary $secondary_url resume
231
232#Validate failure of volume stop when geo-rep is running
233TEST ! $CLI volume stop $GMV0
234
235#Negative test for ssh-port
236#Port should be integer and between 1-65535 range
237
238TEST ! $GEOREP_CLI $primary $secondary_url config ssh-port -22
239
240TEST ! $GEOREP_CLI $primary $secondary_url config ssh-port abc
241
242TEST ! $GEOREP_CLI $primary $secondary_url config ssh-port 6875943
243
244TEST ! $GEOREP_CLI $primary $secondary_url config ssh-port 4.5
245
246TEST ! $GEOREP_CLI $primary $secondary_url config ssh-port 22a
247
248#Config Set ssh-port to validate int validation
249TEST $GEOREP_CLI $primary $secondary config ssh-port 22
250
251#Hybrid directory rename test BZ#1763439
252
253TEST $GEOREP_CLI $primary $secondary_url config change_detector xsync
254#verify primary and secondary mount
255
256EXPECT_WITHIN $CHECK_MOUNT_TIMEOUT "^1$" check_mounted ${primary_mnt}
257EXPECT_WITHIN $CHECK_MOUNT_TIMEOUT "^1$" check_mounted ${secondary_mnt}
258
259#Create test data for hybrid crawl
260TEST mkdir ${primary_mnt}/dir1
261TEST mkdir ${primary_mnt}/dir1/dir2
262TEST mkdir ${primary_mnt}/dir1/dir3
263TEST mkdir ${primary_mnt}/hybrid_d1
264
265mv ${primary_mnt}/hybrid_d1 ${primary_mnt}/hybrid_rn_d1
266mv ${primary_mnt}/dir1/dir2 ${primary_mnt}/rn_dir2
267mv ${primary_mnt}/dir1/dir3 ${primary_mnt}/dir1/rn_dir3
268
269#Verify hybrid crawl data on secondary
270EXPECT_WITHIN $GEO_REP_TIMEOUT 0 directory_ok ${secondary_mnt}/dir1
271EXPECT_WITHIN $GEO_REP_TIMEOUT 0 directory_ok ${secondary_mnt}/hybrid_rn_d1
272EXPECT_WITHIN $GEO_REP_TIMEOUT 0 directory_ok ${secondary_mnt}/rn_dir2
273EXPECT_WITHIN $GEO_REP_TIMEOUT 0 directory_ok ${secondary_mnt}/dir1/rn_dir3
274
275#Stop Geo-rep
276TEST $GEOREP_CLI $primary $secondary_url stop
277
278#Delete Geo-rep
279TEST $GEOREP_CLI $primary $secondary_url delete
280
281#Cleanup authorized_keys
282sed -i '/^command=.*SSH_ORIGINAL_COMMAND#.*/d' /home/$usr/.ssh/authorized_keys
283sed -i '/^command=.*gsyncd.*/d' /home/$usr/.ssh/authorized_keys
284
285#clear mountbroker
286gluster-mountbroker remove --user $usr
287gluster-mountbroker remove --volume $secondary_vol
288
289#delete group and user created for non-root setup
290TEST userdel -r -f $usr
291EXPECT_WITHIN $GEO_REP_TIMEOUT 0 check_and_clean_group
292
293##password script cleanup
294rm -rf $SSH_ASKPASS_DIR
295
296
297cleanup;
298
299