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