1178825Sdfr#!/bin/sh 2178825Sdfr# 3178825Sdfr# Copyright (c) 2006 - 2007 Kungliga Tekniska H�gskolan 4178825Sdfr# (Royal Institute of Technology, Stockholm, Sweden). 5178825Sdfr# All rights reserved. 6178825Sdfr# 7178825Sdfr# Redistribution and use in source and binary forms, with or without 8178825Sdfr# modification, are permitted provided that the following conditions 9178825Sdfr# are met: 10178825Sdfr# 11178825Sdfr# 1. Redistributions of source code must retain the above copyright 12178825Sdfr# notice, this list of conditions and the following disclaimer. 13178825Sdfr# 14178825Sdfr# 2. Redistributions in binary form must reproduce the above copyright 15178825Sdfr# notice, this list of conditions and the following disclaimer in the 16178825Sdfr# documentation and/or other materials provided with the distribution. 17178825Sdfr# 18178825Sdfr# 3. Neither the name of the Institute nor the names of its contributors 19178825Sdfr# may be used to endorse or promote products derived from this software 20178825Sdfr# without specific prior written permission. 21178825Sdfr# 22178825Sdfr# THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 23178825Sdfr# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24178825Sdfr# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25178825Sdfr# ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 26178825Sdfr# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27178825Sdfr# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28178825Sdfr# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29178825Sdfr# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30178825Sdfr# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31178825Sdfr# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32178825Sdfr# SUCH DAMAGE. 33178825Sdfr# 34178825Sdfr# $Id$ 35178825Sdfr# 36178825Sdfr 37178825Sdfrsrcdir="@srcdir@" 38178825Sdfrobjdir="@objdir@" 39178825SdfrEGREP="@EGREP@" 40178825Sdfr 41178825Sdfr# If there is no useful db support compile in, disable test 42178825Sdfr../db/have-db || exit 77 43178825Sdfr 44178825Sdfr# Dont run this test in AFS, since it lacks support for AF_UNIX 45178825Sdfrexpr "X`/bin/pwd || pwd`" : "X/afs/.*" > /dev/null 2>/dev/null && exit 77 46178825Sdfr 47178825SdfrR=TEST.H5L.SE 48178825Sdfr 49178825Sdfrport=@port@ 50178825Sdfr 51178825Sdfrcache="FILE:${objdir}/cache.krb5" 52178825Sdfrkeytabfile=${objdir}/iprop.keytab 53178825Sdfrkeytab="FILE:${keytabfile}" 54178825Sdfr 55178825Sdfrkdc="${TESTS_ENVIRONMENT} ../../kdc/kdc --addresses=localhost -P $port" 56178825Sdfrkadmin="${TESTS_ENVIRONMENT} ../../kadmin/kadmin -r $R" 57178825Sdfripropdslave="${TESTS_ENVIRONMENT} ../../lib/kadm5/ipropd-slave" 58178825Sdfripropdmaster="${TESTS_ENVIRONMENT} ../../lib/kadm5/ipropd-master" 59178825Sdfriproplog="${TESTS_ENVIRONMENT} ../../lib/kadm5/iprop-log" 60178825Sdfr 61178825Sdfrkinit="${TESTS_ENVIRONMENT} ../../kuser/kinit -c $cache --no-afslog" 62178825Sdfr 63178825SdfrKRB5_CONFIG="${objdir}/krb5.conf" 64178825Sdfrexport KRB5_CONFIG 65178825Sdfr 66178825Sdfrrm -f ${keytabfile} 67178825Sdfrrm -f current-db* 68178825Sdfrrm -f current*.log 69178825Sdfrrm -f out-* 70178825Sdfrrm -f mkey.file* 71178825Sdfrrm -f messages.log 72178825Sdfr 73178825Sdfr> messages.log 74178825Sdfr 75178825Sdfrecho Creating database 76178825Sdfr${kadmin} -l \ 77178825Sdfr init \ 78178825Sdfr --realm-max-ticket-life=1day \ 79178825Sdfr --realm-max-renewable-life=1month \ 80178825Sdfr ${R} || exit 1 81178825Sdfr 82178825Sdfr${kadmin} -l add -p foo --use-defaults user@${R} || exit 1 83178825Sdfr 84178825Sdfr${kadmin} -l add --random-key --use-defaults iprop/localhost@${R} || exit 1 85178825Sdfr${kadmin} -l ext -k ${keytab} iprop/localhost@${R} || exit 1 86178825Sdfr${kadmin} -l add --random-key --use-defaults iprop/slave@${R} || exit 1 87178825Sdfr${kadmin} -l ext -k ${keytab} iprop/slave@${R} || exit 1 88178825Sdfr 89178825Sdfrecho foo > ${objdir}/foopassword 90178825Sdfr 91178825Sdfr# -- foo 92178825Sdfripds= 93178825Sdfripdm= 94178825Sdfrkdcpid= 95178825Sdfr 96178825Sdfr> iprop-stats 97178825Sdfrtrap "echo 'killing ipropd s + m + kdc'; kill \${ipdm} \${ipds} \${kdcpid} >/dev/null 2>/dev/null; tail messages.log ; tail iprop-stats; exit 1;" EXIT 98178825Sdfr 99178825Sdfrecho Starting kdc 100178825Sdfr${kdc} & 101178825Sdfrkdcpid=$! 102178825Sdfr 103178825Sdfrsh ${srcdir}/wait-kdc.sh || exit 1 104178825Sdfr 105178825Sdfrecho "starting master" 106178825Sdfr${ipropdmaster} --hostname=localhost -k ${keytab} \ 107178825Sdfr --database=${objdir}/current-db & 108178825Sdfripdm=$! 109178825Sdfrsh ${srcdir}/wait-kdc.sh ipropd-master || exit 1 110178825Sdfr 111178825Sdfrecho "starting slave" 112178825SdfrKRB5_CONFIG="${objdir}/krb5-slave.conf" \ 113178825Sdfr${ipropdslave} --hostname=slave -k ${keytab} localhost & 114178825Sdfripds=$! 115178825Sdfrsh ${srcdir}/wait-kdc.sh ipropd-slave || exit 1 116178825Sdfr 117178825Sdfrecho "checking slave is up" 118178825Sdfr${EGREP} 'iprop/slave@TEST.H5L.SE.*Up' iprop-stats >/dev/null || exit 1 119178825Sdfr 120178825Sdfr# ----------------- checking: pushing lives changes 121178825Sdfr 122178825Sdfrecho "Add host" 123178825Sdfr${kadmin} -l add --random-key --use-defaults host/foo@${R} || exit 1 124178825Sdfrsleep 2 125178825SdfrKRB5_CONFIG="${objdir}/krb5-slave.conf" \ 126178825Sdfr${kadmin} -l get host/foo@${R} > /dev/null || exit 1 127178825Sdfr 128178825Sdfrecho "Rename host" 129178825Sdfr${kadmin} -l rename host/foo@${R} host/bar@${R} || exit 1 130178825Sdfrsleep 2 131178825SdfrKRB5_CONFIG="${objdir}/krb5-slave.conf" \ 132178825Sdfr${kadmin} -l get host/foo@${R} > /dev/null 2>/dev/null && exit 1 133178825SdfrKRB5_CONFIG="${objdir}/krb5-slave.conf" \ 134178825Sdfr${kadmin} -l get host/bar@${R} > /dev/null || exit 1 135178825Sdfr 136178825Sdfrecho "Delete host" 137178825Sdfr${kadmin} -l delete host/bar@${R} || exit 1 138178825Sdfrsleep 2 139178825SdfrKRB5_CONFIG="${objdir}/krb5-slave.conf" \ 140178825Sdfr${kadmin} -l get host/bar@${R} > /dev/null 2>/dev/null && exit 1 141178825Sdfr 142178825Sdfrecho "kill slave" 143178825Sdfr> iprop-stats 144178825Sdfrkill ${ipds} 145178825Sdfrsleep 2 146178825Sdfr 147178825Sdfr${EGREP} 'iprop/slave@TEST.H5L.SE.*Down' iprop-stats >/dev/null || exit 1 148178825Sdfr 149178825Sdfr# ----------------- checking: slave is missing changes while down 150178825Sdfr 151178825Sdfrecho "doing changes while slave is down" 152178825Sdfr${kadmin} -l cpw --random-password user@${R} > /dev/null || exit 1 153178825Sdfr${kadmin} -l cpw --random-password user@${R} > /dev/null || exit 1 154178825Sdfr 155178825Sdfrecho "Makeing a copy of the master log file" 156178825Sdfrcp ${objdir}/current.log ${objdir}/current.log.tmp 157178825Sdfr 158178825Sdfr# ----------------- checking: checking that master and slaves resyncs 159178825Sdfr 160178825Sdfrecho "starting slave again" 161178825Sdfr> iprop-stats 162178825Sdfr> messages.log 163178825SdfrKRB5_CONFIG="${objdir}/krb5-slave.conf" \ 164178825Sdfr${ipropdslave} --hostname=slave -k ${keytab} localhost & 165178825Sdfripds=$! 166178825Sdfrsh ${srcdir}/wait-kdc.sh ipropd-slave || exit 1 167178825Sdfr 168178825Sdfrecho "checking slave is up again" 169178825Sdfr${EGREP} 'iprop/slave@TEST.H5L.SE.*Up' iprop-stats >/dev/null || exit 1 170178825Sdfrecho "checking for replay problems" 171178825Sdfr${EGREP} 'Entry already exists in database' messages.log && exit 1 172178825Sdfr 173178825Sdfrecho "kill slave and remove log and database" 174178825Sdfrkill ${ipds} 175178825Sdfrsleep 2 176178825Sdfr 177178825Sdfrrm current.slave.log current-db.slave* || exit 1 178178825Sdfr> iprop-stats 179178825Sdfr> messages.log 180178825SdfrKRB5_CONFIG="${objdir}/krb5-slave.conf" \ 181178825Sdfr${ipropdslave} --hostname=slave -k ${keytab} localhost & 182178825Sdfripds=$! 183178825Sdfrsh ${srcdir}/wait-kdc.sh ipropd-slave || exit 1 184178825Sdfr 185178825Sdfrecho "checking slave is up again" 186178825Sdfr${EGREP} 'iprop/slave@TEST.H5L.SE.*Up' iprop-stats >/dev/null || exit 1 187178825Sdfrecho "checking for replay problems" 188178825Sdfr${EGREP} 'Entry already exists in database' messages.log && exit 1 189178825Sdfr 190178825Sdfr# ----------------- checking: checking live truncation of master log 191178825Sdfr 192178825Sdfr${kadmin} -l cpw --random-password user@${R} > /dev/null || exit 1 193178825Sdfrsleep 2 194178825Sdfr 195178825Sdfrecho "live truncate on master log" 196178825Sdfr${iproplog} truncate || exit 1 197178825Sdfrsleep 2 198178825Sdfr 199178825Sdfrecho "Killing master and slave" 200178825Sdfrkill ${ipdm} ${ipds} >/dev/null 2>/dev/null 201178825Sdfr 202178825Sdfrsleep 2 203178825Sdfr${EGREP} "^master down at " iprop-stats > /dev/null || exit 1 204178825Sdfr 205178825Sdfrecho "compare versions on master and slave logs" 206178825SdfrKRB5_CONFIG=${objdir}/krb5-slave.conf \ 207178825Sdfr${iproplog} last-version > slave-last.tmp 208178825Sdfr${iproplog} last-version > master-last.tmp 209178825Sdfrcmp master-last.tmp slave-last.tmp || exit 1 210178825Sdfr 211178825Sdfr# ----------------- checking: master going backward 212178825Sdfr> iprop-stats 213178825Sdfr> messages.log 214178825Sdfr 215178825Sdfrecho "Going back to old version of the master log file" 216178825Sdfrcp ${objdir}/current.log.tmp ${objdir}/current.log 217178825Sdfr 218178825Sdfrecho "starting master" 219178825Sdfr${ipropdmaster} --hostname=localhost -k ${keytab} \ 220178825Sdfr --database=${objdir}/current-db & 221178825Sdfripdm=$! 222178825Sdfrsh ${srcdir}/wait-kdc.sh ipropd-master || exit 1 223178825Sdfr 224178825Sdfrecho "starting slave" 225178825SdfrKRB5_CONFIG="${objdir}/krb5-slave.conf" \ 226178825Sdfr${ipropdslave} --hostname=slave -k ${keytab} localhost & 227178825Sdfripds=$! 228178825Sdfrsh ${srcdir}/wait-kdc.sh ipropd-slave || exit 1 229178825Sdfr 230178825Sdfrecho "checking slave is up again" 231178825Sdfr${EGREP} 'iprop/slave@TEST.H5L.SE.*Up' iprop-stats >/dev/null || exit 1 232178825Sdfrecho "checking for replay problems" 233178825Sdfr${EGREP} 'Entry already exists in database' messages.log && exit 1 234178825Sdfr 235178825Sdfrecho "pushing one change" 236178825Sdfr${kadmin} -l cpw --random-password user@${R} > /dev/null || exit 1 237178825Sdfrsleep 2 238178825Sdfr 239178825Sdfrtrap "" EXIT 240178825Sdfrkill ${ipdm} ${ipds} ${kdcpid} 241178825Sdfr 242178825Sdfrecho "compare versions on master and slave logs" 243178825SdfrKRB5_CONFIG=${objdir}/krb5-slave.conf \ 244178825Sdfr${iproplog} last-version > slave-last.tmp 245178825Sdfr${iproplog} last-version > master-last.tmp 246178825Sdfrcmp master-last.tmp slave-last.tmp || exit 1 247178825Sdfr 248178825Sdfrexit $ec 249