]> git.sur5r.net Git - openldap/blob - tests/scripts/test011-subtree-repl
ITS#2236. Add missing connections_shutdown() call.
[openldap] / tests / scripts / test011-subtree-repl
1 #! /bin/sh
2 # $OpenLDAP$
3
4 echo "Test disabled."
5 exit 0
6
7 SRCDIR="."
8 if test $# -ge 1 ; then
9         SRCDIR=$1; shift
10 fi
11 BACKEND=bdb
12 if test $# -ge 1 ; then
13         BACKEND=$1; shift
14 fi
15 MONITORDB=no
16 if test $# -ge 1 ; then
17         MONITORDB=$1; shift
18 fi
19 WAIT=0
20 if test $# -ge 1 ; then
21         WAIT=1; shift
22 fi
23
24 echo "running defines.sh"
25 . $SRCDIR/scripts/defines.sh
26
27 #
28 # Test replication:
29 # - start master
30 # - start slave
31 # - create root entry in slave
32 # - start slurpd
33 # - populate over ldap
34 # - perform some modifies and deleted
35 # - retrieve database over ldap and compare against expected results
36 #
37
38 if test ! -x $SLURPD ; then
39         echo ">>>>> $SLURPD is not executable or do not exist."
40         echo ">>>>> Test skipped."
41         exit 0
42 fi
43
44 # quick hack to check for awk
45 echo "looking for a POSIX compliant awk"
46 awk -W version >$CMPOUT 2>&1
47 if test $? != 0 ; then
48         echo "This test requires awk"
49         exit 0
50 fi
51
52 echo "Cleaning up in $DBDIR..."
53 rm -f $DBDIR/[!C]*
54 echo "Cleaning up in $REPLDIR..."
55 rm -f $REPLDIR/replica/[!C]*
56 rm -f $REPLDIR/[!C]*
57
58 echo "Starting master slapd on TCP/IP port $PORT..."
59 . $CONFFILTER $BACKEND $MONITORDB < $SUBMASTERCONF > $DBCONF
60 $SLAPD -f $DBCONF -h $MASTERURI -d $LVL $TIMING > $MASTERLOG 2>&1 &
61 PID=$!
62 if test $WAIT != 0 ; then
63     echo PID $PID
64     read foo
65 fi
66
67 echo "Starting slave slapd on TCP/IP port $SLAVEPORT..."
68 . $CONFFILTER $BACKEND $MONITORDB < $SUBSLAVECONF > $REPLCONF
69 $SLAPD -f $REPLCONF -h $SLAVEURI -d $LVL $TIMING > $SLAVELOG 2>&1 &
70 SLAVEPID=$!
71 if test $WAIT != 0 ; then
72     echo SLAVEPID $SLAVEPID
73     read foo
74 fi
75
76 echo "Using ldapsearch to check that master slapd is running..."
77 for i in 0 1 2 3 4 5; do
78         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT \
79                 'objectclass=*' > /dev/null 2>&1
80         RC=$?
81         if test $RC = 0 ; then
82                 break
83         fi
84         echo "Waiting 5 seconds for slapd to start..."
85         sleep 5
86 done
87
88 echo "Using ldapsearch to check that slave slapd is running..."
89 for i in 0 1 2 3 4 5; do
90         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT \
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
98 done
99
100 echo "Starting slurpd..."
101 $SLURPD -f $SUBMASTERCONF -d ${SLURPD_DEBUG-5} -t $REPLDIR > $SLURPLOG 2>&1 &
102 SLURPPID=$!
103
104 echo "Using ldapadd to populate the master directory..."
105 $LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT -w $PASSWD < \
106         $LDIFORDERED > /dev/null 2>&1
107 RC=$?
108 if test $RC != 0 ; then
109         echo "ldapadd failed ($RC)!"
110         kill -HUP $PID $SLAVEPID
111         kill -KILL $SLURPPID
112         exit $RC
113 fi
114
115 echo "Waiting 15 seconds for slurpd to send changes..."
116 sleep 15
117
118 echo "Using ldapmodify to modify master directory..."
119
120 #
121 # Do some modifications
122 #
123
124 $LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT -w $PASSWD > \
125         $TESTOUT 2>&1 << EOMODS
126 dn: cn=James A Jones 1, ou=Alumni Association, ou=People, o=University of Michigan, c=US
127 changetype: modify
128 add: drink
129 drink: Orange Juice
130
131 dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
132 changetype: modify
133 replace: drink
134 drink: Iced Tea
135 drink: Mad Dog 20/20
136
137 dn: cn=ITD Staff,ou=Groups,o=University of Michigan,c=US
138 delete: member
139 member: cn=James A Jones 2, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
140 member: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
141 -
142 add: member
143 member: cn=Dorothy Stevens, ou=Alumni Association, ou=People, o=University of Michigan, c=US
144 member: cn=James A Jones 1, ou=Alumni Association, ou=People, o=University of Michigan, c=US
145 -
146 replace: description
147 description: A very long description, that is very likely to cause line wrapping in a LDIF file
148 -
149
150 dn: cn=All Staff,ou=Groups,o=University of Michigan,c=US
151 changetype: modify
152 replace: member
153 member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,o=University of Michi
154 gan,c=US
155 -
156 delete: description
157
158 dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
159 changetype: add
160 objectclass: OpenLDAPperson
161 cn: Gern Jensen
162 sn: Jensen
163 uid: gjensen
164 title: Chief Investigator, ITD
165 postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103
166 seealso: cn=All Staff, ou=Groups, o=University of Michigan, c=US
167 drink: Coffee
168 homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104
169 description: Very odd
170 facsimiletelephonenumber: +1 313 555 7557
171 telephonenumber: +1 313 555 8343
172 mail: gjensen@mailgw.example.com
173 homephone: +1 313 555 8844
174
175 dn: ou=Retired, ou=People, o=University of Michigan, c=US
176 changetype: add
177 objectclass: organizationalUnit
178 ou: Retired
179
180 dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
181 changetype: add
182 objectclass: OpenLDAPperson
183 cn: Rosco P. Coltrane
184 sn: Coltrane
185
186 dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
187 changetype: modrdn
188 newrdn: cn=Rosco P. Coltrane
189 deleteoldrdn: 1
190 newsuperior: ou=Retired, ou=People, o=University of Michigan, c=US
191
192 dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
193 changetype: delete
194
195 EOMODS
196
197 echo "Waiting 15 seconds for slurpd to send changes..."
198 sleep 15
199
200 echo "Using ldapsearch to read all the entries from the master..."
201 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT \
202         'objectclass=*' > $MASTEROUT 2>&1
203 RC=$?
204
205 if test $RC != 0 ; then
206         echo "ldapsearch failed ($RC)!"
207         kill -HUP $PID $SLAVEPID
208         kill -KILL $SLURPPID
209         exit $RC
210 fi
211
212 echo "Using ldapsearch to read the subtree entries from the master..."
213 $LDAPSEARCH -S "" -b "ou=Groups, $BASEDN" -h $LOCALHOST -p $PORT \
214         'objectclass=*' > $SUBMASTEROUT 2>&1
215 RC=$?
216
217 if test $RC != 0 ; then
218         echo "ldapsearch failed ($RC)!"
219         kill -HUP $PID $SLAVEPID
220         kill -KILL $SLURPPID
221         exit $RC
222 fi
223
224 echo "Using ldapsearch to read all the entries from the slave..."
225 $LDAPSEARCH -S "" -b "ou=Groups, $BASEDN" -h $LOCALHOST -p $SLAVEPORT \
226         'objectclass=*' > $SLAVEOUT 2>&1
227 RC=$?
228
229 if test $RC != 0 ; then
230         echo "ldapsearch failed ($RC)!"
231         kill -HUP $PID $SLAVEPID
232         kill -KILL $SLURPPID
233         exit $RC
234 fi
235
236 kill -HUP $PID $SLAVEPID
237 kill -KILL $SLURPPID
238
239 SEARCHOUT=$SUBMASTEROUT
240 LDIF=$SLAVEOUT
241
242 echo "Filtering master ldapsearch results..."
243 . $LDIFFILTER < $SEARCHOUT | $STRIPATTR "description" > $SEARCHFLT
244 echo "Filtering slave ldapsearch results..."
245 . $LDIFFILTER < $LDIF > $LDIFFLT
246
247 echo "Comparing retrieved entries from master and slave..."
248 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
249
250 if test $? != 0 ; then
251         echo "test failed - master and slave databases differ"
252         exit 1
253 fi
254
255 SEARCHOUT=$MASTEROUT
256
257 echo "Filtering remaining data"
258 . $LDIFFILTER < $SEARCHOUT | $STRIPATTR "description" > $SEARCHFLT
259
260 echo "Stripping slave entries from master output..."
261 $DIFF $SEARCHFLT $LDIFFLT | $UNDIFFFILTER > $SUBFLT
262
263 echo "Stripping subtree entries from master output..."
264 . $SUBFILTER 'ou=Groups,[ ]?o=University of Michigan,[ ]?c=US' < $SEARCHOUT \
265         | $STRIPATTR "description" > $SUBFLT2
266
267 echo "Comparing master minus subtree and master minus slave..."
268 $BCMP $SUBFLT $SUBFLT2 > $CMPOUT
269
270 if test $? != 0 ; then
271         echo "test failed - master and slave databases differ"
272         exit 1
273 fi
274
275 echo ">>>>> Test succeeded"
276
277 exit 0