3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
5 ## Copyright 1998-2017 The OpenLDAP Foundation.
6 ## All rights reserved.
8 ## Redistribution and use in source and binary forms, with or without
9 ## modification, are permitted only as authorized by the OpenLDAP
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>.
16 echo "running defines.sh"
17 . $SRCDIR/scripts/defines.sh
19 if test $SYNCPROV = syncprovno; then
20 echo "Syncrepl provider overlay not available, test skipped"
23 if test $ACCESSLOG = accesslogno; then
24 echo "Accesslog overlay not available, test skipped"
27 if test $BACKEND = ldif ; then
28 echo "$BACKEND backend unsuitable, test skipped"
32 dtest=`date +%N|sed s/...$//`
34 if test $dtest = N; then
35 echo "nanosecond date values not supported, test skipped"
45 ITSDIR=$DATADIR/regressions/its$ITS
48 while [ $n -le $MMR ]; do
50 mkdir -p ${XDIR}$n $DBDIR.1 $DBDIR.2
56 echo "Starting slapd on TCP/IP port $PORT1..."
57 . $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd.conf > $CONF1
58 $SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
60 if test $WAIT != 0 ; then
68 echo "Using ldapsearch to check that slapd is running..."
69 for i in 0 1 2 3 4 5; do
70 $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
71 'objectclass=*' > /dev/null 2>&1
73 if test $RC = 0 ; then
76 echo "Waiting 5 seconds for slapd to start..."
80 if test $RC != 0 ; then
81 echo "ldapsearch failed ($RC)!"
82 test $KILLSERVERS != no && kill -HUP $KILLPIDS
86 echo "Populating database on first provider..."
87 $LDAPADD -D $MANAGERDN -H $URI1 -w $PASSWD << EOMODS >> $TESTOUT 2>&1
89 objectClass: organization
95 objectClass: organizationalUnit
99 objectClass: organizationalUnit
102 dn: cn=Roger Rabbit,ou=People,$BASEDN
103 objectClass: inetOrgPerson
107 dn: cn=Baby Herman,ou=People,$BASEDN
108 objectClass: inetOrgPerson
112 dn: cn=Jessica_Rabbit,ou=People,$BASEDN
113 objectClass: inetOrgPerson
117 dn: cn=Bugs_Bunny,ou=People,$BASEDN
118 objectClass: inetOrgPerson
122 dn: cn=Daffy_Duck,ou=People,$BASEDN
123 objectClass: inetOrgPerson
127 dn: cn=Elmer_Fudd,ou=People,$BASEDN
128 objectClass: inetOrgPerson
132 dn: cn=Cartoonia,ou=Groups,$BASEDN
133 objectClass: groupOfNames
135 member: cn=Roger Rabbit,ou=People,$BASEDN
136 member: cn=Baby Herman,ou=People,$BASEDN
141 if test $RC != 0 ; then
142 echo "ldapadd failed ($RC)!"
143 test $KILLSERVERS != no && kill -HUP $KILLPIDS
147 echo "Stopping slapd and reworking configuration for MMR..."
149 test $KILLSERVERS != no && kill -HUP $KILLPIDS
153 while [ $n -le $MMR ]; do
154 MYURI=`eval echo '$URI'$n`
155 MYLOG=`eval echo '$LOG'$n`
156 MYCONF=`eval echo '$CONF'$n`
157 echo "Starting provider slapd on TCP/IP URI $MYURI"
158 . $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd.conf.mmr > $CONF
159 sed -e "s/MMR/$n/g" $CONF > $MYCONF
161 while [ $j -le $MMR ]; do
162 MMCURI=`eval echo '$URI'$j`
163 sed -e "s|MMC${j}|${MMCURI}|" $MYCONF > $CONF
167 if [ -f $CONF ]; then
170 $SLAPD -f $MYCONF -h $MYURI -d $LVL $TIMING > $MYLOG 2>&1 &
172 if test $WAIT != 0 ; then
176 KILLPIDS="$PID $KILLPIDS"
179 echo "Using ldapsearch to check that provider slapd is running..."
180 for i in 0 1 2 3 4 5; do
181 $LDAPSEARCH -s base -b "" -H $MYURI \
182 'objectclass=*' > /dev/null 2>&1
184 if test $RC = 0 ; then
187 echo "Waiting 5 seconds for slapd to start..."
191 if test $RC != 0 ; then
192 echo "ldapsearch failed ($RC)!"
193 test $KILLSERVERS != no && kill -HUP $KILLPIDS
199 echo "Setting up accesslog on each master..."
201 while [ $n -le $MMR ]; do
202 echo "Modifying dn: cn=Elmer_Fudd,ou=People,dc=example,dc=com on master $n"
203 MYURI=`eval echo '$URI'$n`
204 $LDAPMODIFY -v -D "$MANAGERDN" -H $MYURI -w $PASSWD > \
205 $TESTOUT 2>&1 << EOMODS
207 dn: cn=Elmer_Fudd,ou=People,$BASEDN
216 echo "Sleeping 30 seconds to ensure replication is reconciled between all nodes"
219 echo "Starting random master/entry modifications..."
220 DN1="cn=Elmer_Fudd,ou=People,$BASEDN"
223 DN2="cn=Jessica_Rabbit,ou=People,$BASEDN"
226 DN3="cn=Bugs_Bunny,ou=People,$BASEDN"
229 DN4="cn=Daffy_Duck,ou=People,$BASEDN"
233 while [ $n -le 20000 ]; do
234 seed=`date +%N|sed s/...$//`
235 rvalue=`echo|awk "BEGIN {srand($seed)
236 {print int(1+rand()*4)}}"`
237 MYURI=`eval echo '$URI'$rvalue`
238 seed=`date +%N|sed s/...$//`
239 rvalue=`echo|awk "BEGIN {srand($seed)
240 {print int(1+rand()*4)}}"`
241 MYDN=`eval echo '$DN'$rvalue`
242 MYVAL=`eval echo '$VAL'$rvalue`
243 echo "Modifying $MYURI entry $MYDN with value $MYVAL iteration $n of 20000"
244 $LDAPMODIFY -v -D "$MANAGERDN" -H $MYURI -w $PASSWD > \
245 $TESTOUT 2>&1 << EOMODS
255 test $KILLSERVERS != no && kill -HUP $KILLPIDS
257 echo ">>>>> Test succeeded"
259 test $KILLSERVERS != no && wait