xref: /netbsd-src/external/bsd/openldap/dist/tests/scripts/test017-syncreplication-refresh (revision 404fbe5fb94ca1e054339640cabb2801ce52dd30)
1#! /bin/sh
2# $OpenLDAP: pkg/ldap/tests/scripts/test017-syncreplication-refresh,v 1.33.2.3 2008/02/11 23:26:51 kurt Exp $
3## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4##
5## Copyright 1998-2008 The OpenLDAP Foundation.
6## All rights reserved.
7##
8## Redistribution and use in source and binary forms, with or without
9## modification, are permitted only as authorized by the OpenLDAP
10## Public License.
11##
12## A copy of this license is available in the file LICENSE in the
13## top-level directory of the distribution or, alternatively, at
14## <http://www.OpenLDAP.org/license.html>.
15
16echo "running defines.sh"
17. $SRCDIR/scripts/defines.sh
18
19if test $SYNCPROV = syncprovno; then
20	echo "Syncrepl provider overlay not available, test skipped"
21	exit 0
22fi
23
24mkdir -p $TESTDIR $DBDIR1 $DBDIR2
25
26#
27# Test replication:
28# - start producer
29# - start consumer
30# - populate over ldap
31# - perform some modifies and deleted
32# - attempt to modify the consumer (referral)
33# - retrieve database over ldap and compare against expected results
34#
35
36echo "Starting producer slapd on TCP/IP port $PORT1..."
37. $CONFFILTER $BACKEND $MONITORDB < $SRMASTERCONF > $CONF1
38$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
39PID=$!
40if test $WAIT != 0 ; then
41    echo PID $PID
42    read foo
43fi
44KILLPIDS="$PID"
45
46sleep 1
47
48echo "Using ldapsearch to check that producer slapd is running..."
49for i in 0 1 2 3 4 5; do
50	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
51		'objectclass=*' > /dev/null 2>&1
52	RC=$?
53	if test $RC = 0 ; then
54		break
55	fi
56	echo "Waiting 5 seconds for slapd to start..."
57	sleep 5
58done
59
60if test $RC != 0 ; then
61	echo "ldapsearch failed ($RC)!"
62	test $KILLSERVERS != no && kill -HUP $KILLPIDS
63	exit $RC
64fi
65
66echo "Using ldapadd to create the context prefix entry in the producer..."
67$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \
68	$LDIFORDEREDCP > /dev/null 2>&1
69RC=$?
70if test $RC != 0 ; then
71	echo "ldapadd failed ($RC)!"
72	test $KILLSERVERS != no && kill -HUP $KILLPIDS
73	exit $RC
74fi
75
76echo "Starting consumer slapd on TCP/IP port $PORT2..."
77. $CONFFILTER $BACKEND $MONITORDB < $R1SRSLAVECONF > $CONF2
78$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 &
79SLAVEPID=$!
80if test $WAIT != 0 ; then
81    echo SLAVEPID $SLAVEPID
82    read foo
83fi
84KILLPIDS="$KILLPIDS $SLAVEPID"
85
86sleep 1
87
88echo "Using ldapsearch to check that consumer slapd is running..."
89for i in 0 1 2 3 4 5; do
90	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \
91		'objectclass=*' > /dev/null 2>&1
92	RC=$?
93	if test $RC = 0 ; then
94		break
95	fi
96	echo "Waiting 5 seconds for slapd to start..."
97	sleep 5
98done
99
100if test $RC != 0 ; then
101	echo "ldapsearch failed ($RC)!"
102	test $KILLSERVERS != no && kill -HUP $KILLPIDS
103	exit $RC
104fi
105
106echo "Using ldapadd to populate the producer directory..."
107$LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \
108	$LDIFORDEREDNOCP > /dev/null 2>&1
109RC=$?
110if test $RC != 0 ; then
111	echo "ldapadd failed ($RC)!"
112	test $KILLSERVERS != no && kill -HUP $KILLPIDS
113	exit $RC
114fi
115
116echo "Waiting 15 seconds for syncrepl to receive changes..."
117sleep 15
118
119echo "Using ldapmodify to modify producer directory..."
120
121#
122# Do some modifications
123#
124
125$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
126	$TESTOUT 2>&1 << EOMODS
127dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
128changetype: modify
129add: drink
130drink: Orange Juice
131-
132delete: sn
133sn: Jones
134-
135add: sn
136sn: Jones
137
138dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
139changetype: modify
140replace: drink
141drink: Iced Tea
142drink: Mad Dog 20/20
143
144dn: cn=ITD Staff,ou=Groups,dc=example,dc=com
145changetype: modify
146delete: uniquemember
147uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
148uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
149-
150add: uniquemember
151uniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com
152uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
153
154dn: cn=All Staff,ou=Groups,dc=example,dc=com
155changetype: modify
156delete: description
157
158dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
159changetype: add
160objectclass: OpenLDAPperson
161cn: Gern Jensen
162sn: Jensen
163uid: gjensen
164title: Chief Investigator, ITD
165postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103
166seealso: cn=All Staff, ou=Groups, dc=example,dc=com
167drink: Coffee
168homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104
169description: Very odd
170facsimiletelephonenumber: +1 313 555 7557
171telephonenumber: +1 313 555 8343
172mail: gjensen@mailgw.example.com
173homephone: +1 313 555 8844
174
175dn: ou=Retired, ou=People, dc=example,dc=com
176changetype: add
177objectclass: organizationalUnit
178ou: Retired
179
180dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
181changetype: add
182objectclass: OpenLDAPperson
183cn: Rosco P. Coltrane
184sn: Coltrane
185uid: rosco
186
187dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
188changetype: modrdn
189newrdn: cn=Rosco P. Coltrane
190deleteoldrdn: 1
191newsuperior: ou=Retired, ou=People, dc=example,dc=com
192
193dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
194changetype: delete
195
196EOMODS
197
198RC=$?
199if test $RC != 0 ; then
200	echo "ldapmodify failed ($RC)!"
201	test $KILLSERVERS != no && kill -HUP $KILLPIDS
202	exit $RC
203fi
204
205echo "Waiting 15 seconds for syncrepl to receive changes..."
206sleep 15
207
208echo "Try updating the consumer slapd..."
209$LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT2 -w $PASSWD > \
210	$TESTOUT 2>&1 << EOMODS
211dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com
212changetype: modify
213add: description
214description: This write must fail because directed to a shadow context,
215description: unless the chain overlay is configured appropriately ;)
216
217EOMODS
218
219RC=$?
220
221# expect 10 (LDAP_REFERRAL)...
222if test $RC != 10 ; then
223	echo "ldapmodify should have returned referral ($RC)!"
224	test $KILLSERVERS != no && kill -HUP $KILLPIDS
225	exit $RC
226fi
227
228OPATTRS="entryUUID creatorsName createTimestamp modifiersName modifyTimestamp"
229
230echo "Using ldapsearch to read all the entries from the producer..."
231$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
232	'(objectclass=*)' '*' $OPATTRS > $MASTEROUT 2>&1
233RC=$?
234
235if test $RC != 0 ; then
236	echo "ldapsearch failed at producer ($RC)!"
237	test $KILLSERVERS != no && kill -HUP $KILLPIDS
238	exit $RC
239fi
240
241echo "Using ldapsearch to read all the entries from the consumer..."
242$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
243	'(objectclass=*)' '*' $OPATTRS > $SLAVEOUT 2>&1
244RC=$?
245
246if test $RC != 0 ; then
247	echo "ldapsearch failed at consumer ($RC)!"
248	test $KILLSERVERS != no && kill -HUP $KILLPIDS
249	exit $RC
250fi
251
252test $KILLSERVERS != no && kill -HUP $KILLPIDS
253
254echo "Filtering producer results..."
255. $LDIFFILTER < $MASTEROUT > $MASTERFLT
256echo "Filtering consumer results..."
257. $LDIFFILTER < $SLAVEOUT > $SLAVEFLT
258
259echo "Comparing retrieved entries from producer and consumer..."
260$CMP $MASTERFLT $SLAVEFLT > $CMPOUT
261
262if test $? != 0 ; then
263	echo "test failed - producer and consumer databases differ"
264	exit 1
265fi
266
267echo ">>>>> Test succeeded"
268
269test $KILLSERVERS != no && wait
270
271exit 0
272