]> git.sur5r.net Git - openldap/blob - tests/scripts/test057-memberof-refint
ITS#5810: support back-ldif
[openldap] / tests / scripts / test057-memberof-refint
1 #! /bin/sh
2 # $OpenLDAP$
3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 ##
5 ## Copyright 1998-2009 The OpenLDAP Foundation.
6 ## Portions Copyright 2008 Red Hat, Inc. 
7 ## All rights reserved.
8 ##
9 ## Redistribution and use in source and binary forms, with or without
10 ## modification, are permitted only as authorized by the OpenLDAP
11 ## Public License.
12 ##
13 ## A copy of this license is available in the file LICENSE in the
14 ## top-level directory of the distribution or, alternatively, at
15 ## <http://www.OpenLDAP.org/license.html>.
16
17 echo "running defines.sh"
18 . $SRCDIR/scripts/defines.sh
19
20 if test $MEMBEROF = memberofno; then 
21         echo "Memberof overlay not available, test skipped"
22         exit 0
23 fi 
24
25 if test $REFINT = refintno; then 
26         echo "Referential Integrity overlay not available, test skipped"
27         exit 0
28 fi 
29
30 if test "$BACKEND" = "bdb" ; then
31         echo "Test does not support $BACKEND"
32         exit 0
33 fi
34
35 mkdir -p $TESTDIR $DBDIR1 $TESTDIR/confdir
36
37 $SLAPPASSWD -g -n >$CONFIGPWF
38 echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
39
40 echo "Starting slapd on TCP/IP port $PORT1..."
41 . $CONFFILTER $BACKEND $MONITORDB < $NAKEDCONF > $CONF1
42 $SLAPD -f $CONF1 -F $TESTDIR/confdir -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
43 PID=$!
44 if test $WAIT != 0 ; then
45     echo PID $PID
46     read foo
47 fi
48 KILLPIDS="$PID"
49
50 sleep 1
51 for i in 0 1 2 3 4 5; do
52         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
53                 'objectclass=*' > /dev/null 2>&1
54         RC=$?
55         if test $RC = 0 ; then
56                 break
57         fi
58         echo "Waiting 5 seconds for slapd to start..."
59         sleep 5
60 done
61 if test $RC != 0 ; then
62         echo "ldapsearch failed ($RC)!"
63         test $KILLSERVERS != no && kill -HUP $KILLPIDS
64         exit $RC
65 fi
66
67 cat /dev/null > $TESTOUT
68
69 if [ "$MEMBEROF" = memberofmod ]; then
70         echo "Inserting memberof overlay on producer..."
71         $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1
72 dn: cn=module,cn=config
73 objectClass: olcModuleList
74 cn: module
75 olcModulePath: ../servers/slapd/overlays
76 olcModuleLoad: memberof.la
77 olcModuleLoad: refint.la
78 EOF
79         RC=$?
80         if test $RC != 0 ; then
81                 echo "ldapadd failed for moduleLoad ($RC)!"
82                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
83                 exit $RC
84         fi
85 fi
86
87 bdb_conf=""
88 case $BACKEND in bdb | hdb)
89 bdb_conf="olcDbCacheSize: 1000
90 olcDbIndex: objectClass eq
91 olcDbIndex: cn pres,eq,sub
92 olcDbIndex: uid pres,eq,sub
93 olcDbIndex: sn pres,eq,sub
94 olcDbMode: 384"
95 esac
96
97 echo "Running ldapadd to build slapd config database..."
98 $LDAPADD -h $LOCALHOST -p $PORT1 -D 'cn=config' -w `cat $CONFIGPWF` \
99         >> $TESTOUT 2>&1 <<EOF
100 dn: olcDatabase={1}$BACKEND,cn=config
101 objectClass: olcDatabaseConfig
102 objectClass: olc${BACKEND}Config
103 olcDatabase: {1}$BACKEND
104 olcSuffix: $BASEDN
105 olcRootDN: cn=Manager,$BASEDN
106 olcRootPW:: c2VjcmV0
107 olcMonitoring: TRUE
108 olcDbDirectory: $TESTDIR/db.1.a/
109 $bdb_conf
110
111 # {0}memberof, {1}$BACKEND, config
112 dn: olcOverlay={0}memberof,olcDatabase={1}$BACKEND,cn=config
113 objectClass: olcOverlayConfig
114 objectClass: olcMemberOf
115 olcOverlay: {0}memberof
116 olcMemberOfRefInt: TRUE
117 olcMemberOfGroupOC: groupOfNames
118 olcMemberOfMemberAD: member
119 olcMemberOfMemberOfAD: memberOf
120
121 # {1}refint, {1}$BACKEND, config
122 dn: olcOverlay={1}refint,olcDatabase={1}$BACKEND,cn=config
123 objectClass: olcOverlayConfig
124 objectClass: olcRefintConfig
125 olcOverlay: {1}refint
126 olcRefintAttribute: member
127 olcRefintAttribute: memberOf
128 EOF
129 RC=$?
130 if test $RC != 0 ; then
131         echo "ldapadd failed ($RC)!"
132         test $KILLSERVERS != no && kill -HUP $KILLPIDS
133         exit $RC
134 fi
135
136 echo "Running ldapadd to build slapd database..."
137 $LDAPADD -h $LOCALHOST -p $PORT1 \
138         -D "cn=Manager,$BASEDN" -w secret \
139         >> $TESTOUT 2>&1 << EOF
140 dn: $BASEDN
141 objectClass: organization
142 objectClass: dcObject
143 o: Example, Inc.
144 dc: example
145
146 dn: ou=People,$BASEDN
147 objectClass: organizationalUnit
148 ou: People
149
150 dn: ou=Groups,$BASEDN
151 objectClass: organizationalUnit
152 ou: Groups
153
154 dn: cn=Roger Rabbit,ou=People,$BASEDN
155 objectClass: inetOrgPerson
156 cn: Roger Rabbit
157 sn: Rabbit
158
159 dn: cn=Baby Herman,ou=People,$BASEDN
160 objectClass: inetOrgPerson
161 cn: Baby Herman
162 sn: Herman
163
164 dn: cn=Cartoonia,ou=Groups,$BASEDN
165 objectClass: groupOfNames
166 cn: Cartoonia
167 member: cn=Roger Rabbit,ou=People,$BASEDN
168 member: cn=Baby Herman,ou=People,$BASEDN
169 EOF
170 RC=$?
171 if test $RC != 0 ; then
172         echo "ldapadd failed ($RC)!"
173         test $KILLSERVERS != no && kill -HUP $KILLPIDS
174         exit $RC
175 fi
176
177 echo "Search the entire database..."
178 echo "# Search the entire database..." >> $SEARCHOUT
179 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
180         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
181 RC=$?
182 if test $RC != 0 ; then
183         echo "ldapsearch failed ($RC)!"
184         test $KILLSERVERS != no && kill -HUP $KILLPIDS
185         exit $RC
186 fi
187
188 echo "Running ldapmodify to rename subtree..."
189 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
190         -D "cn=Manager,$BASEDN" -w secret \
191         >> $TESTOUT 2>&1 << EOF
192 dn: ou=People,$BASEDN
193 changetype: modrdn
194 newrdn: ou=Toons
195 deleteoldrdn:1
196 newsuperior: $BASEDN
197 EOF
198
199 # refint runs in a background thread, so it most likely won't complete
200 # before the modify returns. Give it some time to execute.
201 sleep 1
202
203 echo "Re-search the entire database..."
204 echo "# Re-search the entire database..." >> $SEARCHOUT
205 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
206         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
207 RC=$?
208 if test $RC != 0 ; then
209         echo "ldapsearch failed ($RC)!"
210         test $KILLSERVERS != no && kill -HUP $KILLPIDS
211         exit $RC
212 fi
213
214 echo "Running ldapmodify to rename subtree..."
215 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
216         -D "cn=Manager,$BASEDN" -w secret \
217         >> $TESTOUT 2>&1 << EOF
218 dn: ou=Groups,$BASEDN
219 changetype: modrdn
220 newrdn: ou=Studios
221 deleteoldrdn:1
222 newsuperior: $BASEDN
223 EOF
224
225 sleep 1
226
227 echo "Re-search the entire database..."
228 echo "# Re-search the entire database..." >> $SEARCHOUT
229 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
230         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
231 RC=$?
232 if test $RC != 0 ; then
233         echo "ldapsearch failed ($RC)!"
234         test $KILLSERVERS != no && kill -HUP $KILLPIDS
235         exit $RC
236 fi
237
238 echo "Running ldapdelete to remove a member..."
239 $LDAPMODIFY -h $LOCALHOST -p $PORT1 \
240         -D "cn=Manager,$BASEDN" -w secret \
241         >> $TESTOUT 2>&1 << EOF
242 dn: cn=Baby Herman,ou=Toons,$BASEDN
243 changetype: delete
244 EOF
245
246 sleep 1
247
248 echo "Re-search the entire database..."
249 echo "# Re-search the entire database..." >> $SEARCHOUT
250 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
251         '(objectClass=*)' '*' memberOf >> $SEARCHOUT 2>&1
252 RC=$?
253 if test $RC != 0 ; then
254         echo "ldapsearch failed ($RC)!"
255         test $KILLSERVERS != no && kill -HUP $KILLPIDS
256         exit $RC
257 fi
258
259 test $KILLSERVERS != no && kill -HUP $KILLPIDS
260
261 LDIF=$MEMBEROFREFINTOUT
262
263 echo "Filtering ldapsearch results..."
264 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
265 echo "Filtering original ldif used to create database..."
266 $LDIFFILTER < $LDIF > $LDIFFLT
267 echo "Comparing filter output..."
268 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
269
270 if test $? != 0 ; then
271         echo "Comparison failed"
272         exit 1
273 fi
274
275 echo ">>>>> Test succeeded"
276
277 test $KILLSERVERS != no && wait
278
279 exit 0