This commit is contained in:
Christian Grothoff 2022-09-19 19:32:18 +02:00
parent 230cfa4f93
commit 3fa9f3bb12
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
4 changed files with 114 additions and 77 deletions

View File

@ -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 || exit_skip " MISSING"
@ -91,7 +89,7 @@ echo " FOUND"
# Clean up
DATA_DIR=`taler-config -f -c $CONF_ONCE -s PATHS -o TALER_HOME`
DATA_DIR=`taler-config -f -c $CONF -s PATHS -o TALER_HOME`
# reset database
dropdb $TARGET_DB >/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"

View File

@ -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 || exit_skip " MISSING"
@ -81,9 +81,9 @@ createdb $TARGET_DB || exit_skip "Could not create database $TARGET_DB"
rm $TARGET_DB >/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

View File

@ -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 || exit_skip "pdflatex required"
echo "Testing for taler-wallet-cli"
taler-wallet-cli -h >/dev/null </dev/null 2>/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

View File

@ -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,9 +244,7 @@ function audit_only () {
# Cleanup to run after the auditor
function post_audit () {
echo -n "Cleanup ..."
cleanup
echo " DONE"
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"
@ -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