test043-delta-syncrepl revision 1.1.1.1 1 1.1 lukem #! /bin/sh
2 1.1 lukem # $OpenLDAP: pkg/ldap/tests/scripts/test043-delta-syncrepl,v 1.4.2.3 2008/02/11 23:26:51 kurt Exp $
3 1.1 lukem ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 1.1 lukem ##
5 1.1 lukem ## Copyright 1998-2008 The OpenLDAP Foundation.
6 1.1 lukem ## All rights reserved.
7 1.1 lukem ##
8 1.1 lukem ## Redistribution and use in source and binary forms, with or without
9 1.1 lukem ## modification, are permitted only as authorized by the OpenLDAP
10 1.1 lukem ## Public License.
11 1.1 lukem ##
12 1.1 lukem ## A copy of this license is available in the file LICENSE in the
13 1.1 lukem ## top-level directory of the distribution or, alternatively, at
14 1.1 lukem ## <http://www.OpenLDAP.org/license.html>.
15 1.1 lukem
16 1.1 lukem if test "$BACKEND" != "bdb" && test "$BACKEND" != "hdb" ; then
17 1.1 lukem echo "Test does not support $BACKEND"
18 1.1 lukem exit 0
19 1.1 lukem fi
20 1.1 lukem
21 1.1 lukem echo "running defines.sh"
22 1.1 lukem . $SRCDIR/scripts/defines.sh
23 1.1 lukem
24 1.1 lukem if test $SYNCPROV = syncprovno; then
25 1.1 lukem echo "Syncrepl provider overlay not available, test skipped"
26 1.1 lukem exit 0
27 1.1 lukem fi
28 1.1 lukem if test $ACCESSLOG = accesslogno; then
29 1.1 lukem echo "Accesslog overlay not available, test skipped"
30 1.1 lukem exit 0
31 1.1 lukem fi
32 1.1 lukem
33 1.1 lukem mkdir -p $TESTDIR $DBDIR1A $DBDIR1B $DBDIR2
34 1.1 lukem
35 1.1 lukem #
36 1.1 lukem # Test replication:
37 1.1 lukem # - start producer
38 1.1 lukem # - start consumer
39 1.1 lukem # - populate over ldap
40 1.1 lukem # - perform some modifies and deleted
41 1.1 lukem # - attempt to modify the consumer (referral or chain)
42 1.1 lukem # - retrieve database over ldap and compare against expected results
43 1.1 lukem #
44 1.1 lukem
45 1.1 lukem echo "Starting producer slapd on TCP/IP port $PORT1..."
46 1.1 lukem . $CONFFILTER $BACKEND $MONITORDB < $DSRMASTERCONF > $CONF1
47 1.1 lukem $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
48 1.1 lukem PID=$!
49 1.1 lukem if test $WAIT != 0 ; then
50 1.1 lukem echo PID $PID
51 1.1 lukem read foo
52 1.1 lukem fi
53 1.1 lukem KILLPIDS="$PID"
54 1.1 lukem
55 1.1 lukem sleep 1
56 1.1 lukem
57 1.1 lukem echo "Using ldapsearch to check that producer slapd is running..."
58 1.1 lukem for i in 0 1 2 3 4 5; do
59 1.1 lukem $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
60 1.1 lukem 'objectclass=*' > /dev/null 2>&1
61 1.1 lukem RC=$?
62 1.1 lukem if test $RC = 0 ; then
63 1.1 lukem break
64 1.1 lukem fi
65 1.1 lukem echo "Waiting 5 seconds for slapd to start..."
66 1.1 lukem sleep 5
67 1.1 lukem done
68 1.1 lukem
69 1.1 lukem if test $RC != 0 ; then
70 1.1 lukem echo "ldapsearch failed ($RC)!"
71 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
72 1.1 lukem exit $RC
73 1.1 lukem fi
74 1.1 lukem
75 1.1 lukem echo "Using ldapadd to create the context prefix entries in the producer..."
76 1.1 lukem $LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \
77 1.1 lukem $LDIFORDEREDCP > /dev/null 2>&1
78 1.1 lukem RC=$?
79 1.1 lukem if test $RC != 0 ; then
80 1.1 lukem echo "ldapadd failed ($RC)!"
81 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
82 1.1 lukem exit $RC
83 1.1 lukem fi
84 1.1 lukem
85 1.1 lukem echo "Starting consumer slapd on TCP/IP port $PORT2..."
86 1.1 lukem . $CONFFILTER $BACKEND $MONITORDB < $DSRSLAVECONF > $CONF2
87 1.1 lukem $SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 &
88 1.1 lukem SLAVEPID=$!
89 1.1 lukem if test $WAIT != 0 ; then
90 1.1 lukem echo SLAVEPID $SLAVEPID
91 1.1 lukem read foo
92 1.1 lukem fi
93 1.1 lukem KILLPIDS="$KILLPIDS $SLAVEPID"
94 1.1 lukem
95 1.1 lukem sleep 1
96 1.1 lukem
97 1.1 lukem echo "Using ldapsearch to check that consumer slapd is running..."
98 1.1 lukem for i in 0 1 2 3 4 5; do
99 1.1 lukem $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \
100 1.1 lukem 'objectclass=*' > /dev/null 2>&1
101 1.1 lukem RC=$?
102 1.1 lukem if test $RC = 0 ; then
103 1.1 lukem break
104 1.1 lukem fi
105 1.1 lukem echo "Waiting 5 seconds for slapd to start..."
106 1.1 lukem sleep 5
107 1.1 lukem done
108 1.1 lukem
109 1.1 lukem if test $RC != 0 ; then
110 1.1 lukem echo "ldapsearch failed ($RC)!"
111 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
112 1.1 lukem exit $RC
113 1.1 lukem fi
114 1.1 lukem
115 1.1 lukem echo "Using ldapadd to populate the producer directory..."
116 1.1 lukem $LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \
117 1.1 lukem $LDIFORDEREDNOCP > /dev/null 2>&1
118 1.1 lukem RC=$?
119 1.1 lukem if test $RC != 0 ; then
120 1.1 lukem echo "ldapadd failed ($RC)!"
121 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
122 1.1 lukem exit $RC
123 1.1 lukem fi
124 1.1 lukem
125 1.1 lukem echo "Waiting 15 seconds for syncrepl to receive changes..."
126 1.1 lukem sleep 15
127 1.1 lukem
128 1.1 lukem echo "Stopping the provider, sleeping 10 seconds and restarting it..."
129 1.1 lukem kill -HUP "$PID"
130 1.1 lukem sleep 10
131 1.1 lukem echo "RESTART" >> $LOG1
132 1.1 lukem $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 &
133 1.1 lukem PID=$!
134 1.1 lukem if test $WAIT != 0 ; then
135 1.1 lukem echo PID $PID
136 1.1 lukem read foo
137 1.1 lukem fi
138 1.1 lukem KILLPIDS="$PID $SLAVEPID"
139 1.1 lukem
140 1.1 lukem sleep 1
141 1.1 lukem
142 1.1 lukem echo "Using ldapsearch to check that producer slapd is running..."
143 1.1 lukem for i in 0 1 2 3 4 5; do
144 1.1 lukem $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
145 1.1 lukem 'objectclass=*' > /dev/null 2>&1
146 1.1 lukem RC=$?
147 1.1 lukem if test $RC = 0 ; then
148 1.1 lukem break
149 1.1 lukem fi
150 1.1 lukem echo "Waiting 5 seconds for slapd to start..."
151 1.1 lukem sleep 5
152 1.1 lukem done
153 1.1 lukem
154 1.1 lukem if test $RC != 0 ; then
155 1.1 lukem echo "ldapsearch failed ($RC)!"
156 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
157 1.1 lukem exit $RC
158 1.1 lukem fi
159 1.1 lukem
160 1.1 lukem echo "Using ldapmodify to modify producer directory..."
161 1.1 lukem
162 1.1 lukem #
163 1.1 lukem # Do some modifications
164 1.1 lukem #
165 1.1 lukem
166 1.1 lukem $LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
167 1.1 lukem $TESTOUT 2>&1 << EOMODS
168 1.1 lukem dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
169 1.1 lukem changetype: modify
170 1.1 lukem add: drink
171 1.1 lukem drink: Orange Juice
172 1.1 lukem -
173 1.1 lukem delete: sn
174 1.1 lukem sn: Jones
175 1.1 lukem -
176 1.1 lukem add: sn
177 1.1 lukem sn: Jones
178 1.1 lukem
179 1.1 lukem dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
180 1.1 lukem changetype: modify
181 1.1 lukem replace: drink
182 1.1 lukem drink: Iced Tea
183 1.1 lukem
184 1.1 lukem dn: cn=ITD Staff,ou=Groups,dc=example,dc=com
185 1.1 lukem changetype: modify
186 1.1 lukem delete: uniquemember
187 1.1 lukem uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
188 1.1 lukem uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
189 1.1 lukem -
190 1.1 lukem add: uniquemember
191 1.1 lukem uniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com
192 1.1 lukem uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
193 1.1 lukem
194 1.1 lukem dn: cn=All Staff,ou=Groups,dc=example,dc=com
195 1.1 lukem changetype: modify
196 1.1 lukem delete: description
197 1.1 lukem
198 1.1 lukem dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
199 1.1 lukem changetype: add
200 1.1 lukem objectclass: OpenLDAPperson
201 1.1 lukem cn: Gern Jensen
202 1.1 lukem sn: Jensen
203 1.1 lukem uid: gjensen
204 1.1 lukem title: Chief Investigator, ITD
205 1.1 lukem postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103
206 1.1 lukem seealso: cn=All Staff, ou=Groups, dc=example,dc=com
207 1.1 lukem drink: Coffee
208 1.1 lukem homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104
209 1.1 lukem description: Very odd
210 1.1 lukem facsimiletelephonenumber: +1 313 555 7557
211 1.1 lukem telephonenumber: +1 313 555 8343
212 1.1 lukem mail: gjensen@mailgw.example.com
213 1.1 lukem homephone: +1 313 555 8844
214 1.1 lukem
215 1.1 lukem dn: ou=Retired, ou=People, dc=example,dc=com
216 1.1 lukem changetype: add
217 1.1 lukem objectclass: organizationalUnit
218 1.1 lukem ou: Retired
219 1.1 lukem
220 1.1 lukem dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
221 1.1 lukem changetype: add
222 1.1 lukem objectclass: OpenLDAPperson
223 1.1 lukem cn: Rosco P. Coltrane
224 1.1 lukem sn: Coltrane
225 1.1 lukem uid: rosco
226 1.1 lukem description: Fat tycoon
227 1.1 lukem
228 1.1 lukem dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
229 1.1 lukem changetype: modrdn
230 1.1 lukem newrdn: cn=Rosco P. Coltrane
231 1.1 lukem deleteoldrdn: 1
232 1.1 lukem newsuperior: ou=Retired, ou=People, dc=example,dc=com
233 1.1 lukem
234 1.1 lukem dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
235 1.1 lukem changetype: delete
236 1.1 lukem
237 1.1 lukem EOMODS
238 1.1 lukem RC=$?
239 1.1 lukem if test $RC != 0 ; then
240 1.1 lukem echo "ldapmodify failed ($RC)!"
241 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
242 1.1 lukem exit $RC
243 1.1 lukem fi
244 1.1 lukem
245 1.1 lukem echo "Waiting 15 seconds for syncrepl to receive changes..."
246 1.1 lukem sleep 15
247 1.1 lukem
248 1.1 lukem echo "Stopping consumer to test recovery..."
249 1.1 lukem kill -HUP $SLAVEPID
250 1.1 lukem sleep 10
251 1.1 lukem
252 1.1 lukem echo "Modifying more entries on the producer..."
253 1.1 lukem $LDAPMODIFY -v -D "$BJORNSDN" -h $LOCALHOST -p $PORT1 -w bjorn >> \
254 1.1 lukem $TESTOUT 2>&1 << EOMODS
255 1.1 lukem dn: cn=Rosco P. Coltrane, ou=Retired, ou=People, dc=example,dc=com
256 1.1 lukem changetype: delete
257 1.1 lukem
258 1.1 lukem dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
259 1.1 lukem changetype: modify
260 1.1 lukem add: drink
261 1.1 lukem drink: Mad Dog 20/20
262 1.1 lukem
263 1.1 lukem dn: cn=Rosco P. Coltrane, ou=Retired, ou=People, dc=example,dc=com
264 1.1 lukem changetype: add
265 1.1 lukem objectclass: OpenLDAPperson
266 1.1 lukem sn: Coltrane
267 1.1 lukem uid: rosco
268 1.1 lukem cn: Rosco P. Coltrane
269 1.1 lukem
270 1.1 lukem dn: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com
271 1.1 lukem changetype: modify
272 1.1 lukem replace: drink
273 1.1 lukem
274 1.1 lukem dn: cn=All Staff,ou=Groups,dc=example,dc=com
275 1.1 lukem changetype: modrdn
276 1.1 lukem newrdn: cn=Some Staff
277 1.1 lukem deleteoldrdn: 1
278 1.1 lukem
279 1.1 lukem EOMODS
280 1.1 lukem
281 1.1 lukem echo "Restarting consumer..."
282 1.1 lukem echo "RESTART" >> $LOG2
283 1.1 lukem $SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING >> $LOG2 2>&1 &
284 1.1 lukem SLAVEPID=$!
285 1.1 lukem if test $WAIT != 0 ; then
286 1.1 lukem echo SLAVEPID $SLAVEPID
287 1.1 lukem read foo
288 1.1 lukem fi
289 1.1 lukem KILLPIDS="$PID $SLAVEPID"
290 1.1 lukem
291 1.1 lukem echo "Waiting 25 seconds for syncrepl to receive changes..."
292 1.1 lukem sleep 25
293 1.1 lukem
294 1.1 lukem if test ! $BACKLDAP = "ldapno" ; then
295 1.1 lukem echo "Try updating the consumer slapd..."
296 1.1 lukem $LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT2 -w $PASSWD > \
297 1.1 lukem $TESTOUT 2>&1 << EOMODS
298 1.1 lukem dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com
299 1.1 lukem changetype: modify
300 1.1 lukem add: description
301 1.1 lukem description: This write must fail because directed to a shadow context,
302 1.1 lukem description: unless the chain overlay is configured appropriately ;)
303 1.1 lukem
304 1.1 lukem EOMODS
305 1.1 lukem
306 1.1 lukem RC=$?
307 1.1 lukem if test $RC != 0 ; then
308 1.1 lukem echo "ldapmodify failed ($RC)!"
309 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
310 1.1 lukem exit $RC
311 1.1 lukem fi
312 1.1 lukem
313 1.1 lukem echo "Waiting 15 seconds for syncrepl to receive changes..."
314 1.1 lukem sleep 15
315 1.1 lukem fi
316 1.1 lukem
317 1.1 lukem echo "Using ldapsearch to read all the entries from the producer..."
318 1.1 lukem $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
319 1.1 lukem 'objectclass=*' \* + > $MASTEROUT 2>&1
320 1.1 lukem RC=$?
321 1.1 lukem
322 1.1 lukem if test $RC != 0 ; then
323 1.1 lukem echo "ldapsearch failed at producer ($RC)!"
324 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
325 1.1 lukem exit $RC
326 1.1 lukem fi
327 1.1 lukem
328 1.1 lukem echo "Using ldapsearch to read all the entries from the consumer..."
329 1.1 lukem $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
330 1.1 lukem 'objectclass=*' \* + > $SLAVEOUT 2>&1
331 1.1 lukem RC=$?
332 1.1 lukem
333 1.1 lukem if test $RC != 0 ; then
334 1.1 lukem echo "ldapsearch failed at consumer ($RC)!"
335 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
336 1.1 lukem exit $RC
337 1.1 lukem fi
338 1.1 lukem
339 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
340 1.1 lukem
341 1.1 lukem echo "Filtering producer results..."
342 1.1 lukem . $LDIFFILTER < $MASTEROUT | grep -iv "^auditcontext:" > $MASTERFLT
343 1.1 lukem echo "Filtering consumer results..."
344 1.1 lukem . $LDIFFILTER < $SLAVEOUT | grep -iv "^auditcontext:" > $SLAVEFLT
345 1.1 lukem
346 1.1 lukem echo "Comparing retrieved entries from producer and consumer..."
347 1.1 lukem $CMP $MASTERFLT $SLAVEFLT > $CMPOUT
348 1.1 lukem
349 1.1 lukem if test $? != 0 ; then
350 1.1 lukem echo "test failed - producer and consumer databases differ"
351 1.1 lukem exit 1
352 1.1 lukem fi
353 1.1 lukem
354 1.1 lukem echo ">>>>> Test succeeded"
355 1.1 lukem
356 1.1 lukem test $KILLSERVERS != no && wait
357 1.1 lukem
358 1.1 lukem exit 0
359