]> git.sur5r.net Git - openldap/blob - tests/scripts/sql-test900-write
Happy New Year!
[openldap] / tests / scripts / sql-test900-write
1 #! /bin/sh
2 # $OpenLDAP$
3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 ##
5 ## Copyright 1998-2005 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
16 echo "running defines.sh"
17 . $SRCDIR/scripts/defines.sh
18
19 if test $BACKSQL = "sqlno" ; then 
20         echo "SQL backend not available, test skipped"
21         exit 0
22 fi 
23
24 if test $RDBMS = "rdbmsno" ; then
25         echo "SQL test not requested, test skipped"
26         exit 0
27 fi
28
29 if test "${RDBMSWRITE}" != "yes"; then
30         echo "write test disabled for ${RDBMS}; set SLAPD_USE_SQLWRITE=yes to enable"
31         exit 0
32 fi
33
34 mkdir -p $TESTDIR
35
36 echo "Starting slapd on TCP/IP port $PORT1..."
37 . $CONFFILTER $BACKEND $MONITORDB < $SQLCONF > $CONF1
38 $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
39 PID=$!
40 if test $WAIT != 0 ; then
41     echo PID $PID
42     read foo
43 fi
44 KILLPIDS="$PID"
45
46 echo "Testing SQL backend write operations..."
47 for i in 0 1 2 3 4 5; do
48         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
49                 'objectclass=*' > /dev/null 2>&1
50         RC=$?
51         if test $RC = 0 ; then
52                 break
53         fi
54         echo "Waiting 5 seconds for slapd to start..."
55         sleep 5
56 done
57
58 if test $RC != 0 ; then
59         echo "ldapsearch failed ($RC)!"
60         test $KILLSERVERS != no && kill -HUP $KILLPIDS
61         exit $RC
62 fi
63
64 BASEDN="dc=example,dc=com"
65 case ${RDBMS} in
66         # list here the RDBMSes whose mapping allows writes
67 postgres|ibmdb2)
68         MANAGERDN="cn=Manager,${BASEDN}"
69         echo "Testing add..."
70         $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
71                 -h $LOCALHOST -p $PORT1 > \
72                 $TESTOUT 2>&1 << EOMODS
73 version: 1
74
75 # Adding an organization...
76 dn: o=An Org,${BASEDN}
77 changetype: add
78 objectClass: organization
79 o: An Org
80
81 # Adding an organization with an "auxiliary" objectClass..
82 dn: dc=subnet,${BASEDN}
83 changetype: add
84 objectClass: organization
85 objectClass: dcObject
86 o: SubNet
87 dc: subnet
88
89 # Adding a person...
90 dn: cn=Lev Tolstoij,${BASEDN}
91 changetype: add
92 objectClass: inetOrgPerson
93 cn: Lev Tolstoij
94 sn: Tolstoij
95 givenName: Lev
96 telephoneNumber: +39 02 XXXX YYYY
97 telephoneNumber: +39 02 XXXX ZZZZ
98 userPassword: tanja
99
100 # Adding a person with an "auxiliary" objectClass...
101 dn: cn=Some One,${BASEDN}
102 changetype: add
103 objectClass: inetOrgPerson
104 objectClass: simpleSecurityObject
105 cn: Some One
106 sn: One
107 givenName: Some
108 telephoneNumber: +1 800 900 1234
109 telephoneNumber: +1 800 900 1235
110 userPassword: someone
111
112 # Adding a person in another subtree...
113 dn: cn=SubNet User,dc=subnet,${BASEDN}
114 changetype: add
115 objectClass: inetOrgPerson
116 cn: SubNet User
117 sn: User
118 givenName: SubNet
119
120 # Adding a document...
121 dn: documentTitle=War and Peace,${BASEDN}
122 changetype: add
123 objectClass: document
124 description: Historical novel
125 documentTitle: War and Peace
126 documentAuthor: cn=Lev Tolstoij,dc=example,dc=com
127 documentIdentifier: document 3
128
129 EOMODS
130
131         RC=$?
132         if test $RC != 0 ; then
133                 echo "ldapmodify failed ($RC)!"
134                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
135                 exit $RC
136         fi
137
138         echo "Testing modify..."
139         $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
140                 -h $LOCALHOST -p $PORT1 > \
141                 $TESTOUT 2>&1 << EOMODS
142 version: 1
143
144 # Deleting all telephone numbers...
145 dn: cn=Some One,${BASEDN}
146 changetype: modify
147 delete: telephoneNumber
148 -
149
150 # Adding a telephone number...
151 dn: cn=Mitya Kovalev,${BASEDN}
152 changetype: modify
153 add: telephoneNumber
154 telephoneNumber: +1 800 123 4567
155 -
156
157 # Deleting a specific telephone number and adding a new one...
158 dn: cn=Lev Tolstoij,${BASEDN}
159 changetype: modify
160 delete: telephoneNumber
161 telephoneNumber: +39 02 XXXX YYYY
162 -
163 add: telephoneNumber
164 telephoneNumber: +39 333 ZZZ 1234
165 -
166
167 # Adding an author to a document...
168 dn: documentTitle=book1,${BASEDN}
169 changetype: modify
170 add: documentAuthor
171 documentAuthor: cn=Lev Tolstoij,${BASEDN}
172 -
173
174 # Adding an author to another document...
175 dn: documentTitle=book2,${BASEDN}
176 changetype: modify
177 add: documentAuthor
178 documentAuthor: cn=Lev Tolstoij,${BASEDN}
179 -
180
181 # Adding an "auxiliary" objectClass...
182 dn: cn=Mitya Kovalev,${BASEDN}
183 changetype: modify
184 add: objectClass
185 objectClass: simpleSecurityObject
186 -
187
188 # Deleting an "auxiliary" objectClass...
189 dn: cn=Some One,${BASEDN}
190 changetype: modify
191 delete: objectClass
192 objectClass: simpleSecurityObject
193 -
194
195 # Deleting userPasswords
196 dn: cn=Lev Tolstoij,${BASEDN}
197 changetype: modify
198 delete: userPassword
199 -
200
201 EOMODS
202
203         RC=$?
204         if test $RC != 0 ; then
205                 echo "ldapmodify failed ($RC)!"
206                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
207                 exit $RC
208         fi
209
210         echo "Testing delete..."
211         $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
212                 -h $LOCALHOST -p $PORT1 > \
213                 $TESTOUT 2>&1 << EOMODS
214 version: 1
215
216 # Deleting a person...
217 dn: cn=Torvlobnor Puzdoy,${BASEDN}
218 changetype: delete
219
220 # Deleting a document...
221 dn: documentTitle=book1,dc=example,dc=com
222 changetype: delete
223
224 # Deleting a person with an "auxiliary" objectClass...
225 dn: cn=Akakiy Zinberstein,dc=example,dc=com
226 changetype: delete
227
228 EOMODS
229
230         RC=$?
231         if test $RC != 0 ; then
232                 echo "ldapmodify failed ($RC)!"
233                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
234                 exit $RC
235         fi
236
237         echo "Testing rename..."
238         $LDAPMODIFY -v -c -D "$MANAGERDN" -w $PASSWD \
239                 -h $LOCALHOST -p $PORT1 > \
240                 $TESTOUT 2>&1 << EOMODS
241 version: 1
242
243 # Renaming an organization
244 dn: o=An Org,${BASEDN}
245 changetype: modrdn
246 newrdn: o=Renamed Org
247 deleteoldrdn: 1
248
249 # Renaming a person
250 dn: cn=Lev Tolstoij,${BASEDN}
251 changetype: modrdn
252 newrdn: cn=Lev Tolstoij
253 deleteoldrdn: 0
254 newsuperior: dc=subnet,${BASEDN}
255
256 # Renaming a book
257 dn: documentTitle=book2,${BASEDN}
258 changetype: modrdn
259 newrdn: documentTitle=Renamed Book
260 deleteoldrdn: 1
261
262 EOMODS
263
264         RC=$?
265         if test $RC != 0 ; then
266                 echo "ldapmodify failed ($RC)!"
267                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
268                 exit $RC
269         fi
270
271         BINDDN="cn=Mitya Kovalev,${BASEDN}"
272         BINDPW="mit"
273         NEWPW="newsecret"
274         echo "Testing passwd change..."
275         $LDAPPASSWD -h $LOCALHOST -p $PORT1 \
276                 -D "${BINDDN}" -w ${BINDPW} -s ${NEWPW} \
277                 "$BINDDN" >> $TESTOUT 2>&1
278
279         RC=$?
280         if test $RC != 0 ; then
281                 echo "ldappasswd failed ($RC)!"
282                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
283                 exit $RC
284         fi
285
286         echo -n "Testing bind with new secret... "
287         $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $NEWPW
288         RC=$?
289         if test $RC != 0 ; then
290                 echo "ldapwhoami failed ($RC)!"
291                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
292                 exit $RC
293         fi
294
295         BINDDN="cn=Some One,${BASEDN}"
296         BINDPW="someone"
297         echo -n "Testing bind with newly added user... "
298         $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW
299         RC=$?
300         if test $RC != 0 ; then
301                 echo "ldapwhoami failed ($RC)!"
302                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
303                 exit $RC
304         fi
305
306         echo "Using ldapsearch to retrieve all the entries..."
307         $LDAPSEARCH -S "" -h $LOCALHOST -p $PORT1 -b "$BASEDN" \
308                  "objectClass=*" > $SEARCHOUT 2>&1
309
310         RC=$?
311         if test $RC != 0 ; then
312                 echo "ldapsearch failed ($RC)!"
313                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
314                 exit $RC
315         fi
316
317         echo "Filtering ldapsearch results..."
318         . $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
319         echo "Filtering modified ldif..."
320         . $LDIFFILTER < $SQLWRITE > $LDIFFLT
321         echo "Comparing filter output..."
322         $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
323
324         if test $? != 0 ; then
325                 echo "comparison failed - SQL mods search didn't succeed"
326                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
327                 exit 1
328         fi
329         ;;
330
331 *)
332         echo "apparently ${RDBMS} does not support writes; skipping..."
333         ;;
334 esac
335
336 test $KILLSERVERS != no && kill -HUP $KILLPIDS
337
338 echo ">>>>> Test succeeded"
339 exit 0
340