]> git.sur5r.net Git - openldap/blob - tests/scripts/test007-replication
762c34bf28ecff2c3d3fc7df0ea50bdd36e70ac0
[openldap] / tests / scripts / test007-replication
1 #! /bin/sh
2 # $OpenLDAP$
3
4 SRCDIR="."
5 if test $# -ge 1 ; then
6         SRCDIR=$1; shift
7 fi
8 BACKEND=bdb
9 if test $# -ge 1 ; then
10         BACKEND=$1; shift
11 fi
12 MONITORDB=no
13 if test $# -ge 1 ; then
14         MONITORDB=$1; shift
15 fi
16 WAIT=0
17 if test $# -ge 1 ; then
18         WAIT=1; shift
19 fi
20
21 echo "running defines.sh"
22 . $SRCDIR/scripts/defines.sh
23
24 #
25 # Test replication:
26 # - start master
27 # - start slave
28 # - start slurpd
29 # - populate over ldap
30 # - perform some modifies and deleted
31 # - retrieve database over ldap and compare against expected results
32 #
33
34 if test ! -x $SLURPD ; then
35         echo ">>>>> $SLURPD is not executable or do not exist."
36         echo ">>>>> Test skipped."
37         exit 0
38 fi
39
40 echo "Cleaning up in $DBDIR..."
41 rm -f $DBDIR/[!C]*
42 echo "Cleaning up in $REPLDIR..."
43 rm -rf $REPLDIR/[!C]*
44
45 echo "Starting master slapd on TCP/IP port $PORT..."
46 . $CONFFILTER $BACKEND $MONITORDB < $MASTERCONF > $DBCONF
47 $SLAPD -f $DBCONF -h $MASTERURI -d $LVL $TIMING > $MASTERLOG 2>&1 &
48 PID=$!
49 if test $WAIT != 0 ; then
50     echo PID $PID
51     read foo
52 fi
53
54 echo "Starting slave slapd on TCP/IP port $SLAVEPORT..."
55 . $CONFFILTER $BACKEND $MONITORDB < $SLAVECONF > $REPLCONF
56 $SLAPD -f $REPLCONF -h $SLAVEURI -d $LVL $TIMING > $SLAVELOG 2>&1 &
57 SLAVEPID=$!
58 if test $WAIT != 0 ; then
59     echo SLAVEPID $SLAVEPID
60     read foo
61 fi
62
63 echo "Using ldapsearch to check that master slapd is running..."
64 for i in 0 1 2 3 4 5; do
65         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT \
66                 'objectclass=*' > /dev/null 2>&1
67         RC=$?
68         if test $RC = 0 ; then
69                 break
70         fi
71         echo "Waiting 5 seconds for slapd to start..."
72         sleep 5
73 done
74
75 echo "Using ldapsearch to check that slave slapd is running..."
76 for i in 0 1 2 3 4 5; do
77         $LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT \
78                 'objectclass=*' > /dev/null 2>&1
79         RC=$?
80         if test $RC = 0 ; then
81                 break
82         fi
83         echo "Waiting 5 seconds for slapd to start..."
84         sleep 5
85 done
86
87 echo "Starting slurpd..."
88 $SLURPD -f $MASTERCONF -d ${SLURPD_DEBUG-5} -t $REPLDIR > $SLURPLOG 2>&1 &
89 SLURPPID=$!
90
91 echo "Using ldapadd to populate the master directory..."
92 $LDAPADD -D "$MANAGERDN" -h $LOCALHOST -p $PORT -w $PASSWD < \
93         $LDIFORDERED > /dev/null 2>&1
94 RC=$?
95 if test $RC != 0 ; then
96         echo "ldapadd failed ($RC)!"
97         kill -HUP $PID $SLAVEPID
98         kill -HUP $SLURPPID
99         exit $RC
100 fi
101
102 echo "Waiting 15 seconds for slurpd to send changes..."
103 sleep 15
104
105 echo "Using ldapmodify to modify master directory..."
106
107 #
108 # Do some modifications
109 #
110
111 $LDAPMODIFY -v -D "$MANAGERDN" -h $LOCALHOST -p $PORT -w $PASSWD > \
112         $TESTOUT 2>&1 << EOMODS
113 dn: cn=James A Jones 1, ou=Alumni Association, ou=People, o=University of Michigan, c=US
114 changetype: modify
115 add: drink
116 drink: Orange Juice
117 -
118 delete: sn
119 sn: Jones
120 -
121 add: sn
122 sn: Jones
123
124 dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
125 changetype: modify
126 replace: drink
127 drink: Iced Tea
128 drink: Mad Dog 20/20
129
130 dn: cn=ITD Staff,ou=Groups,o=University of Michigan,c=US
131 changetype: modify
132 delete: member
133 member: cn=James A Jones 2, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
134 member: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
135 -
136 add: member
137 member: cn=Dorothy Stevens, ou=Alumni Association, ou=People, o=University of Michigan, c=US
138 member: cn=James A Jones 1, ou=Alumni Association, ou=People, o=University of Michigan, c=US
139
140 dn: cn=All Staff,ou=Groups,o=University of Michigan,c=US
141 changetype: modify
142 delete: description
143
144 dn: cn=Gern Jensen, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
145 changetype: add
146 objectclass: OpenLDAPperson
147 cn: Gern Jensen
148 sn: Jensen
149 uid: gjensen
150 title: Chief Investigator, ITD
151 postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103
152 seealso: cn=All Staff, ou=Groups, o=University of Michigan, c=US
153 drink: Coffee
154 homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104
155 description: Very odd
156 facsimiletelephonenumber: +1 313 555 7557
157 telephonenumber: +1 313 555 8343
158 mail: gjensen@mailgw.example.com
159 homephone: +1 313 555 8844
160
161 dn: ou=Retired, ou=People, o=University of Michigan, c=US
162 changetype: add
163 objectclass: organizationalUnit
164 ou: Retired
165
166 dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
167 changetype: add
168 objectclass: OpenLDAPperson
169 cn: Rosco P. Coltrane
170 sn: Coltrane
171 uid: rosco
172
173 dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
174 changetype: modrdn
175 newrdn: cn=Rosco P. Coltrane
176 deleteoldrdn: 1
177 newsuperior: ou=Retired, ou=People, o=University of Michigan, c=US
178
179 dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, o=University of Michigan, c=US
180 changetype: delete
181
182 EOMODS
183
184 echo "Waiting 15 seconds for slurpd to send changes..."
185 sleep 15
186
187 echo "Using ldapsearch to read all the entries from the master..."
188 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT \
189         'objectclass=*' > $MASTEROUT 2>&1
190 RC=$?
191
192 if test $RC != 0 ; then
193         echo "ldapsearch failed ($RC)!"
194         kill -HUP $PID $SLAVEPID
195         kill -HUP $SLURPPID
196         exit $RC
197 fi
198
199 echo "Using ldapsearch to read all the entries from the slave..."
200 $LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $SLAVEPORT \
201         'objectclass=*' > $SLAVEOUT 2>&1
202 RC=$?
203
204 if test $RC != 0 ; then
205         echo "ldapsearch failed ($RC)!"
206         kill -HUP $PID $SLAVEPID
207         kill -HUP $SLURPPID
208         exit $RC
209 fi
210
211 kill -HUP $PID $SLAVEPID
212 kill -HUP $SLURPPID
213
214 SEARCHOUT=$MASTEROUT
215 LDIF=$SLAVEOUT
216
217 echo "Filtering ldapsearch results..."
218 . $LDIFFILTER < $SEARCHOUT > $SEARCHFLT
219 echo "Filtering original ldif used to create database..."
220 . $LDIFFILTER < $LDIF > $LDIFFLT
221
222 echo "Comparing retrieved entries from master and slave..."
223 $CMP $SEARCHFLT $LDIFFLT > $CMPOUT
224
225 if test $? != 0 ; then
226         echo "test failed - master and slave databases differ"
227         exit 1
228 fi
229
230 echo ">>>>> Test succeeded"
231
232
233 exit 0