xref: /netbsd-src/external/bsd/openldap/dist/tests/scripts/test033-glue-syncrepl (revision 6dffe8d42bd46273f674d7ab834e7be9b1af990e)
1#! /bin/sh
2## This work is part of OpenLDAP Software <http://www.openldap.org/>.
3##
4## Copyright 1998-2008 The OpenLDAP Foundation.
5## All rights reserved.
6##
7## Redistribution and use in source and binary forms, with or without
8## modification, are permitted only as authorized by the OpenLDAP
9## Public License.
10##
11## A copy of this license is available in the file LICENSE in the
12## top-level directory of the distribution or, alternatively, at
13## <http://www.OpenLDAP.org/license.html>.
14
15if test "$BACKEND" != "bdb" && test "$BACKEND" != "hdb" ; then
16	echo "Test does not support $BACKEND"
17	exit 0
18fi
19
20echo "running defines.sh"
21. $SRCDIR/scripts/defines.sh
22
23if test $SYNCPROV = syncprovno; then
24	echo "Syncrepl provider overlay not available, test skipped"
25	exit 0
26fi
27
28mkdir -p $TESTDIR $DBDIR1A $DBDIR1B $DBDIR1C $DBDIR2A $DBDIR2B
29
30echo "Running slapadd to build glued slapd databases..."
31. $CONFFILTER $BACKEND $MONITORDB < $GLUECONF > $CONF1
32$SLAPADD -d $LVL -f $CONF1 -l $LDIFORDERED > $SLAPADDLOG1 2>&1
33RC=$?
34if test $RC != 0 ; then
35	echo "slapadd failed ($RC)!"
36	exit $RC
37fi
38
39rm -f $DBDIR1A/* $DBDIR1B/*
40cp -pr $DBDIR1C $DBDIR2C
41
42echo "Starting slapd 1 on TCP/IP port $PORT1..."
43. $CONFFILTER $BACKEND $MONITORDB < $GLUESYNCCONF1 > $CONF1
44$SLAPD -f $CONF1 -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
45PID=$!
46if test $WAIT != 0 ; then
47    echo PID $PID
48    read foo
49fi
50KILLPIDS="$PID"
51
52sleep 1
53
54echo "Using ldapsearch to check that slapd 1 is running..."
55for i in 0 1 2 3 4 5; do
56	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT1 \
57		'(objectclass=*)' > /dev/null 2>&1
58	RC=$?
59	if test $RC = 0 ; then
60		break
61	fi
62	echo "Waiting 5 seconds for slapd to start..."
63	sleep 5
64done
65
66echo "Starting slapd 2 on TCP/IP port $PORT2..."
67. $CONFFILTER $BACKEND $MONITORDB < $GLUESYNCCONF2 > $CONF2
68$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 &
69PID=$!
70if test $WAIT != 0 ; then
71    echo PID $PID
72    read foo
73fi
74KILLPIDS="$KILLPIDS $PID"
75
76sleep 1
77
78echo "Using ldapsearch to check that slapd 2 is running..."
79for i in 0 1 2 3 4 5; do
80	$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \
81		'(objectclass=*)' > /dev/null 2>&1
82	RC=$?
83	if test $RC = 0 ; then
84		break
85	fi
86	echo "Waiting 5 seconds for slapd to start..."
87	sleep 5
88done
89
90SUBTREE1="ou=Information Technology Division,ou=People,dc=example,dc=com"
91SUBTREE2="ou=Groups,dc=example,dc=com"
92
93echo "Using ldapadd to populate subtree=\"${SUBTREE1}\" on port $PORT1..."
94$LDAPADD -D "cn=Manager 1,$BASEDN" -w $PASSWD -h $LOCALHOST -p $PORT1 \
95	-f $LDIFORDERED -c \
96	> /dev/null 2>&1
97RC=$?
98case $RC in
990)
100	echo "ldapadd should have failed ($RC)!"
101	test $KILLSERVERS != no && kill -HUP $KILLPIDS
102	exit -1
103	;;
10410|68)
105	# Fine if we get alreadyExists or referrals
106	;;
107*)
108	echo "ldapadd failed ($RC)!"
109	test $KILLSERVERS != no && kill -HUP $KILLPIDS
110	exit $RC
111	;;
112esac
113
114echo "Using ldapadd to populate subtree=\"${SUBTREE2}\" on port $PORT2..."
115$LDAPADD -D "cn=Manager 2,$BASEDN" -w $PASSWD -h $LOCALHOST -p $PORT2 \
116	-f $LDIFORDERED -c \
117	> /dev/null 2>&1
118RC=$?
119case $RC in
1200)
121	echo "ldapadd should have failed ($RC)!"
122	test $KILLSERVERS != no && kill -HUP $KILLPIDS
123	exit -1
124	;;
12510|68)
126	# Fine if we get alreadyExists or referrals
127	;;
128*)
129	echo "ldapadd failed ($RC)!"
130	test $KILLSERVERS != no && kill -HUP $KILLPIDS
131	exit $RC
132	;;
133esac
134
135SLEEP=15
136echo "Waiting $SLEEP seconds for shadow subtrees to sync..."
137sleep $SLEEP
138
139echo "Filtering original ldif used to create database..."
140. $LDIFFILTER < $GLUESYNCOUT > $LDIFFLT
141
142for P in $PORT1 $PORT2 ; do
143	echo "Using ldapsearch to read all the entries from port $P..."
144	$LDAPSEARCH -b "$BASEDN" -h $LOCALHOST -p $P \
145		-S "" '(objectclass=*)' > "${SEARCHOUT}.${P}" 2>&1
146	RC=$?
147
148	if test $RC != 0 ; then
149		echo "ldapsearch failed ($RC)!"
150		test $KILLSERVERS != no && kill -HUP $KILLPIDS
151		exit $RC
152	fi
153
154	echo "Filtering ldapsearch results..."
155	. $LDIFFILTER < "${SEARCHOUT}.${P}" > $SEARCHFLT
156	echo "Comparing filter output..."
157	$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
158
159	if test $? != 0 ; then
160		echo "comparison failed - database was not created correctly"
161		test $KILLSERVERS != no && kill -HUP $KILLPIDS
162		exit 1
163	fi
164done
165
166echo "Testing ldapdelete propagation..."
167$LDAPDELETE -D "cn=Manager 1,$BASEDN" -w $PASSWD -H $URI1 "$BABSDN" \
168	> $TESTOUT 2>&1
169RC=$?
170if test $RC != 0 ; then
171	echo "ldapdelete failed ($RC)!"
172	test $KILLSERVERS != no && kill -HUP $KILLPIDS
173	exit $RC
174fi
175
176# This usually propagates immediately
177sleep 1
178
179$LDAPSEARCH -H $URI2 -b "$BABSDN" > $TESTOUT 2>&1
180RC=$?
181if test $RC = 0 ; then
182	echo "ldapsearch should have failed ($RC)!"
183	test $KILLSERVERS != no && kill -HUP $KILLPIDS
184	exit -1
185fi
186
187test $KILLSERVERS != no && kill -HUP $KILLPIDS
188
189echo ">>>>> Test succeeded"
190
191test $KILLSERVERS != no && wait
192
193exit 0
194