X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=eval%2Flibeval.sh;h=2bb84bb61cde45b77e66eb6a6d02c540bed3f376;hb=b5ef6bb91d88949931339721484770bfecc109f4;hp=542b07d31a97b23f431b3e48db51da92ffc19d04;hpb=a06817cec77b154a482a9dc8765df250aa5ce369;p=eval.git diff --git a/eval/libeval.sh b/eval/libeval.sh index 542b07d..2bb84bb 100644 --- a/eval/libeval.sh +++ b/eval/libeval.sh @@ -75,16 +75,22 @@ function override-vars function box-init { pstart "Preparing sandbox... " - if [ -z "$TEST_USER" -o "$TEST_USER" == $EVAL_USER ] ; then + + # Default values for user/group + EVAL_USER=${EVAL_USER:-$USER} + EVAL_GROUP=${EVAL_GROUP:-$GROUP} + TEST_USER=${TEST_USER:-$EVAL_USER} + + if [ -z "$TEST_USER" -o "$TEST_USER" == "$EVAL_USER" ] ; then pcont "running locally (INSECURE), " - TEST_USER=$EVAL_USER - BOXDIR=`pwd`/box - BOXCMD=bin/box - mkdir -p box + TEST_USER="$EVAL_USER" + BOXDIR=$HDIR/box + BOXCMD=$HDIR/bin/box + mkdir -p $BOXDIR else pcont "used account $TEST_USER, " - BOXDIR=$MO_ROOT/eval/$TEST_USER - BOXCMD=bin/box-$TEST_USER + BOXDIR=$HDIR/box + BOXCMD=$HDIR/bin/box-$TEST_USER fi [ -d $BOXDIR -a -f $BOXCMD ] || die "Sandbox set up incorrectly" BOXCMD="$BOXCMD -c$BOXDIR" @@ -105,11 +111,12 @@ function box-clean function dir-init { pstart "Initializing... " - HDIR=. - PDIR=problems/$PROBLEM - SDIR=solutions/$CONTESTANT/$PROBLEM - TDIR=testing/$CONTESTANT/$PROBLEM - TMPDIR=tmp + [ -z "$HDIR" ] && HDIR=. + PDIR=$HDIR/problems/$PROBLEM + SDIR=$HDIR/solutions/$CONTESTANT/$PROBLEM + TDIR=$HDIR/testing/$CONTESTANT/$PROBLEM + TMPDIR=$HDIR/tmp/ + [ -d $PDIR ] || die "Problem $PROBLEM not known" [ -d $SDIR ] || fatal "Solution of $PROBLEM not found" mkdir -p $TDIR $TMPDIR @@ -118,6 +125,7 @@ function dir-init cat >$TDIR/log </dev/null` || SG= [ -z "$SG" ] || M="$M (SIG$SG)" fi # Translate runtime errors to readable strings RE=${M#Exited with error status } if [ -n "$EXIT_CODE_HOOK" -a "$RE" != "$M" ] ; then - NEWMSG=`$EXIT_CODE_HOOK $RE` + NEWMSG=`$EXIT_CODE_HOOK $RE` || NEWMSG= if [ -n "$NEWMSG" ] ; then M="Runtime error $RE: $NEWMSG" fi @@ -297,6 +305,15 @@ function test-prolog ;; none) echo "Input file: " ;; + dir) echo "Input file: files in directory $PDIR/$TEST.in/" + [ -d $PDIR/$TEST.in ] || die "Not a directory: $PDIR/$TEST.in" + # TODO: recursive ln to $TDIR + cp -r $PDIR/$TEST.in $TDIR/$TEST.in + cp -r $PDIR/$TEST.in/* $BOXDIR/ + # Can have .stdin, but empty by default + touch $BOXDIR/.stdin + BOX_EXTRAS="$BOX_EXTRAS -i.stdin" + ;; *) die "Unknown IN_TYPE $IN_TYPE" ;; esac @@ -374,7 +391,10 @@ function test-run-file pcont " " BOXOPTS=$(expand-var TEST_SANDBOX_OPTS) echo "Sandbox options: $BOXOPTS" - if ! $BOXCMD $BOXOPTS -- ./$PROBLEM 2>$TMPDIR/exec.out ; then + EXECMD=$(expand-var TEST_EXEC_CMD) + [ -z "$EXECMD" ] || echo "Exec command: $EXECMD" + [ -z "$EXECMD" ] && EXECMD="./$PROBLEM" + if ! $BOXCMD $BOXOPTS -- $EXECMD 2>$TMPDIR/exec.out ; then cat $TMPDIR/exec.out MSG=`tail -1 $TMPDIR/exec.out` test-result 0 "$MSG" @@ -393,7 +413,10 @@ function test-run-interactive echo "Sandbox options: $BOXOPTS" ICCMD=$(expand-var IA_CHECK) echo "Interactive checker: $ICCMD" - if ! $HDIR/bin/iwrapper $BOXCMD $BOXOPTS -- ./$PROBLEM @@ $ICCMD 2>$TMPDIR/exec.out ; then + EXECMD=$(expand-var TEST_EXEC_CMD) + [ -z "$EXECMD" ] || echo "Exec command: $EXECMD" + [ -z "$EXECMD" ] && EXECMD="./$PROBLEM" + if ! $HDIR/bin/iwrapper $BOXCMD $BOXOPTS -- $EXECMD @@ $ICCMD 2>$TMPDIR/exec.out ; then cat $TMPDIR/exec.out MSG="`head -1 $TMPDIR/exec.out`" test-result 0 "$MSG"