test018-syncreplication-persist revision 1.1 1 1.1 lukem #! /bin/sh
2 1.1 lukem # $OpenLDAP: pkg/ldap/tests/scripts/test018-syncreplication-persist,v 1.38.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
29 1.1 lukem mkdir -p $TESTDIR $DBDIR1 $DBDIR4
30 1.1 lukem
31 1.1 lukem #
32 1.1 lukem # Test replication:
33 1.1 lukem # - start producer
34 1.1 lukem # - start consumer
35 1.1 lukem # - populate over ldap
36 1.1 lukem # - perform some modifies and deleted
37 1.1 lukem # - attempt to modify the consumer (referral or chain)
38 1.1 lukem # - retrieve database over ldap and compare against expected results
39 1.1 lukem #
40 1.1 lukem
41 1.1 lukem echo "Starting producer slapd on TCP/IP port $PORT1..."
42 1.1 lukem . $CONFFILTER $BACKEND $MONITORDB < $SRMASTERCONF > $CONF1
43 1.1 lukem $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
44 1.1 lukem PID=$!
45 1.1 lukem if test $WAIT != 0 ; then
46 1.1 lukem echo PID $PID
47 1.1 lukem read foo
48 1.1 lukem fi
49 1.1 lukem KILLPIDS="$PID"
50 1.1 lukem
51 1.1 lukem sleep 1
52 1.1 lukem
53 1.1 lukem echo "Using ldapsearch to check that producer slapd is running..."
54 1.1 lukem for i in 0 1 2 3 4 5; do
55 1.1 lukem $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
56 1.1 lukem 'objectclass=*' > /dev/null 2>&1
57 1.1 lukem RC=$?
58 1.1 lukem if test $RC = 0 ; then
59 1.1 lukem break
60 1.1 lukem fi
61 1.1 lukem echo "Waiting 5 seconds for slapd to start..."
62 1.1 lukem sleep 5
63 1.1 lukem done
64 1.1 lukem
65 1.1 lukem if test $RC != 0 ; then
66 1.1 lukem echo "ldapsearch failed ($RC)!"
67 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
68 1.1 lukem exit $RC
69 1.1 lukem fi
70 1.1 lukem
71 1.1 lukem echo "Using ldapadd to create the context prefix entry in the producer..."
72 1.1 lukem $LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \
73 1.1 lukem $LDIFORDEREDCP > /dev/null 2>&1
74 1.1 lukem RC=$?
75 1.1 lukem if test $RC != 0 ; then
76 1.1 lukem echo "ldapadd failed ($RC)!"
77 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
78 1.1 lukem exit $RC
79 1.1 lukem fi
80 1.1 lukem
81 1.1 lukem echo "Starting consumer slapd on TCP/IP port $PORT4..."
82 1.1 lukem . $CONFFILTER $BACKEND $MONITORDB < $P1SRSLAVECONF > $CONF4
83 1.1 lukem $SLAPD -f $CONF4 -h $URI4 -d $LVL $TIMING > $LOG4 2>&1 &
84 1.1 lukem SLAVEPID=$!
85 1.1 lukem if test $WAIT != 0 ; then
86 1.1 lukem echo SLAVEPID $SLAVEPID
87 1.1 lukem read foo
88 1.1 lukem fi
89 1.1 lukem KILLPIDS="$KILLPIDS $SLAVEPID"
90 1.1 lukem
91 1.1 lukem sleep 1
92 1.1 lukem
93 1.1 lukem echo "Using ldapsearch to check that consumer slapd is running..."
94 1.1 lukem for i in 0 1 2 3 4 5; do
95 1.1 lukem $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT4 \
96 1.1 lukem 'objectclass=*' > /dev/null 2>&1
97 1.1 lukem RC=$?
98 1.1 lukem if test $RC = 0 ; then
99 1.1 lukem break
100 1.1 lukem fi
101 1.1 lukem echo "Waiting 5 seconds for slapd to start..."
102 1.1 lukem sleep 5
103 1.1 lukem done
104 1.1 lukem
105 1.1 lukem if test $RC != 0 ; then
106 1.1 lukem echo "ldapsearch failed ($RC)!"
107 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
108 1.1 lukem exit $RC
109 1.1 lukem fi
110 1.1 lukem
111 1.1 lukem echo "Using ldapadd to populate the producer directory..."
112 1.1 lukem $LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \
113 1.1 lukem $LDIFORDEREDNOCP > /dev/null 2>&1
114 1.1 lukem RC=$?
115 1.1 lukem if test $RC != 0 ; then
116 1.1 lukem echo "ldapadd failed ($RC)!"
117 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
118 1.1 lukem exit $RC
119 1.1 lukem fi
120 1.1 lukem
121 1.1 lukem echo "Waiting 15 seconds for syncrepl to receive changes..."
122 1.1 lukem sleep 15
123 1.1 lukem
124 1.1 lukem echo "Stopping the provider, sleeping 10 seconds and restarting it..."
125 1.1 lukem kill -HUP "$PID"
126 1.1 lukem wait $PID
127 1.1 lukem sleep 10
128 1.1 lukem echo "RESTART" >> $LOG1
129 1.1 lukem $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 &
130 1.1 lukem PID=$!
131 1.1 lukem if test $WAIT != 0 ; then
132 1.1 lukem echo PID $PID
133 1.1 lukem read foo
134 1.1 lukem fi
135 1.1 lukem KILLPIDS="$PID $SLAVEPID"
136 1.1 lukem
137 1.1 lukem sleep 1
138 1.1 lukem
139 1.1 lukem echo "Using ldapsearch to check that producer slapd is running..."
140 1.1 lukem for i in 0 1 2 3 4 5; do
141 1.1 lukem $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
142 1.1 lukem 'objectclass=*' > /dev/null 2>&1
143 1.1 lukem RC=$?
144 1.1 lukem if test $RC = 0 ; then
145 1.1 lukem break
146 1.1 lukem fi
147 1.1 lukem echo "Waiting 5 seconds for slapd to start..."
148 1.1 lukem sleep 5
149 1.1 lukem done
150 1.1 lukem
151 1.1 lukem if test $RC != 0 ; then
152 1.1 lukem echo "ldapsearch failed ($RC)!"
153 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
154 1.1 lukem exit $RC
155 1.1 lukem fi
156 1.1 lukem
157 1.1 lukem echo "Using ldapmodify to modify producer directory..."
158 1.1 lukem
159 1.1 lukem #
160 1.1 lukem # Do some modifications
161 1.1 lukem #
162 1.1 lukem
163 1.1 lukem $LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
164 1.1 lukem $TESTOUT 2>&1 << EOMODS
165 1.1 lukem dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
166 1.1 lukem changetype: modify
167 1.1 lukem add: drink
168 1.1 lukem drink: Orange Juice
169 1.1 lukem -
170 1.1 lukem delete: sn
171 1.1 lukem sn: Jones
172 1.1 lukem -
173 1.1 lukem add: sn
174 1.1 lukem sn: Jones
175 1.1 lukem
176 1.1 lukem dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
177 1.1 lukem changetype: modify
178 1.1 lukem replace: drink
179 1.1 lukem drink: Iced Tea
180 1.1 lukem
181 1.1 lukem dn: cn=ITD Staff,ou=Groups,dc=example,dc=com
182 1.1 lukem changetype: modify
183 1.1 lukem delete: uniquemember
184 1.1 lukem uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
185 1.1 lukem uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
186 1.1 lukem -
187 1.1 lukem add: uniquemember
188 1.1 lukem uniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com
189 1.1 lukem uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
190 1.1 lukem
191 1.1 lukem dn: cn=All Staff,ou=Groups,dc=example,dc=com
192 1.1 lukem changetype: modify
193 1.1 lukem delete: description
194 1.1 lukem
195 1.1 lukem dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
196 1.1 lukem changetype: add
197 1.1 lukem objectclass: OpenLDAPperson
198 1.1 lukem cn: Gern Jensen
199 1.1 lukem sn: Jensen
200 1.1 lukem uid: gjensen
201 1.1 lukem title: Chief Investigator, ITD
202 1.1 lukem postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103
203 1.1 lukem seealso: cn=All Staff, ou=Groups, dc=example,dc=com
204 1.1 lukem drink: Coffee
205 1.1 lukem homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104
206 1.1 lukem description: Very odd
207 1.1 lukem facsimiletelephonenumber: +1 313 555 7557
208 1.1 lukem telephonenumber: +1 313 555 8343
209 1.1 lukem mail: gjensen@mailgw.example.com
210 1.1 lukem homephone: +1 313 555 8844
211 1.1 lukem
212 1.1 lukem dn: ou=Retired, ou=People, dc=example,dc=com
213 1.1 lukem changetype: add
214 1.1 lukem objectclass: organizationalUnit
215 1.1 lukem ou: Retired
216 1.1 lukem
217 1.1 lukem dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
218 1.1 lukem changetype: add
219 1.1 lukem objectclass: OpenLDAPperson
220 1.1 lukem cn: Rosco P. Coltrane
221 1.1 lukem sn: Coltrane
222 1.1 lukem uid: rosco
223 1.1 lukem description: Fat tycoon
224 1.1 lukem
225 1.1 lukem dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
226 1.1 lukem changetype: modrdn
227 1.1 lukem newrdn: cn=Rosco P. Coltrane
228 1.1 lukem deleteoldrdn: 1
229 1.1 lukem newsuperior: ou=Retired, ou=People, dc=example,dc=com
230 1.1 lukem
231 1.1 lukem dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
232 1.1 lukem changetype: delete
233 1.1 lukem
234 1.1 lukem EOMODS
235 1.1 lukem
236 1.1 lukem RC=$?
237 1.1 lukem if test $RC != 0 ; then
238 1.1 lukem echo "ldapmodify failed ($RC)!"
239 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
240 1.1 lukem exit $RC
241 1.1 lukem fi
242 1.1 lukem
243 1.1 lukem echo "Using ldappasswd to change some passwords..."
244 1.1 lukem $LDAPPASSWD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD \
245 1.1 lukem 'cn=Bjorn Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com' \
246 1.1 lukem > $TESTOUT 2>&1
247 1.1 lukem RC=$?
248 1.1 lukem if test $RC != 0 ; then
249 1.1 lukem echo "ldapmodify failed ($RC)!"
250 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
251 1.1 lukem exit $RC
252 1.1 lukem fi
253 1.1 lukem
254 1.1 lukem echo "Waiting 15 seconds for syncrepl to receive changes..."
255 1.1 lukem sleep 15
256 1.1 lukem
257 1.1 lukem echo "Stopping consumer to test recovery..."
258 1.1 lukem kill -HUP $SLAVEPID
259 1.1 lukem wait $SLAVEPID
260 1.1 lukem
261 1.1 lukem echo "Modifying more entries on the producer..."
262 1.1 lukem $LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD >> \
263 1.1 lukem $TESTOUT 2>&1 << EOMODS
264 1.1 lukem dn: cn=Rosco P. Coltrane, ou=Retired, ou=People, dc=example,dc=com
265 1.1 lukem changetype: delete
266 1.1 lukem
267 1.1 lukem dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
268 1.1 lukem changetype: modify
269 1.1 lukem add: drink
270 1.1 lukem drink: Mad Dog 20/20
271 1.1 lukem
272 1.1 lukem dn: cn=Rosco P. Coltrane, ou=Retired, ou=People, dc=example,dc=com
273 1.1 lukem changetype: add
274 1.1 lukem objectclass: OpenLDAPperson
275 1.1 lukem sn: Coltrane
276 1.1 lukem uid: rosco
277 1.1 lukem cn: Rosco P. Coltrane
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" >> $LOG4
283 1.1 lukem $SLAPD -f $CONF4 -h $URI4 -d $LVL $TIMING >> $LOG4 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 $PORT4 -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 # ITS#4964
314 1.1 lukem echo "Trying to change some passwords on the consumer..."
315 1.1 lukem $LDAPPASSWD -D "$MANAGERDN" -h $LOCALHOST -p $PORT4 -w $PASSWD \
316 1.1 lukem 'cn=Barbara Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com' \
317 1.1 lukem > $TESTOUT 2>&1
318 1.1 lukem RC=$?
319 1.1 lukem if test $RC != 0 ; then
320 1.1 lukem echo "ldapmodify failed ($RC)!"
321 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
322 1.1 lukem exit $RC
323 1.1 lukem fi
324 1.1 lukem
325 1.1 lukem echo "Waiting 15 seconds for syncrepl to receive changes..."
326 1.1 lukem sleep 15
327 1.1 lukem fi
328 1.1 lukem
329 1.1 lukem OPATTRS="entryUUID creatorsName createTimestamp modifiersName modifyTimestamp"
330 1.1 lukem
331 1.1 lukem echo "Using ldapsearch to read all the entries from the producer..."
332 1.1 lukem $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
333 1.1 lukem '(objectclass=*)' '*' $OPATTRS > $MASTEROUT 2>&1
334 1.1 lukem RC=$?
335 1.1 lukem
336 1.1 lukem if test $RC != 0 ; then
337 1.1 lukem echo "ldapsearch failed at producer ($RC)!"
338 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
339 1.1 lukem exit $RC
340 1.1 lukem fi
341 1.1 lukem
342 1.1 lukem echo "Using ldapsearch to read all the entries from the consumer..."
343 1.1 lukem $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT4 \
344 1.1 lukem '(objectclass=*)' '*' $OPATTRS > $SLAVEOUT 2>&1
345 1.1 lukem RC=$?
346 1.1 lukem
347 1.1 lukem if test $RC != 0 ; then
348 1.1 lukem echo "ldapsearch failed at consumer ($RC)!"
349 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
350 1.1 lukem exit $RC
351 1.1 lukem fi
352 1.1 lukem
353 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
354 1.1 lukem
355 1.1 lukem echo "Filtering producer results..."
356 1.1 lukem . $LDIFFILTER < $MASTEROUT > $MASTERFLT
357 1.1 lukem echo "Filtering consumer results..."
358 1.1 lukem . $LDIFFILTER < $SLAVEOUT > $SLAVEFLT
359 1.1 lukem
360 1.1 lukem echo "Comparing retrieved entries from producer and consumer..."
361 1.1 lukem $CMP $MASTERFLT $SLAVEFLT > $CMPOUT
362 1.1 lukem
363 1.1 lukem if test $? != 0 ; then
364 1.1 lukem echo "test failed - producer and consumer databases differ"
365 1.1 lukem exit 1
366 1.1 lukem fi
367 1.1 lukem
368 1.1 lukem echo ">>>>> Test succeeded"
369 1.1 lukem
370 1.1 lukem test $KILLSERVERS != no && wait
371 1.1 lukem
372 1.1 lukem exit 0
373