mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
e8c62bf8b4
Tested against DSEE7. The DSEE binaries must be in your path to run the test script.
331 lines
8.5 KiB
Bash
Executable File
331 lines
8.5 KiB
Bash
Executable File
#! /bin/sh
|
|
# $OpenLDAP$
|
|
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
|
|
##
|
|
## Copyright 1998-2018 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
|
|
|
|
if test -z `which dsadm`; then
|
|
echo "DSEE dsadm not in path, test skipped"
|
|
exit 0
|
|
fi
|
|
|
|
mkdir -p $TESTDIR $DBDIR2
|
|
|
|
#
|
|
# Test replication:
|
|
# - start provider
|
|
# - start consumer
|
|
# - populate over ldap
|
|
# - perform some modifies and deleted
|
|
# - attempt to modify the consumer (referral)
|
|
# - retrieve database over ldap and compare against expected results
|
|
#
|
|
|
|
DSEEPW=secret21
|
|
DSEEDN="cn=Directory Manager"
|
|
DSEEPWF=$TESTDIR/dseepw
|
|
|
|
echo "secret21" > $DSEEPWF
|
|
|
|
echo "Setting up DSEE provider slapd on TCP/IP port $PORT1..."
|
|
dsadm create -p $PORT1 -w $DSEEPWF $DBDIR1
|
|
dsadm start $DBDIR1
|
|
dsconf create-suffix -c -p $PORT1 -w $DSEEPWF $BASEDN
|
|
dsconf set-server-prop -p $PORT1 -w $DSEEPWF moddn-enabled:on
|
|
dsconf set-server-prop -p $PORT1 -w $DSEEPWF retro-cl-enabled:on
|
|
dsadm restart $DBDIR1
|
|
KILLPIDS=`basename $DBDIR1/locks/server/*`
|
|
|
|
sleep 1
|
|
|
|
echo "Using ldapsearch to check that provider slapd is running..."
|
|
for i in 0 1 2 3 4 5; do
|
|
$LDAPSEARCH -s base -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
|
|
'objectclass=*' > /dev/null 2>&1
|
|
RC=$?
|
|
if test $RC = 0 ; then
|
|
break
|
|
fi
|
|
echo "Waiting 5 seconds for slapd to start..."
|
|
sleep 5
|
|
done
|
|
|
|
if test $RC != 0 ; then
|
|
echo "ldapsearch failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Starting consumer slapd on TCP/IP port $PORT2..."
|
|
. $CONFFILTER $BACKEND $MONITORDB < $DSEESYNC1CONF > $CONF2
|
|
$SLAPD -f $CONF2 -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 &
|
|
SLAVEPID=$!
|
|
if test $WAIT != 0 ; then
|
|
echo SLAVEPID $SLAVEPID
|
|
read foo
|
|
fi
|
|
KILLPIDS="$KILLPIDS $SLAVEPID"
|
|
|
|
sleep 1
|
|
|
|
echo "Using ldapsearch to check that consumer slapd is running..."
|
|
for i in 0 1 2 3 4 5; do
|
|
$LDAPSEARCH -s base -b "$MONITOR" -h $LOCALHOST -p $PORT2 \
|
|
'objectclass=*' > /dev/null 2>&1
|
|
RC=$?
|
|
if test $RC = 0 ; then
|
|
break
|
|
fi
|
|
echo "Waiting 5 seconds for slapd to start..."
|
|
sleep 5
|
|
done
|
|
|
|
if test $RC != 0 ; then
|
|
echo "ldapsearch failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
# using LDIFDIRSYNCNOCP to avoid custom OpenLDAP schema
|
|
echo "Using ldapadd to populate the provider directory..."
|
|
$LDAPADD -D "$DSEEDN" -h $LOCALHOST -p $PORT1 -w $DSEEPW < \
|
|
$LDIFDIRSYNCNOCP > /dev/null 2>&1
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapadd failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
|
|
sleep $SLEEP1
|
|
|
|
echo "Using ldapmodify to modify provider directory..."
|
|
|
|
#
|
|
# Do some modifications
|
|
#
|
|
|
|
$LDAPMODIFY -v -D "$DSEEDN" -h $LOCALHOST -p $PORT1 -w $DSEEPW > \
|
|
$TESTOUT 2>&1 << EOMODS
|
|
dn: cn=James A Jones 1, ou=Alumni Association, ou=People, dc=example,dc=com
|
|
changetype: modify
|
|
add: carLicense
|
|
carLicense: Orange Juice
|
|
-
|
|
delete: sn
|
|
sn: Jones
|
|
-
|
|
add: sn
|
|
sn: Jones
|
|
|
|
dn: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
|
|
changetype: modify
|
|
replace: carLicense
|
|
carLicense: Iced Tea
|
|
carLicense: Mad Dog 20/20
|
|
|
|
dn: cn=ITD Staff,ou=Groups,dc=example,dc=com
|
|
changetype: modify
|
|
delete: uniquemember
|
|
uniquemember: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
|
|
uniquemember: cn=Bjorn Jensen, ou=Information Technology Division, ou=People, dc=example,dc=com
|
|
-
|
|
add: uniquemember
|
|
uniquemember: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com
|
|
uniquemember: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com
|
|
|
|
dn: cn=All Staff,ou=Groups,dc=example,dc=com
|
|
changetype: modify
|
|
delete: description
|
|
|
|
dn: cn=Gern Jensen,ou=Information Technology Division,ou=People,dc=example,dc=com
|
|
changetype: add
|
|
objectclass: inetOrgPerson
|
|
cn: Gern Jensen
|
|
sn: Jensen
|
|
uid: gjensen
|
|
title: Chief Investigator, ITD
|
|
postaladdress: ITD $ 535 W. William St $ Ann Arbor, MI 48103
|
|
seealso: cn=All Staff,ou=Groups,dc=example,dc=com
|
|
carLicense: Coffee
|
|
homepostaladdress: 844 Brown St. Apt. 4 $ Ann Arbor, MI 48104
|
|
description: Very odd
|
|
facsimiletelephonenumber: +1 313 555 7557
|
|
telephonenumber: +1 313 555 8343
|
|
mail: gjensen@mailgw.example.com
|
|
homephone: +1 313 555 8844
|
|
|
|
dn: ou=Retired,ou=People,dc=example,dc=com
|
|
changetype: add
|
|
objectclass: organizationalUnit
|
|
ou: Retired
|
|
|
|
dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
|
|
changetype: add
|
|
objectclass: inetOrgPerson
|
|
cn: Rosco P. Coltrane
|
|
sn: Coltrane
|
|
uid: rosco
|
|
|
|
dn: cn=Rosco P. Coltrane, ou=Information Technology Division, ou=People, dc=example,dc=com
|
|
changetype: modrdn
|
|
newrdn: cn=Rosco P. Coltrane
|
|
deleteoldrdn: 1
|
|
newsuperior: ou=Retired,ou=People,dc=example,dc=com
|
|
|
|
dn: cn=James A Jones 2, ou=Information Technology Division, ou=People, dc=example,dc=com
|
|
changetype: delete
|
|
|
|
dn: ou=testdomain1,dc=example,dc=com
|
|
changetype: modrdn
|
|
newrdn: ou=itsdomain1
|
|
deleteoldrdn: 1
|
|
|
|
dn: ou=itsdomain1,dc=example,dc=com
|
|
changetype: modify
|
|
replace: description
|
|
description: Example, Inc. ITS test domain
|
|
|
|
EOMODS
|
|
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapmodify failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
|
|
sleep $SLEEP1
|
|
|
|
echo "Performing modrdn alone on the provider..."
|
|
$LDAPMODIFY -v -D "$DSEEDN" -h $LOCALHOST -p $PORT1 -w $DSEEPW > \
|
|
$TESTOUT 2>&1 << EOMODS
|
|
dn: ou=testdomain2,dc=example,dc=com
|
|
changetype: modrdn
|
|
newrdn: ou=itsdomain2
|
|
deleteoldrdn: 1
|
|
|
|
EOMODS
|
|
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapmodify failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
|
|
sleep $SLEEP1
|
|
|
|
echo "Performing modify alone on the provider..."
|
|
$LDAPMODIFY -v -D "$DSEEDN" -h $LOCALHOST -p $PORT1 -w $DSEEPW > \
|
|
$TESTOUT 2>&1 << EOMODS
|
|
dn: ou=itsdomain2,dc=example,dc=com
|
|
changetype: modify
|
|
replace: description
|
|
description: Example, Inc. itsdomain2 test domain
|
|
|
|
EOMODS
|
|
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapmodify failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
|
|
sleep $SLEEP1
|
|
|
|
echo "Performing larger modify on the provider..."
|
|
$LDAPMODIFY -v -D "$DSEEDN" -h $LOCALHOST -p $PORT1 -w $DSEEPW > \
|
|
$TESTOUT 2>&1 << EOMODS
|
|
dn: cn=Alumni Assoc Staff,ou=Groups,dc=example,dc=com
|
|
changetype: modify
|
|
replace: cn
|
|
cn: Alumni Assoc Staff
|
|
-
|
|
replace: description
|
|
description: blablabla
|
|
-
|
|
replace: member
|
|
member: cn=Manager,dc=example,dc=com
|
|
member: cn=Dorothy Stevens,ou=Alumni Association,ou=People,dc=example,dc=com
|
|
member: cn=James A Jones 1,ou=Alumni Association,ou=People,dc=example,dc=com
|
|
member: cn=Jane Doe,ou=Alumni Association,ou=People,dc=example,dc=com
|
|
member: cn=Jennifer Smith,ou=Alumni Association,ou=People,dc=example,dc=com
|
|
member: cn=Mark Elliot,ou=Alumni Association,ou=People,dc=example,dc=com
|
|
member: cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com
|
|
|
|
EOMODS
|
|
|
|
RC=$?
|
|
if test $RC != 0 ; then
|
|
echo "ldapmodify failed ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
|
|
sleep $SLEEP1
|
|
|
|
OPATTRS="creatorsName createTimestamp modifiersName modifyTimestamp"
|
|
|
|
echo "Using ldapsearch to read all the entries from the provider..."
|
|
$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT1 \
|
|
-D "$DSEEDN" -w $DSEEPW \
|
|
'(objectclass=*)' '*' $OPATTRS > $MASTEROUT 2>&1
|
|
RC=$?
|
|
|
|
if test $RC != 0 ; then
|
|
echo "ldapsearch failed at provider ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
echo "Using ldapsearch to read all the entries from the consumer..."
|
|
$LDAPSEARCH -S "" -b "$BASEDN" -h $LOCALHOST -p $PORT2 \
|
|
'(objectclass=*)' '*' $OPATTRS > $SLAVEOUT 2>&1
|
|
RC=$?
|
|
|
|
if test $RC != 0 ; then
|
|
echo "ldapsearch failed at consumer ($RC)!"
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
exit $RC
|
|
fi
|
|
|
|
test $KILLSERVERS != no && kill -HUP $KILLPIDS
|
|
|
|
echo "Filtering provider results..."
|
|
$LDIFFILTER -s a < $MASTEROUT > $MASTERFLT
|
|
echo "Filtering consumer results..."
|
|
$LDIFFILTER -s a < $SLAVEOUT > $SLAVEFLT
|
|
|
|
echo "Comparing retrieved entries from provider and consumer..."
|
|
$CMP $MASTERFLT $SLAVEFLT > $CMPOUT
|
|
|
|
if test $? != 0 ; then
|
|
echo "test failed - provider and consumer databases differ"
|
|
exit 1
|
|
fi
|
|
|
|
echo ">>>>> Test succeeded"
|
|
|
|
test $KILLSERVERS != no && wait
|
|
|
|
exit 0
|