From 05cf62b3973236c8646005e27a50cc27be559408 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Mon, 12 Sep 2022 11:33:56 +0200 Subject: [PATCH] -use private DB for tests --- contrib/gana | 2 +- doc/prebuilt | 2 +- src/auditor/generate-auditor-basedb.sh | 5 +- src/auditor/generate-revoke-basedb.sh | 14 ++++-- src/auditor/test-auditor.sh | 55 +++++++++++++++++---- src/auditor/test-revocation.sh | 66 ++++++++++++++++++-------- src/auditor/test-sync.sh | 63 ++++++++++++++++++++---- 7 files changed, 163 insertions(+), 44 deletions(-) diff --git a/contrib/gana b/contrib/gana index 5f6a1413a..75c838e74 160000 --- a/contrib/gana +++ b/contrib/gana @@ -1 +1 @@ -Subproject commit 5f6a1413a6053d1999064768188f1671eb015897 +Subproject commit 75c838e74c41bf9a6c02cdfe8109a444056bf26d diff --git a/doc/prebuilt b/doc/prebuilt index b988d98d4..74d9c44eb 160000 --- a/doc/prebuilt +++ b/doc/prebuilt @@ -1 +1 @@ -Subproject commit b988d98d4856758484eb23c27bfdc9e602d4235a +Subproject commit 74d9c44ebc257a3d8b9c2c0a806508bd0cc5269a diff --git a/src/auditor/generate-auditor-basedb.sh b/src/auditor/generate-auditor-basedb.sh index 396f85cfa..1a42a7b0e 100755 --- a/src/auditor/generate-auditor-basedb.sh +++ b/src/auditor/generate-auditor-basedb.sh @@ -65,11 +65,14 @@ rm -f $WALLET_DB # delete libeufin database rm -f $TARGET_DB + # Configuration file will be edited, so we create one # from the template. CONF_ONCE=${BASEDB}.conf cp generate-auditor-basedb.conf $CONF_ONCE taler-config -c ${CONF_ONCE} -s exchange-offline -o MASTER_PRIV_FILE -V ${BASEDB}.mpriv + + echo -n "Testing for libeufin" libeufin-cli --help >/dev/null /dev/null /dev/null || true done - echo Killing euFin.. - kill `cat libeufin-sandbox.pid 2> /dev/null` &> /dev/null || true - kill `cat libeufin-nexus.pid 2> /dev/null` &> /dev/null || true wait + if test -f libeufin-sandbox.pid + then + echo "Killing libeufin sandbox" + kill `cat libeufin-sandbox.pid 2> /dev/null` &> /dev/null || true + fi + if test -f libeufin-nexus.pid + then + echo "Killing libeufin nexus" + kill `cat libeufin-nexus.pid 2> /dev/null` &> /dev/null || true + fi + rm -f libeufin-sandbox.pid libeufin-nexus.pid } function get_payto_uri() { diff --git a/src/auditor/test-auditor.sh b/src/auditor/test-auditor.sh index 352ba5938..297225fec 100755 --- a/src/auditor/test-auditor.sh +++ b/src/auditor/test-auditor.sh @@ -35,28 +35,39 @@ LIBEUFIN_SETTLE_TIME=1 # Exit, with status code "skip" (no 'real' failure) function exit_skip() { - echo $1 + echo "SKIPPING test: $1" exit 77 } # Exit, with error message (hard failure) function exit_fail() { - echo $1 + echo "FAILING test: $1" exit 1 } # Cleanup to run whenever we exit function cleanup() { + if test ! -z ${POSTGRES_PATH:-} + then + ${POSTGRES_PATH}/pg_ctl -D $TMPDIR -l /dev/null stop &> /dev/null || true + fi for n in `jobs -p` do kill $n 2> /dev/null || true done wait # kill euFin - echo -n "Killing euFin.." - kill `cat libeufin-sandbox.pid 2> /dev/null` &> /dev/null || true - kill `cat libeufin-nexus.pid 2> /dev/null` &> /dev/null || true + if test -f libeufin-sandbox.pid + then + echo "Killing libeufin sandbox" + kill `cat libeufin-sandbox.pid 2> /dev/null` &> /dev/null || true + fi + if test -f libeufin-nexus.pid + then + echo "Killing libeufin nexus" + kill `cat libeufin-nexus.pid 2> /dev/null` &> /dev/null || true + fi echo DONE } @@ -1978,14 +1989,41 @@ echo "Testing for faketime" faketime -h > /dev/null || exit_skip "faketime required" # NOTE: really check for all three libeufin commands? echo "Testing for libeufin" -libeufin-cli --help >/dev/null /dev/null 2> /dev/null /dev/null /dev/null /dev/null || exit_skip "taler-wallet-cli required" MYDIR=`mktemp -d /tmp/taler-auditor-basedbXXXXXX` + + +echo -n "Testing for Postgres" +HAVE_INITDB=`find /usr -name "initdb" | grep postgres` || exit_skip " MISSING" +echo " FOUND" +echo -n "Setting up Postgres DB" +INITDB_BIN=`find /usr -name "initdb" | grep bin/initdb | grep postgres | sort -n | tail -n1` +POSTGRES_PATH=`basename $INITDB_BIN` +TMPDIR=`mktemp -d /tmp/taler-test-postgresXXXXXX` +$INITDB_BIN --no-sync --auth=trust -D ${TMPDIR} > postgres-dbinit.log 2> postgres-dbinit.err +echo " DONE" +mkdir ${TMPDIR}/sockets +echo -n "Launching Postgres service" +cat - >> $TMPDIR/postgresql.conf < $TMPDIR/pg_hba.conf.new +mv $TMPDIR/pg_hba.conf.new $TMPDIR/pg_hba.conf +${POSTGRES_PATH}/pg_ctl -D $TMPDIR -l /dev/null start > postgres-start.log 2> postgres-start.err +echo " DONE" +PGHOST="$TMPDIR/sockets" +EXPORT PGHOST="@POSTGRES_SOCKET" + + echo "Generating fresh database at $MYDIR" if faketime -f '-1 d' ./generate-auditor-basedb.sh $MYDIR/basedb then @@ -1996,6 +2034,7 @@ then else echo "Cleaning up $MYDIR..." rm -rf $MYDIR || echo "Removing $MYDIR failed" + rm -rf $TMPDIR || echo "Removing $TMPDIR failed" fi else echo "Generation failed" diff --git a/src/auditor/test-revocation.sh b/src/auditor/test-revocation.sh index 3f7a399f0..d9737ed53 100755 --- a/src/auditor/test-revocation.sh +++ b/src/auditor/test-revocation.sh @@ -29,39 +29,39 @@ VALGRIND="" # Exit, with status code "skip" (no 'real' failure) function exit_skip() { - echo $1 + echo "SKIPPING test: $1" exit 77 } # Exit, with error message (hard failure) function exit_fail() { - echo $1 + echo "FAILING test: $1" exit 1 } # Cleanup to run whenever we exit function cleanup() { + if test ! -z ${POSTGRES_PATH:-} + then + ${POSTGRES_PATH}/pg_ctl -D $TMPDIR -l /dev/null stop &> /dev/null || true + fi for n in `jobs -p` do kill $n 2> /dev/null || true done wait - # kill euFin - echo Killing euFin.. - kill `cat libeufin-sandbox.pid 2> /dev/null` &> /dev/null || true - kill `cat libeufin-nexus.pid 2> /dev/null` &> /dev/null || true - # So far only Sandbox gave exit issues / delays .. - count=0 - while ps xo pid | grep `cat libeufin-sandbox.pid`; do - if test $count = 5; then - echo "Sandbox unkillable, failing now .." - exit 1 - fi - echo "Sandbox didn't exit yet.." - sleep 1; - count=`expr $count + 1` - done + if test -f libeufin-sandbox.pid + then + echo "Killing libeufin sandbox" + kill `cat libeufin-sandbox.pid 2> /dev/null` &> /dev/null || true + fi + if test -f libeufin-nexus.pid + then + echo "Killing libeufin nexus" + kill `cat libeufin-nexus.pid 2> /dev/null` &> /dev/null || true + fi + rm -f libeufin-sandbox.pid libeufin-nexus.pid } # Install cleanup handler (except for kill -9) @@ -576,12 +576,39 @@ jq -h > /dev/null || exit_skip "jq required" echo "Testing for faketime" faketime -h > /dev/null || exit_skip "faketime required" echo "Testing for libeufin(-cli)" -libeufin-cli --help >/dev/null /dev/null 2> /dev/null /dev/null /dev/null /dev/null || exit_skip "taler-wallet-cli required" + +echo -n "Testing for Postgres" +HAVE_INITDB=`find /usr -name "initdb" | grep postgres` || exit_skip " MISSING" +echo " FOUND" +echo -n "Setting up Postgres DB" +INITDB_BIN=`find /usr -name "initdb" | grep bin/initdb | grep postgres | sort -n | tail -n1` +POSTGRES_PATH=`basename $INITDB_BIN` +TMPDIR=`mktemp -d /tmp/taler-test-postgresXXXXXX` +$INITDB_BIN --no-sync --auth=trust -D ${TMPDIR} > postgres-dbinit.log 2> postgres-dbinit.err +echo " DONE" +mkdir ${TMPDIR}/sockets +echo -n "Launching Postgres service" +cat - >> $TMPDIR/postgresql.conf < $TMPDIR/pg_hba.conf.new +mv $TMPDIR/pg_hba.conf.new $TMPDIR/pg_hba.conf +${POSTGRES_PATH}/pg_ctl -D $TMPDIR -l /dev/null start > postgres-start.log 2> postgres-start.err +echo " DONE" +PGHOST="$TMPDIR/sockets" +EXPORT PGHOST="@POSTGRES_SOCKET" + + MYDIR=`mktemp -d /tmp/taler-auditor-basedbXXXXXX` echo "Generating fresh database at $MYDIR" if faketime -f '-1 d' ./generate-revoke-basedb.sh $MYDIR/basedb @@ -593,6 +620,7 @@ then else echo "Cleaning up $MYDIR..." rm -rf $MYDIR || echo "Removing $MYDIR failed" + rm -rf $TMPDIR || echo "Removing $TMPDIR failed" fi else echo "Generation failed" diff --git a/src/auditor/test-sync.sh b/src/auditor/test-sync.sh index b40f11557..0c9327d63 100755 --- a/src/auditor/test-sync.sh +++ b/src/auditor/test-sync.sh @@ -1,20 +1,36 @@ -#!/bin/sh +#!/bin/bash set -eu # Exit, with status code "skip" (no 'real' failure) -exit_skip() { - echo $1 +function exit_skip() { + echo "SKIPPING test: $1" exit 77 } # Exit, with error message (hard failure) -exit_fail() { - echo $1 +function exit_fail() { + echo "FAILING test: $1" exit 1 } -check_with_database() +# Cleanup to run whenever we exit +function cleanup() { + if test ! -z ${POSTGRES_PATH:-} + then + ${POSTGRES_PATH}/pg_ctl -D $TMPDIR stop &> /dev/null || true + fi + for n in `jobs -p` + do + kill $n 2> /dev/null || true + done + wait +} + +# Install cleanup handler (except for kill -9) +trap cleanup EXIT + +function check_with_database() { echo -n "Testing synchronization logic ..." @@ -68,15 +84,41 @@ echo "Testing for jq" jq -h > /dev/null || exit_skip "jq required" echo "Testing for faketime" faketime -h > /dev/null || exit_skip "faketime required" -# NOTE: really check for all three libeufin commands? echo "Testing for libeufin" -libeufin-cli --help >/dev/null /dev/null /dev/null || exit_skip "libeufin required" echo "Testing for pdflatex" which pdflatex > /dev/null /dev/null /dev/null || exit_skip "taler-wallet-cli required" + +echo -n "Testing for Postgres" +HAVE_INITDB=`find /usr -name "initdb" | grep postgres` || exit_skip " MISSING" +echo " FOUND" +echo -n "Setting up Postgres DB" +INITDB_BIN=`find /usr -name "initdb" | grep bin/initdb | grep postgres | sort -n | tail -n1` +POSTGRES_PATH=`basename $INITDB_BIN` +TMPDIR=`mktemp -d /tmp/taler-test-postgresXXXXXX` +$INITDB_BIN --no-sync --auth=trust -D ${TMPDIR} > postgres-dbinit.log 2> postgres-dbinit.err +echo " DONE" +mkdir ${TMPDIR}/sockets +echo -n "Launching Postgres service" +cat - >> $TMPDIR/postgresql.conf < $TMPDIR/pg_hba.conf.new +mv $TMPDIR/pg_hba.conf.new $TMPDIR/pg_hba.conf +${POSTGRES_PATH}/pg_ctl -D $TMPDIR -l /dev/null start > postgres-start.log 2> postgres-start.err +echo " DONE" +PGHOST="$TMPDIR/sockets" +EXPORT PGHOST="@POSTGRES_SOCKET" + + + MYDIR=`mktemp -d /tmp/taler-auditor-basedbXXXXXX` echo "Generating fresh database at $MYDIR" if faketime -f '-1 d' ./generate-auditor-basedb.sh $MYDIR/basedb @@ -88,6 +130,7 @@ then else echo "Cleaning up $MYDIR..." rm -rf $MYDIR || echo "Removing $MYDIR failed" + rm -rf $TMPDIR || echo "Removing $TMPDIR failed" fi else echo "Generation failed"