diff --git a/src/scripts/nightly/common.sh b/src/scripts/nightly/common.sh index 9734b8ff..780b8a10 100644 --- a/src/scripts/nightly/common.sh +++ b/src/scripts/nightly/common.sh @@ -11,3 +11,25 @@ err() { warn() { echo "WARNING: $@" >&2 } + +trykill() { + [ -n "$1" ] || { warn "INTERNAL ERROR: trykill: no argument ?" ; return 2 ; } + kill -TERM "$1" || { warn "Could not kill pid '${1}'" ; return 1 ; } + sleep 1 + /bin/kill -KILL "$1" 2>/dev/null && { warn "Process ${1} would not die" ; } + sleep 1 + /bin/kill -KILL "$1" 2>/dev/null && { warn "Process ${1} would not die after -KILL" ; return 1 ; } + + return 0 +} + +runfeed() { + [ -n "$1" ] || { warn "INTERNAL ERROR: No coun/repr given ?" ; return 2 ; } + REP="$2" + [ -n "$REP" ] || REP="$1" + { + cat + echo "quit" + } | ./emp_client "$1" "$REP" || { warn "emp_client not ok ?" ; return 1 ; } + return 0 +} diff --git a/src/scripts/nightly/nightlybuild.sh b/src/scripts/nightly/nightlybuild.sh index 14596d96..37da3124 100755 --- a/src/scripts/nightly/nightlybuild.sh +++ b/src/scripts/nightly/nightlybuild.sh @@ -89,6 +89,20 @@ done echo "Done (CVS)." echo "" +echo "Applying global patches from patches/All:" +for i in "${SCRIPTDIR}/patches/All"/*.patch +do + [ -r "${i}" ] || continue + if patch -Np0 < "${i}" >/dev/null + then + echo "${i}: OK" + else + echo "========== ${i}: NOT OK! ${?} ==========" + fi +done +echo "Done (patch All)." +echo "" + # Run local patches ${LOCALPATCHDIR}/*.patch case "${LOCALPATCHDIR}" in @@ -101,7 +115,7 @@ esac if [ -n "${LOCALPATCHDIR}" -a -d "${LOCALPATCHDIR}/." ] then - echo "Applying local patches from ${LOCALPATCHDIR}:" + echo "Applying system specific patches from ${LOCALPATCHDIR}:" for i in "${LOCALPATCHDIR}"/*.patch do [ -r "${i}" ] || continue @@ -112,7 +126,7 @@ then echo "========== ${i}: NOT OK! ${?} ==========" fi done - echo "Done (patch)." + echo "Done (patch specific)." echo "" fi @@ -123,6 +137,7 @@ echo "Preparing build.conf" sed -e "s,^USERNAME = .*$,USERNAME = ${EMPLOGIN}," \ -e "s,^HOSTNAME = .*$,HOSTNAME = localhost," \ -e "s,^IPADDR = .*$,IPADDR = 127.0.0.1," \ + -e "s,^PORTNUM = .*$,PORTNUM = ${EMPPORT}," \ -e "s,^EMPDIR = .*$,EMPDIR = ${BOXDIR}/${WORKDIR}/emp4," \ < build.conf > build.conf.new && \ mv build.conf.new build.conf || \ @@ -140,27 +155,124 @@ echo "" echo "Building server" if make "${EMPTARGET}" >/dev/null then - warn "make did not return 0." + warn "make did not return 0" fi echo "Done (make)." echo "" # Try to run startup utilities -if [ -d ../emp4 -a -d ../emp4/bin -a -d ../emp4/data ] -then +for onetime in 1 +do + if [ -d ../emp4 -a -d ../emp4/bin -a -d ../emp4/data ] + then + echo "Directory structure is ok" + else + warn "Directory structure is NOT ok" + break + fi + cd ../emp4/bin || err "Could not cd to ../emp4/bin" + echo "Determining type of files in bindir" file * echo "Done (file *)." echo "" + echo "Running files and fairland" echo y | ./files || warn "Error running files" - ./fairland 10 30 >/dev/null || warn "Error running fairland" + ./fairland -R 0 10 30 >/dev/null || { warn "Error running fairland" ; break ; } + [ -s "newcap_script" ] || { warn "fairland did not produce newcap_script" ; break ; } echo "Done (files & fairland)." echo "" -fi -# Clean sandbox + echo "Starting server with -d in the background" + ./emp_server -d & + PID="$!" + sleep 1 + kill -0 "${PID}" || { warn "emp_server not running ?" ; break ; } + echo "Done (emp_server)." + echo "" + + echo "Running newcap_script through emp_client" + runfeed POGO peter < newcap_script >/dev/null 2>&1 || + { + warn "Could not run newcap_script" + echo "Stopping server" + trykill $PID + break + } + echo "Done (newcap_script / emp_client)." + echo "" + + # After a platform independent PRNG is used, we can really do some + # useful testing here... + echo "TODO: Replace this with a real test script as soon as" + echo "a platform independent PRNG is used in fairland." + echo "" + echo "Just do some rudimentary testing for now." + echo "" + + echo "Preparing to ensure repeatable results" + runfeed POGO peter << EOF +disable +give uw * ?uw>0 5 +EOF + echo "Done (preparing)." + echo "" + + for PLAYER in 1 2 3 4 5 6 7 8 9 10 + do + echo "explore for player ${PLAYER}" + runfeed $PLAYER << EOF >/dev/null 2>&1 +break +expl c 0,0 10 uh +mov f 0,0 5 uh +desi 1,-1 + +cen * +EOF + echo "Done (explore)." + echo "" + done + + echo "Run an update" + runfeed POGO peter << EOF +power new +cen * ?own#0 +enable +force 1 +disable +EOF + echo "Done (force)." + echo "" + + sleep 10 + echo "Check player 1" + runfeed 1 << EOF +cen * +read n +EOF + echo "Done (check)." + echo "" + + echo "Check whether the update did anything" + runfeed POGO peter << EOF +cen * ?own#0 +read +n +EOF + echo "Done (check update)." + echo "" + + echo "Done (Rudimentary tests)." + echo "" + + echo "Stopping server" + trykill "${PID}" + echo "Done (kill)." + echo "" +done + + Clean sandbox echo "Cleaning sandbox" cd "${BOXDIR}" || err "Could not cd back to sanbox root !" rm -r "${WORKDIR}" || warn "Directory ${WORKDIR} could not be cleanly removed !"