From 11b643dd83fa3e75d5aa3b4918c55065fa6dc4fa Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Mon, 30 Sep 2019 22:11:24 +0200 Subject: add test for wire transfer subject malformed --- src/auditor/taler-wire-auditor.c | 25 +++++++++------------ src/auditor/test-auditor.sh | 48 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 58 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/auditor/taler-wire-auditor.c b/src/auditor/taler-wire-auditor.c index 85638fa76..fe6b66015 100644 --- a/src/auditor/taler-wire-auditor.c +++ b/src/auditor/taler-wire-auditor.c @@ -417,7 +417,7 @@ do_shutdown (void *cls) report_wire_out_inconsistencies, "total_wire_out_delta_plus", TALER_JSON_from_amount (&total_bad_amount_out_plus), - /* Tested in test-auditor.sh #11, #15 */ + /* Tested in test-auditor.sh #11, #15, #19 */ "total_wire_out_delta_minus", TALER_JSON_from_amount (&total_bad_amount_out_minus), /* Tested in test-auditor.sh #2 */ @@ -442,8 +442,10 @@ do_shutdown (void *cls) "row_minor_inconsistencies", report_row_minor_inconsistencies, /* block */ + /* Tested in test-auditor.sh #19 */ "total_wire_format_amount", TALER_JSON_from_amount (&total_wire_format_amount), + /* Tested in test-auditor.sh #19 */ "wire_format_inconsistencies", report_wire_format_inconsistencies, "total_amount_lag", @@ -910,7 +912,7 @@ wire_out_cb (void *cls, } } - cleanup: +cleanup: GNUNET_assert (GNUNET_OK == free_roi (NULL, &key, @@ -1032,7 +1034,6 @@ history_debit_cb (void *cls, { struct WireAccount *wa = cls; struct ReserveOutInfo *roi; - struct GNUNET_HashCode rowh; if (TALER_BANK_DIRECTION_NONE == dir) { @@ -1056,11 +1057,8 @@ history_debit_cb (void *cls, { char *diagnostic; - GNUNET_CRYPTO_hash (row_off, - row_off_size, - &rowh); GNUNET_asprintf (&diagnostic, - "malformed subject `%8s...'", + "malformed subject `%s'", details->wtid_s); GNUNET_break (GNUNET_OK == TALER_amount_add (&total_wire_format_amount, @@ -1069,7 +1067,8 @@ history_debit_cb (void *cls, report (report_wire_format_inconsistencies, json_pack ("{s:o, s:o, s:s}", "amount", TALER_JSON_from_amount (&details->amount), - "wire_offset_hash", GNUNET_JSON_from_data_auto (&rowh), + "wire_offset", GNUNET_JSON_from_data (row_off, + row_off_size), "diagnostic", diagnostic)); GNUNET_free (diagnostic); return GNUNET_OK; @@ -1109,11 +1108,8 @@ history_debit_cb (void *cls, { char *diagnostic; - GNUNET_CRYPTO_hash (row_off, - row_off_size, - &rowh); GNUNET_asprintf (&diagnostic, - "duplicate subject hash `%8s...'", + "duplicate subject hash `%s'", TALER_B2S (&roi->subject_hash)); GNUNET_break (GNUNET_OK == TALER_amount_add (&total_wire_format_amount, @@ -1122,7 +1118,8 @@ history_debit_cb (void *cls, report (report_wire_format_inconsistencies, json_pack ("{s:o, s:o, s:s}", "amount", TALER_JSON_from_amount (&details->amount), - "wire_offset_hash", GNUNET_JSON_from_data_auto (&rowh), + "wire_offset", GNUNET_JSON_from_data (row_off, + row_off_size), "diagnostic", diagnostic)); GNUNET_free (diagnostic); return GNUNET_OK; @@ -1542,7 +1539,7 @@ history_credit_cb (void *cls, row_off_size), "diagnostic", "execution date missmatch")); } - cleanup: +cleanup: GNUNET_assert (GNUNET_OK == free_rii (NULL, &key, diff --git a/src/auditor/test-auditor.sh b/src/auditor/test-auditor.sh index f2edf8299..d7d5b6e16 100755 --- a/src/auditor/test-auditor.sh +++ b/src/auditor/test-auditor.sh @@ -1023,7 +1023,6 @@ fi echo PASS - # cannot easily undo broad DELETE operation, hence full reload echo -n "Reloading database ..." full_reload @@ -1032,6 +1031,53 @@ echo "DONE" +# Test where outgoing wire transfer subject is malformed +function test_19() { +echo "===========19: outgoing wire subject malformed=================" + +# Need to first run the aggregator so the outgoing transfer exists +pre_audit aggregator + +# Generate mal-formed wire transfer subject +SUBJECT=YDVD2XBQT62553Z2TX8MM +# Account #2 = exchange, pick outgoing transfer +OLD_SUBJECT=`echo "SELECT subject FROM app_banktransaction WHERE debit_account_id=2;" | psql $DB -Aqt` +echo "UPDATE app_banktransaction SET subject='${SUBJECT}' WHERE debit_account_id=2;" | psql -Aqt $DB + +audit_only +post_audit + + +echo -n "Testing wire transfer subject malformed detection... " + +DIAGNOSTIC=`jq -r .wire_format_inconsistencies[0].diagnostic < test-wire-audit.json` +WANT="malformed subject \`${SUBJECT}'" +if test "x$DIAGNOSTIC" != "x$WANT" +then + exit_fail "Reported diagnostic: $DIAGNOSTIC, wanted $WANT" +fi +jq -e .wire_out_amount_inconsistencies[0] < test-wire-audit.json > /dev/null || exit_fail "Falsly claimed wire transfer not detected" + +DELTA=`jq -r .total_wire_out_delta_minus < test-wire-audit.json` +if test $DELTA == "TESTKUDOS:0" +then + exit_fail "Expected total wire delta minus wrong, got $DELTA" +fi +DELTA=`jq -r .total_wire_format_amount < test-wire-audit.json` +if test $DELTA == "TESTKUDOS:0" +then + exit_fail "Expected total format amount wrong, got $DELTA" +fi + +echo "PASS" + +# Undo +echo "UPDATE app_banktransaction SET subject='${OLD_SUBJECT}' WHERE debit_account_id=2;" | psql -Aqt $DB +} + + + + # ************************************************** # FIXME: Add more tests here! :-) # Specifically: -- cgit v1.2.3