mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-22 15:49:34 -05:00
Connection entries are now persistent and can be addressed, preparing the ground so we can process modify operations on individual entries.
361 lines
10 KiB
Bash
Executable file
361 lines
10 KiB
Bash
Executable file
#! /bin/sh
|
|
# $OpenLDAP$
|
|
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
|
##
|
|
## Copyright 1998-2021 The OpenLDAP Foundation.
|
|
## All rights reserved.
|
|
##
|
|
## Redistribution and use in source and binary forms, with or without
|
|
## modification, are permitted only as authorized by the OpenLDAP
|
|
## Public License.
|
|
##
|
|
## A copy of this license is available in the file LICENSE in the
|
|
## top-level directory of the distribution or, alternatively, at
|
|
## <http://www.OpenLDAP.org/license.html>.
|
|
|
|
echo "running defines.sh"
|
|
. $SRCDIR/scripts/defines.sh
|
|
|
|
mkdir -p $TESTDIR $DBDIR1 $DBDIR2
|
|
|
|
$SLAPPASSWD -g -n >$CONFIGPWF
|
|
echo "rootpw `$SLAPPASSWD -T $CONFIGPWF`" >$TESTDIR/configpw.conf
|
|
|
|
if test $AC_lloadd = lloaddyes ; then
|
|
echo "Load balancer module not available, skipping..."
|
|
exit 0
|
|
fi
|
|
|
|
# Monitor counts are unstable in the face of concurrency, since different
|
|
# clients may get different upstreams assigned for their operations. This might
|
|
# also change later when tiered load balancing is available.
|
|
# Another constraint is that some global counts are updated by the statistics
|
|
# collection task scheduled to run every second.
|
|
#
|
|
# This test assumes current round-robin policy:
|
|
# - default backend is rotated every time we successfully pick an upstream
|
|
# - upstream connections within the same backend are rotated in the same way
|
|
# - the monitor entry order for upstream connections reflects the connection
|
|
# order within its CIRCLEQ_
|
|
|
|
echo "Starting the first slapd on TCP/IP port $PORT2..."
|
|
. $CONFFILTER $BACKEND < $CONF > $CONF2
|
|
$SLAPADD -f $CONF2 -l $LDIFORDERED
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "slapadd failed ($RC)!"
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Running slapindex to index slapd database..."
|
|
$SLAPINDEX -f $CONF2
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "warning: slapindex failed ($RC)"
|
|
echo " assuming no indexing support"
|
|
fi
|
|
|
|
$SLAPD -f $CONF2 -h $URI2 -d $LVL > $LOG2 2>&1 &
|
|
PID=$!
|
|
if test $WAIT != 0 ; then
|
|
echo PID $PID
|
|
read foo
|
|
fi
|
|
PID2="$PID"
|
|
KILLPIDS="$PID"
|
|
|
|
echo "Testing slapd searching..."
|
|
for i in 0 1 2 3 4 5; do
|
|
$LDAPSEARCH -s base -b "$MONITOR" -H $URI2 \
|
|
'(objectclass=*)' > /dev/null 2>&1
|
|
RC=$?
|
|
if test $RC = 0 ; then
|
|
break
|
|
fi
|
|
echo "Waiting $SLEEP1 seconds for slapd to start..."
|
|
sleep $SLEEP1
|
|
done
|
|
if test $RC != 0 ; then
|
|
echo "ldapsearch failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Running slapadd to build slapd database..."
|
|
. $CONFFILTER $BACKEND < $CONFTWO > $CONF3
|
|
$SLAPADD -f $CONF3 -l $LDIFORDERED
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "slapadd failed ($RC)!"
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Running slapindex to index slapd database..."
|
|
$SLAPINDEX -f $CONF3
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "warning: slapindex failed ($RC)"
|
|
echo " assuming no indexing support"
|
|
fi
|
|
|
|
echo "Starting second slapd on TCP/IP port $PORT3..."
|
|
$SLAPD -f $CONF3 -h $URI3 -d $LVL > $LOG3 2>&1 &
|
|
PID=$!
|
|
if test $WAIT != 0 ; then
|
|
echo PID $PID
|
|
read foo
|
|
fi
|
|
PID3="$PID"
|
|
KILLPIDS="$KILLPIDS $PID"
|
|
|
|
sleep $SLEEP0
|
|
|
|
echo "Testing slapd searching..."
|
|
for i in 0 1 2 3 4 5; do
|
|
$LDAPSEARCH -s base -b "$MONITOR" -H $URI3 \
|
|
'(objectclass=*)' > /dev/null 2>&1
|
|
RC=$?
|
|
if test $RC = 0 ; then
|
|
break
|
|
fi
|
|
echo "Waiting $SLEEP1 seconds for slapd to start..."
|
|
sleep $SLEEP1
|
|
done
|
|
if test $RC != 0 ; then
|
|
echo "ldapsearch failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Starting lloadd on TCP/IP port $PORT1..."
|
|
. $CONFFILTER $BACKEND < $LLOADDEMPTYCONF > $CONF1.lloadd
|
|
. $CONFFILTER $BACKEND < $SLAPDLLOADCONF > $CONF1.slapd
|
|
$SLAPD -f $CONF1.slapd -h $URI6 -d $LVL > $LOG1 2>&1 &
|
|
PID=$!
|
|
if test $WAIT != 0 ; then
|
|
echo PID $PID
|
|
read foo
|
|
fi
|
|
KILLPIDS="$KILLPIDS $PID"
|
|
|
|
echo "Testing slapd searching..."
|
|
for i in 0 1 2 3 4 5; do
|
|
$LDAPSEARCH -s base -b "$MONITOR" -H $URI6 \
|
|
'(objectclass=*)' > /dev/null 2>&1
|
|
RC=$?
|
|
if test $RC = 0 ; then
|
|
break
|
|
fi
|
|
echo "Waiting $SLEEP1 seconds for lloadd to start..."
|
|
sleep $SLEEP1
|
|
done
|
|
|
|
if test $RC != 0 ; then
|
|
echo "ldapsearch failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Sending a search request to prime the counters..."
|
|
$LDAPSEARCH -b "$BASEDN" -s base -H $URI1 >> $TESTOUT 2>&1
|
|
RC=$?
|
|
if test $RC != 52 ; then
|
|
echo "ldapsearch should have failed ($RC != 52)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Retrieving data from cn=monitor..."
|
|
echo "# Retrieving data from an empty lload's cn=monitor..." >>$SEARCHOUT
|
|
echo "# Operations received:" >>$SEARCHOUT
|
|
echo "# Bind: 1 (0 forwarded)" >>$SEARCHOUT
|
|
echo "# Search: 0" >>$SEARCHOUT
|
|
echo "# Unbind: 1" >>$SEARCHOUT
|
|
$LDAPSEARCH -b "cn=Load Balancer,cn=Backends,cn=monitor" -H $URI6 \
|
|
olmBalancer olmBalancerServer olmBalancerOperation olmBalancerConnection >> $SEARCHOUT 2>&1
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapsearch failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Adding first tier..."
|
|
$LDAPMODIFY -D cn=config -H $URI6 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
|
|
dn: cn=first,olcBackend={0}lload,cn=config
|
|
changetype: add
|
|
objectClass: olcBkLloadTierConfig
|
|
olcBkLloadTierType: roundrobin
|
|
EOF
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapadd failed for backend ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Adding first backend server..."
|
|
$LDAPMODIFY -D cn=config -H $URI6 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
|
|
dn: cn=backend,cn={0}first,olcBackend={0}lload,cn=config
|
|
changetype: add
|
|
objectClass: olcBkLloadBackendConfig
|
|
olcBkLloadBackendUri: $URI2
|
|
olcBkLloadMaxPendingConns: 3
|
|
olcBkLloadMaxPendingOps: 5
|
|
olcBkLloadRetry: 1000
|
|
olcBkLloadNumconns: 2
|
|
olcBkLloadBindconns: 2
|
|
olcBkLloadWeight: 1
|
|
EOF
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapadd failed for backend ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
# At the moment, the global counters are updated by a recurring job,
|
|
# wait for it to settle
|
|
echo "Waiting until connections are established..."
|
|
for i in 0 1 2 3 4 5; do
|
|
$LDAPCOMPARE "cn=Load Balancer,cn=Backends,cn=monitor" -H $URI6 \
|
|
'olmOutgoingConnections:4' > /dev/null 2>&1
|
|
RC=$?
|
|
if test $RC = 6 ; then
|
|
break
|
|
fi
|
|
echo "Waiting $SLEEP1 seconds until connections are established..."
|
|
sleep $SLEEP1
|
|
done
|
|
if test $RC != 6 ; then
|
|
echo "ldapcompare failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Retrieving data from cn=monitor again..."
|
|
echo >>$SEARCHOUT
|
|
echo "# Retrieving data from lload's cn=monitor..." >>$SEARCHOUT
|
|
$LDAPSEARCH -b "cn=Load Balancer,cn=Backends,cn=monitor" -H $URI6 \
|
|
olmBalancer olmBalancerServer olmBalancerOperation olmBalancerConnection >> $SEARCHOUT 2>&1
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapsearch failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Adding another backend server..."
|
|
$LDAPMODIFY -D cn=config -H $URI6 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
|
|
dn: cn=server 2,cn={0}first,olcBackend={0}lload,cn=config
|
|
changetype: add
|
|
objectClass: olcBkLloadBackendConfig
|
|
olcBkLloadBackendUri: $URI3
|
|
olcBkLloadMaxPendingConns: 3
|
|
olcBkLloadMaxPendingOps: 5
|
|
olcBkLloadRetry: 1000
|
|
olcBkLloadNumconns: 4
|
|
olcBkLloadBindconns: 5
|
|
olcBkLloadWeight: 1
|
|
EOF
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapadd failed for backend ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
# At the moment, the global counters are updated by a recurring job,
|
|
# wait for it to settle
|
|
echo "Waiting until connections are established..."
|
|
for i in 0 1 2 3 4 5; do
|
|
$LDAPCOMPARE "cn=Load Balancer,cn=Backends,cn=monitor" -H $URI6 \
|
|
'olmOutgoingConnections:13' > /dev/null 2>&1
|
|
RC=$?
|
|
if test $RC = 6 ; then
|
|
break
|
|
fi
|
|
echo "Waiting $SLEEP1 seconds until connections are established..."
|
|
sleep $SLEEP1
|
|
done
|
|
if test $RC != 6 ; then
|
|
echo "ldapcompare failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Sending another search request..."
|
|
$LDAPSEARCH -b "$BASEDN" -s base -H $URI1 >> $TESTOUT 2>&1
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapsearch failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Sending a WhoAmI? request..."
|
|
$LDAPWHOAMI -D "$BABSDN" -w bjensen -H $URI1 >> $TESTOUT 2>&1
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapwhoami failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
# At the moment, the global counters are updated by a recurring job,
|
|
# wait for it to settle
|
|
echo "Waiting until global counters are updated..."
|
|
for i in 0 1 2 3 4 5; do
|
|
$LDAPCOMPARE "cn=Other,cn=Operations,cn=Load Balancer,cn=Backends,cn=monitor" -H $URI6 \
|
|
'olmCompletedOps:2' > /dev/null 2>&1
|
|
RC=$?
|
|
if test $RC = 6 ; then
|
|
break
|
|
fi
|
|
echo "Waiting $SLEEP1 seconds until counters are updated..."
|
|
sleep $SLEEP1
|
|
done
|
|
if test $RC != 6 ; then
|
|
echo "ldapcompare failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Retrieving data from cn=monitor again..."
|
|
echo >>$SEARCHOUT
|
|
echo "# Retrieving data after a search+WhoAmI?..." >>$SEARCHOUT
|
|
echo "# Operations received:" >>$SEARCHOUT
|
|
echo "# Bind: 3 (2 forwarded)" >>$SEARCHOUT
|
|
echo "# Search: 1" >>$SEARCHOUT
|
|
echo "# Extended: 1 (WhoAmI?)" >>$SEARCHOUT
|
|
echo "# Unbind: 3" >>$SEARCHOUT
|
|
$LDAPSEARCH -b "cn=Load Balancer,cn=Backends,cn=monitor" -H $URI6 \
|
|
olmBalancer olmBalancerServer olmBalancerOperation olmBalancerConnection >> $SEARCHOUT 2>&1
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapsearch failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
|
|
LDIF=$DATADIR/lloadd/monitor.ldif
|
|
|
|
echo "Filtering ldapsearch results..."
|
|
$LDIFFILTER -s e < $SEARCHOUT > $SEARCHFLT
|
|
echo "Filtering original ldif used to create database..."
|
|
$LDIFFILTER -s e < $LDIF > $LDIFFLT
|
|
echo "Comparing filter output..."
|
|
$CMP $SEARCHFLT $LDIFFLT > $CMPOUT
|
|
|
|
if test $? != 0 ; then
|
|
echo "Comparison failed"
|
|
exit 1
|
|
fi
|
|
|
|
echo ">>>>> Test succeeded"
|
|
|
|
test $KILLSERVERS != no && wait
|
|
|
|
exit 0
|