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