diff options
author | Christian Grothoff <christian@grothoff.org> | 2021-07-30 10:47:14 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2021-07-30 10:47:14 +0200 |
commit | f3181db7c364e4f91d68fb987164402dc33f68ce (patch) | |
tree | b3af7e9de477006c2ba0fe623c95030f344ef3b3 /src/testing/test_prepare.sh | |
download | anastasis-gtk-f3181db7c364e4f91d68fb987164402dc33f68ce.tar.gz anastasis-gtk-f3181db7c364e4f91d68fb987164402dc33f68ce.tar.bz2 anastasis-gtk-f3181db7c364e4f91d68fb987164402dc33f68ce.zip |
folding history in preparation of GNU Anastasis-gtk v0.0.0 release
Diffstat (limited to 'src/testing/test_prepare.sh')
-rwxr-xr-x | src/testing/test_prepare.sh | 322 |
1 files changed, 322 insertions, 0 deletions
diff --git a/src/testing/test_prepare.sh b/src/testing/test_prepare.sh new file mode 100755 index 0000000..253cb8f --- /dev/null +++ b/src/testing/test_prepare.sh @@ -0,0 +1,322 @@ +#!/bin/bash +# Shell script to launch Taler components +# and Anastasis providers for local test +# using TESTKUDOS. + +set -eu + +# Exit, with status code "skip" (no 'real' failure) +function exit_skip() { + echo " SKIP: $1" + exit 77 +} + +# Exit, with error message (hard failure) +function exit_fail() { + echo " FAIL: $1" + exit 1 +} + +# Cleanup to run whenever we exit +function cleanup() +{ + for n in `jobs -p` + do + kill $n 2> /dev/null || true + done + rm -rf $CONF $WALLET_DB $R1FILE $R2FILE $B1FILE $B2FILE $TMP_DIR + wait +} + +if test "${1:-}" != "free" -a "${1:-}" != "fees" +then + echo "Launch script with either 'free' or 'fees' argument to launch providers with/without fees." + exit 1 +fi + +CONF_1="test_anastasis_reducer_1.conf" +CONF_2="test_anastasis_reducer_2.conf" +CONF_3="test_anastasis_reducer_3.conf" +CONF_4="test_anastasis_reducer_4.conf" +if test $1 = 'free' +then + CONF_4="test_anastasis_reducer_4_free.conf" +fi + +# Exchange configuration file will be edited, so we create one +# from the template. +CONF=`mktemp test_reducerXXXXXX.conf` +cp test_reducer.conf $CONF + +TMP_DIR=`mktemp -d keys-tmp-XXXXXX` +WALLET_DB=`mktemp test_reducer_walletXXXXXX.json` +B1FILE=`mktemp test_reducer_stateB1XXXXXX` +B2FILE=`mktemp test_reducer_stateB2XXXXXX` +R1FILE=`mktemp test_reducer_stateR1XXXXXX` +R2FILE=`mktemp test_reducer_stateR2XXXXXX` + +# Install cleanup handler (except for kill -9) +trap cleanup EXIT + +# Check we can actually run +if test $1 = 'fees' +then + echo -n "Testing for taler" + taler-exchange-httpd -h > /dev/null || exit_skip " taler-exchange required" + taler-merchant-httpd -h > /dev/null || exit_skip " taler-merchant required" + echo " FOUND" + + echo -n "Testing for taler-bank-manage" + taler-bank-manage --help >/dev/null </dev/null || exit_skip " MISSING" + echo " FOUND" + + echo -n "Testing for taler-wallet-cli" + taler-wallet-cli -v >/dev/null </dev/null || exit_skip " MISSING" + echo " FOUND" +fi + +echo -n "Testing for anastasis-httpd" +anastasis-httpd -h >/dev/null </dev/null || exit_skip " MISSING" +echo " FOUND" + +echo -n "Initialize anastasis database ..." +# Name of the Postgres database we will use for the script. +# Will be dropped, do NOT use anything that might be used +# elsewhere +TARGET_DB_1=`anastasis-config -c $CONF_1 -s stasis-postgres -o CONFIG | sed -e "s/^postgres:\/\/\///"` +TARGET_DB_2=`anastasis-config -c $CONF_2 -s stasis-postgres -o CONFIG | sed -e "s/^postgres:\/\/\///"` +TARGET_DB_3=`anastasis-config -c $CONF_3 -s stasis-postgres -o CONFIG | sed -e "s/^postgres:\/\/\///"` +TARGET_DB_4=`anastasis-config -c $CONF_4 -s stasis-postgres -o CONFIG | sed -e "s/^postgres:\/\/\///"` + +dropdb $TARGET_DB_1 >/dev/null 2>/dev/null || true +createdb $TARGET_DB_1 || exit_skip "Could not create database $TARGET_DB_1" +anastasis-dbinit -c $CONF_1 2> anastasis-dbinit_1.log +dropdb $TARGET_DB_2 >/dev/null 2>/dev/null || true +createdb $TARGET_DB_2 || exit_skip "Could not create database $TARGET_DB_2" +anastasis-dbinit -c $CONF_2 2> anastasis-dbinit_2.log +dropdb $TARGET_DB_3 >/dev/null 2>/dev/null || true +createdb $TARGET_DB_3 || exit_skip "Could not create database $TARGET_DB_3" +anastasis-dbinit -c $CONF_3 2> anastasis-dbinit_3.log +dropdb $TARGET_DB_4 >/dev/null 2>/dev/null || true +createdb $TARGET_DB_4 || exit_skip "Could not create database $TARGET_DB_4" +anastasis-dbinit -c $CONF_4 2> anastasis-dbinit_4.log + +echo " OK" + +if test $1 = 'fees' +then + + echo -n "Generating Taler auditor, exchange and merchant configurations ..." + + DATA_DIR=`taler-config -f -c $CONF -s PATHS -o TALER_HOME` + rm -rf $DATA_DIR + + # obtain key configuration data + MASTER_PRIV_FILE=`taler-config -f -c $CONF -s EXCHANGE -o MASTER_PRIV_FILE` + MASTER_PRIV_DIR=`dirname $MASTER_PRIV_FILE` + mkdir -p $MASTER_PRIV_DIR + gnunet-ecc -g1 $MASTER_PRIV_FILE > /dev/null 2> /dev/null + MASTER_PUB=`gnunet-ecc -p $MASTER_PRIV_FILE` + EXCHANGE_URL=`taler-config -c $CONF -s EXCHANGE -o BASE_URL` + MERCHANT_PORT=`taler-config -c $CONF -s MERCHANT -o PORT` + MERCHANT_URL=http://localhost:${MERCHANT_PORT}/ + BANK_PORT=`taler-config -c $CONF -s BANK -o HTTP_PORT` + BANK_URL=http://localhost:${BANK_PORT}/ + AUDITOR_URL=http://localhost:8083/ + AUDITOR_PRIV_FILE=`taler-config -f -c $CONF -s AUDITOR -o AUDITOR_PRIV_FILE` + AUDITOR_PRIV_DIR=`dirname $AUDITOR_PRIV_FILE` + mkdir -p $AUDITOR_PRIV_DIR + gnunet-ecc -g1 $AUDITOR_PRIV_FILE > /dev/null 2> /dev/null + AUDITOR_PUB=`gnunet-ecc -p $AUDITOR_PRIV_FILE` + + # patch configuration + TALER_DB=talercheck + taler-config -c $CONF -s exchange -o MASTER_PUBLIC_KEY -V $MASTER_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:///$TALER_DB + taler-config -c $CONF -s auditordb-postgres -o CONFIG -V postgres:///$TALER_DB + taler-config -c $CONF -s merchantdb-postgres -o CONFIG -V postgres:///$TALER_DB + taler-config -c $CONF -s bank -o database -V postgres:///$TALER_DB + taler-config -c $CONF -s exchange -o KEYDIR -V "${TMP_DIR}/keydir/" + taler-config -c $CONF -s exchange -o REVOCATION_DIR -V "${TMP_DIR}/revdir/" + + echo " OK" + + echo -n "Setting up exchange ..." + + # reset database + dropdb $TALER_DB >/dev/null 2>/dev/null || true + createdb $TALER_DB || exit_skip "Could not create database $TALER_DB" + taler-exchange-dbinit -c $CONF + taler-merchant-dbinit -c $CONF + taler-auditor-dbinit -c $CONF + taler-auditor-exchange -c $CONF -m $MASTER_PUB -u $EXCHANGE_URL + + echo " OK" + + # Launch services + echo -n "Launching taler services ..." + taler-bank-manage-testing $CONF postgres:///$TALER_DB serve > taler-bank.log 2> taler-bank.err & + 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-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 & + + echo " OK" + +fi + + +echo -n "Launching anastasis services ..." +# PREFIX="valgrind --log-file=anastasis-httpd.%p.log" +PREFIX="" +$PREFIX anastasis-httpd -L INFO -c $CONF_1 2> anastasis-httpd_1.log & +$PREFIX anastasis-httpd -L INFO -c $CONF_2 2> anastasis-httpd_2.log & +$PREFIX anastasis-httpd -L INFO -c $CONF_3 2> anastasis-httpd_3.log & +$PREFIX anastasis-httpd -L INFO -c $CONF_4 2> anastasis-httpd_4.log & + + +if test $1 = 'fees' +then + + # Wait for bank to be available (usually the slowest) + for n in `seq 1 50` + do + echo -n "." + sleep 0.2 + OK=0 + # bank + wget --tries=1 --timeout=1 http://localhost:8082/ -o /dev/null -O /dev/null >/dev/null || continue + OK=1 + break + done + + if [ 1 != $OK ] + then + exit_skip "Failed to launch services (bank)" + fi + + # Wait for all other taler services to be available + for n in `seq 1 50` + do + echo -n "." + sleep 0.1 + OK=0 + # exchange + wget --tries=1 --timeout=1 http://localhost:8081/seed -o /dev/null -O /dev/null >/dev/null || continue + # merchant + wget --tries=1 --timeout=1 http://localhost:9966/ -o /dev/null -O /dev/null >/dev/null || continue + # auditor + wget --tries=1 --timeout=1 http://localhost:8083/ -o /dev/null -O /dev/null >/dev/null || continue + OK=1 + break + done + + if [ 1 != $OK ] + then + exit_skip "Failed to launch taler services" + fi + + echo "OK" + + echo -n "Setting up keys ..." + taler-exchange-offline -c $CONF \ + download \ + sign \ + enable-account payto://x-taler-bank/localhost/Exchange \ + enable-auditor $AUDITOR_PUB $AUDITOR_URL "TESTKUDOS Auditor" \ + wire-fee now x-taler-bank TESTKUDOS:0.01 TESTKUDOS:0.01 \ + upload &> taler-exchange-offline.log + + echo -n "." + + for n in `seq 1 3` + do + echo -n "." + OK=0 + wget --tries=1 --timeout=1 http://localhost:8081/keys -o /dev/null -O /dev/null >/dev/null || continue + OK=1 + break + done + + if [ 1 != $OK ] + then + exit_skip "Failed to setup keys" + fi + + echo " OK" + + echo -n "Setting up auditor signatures ..." + taler-auditor-offline -c $CONF \ + download sign upload &> taler-auditor-offline.log + echo " OK" + +fi + +echo -n "Waiting for anastasis services ..." + +# Wait for anastasis services to be available +for n in `seq 1 50` +do + echo -n "." + sleep 0.1 + OK=0 + # anastasis_01 + wget --tries=1 --timeout=1 http://localhost:8086/ -o /dev/null -O /dev/null >/dev/null || continue + # anastasis_02 + wget --tries=1 --timeout=1 http://localhost:8087/ -o /dev/null -O /dev/null >/dev/null || continue + # anastasis_03 + wget --tries=1 --timeout=1 http://localhost:8088/ -o /dev/null -O /dev/null >/dev/null || continue + # anastasis_04 + wget --tries=1 --timeout=1 http://localhost:8089/ -o /dev/null -O /dev/null >/dev/null || continue + OK=1 + break +done + +if [ 1 != $OK ] +then + exit_skip "Failed to launch anastasis services" +fi +echo "OK" + +if test $1 = 'fees' +then + + echo -n "Configuring merchant instance ..." + # Setup merchant + + curl -H "Content-Type: application/json" -X POST -d '{"auth":{"method":"external"},"payto_uris":["payto://x-taler-bank/localhost/43"],"id":"default","name":"default","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1", "default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_ms" : 3600000},"default_pay_delay":{"d_ms": 3600000}}' http://localhost:9966/private/instances + + echo " OK" + + echo -n "Preparing wallet" + rm $WALLET_DB + taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB api 'withdrawTestBalance' \ + "$(jq -n ' + { + amount: "TESTKUDOS:100", + bankBaseUrl: $BANK_URL, + exchangeBaseUrl: $EXCHANGE_URL + }' \ + --arg BANK_URL "$BANK_URL" \ + --arg EXCHANGE_URL "$EXCHANGE_URL" + )" 2> /dev/null >/dev/null + taler-wallet-cli --wallet-db=$WALLET_DB run-until-done 2>/dev/null >/dev/null + echo " OK" + +fi + +echo "You can now run anastasis-gtk in the shell we are starting now." +echo "Exit the shell when done to terminate the test environment!" + +if test $1 = 'fees' +then + echo "Use 'taler-wallet-cli --wallet-db=\$WALLET_DB handle-uri \$PAY_URI -y' to pay" + export WALLET_DB +fi + +bash + +exit 0 |