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