test058-syncrepl-asymmetric [plain text]
#! /bin/sh
if test "$BACKEND" = ldif ; then
echo "$BACKEND backend does not support access controls, test skipped"
exit 0
fi
echo "running defines.sh"
. $SRCDIR/scripts/defines.sh
if test $SYNCPROV = syncprovno; then
echo "Syncrepl provider overlay not available, test skipped"
exit 0
fi
SMC_DIR=$TESTDIR/smc
SM1_DIR=$TESTDIR/sm1
SM2_DIR=$TESTDIR/sm2
SS1_DIR=$TESTDIR/ss1
SS2_DIR=$TESTDIR/ss2
SSC_DIR=$TESTDIR/ssc
MNUM=1
mkdir -p $TESTDIR
for dir in $SMC_DIR $SM1_DIR $SM2_DIR $SS1_DIR $SS2_DIR $SSC_DIR; do
mkdir -p $dir $dir/slapd.d $dir/db
done
mkdir -p $SMC_DIR/ou1 $SMC_DIR/sm1ou1 $SMC_DIR/sm1ou2
mkdir -p $SMC_DIR/ou2 $SMC_DIR/sm2ou1
mkdir -p $SM1_DIR/ou1 $SM1_DIR/sm1ou1 $SM1_DIR/sm1ou2
mkdir -p $SM2_DIR/ou2 $SM2_DIR/sm1ou1 $SM2_DIR/sm2ou1 $SM2_DIR/sm2ou2
cd $TESTDIR
KILLPIDS=
$SLAPPASSWD -g -n >$CONFIGPWF
ID=1
if test $WAIT != 0 ; then
RETRY="1 60"
else
RETRY="1 10"
fi
echo "Initializing master configurations..."
for dir in $SMC_DIR $SM1_DIR $SM2_DIR; do
$SLAPADD -F $dir/slapd.d -n 0 <<EOF
dn: cn=config
objectClass: olcGlobal
cn: config
olcServerID: $ID
dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcRootPW:< file://$CONFIGPWF
EOF
ID=`expr $ID + 1`
done
echo "Initializing search configurations..."
for dir in $SS1_DIR $SS2_DIR $SSC_DIR; do
$SLAPADD -F $dir/slapd.d -n 0 <<EOF
dn: cn=config
objectClass: olcGlobal
cn: config
dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcRootPW:< file://$CONFIGPWF
EOF
done
echo "Starting central master slapd on TCP/IP port $PORT1..."
cd $SMC_DIR
$SLAPD -F slapd.d -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
SMC_PID=$!
if test $WAIT != 0 ; then
echo PID $SMC_PID
read foo
fi
KILLPIDS="$KILLPIDS $SMC_PID"
cd $TESTWD
sleep 1
echo "Using ldapsearch to check that central master slapd is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI1 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Starting site1 master slapd on TCP/IP port $PORT2..."
cd $SM1_DIR
$SLAPD -F slapd.d -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 &
SM1_PID=$!
if test $WAIT != 0 ; then
echo PID $SM1_PID
read foo
fi
KILLPIDS="$KILLPIDS $SM1_PID"
cd $TESTWD
sleep 1
echo "Using ldapsearch to check that site1 master is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI2 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Starting site2 master slapd on TCP/IP port $PORT3..."
cd $SM2_DIR
$SLAPD -F slapd.d -h $URI3 -d $LVL $TIMING > $LOG3 2>&1 &
SM2_PID=$!
if test $WAIT != 0 ; then
echo PID $SM2_PID
read foo
fi
KILLPIDS="$KILLPIDS $SM2_PID"
cd $TESTWD
sleep 1
echo "Using ldapsearch to check that site2 master is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI3 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Starting central search slapd on TCP/IP port $PORT4..."
cd $SSC_DIR
$SLAPD -F slapd.d -h $URI4 -d $LVL $TIMING > $LOG4 2>&1 &
SSC_PID=$!
if test $WAIT != 0 ; then
echo PID $SSC_PID
read foo
fi
KILLPIDS="$KILLPIDS $SSC_PID"
cd $TESTWD
sleep 1
echo "Using ldapsearch to check that central search slapd is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI4 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Starting site1 search slapd on TCP/IP port $PORT5..."
cd $SS1_DIR
$SLAPD -F slapd.d -h $URI5 -d $LVL $TIMING > $LOG5 2>&1 &
SS1_PID=$!
if test $WAIT != 0 ; then
echo PID $SS1_PID
read foo
fi
KILLPIDS="$KILLPIDS $SS1_PID"
cd $TESTWD
sleep 1
echo "Using ldapsearch to check that site1 search slapd is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI5 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Starting site2 search slapd on TCP/IP port $PORT6..."
cd $SS2_DIR
$SLAPD -F slapd.d -h $URI6 -d $LVL $TIMING > $LOG6 2>&1 &
SS2_PID=$!
if test $WAIT != 0 ; then
echo PID $SS2_PID
read foo
fi
KILLPIDS="$KILLPIDS $SS2_PID"
cd $TESTWD
sleep 1
echo "Using ldapsearch to check that site2 search slapd is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI6 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
for uri in $URI1 $URI2 $URI3 $URI4 $URI5 $URI6; do
echo "Adding schema on $uri..."
$LDAPADD -D cn=config -H $uri -y $CONFIGPWF <<EOF > $TESTOUT 2>&1
include: file://$ABS_SCHEMADIR/core.ldif
include: file://$ABS_SCHEMADIR/cosine.ldif
include: file://$ABS_SCHEMADIR/inetorgperson.ldif
include: file://$ABS_SCHEMADIR/openldap.ldif
include: file://$ABS_SCHEMADIR/nis.ldif
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapadd failed for schema config ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
[ "$BACKENDTYPE" = mod ] || continue
echo "Adding backend module on $uri..."
$LDAPADD -D cn=config -H $uri -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: $TESTWD/../servers/slapd/back-$BACKEND
olcModuleLoad: back_$BACKEND.la
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapadd failed for backend module ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
done
echo "Adding database config on central master..."
if [ "$SYNCPROV" = syncprovmod ]; then
$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: $TESTWD/../servers/slapd/overlays
olcModuleLoad: syncprov.la
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapadd failed for moduleLoad ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
fi
nullExclude="" nullOK="" wantNoObj=32
test $BACKEND = null && nullExclude="# " nullOK="OK" wantNoObj=0
$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: olcDatabase={1}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {1}$BACKEND
${nullExclude}olcDbDirectory: $SMC_DIR/db
olcSuffix: $BASEDN
olcRootDN: $MANAGERDN
olcRootPW: $PASSWD
dn: olcOverlay={0}glue,olcDatabase={1}$BACKEND,cn=config
objectClass: olcOverlayConfig
olcOverlay: {0}glue
dn: olcOverlay={1}syncprov,olcDatabase={1}$BACKEND,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: {1}syncprov
olcSpCheckpoint: 3 1
dn: olcDatabase={1}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {1}$BACKEND
${nullExclude}olcDbDirectory: $SMC_DIR/ou1
olcSubordinate: TRUE
olcSuffix: ou=ou1,$BASEDN
olcRootDN: $MANAGERDN
dn: olcDatabase={2}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {2}$BACKEND
${nullExclude}olcDbDirectory: $SMC_DIR/ou2
olcSubordinate: TRUE
olcSuffix: ou=ou2,$BASEDN
olcRootDN: $MANAGERDN
dn: olcDatabase={3}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {3}$BACKEND
${nullExclude}olcDbDirectory: $SMC_DIR/sm1ou1
olcSubordinate: TRUE
olcSuffix: ou=sm1ou1,$BASEDN
olcRootDN: $UPDATEDN
dn: olcDatabase={4}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {4}$BACKEND
${nullExclude}olcDbDirectory: $SMC_DIR/sm1ou2
olcSubordinate: TRUE
olcSuffix: ou=sm1ou2,$BASEDN
olcRootDN: $UPDATEDN
dn: olcDatabase={5}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {5}$BACKEND
${nullExclude}olcDbDirectory: $SMC_DIR/sm2ou1
olcSubordinate: TRUE
olcSuffix: ou=sm2ou1,$BASEDN
olcRootDN: $UPDATEDN
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapadd failed for central master database config ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Adding database config on site1 master..."
if [ "$SYNCPROV" = syncprovmod ]; then
$LDAPADD -D cn=config -H $URI2 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: $TESTWD/../servers/slapd/overlays
olcModuleLoad: syncprov.la
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapadd failed for moduleLoad ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
fi
$LDAPADD -D cn=config -H $URI2 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: olcDatabase={1}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {1}$BACKEND
${nullExclude}olcDbDirectory: $SM1_DIR/db
olcSuffix: $BASEDN
olcRootDN: $UPDATEDN
dn: olcOverlay={0}glue,olcDatabase={1}$BACKEND,cn=config
objectClass: olcOverlayConfig
olcOverlay: {0}glue
dn: olcOverlay={1}syncprov,olcDatabase={1}$BACKEND,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: {1}syncprov
dn: olcDatabase={1}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {1}$BACKEND
${nullExclude}olcDbDirectory: $SM1_DIR/ou1
olcSubordinate: TRUE
olcSuffix: ou=ou1,$BASEDN
olcRootDN: $UPDATEDN
dn: olcDatabase={2}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {2}$BACKEND
${nullExclude}olcDbDirectory: $SM1_DIR/sm1ou1
olcSubordinate: TRUE
olcSuffix: ou=sm1ou1,$BASEDN
olcRootDN: ou=sm1ou1,$BASEDN
olcRootPW: $PASSWD
dn: olcDatabase={3}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {3}$BACKEND
${nullExclude}olcDbDirectory: $SM1_DIR/sm1ou2
olcSubordinate: TRUE
olcSuffix: ou=sm1ou2,$BASEDN
olcRootDN: ou=sm1ou1,$BASEDN
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapadd failed for site1 master database config ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Adding database config on site2 master..."
if [ "$SYNCPROV" = syncprovmod ]; then
$LDAPADD -D cn=config -H $URI3 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: $TESTWD/../servers/slapd/overlays
olcModuleLoad: syncprov.la
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapadd failed for moduleLoad ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
fi
$LDAPADD -D cn=config -H $URI3 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: olcDatabase={1}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {1}$BACKEND
${nullExclude}olcDbDirectory: $SM2_DIR/db
olcSuffix: $BASEDN
olcRootDN: $UPDATEDN
dn: olcOverlay={0}glue,olcDatabase={1}$BACKEND,cn=config
objectClass: olcOverlayConfig
olcOverlay: {0}glue
dn: olcOverlay={1}syncprov,olcDatabase={1}$BACKEND,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: {1}syncprov
olcSpCheckpoint: 1 1
dn: olcDatabase={1}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {1}$BACKEND
${nullExclude}olcDbDirectory: $SM2_DIR/ou2
olcSubordinate: TRUE
olcSuffix: ou=ou2,$BASEDN
olcRootDN: $UPDATEDN
dn: olcDatabase={2}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {2}$BACKEND
${nullExclude}olcDbDirectory: $SM2_DIR/sm1ou1
olcSubordinate: TRUE
olcSuffix: ou=sm1ou1,$BASEDN
olcRootDN: $UPDATEDN
dn: olcDatabase={3}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {3}$BACKEND
${nullExclude}olcDbDirectory: $SM2_DIR/sm2ou1
olcSubordinate: TRUE
olcSuffix: ou=sm2ou1,$BASEDN
olcRootDN: ou=sm2ou1,$BASEDN
olcRootPW: $PASSWD
dn: olcDatabase={4}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {4}$BACKEND
${nullExclude}olcDbDirectory: $SM2_DIR/sm2ou2
olcSubordinate: TRUE
olcSuffix: ou=sm2ou2,$BASEDN
olcRootDN: ou=sm2ou1,$BASEDN
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapadd failed for site2 master database config ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Adding access rules on central master..."
$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: olcDatabase={-1}frontend,cn=config
changetype: modify
add: olcAccess
olcAccess: to dn.exact=dc=example,dc=com
by * read
olcAccess: to dn.subtree=ou=ou1,dc=example,dc=com
by * read
olcAccess: to dn.subtree=ou=ou2,dc=example,dc=com
by dn.exact=ou=ou1,dc=example,dc=com none
by dn.exact=ou=ou2,dc=example,dc=com read
by dn.exact=dc=example,dc=com none
by * read
olcAccess: to dn.subtree=ou=sm1ou1,dc=example,dc=com
by dn.exact=ou=ou1,dc=example,dc=com none
by dn.exact=ou=ou2,dc=example,dc=com read
by dn.exact=dc=example,dc=com none
by * read
olcAccess: to dn.subtree=ou=sm1ou2,dc=example,dc=com
by dn.exact=ou=ou1,dc=example,dc=com none
by dn.exact=ou=ou2,dc=example,dc=com none
by dn.exact=dc=example,dc=com read
by * read
olcAccess: to dn.subtree=ou=sm2ou1,dc=example,dc=com
by dn.exact=ou=ou1,dc=example,dc=com none
by dn.exact=ou=ou2,dc=example,dc=com none
by dn.exact=dc=example,dc=com none
by * read
olcAccess: to * by * read
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed for central master access config ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Adding access rules on site1 master..."
$LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: olcDatabase={-1}frontend,cn=config
changetype: modify
add: olcAccess
olcAccess: to dn.subtree=dc=example,dc=com
by * read
olcAccess: to * by * read
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed for site1 master access config ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Adding access rules on site2 master..."
$LDAPMODIFY -D cn=config -H $URI3 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: olcDatabase={-1}frontend,cn=config
changetype: modify
add: olcAccess
olcAccess: to dn.exact=dc=example,dc=com
by * read
olcAccess: to dn.subtree=ou=ou2,dc=example,dc=com
by * read
olcAccess: to dn.subtree=ou=sm1ou1,dc=example,dc=com
by users none
by * read
olcAccess: to dn.subtree=ou=sm2ou1,dc=example,dc=com
by * read
olcAccess: to dn.subtree=ou=sm2ou2,dc=example,dc=com
by dn.exact=dc=example,dc=com read
by users none
by * read
olcAccess: to * by * read
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed for site2 master access config ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Adding database config on central search..."
$LDAPADD -D cn=config -H $URI4 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: olcDatabase={1}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {1}$BACKEND
${nullExclude}olcDbDirectory: $SSC_DIR/db
olcSuffix: $BASEDN
olcRootDN: $UPDATEDN
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapadd failed for central search database config ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Adding database config on site1 search..."
$LDAPADD -D cn=config -H $URI5 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: olcDatabase={1}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {1}$BACKEND
${nullExclude}olcDbDirectory: $SS1_DIR/db
olcSuffix: $BASEDN
olcRootDN: $UPDATEDN
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapadd failed for site1 search database config ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Adding database config on site2 search..."
$LDAPADD -D cn=config -H $URI6 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: olcDatabase={1}$BACKEND,cn=config
objectClass: olcDatabaseConfig
${nullExclude}objectClass: olc${BACKEND}Config
olcDatabase: {1}$BACKEND
${nullExclude}olcDbDirectory: $SS2_DIR/db
olcSuffix: $BASEDN
olcRootDN: $UPDATEDN
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapadd failed for site2 search database config ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Populating central master..."
$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD <<EOF >> $TESTOUT 2>&1
dn: dc=example,dc=com
objectClass: top
objectClass: organization
objectClass: dcObject
dc: example
o: Example, Inc
userPassword: $PASSWD
dn: ou=ou1,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: ou1
userPassword: $PASSWD
dn: ou=ou2,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: ou2
userPassword: $PASSWD
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapadd failed to populate central master entry ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Adding syncrepl on site1 master..."
$LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: olcDatabase={4}$BACKEND,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=1 provider=$URI1 searchbase="$BASEDN"
binddn="ou=ou1,$BASEDN" bindmethod=simple credentials=$PASSWD
type=refreshAndPersist retry="$RETRY" timeout=1
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed to add syncrepl on site1 master ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Adding syncrepl on site2 master..."
$LDAPMODIFY -D cn=config -H $URI3 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: olcDatabase={5}$BACKEND,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=1 provider=$URI1 searchbase="$BASEDN"
binddn="ou=ou2,$BASEDN" bindmethod=simple credentials=$PASSWD
type=refreshAndPersist retry="$RETRY" timeout=1
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed to add syncrepl on site2 master ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
sleep 1
echo "Using ldapsearch to check that site1 master received changes..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI2 \
-s base -b "ou=ou1,$BASEDN" \
'(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check that site2 master received changes..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI3 \
-s base -b "ou=ou1,$BASEDN" \
'(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
sleep 1
echo "Populating site1 master..."
$LDAPADD -D "ou=sm1ou1,$BASEDN" -H $URI2 -w $PASSWD <<EOF >> $TESTOUT 2>&1
dn: ou=sm1ou1,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: sm1ou1
dn: ou=sm1ou2,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: sm1ou2
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapadd failed to populate site1 master ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
sleep 1
echo "Populating site2 master..."
$LDAPADD -D "ou=sm2ou1,$BASEDN" -H $URI3 -w $PASSWD <<EOF >> $TESTOUT 2>&1
dn: ou=sm2ou1,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: sm2ou1
dn: ou=sm2ou2,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: sm2ou2
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapadd failed to populate site2 master ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
ERRORS=0
echo "Stopping site1 master..."
kill -HUP "$SM1_PID"
wait "$SM1_PID"
KILLPIDS=`echo "$KILLPIDS " | sed -e "s/ $SM1_PID / /"`;
SM1_PID=
echo "Adding syncrepl on central master..."
$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: olcDatabase={3}$BACKEND,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=3 provider=$URI2 searchbase="ou=sm1ou1,$BASEDN"
binddn="ou=sm1ou1,$BASEDN" bindmethod=simple credentials=$PASSWD
type=refreshAndPersist retry="$RETRY" timeout=1
dn: olcDatabase={5}$BACKEND,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=5 provider=$URI3 searchbase="ou=sm2ou1,$BASEDN"
binddn="ou=sm2ou1,$BASEDN" bindmethod=simple credentials=$PASSWD
type=refreshAndPersist retry="$RETRY" timeout=1
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed to add syncrepl on central master ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
sleep 1
echo "Using ldapsearch to check that central master received site2 entries..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI1 \
-s base -b "ou=sm2ou1,$BASEDN" \
'(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapmodify to modify central master..."
$LDAPMODIFY -D "$MANAGERDN" -H $URI1 -w $PASSWD <<EOF >> $TESTOUT 2>&1
dn: dc=example,dc=com
changetype: modify
add: description
description: Modify$MNUM
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
if test -z "$SM1_PID" ; then
echo "Restarting site1 master slapd on TCP/IP port $PORT2..."
cd $SM1_DIR
$SLAPD -F slapd.d -h $URI2 -d $LVL $TIMING >> $LOG2 2>&1 &
SM1_PID=$!
if test $WAIT != 0 ; then
echo PID $SM1_PID
read foo
fi
KILLPIDS="$KILLPIDS $SM1_PID"
cd $TESTWD
sleep 1
fi
sleep 1
echo "Using ldapsearch to check that site1 master is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI2 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check that central master received site1 entries..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI1 \
-s base -b "ou=sm1ou1,$BASEDN" \
'(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check that site1 master received central master update..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI2 \
-s base -b "$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check that site2 master received central master update..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI3 \
-s base -b "$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Adding syncrepl consumer on central search..."
$LDAPMODIFY -D cn=config -H $URI4 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: olcDatabase={1}$BACKEND,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=1 provider=$URI1 searchbase="$BASEDN"
binddn="$BASEDN" bindmethod=simple credentials=$PASSWD
type=refreshAndPersist retry="$RETRY" timeout=1
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed to add syncrepl on site1 search ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Adding syncrepl consumer on site1 search..."
$LDAPMODIFY -D cn=config -H $URI5 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: olcDatabase={1}$BACKEND,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=1 provider=$URI2 searchbase="$BASEDN"
binddn="$BASEDN" bindmethod=simple credentials=$PASSWD
type=refreshAndPersist retry="$RETRY" timeout=1
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed to add syncrepl on site1 search ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Adding syncrepl consumer on site2 search..."
$LDAPMODIFY -D cn=config -H $URI6 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: olcDatabase={1}$BACKEND,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=1 provider=$URI3 searchbase="$BASEDN"
binddn="$BASEDN" bindmethod=simple credentials=$PASSWD
type=refreshAndPersist retry="$RETRY" timeout=1
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed to add syncrepl on site2 search ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
sleep 1
echo "Using ldapsearch to check that central search received changes..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI4 \
-s base -b "$BASEDN" \
'(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check that site1 search received changes..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI5 \
-s base -b "$BASEDN" \
'(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check that site2 search received changes..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI6 \
-s base -b "$BASEDN" \
'(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
cat > $TESTDIR/checkcsn.sh <<'EOF'
#!/bin/sh
CSN_ERRORS=0
CSN1=`$LDAPSEARCH -H $URI1 -b $BASEDN -s base contextCSN | grep contextCSN | sort`
CSN2=`$LDAPSEARCH -H $URI2 -b $BASEDN -s base contextCSN | grep contextCSN | sort`
CSN3=`$LDAPSEARCH -H $URI3 -b $BASEDN -s base contextCSN | grep contextCSN | sort`
CSN4=`$LDAPSEARCH -H $URI4 -b $BASEDN -s base contextCSN | grep contextCSN | sort`
CSN5=`$LDAPSEARCH -H $URI5 -b $BASEDN -s base contextCSN | grep contextCSN | sort`
CSN6=`$LDAPSEARCH -H $URI6 -b $BASEDN -s base contextCSN | grep contextCSN | sort`
if test -z "$CSN1" ; then
echo "ERROR: contextCSN empty on central master"
CSN_ERRORS=`expr $CSN_ERRORS + 1`
fi
nCSN=`echo "$CSN1" | wc -l`
if test "$nCSN" -ne 3 ; then
echo "ERROR: Wrong contextCSN count on central master, should be 3"
CSN_ERRORS=`expr $CSN_ERRORS + 1`
if test -n "$CSN_VERBOSE"; then
echo "$CSN1"
fi
fi
if test -z "$CSN2" -o "$CSN1" != "$CSN2" ; then
echo "ERROR: contextCSN mismatch between central master and site1 master"
CSN_ERRORS=`expr $CSN_ERRORS + 1`;
if test -n "$CSN_VERBOSE"; then
echo "contextCSN on central master:"
echo "$CSN1"
echo "contextCSN on site1 master:"
echo "$CSN2"
fi
fi
if test -z "$CSN3" -o "$CSN1" != "$CSN3" ; then
echo "ERROR: contextCSN mismatch between central master and site2 master"
CSN_ERRORS=`expr $CSN_ERRORS + 1`;
if test -n "$CSN_VERBOSE"; then
echo "contextCSN on central master:"
echo "$CSN1"
echo "contextCSN on site2 master:"
echo "$CSN3"
fi
fi
if test -z "$CSN4" -o "$CSN1" != "$CSN4" ; then
echo "ERROR: contextCSN mismatch between central master and central search"
CSN_ERRORS=`expr $CSN_ERRORS + 1`;
if test -n "$CSN_VERBOSE"; then
echo "contextCSN on central master:"
echo "$CSN1"
echo "contextCSN on central search:"
echo "$CSN4"
fi
fi
if test -z "$CSN5" -o "$CSN2" != "$CSN5" ; then
echo "ERROR: contextCSN mismatch between site1 master and site1 search"
CSN_ERRORS=`expr $CSN_ERRORS + 1`;
if test -n "$CSN_VERBOSE"; then
echo "contextCSN on site1 master:"
echo "$CSN2"
echo "contextCSN on site1 search:"
echo "$CSN5"
fi
fi
if test -z "$CSN6" -o "$CSN3" != "$CSN6" ; then
echo "ERROR: contextCSN mismatch between site2 master and site2 search:"
CSN_ERRORS=`expr $CSN_ERRORS + 1`;
if test -n "$CSN_VERBOSE"; then
echo "contextCSN on site2 master:"
echo "$CSN3"
echo "contextCSN on site2 search:"
echo "$CSN6"
fi
fi
if test $CSN_ERRORS != 0 ; then
echo "Stopping all servers to synchronize contextCSN..."
kill -HUP $KILLPIDS
for pid in $KILLPIDS ; do wait $pid ; done
KILLPIDS=
echo "Restarting site1 master slapd on TCP/IP port $PORT2..."
cd $SM1_DIR
$SLAPD -F slapd.d -h $URI2 -d $LVL $TIMING >> $LOG2 2>&1 &
SM1_PID=$!
if test $WAIT != 0 ; then
echo PID $SM1_PID
read foo
fi
KILLPIDS="$KILLPIDS $SM1_PID"
cd $TESTWD
sleep 1
echo "Using ldapsearch to check that site1 master is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI2 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Restarting site2 master slapd on TCP/IP port $PORT3..."
cd $SM2_DIR
$SLAPD -F slapd.d -h $URI3 -d $LVL $TIMING >> $LOG3 2>&1 &
SM2_PID=$!
if test $WAIT != 0 ; then
echo PID $SM2_PID
read foo
fi
KILLPIDS="$KILLPIDS $SM2_PID "
cd $TESTWD
sleep 1
echo "Using ldapsearch to check that site2 master is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI3 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Restarting central master slapd on TCP/IP port $PORT1..."
cd $SMC_DIR
$SLAPD -F slapd.d -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 &
SMC_PID=$!
if test $WAIT != 0 ; then
echo PID $SMC_PID
read foo
fi
KILLPIDS="$KILLPIDS $SMC_PID"
cd $TESTWD
sleep 1
echo "Using ldapsearch to check that central master slapd is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI1 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Sleeping 5 seconds to allow contextCSN to synchronize..."
sleep 5
echo "Stopping site1 and site2 master..."
kill -HUP $SM1_PID $SM2_PID
for pid in $SM1_PID $SM2_PID ; do wait $pid ; done
KILLPIDS=" $SMC_PID"
echo "Restarting site1 master slapd on TCP/IP port $PORT2..."
cd $SM1_DIR
$SLAPD -F slapd.d -h $URI2 -d $LVL $TIMING >> $LOG2 2>&1 &
SM1_PID=$!
if test $WAIT != 0 ; then
echo PID $SM1_PID
read foo
fi
KILLPIDS="$KILLPIDS $SM1_PID"
cd $TESTWD
sleep 1
echo "Using ldapsearch to check that site1 master is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI2 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Restarting site2 master slapd on TCP/IP port $PORT3..."
cd $SM2_DIR
$SLAPD -F slapd.d -h $URI3 -d $LVL $TIMING >> $LOG3 2>&1 &
SM2_PID=$!
if test $WAIT != 0 ; then
echo PID $SM2_PID
read foo
fi
KILLPIDS="$KILLPIDS $SM2_PID"
cd $TESTWD
sleep 1
echo "Using ldapsearch to check that site2 master is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI3 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Sleeping 5 seconds to allow contextCSN to synchronize..."
sleep 5
echo "Restarting central search slapd on TCP/IP port $PORT4..."
cd $SSC_DIR
$SLAPD -F slapd.d -h $URI4 -d $LVL $TIMING >> $LOG4 2>&1 &
SSC_PID=$!
if test $WAIT != 0 ; then
echo PID $SSC_PID
read foo
fi
KILLPIDS="$KILLPIDS $SSC_PID"
cd $TESTWD
sleep 1
echo "Using ldapsearch to check that central search slapd is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI4 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Restarting site1 search slapd on TCP/IP port $PORT5..."
cd $SS1_DIR
$SLAPD -F slapd.d -h $URI5 -d $LVL $TIMING >> $LOG5 2>&1 &
SS1_PID=$!
if test $WAIT != 0 ; then
echo PID $SS1_PID
read foo
fi
KILLPIDS="$KILLPIDS $SS1_PID"
cd $TESTWD
sleep 1
echo "Using ldapsearch to check that site1 search slapd is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI5 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Restarting site2 search slapd on TCP/IP port $PORT6..."
cd $SS2_DIR
$SLAPD -F slapd.d -h $URI6 -d $LVL $TIMING >> $LOG6 2>&1 &
SS2_PID=$!
if test $WAIT != 0 ; then
echo PID $SS2_PID
read foo
fi
KILLPIDS="$KILLPIDS $SS2_PID"
cd $TESTWD
sleep 1
echo "Using ldapsearch to check that site2 search slapd is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI6 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Sleeping 5 seconds to allow contextCSN to synchronize..."
sleep 5
echo "Checking contextCSN after restart..."
CSN1=`$LDAPSEARCH -H $URI1 -b $BASEDN -s base contextCSN | grep contextCSN | sort`
CSN2=`$LDAPSEARCH -H $URI2 -b $BASEDN -s base contextCSN | grep contextCSN | sort`
CSN3=`$LDAPSEARCH -H $URI3 -b $BASEDN -s base contextCSN | grep contextCSN | sort`
CSN4=`$LDAPSEARCH -H $URI4 -b $BASEDN -s base contextCSN | grep contextCSN | sort`
CSN5=`$LDAPSEARCH -H $URI5 -b $BASEDN -s base contextCSN | grep contextCSN | sort`
CSN6=`$LDAPSEARCH -H $URI6 -b $BASEDN -s base contextCSN | grep contextCSN | sort`
if test -z "$CSN1" ; then
echo "ERROR: contextCSN empty on central master"
CSN_ERRORS=`expr $CSN_ERRORS + 1`
fi
if test -z "$CSN2" -o "$CSN1" != "$CSN2" ; then
echo "ERROR: contextCSN mismatch between central master and site1 master"
CSN_ERRORS=`expr $CSN_ERRORS + 1`;
if test -n "$CSN_VERBOSE"; then
echo "contextCSN on central master:"
echo "$CSN1"
echo "contextCSN on site1 master:"
echo "$CSN2"
fi
fi
if test -z "$CSN3" -o "$CSN1" != "$CSN3" ; then
echo "ERROR: contextCSN mismatch between central master and site2 master"
CSN_ERRORS=`expr $CSN_ERRORS + 1`;
if test -n "$CSN_VERBOSE"; then
echo "contextCSN on central master:"
echo "$CSN1"
echo "contextCSN on site2 master:"
echo "$CSN3"
fi
fi
if test -z "$CSN4" -o "$CSN1" != "$CSN4" ; then
echo "ERROR: contextCSN mismatch between central master and central search"
CSN_ERRORS=`expr $CSN_ERRORS + 1`;
if test -n "$CSN_VERBOSE"; then
echo "contextCSN on central master:"
echo "$CSN1"
echo "contextCSN on central search:"
echo "$CSN4"
fi
fi
if test -z "$CSN5" -o "$CSN2" != "$CSN5" ; then
echo "ERROR: contextCSN mismatch between site1 master and site1 search"
CSN_ERRORS=`expr $CSN_ERRORS + 1`;
if test -n "$CSN_VERBOSE"; then
echo "contextCSN on site1 master:"
echo "$CSN2"
echo "contextCSN on site1 search:"
echo "$CSN5"
fi
fi
if test -z "$CSN6" -o "$CSN3" != "$CSN6" ; then
echo "ERROR: contextCSN mismatch between site2 master and site2 search:"
CSN_ERRORS=`expr $CSN_ERRORS + 1`;
if test -n "$CSN_VERBOSE"; then
echo "contextCSN on site2 master:"
echo "$CSN3"
echo "contextCSN on site2 search:"
echo "$CSN6"
fi
fi
fi
ERRORS=`expr $ERRORS + $CSN_ERRORS`
EOF
test $BACKEND = null && echo : > $TESTDIR/checkcsn.sh
chmod +x $TESTDIR/checkcsn.sh
echo "Checking contextCSN after initial replication..."
. $TESTDIR/checkcsn.sh
echo "Using ldapmodify to modify first backend on central master..."
$LDAPMODIFY -D "$MANAGERDN" -H $URI1 -w $PASSWD <<EOF >> $TESTOUT 2>&1
dn: ou=ou1,dc=example,dc=com
changetype: modify
add: description
description: Modify$MNUM
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
sleep 1
echo "Using ldapsearch to check replication to central search..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI4 \
-s base -b "ou=ou1,$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check replication to site1 search..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI5 \
-s base -b "ou=ou1,$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check replication to site2 search..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI6 \
-s base -b "ou=ou1,$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Checking contextCSN after modify of first backend on central master..."
. $TESTDIR/checkcsn.sh
MNUM=`expr $MNUM + 1`
echo "Using ldapmodify to modify second backend on central master..."
$LDAPMODIFY -D "$MANAGERDN" -H $URI1 -w $PASSWD <<EOF >> $TESTOUT 2>&1
dn: ou=ou2,dc=example,dc=com
changetype: modify
add: description
description: Modify$MNUM
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
sleep 1
echo "Using ldapsearch to check replication to site2 search..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI6 \
-s base -b "ou=ou2,$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check no replication to site1 master..."
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI2 \
-s base -b "ou=ou2,$BASEDN" \
"(description=Modify$NMUM)" 2>&1 | awk '/^dn:/ {print "NOK"}'`
if test "x$RESULT" = "xNOK" ; then
echo "Change was replicated to site1 search!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit 1
fi
sleep 1
done
echo "Using ldapsearch to check no replication to central search..."
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI4 \
-s base -b "ou=ou2,$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "NOK"}'`
if test "x$RESULT" = "xNOK" ; then
echo "Change was replicated to central search!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit 1
fi
sleep 1
done
echo "Checking contextCSN after modify of second backend on central master..."
. $TESTDIR/checkcsn.sh
MNUM=`expr $MNUM + 1`
echo "Using ldapmodify to modify first backend on site1 master..."
$LDAPMODIFY -D "ou=sm1ou1,$BASEDN" -H $URI2 -w $PASSWD <<EOF >> $TESTOUT 2>&1
dn: ou=sm1ou1,dc=example,dc=com
changetype: modify
add: description
description: Modify$MNUM
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
sleep 1
echo "Using ldapsearch to check replication to site1 search..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI5 \
-s base -b "ou=sm1ou1,$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check replication to site2 master..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI3 \
-s base -b "ou=sm1ou1,$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check no replication to site2 search..."
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI6 \
-s base -b "ou=sm1ou2,$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "NOK"}'`
if test "x$RESULT" = "xNOK" ; then
echo "Change was replicated to central search!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit 1
fi
sleep 1
done
echo "Using ldapsearch to check no replication to central search..."
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI4 \
-s base -b "ou=sm1ou2,$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "NOK"}'`
if test "x$RESULT" = "xNOK" ; then
echo "Change was replicated to central search!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit 1
fi
sleep 1
done
echo "Checking contextCSN after modify of first backend on site1 master..."
. $TESTDIR/checkcsn.sh
MNUM=`expr $MNUM + 1`
echo "Using ldapmodify to modify second backend on site1 master..."
$LDAPMODIFY -D "ou=sm1ou1,$BASEDN" -H $URI2 -w $PASSWD <<EOF >> $TESTOUT 2>&1
dn: ou=sm1ou2,dc=example,dc=com
changetype: modify
add: description
description: Modify$MNUM
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
sleep 1
echo "Using ldapsearch to check replication to site1 search..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI5 \
-s base -b "ou=sm1ou2,$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check no replication to central master..."
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI1 \
-s base -b "ou=sm1ou2,$BASEDN" \
"(description=Modify$NMUM)" 2>&1 | awk '/^dn:/ {print "NOK"}'`
if test "x$RESULT" = "xNOK" ; then
echo "Change was replicated to site2 search!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit 1
fi
sleep 1
done
echo "Checking contextCSN after modify of second backend on site1 master..."
. $TESTDIR/checkcsn.sh
MNUM=`expr $MNUM + 1`
echo "Using ldapmodify to modify first backend on site2 master..."
$LDAPMODIFY -D "ou=sm2ou1,$BASEDN" -H $URI3 -w $PASSWD <<EOF >> $TESTOUT 2>&1
dn: ou=sm2ou1,dc=example,dc=com
changetype: modify
add: description
description: Modify$MNUM
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
sleep 1
echo "Using ldapsearch to check replication to central master..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI1 \
-s base -b "ou=sm2ou1,$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check replication to site2 search..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI6 \
-s base -b "ou=sm2ou1,$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check no replication to site1 master..."
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI2 \
-s base -b "ou=sm2ou1,$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "NOK"}'`
if test "x$RESULT" = "xNOK" ; then
echo "Change was replicated to site2 search!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit 1
fi
sleep 1
done
echo "Using ldapsearch to check no replication to central search..."
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI4 \
-s base -b "ou=sm2ou1,$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "NOK"}'`
if test "x$RESULT" = "xNOK" ; then
echo "Change was replicated to site2 search!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit 1
fi
sleep 1
done
echo "Checking contextCSN after modify of first backend on site2 master..."
. $TESTDIR/checkcsn.sh
MNUM=`expr $MNUM + 1`
echo "Using ldapmodify to modify second backend on site2 master..."
$LDAPMODIFY -D "ou=sm2ou1,$BASEDN" -H $URI3 -w $PASSWD <<EOF >> $TESTOUT 2>&1
dn: ou=sm2ou2,dc=example,dc=com
changetype: modify
add: description
description: Modify$MNUM
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
sleep 1
echo "Using ldapsearch to check replication to site2 search..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI6 \
-s base -b "ou=sm2ou2,$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check no replication to central master..."
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI4 \
-s base -b "ou=sm2ou2,$BASEDN" \
"(description=Modify$MNUM)" 2>&1 | awk '/^dn:/ {print "NOK"}'`
if test "x$RESULT" = "xNOK" ; then
echo "Change was replicated to central search!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit 1
fi
sleep 1
done
echo "Checking contextCSN after modify of second backend on site2 master..."
. $TESTDIR/checkcsn.sh
echo "Stopping central master and site2 servers to test start with emtpy db..."
kill -HUP $SMC_PID $SM2_PID $SS2_PID
for pid in $SMC_PID $SM2_PID $SS2_PID; do wait $pid ; done
KILLPIDS=`echo "$KILLPIDS " | sed -e "s/ $SMC_PID / /"`;
KILLPIDS=`echo "$KILLPIDS " | sed -e "s/ $SM2_PID / /"`;
KILLPIDS=`echo "$KILLPIDS " | sed -e "s/ $SS2_PID / /"`;
SMC_PID=
SM2_PID=
SS2_PID=
rm -rf $SM2_DIR/db/*
rm -rf $SS2_DIR/db/*
echo "Starting site2 master slapd on TCP/IP port $PORT3..."
cd $SM2_DIR
$SLAPD -F slapd.d -h $URI3 -d $LVL $TIMING >> $LOG3 2>&1 &
SM2_PID=$!
if test $WAIT != 0 ; then
echo PID $SM2_PID
read foo
fi
KILLPIDS="$KILLPIDS $SM2_PID"
cd $TESTWD
sleep 1
echo "Using ldapsearch to check that site2 master slapd is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI3 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Starting site2 search slapd on TCP/IP port $PORT6..."
cd $SS2_DIR
$SLAPD -F slapd.d -h $URI6 -d $LVL $TIMING >> $LOG6 2>&1 &
SS2_PID=$!
if test $WAIT != 0 ; then
echo PID $SS2_PID
read foo
fi
KILLPIDS="$KILLPIDS $SS2_PID"
cd $TESTWD
sleep 1
echo "Using ldapsearch to check that site2 search slapd is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI6 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Starting central master slapd on TCP/IP port $PORT1..."
cd $SMC_DIR
$SLAPD -F slapd.d -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 &
SMC_PID=$!
if test $WAIT != 0 ; then
echo PID $SMC_PID
read foo
fi
KILLPIDS="$KILLPIDS $SMC_PID"
cd $TESTWD
sleep 1
echo "Using ldapsearch to check that central master slapd is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI1 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check that site2 master received base..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI3 \
-s base -b "$BASEDN" \
'(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check that site2 search received base..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI6 \
-s base -b "$BASEDN" \
'(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
sleep $SLEEP1
echo "Checking contextCSN after site2 servers repopulated..."
. $TESTDIR/checkcsn.sh
if test $ERRORS -ne 0; then
test $KILLSERVERS != no && kill -HUP $KILLPIDS
echo "Found $ERRORS errors"
exit $ERRORS
fi
echo "Adding syncrepl of second site1 master backend on central master..."
$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: olcDatabase={4}$BACKEND,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=4 provider=$URI2 searchbase="ou=sm1ou2,$BASEDN"
binddn="ou=sm1ou1,$BASEDN" bindmethod=simple credentials=$PASSWD
type=refreshAndPersist retry="$RETRY" timeout=1
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapmodify failed to add syncrepl on central master ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
sleep 1
echo "Using ldapsearch to check that central master received second site1 backend..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI1 \
-s base -b "ou=sm1ou2,$BASEDN" \
'(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ERROR: Second site1 backend not replicated to central master"
ERRORS=`expr $ERRORS + 1`
echo "Restarting central master slapd on TCP/IP port $PORT1..."
kill -HUP $SMC_PID
wait $SMC_PID
KILLPIDS=`echo "$KILLPIDS " | sed -e "s/ $SMC_PID / /"`;
cd $SMC_DIR
$SLAPD -F slapd.d -h $URI1 -c rid=4,csn=0 -d $LVL $TIMING >> $LOG1 2>&1 &
SMC_PID=$!
if test $WAIT != 0 ; then
echo PID $SMC_PID
read foo
fi
KILLPIDS="$KILLPIDS $SMC_PID"
cd $TESTWD
echo "Using ldapsearch to check that central master slapd is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI1 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check that central master received second site1 backend..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI1 \
-s base -b "ou=sm1ou2,$BASEDN" \
'(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
fi
echo "Using ldapsearch to check that central search received second site1 backend..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI4 \
-s base -b "ou=sm1ou2,$BASEDN" \
'(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ERROR: Second site1 backend not replicated to central search"
ERRORS=`expr $ERRORS + 1`
echo "Restarting central search slapd on TCP/IP port $PORT4..."
kill -HUP $SSC_PID
wait $SSC_PID
KILLPIDS=`echo "$KILLPIDS " | sed -e "s/ $SSC_PID / /"`;
cd $SSC_DIR
$SLAPD -F slapd.d -h $URI4 -c rid=1,csn=0 -d $LVL $TIMING >> $LOG4 2>&1 &
SSC_PID=$!
if test $WAIT != 0 ; then
echo PID $SSC_PID
read foo
fi
KILLPIDS="$KILLPIDS $SSC_PID"
cd $TESTWD
echo "Using ldapsearch to check that central search slapd is running..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "" -H $URI4 \
'objectclass=*' > /dev/null 2>&1
RC=$?
test $RC = 0 && break
echo "Waiting $i seconds for slapd to start..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Using ldapsearch to check that central search received second site1 backend..."
RC=32
for i in 1 2 3 4 5; do
RESULT=`$LDAPSEARCH -H $URI4 \
-s base -b "ou=sm1ou2,$BASEDN" \
'(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
if test "x$RESULT$nullOK" = "xOK" ; then
RC=0
break
fi
echo "Waiting $i seconds for syncrepl to receive changes..."
sleep $i
done
if test $RC != 0 ; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
fi
test -z "$RACE_TESTS" && RACE_TESTS=10
RACE_NUM=0
RACE_ERROR=0
SUB_DN=ou=sub,ou=sm1ou2,dc=example,dc=com
while test $RACE_ERROR -eq 0 -a $RACE_NUM -lt $RACE_TESTS ; do
RACE_NUM=`expr $RACE_NUM + 1`
echo "Running $RACE_NUM of $RACE_TESTS syncrepl race tests..."
echo "Stopping central master..."
kill -HUP $SMC_PID
wait $SMC_PID
KILLPIDS=`echo "$KILLPIDS " | sed -e "s/ $SMC_PID / /"`;
MNUM=`expr $MNUM + 1`
echo "Using ldapadd to add entry on site1 master..."
$LDAPADD -D "ou=sm1ou1,$BASEDN" -H $URI2 -w $PASSWD <<EOF >> $TESTOUT 2>&1
dn: $SUB_DN
objectClass: top
objectClass: organizationalUnit
ou: sub
EOF
RC=$?
if test $RC != 0 ; then
echo "ldapadd failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Starting central master again..."
cd $SMC_DIR
$SLAPD -F slapd.d -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 &
SMC_PID=$!
KILLPIDS="$KILLPIDS $SMC_PID"
cd $TESTWD
echo "Using ldapsearch to check that central master received entry..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "$SUB_DN" -H $URI1 > /dev/null 2>&1
RC=$?
test $RC = 0 && break
sleep $i
done
if test $RC != 0 ; then
echo "ERROR: entry not replicated to central master!"
RACE_ERROR=1
break
fi
echo "Using ldapsearch to check that central search received entry..."
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "$SUB_DN" -H $URI4 > /dev/null 2>&1
RC=$?
test $RC = 0 && break
sleep $i
done
if test $RC != 0 ; then
echo "ERROR: entry not replicated to central master!"
RACE_ERROR=1
break
fi
echo "Stopping central master..."
kill -HUP $SMC_PID
wait $SMC_PID
KILLPIDS=`echo "$KILLPIDS " | sed -e "s/ $SMC_PID / /"`;
echo "Using ldapdelete to delete entry on site1 master..."
$LDAPDELETE -D "ou=sm1ou1,$BASEDN" -H $URI2 -w $PASSWD "$SUB_DN"
RC=$?
if test $RC != 0 ; then
echo "ldapdelete failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "Starting central master again..."
cd $SMC_DIR
$SLAPD -F slapd.d -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 &
SMC_PID=$!
KILLPIDS="$KILLPIDS $SMC_PID"
cd $TESTWD
echo "Using ldapsearch to check that entry was deleted on central master..."
RC=0
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "$SUB_DN" -H $URI1 > /dev/null 2>&1
RC=$?
if test $RC = $wantNoObj; then break; fi
sleep $i
done
if test $RC != $wantNoObj; then
if test $RC != 0; then
echo "ldapsearch failed ($RC)!"
test $KILLSERVERS != no && kill -HUP $KILLPIDS
exit $RC
fi
echo "ERROR: Entry not removed on central master!"
RACE_ERROR=1
break
fi
echo "Using ldapsearch to check that entry was deleted on central search..."
RC=0
for i in 1 2 3 4 5; do
$LDAPSEARCH -s base -b "$SUB_DN" -H $URI4 > /dev/null 2>&1
RC=$?
if test $RC != 0; then break; fi
sleep $i
done
if test $RC != $wantNoObj; then
echo "ERROR: Entry not removed on central search! (RC=$RC)"
RACE_ERROR=1
break
fi
done
if test $RACE_ERROR != 0; then
echo "Race error found after $RACE_NUM of $RACE_TESTS iterations"
ERRORS=`expr $ERRORS + $RACE_ERROR`
else
echo "No race errors found after $RACE_TESTS iterations"
fi
test $KILLSERVERS != no && kill -HUP $KILLPIDS
if test $ERRORS -ne 0; then
echo "Found $ERRORS errors"
echo ">>>>>> Exiting with a false success status for now"
exit 0
fi
echo ">>>>> Test succeeded"
exit 0