test017-syncreplication-refresh revision 1.1 1 1.1 lukem #! /bin/sh
2 1.1 lukem # $OpenLDAP: pkg/ldap/tests/scripts/test017-syncreplication-refresh,v 1.33.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 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 $DBDIR2
25 1.1 lukem
26 1.1 lukem #
27 1.1 lukem # Test replication:
28 1.1 lukem # - start producer
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)
33 1.1 lukem # - retrieve database over ldap and compare against expected results
34 1.1 lukem #
35 1.1 lukem
36 1.1 lukem echo "Starting producer 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 lukem echo "Using ldapsearch to check that producer 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 lukem echo "Using ldapadd to create the context prefix entry in the producer..."
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 $PORT2..."
77 1.1 lukem . $CONFFILTER $BACKEND $MONITORDB < $R1SRSLAVECONF > $CONF2
78 1.1 lukem $SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 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 $PORT2 \
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 echo "Using ldapadd to populate the producer directory..."
107 1.1 lukem $LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD < \
108 1.1 lukem $LDIFORDEREDNOCP > /dev/null 2>&1
109 1.1 lukem RC=$?
110 1.1 lukem if test $RC != 0 ; then
111 1.1 lukem echo "ldapadd failed ($RC)!"
112 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
113 1.1 lukem exit $RC
114 1.1 lukem fi
115 1.1 lukem
116 1.1 lukem echo "Waiting 15 seconds for syncrepl to receive changes..."
117 1.1 lukem sleep 15
118 1.1 lukem
119 1.1 lukem echo "Using ldapmodify to modify producer directory..."
120 1.1 lukem
121 1.1 lukem #
122 1.1 lukem # Do some modifications
123 1.1 lukem #
124 1.1 lukem
125 1.1 lukem $LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT1 -w $PASSWD > \
126 1.1 lukem $TESTOUT 2>&1 << EOMODS
127 1.1 lukem dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
128 1.1 lukem changetype: modify
129 1.1 lukem add: drink
130 1.1 lukem drink: Orange Juice
131 1.1 lukem -
132 1.1 lukem delete: sn
133 1.1 lukem sn: Jones
134 1.1 lukem -
135 1.1 lukem add: sn
136 1.1 lukem sn: Jones
137 1.1 lukem
138 1.1 lukem dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
139 1.1 lukem changetype: modify
140 1.1 lukem replace: drink
141 1.1 lukem drink: Iced Tea
142 1.1 lukem drink: Mad Dog 20/20
143 1.1 lukem
144 1.1 lukem dn: cn=ITD Staff,ou=Groups,dc=example,dc=com
145 1.1 lukem changetype: modify
146 1.1 lukem delete: uniquemember
147 1.1 lukem uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
148 1.1 lukem uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
149 1.1 lukem -
150 1.1 lukem add: uniquemember
151 1.1 lukem uniquemember: cn=Dorothy Stevens, ou=Alumni Association, ou=People, dc=example,dc=com
152 1.1 lukem uniquemember: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
153 1.1 lukem
154 1.1 lukem dn: cn=All Staff,ou=Groups,dc=example,dc=com
155 1.1 lukem changetype: modify
156 1.1 lukem delete: description
157 1.1 lukem
158 1.1 lukem dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
159 1.1 lukem changetype: add
160 1.1 lukem objectclass: OpenLDAPperson
161 1.1 lukem cn: Gern Jensen
162 1.1 lukem sn: Jensen
163 1.1 lukem uid: gjensen
164 1.1 lukem title: Chief Investigator, ITD
165 1.1 lukem postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103
166 1.1 lukem seealso: cn=All Staff, ou=Groups, dc=example,dc=com
167 1.1 lukem drink: Coffee
168 1.1 lukem homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104
169 1.1 lukem description: Very odd
170 1.1 lukem facsimiletelephonenumber: +1 313 555 7557
171 1.1 lukem telephonenumber: +1 313 555 8343
172 1.1 lukem mail: gjensen@mailgw.example.com
173 1.1 lukem homephone: +1 313 555 8844
174 1.1 lukem
175 1.1 lukem dn: ou=Retired, ou=People, dc=example,dc=com
176 1.1 lukem changetype: add
177 1.1 lukem objectclass: organizationalUnit
178 1.1 lukem ou: Retired
179 1.1 lukem
180 1.1 lukem dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
181 1.1 lukem changetype: add
182 1.1 lukem objectclass: OpenLDAPperson
183 1.1 lukem cn: Rosco P. Coltrane
184 1.1 lukem sn: Coltrane
185 1.1 lukem uid: rosco
186 1.1 lukem
187 1.1 lukem dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
188 1.1 lukem changetype: modrdn
189 1.1 lukem newrdn: cn=Rosco P. Coltrane
190 1.1 lukem deleteoldrdn: 1
191 1.1 lukem newsuperior: ou=Retired, ou=People, dc=example,dc=com
192 1.1 lukem
193 1.1 lukem dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
194 1.1 lukem changetype: delete
195 1.1 lukem
196 1.1 lukem EOMODS
197 1.1 lukem
198 1.1 lukem RC=$?
199 1.1 lukem if test $RC != 0 ; then
200 1.1 lukem echo "ldapmodify failed ($RC)!"
201 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
202 1.1 lukem exit $RC
203 1.1 lukem fi
204 1.1 lukem
205 1.1 lukem echo "Waiting 15 seconds for syncrepl to receive changes..."
206 1.1 lukem sleep 15
207 1.1 lukem
208 1.1 lukem echo "Try updating the consumer slapd..."
209 1.1 lukem $LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT2 -w $PASSWD > \
210 1.1 lukem $TESTOUT 2>&1 << EOMODS
211 1.1 lukem dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example, dc=com
212 1.1 lukem changetype: modify
213 1.1 lukem add: description
214 1.1 lukem description: This write must fail because directed to a shadow context,
215 1.1 lukem description: unless the chain overlay is configured appropriately ;)
216 1.1 lukem
217 1.1 lukem EOMODS
218 1.1 lukem
219 1.1 lukem RC=$?
220 1.1 lukem
221 1.1 lukem # expect 10 (LDAP_REFERRAL)...
222 1.1 lukem if test $RC != 10 ; then
223 1.1 lukem echo "ldapmodify should have returned referral ($RC)!"
224 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
225 1.1 lukem exit $RC
226 1.1 lukem fi
227 1.1 lukem
228 1.1 lukem OPATTRS="entryUUID creatorsName createTimestamp modifiersName modifyTimestamp"
229 1.1 lukem
230 1.1 lukem echo "Using ldapsearch to read all the entries from the producer..."
231 1.1 lukem $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
232 1.1 lukem '(objectclass=*)' '*' $OPATTRS > $MASTEROUT 2>&1
233 1.1 lukem RC=$?
234 1.1 lukem
235 1.1 lukem if test $RC != 0 ; then
236 1.1 lukem echo "ldapsearch failed at producer ($RC)!"
237 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
238 1.1 lukem exit $RC
239 1.1 lukem fi
240 1.1 lukem
241 1.1 lukem echo "Using ldapsearch to read all the entries from the consumer..."
242 1.1 lukem $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
243 1.1 lukem '(objectclass=*)' '*' $OPATTRS > $SLAVEOUT 2>&1
244 1.1 lukem RC=$?
245 1.1 lukem
246 1.1 lukem if test $RC != 0 ; then
247 1.1 lukem echo "ldapsearch failed at consumer ($RC)!"
248 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
249 1.1 lukem exit $RC
250 1.1 lukem fi
251 1.1 lukem
252 1.1 lukem test $KILLSERVERS != no && kill -HUP $KILLPIDS
253 1.1 lukem
254 1.1 lukem echo "Filtering producer results..."
255 1.1 lukem . $LDIFFILTER < $MASTEROUT > $MASTERFLT
256 1.1 lukem echo "Filtering consumer results..."
257 1.1 lukem . $LDIFFILTER < $SLAVEOUT > $SLAVEFLT
258 1.1 lukem
259 1.1 lukem echo "Comparing retrieved entries from producer and consumer..."
260 1.1 lukem $CMP $MASTERFLT $SLAVEFLT > $CMPOUT
261 1.1 lukem
262 1.1 lukem if test $? != 0 ; then
263 1.1 lukem echo "test failed - producer and consumer databases differ"
264 1.1 lukem exit 1
265 1.1 lukem fi
266 1.1 lukem
267 1.1 lukem echo ">>>>> Test succeeded"
268 1.1 lukem
269 1.1 lukem test $KILLSERVERS != no && wait
270 1.1 lukem
271 1.1 lukem exit 0
272