]> git.pond.sub.org Git - empserver/blobdiff - tests/test-common.sh
client: Unbreak standalone build
[empserver] / tests / test-common.sh
index 04cb09ab54d087fab1e2740ec6539534e3848e8a..8dbcb2b27eedb777a7ad020bbe4a52018b5ba19d 100644 (file)
@@ -20,6 +20,11 @@ empdump="src/util/empdump -e $econfig"
 files="src/util/files -e $econfig"
 fairland="src/util/fairland -e $econfig"
 
+# GNU libc memory allocation checking, see mallopt(3)
+# $RANDOM isn't portable
+malloc_perturb=${EMPIRE_CHECK_MALLOC_PERTURB:-$(perl -e 'print int(rand(255))')}
+env="MALLOC_CHECK_=3 MALLOC_PERTURB_=$malloc_perturb"
+
 empthread=`sed -n 's/empthread *:= *\(.*\)/\1/p' <GNUmakefile`
 warn_empthread=y
 
@@ -36,6 +41,7 @@ create_sandbox()
 {
     rm -rf sandbox
     mkdir -p sandbox/etc/empire sandbox/share/empire/builtin $data
+    echo $malloc_perturb >sandbox/malloc-perturb
     touch $schedule
     cat >$econfig <<EOF
 data "../../var/empire"
@@ -46,7 +52,44 @@ keep_journal 2
 GODNEWS 0
 running_test_suite 1
 EOF
-    cp `git ls-files "$srcdir"/src/lib/global | uniq | grep '\.config$'` sandbox/share/empire/builtin
+    cp `perl "$srcdir"/src/scripts/ls-sources.pl "$srcdir"/src/lib/global '\.config$'` sandbox/share/empire/builtin
+}
+
+copy_tables()
+{
+    local t
+
+    for t
+    do [ -e sandbox/etc/empire/"$t".config ] || cp "$srcdir"/src/lib/global/$t.config sandbox/etc/empire
+    done
+}
+
+# sed -i isn't portable...
+sed_i()
+{
+    local script="$1"
+    shift
+    for i
+    do sed "$script" "$i" >sandbox/$$ && mv sandbox/$$ "$i"
+    done
+}
+
+customize()
+{
+    local key
+    for key
+    do
+       case $key in
+       big-city)
+           copy_tables sect
+           sed_i '/"c" .* "capital"/d;/^#.*"c" .* "city"/s/^#/ /;/"c" .* norm/d;/^#.*"c" .* cana/s/^#/ /' sandbox/etc/empire/sect.config
+           ;;
+       trade-ship)
+           copy_tables ship
+           sed_i '/"ts   trade ship"//^#/ /' sandbox/etc/empire/ship.config
+       esac
+    done
+    echo "custom_tables \"`cd sandbox/etc/empire && echo *.config`\"" >>$econfig
 }
 
 run_and_cmp()
@@ -60,7 +103,7 @@ run()
     local name=$1 ret
     shift
     set +e
-    "$@" >>sandbox/$name.out 2>>sandbox/$name.err
+    env $env "$@" >>sandbox/$name.out 2>>sandbox/$name.err
     ret=$?
     set -e
     echo $ret >>sandbox/$name.status
@@ -92,7 +135,7 @@ start_server()
     check_empthread
 
     pid=
-    src/server/emp_server -e $econfig -R 1 -s -E crash-dump
+    env $env src/server/emp_server -e $econfig -R 1 -s -E crash-dump
     timeout=$((`now`+5))
     until pid=`cat $pidfile 2>/dev/null` && [ -n "$pid" ]
     do
@@ -149,7 +192,7 @@ feed_files()
 
 feed_dir()
 {
-    feed_files `git ls-files "$@" | uniq | grep '/[0-9][0-9]-[^/]*$'`
+    feed_files `perl "$srcdir"/src/scripts/ls-sources.pl "$@" '/[0-9][0-9]-[^/]*$'`
 }
 
 begin_test()
@@ -180,7 +223,9 @@ begin_test()
        mv $data/lostitems $data/setup.lostitems
        >$data/lostitems
        mv $data/journal.log $data/setup.journal.log
+       normalize sandbox/var/empire/setup.journal.log
        mv $data/server.log $data/setup.server.log
+       normalize sandbox/var/empire/setup.server.log
     fi
     start_server
 }
@@ -217,9 +262,29 @@ cmp_out()
     done
 }
 
+normalize()
+{
+    local act="$1"
+    local nrm="${2-sandbox/normalized-${1##*/}}"
+
+    case "$act" in
+    *journal.log)
+       perl "$srcdir"/tests/normalize.pl -j "$act" ;;
+    *server.log)
+       perl "$srcdir"/tests/normalize.pl -s "$act" ;;
+    *.xdump)
+       perl "$srcdir"/tests/normalize.pl "$act" ;;
+    *.err)
+       perl -pe 's/\s+$/\n/;' -e "s,\Q$srcdir/tests\E,tests," "$act" ;;
+    *)
+       perl -pe 's/\s+$/\n/;' "$act" ;;
+    esac >"$nrm"
+}
+
 cmp_out1()
 {
-    local i=$1 exp="${2-$testdir/${1##*/}}"
+    local i=$1 master="${2-$testdir/${1##*/}}"
+    local exp="$master"
     local act="sandbox/$i"
     local nrm="sandbox/normalized-${i##*/}"
 
@@ -234,30 +299,17 @@ cmp_out1()
            [ ! -e "$act" ] && return
            exp=/dev/null
            ;;
-           *.status)   exp=sandbox/ok.status; echo 0 >sandbox/ok.status ;;
-           *)          exp=/dev/null ;;
        esac
     fi
 
-    case "$i" in
-    */journal.log)
-       perl "$srcdir"/tests/normalize.pl -j "$act" ;;
-    */server.log)
-       perl "$srcdir"/tests/normalize.pl -s "$act" ;;
-    *.xdump)
-       perl "$srcdir"/tests/normalize.pl "$act" ;;
-    *.err)
-       perl -pe 's/\s+$/\n/;' -e "s,\Q$srcdir/tests\E,tests," "$act" ;;
-    *)
-       perl -pe 's/\s+$/\n/;' "$act" ;;
-    esac >"$nrm"
+    normalize "$act" "$nrm"
     if diff -u "$exp" "$nrm" >"$nrm.diff"
     then
        echo "$i OK"
     elif [ "$EMPIRE_CHECK_ACCEPT" ]
     then
        echo "$i CHANGED"
-       cp "$nrm" "$exp"
+       cp "$nrm" "$master"
     else
        failed=y
        echo "$i FAIL"