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