diff options
Diffstat (limited to 'src/cli')
-rw-r--r-- | src/cli/.gitignore | 4 | ||||
-rw-r--r-- | src/cli/Makefile.am | 8 | ||||
-rwxr-xr-x | src/cli/setup.sh | 72 | ||||
-rwxr-xr-x | src/cli/test_anastasis_reducer_done_authentication.sh | 4 | ||||
-rwxr-xr-x | src/cli/test_anastasis_reducer_enter_secret.sh | 446 | ||||
-rwxr-xr-x | src/cli/test_anastasis_reducer_recovery_enter_user_attributes.sh | 494 | ||||
-rwxr-xr-x | src/cli/test_anastasis_reducer_recovery_no_pay.sh | 6 | ||||
-rwxr-xr-x | src/cli/test_iban.sh | 265 | ||||
-rw-r--r-- | src/cli/test_reducer.conf | 47 | ||||
-rw-r--r-- | src/cli/test_reducer_free.conf | 2 | ||||
-rw-r--r-- | src/cli/test_reducer_home/.local/share/taler/exchange-offline/master.priv | 1 |
11 files changed, 616 insertions, 733 deletions
diff --git a/src/cli/.gitignore b/src/cli/.gitignore index 67af1d8..111e321 100644 --- a/src/cli/.gitignore +++ b/src/cli/.gitignore @@ -1,5 +1,6 @@ *.log *.err +*.out anastasis-reducer test_reducer_home *.trs @@ -7,3 +8,6 @@ taler-bank.err wallet.err anastasis-discover talercheck +test_reducer.conf.edited +wallet-withdraw.out +libeufin-transfer-initiate.out diff --git a/src/cli/Makefile.am b/src/cli/Makefile.am index 44cad27..8b2a9a0 100644 --- a/src/cli/Makefile.am +++ b/src/cli/Makefile.am @@ -21,8 +21,10 @@ check_SCRIPTS = \ test_anastasis_reducer_enter_secret.sh \ test_anastasis_reducer_recovery_enter_user_attributes.sh \ test_anastasis_reducer_recovery_no_pay.sh \ - test_anastasis_reducer_recovery_hanging.sh \ - test_iban.sh + test_anastasis_reducer_recovery_hanging.sh + +# Removed for now, libeufin is not yet working OK for this. +# test_iban.sh AM_TESTS_ENVIRONMENT=export ANASTASIS_PREFIX=$${ANASTASIS_PREFIX:-@libdir@};export PATH=$${ANASTASIS_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME; @@ -32,6 +34,8 @@ TESTS = \ EXTRA_DIST = \ $(check_SCRIPTS) \ + setup.sh \ + test_reducer_home/.local/share/taler/exchange-offline/master.priv \ test_reducer.conf \ test_reducer_free.conf \ test_free_reducer.conf \ diff --git a/src/cli/setup.sh b/src/cli/setup.sh new file mode 100755 index 0000000..6d26168 --- /dev/null +++ b/src/cli/setup.sh @@ -0,0 +1,72 @@ +#!/bin/sh +# This file is in the public domain + +# Script to be inlined into the main test scripts. Defines function 'setup()' +# which wraps around 'taler-unified-setup.sh' to launch GNU Taler services. +# Call setup() with the arguments to pass to 'taler-unified-setup'. setup() +# will then launch GNU Taler, wait for the process to be complete before +# returning. The script will also install an exit handler to ensure the GNU +# Taler processes are stopped when the shell exits. + +set -eu + +# Cleanup to run whenever we exit +function exit_cleanup() +{ + if [ ! -z ${SETUP_PID+x} ] + then + echo "Killing taler-unified-setup ($SETUP_PID)" >&2 + kill -TERM "$SETUP_PID" 2> /dev/null || true + wait "$SETUP_PID" 2> /dev/null || true + fi +} + +# Install cleanup handler (except for kill -9) +trap exit_cleanup EXIT + +function setup() +{ + echo "Starting test system ..." >&2 + # Create a named pipe in a temp directory we own. + FIFO_DIR=$(mktemp -p "${TMPDIR:-/tmp}" -d fifo-XXXXXX) + FIFO_OUT=$(echo "$FIFO_DIR/out") + mkfifo "$FIFO_OUT" + # Open pipe as FD 3 (RW) and FD 4 (RO) + exec 3<> "$FIFO_OUT" 4< "$FIFO_OUT" + rm -rf "$FIFO_DIR" + # We require '-W' for our termination logic to work. + taler-unified-setup.sh -W "$@" >&3 & + SETUP_PID=$! + # Close FD3 + exec 3>&- + sed -u '/<<READY>>/ q' <&4 + # Close FD4 + exec 4>&- + echo "Test system ready" >&2 +} + +# Exit, with status code "skip" (no 'real' failure) +function exit_fail() { + echo "$@" >&2 + exit 1 +} + +# Exit, with status code "skip" (no 'real' failure) +function exit_skip() { + echo "SKIPPING: $1" + exit 77 +} + +function get_payto_uri() { + export LIBEUFIN_SANDBOX_USERNAME="$1" + export LIBEUFIN_SANDBOX_PASSWORD="$2" + export LIBEUFIN_SANDBOX_URL="http://localhost:18082" + libeufin-cli sandbox demobank info --bank-account "$1" | jq --raw-output '.paytoUri' +} + +function get_bankaccount_transactions() { + export LIBEUFIN_SANDBOX_USERNAME=$1 + export LIBEUFIN_SANDBOX_PASSWORD=$2 + export LIBEUFIN_SANDBOX_URL="http://localhost:18082" + libeufin-cli sandbox demobank list-transactions --bank-account $1 +} diff --git a/src/cli/test_anastasis_reducer_done_authentication.sh b/src/cli/test_anastasis_reducer_done_authentication.sh index 87c738c..545c733 100755 --- a/src/cli/test_anastasis_reducer_done_authentication.sh +++ b/src/cli/test_anastasis_reducer_done_authentication.sh @@ -46,9 +46,9 @@ echo " OK" echo -n "Test done authentication (next) ..." -anastasis-reducer next resources/04-backup.json $TFILE +anastasis-reducer next resources/04-backup.json "$TFILE" -STATE=`jq -r -e .backup_state < $TFILE` +STATE=$(jq -r -e .backup_state < "$TFILE") if test "$STATE" != "POLICIES_REVIEWING" then exit_fail "Expected new state to be AUTHENTICATIONS_EDITING, got $STATE" diff --git a/src/cli/test_anastasis_reducer_enter_secret.sh b/src/cli/test_anastasis_reducer_enter_secret.sh index e656116..3b25537 100755 --- a/src/cli/test_anastasis_reducer_enter_secret.sh +++ b/src/cli/test_anastasis_reducer_enter_secret.sh @@ -1,6 +1,7 @@ #!/bin/bash # This file is in the public domain. +# shellcheck disable=SC2317 ## Coloring style Text shell script COLOR='\033[0;35m' NOCOLOR='\033[0m' @@ -8,70 +9,23 @@ BOLD="$(tput bold)" NORM="$(tput sgr0)" set -eu -set -x -# 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 -} - -# Stop libeufin sandbox and nexus (if running) -function stop_libeufin() -{ - echo "Stopping libeufin..." - if test -f libeufin-sandbox.pid - then - PID=`cat libeufin-sandbox.pid 2> /dev/null` - echo "Killing libeufin sandbox $PID" - rm libeufin-sandbox.pid - kill $PID 2> /dev/null || true - fi - if test -f libeufin-nexus.pid - then - PID=`cat libeufin-nexus.pid 2> /dev/null` - echo "Killing libeufin nexus $PID" - rm libeufin-nexus.pid - kill $PID 2> /dev/null || true - fi - echo "Stopping libeufin DONE" -} - -# Cleanup to run whenever we exit -function cleanup() -{ - for n in `jobs -p` - do - kill $n 2> /dev/null || true - done - stop_libeufin - rm -rf $CONF $WALLET_DB $TFILE $UFILE $TMP_DIR - wait -} - -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" - -# 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` -TFILE=`mktemp test_reducer_statePPXXXXXX` -UFILE=`mktemp test_reducer_stateBFXXXXXX` - -# Install cleanup handler (except for kill -9) -trap cleanup EXIT +# Replace with 0 for nexus... +USE_FAKEBANK=1 +if [ 1 = "$USE_FAKEBANK" ] +then + ACCOUNT="exchange-account-2" + WIRE_METHOD="x-taler-bank" + BANK_FLAGS="-f -d $WIRE_METHOD -u $ACCOUNT" + BANK_URL="http://localhost:18082/" + MERCHANT_PAYTO="payto://x-taler-bank/localhost/anastasis?receiver-name=anastasis" +else + ACCOUNT="exchange-account-1" + WIRE_METHOD="iban" + BANK_FLAGS="-ns -d $WIRE_METHOD -u $ACCOUNT" + BANK_URL="http://localhost:18082/" + MERCHANT_PAYTO="payto://iban/SANDBOXX/DE648226?receiver-name=anastasis" +fi # Check we can actually run echo -n "Testing for jq" @@ -86,9 +40,6 @@ 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-testing" -taler-bank-manage-testing --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" @@ -97,89 +48,65 @@ 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 +. setup.sh +# Launch exchange, merchant and bank. +# shellcheck disable=SC2086 +setup -c "test_reducer.conf" \ + -aemw \ + $BANK_FLAGS -echo " OK" -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-OFFLINE" -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}/ -NEXUS_PORT=8082 -BANK_URL=http://localhost:1${NEXUS_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/" +# Cleanup to run whenever we exit +function cleanup() +{ + exit_cleanup + for n in $(jobs -p) + do + kill "$n" 2> /dev/null || true + done + rm -rf "$CONF" "$WALLET_DB" "$TFILE" "$UFILE" "$TMP_DIR" + wait +} -echo " OK" +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" -echo -n "Setting up exchange ..." +# Exchange configuration file will be edited, so we create one +# from the template. +CONF="test_reducer.conf.edited" -# 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 +TMP_DIR=$(mktemp -p "${TMPDIR:-/tmp}" -d keys-tmp-XXXXXX) +WALLET_DB=$(mktemp -p "${TMPDIR:-/tmp}" test_reducer_walletXXXXXX.json) +TFILE=$(mktemp -p "${TMPDIR:-/tmp}" test_reducer_statePPXXXXXX) +UFILE=$(mktemp -p "${TMPDIR:-/tmp}" test_reducer_stateBFXXXXXX) + +# Install cleanup handler (except for kill -9) +trap cleanup EXIT -echo " OK" -# Launch services -echo -n "Launching taler services ..." -rm -f $TALER_DB -taler-bank-manage-testing $NEXUS_PORT $TALER_DB $EXCHANGE_URL $CONF > 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-secmod-cs -c $CONF 2> taler-exchange-secmod-cs.log & -taler-exchange-httpd -L INFO -c $CONF 2> taler-exchange-httpd.log & -taler-merchant-httpd -L INFO -c $CONF -L INFO 2> taler-merchant-httpd.log & -taler-exchange-wirewatch -L INFO --longpoll-timeout=1s -c $CONF 2> taler-exchange-wirewatch.log & -taler-auditor-httpd -L INFO -c $CONF 2> taler-auditor-httpd.log & +echo -n "Initialize anastasis databases ..." +# 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" @@ -190,82 +117,9 @@ $PREFIX anastasis-httpd -c $CONF_2 2> anastasis-httpd_2.log & $PREFIX anastasis-httpd -c $CONF_3 2> anastasis-httpd_3.log & $PREFIX anastasis-httpd -c $CONF_4 2> anastasis-httpd_4.log & -# 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 `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.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" - echo -n "Waiting for anastasis services ..." - # Wait for anastasis services to be available -for n in `seq 1 50` +for n in $(seq 1 50) do echo -n "." sleep 0.1 @@ -282,7 +136,7 @@ do break done -if [ 1 != $OK ] +if [ 1 != "$OK" ] then exit_skip "Failed to launch anastasis services" fi @@ -291,70 +145,74 @@ echo "OK" echo -n "Configuring merchant instance ..." # Setup merchant -curl -H "Content-Type: application/json" -X POST -d '{"auth":{"method":"external"},"accounts":[{"payto_uri":"payto://iban/SANDBOXX/DE648226?receiver-name=anastasis"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1", "default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us" : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' http://localhost:9966/management/instances +curl -H "Content-Type: application/json" -X POST -d '{"auth":{"method":"external"},"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us" : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' http://localhost:9966/management/instances + + +curl -H "Content-Type: application/json" -X POST -d '{"payto_uri":"'"$MERCHANT_PAYTO"'"}' http://localhost:9966/private/accounts + echo " DONE" -echo -en $COLOR$BOLD"Test enter secret in a backup state ..."$NORM$NOCOLOR +echo -en "${COLOR}${BOLD}Test enter secret in a backup state ...${NORM}${NOCOLOR}" $PREFIX anastasis-reducer -a \ '{"secret": { "value" : "veryhardtoguesssecret", "mime" : "text/plain" } }' \ - enter_secret resources/06-backup.json $TFILE + enter_secret resources/06-backup.json "$TFILE" -STATE=`jq -r -e .backup_state < $TFILE` -if test "$STATE" != "SECRET_EDITING" +STATE=$(jq -r -e .backup_state < "$TFILE") +if [ "$STATE" != "SECRET_EDITING" ] then - jq -e . $TFILE + jq -e . "$TFILE" exit_fail "Expected new state to be 'SECRET_EDITING', got '$STATE'" fi echo " DONE" -echo -en $COLOR$BOLD"Test expiration change ..."$NORM$NOCOLOR +echo -en "${COLOR}${BOLD}Test expiration change ...${NORM}${NOCOLOR}" -SECS=`date '+%s'` +SECS=$(date '+%s') # Use 156 days into the future to get 1 year -SECS=`expr $SECS + 13478400` +SECS=$(( SECS + 13478400 )) $PREFIX anastasis-reducer -a \ "$(jq -n ' {"expiration": { "t_s" : $SEC } }' \ - --argjson SEC $SECS + --argjson SEC "$SECS" )" \ - update_expiration $TFILE $UFILE + update_expiration "$TFILE" "$UFILE" -STATE=`jq -r -e .backup_state < $UFILE` +STATE=$(jq -r -e .backup_state < "$UFILE") if test "$STATE" != "SECRET_EDITING" then - jq -e . $UFILE + jq -e . "$UFILE" exit_fail "Expected new state to be 'SECRET_EDITING', got '$STATE'" fi -FEES=`jq -r -e '.upload_fees[0].fee' < $UFILE` +FEES=$(jq -r -e '.upload_fees[0].fee' < "$UFILE") # 4x 4.99 for annual fees, plus 4x0.01 for truth uploads -if test "$FEES" != "TESTKUDOS:20" +if [ "$FEES" != "TESTKUDOS:20" ] then - jq -e . $UFILE + jq -e . "$UFILE" exit_fail "Expected upload fees to be 'TESTKUDOS:20', got '$FEES'" fi echo " DONE" -echo -en $COLOR$BOLD"Test advance to payment ..."$NORM$NOCOLOR +echo -en "${COLOR}${BOLD}Test advance to payment ...${NORM}${NOCOLOR}" -$PREFIX anastasis-reducer next $UFILE $TFILE +$PREFIX anastasis-reducer next "$UFILE" "$TFILE" -STATE=`jq -r -e .backup_state < $TFILE` -if test "$STATE" != "TRUTHS_PAYING" +STATE=$(jq -r -e .backup_state < "$TFILE") +if [ "$STATE" != "TRUTHS_PAYING" ] then - jq -e . $TFILE + jq -e . "$TFILE" exit_fail "Expected new state to be 'TRUTHS_PAYING', got '$STATE'" fi # FIXME: this test is specific to how the # C reducer stores state (redundantly!), should converge eventually! -#TMETHOD=`jq -r -e '.policies[0].methods[0].truth.type' < $TFILE` +#TMETHOD=$(jq -r -e '.policies[0].methods[0].truth.type' < $TFILE) #if test $TMETHOD != "question" #then # exit_fail "Expected method to be >='question', got $TMETHOD" @@ -365,85 +223,115 @@ fi #Pay -echo -en $COLOR$BOLD"Withdrawing amount to wallet ..."$NORM$NOCOLOR +echo -en "${COLOR}${BOLD}Withdrawing amount to wallet ...${NORM}${NOCOLOR}" + +EXCHANGE_URL="$(taler-config -c "$CONF" -s exchange -o BASE_URL)" -rm $WALLET_DB -taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB api --expect-success 'withdrawTestBalance' \ +rm "$WALLET_DB" +taler-wallet-cli \ + --no-throttle \ + --wallet-db="$WALLET_DB" \ + api \ + --expect-success 'withdrawTestBalance' \ "$(jq -n ' { amount: "TESTKUDOS:40", - bankBaseUrl: $BANK_URL, + corebankApiBaseUrl: $BANK_URL, exchangeBaseUrl: $EXCHANGE_URL }' \ - --arg BANK_URL "${BANK_URL}demobanks/default/access-api/" \ - --arg EXCHANGE_URL "$EXCHANGE_URL" - )" 2>wallet-withdraw.err >wallet-withdraw.log -taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB run-until-done 2>wallet-withdraw-finish.err >wallet-withdraw-finish.log + --arg BANK_URL "${BANK_URL}" \ + --arg EXCHANGE_URL "${EXCHANGE_URL}" + )" 2>wallet-withdraw.err \ + >wallet-withdraw.log +taler-wallet-cli \ + --no-throttle \ + --wallet-db="$WALLET_DB" \ + run-until-done \ + 2>wallet-withdraw-finish.err \ + >wallet-withdraw-finish.log echo " OK" -echo -en $COLOR$BOLD"Making payments for truth uploads ... "$NORM$NOCOLOR -OBJECT_SIZE=`jq -r -e '.payments | length' < $TFILE` -for ((INDEX=0; INDEX < $OBJECT_SIZE; INDEX++)) +echo -en "${COLOR}${BOLD}Making payments for truth uploads ... ${NORM}${NOCOLOR}" +OBJECT_SIZE=$(jq -r -e '.payments | length' < "$TFILE") +for ((INDEX=0; INDEX < "$OBJECT_SIZE"; INDEX++)) do - PAY_URI=`jq --argjson INDEX $INDEX -r -e '.payments[$INDEX]' < $TFILE` + PAY_URI=$(jq --argjson INDEX $INDEX -r -e '.payments[$INDEX]' < "$TFILE") # run wallet CLI echo -n "$INDEX" - taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB handle-uri ${PAY_URI} -y 2>wallet-pay1.err >wallet-pay1.log + taler-wallet-cli \ + --no-throttle \ + --wallet-db="$WALLET_DB" \ + handle-uri "${PAY_URI}" \ + -y \ + 2>wallet-pay1.err \ + >wallet-pay1.log echo -n "," done echo " OK" -echo -e $COLOR$BOLD"Running wallet run-until-done..."$NORM$NOCOLOR -taler-wallet-cli --wallet-db=$WALLET_DB run-until-done 2>wallet-pay-finish.err >wallet-pay-finish.log -echo -e $COLOR$BOLD"Payments done"$NORM$NOCOLOR - - -echo -en $COLOR$BOLD"Try to upload again ..."$NORM$NOCOLOR -$PREFIX anastasis-reducer pay $TFILE $UFILE -mv $UFILE $TFILE +echo -e "${COLOR}${BOLD}Running wallet run-until-done...${NORM}${NOCOLOR}" +taler-wallet-cli \ + --wallet-db="$WALLET_DB" \ + run-until-done \ + 2>wallet-pay-finish.err \ + >wallet-pay-finish.log +echo -e "${COLOR}${BOLD}Payments done${NORM}${NOCOLOR}" + + +echo -en "${COLOR}${BOLD}Try to upload again ...${NORM}${NOCOLOR}" +$PREFIX anastasis-reducer pay "$TFILE" "$UFILE" +mv "$UFILE" "$TFILE" echo " OK" -STATE=`jq -r -e .backup_state < $TFILE` -if test "$STATE" != "POLICIES_PAYING" +STATE="$(jq -r -e .backup_state < "$TFILE")" +if [ "$STATE" != "POLICIES_PAYING" ] then exit_fail "Expected new state to be 'POLICIES_PAYING', got '$STATE'" fi -export TFILE -export UFILE - -echo -en $COLOR$BOLD"Making payments for policy uploads ... "$NORM$NOCOLOR -OBJECT_SIZE=`jq -r -e '.policy_payment_requests | length' < $TFILE` -for ((INDEX=0; INDEX < $OBJECT_SIZE; INDEX++)) +echo -en "${COLOR}${BOLD}Making payments for policy uploads ... ${NORM}${NOCOLOR}" +OBJECT_SIZE="$(jq -r -e '.policy_payment_requests | length' < "$TFILE")" +for ((INDEX=0; INDEX < "$OBJECT_SIZE"; INDEX++)) do - PAY_URI=`jq --argjson INDEX $INDEX -r -e '.policy_payment_requests[$INDEX].payto' < $TFILE` + PAY_URI="$(jq --argjson INDEX "$INDEX" -r -e '.policy_payment_requests[$INDEX].payto' < "$TFILE")" # run wallet CLI export PAY_URI echo -n "$INDEX" - taler-wallet-cli --wallet-db=$WALLET_DB handle-uri $PAY_URI -y 2>wallet-pay2-$INDEX.err >wallet-pay2-$INDEX.log + taler-wallet-cli \ + --wallet-db="$WALLET_DB" \ + handle-uri "$PAY_URI" \ + -y \ + 2>"wallet-pay2-$INDEX.err" \ + >"wallet-pay2-$INDEX.log" echo -n "," done echo " OK" -echo -e $COLOR$BOLD"Running wallet run-until-done..."$NORM$NOCOLOR -taler-wallet-cli --wallet-db=$WALLET_DB run-until-done 2>wallet-pay2-finish.err >wallet-pay2-finish.log -echo -e $COLOR$BOLD"Payments done"$NORM$NOCOLOR +echo -e "${COLOR}${BOLD}Running wallet run-until-done...${NORM}${NOCOLOR}" +taler-wallet-cli \ + --wallet-db="$WALLET_DB" \ + run-until-done \ + 2>wallet-pay2-finish.err \ + >wallet-pay2-finish.log +echo -e "${COLOR}${BOLD}Payments done${NORM}${NOCOLOR}" -echo -en $COLOR$BOLD"Try to upload again ..."$NORM$NOCOLOR -$PREFIX anastasis-reducer pay $TFILE $UFILE +echo -en "${COLOR}${BOLD}Try to upload again ...${NORM}${NOCOLOR}" +$PREFIX anastasis-reducer pay "$TFILE" "$UFILE" echo " OK" echo -n "Final checks ..." -STATE=`jq -r -e .backup_state < $UFILE` -if test "$STATE" != "BACKUP_FINISHED" +STATE=$(jq -r -e .backup_state < "$UFILE") +if [ "$STATE" != "BACKUP_FINISHED" ] then exit_fail "Expected new state to be BACKUP_FINISHED, got $STATE" fi -jq -r -e .core_secret < $UFILE > /dev/null && exit_fail "'core_secret' was not cleared upon success" +jq -r -e .core_secret \ + < "$UFILE" \ + > /dev/null \ + && exit_fail "'core_secret' was not cleared upon success" echo " OK" -rm -f $TALER_DB exit 0 diff --git a/src/cli/test_anastasis_reducer_recovery_enter_user_attributes.sh b/src/cli/test_anastasis_reducer_recovery_enter_user_attributes.sh index 4f8b451..551ab36 100755 --- a/src/cli/test_anastasis_reducer_recovery_enter_user_attributes.sh +++ b/src/cli/test_anastasis_reducer_recovery_enter_user_attributes.sh @@ -1,50 +1,64 @@ #!/bin/bash # This file is in the public domain. +# shellcheck disable=SC2317 + set -eu -# Exit, with status code "skip" (no 'real' failure) -function exit_skip() { - echo " SKIP: $1" - exit 77 -} +# Replace with 0 for nexus... +USE_FAKEBANK=1 +if [ 1 = "$USE_FAKEBANK" ] +then + ACCOUNT="exchange-account-2" + WIRE_METHOD="x-taler-bank" + BANK_FLAGS="-f -d $WIRE_METHOD -u $ACCOUNT" + BANK_URL="http://localhost:18082/" + MERCHANT_PAYTO="payto://x-taler-bank/localhost/anastasis?receiver-name=anastasis" +else + ACCOUNT="exchange-account-1" + WIRE_METHOD="iban" + BANK_FLAGS="-ns -d $WIRE_METHOD -u $ACCOUNT" + BANK_URL="http://localhost:18082/" + MERCHANT_PAYTO="payto://iban/SANDBOXX/DE648226?receiver-name=anastasis" +fi -# Exit, with error message (hard failure) -function exit_fail() { - echo " FAIL: $1" - exit 1 -} +# Check we can actually run +echo -n "Testing for jq" +jq -h > /dev/null || exit_skip "jq required" +echo " FOUND" +echo -n "Testing for anastasis-reducer ..." +anastasis-reducer -h > /dev/null || exit_skip "anastasis-reducer required" +echo " FOUND" -# Stop libeufin sandbox and nexus (if running) -function stop_libeufin() -{ - echo "Stopping libeufin..." - if test -f libeufin-sandbox.pid - then - PID=`cat libeufin-sandbox.pid 2> /dev/null` - echo "Killing libeufin sandbox $PID" - rm libeufin-sandbox.pid - kill $PID 2> /dev/null || true - fi - if test -f libeufin-nexus.pid - then - PID=`cat libeufin-nexus.pid 2> /dev/null` - echo "Killing libeufin nexus $PID" - rm libeufin-nexus.pid - kill $PID 2> /dev/null || true - fi - echo "Stopping libeufin DONE" -} +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-wallet-cli" +taler-wallet-cli -v >/dev/null </dev/null || exit_skip " MISSING" +echo " FOUND" + +echo -n "Testing for anastasis-httpd" +anastasis-httpd -h >/dev/null </dev/null || exit_skip " MISSING" +echo " FOUND" + +. setup.sh +# Launch exchange, merchant and bank. +# shellcheck disable=SC2086 +setup -c "test_reducer.conf" \ + -aemw \ + $BANK_FLAGS # Cleanup to run whenever we exit function cleanup() { - for n in `jobs -p` + exit_cleanup + for n in $(jobs -p) do - kill $n 2> /dev/null || true + kill "$n" 2> /dev/null || true done - stop_libeufin - rm -rf $CONF $WALLET_DB $R1FILE $R2FILE $B1FILE $B2FILE $TMP_DIR + rm -rf "$CONF" "$WALLET_DB" "$R1FILE" "$R2FILE" "$B1FILE" "$B2FILE" "$TMP_DIR" wait } @@ -55,25 +69,28 @@ function sync_providers() { # Sync with providers (up to 3 providers aren't synced here) for x in 1 2 3; do echo "Synchronizing providers (round $x)" - anastasis-reducer sync_providers < $infile > $outfile 2> /dev/null || true - CODE=$(jq -r -e ".code // 0" < $outfile) + anastasis-reducer sync_providers < "$infile" > "$outfile" 2> /dev/null || true + CODE=$(jq -r -e ".code // 0" < "$outfile") # ANASTASIS_REDUCER_PROVIDERS_ALREADY_SYNCED # FIXME: Temporary workaround for C reducer. See #7227. - if test "$CODE" = "8420"; then + if [ "$CODE" = "8420" ] + then # restore previous non-error state - cat $infile > $outfile + cat "$infile" > "$outfile" break fi # ANASTASIS_REDUCER_ACTION_INVALID - if test "$CODE" = "8400"; then + if [ "$CODE" = "8400" ] + then # restore previous non-error state - cat $infile > $outfile + cat "$infile" > "$outfile" break fi - if test "$CODE" != "0"; then + if [ "$CODE" != "0" ] + then exit_fail "Expected no error or 8420/8400, got $CODE" fi - cat $outfile > $infile + cat "$outfile" > "$infile" done echo "Providers synced." } @@ -87,212 +104,56 @@ CONF_4="test_anastasis_reducer_4.conf" # Configuration file will be edited, so we create one # from the template. -CONF=`mktemp test_reducerXXXXXX.conf` -cp test_reducer.conf $CONF +CONF="$(mktemp -p "${TMPDIR:-/tmp}" 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` +TMP_DIR=$(mktemp -p "${TMPDIR:-/tmp}" -d keys-tmp-XXXXXX) +WALLET_DB=$(mktemp -p "${TMPDIR:-/tmp}" test_reducer_walletXXXXXX.json) +B1FILE=$(mktemp -p "${TMPDIR:-/tmp}" test_reducer_stateB1XXXXXX) +B2FILE=$(mktemp -p "${TMPDIR:-/tmp}" test_reducer_stateB2XXXXXX) +R1FILE=$(mktemp -p "${TMPDIR:-/tmp}" test_reducer_stateR1XXXXXX) +R2FILE=$(mktemp -p "${TMPDIR:-/tmp}" test_reducer_stateR2XXXXXX) # Install cleanup handler (except for kill -9) trap cleanup EXIT -# Check we can actually run -echo -n "Testing for jq" -jq -h > /dev/null || exit_skip "jq required" -echo " FOUND" -echo -n "Testing for anastasis-reducer ..." -anastasis-reducer -h > /dev/null || exit_skip "anastasis-reducer required" -echo " FOUND" - -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-testing" -taler-bank-manage-testing --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" - -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" - -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-OFFLINE" -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}/ -NEXUS_PORT=8082 -BANK_URL=http://localhost:1${NEXUS_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 ..." -rm -f $TALER_DB -taler-bank-manage-testing $NEXUS_PORT $TALER_DB $EXCHANGE_URL $CONF > 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-secmod-cs -c $CONF 2> taler-exchange-secmod-cs.log & -taler-exchange-httpd -L INFO -c $CONF 2> taler-exchange-httpd.log & -taler-merchant-httpd -c $CONF -L INFO 2> taler-merchant-httpd.log & -taler-exchange-wirewatch --longpoll-timeout=1s -L INFO -c $CONF 2> taler-exchange-wirewatch.log & -taler-auditor-httpd -L INFO -c $CONF 2> taler-auditor-httpd.log & +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" echo -n "Launching anastasis services ..." PREFIX="" #valgrind -$PREFIX anastasis-httpd -c $CONF_1 2> anastasis-httpd_1.log & -$PREFIX anastasis-httpd -c $CONF_2 2> anastasis-httpd_2.log & -$PREFIX anastasis-httpd -c $CONF_3 2> anastasis-httpd_3.log & -$PREFIX anastasis-httpd -c $CONF_4 2> anastasis-httpd_4.log & - -# 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:18082/ -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 +$PREFIX anastasis-httpd -c "$CONF_1" 2> anastasis-httpd_1.log & +$PREFIX anastasis-httpd -c "$CONF_2" 2> anastasis-httpd_2.log & +$PREFIX anastasis-httpd -c "$CONF_3" 2> anastasis-httpd_3.log & +$PREFIX anastasis-httpd -c "$CONF_4" 2> anastasis-httpd_4.log & echo "OK" -echo -n "Setting up keys ..." -taler-exchange-offline -c $CONF \ - download \ - sign \ - 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.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" - echo -n "Waiting for anastasis services ..." # Wait for anastasis services to be available -for n in `seq 1 50` +for n in $(seq 1 50) do echo -n "." sleep 0.1 @@ -309,7 +170,7 @@ do break done -if [ 1 != $OK ] +if [ 1 != "$OK" ] then exit_skip "Failed to launch anastasis services" fi @@ -318,31 +179,32 @@ echo "OK" echo -n "Configuring merchant instance ..." # Setup merchant -curl -H "Content-Type: application/json" -X POST -d '{"auth":{"method":"external"},"accounts":[{"payto_uri":"payto://iban/SANDBOXX/DE648226?receiver-name=anastasis"}],"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1", "default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_us" : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' http://localhost:9966/management/instances +curl -H "Content-Type: application/json" -X POST -d '{"auth":{"method":"external"},"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us" : 3600000000},"default_pay_delay":{"d_us": 3600000000}}' http://localhost:9966/management/instances +curl -H "Content-Type: application/json" -X POST -d '{"payto_uri":"'"$MERCHANT_PAYTO"'"}' http://localhost:9966/private/accounts echo " DONE" echo -n "Running backup logic ...," -anastasis-reducer -b > $B1FILE +anastasis-reducer -b > "$B1FILE" echo -n "." anastasis-reducer -a \ '{"continent": "Demoworld"}' \ - select_continent < $B1FILE > $B2FILE + select_continent < "$B1FILE" > "$B2FILE" echo -n "." anastasis-reducer -a \ '{"country_code": "xx"}' \ - select_country < $B2FILE > $B1FILE + select_country < "$B2FILE" > "$B1FILE" echo -n "." anastasis-reducer -a \ '{"identity_attributes": { "full_name": "Max Musterman", "sq_number": "4", "birthdate": "2000-01-01"}}' \ - enter_user_attributes < $B1FILE > $B2FILE -cat $B2FILE > $B1FILE + enter_user_attributes < "$B1FILE" > "$B2FILE" +cat "$B2FILE" > "$B1FILE" echo -n "," -sync_providers $B1FILE $B2FILE +sync_providers "$B1FILE" "$B2FILE" echo -n "," # "91GPWWR" encodes "Hans" anastasis-reducer -a \ @@ -351,7 +213,7 @@ anastasis-reducer -a \ "instructions": "What is your name?", "challenge": "91GPWWR" } }' \ - add_authentication < $B2FILE > $B1FILE + add_authentication < "$B2FILE" > "$B1FILE" echo -n "." # "64S36" encodes "123" anastasis-reducer -a \ @@ -360,7 +222,7 @@ anastasis-reducer -a \ "instructions": "How old are you?", "challenge": "64S36" } }' \ - add_authentication < $B1FILE > $B2FILE + add_authentication < "$B1FILE" > "$B2FILE" echo -n "." # "9NGQ4WR" encodes "Mars" anastasis-reducer -a \ @@ -369,159 +231,177 @@ anastasis-reducer -a \ "instructions": "Where do you live?", "challenge": "9NGQ4WR" } }' \ - add_authentication < $B2FILE > $B1FILE + add_authentication < "$B2FILE" > "$B1FILE" echo -n "." # Finished adding authentication methods anastasis-reducer \ - next < $B1FILE > $B2FILE + next < "$B1FILE" > "$B2FILE" echo -n "," # Finished policy review anastasis-reducer \ - next < $B2FILE > $B1FILE + next < "$B2FILE" > "$B1FILE" echo -n "." # Note: 'secret' must here be a Crockford base32-encoded value anastasis-reducer -a \ '{"secret": { "value" : "VERYHARDT0GVESSSECRET", "mime" : "text/plain" }}' \ - enter_secret < $B1FILE > $B2FILE -mv $B2FILE $B1FILE -anastasis-reducer next $B1FILE $B2FILE + enter_secret < "$B1FILE" > "$B2FILE" +mv "$B2FILE" "$B1FILE" +anastasis-reducer next "$B1FILE" "$B2FILE" echo " OK" echo -n "Preparing wallet" -rm $WALLET_DB -taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB api --expect-success 'withdrawTestBalance' \ + +EXCHANGE_URL="$(taler-config -c "$CONF" -s exchange -o BASE_URL)" + +rm -f "$WALLET_DB" +taler-wallet-cli --no-throttle --wallet-db="$WALLET_DB" api --expect-success 'withdrawTestBalance' \ "$(jq -n ' { amount: "TESTKUDOS:100", - bankBaseUrl: $BANK_URL, + corebankApiBaseUrl: $BANK_URL, exchangeBaseUrl: $EXCHANGE_URL }' \ - --arg BANK_URL "${BANK_URL}demobanks/default/access-api/" \ + --arg BANK_URL "${BANK_URL}" \ --arg EXCHANGE_URL "$EXCHANGE_URL" )" 2> wallet-withdraw.err > wallet-withdraw.out -taler-wallet-cli --wallet-db=$WALLET_DB \ - run-until-done 2>wallet-withdraw-finish.err >wallet-withdraw-finish.out +taler-wallet-cli \ + --wallet-db="$WALLET_DB" \ + run-until-done \ + 2>wallet-withdraw-finish.err \ + >wallet-withdraw-finish.out echo " OK" echo -en "Making payments for truth uploads ... " -OBJECT_SIZE=`jq -r -e '.payments | length' < $B2FILE` -for ((INDEX=0; INDEX < $OBJECT_SIZE; INDEX++)) +OBJECT_SIZE=$(jq -r -e '.payments | length' < "$B2FILE") +for ((INDEX=0; INDEX < "$OBJECT_SIZE"; INDEX++)) do - PAY_URI=`jq --argjson INDEX $INDEX -r -e '.payments[$INDEX]' < $B2FILE` + PAY_URI=$(jq --argjson INDEX $INDEX -r -e '.payments[$INDEX]' < "$B2FILE") # run wallet CLI echo -n "$INDEX" - taler-wallet-cli --wallet-db=$WALLET_DB \ - handle-uri $PAY_URI -y 2>wallet-pay-truth-$INDEX.err >wallet-pay-truth-$INDEX.out + taler-wallet-cli \ + --wallet-db="$WALLET_DB" \ + handle-uri "$PAY_URI" \ + -y \ + 2>"wallet-pay-truth-$INDEX.err" \ + >"wallet-pay-truth-$INDEX.out" echo -n ", " done echo "OK" echo -e "Running wallet run-until-done..." -taler-wallet-cli --wallet-db=$WALLET_DB \ - run-until-done 2>wallet-pay-truth-finish-$INDEX.err >wallet-pay-truth-finish-$INDEX.out +taler-wallet-cli \ + --wallet-db="$WALLET_DB" \ + run-until-done \ + 2>"wallet-pay-truth-finish-$INDEX.err" \ + >"wallet-pay-truth-finish-$INDEX.out" echo -e "Payments done" -export B2FILE -export B1FILE - echo -en "Try to upload again ..." -$PREFIX anastasis-reducer pay $B2FILE $B1FILE -mv $B1FILE $B2FILE +$PREFIX anastasis-reducer pay "$B2FILE" "$B1FILE" +mv "$B1FILE" "$B2FILE" echo " OK" echo -en "Making payments for policy uploads ... " -OBJECT_SIZE=`jq -r -e '.policy_payment_requests | length' < $B2FILE` -for ((INDEX=0; INDEX < $OBJECT_SIZE; INDEX++)) +OBJECT_SIZE=$(jq -r -e '.policy_payment_requests | length' < "$B2FILE") +for ((INDEX=0; INDEX < "$OBJECT_SIZE"; INDEX++)) do - PAY_URI=`jq --argjson INDEX $INDEX -r -e '.policy_payment_requests[$INDEX].payto' < $B2FILE` + PAY_URI=$(jq --argjson INDEX $INDEX -r -e '.policy_payment_requests[$INDEX].payto' < "$B2FILE") # run wallet CLI echo -n "$INDEX" - taler-wallet-cli --wallet-db=$WALLET_DB handle-uri $PAY_URI -y 2>wallet-pay-policy-$INDEX.err >wallet-pay-policy-$INDEX.out + taler-wallet-cli \ + --wallet-db="$WALLET_DB" \ + handle-uri "$PAY_URI" \ + -y \ + 2>"wallet-pay-policy-$INDEX.err" \ + >"wallet-pay-policy-$INDEX.out" echo -n ", " done echo " OK" echo -en "Running wallet run-until-done..." -taler-wallet-cli --wallet-db=$WALLET_DB \ - run-until-done 2>wallet-pay-policy-finish.err >wallet-pay-policy-finish.out +taler-wallet-cli \ + --wallet-db="$WALLET_DB" \ + run-until-done \ + 2>wallet-pay-policy-finish.err \ + >wallet-pay-policy-finish.out echo -e " payments DONE" echo -en "Try to upload again ..." anastasis-reducer \ - pay < $B2FILE > $B1FILE + pay < "$B2FILE" > "$B1FILE" echo " OK: Backup finished" echo -n "Final backup checks ..." -STATE=`jq -r -e .backup_state < $B1FILE` -if test "$STATE" != "BACKUP_FINISHED" +STATE=$(jq -r -e .backup_state < "$B1FILE") +if [ "$STATE" != "BACKUP_FINISHED" ] then exit_fail "Expected new state to be 'BACKUP_FINISHED', got '$STATE'" fi -jq -r -e .core_secret < $B1FILE > /dev/null && exit_fail "'core_secret' was not cleared upon success" +jq -r -e .core_secret < "$B1FILE" > /dev/null && exit_fail "'core_secret' was not cleared upon success" echo " OK" echo -n "Running recovery basic logic ..." -anastasis-reducer -r > $R1FILE +anastasis-reducer -r > "$R1FILE" anastasis-reducer -a \ '{"continent": "Demoworld"}' \ - select_continent < $R1FILE > $R2FILE + select_continent < "$R1FILE" > "$R2FILE" anastasis-reducer -a \ '{"country_code": "xx"}' \ - select_country < $R2FILE > $R1FILE -anastasis-reducer -a '{"identity_attributes": { "full_name": "Max Musterman", "sq_number": "4", "birthdate": "2000-01-01" }}' enter_user_attributes < $R1FILE > $R2FILE + select_country < "$R2FILE" > "$R1FILE" +anastasis-reducer -a '{"identity_attributes": { "full_name": "Max Musterman", "sq_number": "4", "birthdate": "2000-01-01" }}' enter_user_attributes < "$R1FILE" > "$R2FILE" -STATE=`jq -r -e .recovery_state < $R2FILE` -if test "$STATE" != "SECRET_SELECTING" +STATE=$(jq -r -e .recovery_state < "$R2FILE") +if [ "$STATE" != "SECRET_SELECTING" ] then exit_fail "Expected new state to be 'SECRET_SELECTING', got '$STATE'" fi echo " OK" echo -n "Adding provider (to ensure it is loaded)" -anastasis-reducer -a '{"provider_url" : "http://localhost:8086/" }' add_provider < $R2FILE > $R1FILE +anastasis-reducer -a '{"provider_url" : "http://localhost:8086/" }' add_provider < "$R2FILE" > "$R1FILE" echo " OK" echo -n "Selecting secret to recover" -anastasis-reducer -a '{"attribute_mask": 0, "providers" : [ { "version": 1, "url" : "http://localhost:8086/" } ] }' select_version < $R1FILE > $R2FILE +anastasis-reducer -a '{"attribute_mask": 0, "providers" : [ { "version": 1, "url" : "http://localhost:8086/" } ] }' select_version < "$R1FILE" > "$R2FILE" -STATE=`jq -r -e .recovery_state < $R2FILE` -if test "$STATE" != "CHALLENGE_SELECTING" +STATE=$(jq -r -e .recovery_state < "$R2FILE") +if [ "$STATE" != "CHALLENGE_SELECTING" ] then exit_fail "Expected new state to be 'CHALLENGE_SELECTING', got '$STATE'" fi echo " OK" -cat $R2FILE > $R1FILE +cat "$R2FILE" > "$R1FILE" -sync_providers $R1FILE $R2FILE +sync_providers "$R1FILE" "$R2FILE" echo -n "Running challenge logic ..." -UUID0=`jq -r -e .recovery_information.challenges[0].uuid < $R2FILE` -UUID1=`jq -r -e .recovery_information.challenges[1].uuid < $R2FILE` -UUID2=`jq -r -e .recovery_information.challenges[2].uuid < $R2FILE` -UUID0Q=`jq -r -e .recovery_information.challenges[0].instructions < $R2FILE` -UUID1Q=`jq -r -e .recovery_information.challenges[1].instructions < $R2FILE` -UUID2Q=`jq -r -e .recovery_information.challenges[2].instructions < $R2FILE` +UUID0=$(jq -r -e .recovery_information.challenges[0].uuid < "$R2FILE") +UUID1=$(jq -r -e .recovery_information.challenges[1].uuid < "$R2FILE") +UUID2=$(jq -r -e .recovery_information.challenges[2].uuid < "$R2FILE") +#UUID0Q=$(jq -r -e .recovery_information.challenges[0].instructions < "$R2FILE") +UUID1Q=$(jq -r -e .recovery_information.challenges[1].instructions < "$R2FILE") +UUID2Q=$(jq -r -e .recovery_information.challenges[2].instructions < "$R2FILE") -if test "$UUID2Q" = 'How old are you?' +if [ "$UUID2Q" = 'How old are you?' ] then AGE_UUID=$UUID2 -elif test "$UUID1Q" = 'How old are you?' +elif [ "$UUID1Q" = 'How old are you?' ] then AGE_UUID=$UUID1 else AGE_UUID=$UUID0 fi -if test "$UUID2Q" = 'What is your name?' +if [ "$UUID2Q" = 'What is your name?' ] then NAME_UUID=$UUID2 -elif test "$UUID1Q" = 'What is your name?' +elif [ "$UUID1Q" = 'What is your name?' ] then NAME_UUID=$UUID1 else @@ -535,10 +415,10 @@ anastasis-reducer -a \ }' \ --arg UUID "$NAME_UUID" )" \ - select_challenge < $R2FILE > $R1FILE + select_challenge < "$R2FILE" > "$R1FILE" anastasis-reducer -a '{"answer": "Hans"}' \ - solve_challenge < $R1FILE > $R2FILE + solve_challenge < "$R1FILE" > "$R2FILE" anastasis-reducer -a \ "$(jq -n ' @@ -547,34 +427,34 @@ anastasis-reducer -a \ }' \ --arg UUID "$AGE_UUID" )" \ - select_challenge < $R2FILE > $R1FILE + select_challenge < "$R2FILE" > "$R1FILE" anastasis-reducer -a '{"answer": "123"}' \ - solve_challenge < $R1FILE > $R2FILE + solve_challenge < "$R1FILE" > "$R2FILE" echo " OK" echo -n "Checking recovered secret ..." # finally: check here that we recovered the secret... -STATE=`jq -r -e .recovery_state < $R2FILE` -if test "$STATE" != "RECOVERY_FINISHED" +STATE=$(jq -r -e .recovery_state < "$R2FILE") +if [ "$STATE" != "RECOVERY_FINISHED" ] then - jq -e . $R2FILE + jq -e . "$R2FILE" exit_fail "Expected new state to be 'RECOVERY_FINISHED', got '$STATE'" fi -SECRET=`jq -r -e .core_secret.value < $R2FILE` -if test "$SECRET" != "VERYHARDT0GVESSSECRET" +SECRET=$(jq -r -e .core_secret.value < "$R2FILE") +if [ "$SECRET" != "VERYHARDT0GVESSSECRET" ] then - jq -e . $R2FILE + jq -e . "$R2FILE" exit_fail "Expected recovered secret to be 'VERYHARDT0GVESSSECRET', got '$SECRET'" fi -MIME=`jq -r -e .core_secret.mime < $R2FILE` -if test "$MIME" != "text/plain" +MIME=$(jq -r -e .core_secret.mime < "$R2FILE") +if [ "$MIME" != "text/plain" ] then - jq -e . $R2FILE + jq -e . "$R2FILE" exit_fail "Expected recovered mime to be 'text/plain', got '$MIME'" fi diff --git a/src/cli/test_anastasis_reducer_recovery_no_pay.sh b/src/cli/test_anastasis_reducer_recovery_no_pay.sh index f6b1401..42f5b0c 100755 --- a/src/cli/test_anastasis_reducer_recovery_no_pay.sh +++ b/src/cli/test_anastasis_reducer_recovery_no_pay.sh @@ -67,8 +67,8 @@ CONF_4="test_anastasis_reducer_free_4.conf" # Configuration file will be edited, so we create one # from the template. -CONF=`mktemp test_reducerXXXXXX.conf` -cp test_reducer.conf $CONF +CONF=$(mktemp test_reducerXXXXXX.conf) +cp test_reducer.conf "$CONF" TMP_DIR=`mktemp -d keys-tmp-XXXXXX` B1FILE=`mktemp test_reducer_stateB1XXXXXX` @@ -180,7 +180,7 @@ anastasis-reducer -a \ "instructions": "What is your name?", "challenge": "91GPWWR" } }' \ - add_authentication < $B2FILE > $B1FILE + add_authentication < $B2FILE > $B1FILE echo -n "." # "64S36" encodes "123" anastasis-reducer -a \ diff --git a/src/cli/test_iban.sh b/src/cli/test_iban.sh index 8ad83cd..207d2d5 100755 --- a/src/cli/test_iban.sh +++ b/src/cli/test_iban.sh @@ -1,4 +1,5 @@ #!/bin/bash +# This file is in the public domain. set -eu #set -x @@ -18,11 +19,11 @@ function exit_fail() { # Cleanup to run whenever we exit function cleanup() { - for n in `jobs -p` + for n in $(jobs -p) do - kill $n 2> /dev/null || true + kill "$n" 2> /dev/null || true done - rm -rf $CONF $R1FILE $R2FILE $B1FILE $B2FILE + rm -rf "$CONF" "$R1FILE" "$R2FILE" "$B1FILE" "$B2FILE" wait } @@ -30,17 +31,17 @@ function cleanup() # $1=ebics username, $2=ebics partner name, $3=person name, $4=sandbox bank account name, $5=iban function prepare_sandbox_account() { echo -n "Registering $4 to the Sandbox..." - export LIBEUFIN_SANDBOX_USERNAME=$4 + export LIBEUFIN_SANDBOX_USERNAME="$4" export LIBEUFIN_SANDBOX_PASSWORD=unused - libeufin-cli sandbox --sandbox-url=$SANDBOX_URL \ - demobank register --name "$3" --iban $5 + libeufin-cli sandbox --sandbox-url="$SANDBOX_URL" \ + demobank register --name "$3" --iban "$5" echo " OK" echo -n "Associating a EBICS subscriber to $4..." export LIBEUFIN_SANDBOX_USERNAME=admin - libeufin-cli sandbox --sandbox-url=$SANDBOX_URL demobank new-ebicssubscriber \ - --host-id $EBICS_HOST \ - --user-id $1 --partner-id $2 \ - --bank-account $4 # that's a username _and_ a bank account name + libeufin-cli sandbox --sandbox-url="$SANDBOX_URL" demobank new-ebicssubscriber \ + --host-id "$EBICS_HOST" \ + --user-id "$1" --partner-id "$2" \ + --bank-account "$4" # that's a username _and_ a bank account name echo " OK" unset LIBEUFIN_SANDBOX_USERNAME @@ -48,31 +49,34 @@ function prepare_sandbox_account() { } function sync_providers() { - infile=$1 - outfile=$2 + infile="$1" + outfile="$2" echo "Synchronizing providers" # Sync with providers (up to 3 providers aren't synced here) for x in 1 2 3; do echo "Synchronizing providers (round $x)" - anastasis-reducer sync_providers < $infile > $outfile 2> /dev/null || true + anastasis-reducer sync_providers < "$infile" > "$outfile" 2> /dev/null || true CODE=$(jq -r -e ".code // 0" < $outfile) # ANASTASIS_REDUCER_PROVIDERS_ALREADY_SYNCED # FIXME: Temporary workaround for C reducer. See #7227. - if test "$CODE" = "8420"; then + if [ "$CODE" = "8420" ] + then # restore previous non-error state - cat $infile > $outfile + cp "$infile" "$outfile" break fi # ANASTASIS_REDUCER_ACTION_INVALID - if test "$CODE" = "8400"; then + if [ "$CODE" = "8400" ] + then # restore previous non-error state - cat $infile > $outfile + cp "$infile" "$outfile" break fi - if test "$CODE" != "0"; then + if [ "$CODE" != "0" ] + then exit_fail "Expected no error or 8420/8400, got $CODE" fi - cat $outfile > $infile + cp "$outfile" "$infile" done echo "Providers synced." } @@ -92,9 +96,12 @@ function wire_transfer_to_anastasis() { --debit-account=sandbox-account-debit \ --credit-account=sandbox-account-credit "$1" "$2" &> libeufin-transfer-initiate.out echo " OK" + # FIXME-MS: the following command reports that it did not + # sync any transactions, even though presumably we just + # made one in the one above (which succeeded...) echo -n "Syncing nexus with sandbox ..." - export LIBEUFIN_NEXUS_USERNAME=$CREDIT_USERNAME - export LIBEUFIN_NEXUS_PASSWORD=$CREDIT_PASSWORD + export LIBEUFIN_NEXUS_USERNAME="$CREDIT_USERNAME" + export LIBEUFIN_NEXUS_PASSWORD="$CREDIT_PASSWORD" libeufin-cli accounts fetch-transactions nexus-bankaccount-credit &> libeufin-transfer-fetch.out echo " OK" } @@ -111,31 +118,33 @@ function prepare_nexus_account() { echo -n "Making bank connection $3 ..." libeufin-cli connections new-ebics-connection \ --ebics-url="${SANDBOX_URL}ebicsweb" \ - --host-id=$EBICS_HOST \ - --partner-id=$2 \ - --ebics-user-id=$1 \ + --host-id="$EBICS_HOST" \ + --partner-id="$2" \ + --ebics-user-id="$1" \ $3 > /dev/null echo " OK" echo -n "Connecting $3 ..." - libeufin-cli connections connect $3 > /dev/null + libeufin-cli connections connect "$3" > /dev/null echo " OK" echo -n "Importing Sandbox bank account ($5) to Nexus ($4) ..." - libeufin-cli connections download-bank-accounts $3 > /dev/null + libeufin-cli connections download-bank-accounts "$3" > /dev/null libeufin-cli connections import-bank-account \ - --offered-account-id=$5 --nexus-bank-account-id=$4 $3 > /dev/null + --offered-account-id="$5" --nexus-bank-account-id="$4" "$3" > /dev/null echo " OK" } # Configuration file will be edited, so we create one # from the template. -CONF=`mktemp test_free_reducerXXXXXX.conf` -cp test_free_reducer.conf $CONF +CONF=$(mktemp test_free_reducerXXXXXX.conf) +cp test_free_reducer.conf "$CONF" -B1FILE=`mktemp test_reducer_stateB1XXXXXX` -B2FILE=`mktemp test_reducer_stateB2XXXXXX` -R1FILE=`mktemp test_reducer_stateR1XXXXXX` -R2FILE=`mktemp test_reducer_stateR2XXXXXX` + + +B1FILE=$(mktemp test_reducer_stateB1XXXXXX) +B2FILE=$(mktemp test_reducer_stateB2XXXXXX) +R1FILE=$(mktemp test_reducer_stateR1XXXXXX) +R2FILE=$(mktemp test_reducer_stateR2XXXXXX) export CONF export B2FILE @@ -163,26 +172,40 @@ echo -n "Testing for anastasis-reducer ..." anastasis-reducer -h > /dev/null || exit_skip "anastasis-reducer required" echo " FOUND" -export LIBEUFIN_NEXUS_DB_CONNECTION="jdbc:sqlite:$(mktemp -u /tmp/nexus-db-XXXXXX.sqlite)" -export LIBEUFIN_SANDBOX_DB_CONNECTION="jdbc:sqlite:$(mktemp -u /tmp/sandbox-db-XXXXXX.sqlite)" +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=$(anastasis-config -c "$CONF" -s stasis-postgres -o CONFIG | sed -e "s/^postgres:\/\/\///") + +dropdb "$TARGET_DB" >/dev/null 2>/dev/null || true +createdb "$TARGET_DB" || exit_skip "Could not create database $TARGET_DB" +anastasis-dbinit -c "$CONF" 2> anastasis-dbinit.log + +echo " OK" + + +export LIBEUFIN_NEXUS_DB_CONNECTION="postgres:///anastasischeck" +export LIBEUFIN_SANDBOX_DB_CONNECTION="postgres:///anastasischeck" NEXUS_URL="http://localhost:5001/" SANDBOX_URL="http://localhost:5000/" echo -n "Starting Nexus ..." libeufin-nexus serve &> nexus.log & nexus_pid=$! -if ! curl -s --retry 5 --retry-connrefused $NEXUS_URL > /dev/null; then +if ! curl -s --retry 5 --retry-connrefused "$NEXUS_URL" > /dev/null; then exit_skip "Could not launch Nexus" fi echo " OK" echo -n "Configuring Sandbox..." -libeufin-sandbox config default &> sandbox.log +libeufin-sandbox config default &> sandbox-config.log echo " OK" echo -n "Starting Sandbox ..." -libeufin-sandbox serve --no-auth &> sandbox.log & +libeufin-sandbox serve --no-auth &> sandbox-serve.log & sandbox_pid=$! -if ! curl -s --retry 5 --retry-connrefused $SANDBOX_URL > /dev/null; then +if ! curl -s --retry 5 --retry-connrefused "$SANDBOX_URL" > /dev/null; then exit_skip "Could not launch Sandbox" fi echo " OK" @@ -196,9 +219,9 @@ export IBAN_DEBIT="FR1420041010050500013M02606" echo -n "Preparing Sandbox (creating the EBICS host) ..." libeufin-cli \ - sandbox --sandbox-url=$SANDBOX_URL \ + sandbox --sandbox-url="$SANDBOX_URL" \ ebicshost create \ - --host-id=$EBICS_HOST + --host-id="$EBICS_HOST" echo " OK" PERSON_CREDIT_NAME="Person Credit" @@ -209,32 +232,32 @@ prepare_sandbox_account \ ebicspartnerCredit \ "${PERSON_CREDIT_NAME}" \ sandbox-account-credit \ - $IBAN_CREDIT + "$IBAN_CREDIT" prepare_sandbox_account \ ebicsuserDebit \ ebicspartnerDebit \ "Person Debit" \ sandbox-account-debit \ - $IBAN_DEBIT + "$IBAN_DEBIT" echo "Sandbox preparation done" echo -n "Preparing Nexus ..." -export LIBEUFIN_NEXUS_URL=$NEXUS_URL +export LIBEUFIN_NEXUS_URL="$NEXUS_URL" # Make debit user, will buy Anastasis services. DEBIT_USERNAME=anastasis-debit-user DEBIT_PASSWORD=anastasis-debit-password -libeufin-nexus superuser $DEBIT_USERNAME --password=$DEBIT_PASSWORD +libeufin-nexus superuser "$DEBIT_USERNAME" --password="$DEBIT_PASSWORD" echo " OK" -export LIBEUFIN_NEXUS_USERNAME=$DEBIT_USERNAME -export LIBEUFIN_NEXUS_PASSWORD=$DEBIT_PASSWORD +export LIBEUFIN_NEXUS_USERNAME="$DEBIT_USERNAME" +export LIBEUFIN_NEXUS_PASSWORD="$DEBIT_PASSWORD" # Make credit user, will be Anastasis client. CREDIT_USERNAME=anastasis-credit-user CREDIT_PASSWORD=anastasis-credit-password echo -n "Create credit user (for anastasis) at Nexus ..." -libeufin-nexus superuser $CREDIT_USERNAME --password=$CREDIT_PASSWORD +libeufin-nexus superuser "$CREDIT_USERNAME" --password="$CREDIT_PASSWORD" echo " OK" -export LIBEUFIN_NEXUS_USERNAME=$CREDIT_USERNAME -export LIBEUFIN_NEXUS_PASSWORD=$CREDIT_PASSWORD +export LIBEUFIN_NEXUS_USERNAME="$CREDIT_USERNAME" +export LIBEUFIN_NEXUS_PASSWORD="$CREDIT_PASSWORD" prepare_nexus_account \ ebicsuserCredit \ @@ -245,7 +268,7 @@ prepare_nexus_account \ echo -n "Create facade ..." libeufin-cli facades new-anastasis-facade \ - --currency=$CURRENCY \ + --currency="$CURRENCY" \ --facade-name=facade-credit \ bankconnection-credit nexus-bankaccount-credit echo " OK" @@ -253,41 +276,29 @@ FACADE_URL=$(libeufin-cli facades list | jq .facades[0].baseUrl | tr -d \") ## Reach facade with: $FACADE_URL + $CREDIT_USERNAME + $CREDIT_PASSWORD -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=`anastasis-config -c $CONF -s stasis-postgres -o CONFIG | sed -e "s/^postgres:\/\/\///"` - -dropdb $TARGET_DB >/dev/null 2>/dev/null || true -createdb $TARGET_DB || exit_skip "Could not create database $TARGET_DB" -anastasis-dbinit -c $CONF 2> anastasis-dbinit.log - -echo " OK" echo -n "Configuring Anastasis IBAN account ..." -anastasis-config -c $CONF \ +anastasis-config -c "$CONF" \ -s authorization-iban \ -o CREDIT_IBAN \ -V "${IBAN_CREDIT}" -anastasis-config -c $CONF \ +anastasis-config -c "$CONF" \ -s authorization-iban \ -o BUSINESS_NAME \ -V "${PERSON_CREDIT_NAME}" -anastasis-config -c $CONF \ +anastasis-config -c "$CONF" \ -s authorization-iban \ -o WIRE_GATEWAY_URL \ -V "${FACADE_URL}" -anastasis-config -c $CONF \ +anastasis-config -c "$CONF" \ -s authorization-iban \ -o WIRE_GATEWAY_AUTH_METHOD \ -V "basic" -anastasis-config -c $CONF \ +anastasis-config -c "$CONF" \ -s authorization-iban \ -o USERNAME \ -V "${LIBEUFIN_NEXUS_USERNAME}" -anastasis-config -c $CONF \ +anastasis-config -c "$CONF" \ -s authorization-iban \ -o PASSWORD \ -V "${LIBEUFIN_NEXUS_PASSWORD}" @@ -295,12 +306,12 @@ echo " OK" echo -n "Launching Anastasis service ..." PREFIX="" #valgrind -$PREFIX anastasis-httpd -c $CONF -L INFO 2> anastasis-httpd_1.log & +$PREFIX anastasis-httpd -c "$CONF" -L INFO 2> anastasis-httpd_1.log & echo " OK" echo -n "Waiting for Anastasis service ..." # Wait for Anastasis service to be available -for n in `seq 1 50` +for n in $(seq 1 50) do echo -n "." sleep 0.1 @@ -317,15 +328,15 @@ fi echo "OK" echo -n "Running backup logic ...," -anastasis-reducer -b > $B1FILE +anastasis-reducer -b > "$B1FILE" echo -n "." anastasis-reducer -a \ '{"continent": "Demoworld"}' \ - select_continent < $B1FILE > $B2FILE + select_continent < "$B1FILE" > "$B2FILE" echo -n "." anastasis-reducer -a \ '{"country_code": "xx" }' \ - select_country < $B2FILE > $B1FILE 2>> test_reducer.err + select_country < "$B2FILE" > "$B1FILE" 2>> test_reducer.err echo -n "." anastasis-reducer -a \ @@ -333,12 +344,12 @@ anastasis-reducer -a \ "full_name": "Max Musterman", "sq_number": "4", "birthdate": "2000-01-01"}}' \ - enter_user_attributes < $B1FILE > $B2FILE 2>> test_reducer.err + enter_user_attributes < "$B1FILE" > "$B2FILE" 2>> test_reducer.err echo -n "," -cat $B2FILE > $B1FILE -sync_providers $B1FILE $B2FILE +cat "$B2FILE" > "$B1FILE" +sync_providers "$B1FILE" "$B2FILE" echo -n "," -BASEIBAN=`echo -n $IBAN_DEBIT | gnunet-base32` +BASEIBAN=$(echo -n $IBAN_DEBIT | gnunet-base32) anastasis-reducer -a \ "$(jq -n '{ authentication_method: { type: "iban", @@ -347,7 +358,7 @@ anastasis-reducer -a \ } }' \ --arg CHALLENGE "$BASEIBAN" )" \ - add_authentication < $B2FILE > $B1FILE 2>> test_reducer.err + add_authentication < "$B2FILE" > "$B1FILE" 2>> test_reducer.err echo -n "." # "91GPWWR" encodes "Hans" @@ -357,82 +368,82 @@ anastasis-reducer -a \ "instructions": "What is your name?", "challenge": "91GPWWR" } }' \ - add_authentication < $B1FILE > $B2FILE 2>> test_reducer.err + add_authentication < "$B1FILE" > "$B2FILE" 2>> test_reducer.err echo -n "." -mv $B2FILE $B1FILE +mv "$B2FILE" "$B1FILE" # Finished adding authentication methods anastasis-reducer \ - next < $B1FILE > $B2FILE 2>> test_reducer.err + next < "$B1FILE" > "$B2FILE" 2>> test_reducer.err echo -n "," # Finished policy review anastasis-reducer \ - next < $B2FILE > $B1FILE 2>> test_reducer.err + next < "$B2FILE" > "$B1FILE" 2>> test_reducer.err echo -n "." # Note: 'secret' must here be a Crockford base32-encoded value anastasis-reducer -a \ '{"secret": { "value" : "VERYHARDT0GVESSSECRET", "mime" : "text/plain" }}' \ - enter_secret < $B1FILE > $B2FILE 2>> test_reducer.err -mv $B2FILE $B1FILE -anastasis-reducer next < $B1FILE > $B2FILE 2>> test_reducer.err + enter_secret < "$B1FILE" > "$B2FILE" 2>> test_reducer.err +mv "$B2FILE" "$B1FILE" +anastasis-reducer next < "$B1FILE" > "$B2FILE" 2>> test_reducer.err echo " OK" echo -n "Final backup checks ..." -STATE=`jq -r -e .backup_state < $B2FILE` -if test "$STATE" != "BACKUP_FINISHED" +STATE=$(jq -r -e .backup_state < "$B2FILE") +if [ "$STATE" != "BACKUP_FINISHED" ] then exit_fail "Expected new state to be 'BACKUP_FINISHED', got '$STATE'" fi -jq -r -e .core_secret < $B2FILE > /dev/null && exit_fail "'core_secret' was not cleared upon success" +jq -r -e .core_secret < "$B2FILE" > /dev/null && exit_fail "'core_secret' was not cleared upon success" echo " OK" echo -n "Running recovery basic logic ..." -anastasis-reducer -r > $R1FILE +anastasis-reducer -r > "$R1FILE" anastasis-reducer -a \ '{"continent": "Demoworld"}' \ - select_continent < $R1FILE > $R2FILE + select_continent < "$R1FILE" > "$R2FILE" anastasis-reducer -a \ '{"country_code": "xx", "currencies":["TESTKUDOS"]}' \ - select_country < $R2FILE > $R1FILE 2>> test_reducer.err -anastasis-reducer -a '{"identity_attributes": { "full_name": "Max Musterman", "sq_number": "4", "birthdate": "2000-01-01" }}' enter_user_attributes < $R1FILE > $R2FILE 2>> test_reducer.err + select_country < "$R2FILE" > "$R1FILE" 2>> test_reducer.err +anastasis-reducer -a '{"identity_attributes": { "full_name": "Max Musterman", "sq_number": "4", "birthdate": "2000-01-01" }}' enter_user_attributes < "$R1FILE" > "$R2FILE" 2>> test_reducer.err -STATE=`jq -r -e .recovery_state < $R2FILE` -if test "$STATE" != "SECRET_SELECTING" +STATE=$(jq -r -e .recovery_state < "$R2FILE") +if [ "$STATE" != "SECRET_SELECTING" ] then exit_fail "Expected new state to be 'SECRET_SELECTING', got '$STATE'" fi echo " OK" echo -n "Adding provider (to ensure it is loaded)" -anastasis-reducer -a '{"provider_url" : "http://localhost:8086/" }' add_provider < $R2FILE > $R1FILE +anastasis-reducer -a '{"provider_url" : "http://localhost:8086/" }' add_provider < "$R2FILE" > "$R1FILE" echo " OK" echo -n "Selecting secret to recover" anastasis-reducer -a '{"attribute_mask": 0, "providers" : [ { "version": 1, "url" : "http://localhost:8086/" } ] }' \ - select_version < $R1FILE > $R2FILE 2>> test_reducer.err + select_version < "$R1FILE" > "$R2FILE" 2>> test_reducer.err -STATE=`jq -r -e .recovery_state < $R2FILE` -if test "$STATE" != "CHALLENGE_SELECTING" +STATE=$(jq -r -e .recovery_state < "$R2FILE") +if [ "$STATE" != "CHALLENGE_SELECTING" ] then exit_fail "Expected new state to be 'CHALLENGE_SELECTING', got '$STATE'" fi echo " OK" -cat $R2FILE > $R1FILE -sync_providers $R1FILE $R2FILE +cp "$R2FILE" "$R1FILE" +sync_providers "$R1FILE" "$R2FILE" echo -n "Running challenge selection logic ..." -UUID0=`jq -r -e .recovery_information.challenges[0].uuid < $R2FILE` -UUID1=`jq -r -e .recovery_information.challenges[1].uuid < $R2FILE` -UUID0Q=`jq -r -e .recovery_information.challenges[0].instructions < $R2FILE` -UUID1Q=`jq -r -e .recovery_information.challenges[1].instructions < $R2FILE` +UUID0=$(jq -r -e .recovery_information.challenges[0].uuid < "$R2FILE") +UUID1=$(jq -r -e .recovery_information.challenges[1].uuid < "$R2FILE") +UUID0Q=$(jq -r -e .recovery_information.challenges[0].instructions < "$R2FILE") +UUID1Q=$(jq -r -e .recovery_information.challenges[1].instructions < "$R2FILE") -if test "$UUID1Q" = 'What is your name?' +if [ "$UUID1Q" = 'What is your name?' ] then NAME_UUID=$UUID1 IBAN_UUID=$UUID0 @@ -450,10 +461,10 @@ anastasis-reducer -a \ }' \ --arg UUID "$NAME_UUID" )" \ - select_challenge < $R2FILE > $R1FILE 2>> test_reducer.err + select_challenge < "$R2FILE" > "$R1FILE" 2>> test_reducer.err anastasis-reducer -a '{"answer": "Hans"}' \ - solve_challenge < $R1FILE > $R2FILE + solve_challenge < "$R1FILE" > "$R2FILE" echo "OK" echo -n "Solving IBAN challenge ..." @@ -465,28 +476,28 @@ anastasis-reducer -a \ }' \ --arg UUID "$IBAN_UUID" )" \ - select_challenge < $R2FILE > $R1FILE 2>> test_reducer.err + select_challenge < "$R2FILE" > "$R1FILE" 2>> test_reducer.err echo "OK" -METHOD=`jq -r -e .challenge_feedback.\"$IBAN_UUID\".state < $R1FILE` -if test "$METHOD" != "iban-instructions" +METHOD=$(jq -r -e .challenge_feedback.\"$IBAN_UUID\".state < "$R1FILE") +if [ "$METHOD" != "iban-instructions" ] then exit_fail "Expected method to be 'iban-instructions', got ${METHOD}" fi -ACC=`jq -r -e .challenge_feedback.\"$IBAN_UUID\".target_iban < $R1FILE` -if test "$ACC" != ${IBAN_CREDIT} +ACC=$(jq -r -e .challenge_feedback.\"$IBAN_UUID\".target_iban < "$R1FILE") +if [ "$ACC" != "${IBAN_CREDIT}" ] then exit_fail "Expected account to be ${IBAN_CREDIT}, got ${ACC}" fi anastasis-reducer \ - back < $R1FILE > $R2FILE 2>> test_reducer.err + back < "$R1FILE" > "$R2FILE" 2>> test_reducer.err -AMOUNT=`jq -r -e .challenge_feedback.\"$IBAN_UUID\".challenge_amount < $R1FILE` -SUBJECT=`jq -r -e .challenge_feedback.\"$IBAN_UUID\".wire_transfer_subject < $R1FILE` +AMOUNT=$(jq -r -e .challenge_feedback.\"$IBAN_UUID\".challenge_amount < "$R1FILE") +SUBJECT=$(jq -r -e .challenge_feedback.\"$IBAN_UUID\".wire_transfer_subject < "$R1FILE") echo -n "Performing authorization wire transfer ${SUBJECT} ..." wire_transfer_to_anastasis "${AMOUNT}" "${SUBJECT}" @@ -494,35 +505,35 @@ wire_transfer_to_anastasis "${AMOUNT}" "${SUBJECT}" echo " OK" echo -n "Triggering inbound check ..." -anastasis-helper-authorization-iban -c $CONF -t -L INFO +anastasis-helper-authorization-iban -c "$CONF" -t -L INFO echo " OK" # Now we should get the secret... echo -n "Polling for recovery ..." -anastasis-reducer poll -L INFO < $R2FILE > $R1FILE +anastasis-reducer poll -L INFO < "$R2FILE" > "$R1FILE" echo " OK" echo -n "Checking recovered secret ..." # finally: check here that we recovered the secret... -STATE=`jq -r -e .recovery_state < $R1FILE` -if test "$STATE" != "RECOVERY_FINISHED" +STATE=$(jq -r -e .recovery_state < "$R1FILE") +if [ "$STATE" != "RECOVERY_FINISHED" ] then - jq -e . $R1FILE + jq -e . "$R1FILE" exit_fail "Expected new state to be 'RECOVERY_FINISHED', got '$STATE'" fi -SECRET=`jq -r -e .core_secret.value < $R1FILE` -if test "$SECRET" != "VERYHARDT0GVESSSECRET" +SECRET=$(jq -r -e .core_secret.value < "$R1FILE") +if [ "$SECRET" != "VERYHARDT0GVESSSECRET" ] then - jq -e . $R1FILE + jq -e . "$R1FILE" exit_fail "Expected recovered secret to be 'VERYHARDT0GVESSSECRET', got '$SECRET'" fi -MIME=`jq -r -e .core_secret.mime < $R1FILE` -if test "$MIME" != "text/plain" +MIME=$(jq -r -e .core_secret.mime < "$R1FILE") +if [ "$MIME" != "text/plain" ] then - jq -e . $R1FILE + jq -e . "$R1FILE" exit_fail "Expected recovered mime to be 'text/plain', got '$MIME'" fi diff --git a/src/cli/test_reducer.conf b/src/cli/test_reducer.conf index 5fa5d46..4f26a79 100644 --- a/src/cli/test_reducer.conf +++ b/src/cli/test_reducer.conf @@ -26,10 +26,10 @@ COST = TESTKUDOS:0.0 [exchange] +MASTER_PUBLIC_KEY = 3NX5DJDBD8XVGZYHV3PBF8C3Z4GK48XD59YY5GF3CZE8AJM04WSG AML_THRESHOLD = TESTKUDOS:1000000 MAX_KEYS_CACHING = forever DB = postgres -MASTER_PRIV_FILE = ${TALER_DATA_HOME}/exchange/offline-keys/master.priv SERVE = tcp UNIXPATH = ${TALER_RUNTIME_DIR}/exchange.http UNIXPATH_MODE = 660 @@ -40,10 +40,9 @@ SIGNKEY_LEGAL_DURATION = 2 years LEGAL_DURATION = 2 years LOOKAHEAD_SIGN = 3 weeks 1 day LOOKAHEAD_PROVIDE = 2 weeks 1 day -KEYDIR = ${TALER_DATA_HOME}/exchange/live-keys/ -REVOCATION_DIR = ${TALER_DATA_HOME}/exchange/revocations/ TERMS_ETAG = 0 PRIVACY_ETAG = 0 +STEFAN_ABS = "TESTKUDOS:5" # Account of the EXCHANGE [exchange-account-1] @@ -53,26 +52,28 @@ ENABLE_DEBIT = YES ENABLE_CREDIT = YES [exchange-accountcredentials-1] -WIRE_GATEWAY_URL = http://localhost:8082/facades/test-facade/taler-wire-gateway/ +WIRE_GATEWAY_URL = http://localhost:18082/accounts/exchange/taler-wire-gateway/ WIRE_GATEWAY_AUTH_METHOD = basic USERNAME = exchange PASSWORD = x + +[exchange-account-2] +PAYTO_URI = "payto://x-taler-bank/localhost/exchange?receiver-name=exchange" +ENABLE_DEBIT = YES +ENABLE_CREDIT = YES + +[exchange-accountcredentials-2] +WIRE_GATEWAY_AUTH_METHOD = none +WIRE_GATEWAY_URL = "http://localhost:18082/accounts/exchange/taler-wire-gateway/" + [merchant] SERVE = tcp PORT = 9966 UNIXPATH = ${TALER_RUNTIME_DIR}/merchant.http UNIXPATH_MODE = 660 -DEFAULT_WIRE_FEE_AMORTIZATION = 1 DB = postgres -WIREFORMAT = default -# Set very low, so we can be sure that the database generated -# will contain wire transfers "ready" for the aggregator. -WIRE_TRANSFER_DELAY = 1 minute -DEFAULT_PAY_DEADLINE = 1 day -DEFAULT_MAX_DEPOSIT_FEE = TESTKUDOS:0.1 KEYFILE = ${TALER_DATA_HOME}/merchant/merchant.priv -DEFAULT_MAX_WIRE_FEE = TESTKUDOS:0.10 # Ensure that merchant reports EVERY deposit confirmation to auditor FORCE_AUDIT = YES @@ -99,13 +100,35 @@ SUGGESTED_EXCHANGE_PAYTO = payto://x-taler-bank/localhost/2 ALLOW_REGISTRATIONS = YES SERVE = http +[libeufin-bank] +CURRENCY = TESTKUDOS +WIRE_TYPE = iban +IBAN_PAYTO_BIC = SANDBOXX +DEFAULT_CUSTOMER_DEBT_LIMIT = TESTKUDOS:200 +DEFAULT_ADMIN_DEBT_LIMIT = TESTKUDOS:2000 +REGISTRATION_BONUS_ENABLED = yes +REGISTRATION_BONUS = TESTKUDOS:100 +SUGGESTED_WITHDRAWAL_EXCHANGE = http://localhost:8081/ +SERVE = tcp +PORT = 18082 + [exchangedb] IDLE_RESERVE_EXPIRATION_TIME = 4 weeks LEGAL_RESERVE_EXPIRATION_TIME = 7 years +[auditordb-postgres] +CONFIG = "postgres:///talercheck" + +[exchangedb-postgres] +CONFIG = "postgres:///talercheck" + +[merchantdb-postgres] +CONFIG = "postgres:///talercheck" + [merchant-exchange-default] EXCHANGE_BASE_URL = http://localhost:8081/ CURRENCY = TESTKUDOS +MASTER_KEY = 3NX5DJDBD8XVGZYHV3PBF8C3Z4GK48XD59YY5GF3CZE8AJM04WSG [payments-generator] currency = TESTKUDOS diff --git a/src/cli/test_reducer_free.conf b/src/cli/test_reducer_free.conf index 1c7da88..4e46929 100644 --- a/src/cli/test_reducer_free.conf +++ b/src/cli/test_reducer_free.conf @@ -95,7 +95,7 @@ enable_debit = yes enable_credit = yes [exchange-accountcredentials-1] -WIRE_GATEWAY_URL = "http://localhost:8082/taler-wire-gateway/Exchange/" +WIRE_GATEWAY_URL = "http://localhost:8082/accounts/Exchange/taler-wire-gateway/" WIRE_GATEWAY_AUTH_METHOD = basic USERNAME = Exchange PASSWORD = x diff --git a/src/cli/test_reducer_home/.local/share/taler/exchange-offline/master.priv b/src/cli/test_reducer_home/.local/share/taler/exchange-offline/master.priv new file mode 100644 index 0000000..d990a05 --- /dev/null +++ b/src/cli/test_reducer_home/.local/share/taler/exchange-offline/master.priv @@ -0,0 +1 @@ +>en͙[z3pwTj?cn21
\ No newline at end of file |