]> git.sur5r.net Git - openldap/blob - tests/data/regressions/its8752/its8752
Update script that does random modifications on random masters. Better
[openldap] / tests / data / regressions / its8752 / its8752
1 #! /bin/sh
2 # $OpenLDAP$
3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
4 ##
5 ## Copyright 1998-2017 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 $SYNCPROV = syncprovno; then
20         echo "Syncrepl provider overlay not available, test skipped"
21         exit 0
22 fi
23 if test $ACCESSLOG = accesslogno; then
24         echo "Accesslog overlay not available, test skipped"
25         exit 0
26 fi
27 if test $BACKEND = ldif ; then
28         echo "$BACKEND backend unsuitable, test skipped"
29         exit 0
30 fi
31
32 dtest=`date +%N|sed s/...$//`
33
34 if test $dtest = N; then
35         echo "nanosecond date values not supported, test skipped"
36         exit 0
37 fi
38
39 MMR=4
40 XDIR=$TESTDIR/srv
41
42 mkdir -p $TESTDIR
43
44 ITS=8752
45 ITSDIR=$DATADIR/regressions/its$ITS
46
47 n=1
48 while [ $n -le $MMR ]; do
49         DBDIR=${XDIR}$n/db
50         mkdir -p ${XDIR}$n $DBDIR.1 $DBDIR.2
51         n=`expr $n + 1`
52 done
53
54 KILLPIDS=
55
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 &
59 PID=$!
60 if test $WAIT != 0 ; then
61         echo PID $PID
62         read foo
63 fi
64 KILLPIDS="$PID"
65
66 sleep 1
67
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
72         RC=$?
73         if test $RC = 0 ; then
74                 break
75         fi
76         echo "Waiting 5 seconds for slapd to start..."
77         sleep 5
78 done
79
80 if test $RC != 0 ; then
81         echo "ldapsearch failed ($RC)!"
82         test $KILLSERVERS != no && kill -HUP $KILLPIDS
83         exit $RC
84 fi
85
86 echo "Populating database on first provider..."
87 $LDAPADD -D $MANAGERDN -H $URI1 -w $PASSWD << EOMODS >> $TESTOUT 2>&1
88 dn: $BASEDN
89 objectClass: organization
90 objectClass: dcObject
91 o: Example, Inc.
92 dc: example
93
94 dn: ou=People,$BASEDN
95 objectClass: organizationalUnit
96 ou: People
97
98 dn: ou=Groups,$BASEDN
99 objectClass: organizationalUnit
100 ou: Groups
101
102 dn: cn=Roger Rabbit,ou=People,$BASEDN
103 objectClass: inetOrgPerson
104 cn: Roger Rabbit
105 sn: Rabbit
106
107 dn: cn=Baby Herman,ou=People,$BASEDN
108 objectClass: inetOrgPerson
109 cn: Baby Herman
110 sn: Herman
111
112 dn: cn=Jessica_Rabbit,ou=People,$BASEDN
113 objectClass: inetOrgPerson
114 cn: Jessica_Rabbit
115 sn: Rabbit
116
117 dn: cn=Bugs_Bunny,ou=People,$BASEDN
118 objectClass: inetOrgPerson
119 cn: Bugs_Bunny
120 sn: Bunny
121
122 dn: cn=Daffy_Duck,ou=People,$BASEDN
123 objectClass: inetOrgPerson
124 cn: Daffy_Duck
125 sn: Duck
126
127 dn: cn=Elmer_Fudd,ou=People,$BASEDN
128 objectClass: inetOrgPerson
129 cn: Elmer_Fudd
130 sn: Fudd
131
132 dn: cn=Cartoonia,ou=Groups,$BASEDN
133 objectClass: groupOfNames
134 cn: Cartoonia
135 member: cn=Roger Rabbit,ou=People,$BASEDN
136 member: cn=Baby Herman,ou=People,$BASEDN
137 EOMODS
138
139 RC=$?
140
141 if test $RC != 0 ; then
142         echo "ldapadd failed ($RC)!"
143         test $KILLSERVERS != no && kill -HUP $KILLPIDS
144         exit $RC
145 fi
146
147 echo "Stopping slapd and reworking configuration for MMR..."
148
149 test $KILLSERVERS != no && kill -HUP $KILLPIDS
150
151 KILLPIDS=
152 n=1
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
160         j=1
161         while [ $j -le $MMR ]; do
162                 MMCURI=`eval echo '$URI'$j`
163                 sed -e "s|MMC${j}|${MMCURI}|" $MYCONF > $CONF
164                 mv $CONF $MYCONF
165                 j=`expr $j + 1`
166         done
167         if [ -f $CONF ]; then
168                 rm -f $CONF
169         fi
170         $SLAPD -f $MYCONF -h $MYURI  -d $LVL $TIMING > $MYLOG 2>&1 &
171         PID=$!
172         if test $WAIT != 0 ; then
173                 echo PID $PID
174                 read foo
175         fi
176         KILLPIDS="$PID $KILLPIDS"
177         sleep 1
178
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
183                 RC=$?
184                 if test $RC = 0 ; then
185                         break
186                 fi
187                 echo "Waiting 5 seconds for slapd to start..."
188                 sleep 5
189         done
190         
191         if test $RC != 0 ; then
192                 echo "ldapsearch failed ($RC)!"
193                 test $KILLSERVERS != no && kill -HUP $KILLPIDS
194                 exit $RC
195         fi
196         n=`expr $n + 1`
197 done
198
199 echo "Setting up accesslog on each master..."
200 n=1
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
206
207 dn: cn=Elmer_Fudd,ou=People,$BASEDN
208 changetype: modify
209 replace: sn
210 sn: Fudd
211 EOMODS
212         sleep 5
213         n=`expr $n + 1`
214 done
215
216 echo "Sleeping 30 seconds to ensure replication is reconciled between all nodes"
217 sleep 30
218
219 echo "Starting random master/entry modifications..."
220 DN1="cn=Elmer_Fudd,ou=People,$BASEDN"
221 VAL1="Fudd"
222
223 DN2="cn=Jessica_Rabbit,ou=People,$BASEDN"
224 VAL2="Rabbit"
225
226 DN3="cn=Bugs_Bunny,ou=People,$BASEDN"
227 VAL3="Bunny"
228
229 DN4="cn=Daffy_Duck,ou=People,$BASEDN"
230 VAL4="Duck"
231
232 n=1
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
246
247 dn: $MYDN
248 changetype: modify
249 replace: sn
250 sn: $MYVAL
251 EOMODS
252         n=`expr $n + 1`
253 done
254
255 test $KILLSERVERS != no && kill -HUP $KILLPIDS
256
257 echo ">>>>> Test succeeded"
258
259 test $KILLSERVERS != no && wait
260
261 exit 0