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