Home | History | Annotate | Line # | Download | only in scripts
test049-sync-config revision 1.1.1.4
      1 #! /bin/sh
      2 # $OpenLDAP$
      3 ## This work is part of OpenLDAP Software <http://www.openldap.org/>.
      4 ##
      5 ## Copyright 1998-2014 The OpenLDAP Foundation.
      6 ## All rights reserved.
      7 ##
      8 ## Redistribution and use in source and binary forms, with or without
      9 ## modification, are permitted only as authorized by the OpenLDAP
     10 ## Public License.
     11 ##
     12 ## A copy of this license is available in the file LICENSE in the
     13 ## top-level directory of the distribution or, alternatively, at
     14 ## <http://www.OpenLDAP.org/license.html>.
     15 
     16 echo "running defines.sh"
     17 . $SRCDIR/scripts/defines.sh
     18 
     19 if test $SYNCPROV = syncprovno; then 
     20 	echo "Syncrepl provider overlay not available, test skipped"
     21 	exit 0
     22 fi 
     23 
     24 PRODIR=$TESTDIR/pro
     25 CONDIR=$TESTDIR/con1
     26 DBPRO=$PRODIR/db
     27 DBCON=$CONDIR/db
     28 CFPRO=$PRODIR/slapd.d
     29 CFCON=$CONDIR/slapd.d
     30 
     31 mkdir -p $TESTDIR $PRODIR $CONDIR $DBPRO $DBCON $CFPRO $CFCON
     32 
     33 $SLAPPASSWD -g -n >$CONFIGPWF
     34 
     35 if test x"$SYNCMODE" = x ; then
     36 	SYNCMODE=rp
     37 fi
     38 case "$SYNCMODE" in
     39 	ro)
     40 		SYNCTYPE="type=refreshOnly interval=00:00:00:03"
     41 		;;
     42 	rp)
     43 		SYNCTYPE="type=refreshAndPersist"
     44 		;;
     45 	*)
     46 		echo "unknown sync mode $SYNCMODE"
     47 		exit 1;
     48 		;;
     49 esac
     50 
     51 #
     52 # Test replication of dynamic config:
     53 # - start provider
     54 # - start consumer
     55 # - configure over ldap
     56 # - populate over ldap
     57 # - configure syncrepl over ldap
     58 # - retrieve database over ldap and compare against expected results
     59 #
     60 
     61 echo "Starting provider slapd on TCP/IP port $PORT1..."
     62 . $CONFFILTER $BACKEND $MONITORDB < $DYNAMICCONF > $CONFLDIF
     63 $SLAPADD -F $CFPRO -n 0 -l $CONFLDIF
     64 cd $PRODIR
     65 $SLAPD -F ./slapd.d -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
     66 PID=$!
     67 if test $WAIT != 0 ; then
     68     echo PID $PID
     69     read foo
     70 fi
     71 KILLPIDS="$PID"
     72 cd $TESTWD
     73 
     74 sleep 1
     75 
     76 echo "Using ldapsearch to check that provider slapd is running..."
     77 for i in 0 1 2 3 4 5; do
     78 	$LDAPSEARCH -s base -b "" -H $URI1 \
     79 		'objectclass=*' > /dev/null 2>&1
     80 	RC=$?
     81 	if test $RC = 0 ; then
     82 		break
     83 	fi
     84 	echo "Waiting 5 seconds for slapd to start..."
     85 	sleep 5
     86 done
     87 
     88 if test $RC != 0 ; then
     89 	echo "ldapsearch failed ($RC)!"
     90 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
     91 	exit $RC
     92 fi
     93 
     94 echo "Inserting syncprov overlay on provider..."
     95 if [ "$SYNCPROV" = syncprovmod ]; then
     96 	$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1
     97 dn: cn=module,cn=config
     98 objectClass: olcModuleList
     99 cn: module
    100 olcModulePath: $TESTWD/../servers/slapd/overlays
    101 olcModuleLoad: syncprov.la
    102 EOF
    103 	RC=$?
    104 	if test $RC != 0 ; then
    105 		echo "ldapadd failed for moduleLoad ($RC)!"
    106 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    107 		exit $RC
    108 	fi
    109 fi
    110 read CONFIGPW < $CONFIGPWF
    111 $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
    112 dn: olcDatabase={0}config,cn=config
    113 changetype: modify
    114 add: olcSyncRepl
    115 olcSyncRepl: rid=001 provider=$URI1 binddn="cn=config" bindmethod=simple
    116   credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
    117   retry="3 5 300 5" timeout=3
    118 -
    119 add: olcUpdateRef
    120 olcUpdateRef: $URI1
    121 
    122 dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config
    123 changetype: add
    124 objectClass: olcOverlayConfig
    125 objectClass: olcSyncProvConfig
    126 olcOverlay: syncprov
    127 EOF
    128 RC=$?
    129 if test $RC != 0 ; then
    130 	echo "ldapmodify failed for syncrepl config ($RC)!"
    131 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    132 	exit $RC
    133 fi
    134 
    135 echo "Starting consumer slapd on TCP/IP port $PORT2..."
    136 $SLAPADD -F $CFCON -n 0 -l $CONFLDIF
    137 cd $CONDIR
    138 $SLAPD -F ./slapd.d -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 &
    139 SLAVEPID=$!
    140 if test $WAIT != 0 ; then
    141     echo SLAVEPID $SLAVEPID
    142     read foo
    143 fi
    144 KILLPIDS="$KILLPIDS $SLAVEPID"
    145 cd $TESTWD
    146 
    147 sleep 1
    148 
    149 echo "Using ldapsearch to check that consumer slapd is running..."
    150 for i in 0 1 2 3 4 5; do
    151 	$LDAPSEARCH -s base -b "" -H $URI2 \
    152 		'objectclass=*' > /dev/null 2>&1
    153 	RC=$?
    154 	if test $RC = 0 ; then
    155 		break
    156 	fi
    157 	echo "Waiting 5 seconds for slapd to start..."
    158 	sleep 5
    159 done
    160 
    161 if test $RC != 0 ; then
    162 	echo "ldapsearch failed ($RC)!"
    163 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    164 	exit $RC
    165 fi
    166 
    167 echo "Configuring syncrepl on consumer..."
    168 $LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1
    169 dn: olcDatabase={0}config,cn=config
    170 changetype: modify
    171 add: olcSyncRepl
    172 olcSyncRepl: rid=001 provider=$URI1 binddn="cn=config" bindmethod=simple
    173   credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
    174   retry="3 5 300 5" timeout=3
    175 -
    176 add: olcUpdateRef
    177 olcUpdateRef: $URI1
    178 EOF
    179 
    180 echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
    181 sleep $SLEEP1
    182 
    183 echo "Using ldapsearch to check that syncrepl received config changes..."
    184 RC=32
    185 for i in 0 1 2 3 4 5; do
    186 	RESULT=`$LDAPSEARCH -H $URI2 -D cn=config -y $CONFIGPWF \
    187 		-s base -b "olcDatabase={0}config,cn=config" \
    188 		'(olcUpdateRef=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
    189 	if test "x$RESULT" = "xOK" ; then
    190 		RC=0
    191 		break
    192 	fi
    193 	echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
    194 	sleep $SLEEP1
    195 done
    196 
    197 if test $RC != 0 ; then
    198 	echo "ldapsearch failed ($RC)!"
    199 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    200 	exit $RC
    201 fi
    202 
    203 echo "Adding schema and databases on provider..."
    204 $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1
    205 include: file://$ABS_SCHEMADIR/core.ldif
    206 
    207 include: file://$ABS_SCHEMADIR/cosine.ldif
    208 
    209 include: file://$ABS_SCHEMADIR/inetorgperson.ldif
    210 
    211 include: file://$ABS_SCHEMADIR/openldap.ldif
    212 
    213 include: file://$ABS_SCHEMADIR/nis.ldif
    214 EOF
    215 RC=$?
    216 if test $RC != 0 ; then
    217 	echo "ldapadd failed for schema config ($RC)!"
    218 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    219 	exit $RC
    220 fi
    221 
    222 nullExclude="" nullOK=""
    223 test $BACKEND = null && nullExclude="# " nullOK="OK"
    224 
    225 if [ "$BACKENDTYPE" = mod ]; then
    226 	$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1
    227 dn: cn=module,cn=config
    228 objectClass: olcModuleList
    229 cn: module
    230 olcModulePath: $TESTWD/../servers/slapd/back-$BACKEND
    231 olcModuleLoad: back_$BACKEND.la
    232 EOF
    233 	RC=$?
    234 	if test $RC != 0 ; then
    235 		echo "ldapadd failed for backend config ($RC)!"
    236 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    237 		exit $RC
    238 	fi
    239 fi
    240 
    241 $LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1
    242 dn: olcDatabase={1}$BACKEND,cn=config
    243 objectClass: olcDatabaseConfig
    244 ${nullExclude}objectClass: olc${BACKEND}Config
    245 olcDatabase: {1}$BACKEND
    246 olcSuffix: $BASEDN
    247 ${nullExclude}olcDbDirectory: ./db
    248 olcRootDN: $MANAGERDN
    249 olcRootPW: $PASSWD
    250 olcSyncRepl: rid=002 provider=$URI1 binddn="$MANAGERDN" bindmethod=simple
    251   credentials=$PASSWD searchbase="$BASEDN" $SYNCTYPE
    252   retry="3 5 300 5" timeout=3
    253 olcUpdateRef: $URI1
    254 
    255 dn: olcOverlay=syncprov,olcDatabase={1}${BACKEND},cn=config
    256 changetype: add
    257 objectClass: olcOverlayConfig
    258 objectClass: olcSyncProvConfig
    259 olcOverlay: syncprov
    260 EOF
    261 RC=$?
    262 if test $RC != 0 ; then
    263 	echo "ldapadd failed for database config ($RC)!"
    264 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    265 	exit $RC
    266 fi
    267 
    268 if test $INDEXDB = indexdb ; then
    269 	$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1
    270 dn: olcDatabase={1}$BACKEND,cn=config
    271 changetype: modify
    272 add: olcDbIndex
    273 olcDbIndex: objectClass,entryUUID,entryCSN eq
    274 olcDbIndex: cn,uid pres,eq,sub
    275 EOF
    276 	RC=$?
    277 	if test $RC != 0 ; then
    278 		echo "ldapadd modify for database config ($RC)!"
    279 		test $KILLSERVERS != no && kill -HUP $KILLPIDS
    280 		exit $RC
    281 	fi
    282 fi
    283 
    284 echo "Using ldapadd to populate provider..."
    285 $LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD -f $LDIFORDERED \
    286 	>> $TESTOUT 2>&1
    287 RC=$?
    288 if test $RC != 0 ; then
    289 	echo "ldapadd failed for database config ($RC)!"
    290 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    291 	exit $RC
    292 fi
    293 
    294 echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
    295 sleep $SLEEP1
    296 
    297 echo "Using ldapsearch to check that syncrepl received database changes..."
    298 RC=32
    299 for i in 0 1 2 3 4 5; do
    300 	RESULT=`$LDAPSEARCH -H $URI2 \
    301 		-s base -b "cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com" \
    302 		'(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
    303 	if test "x$RESULT$nullOK" = "xOK" ; then
    304 		RC=0
    305 		break
    306 	fi
    307 	echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
    308 	sleep $SLEEP1
    309 done
    310 
    311 if test $RC != 0 ; then
    312 	echo "ldapsearch failed ($RC)!"
    313 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    314 	exit $RC
    315 fi
    316 
    317 echo "Replacing olcSyncrepl on provider..."
    318 $LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
    319 dn: olcDatabase={0}config,cn=config
    320 changetype: modify
    321 replace: olcSyncRepl
    322 olcSyncRepl: rid=002 provider=$URI1 binddn="cn=config" bindmethod=simple
    323   credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
    324   retry="3 5 300 5" timeout=3
    325 EOF
    326 echo "Waiting $SLEEP1 seconds for syncrepl to receive changes..."
    327 sleep $SLEEP1
    328 
    329 echo "Using ldapsearch to read config from the provider..."
    330 $LDAPSEARCH -b cn=config -D cn=config -H $URI1 -y $CONFIGPWF  \
    331 	'objectclass=*' > $MASTEROUT 2>&1
    332 RC=$?
    333 
    334 if test $RC != 0 ; then
    335 	echo "ldapsearch failed at provider ($RC)!"
    336 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    337 	exit $RC
    338 fi
    339 
    340 echo "Using ldapsearch to read config from the consumer..."
    341 $LDAPSEARCH -b cn=config -D cn=config -H $URI2 -y $CONFIGPWF \
    342 	'objectclass=*' > $SLAVEOUT 2>&1
    343 RC=$?
    344 
    345 if test $RC != 0 ; then
    346 	echo "ldapsearch failed at consumer ($RC)!"
    347 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    348 	exit $RC
    349 fi
    350 
    351 echo "Filtering provider results..."
    352 $LDIFFILTER < $MASTEROUT > $MASTERFLT
    353 echo "Filtering consumer results..."
    354 $LDIFFILTER < $SLAVEOUT > $SLAVEFLT
    355 
    356 echo "Comparing retrieved configs from provider and consumer..."
    357 $CMP $MASTERFLT $SLAVEFLT > $CMPOUT
    358 
    359 if test $? != 0 ; then
    360 	echo "test failed - provider and consumer configs differ"
    361 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    362 	exit 1
    363 fi
    364 
    365 echo "Using ldapsearch to read all the entries from the provider..."
    366 $LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI1 -w $PASSWD  \
    367 	'objectclass=*' > $MASTEROUT 2>&1
    368 RC=$?
    369 
    370 if test $RC != 0 ; then
    371 	echo "ldapsearch failed at provider ($RC)!"
    372 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    373 	exit $RC
    374 fi
    375 
    376 echo "Using ldapsearch to read all the entries from the consumer..."
    377 $LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI2 -w $PASSWD  \
    378 	'objectclass=*' > $SLAVEOUT 2>&1
    379 RC=$?
    380 
    381 if test $RC != 0 ; then
    382 	echo "ldapsearch failed at consumer ($RC)!"
    383 	test $KILLSERVERS != no && kill -HUP $KILLPIDS
    384 	exit $RC
    385 fi
    386 
    387 test $KILLSERVERS != no && kill -HUP $KILLPIDS
    388 
    389 echo "Filtering provider results..."
    390 $LDIFFILTER < $MASTEROUT > $MASTERFLT
    391 echo "Filtering consumer results..."
    392 $LDIFFILTER < $SLAVEOUT > $SLAVEFLT
    393 
    394 echo "Comparing retrieved entries from provider and consumer..."
    395 $CMP $MASTERFLT $SLAVEFLT > $CMPOUT
    396 
    397 if test $? != 0 ; then
    398 	echo "test failed - provider and consumer databases differ"
    399 	exit 1
    400 fi
    401 
    402 echo ">>>>> Test succeeded"
    403 
    404 test $KILLSERVERS != no && wait
    405 
    406 exit 0
    407