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