ldb: make ldb a top level library for Samba 4.0
[kai/samba.git] / lib / ldb / tests / test-generic.sh
1 #!/bin/sh
2
3 if [ -z "$LDB_SPECIALS" ]; then
4     LDB_SPECIALS=1
5     export LDB_SPECIALS
6 fi
7
8 echo "LDB_URL: $LDB_URL"
9
10 echo "Adding base elements"
11 $VALGRIND ldbadd$EXEEXT $LDBDIR/tests/test.ldif || exit 1
12
13 echo "Adding again - should fail"
14 $VALGRIND ldbadd$EXEEXT $LDBDIR/tests/test.ldif 2> /dev/null && {
15     echo "Should have failed to add again - gave $?"
16     exit 1
17 }
18
19 echo "Modifying elements"
20 $VALGRIND ldbmodify$EXEEXT $LDBDIR/tests/test-modify.ldif || exit 1
21
22 echo "Showing modified record"
23 $VALGRIND ldbsearch$EXEEXT '(uid=uham)'  || exit 1
24
25 echo "Rename entry with ldbmodify - modrdn"
26 $VALGRIND ldbmodify$EXEEXT $LDBDIR/tests/test-modify-modrdn.ldif || exit 1
27
28 echo "Rename entry with ldbrename"
29 OLDDN="cn=Ursula Hampster,ou=Alumni Association,ou=People,o=University of Michigan,c=TEST"
30 NEWDN="cn=Hampster Ursula,ou=Alumni Association,ou=People,o=University of Michigan,c=TEST"
31 $VALGRIND ldbrename$EXEEXT "$OLDDN" "$NEWDN"  || exit 1
32
33 echo "Showing renamed record"
34 $VALGRIND ldbsearch$EXEEXT '(uid=uham)' || exit 1
35
36 echo "Starting ldbtest"
37 $VALGRIND ldbtest$EXEEXT --num-records 100 --num-searches 10  || exit 1
38
39 if [ $LDB_SPECIALS = 1 ]; then
40  echo "Adding index"
41  $VALGRIND ldbadd$EXEEXT $LDBDIR/tests/test-index.ldif  || exit 1
42 fi
43
44 echo "Adding bad attributes - should fail"
45 $VALGRIND ldbadd$EXEEXT $LDBDIR/tests/test-wrong_attributes.ldif && {
46     echo "Should fhave failed - gave $?"
47     exit 1
48 }
49
50 echo "Testing indexed search"
51 $VALGRIND ldbsearch$EXEEXT '(uid=uham)'  || exit 1
52 $VALGRIND ldbsearch$EXEEXT '(&(objectclass=person)(objectclass=person)(objectclass=top))' || exit 1
53 $VALGRIND ldbsearch$EXEEXT '(&(uid=uham)(uid=uham))'  || exit 1
54 $VALGRIND ldbsearch$EXEEXT '(|(uid=uham)(uid=uham))'  || exit 1
55 $VALGRIND ldbsearch$EXEEXT '(|(uid=uham)(uid=uham)(objectclass=OpenLDAPperson))'  || exit 1
56 $VALGRIND ldbsearch$EXEEXT '(&(uid=uham)(uid=uham)(!(objectclass=xxx)))'  || exit 1
57 $VALGRIND ldbsearch$EXEEXT '(&(objectclass=person)(uid=uham)(!(uid=uhamxx)))' uid \* \+ dn  || exit 1
58 $VALGRIND ldbsearch$EXEEXT '(&(uid=uham)(uid=uha*)(title=*))' uid || exit 1
59
60 # note that the "((" is treated as an attribute not an expression
61 # this matches the openldap ldapsearch behaviour of looking for a '='
62 # to see if the first argument is an expression or not
63 $VALGRIND ldbsearch$EXEEXT '((' uid || exit 1
64 $VALGRIND ldbsearch$EXEEXT '(objectclass=)' uid || exit 1
65 $VALGRIND ldbsearch$EXEEXT -b 'cn=Hampster Ursula,ou=Alumni Association,ou=People,o=University of Michigan,c=TEST' -s base "" sn || exit 1
66
67 echo "Test wildcard match"
68 $VALGRIND ldbadd$EXEEXT $LDBDIR/tests/test-wildcard.ldif  || exit 1
69 $VALGRIND ldbsearch$EXEEXT '(cn=test*multi)'  || exit 1
70 $VALGRIND ldbsearch$EXEEXT '(cn=*test*multi*)'  || exit 1
71 $VALGRIND ldbsearch$EXEEXT '(cn=*test_multi)'  || exit 1
72 $VALGRIND ldbsearch$EXEEXT '(cn=test_multi*)'  || exit 1
73 $VALGRIND ldbsearch$EXEEXT '(cn=test*multi*test*multi)'  || exit 1
74 $VALGRIND ldbsearch$EXEEXT '(cn=test*multi*test*multi*multi_*)' || exit 1
75
76 echo "Starting ldbtest indexed"
77 $VALGRIND ldbtest$EXEEXT --num-records 100 --num-searches 500  || exit 1
78
79 echo "Testing one level search"
80 count=`$VALGRIND ldbsearch$EXEEXT -b 'ou=Groups,o=University of Michigan,c=TEST' -s one 'objectclass=*' none |grep '^dn' | wc -l`
81 if [ $count != 3 ]; then
82     echo returned $count records - expected 3
83     exit 1
84 fi
85
86 echo "Testing binary file attribute value"
87 $VALGRIND ldbmodify$EXEEXT $LDBDIR/tests/photo.ldif || exit 1
88 count=`$VALGRIND ldbsearch$EXEEXT '(cn=Hampster Ursula)' jpegPhoto | grep '^dn' | wc -l`
89 if [ $count != 1 ]; then
90     echo returned $count records - expected 1
91     exit 1
92 fi
93
94 echo "*TODO* Testing UTF8 upper lower case searches !!"
95
96 echo "Testing compare"
97 count=`$VALGRIND ldbsearch$EXEEXT '(cn>=t)' cn | grep '^dn' | wc -l`
98 if [ $count != 2 ]; then
99     echo returned $count records - expected 2
100     echo "this fails on openLdap ..."
101 fi
102
103 count=`$VALGRIND ldbsearch$EXEEXT '(cn<=t)' cn | grep '^dn' | wc -l`
104 if [ $count != 13 ]; then
105     echo returned $count records - expected 13
106     echo "this fails on openLdap ..."
107 fi
108
109 checkcount() {
110     count=$1
111     scope=$2
112     basedn=$3
113     expression="$4"
114     n=`$VALGRIND ldbsearch$EXEEXT -s "$scope" -b "$basedn" "$expression" | grep '^dn' | wc -l`
115     if [ $n != $count ]; then
116         echo "Got $n but expected $count for $expression"
117         bin/ldbsearch "$expression"
118         exit 1
119     fi
120     echo "OK: $count $expression"
121 }
122
123 checkcount 0 'base' '' '(uid=uham)'
124 checkcount 0 'one' '' '(uid=uham)'
125
126 checkcount 1 'base' 'cn=Hampster Ursula,ou=Alumni Association,ou=People,o=University of Michigan,c=TEST' '(uid=uham)'
127 checkcount 1 'one' 'ou=Alumni Association,ou=People,o=University of Michigan,c=TEST' '(uid=uham)'
128 checkcount 1 'one' 'ou=People,o=University of Michigan,c=TEST' '(ou=ldb  test)'