]> git.sur5r.net Git - openldap/blob - tests/scripts/test011-subtree-repl
ignore blanks in subtree diff
[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 -INT $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 delete: member
153
154 dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
155 changetype: add
156 objectclass: OpenLDAPperson
157 cn: Gern Jensen
158 sn: Jensen
159 uid: gjensen
160 title: Chief Investigator, ITD
161 postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103
162 seealso: cn=All Staff, ou=Groups, o=University of Michigan, c=US
163 drink: Coffee
164 homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104
165 description: Very odd
166 facsimiletelephonenumber: +1 313 555 7557
167 telephonenumber: +1 313 555 8343
168 mail: gjensen@mailgw.example.com
169 homephone: +1 313 555 8844
170
171 dn: ou=Retired, ou=People, o=University of Michigan, c=US
172 changetype: add
173 objectclass: organizationalUnit
174 ou: Retired
175
176 dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
177 changetype: add
178 objectclass: OpenLDAPperson
179 cn: Rosco P. Coltrane
180 sn: Coltrane
181
182 dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
183 changetype: modrdn
184 newrdn: cn=Rosco P. Coltrane
185 deleteoldrdn: 1
186 newsuperior: ou=Retired, ou=People, o=University of Michigan, c=US
187
188 dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
189 changetype: delete
190
191 EOMODS
192
193 echo "Waiting 15 seconds for slurpd to send changes..."
194 sleep 15
195
196 echo "Using ldapsearch to read all the entries from the master..."
197 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT \
198         'objectclass=*' > $MASTEROUT 2>&1
199 RC=$?
200
201 if test $RC != 0 ; then
202         echo "ldapsearch failed ($RC)!"
203         kill -INT $PID $SLAVEPID
204         kill -KILL $SLURPPID
205         exit $RC
206 fi
207
208 echo "Using ldapsearch to read the subtree entries from the master..."
209 $LDAPSEARCH -S "" -b "ou=Groups, $BASEDN" -h $LOCALHOST -p $PORT \
210         'objectclass=*' > $SUBMASTEROUT 2>&1
211 RC=$?
212
213 if test $RC != 0 ; then
214         echo "ldapsearch failed ($RC)!"
215         kill -INT $PID $SLAVEPID
216         kill -KILL $SLURPPID
217         exit $RC
218 fi
219
220 echo "Using ldapsearch to read all the entries from the slave..."
221 $LDAPSEARCH -S "" -b "ou=Groups, $BASEDN" -h $LOCALHOST -p $SLAVEPORT \
222         'objectclass=*' > $SLAVEOUT 2>&1
223 RC=$?
224
225 if test $RC != 0 ; then
226         echo "ldapsearch failed ($RC)!"
227         kill -INT $PID $SLAVEPID
228         kill -KILL $SLURPPID
229         exit $RC
230 fi
231
232 kill -INT $PID $SLAVEPID
233 kill -KILL $SLURPPID
234
235 SEARCHOUT=$SUBMASTEROUT
236 LDIF=$SLAVEOUT
237
238 echo "Filtering master ldapsearch results..."
239 . $LDIFFILTER < $SEARCHOUT | $STRIPATTR "description" > $SEARCHFLT
240 echo "Filtering slave ldapsearch results..."
241 . $LDIFFILTER < $LDIF > $LDIFFLT
242
243 echo "Comparing retrieved entries from master and slave..."
244 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
245
246 if test $? != 0 ; then
247         echo "test failed - master and slave databases differ"
248         exit 1
249 fi
250
251 SEARCHOUT=$MASTEROUT
252
253 echo "Filtering remaining data"
254 . $LDIFFILTER < $SEARCHOUT | $STRIPATTR "description" > $SEARCHFLT
255
256 echo "Stripping slave entries from master output..."
257 $DIFF $SEARCHFLT $LDIFFLT | $UNDIFFFILTER > $SUBFLT
258
259 echo "Stripping subtree entries from master output..."
260 . $SUBFILTER 'ou=Groups,[ ]?o=University of Michigan,[ ]?c=US' < $SEARCHOUT \
261         | $STRIPATTR "description" > $SUBFLT2
262
263 echo "Comparing master minus subtree and master minus slave..."
264 $BCMP $SUBFLT $SUBFLT2 > $CMPOUT
265
266 if test $? != 0 ; then
267         echo "test failed - master and slave databases differ"
268         exit 1
269 fi
270
271 echo ">>>>> Test succeeded"
272
273 exit 0