summaryrefslogtreecommitdiff
path: root/src/testing/test_merchant_transfer_tracking.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/testing/test_merchant_transfer_tracking.sh')
-rwxr-xr-xsrc/testing/test_merchant_transfer_tracking.sh610
1 files changed, 497 insertions, 113 deletions
diff --git a/src/testing/test_merchant_transfer_tracking.sh b/src/testing/test_merchant_transfer_tracking.sh
index 8fb7be64..41a20c11 100755
--- a/src/testing/test_merchant_transfer_tracking.sh
+++ b/src/testing/test_merchant_transfer_tracking.sh
@@ -1,6 +1,6 @@
#!/bin/bash
# This file is part of TALER
-# Copyright (C) 2014-2021 Taler Systems SA
+# Copyright (C) 2014-2024 Taler Systems SA
#
# TALER is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as
@@ -16,23 +16,82 @@
# License along with TALER; see the file COPYING. If not, see
# <http://www.gnu.org/licenses/>
#
-# Testcase for #6912 (failed to reproduce so far)
+# Testcase for #6912 and #8061
-. initialize_taler_system.sh
+set -eu
+
+. setup.sh
+
+# 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:8082/"
+else
+ echo -n "Testing for libeufin-bank"
+ libeufin-bank --help >/dev/null </dev/null || exit_skip " MISSING"
+ echo " FOUND"
+ ACCOUNT="exchange-account-1"
+ WIRE_METHOD="iban"
+ BANK_FLAGS="-ns -d $WIRE_METHOD -u $ACCOUNT"
+ BANK_URL="http://localhost:18082/"
+fi
+
+
+echo -n "Testing for taler-harness"
+taler-harness --help >/dev/null </dev/null || exit_skip " MISSING"
+echo " FOUND"
+
+# Launch system.
+setup -c "test_template.conf" \
+ -em \
+ $BANK_FLAGS
+LAST_RESPONSE=$(mktemp -p "${TMPDIR:-/tmp}" test_response.conf-XXXXXX)
+WALLET_DB=$(mktemp -p "${TMPDIR:-/tmp}" test_wallet.json-XXXXXX)
+CONF="test_template.conf.edited"
+EXCHANGE_URL="http://localhost:8081/"
echo -n "First prepare wallet with coins..."
-rm $WALLET_DB
-taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB api --expect-success 'withdrawTestBalance' \
+rm -f "$WALLET_DB"
+taler-wallet-cli \
+ --no-throttle \
+ --wallet-db="$WALLET_DB" \
+ api \
+ --expect-success 'withdrawTestBalance' \
"$(jq -n '
{
amount: "TESTKUDOS:99",
- bankBaseUrl: $BANK_URL,
+ corebankApiBaseUrl: $BANK_URL,
exchangeBaseUrl: $EXCHANGE_URL
}' \
- --arg BANK_URL "$BANK_URL/access-api/" \
+ --arg BANK_URL "${BANK_URL}" \
--arg EXCHANGE_URL "$EXCHANGE_URL"
)" 2>wallet-withdraw-1.err >wallet-withdraw-1.out
-taler-wallet-cli --wallet-db=$WALLET_DB run-until-done 2>wallet-withdraw-finish-1.err >wallet-withdraw-finish-1.out
+echo -n "."
+if [ 1 = "$USE_FAKEBANK" ]
+then
+ # Fakebank is instant...
+ sleep 0
+else
+ sleep 10
+ # NOTE: once libeufin can do long-polling, we should
+ # be able to reduce the delay here and run wirewatch
+ # always in the background via setup
+fi
+echo -n "."
+# NOTE: once libeufin can do long-polling, we should
+# be able to reduce the delay here and run wirewatch
+# always in the background via setup
+taler-exchange-wirewatch -L "INFO" -c "$CONF" -t &> taler-exchange-wirewatch.out
+echo -n "."
+
+taler-wallet-cli \
+ --wallet-db="$WALLET_DB" \
+ run-until-done \
+ 2>wallet-withdraw-finish-1.err >wallet-withdraw-finish-1.out
echo " OK"
#
@@ -40,104 +99,143 @@ echo " OK"
#
echo -n "Configuring merchant default instance ..."
-TOR_PAYTO=`get_payto_uri tor x`
-GNUNET_PAYTO=`get_payto_uri gnunet x`
+if [ 1 = "$USE_FAKEBANK" ]
+then
+ TOR_PAYTO="payto://x-taler-bank/localhost/tor?receiver-name=tor"
+ GNUNET_PAYTO="payto://x-taler-bank/localhost/gnunet?receiver-name=gnunet"
+ SURVEY_PAYTO="payto://x-taler-bank/localhost/survey?receiver-name=survey"
+ TUTORIAL_PAYTO="payto://x-taler-bank/localhost/tutorial?receiver-name=tutorial"
+else
+ TOR_PAYTO=$(get_payto_uri tor x)
+ GNUNET_PAYTO=$(get_payto_uri gnunet x)
+ SURVEY_PAYTO=$(get_payto_uri survey x)
+ TUTORIAL_PAYTO=$(get_payto_uri tutorial x)
+fi
# create with 2 address
STATUS=$(curl -H "Content-Type: application/json" -X POST \
-H 'Authorization: Bearer secret-token:super_secret' \
http://localhost:9966/management/instances \
- -d '{"auth":{"method":"external"},"payto_uris":["'$TOR_PAYTO'","'$GNUNET_PAYTO'"],"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_us" : 50000000},"default_pay_delay":{"d_us": 60000000}}' \
+ -d '{"auth":{"method":"external"},"id":"default","name":"default","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us" : 50000000},"default_pay_delay":{"d_us": 60000000}}' \
-w "%{http_code}" -s -o /dev/null)
if [ "$STATUS" != "204" ]
then
- echo 'should respond ok, instance created. got:' $STATUS
- exit 1
+ exit_fail "Expected 204, instance created. got: $STATUS"
fi
-echo OK
+STATUS=$(curl -H "Content-Type: application/json" -X POST \
+ -H 'Authorization: Bearer secret-token:super_secret' \
+ http://localhost:9966/private/accounts \
+ -d '{"payto_uri":"'"$TOR_PAYTO"'"}' \
+ -w "%{http_code}" -s -o /dev/null)
+if [ "$STATUS" != "200" ]
+then
+ exit_fail "Expected 200 OK. Got: $STATUS"
+fi
+STATUS=$(curl -H "Content-Type: application/json" -X POST \
+ -H 'Authorization: Bearer secret-token:super_secret' \
+ http://localhost:9966/private/accounts \
+ -d '{"payto_uri":"'"$GNUNET_PAYTO"'"}' \
+ -w "%{http_code}" -s -o /dev/null)
+
+if [ "$STATUS" != "200" ]
+then
+ exit_fail "Expected 200 OK. Got: $STATUS"
+fi
+
+echo "OK"
echo -n "Configuring merchant test instance ..."
-SURVEY_PAYTO=`get_payto_uri survey x`
-TUTORIAL_PAYTO=`get_payto_uri tutorial x`
# create with 2 address
STATUS=$(curl -H "Content-Type: application/json" -X POST \
-H 'Authorization: Bearer secret-token:super_secret' \
http://localhost:9966/management/instances \
- -d '{"auth":{"method":"external"},"payto_uris":["'$SURVEY_PAYTO'","'$TUTORIAL_PAYTO'"],"id":"test","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_us" : 50000000},"default_pay_delay":{"d_us": 60000000}}' \
+ -d '{"auth":{"method":"external"},"id":"test","name":"test","user_type":"business","address":{},"jurisdiction":{},"use_stefan":true,"default_wire_transfer_delay":{"d_us" : 50000000},"default_pay_delay":{"d_us": 60000000}}' \
-w "%{http_code}" -s -o /dev/null)
if [ "$STATUS" != "204" ]
then
- echo 'should respond ok, instance created. got:' $STATUS
- exit 1
+ exit_fail "Expected 204, instance created. got: $STATUS"
+fi
+STATUS=$(curl -H "Content-Type: application/json" -X POST \
+ -H 'Authorization: Bearer secret-token:super_secret' \
+ http://localhost:9966/instances/test/private/accounts \
+ -d '{"payto_uri":"'"$SURVEY_PAYTO"'","credit_facade_url":"http://localhost:8082/accounts/survey/taler-revenue/","credit_facade_credentials":{"type":"basic","username":"survey","password":"x"}}' \
+ -w "%{http_code}" -s -o /dev/null)
+
+if [ "$STATUS" != "200" ]
+then
+ exit_fail "Expected 200 OK. Got: $STATUS"
fi
-echo OK
-RANDOM_IMG='data:image/png;base64,abcdefg'
# CREATE ORDER AND SELL IT
echo -n "Creating order to be paid..."
STATUS=$(curl 'http://localhost:9966/instances/test/private/orders' \
-d '{"order":{"amount":"TESTKUDOS:1","summary":"payme"}}' \
- -w "%{http_code}" -s -o $LAST_RESPONSE)
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
if [ "$STATUS" != "200" ]
then
- echo 'should respond ok, order created. got:' $STATUS `cat $LAST_RESPONSE`
- exit 1
+ cat "$LAST_RESPONSE"
+ exit_fail "Expected 200 ok, order created. got: $STATUS"
fi
-ORDER_ID=`jq -e -r .order_id < $LAST_RESPONSE`
-TOKEN=`jq -e -r .token < $LAST_RESPONSE`
+ORDER_ID=$(jq -e -r .order_id < "$LAST_RESPONSE")
+#TOKEN=$(jq -e -r .token < "$LAST_RESPONSE")
STATUS=$(curl "http://localhost:9966/instances/test/private/orders/${ORDER_ID}" \
- -w "%{http_code}" -s -o $LAST_RESPONSE)
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
if [ "$STATUS" != "200" ]
then
- echo 'should respond ok, getting order info before claming it. got:' $STATUS `cat $LAST_RESPONSE`
- exit 1
+ cat "$LAST_RESPONSE"
+ exit_fail "Expected 200 ok, getting order info before claming it. got: $STATUS"
fi
-PAY_URL=`jq -e -r .taler_pay_uri < $LAST_RESPONSE`
-echo OK
+PAY_URL=$(jq -e -r .taler_pay_uri < "$LAST_RESPONSE")
+echo "OK"
-NOW=`date +%s`
+NOW=$(date +%s)
echo -n "Pay first order ..."
-taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB handle-uri "${PAY_URL}" -y 2> wallet-pay1.err > wallet-pay1.log
-NOW2=`date +%s`
-echo " OK (took $( echo -n $(($NOW2 - $NOW))) secs)"
+taler-wallet-cli \
+ --no-throttle \
+ --wallet-db="$WALLET_DB" \
+ handle-uri "${PAY_URL}" \
+ -y \
+ 2> wallet-pay1.err > wallet-pay1.log
+NOW2=$(date +%s)
+echo " OK (took $(( NOW2 - NOW )) secs)"
STATUS=$(curl "http://localhost:9966/instances/test/private/orders/${ORDER_ID}" \
- -w "%{http_code}" -s -o $LAST_RESPONSE)
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
if [ "$STATUS" != "200" ]
then
- echo 'should respond ok, after pay. got:' $STATUS `cat $LAST_RESPONSE`
- exit 1
+ cat "$LAST_RESPONSE"
+ exit_fail "Expected 200 ok, after pay. got: $STATUS"
fi
-ORDER_STATUS=`jq -r .order_status < $LAST_RESPONSE`
+ORDER_STATUS=$(jq -r .order_status < "$LAST_RESPONSE")
if [ "$ORDER_STATUS" != "paid" ]
then
- echo 'order should be paid. got:' $ORDER_STATUS `cat $LAST_RESPONSE`
- exit 1
+ cat "$LAST_RESPONSE"
+ exit_fail "Expected 'paid'. got: $ORDER_STATUS"
fi
#
# WIRE TRANSFER TO MERCHANT AND NOTIFY BACKEND
#
-PAY_DEADLINE=`jq -r .contract_terms.pay_deadline.t_s < $LAST_RESPONSE`
-WIRE_DEADLINE=`jq -r .contract_terms.wire_transfer_deadline.t_s < $LAST_RESPONSE`
+#PAY_DEADLINE=$(jq -r .contract_terms.pay_deadline.t_s < "$LAST_RESPONSE")
+WIRE_DEADLINE=$(jq -r .contract_terms.wire_transfer_deadline.t_s < "$LAST_RESPONSE")
-NOW=`date +%s`
+NOW=$(date +%s)
-TO_SLEEP=`echo $(( $WIRE_DEADLINE - $NOW ))`
+TO_SLEEP=$(( WIRE_DEADLINE - NOW ))
echo "waiting $TO_SLEEP secs for wire transfer"
echo -n "Perform wire transfers ..."
@@ -145,124 +243,111 @@ taler-exchange-aggregator -y -c $CONF -T ${TO_SLEEP}000000 -t -L INFO &> aggrega
taler-exchange-transfer -c $CONF -t -L INFO &> transfer.log
echo " DONE"
-echo -n "waiting for Nexus and Sandbox to settle the payment .."
-sleep 3
-echo " DONE"
-
echo -n "Obtaining wire transfer details from bank..."
-# Emulating the previous pybank-based logic of getting
-# the wire transfer information _via the exchange_ bank
-# account. NOTE: grabbing tx == 0, since the latest
-# transaction appear first in the bank's history.
-export BANKDATA=`get_bankaccount_transactions exchange x | jq '.transactions[0]'`
-export SUBJECT=`echo $BANKDATA | jq -r .subject`
-export WTID=`echo $SUBJECT | awk '{print $1}'`
-export WURL=`echo $SUBJECT | awk '{print $2}'`
-export CREDIT_AMOUNT="`echo $BANKDATA | jq -r .currency`:`echo $BANKDATA | jq -r .amount`"
-export TARGET=`echo $BANKDATA | jq -r .creditorIban`
+
+BANKDATA="$(curl 'http://localhost:8082/accounts/exchange/taler-wire-gateway/history/outgoing?delta=1' -s)"
+WTID=$(echo "$BANKDATA" | jq -r .outgoing_transactions[0].wtid)
+WURL=$(echo "$BANKDATA" | jq -r .outgoing_transactions[0].exchange_base_url)
+CREDIT_AMOUNT=$(echo "$BANKDATA" | jq -r .outgoing_transactions[0].amount)
+TARGET_PAYTO=$(echo "$BANKDATA" | jq -r .outgoing_transactions[0].credit_account)
+TARGET=$(echo "$TARGET_PAYTO" | awk -F = '{print $2}')
+
# Figure out which account got paid, in order to
# resort the right (and complete: including the receiver-name)
# TARGET_PAYTO
-if `echo $SURVEY_PAYTO | grep -q $TARGET`; then
- export TARGET_PAYTO=$SURVEY_PAYTO;
+if echo "$SURVEY_PAYTO" | grep -q "$TARGET" > /dev/null; then
+ TARGET_PAYTO="$SURVEY_PAYTO";
fi
-if `echo $TUTORIAL_PAYTO | grep -q $TARGET`; then
- export TARGET_PAYTO=$TUTORIAL_PAYTO;
+if echo "$SURVEY_PAYTO" | grep -q "$TARGET" > /dev/null; then
+ TARGET_PAYTO="$SURVEY_PAYTO";
fi
-echo " DONE"
if [ "$EXCHANGE_URL" != "$WURL" ]
then
exit_fail "Wrong exchange URL in subject '$SUBJECT', expected $EXCHANGE_URL"
fi
-
echo " OK"
set +e
-export TARGET_PAYTO
-export WURL
-export WTID
-export CREDIT_AMOUNT
-export LAST_RESPONSE
-
echo -n "Notifying merchant of correct wire transfer, but on wrong instance..."
#issue 6912
#here we are notifying the transfer into a wrong instance (default) and the payto_uri of the default instance
-STATUS=$(curl 'http://localhost:9966/instances/default/private/transfers' \
+STATUS=$(curl 'http://localhost:9966/private/transfers' \
-d "{\"credit_amount\":\"$CREDIT_AMOUNT\",\"wtid\":\"$WTID\",\"payto_uri\":\"$TOR_PAYTO\",\"exchange_url\":\"$WURL\"}" \
-m 3 \
- -w "%{http_code}" -s -o $LAST_RESPONSE)
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
-if [ "$STATUS" != "200" ]
+if [ "$STATUS" != "204" ]
then
- jq . < $LAST_RESPONSE
- exit_fail "Expected response ok, after providing transfer data. got: $STATUS"
+ jq . < "$LAST_RESPONSE"
+ exit_fail "Expected response 204 no content, after providing transfer data. Got: $STATUS"
fi
echo " OK"
echo -n "Fetching wire transfers of DEFAULT instance ..."
-STATUS=$(curl 'http://localhost:9966/instances/default/private/transfers' \
- -w "%{http_code}" -s -o $LAST_RESPONSE)
+STATUS=$(curl 'http://localhost:9966/private/transfers' \
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
if [ "$STATUS" != "200" ]
then
- jq . < $LAST_RESPONSE
+ jq . < "$LAST_RESPONSE"
exit_fail "Expected response 200 Ok. got: $STATUS"
fi
-TRANSFERS_LIST_SIZE=`jq -r '.transfers | length' < $LAST_RESPONSE`
+TRANSFERS_LIST_SIZE=$(jq -r '.transfers | length' < "$LAST_RESPONSE")
if [ "$TRANSFERS_LIST_SIZE" != "1" ]
then
- jq . < $LAST_RESPONSE
+ jq . < "$LAST_RESPONSE"
exit_fail "Expected one transfer. got: $TRANSFERS_LIST_SIZE"
fi
echo "OK"
+echo -n "Fetching running taler-merchant-exchange on bogus transfer ..."
+taler-merchant-exchange -c "$CONF" -L INFO -t &> taler-merchant-exchange-bad.log
+echo "OK"
+
echo -n "Fetching wire transfers of 'test' instance ..."
STATUS=$(curl 'http://localhost:9966/instances/test/private/transfers' \
- -w "%{http_code}" -s -o $LAST_RESPONSE)
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
if [ "$STATUS" != "200" ]
then
- jq . < $LAST_RESPONSE
+ jq . < "$LAST_RESPONSE"
exit_fail "Expected response 200 Ok. got: $STATUS"
fi
-TRANSFERS_LIST_SIZE=`jq -r '.transfers | length' < $LAST_RESPONSE`
+TRANSFERS_LIST_SIZE=$(jq -r '.transfers | length' < "$LAST_RESPONSE")
if [ "$TRANSFERS_LIST_SIZE" != "0" ]
then
- jq . < $LAST_RESPONSE
- exit_fail "Expected response ok. got: $STATUS"
+ jq . < "$LAST_RESPONSE"
+ exit_fail "Expected non-empty transfer list size. got: $TRANSFERS_LIST_SIZE"
fi
echo "OK"
-
echo -n "Checking order status ..."
STATUS=$(curl "http://localhost:9966/instances/test/private/orders/${ORDER_ID}?transfer=YES" \
- -w "%{http_code}" -s -o $LAST_RESPONSE)
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
if [ "$STATUS" != "200" ]
then
- jq . < $LAST_RESPONSE
- exit_fail 'should response ok, after order inquiry. got:' $STATUS `cat $LAST_RESPONSE`
- exit 1
+ jq . < "$LAST_RESPONSE"
+ exit_fail "Expected 200 ok, after order inquiry. got: $STATUS"
fi
-WAS_WIRED=`jq -r .wired < $LAST_RESPONSE`
+WAS_WIRED=$(jq -r .wired < "$LAST_RESPONSE")
if [ "$WAS_WIRED" == "true" ]
then
- jq . < $LAST_RESPONSE
- echo '.wired true, expected false'
- exit 1
+ jq . < "$LAST_RESPONSE"
+ exit_fail ".wired is true, expected false"
fi
echo " OK"
@@ -271,58 +356,357 @@ echo -n "Notifying merchant of correct wire transfer in the correct instance..."
#this time in the correct instance so the order will be marked as wired...
STATUS=$(curl 'http://localhost:9966/instances/test/private/transfers' \
- -d '{"credit_amount":"'$CREDIT_AMOUNT'","wtid":"'$WTID'","payto_uri":"'$TARGET_PAYTO'","exchange_url":"'$WURL'"}' \
+ -d '{"credit_amount":"'"$CREDIT_AMOUNT"'","wtid":"'"$WTID"'","payto_uri":"'"$TARGET_PAYTO"'","exchange_url":"'"$WURL"'"}' \
-m 3 \
- -w "%{http_code}" -s -o $LAST_RESPONSE)
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
-if [ "$STATUS" != "200" ]
+if [ "$STATUS" != "204" ]
then
- jq . < $LAST_RESPONSE
- exit_fail "Expected response ok, after providing transfer data. got: $STATUS"
+ jq . < "$LAST_RESPONSE"
+ exit_fail "Expected response 204 no content, after providing transfer data. got: $STATUS"
fi
echo " OK"
+echo -n "Fetching running taler-merchant-exchange on good transfer ..."
+taler-merchant-exchange -c $CONF -L INFO -t &> taler-merchant-exchange-bad.log
+echo "OK"
+
echo -n "Fetching wire transfers of TEST instance ..."
STATUS=$(curl 'http://localhost:9966/instances/test/private/transfers' \
- -w "%{http_code}" -s -o $LAST_RESPONSE)
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
if [ "$STATUS" != "200" ]
then
- jq . < $LAST_RESPONSE
+ jq . < "$LAST_RESPONSE"
exit_fail "Expected response 200 Ok. got: $STATUS"
fi
-TRANSFERS_LIST_SIZE=`jq -r '.transfers | length' < $LAST_RESPONSE`
+TRANSFERS_LIST_SIZE=$(jq -r '.transfers | length' < "$LAST_RESPONSE")
if [ "$TRANSFERS_LIST_SIZE" != "1" ]
then
- jq . < $LAST_RESPONSE
+ jq . < "$LAST_RESPONSE"
exit_fail "Expected one transfer. got: $TRANSFERS_LIST_SIZE"
fi
echo "OK"
echo -n "Checking order status ..."
-STATUS=$(curl "http://localhost:9966/instances/test/private/orders/${ORDER_ID}?transfer=YES" \
- -w "%{http_code}" -s -o $LAST_RESPONSE)
+STATUS=$(curl "http://localhost:9966/instances/test/private/orders/${ORDER_ID}" \
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
if [ "$STATUS" != "200" ]
then
- jq . < $LAST_RESPONSE
- exit_fail 'should response ok, after order inquiry. got:' $STATUS `cat $LAST_RESPONSE`
- exit 1
+ jq . < "$LAST_RESPONSE"
+ exit_fail "Expected 200 ok, after order inquiry. got: $STATUS"
fi
-WAS_WIRED=`jq -r .wired < $LAST_RESPONSE`
+WAS_WIRED=$(jq -r .wired < "$LAST_RESPONSE")
if [ "$WAS_WIRED" != "true" ]
then
- jq . < $LAST_RESPONSE
- echo '.wired false, expected true'
- exit 1
+ jq . < "$LAST_RESPONSE"
+ exit_fail ".wired false, expected true"
+fi
+
+echo " OK"
+
+
+echo "================== 2nd order ====================== "
+
+
+
+# CREATE ORDER AND SELL IT
+echo -n "Creating 2nd order to be paid..."
+STATUS=$(curl 'http://localhost:9966/instances/test/private/orders' \
+ -d '{"order":{"amount":"TESTKUDOS:2","summary":"payme"}}' \
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
+
+if [ "$STATUS" != "200" ]
+then
+ cat "$LAST_RESPONSE"
+ exit_fail "Expected 200 ok, order created. got: $STATUS"
fi
+ORDER_ID=$(jq -e -r .order_id < "$LAST_RESPONSE")
+#TOKEN=$(jq -e -r .token < "$LAST_RESPONSE")
+
+STATUS=$(curl "http://localhost:9966/instances/test/private/orders/${ORDER_ID}" \
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
+
+if [ "$STATUS" != "200" ]
+then
+ cat "$LAST_RESPONSE"
+ exit_fail "Expected 200 ok, getting order info before claming it. got: $STATUS"
+fi
+PAY_URL=$(jq -e -r .taler_pay_uri < "$LAST_RESPONSE")
+echo "OK"
+
+NOW=$(date +%s)
+echo -n "Pay second order ..."
+taler-wallet-cli \
+ --no-throttle \
+ --wallet-db="$WALLET_DB" \
+ handle-uri "${PAY_URL}" \
+ -y \
+ 2> wallet-pay2.err > wallet-pay2.log
+NOW2=$(date +%s)
+echo " OK (took $(( NOW2 - NOW )) secs)"
+
+STATUS=$(curl "http://localhost:9966/instances/test/private/orders/${ORDER_ID}" \
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
+
+if [ "$STATUS" != "200" ]
+then
+ cat "$LAST_RESPONSE"
+ exit_fail "Expected 200 ok, after pay. got: $STATUS"
+fi
+
+ORDER_STATUS=$(jq -r .order_status < "$LAST_RESPONSE")
+
+if [ "$ORDER_STATUS" != "paid" ]
+then
+ cat "$LAST_RESPONSE"
+ exit_fail "Expected 'paid'. got: $ORDER_STATUS"
+fi
+
+#
+# WIRE TRANSFER TO MERCHANT AND NOTIFY BACKEND
+#
+
+#PAY_DEADLINE=$(jq -r .contract_terms.pay_deadline.t_s < "$LAST_RESPONSE")
+WIRE_DEADLINE=$(jq -r .contract_terms.wire_transfer_deadline.t_s < "$LAST_RESPONSE")
+
+NOW=$(date +%s)
+
+TO_SLEEP=$(( WIRE_DEADLINE - NOW ))
+echo "waiting $TO_SLEEP secs for wire transfer"
+
+echo -n "Pre-check for exchange deposit ..."
+taler-merchant-depositcheck -c $CONF -t -L INFO &> depositcheck2a.log
+echo " DONE"
+
+echo -n "Perform wire transfers ..."
+taler-exchange-aggregator -y -c $CONF -T ${TO_SLEEP}000000 -t -L INFO &> aggregator2.log
+taler-exchange-transfer -c $CONF -t -L INFO &> transfer2.log
+echo " DONE"
+
+echo -n "Post-check for exchange deposit ..."
+taler-merchant-depositcheck -c $CONF -t -T ${TO_SLEEP}000000 -L INFO &> depositcheck2b.log
+echo " DONE"
+
+
+echo -n "Obtaining wire transfer details from bank..."
+
+BANKDATA="$(curl 'http://localhost:8082/accounts/exchange/taler-wire-gateway/history/outgoing?delta=2' -s)"
+
+WTID=$(echo "$BANKDATA" | jq -r .outgoing_transactions[1].wtid)
+WURL=$(echo "$BANKDATA" | jq -r .outgoing_transactions[1].exchange_base_url)
+CREDIT_AMOUNT=$(echo "$BANKDATA" | jq -r .outgoing_transactions[1].amount)
+TARGET_PAYTO=$(echo "$BANKDATA" | jq -r .outgoing_transactions[1].credit_account)
+TARGET=$(echo "$TARGET_PAYTO" | awk -F = '{print $2}')
+
+# Figure out which account got paid, in order to
+# resort the right (and complete: including the receiver-name)
+# TARGET_PAYTO
+if echo "$SURVEY_PAYTO" | grep -q "$TARGET" > /dev/null; then
+ TARGET_PAYTO="$SURVEY_PAYTO";
+fi
+if echo "$SURVEY_PAYTO" | grep -q "$TARGET" > /dev/null; then
+ TARGET_PAYTO="$SURVEY_PAYTO";
+fi
+if [ "$EXCHANGE_URL" != "$WURL" ]
+then
+ exit_fail "Wrong exchange URL in subject '$SUBJECT', expected $EXCHANGE_URL"
+fi
echo " OK"
+echo -n "Notifying merchant of correct wire transfer in the correct instance..."
+#this time in the correct instance so the order will be marked as wired...
+
+STATUS=$(curl 'http://localhost:9966/instances/test/private/transfers' \
+ -d '{"credit_amount":"'"$CREDIT_AMOUNT"'","wtid":"'"$WTID"'","payto_uri":"'"$TARGET_PAYTO"'","exchange_url":"'"$WURL"'"}' \
+ -m 3 \
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
+
+if [ "$STATUS" != "204" ]
+then
+ jq . < "$LAST_RESPONSE"
+ exit_fail "Expected response 204 no content, after providing transfer data. got: $STATUS"
+fi
+echo " OK"
+
+echo -n "Fetching running taler-merchant-exchange on good transfer ..."
+taler-merchant-exchange -c $CONF -L INFO -t &> taler-merchant-exchange2.log
+echo "OK"
+
+echo -n "Fetching wire transfers of TEST instance ..."
+
+STATUS=$(curl 'http://localhost:9966/instances/test/private/transfers' \
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
+
+if [ "$STATUS" != "200" ]
+then
+ jq . < "$LAST_RESPONSE"
+ exit_fail "Expected response 200 Ok. got: $STATUS"
+fi
+
+TRANSFERS_LIST_SIZE=$(jq -r '.transfers | length' < "$LAST_RESPONSE")
+
+if [ "$TRANSFERS_LIST_SIZE" != "2" ]
+then
+ jq . < "$LAST_RESPONSE"
+ exit_fail "Expected two transfers. got: $TRANSFERS_LIST_SIZE"
+fi
+
+echo "OK"
+
+echo -n "Checking order status ..."
+STATUS=$(curl "http://localhost:9966/instances/test/private/orders/${ORDER_ID}" \
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
+
+if [ "$STATUS" != "200" ]
+then
+ jq . < "$LAST_RESPONSE"
+ exit_fail "Expected 200 ok, after order inquiry. got: $STATUS"
+fi
+
+WAS_WIRED=$(jq -r .wired < "$LAST_RESPONSE")
+
+if [ "$WAS_WIRED" != "true" ]
+then
+ jq . < "$LAST_RESPONSE"
+ exit_fail ".wired false, expected true"
+fi
+
+echo " OK"
+
+echo "================== 3rd order ====================== "
+
+# CREATE ORDER AND SELL IT
+echo -n "Creating 3rd order to be paid..."
+STATUS=$(curl 'http://localhost:9966/instances/test/private/orders' \
+ -d '{"order":{"amount":"TESTKUDOS:3","summary":"payme"}}' \
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
+
+if [ "$STATUS" != "200" ]
+then
+ cat "$LAST_RESPONSE"
+ exit_fail "Expected 200 ok, order created. got: $STATUS"
+fi
+
+ORDER_ID=$(jq -e -r .order_id < "$LAST_RESPONSE")
+#TOKEN=$(jq -e -r .token < "$LAST_RESPONSE")
+
+STATUS=$(curl "http://localhost:9966/instances/test/private/orders/${ORDER_ID}" \
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
+
+if [ "$STATUS" != "200" ]
+then
+ cat "$LAST_RESPONSE"
+ exit_fail "Expected 200 ok, getting order info before claming it. got: $STATUS"
+fi
+PAY_URL=$(jq -e -r .taler_pay_uri < "$LAST_RESPONSE")
+echo "OK"
+
+NOW=$(date +%s)
+echo -n "Pay third order ..."
+taler-wallet-cli \
+ --no-throttle \
+ --wallet-db="$WALLET_DB" \
+ handle-uri "${PAY_URL}" \
+ -y \
+ 2> wallet-pay2.err > wallet-pay2.log
+NOW2=$(date +%s)
+echo " OK (took $(( NOW2 - NOW )) secs)"
+
+STATUS=$(curl "http://localhost:9966/instances/test/private/orders/${ORDER_ID}" \
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
+
+if [ "$STATUS" != "200" ]
+then
+ cat "$LAST_RESPONSE"
+ exit_fail "Expected 200 ok, after pay. got: $STATUS"
+fi
+
+ORDER_STATUS=$(jq -r .order_status < "$LAST_RESPONSE")
+
+if [ "$ORDER_STATUS" != "paid" ]
+then
+ cat "$LAST_RESPONSE"
+ exit_fail "Expected 'paid'. got: $ORDER_STATUS"
+fi
+
+#
+# WIRE TRANSFER TO MERCHANT AND NOTIFY BACKEND
+#
+
+#PAY_DEADLINE=$(jq -r .contract_terms.pay_deadline.t_s < "$LAST_RESPONSE")
+WIRE_DEADLINE=$(jq -r .contract_terms.wire_transfer_deadline.t_s < "$LAST_RESPONSE")
+
+NOW=$(date +%s)
+
+TO_SLEEP=$(( WIRE_DEADLINE - NOW ))
+echo "waiting $TO_SLEEP secs for wire transfer"
+
+echo -n "Perform wire transfers ..."
+taler-exchange-aggregator -y -c $CONF -T ${TO_SLEEP}000000 -t -L INFO &> aggregator3.log
+taler-exchange-transfer -c $CONF -t -L INFO &> transfer3.log
+echo " DONE"
+
+echo -n "Running taler-merchant-wirewatch to check transfer ..."
+taler-merchant-wirewatch -c $CONF -t -L INFO &> taler-merchant-wirewatch.log
+echo " DONE"
+
+echo -n "Post-wirewatch check for exchange deposit ..."
+taler-merchant-depositcheck -c $CONF -t -T ${TO_SLEEP}000000 -L INFO &> depositcheck2b.log
+echo " DONE"
+
+echo -n "Fetching wire transfers of TEST instance ..."
+
+STATUS=$(curl 'http://localhost:9966/instances/test/private/transfers' \
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
+
+if [ "$STATUS" != "200" ]
+then
+ jq . < "$LAST_RESPONSE"
+ exit_fail "Expected response 200 Ok. got: $STATUS"
+fi
+
+TRANSFERS_LIST_SIZE=$(jq -r '.transfers | length' < "$LAST_RESPONSE")
+
+if [ "$TRANSFERS_LIST_SIZE" != "3" ]
+then
+ jq . < "$LAST_RESPONSE"
+ exit_fail "Expected three transfers. got: $TRANSFERS_LIST_SIZE"
+fi
+
+echo "OK"
+
+echo -n "Fetching running taler-merchant-exchange on good transfer ..."
+taler-merchant-exchange -c $CONF -L INFO -t &> taler-merchant-exchange2.log
+echo "OK"
+
+echo -n "Checking order status ..."
+STATUS=$(curl "http://localhost:9966/instances/test/private/orders/${ORDER_ID}" \
+ -w "%{http_code}" -s -o "$LAST_RESPONSE")
+
+if [ "$STATUS" != "200" ]
+then
+ jq . < "$LAST_RESPONSE"
+ exit_fail "Expected 200 ok, after order inquiry. got: $STATUS"
+fi
+
+WAS_WIRED=$(jq -r .wired < "$LAST_RESPONSE")
+
+if [ "$WAS_WIRED" != "true" ]
+then
+ jq . < "$LAST_RESPONSE"
+ exit_fail ".wired false, expected true"
+fi
+
+echo " OK"
+
+
exit 0