From 3fa9f3bb12635c6bbb50b763e2c955d73e2e37fa Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Mon, 19 Sep 2022 19:32:18 +0200 Subject: -wip --- src/auditor/generate-auditor-basedb.sh | 72 ++++++++++++++++----------------- src/auditor/generate-revoke-basedb.sh | 21 +++++----- src/auditor/test-auditor.sh | 25 +++++++----- src/auditor/test-revocation.sh | 73 ++++++++++++++++++++++++---------- 4 files changed, 114 insertions(+), 77 deletions(-) diff --git a/src/auditor/generate-auditor-basedb.sh b/src/auditor/generate-auditor-basedb.sh index 17cfc4b46..a24942dfc 100755 --- a/src/auditor/generate-auditor-basedb.sh +++ b/src/auditor/generate-auditor-basedb.sh @@ -70,14 +70,12 @@ export WALLET_DB=${BASEDB:-"wallet"}.wdb # delete existing wallet database 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=$1.conf -cp generate-auditor-basedb.conf $CONF_ONCE +export CONF=$1.conf +cp generate-auditor-basedb.conf $CONF +echo "Created configuration at ${CONF}" echo -n "Testing for libeufin" libeufin-cli --help >/dev/null /dev/null 2>/dev/null || true @@ -100,62 +98,62 @@ createdb $TARGET_DB || exit_skip "Could not create database $TARGET_DB" # obtain key configuration data MASTER_PRIV_FILE=$1.mpriv MASTER_PRIV_DIR=`dirname $MASTER_PRIV_FILE` -taler-config -f -c ${CONF_ONCE} -s exchange-offline -o MASTER_PRIV_FILE -V ${MASTER_PRIV_FILE} +taler-config -f -c ${CONF} -s exchange-offline -o MASTER_PRIV_FILE -V ${MASTER_PRIV_FILE} rm -f "${MASTER_PRIV_FILE}" mkdir -p $MASTER_PRIV_DIR gnunet-ecc -l/dev/null -g1 $MASTER_PRIV_FILE > /dev/null -MASTER_PUB=`gnunet-ecc -p $MASTER_PRIV_FILE` -MERCHANT_PORT=`taler-config -c $CONF_ONCE -s MERCHANT -o PORT` -MERCHANT_URL=http://localhost:${MERCHANT_PORT}/ -AUDITOR_URL=http://localhost:8083/ +export MASTER_PUB=`gnunet-ecc -p $MASTER_PRIV_FILE` +export EXCHANGE_URL=`taler-config -c $CONF -s EXCHANGE -o BASE_URL` +MERCHANT_PORT=`taler-config -c $CONF -s MERCHANT -o PORT` +export MERCHANT_URL=http://localhost:${MERCHANT_PORT}/ +BANK_PORT=`taler-config -c $CONF -s BANK -o HTTP_PORT` +BANK_URL="http://localhost:1${BANK_PORT}/demobanks/default" +export AUDITOR_URL=http://localhost:8083/ AUDITOR_PRIV_FILE=$1.apriv AUDITOR_PRIV_DIR=`dirname $AUDITOR_PRIV_FILE` -taler-config -f -c ${CONF_ONCE} -s auditor -o AUDITOR_PRIV_FILE -V ${AUDITOR_PRIV_FILE} +taler-config -f -c ${CONF} -s auditor -o AUDITOR_PRIV_FILE -V ${AUDITOR_PRIV_FILE} mkdir -p $AUDITOR_PRIV_DIR gnunet-ecc -l/dev/null -g1 $AUDITOR_PRIV_FILE > /dev/null AUDITOR_PUB=`gnunet-ecc -p $AUDITOR_PRIV_FILE` -EXCHANGE_URL=`taler-config -c $CONF_ONCE -s EXCHANGE -o BASE_URL` -BANK_PORT=`taler-config -c $CONF_ONCE -s BANK -o HTTP_PORT` -BANK_URL="http://localhost:1${BANK_PORT}/demobanks/default" echo "MASTER PUB is ${MASTER_PUB} using file ${MASTER_PRIV_FILE}" echo "AUDITOR PUB is ${AUDITOR_PUB} using file ${AUDITOR_PRIV_FILE}" # patch configuration -taler-config -c $CONF_ONCE -s exchange -o MASTER_PUBLIC_KEY -V $MASTER_PUB -taler-config -c $CONF_ONCE -s auditor -o PUBLIC_KEY -V $AUDITOR_PUB -taler-config -c $CONF_ONCE -s merchant-exchange-default -o MASTER_KEY -V $MASTER_PUB +taler-config -c $CONF -s exchange -o MASTER_PUBLIC_KEY -V $MASTER_PUB +taler-config -c $CONF -s auditor -o PUBLIC_KEY -V $AUDITOR_PUB +taler-config -c $CONF -s merchant-exchange-default -o MASTER_KEY -V $MASTER_PUB -taler-config -c $CONF_ONCE -s exchangedb-postgres -o CONFIG -V postgres:///$TARGET_DB -taler-config -c $CONF_ONCE -s auditordb-postgres -o CONFIG -V postgres:///$TARGET_DB -taler-config -c $CONF_ONCE -s merchantdb-postgres -o CONFIG -V postgres:///$TARGET_DB -taler-config -c $CONF_ONCE -s bank -o database -V postgres:///$TARGET_DB +taler-config -c $CONF -s exchangedb-postgres -o CONFIG -V postgres:///$TARGET_DB +taler-config -c $CONF -s auditordb-postgres -o CONFIG -V postgres:///$TARGET_DB +taler-config -c $CONF -s merchantdb-postgres -o CONFIG -V postgres:///$TARGET_DB +taler-config -c $CONF -s bank -o database -V postgres:///$TARGET_DB # setup exchange echo "Setting up exchange" -taler-exchange-dbinit -c $CONF_ONCE +taler-exchange-dbinit -c $CONF echo "Setting up merchant" -taler-merchant-dbinit -c $CONF_ONCE +taler-merchant-dbinit -c $CONF # setup auditor echo "Setting up auditor" -taler-auditor-dbinit -c $CONF_ONCE || exit_skip "Failed to initialize auditor DB" -taler-auditor-exchange -c $CONF_ONCE -m $MASTER_PUB -u $EXCHANGE_URL || exit_skip "Failed to add exchange to auditor" +taler-auditor-dbinit -c $CONF || exit_skip "Failed to initialize auditor DB" +taler-auditor-exchange -c $CONF -m $MASTER_PUB -u $EXCHANGE_URL || exit_skip "Failed to add exchange to auditor" # Launch services echo "Launching services (pre audit DB: $TARGET_DB)" -taler-bank-manage-testing $BANK_PORT $TARGET_DB $EXCHANGE_URL $CONF_ONCE +taler-bank-manage-testing $BANK_PORT $TARGET_DB $EXCHANGE_URL $CONF TFN=`which taler-exchange-httpd` TBINPFX=`dirname $TFN` TLIBEXEC=${TBINPFX}/../lib/taler/libexec/ -taler-exchange-secmod-eddsa -c $CONF_ONCE 2> taler-exchange-secmod-eddsa.log & -taler-exchange-secmod-rsa -c $CONF_ONCE 2> taler-exchange-secmod-rsa.log & -taler-exchange-secmod-cs -c $CONF_ONCE 2> taler-exchange-secmod-cs.log & -taler-exchange-httpd -c $CONF_ONCE 2> taler-exchange-httpd.log & -taler-merchant-httpd -c $CONF_ONCE -L INFO 2> taler-merchant-httpd.log & -taler-exchange-wirewatch -c $CONF_ONCE 2> taler-exchange-wirewatch.log & -taler-auditor-httpd -L INFO -c $CONF_ONCE 2> taler-auditor-httpd.log & +taler-exchange-secmod-eddsa -c $CONF 2> taler-exchange-secmod-eddsa.log & +taler-exchange-secmod-rsa -c $CONF 2> taler-exchange-secmod-rsa.log & +taler-exchange-secmod-cs -c $CONF 2> taler-exchange-secmod-cs.log & +taler-exchange-httpd -c $CONF 2> taler-exchange-httpd.log & +taler-merchant-httpd -c $CONF -L INFO 2> taler-merchant-httpd.log & +taler-exchange-wirewatch -c $CONF 2> taler-exchange-wirewatch.log & +taler-auditor-httpd -L INFO -c $CONF 2> taler-auditor-httpd.log & # Wait for all bank to be available (usually the slowest) for n in `seq 1 50` @@ -195,9 +193,9 @@ then exit_skip "Failed to launch services" fi echo -n "Setting up keys" -taler-exchange-offline -c $CONF_ONCE \ +taler-exchange-offline -c $CONF \ download sign \ - enable-account `taler-config -c $CONF_ONCE -s exchange-account-1 -o PAYTO_URI` \ + enable-account `taler-config -c $CONF -s exchange-account-1 -o PAYTO_URI` \ enable-auditor $AUDITOR_PUB $AUDITOR_URL "TESTKUDOS Auditor" \ wire-fee now iban TESTKUDOS:0.07 TESTKUDOS:0.01 TESTKUDOS:0.01 \ global-fee now TESTKUDOS:0.01 TESTKUDOS:0.01 TESTKUDOS:0.01 TESTKUDOS:0.01 1h 1h 1year 5 \ @@ -222,7 +220,7 @@ fi echo " DONE" echo -n "Adding auditor signatures ..." -taler-auditor-offline -c $CONF_ONCE \ +taler-auditor-offline -c $CONF \ download sign upload &> taler-auditor-offline.log echo " DONE" diff --git a/src/auditor/generate-revoke-basedb.sh b/src/auditor/generate-revoke-basedb.sh index 64e25d59d..0d33d3a3b 100755 --- a/src/auditor/generate-revoke-basedb.sh +++ b/src/auditor/generate-revoke-basedb.sh @@ -59,7 +59,7 @@ rm -f $WALLET_DB # from the template. export CONF=${BASEDB}.conf cp generate-auditor-basedb.conf $CONF -taler-config -c ${CONF} -s exchange-offline -o MASTER_PRIV_FILE -V ${BASEDB}.mpriv +echo "Created configuration at ${CONF}" echo -n "Testing for libeufin(-cli)" libeufin-cli --help >/dev/null /dev/null 2>/dev/null || true # libeufin # obtain key configuration data -MASTER_PRIV_FILE=${TARGET_DB}.priv -taler-config -f -c $CONF -s exchange-offline -o MASTER_PRIV_FILE -V ${MASTER_PRIV_FILE} +MASTER_PRIV_FILE=$1.mpriv MASTER_PRIV_DIR=`dirname $MASTER_PRIV_FILE` +taler-config -f -c $CONF -s exchange-offline -o MASTER_PRIV_FILE -V ${MASTER_PRIV_FILE} mkdir -p $MASTER_PRIV_DIR rm -f "${MASTER_PRIV_FILE}" gnunet-ecc -g1 $MASTER_PRIV_FILE > /dev/null @@ -94,14 +94,20 @@ export MERCHANT_URL=http://localhost:${MERCHANT_PORT}/ BANK_PORT=`taler-config -c $CONF -s BANK -o HTTP_PORT` export BANK_URL=http://localhost:1${BANK_PORT}/demobanks/default export AUDITOR_URL=http://localhost:8083/ -AUDITOR_PRIV_FILE=`taler-config -f -c $CONF -s AUDITOR -o AUDITOR_PRIV_FILE` +AUDITOR_PRIV_FILE=$1.apriv AUDITOR_PRIV_DIR=`dirname $AUDITOR_PRIV_FILE` +taler-config -f -c ${CONF} -s auditor -o AUDITOR_PRIV_FILE -V ${AUDITOR_PRIV_FILE} mkdir -p $AUDITOR_PRIV_DIR -gnunet-ecc -g1 $AUDITOR_PRIV_FILE > /dev/null +gnunet-ecc -l /dev/null -g1 $AUDITOR_PRIV_FILE > /dev/null AUDITOR_PUB=`gnunet-ecc -p $AUDITOR_PRIV_FILE` +echo "MASTER PUB is ${MASTER_PUB} using file ${MASTER_PRIV_FILE}" +echo "AUDITOR PUB is ${AUDITOR_PUB} using file ${AUDITOR_PRIV_FILE}" + + # patch configuration taler-config -c $CONF -s exchange -o MASTER_PUBLIC_KEY -V $MASTER_PUB +taler-config -c $CONF -s auditor -o PUBLIC_KEY -V $AUDITOR_PUB taler-config -c $CONF -s merchant-exchange-default -o MASTER_KEY -V $MASTER_PUB taler-config -c $CONF -s exchangedb-postgres -o CONFIG -V postgres:///$TARGET_DB taler-config -c $CONF -s auditordb-postgres -o CONFIG -V postgres:///$TARGET_DB @@ -419,12 +425,9 @@ date +%s > ${BASEDB}.age echo "Final clean up" dropdb $TARGET_DB rm $TARGET_DB # libeufin -rm -rf $DATA_DIR || true -rm -f $CONF -rm -r $TMP_DIR echo "=====================================" -echo " Finished revocation DB generation " +echo " Finished generation of $BASEDB " echo "=====================================" exit 0 diff --git a/src/auditor/test-auditor.sh b/src/auditor/test-auditor.sh index 637a21d9c..937da49f4 100755 --- a/src/auditor/test-auditor.sh +++ b/src/auditor/test-auditor.sh @@ -67,13 +67,20 @@ function stop_libeufin() if test -f libeufin-sandbox.pid then echo "Killing libeufin sandbox" - kill `cat libeufin-sandbox.pid 2> /dev/null` &> /dev/null || true + PID=`cat libeufin-sandbox.pid 2> /dev/null` + kill $PID || true + wait $PID + rm libeufin-sandbox.pid fi if test -f libeufin-nexus.pid then echo "Killing libeufin nexus" - kill `cat libeufin-nexus.pid 2> /dev/null` &> /dev/null || true + PID=`cat libeufin-nexus.pid 2> /dev/null` + kill $PID || true + wait $PID + rm libeufin-nexus.pid fi + echo "killing libeufin DONE" } # Cleanup exchange and libeufin between runs. @@ -84,12 +91,10 @@ function cleanup() echo -n "Stopping exchange $EPID..." kill -TERM $EPID wait $EPID - echo " DONE" + echo "DONE" unset EPID fi - stop_libeufin - echo DONE } # Cleanup to run whenever we exit @@ -324,7 +329,8 @@ function full_reload() createdb -T template0 $DB || exit_skip "could not create database $DB (at $PGHOST)" # Import pre-generated database, -q(ietly) using single (-1) transaction psql -Aqt $DB -q -1 -f ${BASEDB}.sql > /dev/null || exit_skip "Failed to load database $DB from ${BASEDB}.sql" - echo "Loading libeufin basedb: ${BASEDB}-libeufin.sql" + echo "DONE" + echo -n "Loading libeufin basedb: ${BASEDB}-libeufin.sql" sqlite3 $DB.sqlite3 < ${BASEDB}-libeufin.sql || exit_skip "Failed to load libEufin database" echo "DONE" } @@ -2037,7 +2043,6 @@ echo "Testing for pdflatex" which pdflatex > /dev/null /dev/null /dev/null || exit_skip "taler-wallet-cli required" -MYDIR=`mktemp -d /tmp/taler-auditor-basedbXXXXXX` echo -n "Testing for Postgres" @@ -2072,11 +2077,11 @@ echo " DONE" PGHOST="$TMPDIR/sockets" export PGHOST - +MYDIR=`mktemp -d /tmp/taler-auditor-basedbXXXXXX` echo "Generating fresh database at $MYDIR" -if faketime -f '-1 d' ./generate-auditor-basedb.sh $MYDIR/auditor-basedb +if faketime -f '-1 d' ./generate-auditor-basedb.sh $MYDIR/$DB then - check_with_database $MYDIR/auditor-basedb + check_with_database $MYDIR/$DB if test x$fail != x0 then exit $fail diff --git a/src/auditor/test-revocation.sh b/src/auditor/test-revocation.sh index fcffd05b7..011585340 100755 --- a/src/auditor/test-revocation.sh +++ b/src/auditor/test-revocation.sh @@ -54,33 +54,63 @@ function exit_fail() { exit 1 } +function stop_libeufin() +{ + echo "killing libeufin..." + if test -f libeufin-sandbox.pid + then + echo "Killing libeufin sandbox" + PID=`cat libeufin-sandbox.pid 2> /dev/null` + kill $PID || true + wait $PID + rm libeufin-sandbox.pid + fi + if test -f libeufin-nexus.pid + then + echo "Killing libeufin nexus" + PID=`cat libeufin-nexus.pid 2> /dev/null` + kill $PID || true + wait $PID + rm libeufin-nexus.pid + fi + echo "killing libeufin DONE" +} + + # Cleanup to run whenever we exit function cleanup() { + if test ! -z ${EPID:-} + then + echo -n "Stopping exchange $EPID..." + kill -TERM $EPID + wait $EPID + echo " DONE" + unset EPID + fi + stop_libeufin +} + +# Cleanup to run whenever we exit +function exit_cleanup() +{ + echo "Running exit-cleanup" if test ! -z ${POSTGRES_PATH:-} then + echo "Stopping Postgres at ${POSTGRES_PATH}" ${POSTGRES_PATH}/pg_ctl -D $TMPDIR -l /dev/null stop &> /dev/null || true fi + cleanup for n in `jobs -p` do kill $n 2> /dev/null || true done 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 + echo "DONE" } # Install cleanup handler (except for kill -9) -trap cleanup EXIT +trap exit_cleanup EXIT # Downloads new transactions from the bank. function nexus_fetch_transactions () { @@ -214,10 +244,8 @@ function audit_only () { # Cleanup to run after the auditor function post_audit () { - echo -n "Cleanup ..." cleanup - echo " DONE" - echo -n "TeXing ." + echo -n "TeXing ." taler-helper-auditor-render.py test-audit-aggregation.json test-audit-coins.json test-audit-deposits.json test-audit-reserves.json test-audit-wire.json < ../../contrib/auditor-report.tex.j2 > test-report.tex || exit_fail "Renderer failed" echo -n "." @@ -246,9 +274,11 @@ function full_reload() echo -n "Doing full reload of the database... " dropdb $DB 2> /dev/null || true rm -f $DB.sqlite3 || true # libeufin - createdb -T template0 $DB || exit_skip "could not create database" + createdb -T template0 $DB || exit_skip "could not create database $DB (at $PGHOST)" # Import pre-generated database, -q(ietly) using single (-1) transaction - psql -Aqt $DB -q -1 -f ${BASEDB}.sql > /dev/null || exit_skip "Failed to load database" + psql -Aqt $DB -q -1 -f ${BASEDB}.sql > /dev/null || exit_skip "Failed to load database $DB from ${BASEDB}.sql" + echo "DONE" + echo "Loading libeufin basedb: ${BASEDB}-libeufin.sql" sqlite3 $DB.sqlite3 < ${BASEDB}-libeufin.sql || exit_skip "Failed to load libEufin database" echo "DONE" # Exchange payto URI contains the (dynamically generated) @@ -584,8 +614,9 @@ function check_with_database() # *************** Main logic starts here ************** # ####### Setup globals ###### -# Postgres database to use (must match revoke-basedb.conf) -DB=taler-auditor-test +# Postgres database to use +DB=revoke-basedb + # test required commands exist echo "Testing for jq" @@ -633,9 +664,9 @@ export PGHOST MYDIR=`mktemp -d /tmp/taler-auditor-basedbXXXXXX` echo "Generating fresh database at $MYDIR" -if faketime -f '-1 d' ./generate-revoke-basedb.sh $MYDIR/revoke-basedb +if faketime -f '-1 d' ./generate-revoke-basedb.sh $MYDIR/$DB then - check_with_database $MYDIR/revoke-basedb + check_with_database $MYDIR/$DB if test x$fail != x0 then exit $fail -- cgit v1.2.3