]> git.sur5r.net Git - openldap/blob - tests/scripts/test020-syncreplication-cascading
Tweak startup, exiting
[openldap] / tests / scripts / test020-syncreplication-cascading
1 #! /bin/sh
2 # $OpenLDAP$
3
4 SRCDIR="."
5 if test $# -ge 1 ; then
6         SRCDIR=$1; shift
7 fi
8
9 . $SRCDIR/scripts/args.sh $*
10
11 echo "running defines.sh"
12 . $SRCDIR/scripts/defines.sh
13
14 #
15 # Test replication:
16 # - start master
17 # - start slave
18 # - populate over ldap
19 # - perform some modifies and deleted
20 # - retrieve database over ldap and compare against expected results
21 #
22
23 echo "Cleaning up in $DBDIR..."
24 rm -f $DBDIR/[!C]*
25 echo "Resetting $R1REPLDIR..."
26 rm -rf $R1REPLDIR
27 mkdir $R1REPLDIR
28 echo "Resetting $R2REPLDIR..."
29 rm -rf $R2REPLDIR
30 mkdir $R2REPLDIR
31 echo "Resetting $P1REPLDIR..."
32 rm -rf $P1REPLDIR
33 mkdir $P1REPLDIR
34 echo "Resetting $P2REPLDIR..."
35 rm -rf $P2REPLDIR
36 mkdir $P2REPLDIR
37 echo "Resetting $P3REPLDIR..."
38 rm -rf $P3REPLDIR
39 mkdir $P3REPLDIR
40
41 SAVE=$BACKEND
42 if test $SYNCREPL = no; then
43         if test $BACKEND = ldbm; then
44                 echo "Sync replication requires back-bdb or back-hdb"
45                 exit 0
46         fi
47         SYNCREPL=$BACKEND
48 fi
49 BACKEND=$SYNCREPL
50 echo "Starting master slapd on TCP/IP port $PORT..."
51 . $CONFFILTER $BACKEND $MONITORDB < $SRMASTERCONF > $DBCONF
52 $SLAPD -f $DBCONF -h $MASTERURI -d $LVL $TIMING > $MASTERLOG 2>&1 &
53 PID=$!
54 if test $WAIT != 0 ; then
55     echo PID $PID
56     read foo
57 fi
58
59 echo "Using ldapsearch to check that master slapd PID $PID is running..."
60 for i in 0 1 2 3 4 5; do
61         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT \
62                 'objectclass=*' > /dev/null 2>&1
63         RC=$?
64         if test $RC = 0 ; then
65                 break
66         fi
67         echo "Waiting 5 seconds for slapd to start..."
68         sleep 5
69 done
70
71 if test $RC != 0 ; then
72         echo "ldapsearch failed ($RC)!"
73         kill -HUP $PID
74         exit $RC
75 fi
76
77 echo "Using ldapadd to create the context prefix entry in the master..."
78 $LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT -w $PASSWD < \
79         $LDIFORDEREDCP > /dev/null 2>&1
80 RC=$?
81 if test $RC != 0 ; then
82         echo "ldapadd failed ($RC)!"
83         kill -HUP $PID
84         exit $RC
85 fi
86
87 echo "Starting R1 slave slapd on TCP/IP port $R1SLAVEPORT..."
88 . $CONFFILTER $BACKEND $MONITORDB < $R1SRSLAVECONF > $R1REPLCONF
89 $SLAPD -f $R1REPLCONF -h $R1SLAVEURI -d $LVL $TIMING > $R1SLAVELOG 2>&1 &
90 R1SLAVEPID=$!
91 if test $WAIT != 0 ; then
92     echo SLAVE R1 PID $R1SLAVEPID
93     read foo
94 fi
95
96 echo "Using ldapsearch to check that R1 slave slapd PID $R1SLAVEPID is running..."
97 for i in 0 1 2 3 4 5; do
98         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $R1SLAVEPORT \
99                 'objectclass=*' > /dev/null 2>&1
100         RC=$?
101         if test $RC = 0 ; then
102                 break
103         fi
104         echo "Waiting 5 seconds for R1 slapd to start..."
105         sleep 5
106 done
107
108 if test $RC != 0 ; then
109         echo "ldapsearch failed ($RC)!"
110         kill -HUP $PID $R1SLAVEPID
111         exit $RC
112 fi
113
114 BACKEND=$SAVE
115 echo "Starting R2 slave slapd on TCP/IP port $R2SLAVEPORT..."
116 . $CONFFILTER $BACKEND $MONITORDB < $R2SRSLAVECONF > $R2REPLCONF
117 $SLAPD -f $R2REPLCONF -h $R2SLAVEURI -d $LVL $TIMING > $R2SLAVELOG 2>&1 &
118 R2SLAVEPID=$!
119 if test $WAIT != 0 ; then
120     echo SLAVE R2 PID $R2SLAVEPID
121     read foo
122 fi
123
124 echo "Using ldapsearch to check that the R2 slave slapd PID $R2SLAVEPID is running..."
125 for i in 0 1 2 3 4 5; do
126         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $R2SLAVEPORT \
127                 'objectclass=*' > /dev/null 2>&1
128         RC=$?
129         if test $RC = 0 ; then
130                 break
131         fi
132         echo "Waiting 5 seconds for R2 slave slapd to start..."
133         sleep 5
134 done
135
136 if test $RC != 0 ; then
137         echo "ldapsearch failed ($RC)!"
138         kill -HUP $PID $R1SLAVEPID $R2SLAVEPID
139         exit $RC
140 fi
141
142 BACKEND=$SYNCREPL
143 echo "Starting P1 slave slapd on TCP/IP port $P1SLAVEPORT..."
144 . $CONFFILTER $BACKEND $MONITORDB < $P1SRSLAVECONF > $P1REPLCONF
145 $SLAPD -f $P1REPLCONF -h $P1SLAVEURI -d $LVL $TIMING > $P1SLAVELOG 2>&1 &
146 P1SLAVEPID=$!
147 if test $WAIT != 0 ; then
148     echo SLAVE P1 PID $P1SLAVEPID
149     read foo
150 fi
151
152 echo "Using ldapsearch to check that the P1 slave slapd PID $P1SLAVEPID is running..."
153 for i in 0 1 2 3 4 5; do
154         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $P1SLAVEPORT \
155                 'objectclass=*' > /dev/null 2>&1
156         RC=$?
157         if test $RC = 0 ; then
158                 break
159         fi
160         echo "Waiting 5 seconds for P1 slave slapd to start..."
161         sleep 5
162 done
163
164 if test $RC != 0 ; then
165         echo "ldapsearch failed ($RC)!"
166         kill -HUP $PID $R1SLAVEPID $R2SLAVEPID $P1SLAVEPID
167         exit $RC
168 fi
169
170 BACKEND=$SAVE
171 echo "Starting P2 slave slapd on TCP/IP port $P2SLAVEPORT..."
172 . $CONFFILTER $BACKEND $MONITORDB < $P2SRSLAVECONF > $P2REPLCONF
173 $SLAPD -f $P2REPLCONF -h $P2SLAVEURI -d $LVL $TIMING > $P2SLAVELOG 2>&1 &
174 P2SLAVEPID=$!
175 if test $WAIT != 0 ; then
176     echo SLAVE P2 PID $P2SLAVEPID
177     read foo
178 fi
179
180 echo "Using ldapsearch to check that the P2 slave slapd PID $P2SLAVEPID is running..."
181 for i in 0 1 2 3 4 5; do
182         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $P2SLAVEPORT \
183                 'objectclass=*' > /dev/null 2>&1
184         RC=$?
185         if test $RC = 0 ; then
186                 break
187         fi
188         echo "Waiting 5 seconds for P2 slave slapd to start..."
189         sleep 5
190 done
191
192 if test $RC != 0 ; then
193         echo "ldapsearch failed ($RC)!"
194         kill -HUP $PID $R1SLAVEPID $R2SLAVEPID $P1SLAVEPID $P2SLAVEPID
195         exit $RC
196 fi
197
198 echo "Starting P3 slave slapd on TCP/IP port $P3SLAVEPORT..."
199 . $CONFFILTER $BACKEND $MONITORDB < $P3SRSLAVECONF > $P3REPLCONF
200 $SLAPD -f $P3REPLCONF -h $P3SLAVEURI -d $LVL $TIMING > $P3SLAVELOG 2>&1 &
201 P3SLAVEPID=$!
202 if test $WAIT != 0 ; then
203     echo SLAVE P3 PID $P3SLAVEPID
204     read foo
205 fi
206
207 echo "Using ldapsearch to check that the P3 slave slapd PID $P3SLAVEPID is running..."
208 for i in 0 1 2 3 4 5; do
209         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $P3SLAVEPORT \
210                 'objectclass=*' > /dev/null 2>&1
211         RC=$?
212         if test $RC = 0 ; then
213                 break
214         fi
215         echo "Waiting 5 seconds for P3 slave slapd to start..."
216         sleep 5
217 done
218
219 if test $RC != 0 ; then
220         echo "ldapsearch failed ($RC)!"
221         kill -HUP $PID $R1SLAVEPID $R2SLAVEPID $P1SLAVEPID $P2SLAVEPID $P3SLAVEPID
222         exit $RC
223 fi
224
225 echo "Using ldapadd to populate the master directory..."
226 $LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT -w $PASSWD < \
227         $LDIFORDEREDNOCP > /dev/null 2>&1
228 RC=$?
229 if test $RC != 0 ; then
230         echo "ldapadd failed ($RC)!"
231         kill -HUP $PID $R1SLAVEPID $R2SLAVEPID $P1SLAVEPID $P2SLAVEPID $P3SLAVEPID
232         exit $RC
233 fi
234
235 echo "Waiting 90 seconds for syncrepl to receive changes..."
236 sleep 90
237
238 echo "Using ldapmodify to modify master directory..."
239
240 #
241 # Do some modifications
242 #
243
244 $LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT -w $PASSWD > \
245         $TESTOUT 2>&1 << EOMODS
246 dn: cn=James A Jones 1, ou=Alumni Association, ou=People, o=University of Michigan, c=US
247 changetype: modify
248 add: drink
249 drink: Orange Juice
250 -
251 delete: sn
252 sn: Jones
253 -
254 add: sn
255 sn: Jones
256
257 dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
258 changetype: modify
259 replace: drink
260 drink: Iced Tea
261 drink: Mad Dog 20/20
262
263 dn: cn=ITD Staff,ou=Groups,o=University of Michigan,c=US
264 changetype: modify
265 delete: member
266 member: cn=James A Jones 2, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
267 member: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
268 -
269 add: member
270 member: cn=Dorothy Stevens, ou=Alumni Association, ou=People, o=University of Michigan, c=US
271 member: cn=James A Jones 1, ou=Alumni Association, ou=People, o=University of Michigan, c=US
272
273 dn: cn=All Staff,ou=Groups,o=University of Michigan,c=US
274 changetype: modify
275 delete: description
276
277 dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
278 changetype: add
279 objectclass: OpenLDAPperson
280 cn: Gern Jensen
281 sn: Jensen
282 uid: gjensen
283 title: Chief Investigator, ITD
284 postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103
285 seealso: cn=All Staff, ou=Groups, o=University of Michigan, c=US
286 drink: Coffee
287 homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104
288 description: Very odd
289 facsimiletelephonenumber: +1 313 555 7557
290 telephonenumber: +1 313 555 8343
291 mail: gjensen@mailgw.example.com
292 homephone: +1 313 555 8844
293
294 dn: ou=Retired, ou=People, o=University of Michigan, c=US
295 changetype: add
296 objectclass: organizationalUnit
297 ou: Retired
298
299 dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
300 changetype: add
301 objectclass: OpenLDAPperson
302 cn: Rosco P. Coltrane
303 sn: Coltrane
304 uid: rosco
305
306 dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
307 changetype: modrdn
308 newrdn: cn=Rosco P. Coltrane
309 deleteoldrdn: 1
310 newsuperior: ou=Retired, ou=People, o=University of Michigan, c=US
311
312 dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
313 changetype: delete
314
315 EOMODS
316
317 echo "Waiting 90 seconds for syncrepl to receive changes..."
318 sleep 90
319
320 echo "Using ldapsearch to read all the entries from the master..."
321 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT \
322         'objectclass=*' > $MASTEROUT 2>&1
323 RC=$?
324
325 if test $RC != 0 ; then
326         echo "ldapsearch failed at master ($RC)!"
327         kill -HUP $PID $R1SLAVEPID $R2SLAVEPID $P1SLAVEPID $P2SLAVEPID $P3SLAVEPID
328         exit $RC
329 fi
330
331 echo "Using ldapsearch to read all the entries from the R1 slave..."
332 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $R1SLAVEPORT \
333         'objectclass=*' > $R1SLAVEOUT 2>&1
334 RC=$?
335
336 if test $RC != 0 ; then
337         echo "ldapsearch failed at R1 slave ($RC)!"
338         kill -HUP $PID $R1SLAVEPID $R2SLAVEPID $P1SLAVEPID $P2SLAVEPID $P3SLAVEPID
339         exit $RC
340 fi
341
342 echo "Using ldapsearch to read all the entries from the R2 slave..."
343 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $R2SLAVEPORT \
344         'objectclass=*' > $R2SLAVEOUT 2>&1
345 RC=$?
346
347 if test $RC != 0 ; then
348         echo "ldapsearch failed at R2 slave ($RC)!"
349         kill -HUP $PID $R1SLAVEPID $R2SLAVEPID $P1SLAVEPID $P2SLAVEPID $P3SLAVEPID
350         exit $RC
351 fi
352
353 echo "Using ldapsearch to read all the entries from the P1 slave..."
354 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $P1SLAVEPORT \
355         'objectclass=*' > $P1SLAVEOUT 2>&1
356 RC=$?
357
358 if test $RC != 0 ; then
359         echo "ldapsearch failed at R1 slave ($RC)!"
360         kill -HUP $PID $R1SLAVEPID $R2SLAVEPID $P1SLAVEPID $P2SLAVEPID $P3SLAVEPID
361         exit $RC
362 fi
363
364 echo "Using ldapsearch to read all the entries from the P2 slave..."
365 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $P2SLAVEPORT \
366         'objectclass=*' > $P2SLAVEOUT 2>&1
367 RC=$?
368
369 if test $RC != 0 ; then
370         echo "ldapsearch failed at R2 slave ($RC)!"
371         kill -HUP $PID $R1SLAVEPID $R2SLAVEPID $P1SLAVEPID $P2SLAVEPID $P3SLAVEPID
372         exit $RC
373 fi
374
375 echo "Using ldapsearch to read all the entries from the P3 slave..."
376 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $P3SLAVEPORT \
377         'objectclass=*' > $P3SLAVEOUT 2>&1
378 RC=$?
379
380 if test $RC != 0 ; then
381         echo "ldapsearch failed at R2 slave ($RC)!"
382         kill -HUP $PID $R1SLAVEPID $R2SLAVEPID $P1SLAVEPID $P2SLAVEPID $P3SLAVEPID
383         exit $RC
384 fi
385
386 kill -HUP $PID $R1SLAVEPID $R2SLAVEPID $P1SLAVEPID $P2SLAVEPID $P3SLAVEPID
387
388 SEARCHOUT=$MASTEROUT
389 R1LDIF=$R1SLAVEOUT
390 R2LDIF=$R2SLAVEOUT
391 P1LDIF=$P1SLAVEOUT
392 P2LDIF=$P2SLAVEOUT
393 P3LDIF=$P3SLAVEOUT
394
395 echo "Filtering master ldapsearch results..."
396 . $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
397 echo "Filtering R1 slave ldapsearch results..."
398 . $LDIFFILTER < $R1LDIF > $R1LDIFFLT
399 echo "Filtering R2 slave ldapsearch results..."
400 . $LDIFFILTER < $R2LDIF > $R2LDIFFLT
401 echo "Filtering P1 slave ldapsearch results..."
402 . $LDIFFILTER < $P1LDIF > $P1LDIFFLT
403 echo "Filtering P2 slave ldapsearch results..."
404 . $LDIFFILTER < $P2LDIF > $P2LDIFFLT
405 echo "Filtering P3 slave ldapsearch results..."
406 . $LDIFFILTER < $P3LDIF > $P3LDIFFLT
407
408 echo "Comparing retrieved entries from master and R1 slave..."
409 $CMP $SEARCHFLT $R1LDIFFLT > $CMPOUT
410
411 if test $? != 0 ; then
412         echo "test failed - master and R1 slave databases differ"
413         exit 1
414 fi
415
416 echo "Comparing retrieved entries from master and R2 slave..."
417 $CMP $SEARCHFLT $R2LDIFFLT > $CMPOUT
418
419 if test $? != 0 ; then
420         echo "test failed - master and R2 slave databases differ"
421         exit 1
422 fi
423
424 echo "Comparing retrieved entries from master and P1 slave..."
425 $CMP $SEARCHFLT $P1LDIFFLT > $CMPOUT
426
427 if test $? != 0 ; then
428         echo "test failed - master and P1 slave databases differ"
429         exit 1
430 fi
431
432 echo "Comparing retrieved entries from master and P2 slave..."
433 $CMP $SEARCHFLT $P2LDIFFLT > $CMPOUT
434
435 if test $? != 0 ; then
436         echo "test failed - master and P2 slave databases differ"
437         exit 1
438 fi
439
440 echo "Comparing retrieved entries from master and P3 slave..."
441 $CMP $SEARCHFLT $P3LDIFFLT > $CMPOUT
442
443 if test $? != 0 ; then
444         echo "test failed - master and P3 slave databases differ"
445         exit 1
446 fi
447
448 echo ">>>>> Test succeeded"
449
450
451 exit 0