]> git.sur5r.net Git - openldap/blob - tests/scripts/sql-test000-read
ITS#5810
[openldap] / tests / scripts / sql-test000-read
1 #! /bin/sh
2 # $OpenLDAP$
3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 ##
5 ## Copyright 1998-2010 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 mkdir -p $TESTDIR
30
31 echo "Starting slapd on TCP/IP port $PORT1..."
32 . $CONFFILTER $BACKEND $MONITORDB < $SQLCONF > $CONF1
33 $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
34 PID=$!
35 if test $WAIT != 0 ; then
36     echo PID $PID
37     read foo
38 fi
39 KILLPIDS="$PID"
40
41 echo "Testing SQL backend read operations..."
42 for i in 0 1 2 3 4 5; do
43         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
44                 'objectclass=*' > /dev/null 2>&1
45         RC=$?
46         if test $RC = 0 ; then
47                 break
48         fi
49         echo "Waiting 5 seconds for slapd to start..."
50         sleep 5
51 done
52
53 if test $RC != 0 ; then
54         echo "ldapsearch failed ($RC)!"
55         test $KILLSERVERS != no && kill -HUP $KILLPIDS
56         exit $RC
57 fi
58
59 BASEDN="dc=example,dc=com"
60 BINDDN="cn=Mitya Kovalev,${BASEDN}"
61 BINDPW="mit"
62 echo -n "Testing correct bind... "
63 $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w $BINDPW
64 RC=$?
65 if test $RC != 0 ; then
66         echo "ldapwhoami failed ($RC)!"
67         test $KILLSERVERS != no && kill -HUP $KILLPIDS
68         exit $RC
69 fi
70
71 echo -n "Testing incorrect bind (should fail)... "
72 $LDAPWHOAMI -h $LOCALHOST -p $PORT1 -D "$BINDDN" -w "XXX"
73 RC=$?
74 if test $RC = 0 ; then
75         echo "ldapwhoami should have failed ($RC)!"
76         test $KILLSERVERS != no && kill -HUP $KILLPIDS
77         exit 1
78 fi
79
80 echo "Testing baseobject search..."
81 echo "# Testing baseobject search..." >> $SEARCHOUT
82 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -s base -S "" \
83         >> $SEARCHOUT 2>&1
84
85 RC=$?
86 if test $RC != 0 ; then
87         echo "ldapsearch failed ($RC)!"
88         test $KILLSERVERS != no && kill -HUP $KILLPIDS
89         exit $RC
90 fi
91
92 echo "Testing onelevel search..."
93 echo "# Testing onelevel search..." >> $SEARCHOUT
94 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -s one -S "" \
95         >> $SEARCHOUT 2>&1
96
97 RC=$?
98 if test $RC != 0 ; then
99         echo "ldapsearch failed ($RC)!"
100         test $KILLSERVERS != no && kill -HUP $KILLPIDS
101         exit $RC
102 fi
103
104 echo "Testing subtree search..."
105 echo "# Testing subtree search..." >> $SEARCHOUT
106 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
107         >> $SEARCHOUT 2>&1
108
109 RC=$?
110 if test $RC != 0 ; then
111         echo "ldapsearch failed ($RC)!"
112         test $KILLSERVERS != no && kill -HUP $KILLPIDS
113         exit $RC
114 fi
115
116 echo "Testing subtree search with manageDSAit..."
117 echo "# Testing subtree search with manageDSAit..." >> $SEARCHOUT
118 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -M -S "" '*' ref \
119         >> $SEARCHOUT 2>&1
120
121 RC=$?
122 if test $RC != 0 ; then
123         echo "ldapsearch failed ($RC)!"
124         test $KILLSERVERS != no && kill -HUP $KILLPIDS
125         exit $RC
126 fi
127
128 echo "Testing invalid filter..."
129 echo "# Testing invalid filter..." >> $SEARCHOUT
130 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(foo=)" \
131         >> $SEARCHOUT 2>&1
132
133 RC=$?
134 if test $RC != 0 ; then
135         echo "ldapsearch failed ($RC)!"
136         test $KILLSERVERS != no && kill -HUP $KILLPIDS
137         exit $RC
138 fi
139
140 echo "Testing exact search..."
141 echo "# Testing exact search..." >> $SEARCHOUT
142 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(sn=Kovalev)" \
143         >> $SEARCHOUT 2>&1
144
145 RC=$?
146 if test $RC != 0 ; then
147         echo "ldapsearch failed ($RC)!"
148         test $KILLSERVERS != no && kill -HUP $KILLPIDS
149         exit $RC
150 fi
151
152 echo "Testing substrings initial search..."
153 echo "# Testing substrings initial search..." >> $SEARCHOUT
154 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(cn=m*)" \
155         >> $SEARCHOUT 2>&1
156
157 RC=$?
158 if test $RC != 0 ; then
159         echo "ldapsearch failed ($RC)!"
160         test $KILLSERVERS != no && kill -HUP $KILLPIDS
161         exit $RC
162 fi
163
164 echo "Testing substrings any search..."
165 echo "# Testing substrings any search..." >> $SEARCHOUT
166 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(cn=*m*)" \
167         >> $SEARCHOUT 2>&1
168
169 RC=$?
170 if test $RC != 0 ; then
171         echo "ldapsearch failed ($RC)!"
172         test $KILLSERVERS != no && kill -HUP $KILLPIDS
173         exit $RC
174 fi
175
176 echo "Testing substrings final search..."
177 echo "# Testing substrings final search..." >> $SEARCHOUT
178 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(cn=*v)" \
179         >> $SEARCHOUT 2>&1
180
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 "Testing approx search..."
189 echo "# Testing approx search..." >> $SEARCHOUT
190 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" "(sn~=kovalev)" \
191         >> $SEARCHOUT 2>&1
192
193 RC=$?
194 if test $RC != 0 ; then
195         echo "ldapsearch failed ($RC)!"
196         test $KILLSERVERS != no && kill -HUP $KILLPIDS
197         exit $RC
198 fi
199
200 echo "Testing extensible filter search..."
201 echo "# Testing extensible filter search..." >> $SEARCHOUT
202 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
203          "(sn:caseExactMatch:=Kovalev)" >> $SEARCHOUT 2>&1
204
205 RC=$?
206 if test $RC != 0 ; then
207         echo "ldapsearch failed ($RC)!"
208         test $KILLSERVERS != no && kill -HUP $KILLPIDS
209         exit $RC
210 fi
211
212 echo "Testing search for telephoneNumber..."
213 echo "# Testing search for telephoneNumber..." >> $SEARCHOUT
214 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
215          "(telephoneNumber=3322334)" >> $SEARCHOUT 2>&1
216
217 RC=$?
218 if test $RC != 0 ; then
219         echo "ldapsearch failed ($RC)!"
220         test $KILLSERVERS != no && kill -HUP $KILLPIDS
221         exit $RC
222 fi
223
224 echo "Testing AND search..."
225 echo "# Testing AND search..." >> $SEARCHOUT
226 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
227          "(&(sn=kovalev)(givenName=mitya))" >> $SEARCHOUT 2>&1
228
229 RC=$?
230 if test $RC != 0 ; then
231         echo "ldapsearch failed ($RC)!"
232         test $KILLSERVERS != no && kill -HUP $KILLPIDS
233         exit $RC
234 fi
235
236 echo "Testing AND search on objectClass..."
237 echo "# Testing AND search on objectClass..." >> $SEARCHOUT
238 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
239          "(&(objectClass=organization)(objectClass=dcObject))" >> $SEARCHOUT 2>&1
240
241 RC=$?
242 if test $RC != 0 ; then
243         echo "ldapsearch failed ($RC)!"
244         test $KILLSERVERS != no && kill -HUP $KILLPIDS
245         exit $RC
246 fi
247
248 echo "Testing OR search..."
249 echo "# Testing OR search..." >> $SEARCHOUT
250 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
251          "(|(sn=kovalev)(givenName=mitya))" >> $SEARCHOUT 2>&1
252
253 RC=$?
254 if test $RC != 0 ; then
255         echo "ldapsearch failed ($RC)!"
256         test $KILLSERVERS != no && kill -HUP $KILLPIDS
257         exit $RC
258 fi
259
260 echo "Testing OR search on objectClass..."
261 echo "# Testing OR search on objectClass..." >> $SEARCHOUT
262 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
263          "(|(objectClass=document)(objectClass=organization))" \
264         >> $SEARCHOUT 2>&1
265
266 RC=$?
267 if test $RC != 0 ; then
268         echo "ldapsearch failed ($RC)!"
269         test $KILLSERVERS != no && kill -HUP $KILLPIDS
270         exit $RC
271 fi
272
273 echo "Testing NOT search..."
274 echo "# Testing NOT search..." >> $SEARCHOUT
275 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
276          '(!(sn=kovalev))' >> $SEARCHOUT 2>&1
277
278 RC=$?
279 if test $RC != 0 ; then
280         echo "ldapsearch failed ($RC)!"
281         test $KILLSERVERS != no && kill -HUP $KILLPIDS
282         exit $RC
283 fi
284
285 echo "Testing NOT search on objectClass..."
286 echo "# Testing NOT search on objectClass..." >> $SEARCHOUT
287 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
288          '(!(objectClass=inetOrgPerson))' >> $SEARCHOUT 2>&1
289
290 RC=$?
291 if test $RC != 0 ; then
292         echo "ldapsearch failed ($RC)!"
293         test $KILLSERVERS != no && kill -HUP $KILLPIDS
294         exit $RC
295 fi
296
297 echo "Testing NOT search on \"auxiliary\" objectClass..."
298 echo "# Testing NOT search on \"auxiliary\" objectClass..." >> $SEARCHOUT
299 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
300          '(!(objectClass=dcObject))' >> $SEARCHOUT 2>&1
301
302 RC=$?
303 if test $RC != 0 ; then
304         echo "ldapsearch failed ($RC)!"
305         test $KILLSERVERS != no && kill -HUP $KILLPIDS
306         exit $RC
307 fi
308
309 #### Needs work...
310 echo "Testing NOT presence search... (disabled)"
311 ###echo "# Testing NOT presence search..." >> $SEARCHOUT
312 ###$LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
313 ###      '(!(sn=*))' >> $SEARCHOUT 2>&1
314 ###
315 ###RC=$?
316 ###if test $RC != 0 ; then
317 ###     echo "ldapsearch failed ($RC)!"
318 ###     test $KILLSERVERS != no && kill -HUP $KILLPIDS
319 ###     exit $RC
320 ###fi
321
322 echo "Testing attribute inheritance in filter..."
323 echo "# Testing attribute inheritance in filter..." >> $SEARCHOUT
324 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
325          "(name=example)" >> $SEARCHOUT 2>&1
326
327 RC=$?
328 if test $RC != 0 ; then
329         echo "ldapsearch failed ($RC)!"
330         test $KILLSERVERS != no && kill -HUP $KILLPIDS
331         exit $RC
332 fi
333
334 # ITS#4604
335 echo "Testing undefined attribute in filter..."
336 echo "# Testing undefined attribute in filter..." >> $SEARCHOUT
337 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
338          "(|(o=example)(foobar=x))" >> $SEARCHOUT 2>&1
339
340 RC=$?
341 if test $RC != 0 ; then
342         echo "ldapsearch failed ($RC)!"
343         test $KILLSERVERS != no && kill -HUP $KILLPIDS
344         exit $RC
345 fi
346
347 echo "Testing objectClass inheritance in filter..."
348 echo "# Testing objectClass inheritance in filter..." >> $SEARCHOUT
349 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
350          "(objectClass=person)" >> $SEARCHOUT 2>&1
351
352 RC=$?
353 if test $RC != 0 ; then
354         echo "ldapsearch failed ($RC)!"
355         test $KILLSERVERS != no && kill -HUP $KILLPIDS
356         exit $RC
357 fi
358
359 echo "Testing \"auxiliary\" objectClass in filter..."
360 echo "# Testing \"auxiliary\" objectClass in filter..." >> $SEARCHOUT
361 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
362          "(objectClass=dcObject)" >> $SEARCHOUT 2>&1
363
364 RC=$?
365 if test $RC != 0 ; then
366         echo "ldapsearch failed ($RC)!"
367         test $KILLSERVERS != no && kill -HUP $KILLPIDS
368         exit $RC
369 fi
370
371 echo "Testing hasSubordinates in filter..."
372 echo "# Testing hasSubordinates in filter..." >> $SEARCHOUT
373 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
374          "(hasSubordinates=TRUE)" >> $SEARCHOUT 2>&1
375
376 RC=$?
377 if test $RC != 0 ; then
378         echo "ldapsearch failed ($RC)!"
379         test $KILLSERVERS != no && kill -HUP $KILLPIDS
380         exit $RC
381 fi
382
383 echo "Testing entryUUID in filter..."
384 echo "# Testing entryUUID in filter..." >> $SEARCHOUT
385 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
386          "(entryUUID=00000001-0000-0001-0000-000000000000)" >> $SEARCHOUT 2>&1
387
388 RC=$?
389 if test $RC != 0 ; then
390         echo "ldapsearch failed ($RC)!"
391         test $KILLSERVERS != no && kill -HUP $KILLPIDS
392         exit $RC
393 fi
394
395 echo "Testing attribute inheritance in requested attributes..."
396 echo "# Testing attribute inheritance in requested attributes..." >> $SEARCHOUT
397 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
398          "(sn=kovalev)" name >> $SEARCHOUT 2>&1
399
400 RC=$?
401 if test $RC != 0 ; then
402         echo "ldapsearch failed ($RC)!"
403         test $KILLSERVERS != no && kill -HUP $KILLPIDS
404         exit $RC
405 fi
406
407 echo "Testing objectClass in requested attributes..."
408 echo "# Testing objectClass in requested attributes..." >> $SEARCHOUT
409 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
410          objectClass >> $SEARCHOUT 2>&1
411
412 RC=$?
413 if test $RC != 0 ; then
414         echo "ldapsearch failed ($RC)!"
415         test $KILLSERVERS != no && kill -HUP $KILLPIDS
416         exit $RC
417 fi
418
419 echo "Testing operational attributes in request..."
420 echo "# Testing operational attributes in request..." >> $SEARCHOUT
421 $LDAPSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" -S "" \
422          '+' 2>&1 > $SEARCHFLT
423
424 RC=$?
425 if test $RC != 0 ; then
426         echo "ldapsearch failed ($RC)!"
427         test $KILLSERVERS != no && kill -HUP $KILLPIDS
428         exit $RC
429 fi
430
431 grep -v '^entryCSN:' $SEARCHFLT >> $SEARCHOUT 
432
433 SIZELIMIT=4
434 echo "Testing size limit..."
435 $LDAPRSEARCH -h $LOCALHOST -p $PORT1 -b "$BASEDN" \
436         -z $SIZELIMIT -S "" '(objectClass=*)' >$SEARCHFLT 2>&1
437 RC=$?
438 COUNT=`awk '/^# numEntries:/ {print $3}' $SEARCHFLT`
439 case $RC in
440         0)
441                 if test x"$COUNT" != x ; then
442                         if test "$COUNT" -gt "$SIZELIMIT" ; then
443                                 echo "...error: got $COUNT entries instead of the requested $SIZELIMIT"
444                                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
445                                 exit 1
446                         fi
447                         echo "...didn't bump into the requested size limit ($SIZELIMIT; got $COUNT entries)"
448                 else
449                         echo "...error: did not expect ldapsearch success ($RC)!"
450                         test $KILLSERVERS != no && kill -HUP $KILLPIDS
451                         exit 1
452                 fi
453         ;;
454         4)
455                 if test x"$COUNT" != x ; then
456                         if test "$COUNT" = "$SIZELIMIT" ; then
457                                 echo "...bumped into requested size limit ($SIZELIMIT)"
458                         else
459                                 echo "...error: got $COUNT entries with a requested sizelimit of $SIZELIMIT"
460                                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
461                                 exit $RC
462                         fi
463                 else
464                         echo "...error: bumped into server-side size limit, but got no entries!"
465                         test $KILLSERVERS != no && kill -HUP $KILLPIDS
466                         exit $RC
467                 fi
468         ;;
469         *)
470                 echo "ldapsearch failed ($RC)!"
471                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
472                 exit $RC
473         ;;
474 esac
475
476 echo -n "Testing compare (should be TRUE)... "
477 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 "$BINDDN" \
478          "sn:kovalev" >> $TESTOUT 2>&1
479
480 RC=$?
481 case $RC in
482 6)
483         echo "TRUE"
484         ;;
485 5)      echo "FALSE!"
486         test $KILLSERVERS != no && kill -HUP $KILLPIDS
487         exit $RC
488         ;;
489 *)      echo "failed ($RC)!"
490         test $KILLSERVERS != no && kill -HUP $KILLPIDS
491         exit 1
492         ;;
493 esac
494
495 echo -n "Testing compare (should be FALSE)... "
496 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 "$BINDDN" \
497          "cn:foobar" >> $TESTOUT 2>&1
498
499 RC=$?
500 case $RC in
501 6)
502         echo "TRUE!"
503         test $KILLSERVERS != no && kill -HUP $KILLPIDS
504         exit $RC
505         ;;
506 5)      echo "FALSE"
507         ;;
508 *)      echo "failed ($RC)!"
509         test $KILLSERVERS != no && kill -HUP $KILLPIDS
510         exit 1
511         ;;
512 esac
513
514 echo -n "Testing compare (should be UNDEFINED)... "
515 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 "$BINDDN" \
516          "o:example" >> $TESTOUT 2>&1
517
518 RC=$?
519 case $RC in
520 6)
521         echo "TRUE!"
522         test $KILLSERVERS != no && kill -HUP $KILLPIDS
523         exit $RC
524         ;;
525 5)      echo "FALSE!"
526         test $KILLSERVERS != no && kill -HUP $KILLPIDS
527         exit $RC
528         ;;
529 *)      echo "failed ($RC)"
530         ;;
531 esac
532
533 echo -n "Testing compare on hasSubordinates (should be TRUE)... "
534 $LDAPCOMPARE -h $LOCALHOST -p $PORT1 "$BASEDN" \
535          "hasSubordinates:TRUE" >> $TESTOUT 2>&1
536
537 RC=$?
538 case $RC in
539 6)
540         echo "TRUE"
541         ;;
542 5)      echo "FALSE!"
543         test $KILLSERVERS != no && kill -HUP $KILLPIDS
544         exit $RC
545         ;;
546 *)      echo "failed ($RC)!"
547         test $KILLSERVERS != no && kill -HUP $KILLPIDS
548         exit 1
549         ;;
550 esac
551
552 echo "Filtering ldapsearch results..."
553 $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
554 echo "Filtering original ldif..."
555 $LDIFFILTER < $SQLREAD > $LDIFFLT
556 echo "Comparing filter output..."
557 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
558
559 if test $? != 0 ; then
560         echo "comparison failed - SQL search didn't succeed"
561         test $KILLSERVERS != no && kill -HUP $KILLPIDS
562         exit 1
563 fi
564
565 test $KILLSERVERS != no && kill -HUP $KILLPIDS
566
567 echo ">>>>> Test succeeded"
568 exit 0