add test for wire transfer subject malformed

This commit is contained in:
Christian Grothoff 2019-09-30 22:11:24 +02:00
parent 6b2a84dfe1
commit 11b643dd83
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
3 changed files with 70 additions and 25 deletions

View File

@ -687,6 +687,7 @@ translate into a financial loss (yet).
\hline \hline \hline \hline
{\bf Reserve} & {\bf Auditor} & {\bf Exchange} {\bf Reserve} & {\bf Auditor} & {\bf Exchange}
\endfoot \endfoot
\hline
\hline \hline
{\bf Total deltas} & {\bf Total deltas} &
{{ data.total_balance_summary_delta_plus}} & {{ data.total_balance_summary_delta_plus}} &
@ -767,21 +768,23 @@ relate to outgoing wire transfers being malformed.
This happens if the exchange somehow creates wire transfers This happens if the exchange somehow creates wire transfers
with duplicate or malformed wire transfer subjects. with duplicate or malformed wire transfer subjects.
% Table generation tested by testcase #19 in test-auditor.sh
{% if wire.wire_format_inconsistencies|length() == 0 %} {% if wire.wire_format_inconsistencies|length() == 0 %}
{\bf No wire format inconsistencies found.} {\bf No wire format inconsistencies found.}
{% else %} {% else %}
\begin{longtable}{p{4.5cm}|r} \begin{longtable}{p{6.5cm}|r}
\multicolumn{3}{c}{ {\bf Row hash} } \\ \multicolumn{2}{c}{ {\bf Diagnostic} } \\
{\bf Diagnostic} & {\bf Amount} \\ {\bf Row (base32)} & {\bf Amount} \\
\hline \hline \hline \hline
\endfirsthead \endfirsthead
\multicolumn{3}{c}{ {\bf Row hash} } \\ \multicolumn{2}{c}{ {\bf Diagnostic} } \\
{\bf Diagnostic} & {\bf Amount} \\ {\bf Row (base32)} & {\bf Amount} \\
\hline \hline \hline \hline
\endhead \endhead
\hline \hline
\multicolumn{3}{c}{ {\bf Row hash} } \\ \multicolumn{2}{c}{ {\bf Row (base32)} } \\
{\bf Diagnostic} & {\bf Amount} \\ {\bf Row (base32)} & {\bf Amount} \\
\endfoot \endfoot
\hline \hline
\hline \hline
@ -791,10 +794,9 @@ with duplicate or malformed wire transfer subjects.
\label{table:outgoing:wtid} \label{table:outgoing:wtid}
\endlastfoot \endlastfoot
{% for item in wire.wire_format_inconsistencies %} {% for item in wire.wire_format_inconsistencies %}
\multicolumn{3}{l}{ \tt \small \truncate{\textwidth}{ {{ item.wire_offset_hash }} } } \\ \multicolumn{2}{l}{ \small \truncate{0.95\textwidth}{ {{ item.diagnostic }} } } \\
\nopagebreak \nopagebreak
{{ item.diagnostic }} & { \tt \small \truncate{0.95\textwidth}{ {{ item.wire_offset }} } } & {{ item.amount }} \\ \hline
{{ item.amount }} \\
{% endfor %} {% endfor %}
\end{longtable} \end{longtable}
{% endif %} {% endif %}

View File

@ -417,7 +417,7 @@ do_shutdown (void *cls)
report_wire_out_inconsistencies, report_wire_out_inconsistencies,
"total_wire_out_delta_plus", "total_wire_out_delta_plus",
TALER_JSON_from_amount (&total_bad_amount_out_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", "total_wire_out_delta_minus",
TALER_JSON_from_amount (&total_bad_amount_out_minus), TALER_JSON_from_amount (&total_bad_amount_out_minus),
/* Tested in test-auditor.sh #2 */ /* Tested in test-auditor.sh #2 */
@ -442,8 +442,10 @@ do_shutdown (void *cls)
"row_minor_inconsistencies", "row_minor_inconsistencies",
report_row_minor_inconsistencies, report_row_minor_inconsistencies,
/* block */ /* block */
/* Tested in test-auditor.sh #19 */
"total_wire_format_amount", "total_wire_format_amount",
TALER_JSON_from_amount (&total_wire_format_amount), TALER_JSON_from_amount (&total_wire_format_amount),
/* Tested in test-auditor.sh #19 */
"wire_format_inconsistencies", "wire_format_inconsistencies",
report_wire_format_inconsistencies, report_wire_format_inconsistencies,
"total_amount_lag", "total_amount_lag",
@ -910,7 +912,7 @@ wire_out_cb (void *cls,
} }
} }
cleanup: cleanup:
GNUNET_assert (GNUNET_OK == GNUNET_assert (GNUNET_OK ==
free_roi (NULL, free_roi (NULL,
&key, &key,
@ -1032,7 +1034,6 @@ history_debit_cb (void *cls,
{ {
struct WireAccount *wa = cls; struct WireAccount *wa = cls;
struct ReserveOutInfo *roi; struct ReserveOutInfo *roi;
struct GNUNET_HashCode rowh;
if (TALER_BANK_DIRECTION_NONE == dir) if (TALER_BANK_DIRECTION_NONE == dir)
{ {
@ -1056,11 +1057,8 @@ history_debit_cb (void *cls,
{ {
char *diagnostic; char *diagnostic;
GNUNET_CRYPTO_hash (row_off,
row_off_size,
&rowh);
GNUNET_asprintf (&diagnostic, GNUNET_asprintf (&diagnostic,
"malformed subject `%8s...'", "malformed subject `%s'",
details->wtid_s); details->wtid_s);
GNUNET_break (GNUNET_OK == GNUNET_break (GNUNET_OK ==
TALER_amount_add (&total_wire_format_amount, TALER_amount_add (&total_wire_format_amount,
@ -1069,7 +1067,8 @@ history_debit_cb (void *cls,
report (report_wire_format_inconsistencies, report (report_wire_format_inconsistencies,
json_pack ("{s:o, s:o, s:s}", json_pack ("{s:o, s:o, s:s}",
"amount", TALER_JSON_from_amount (&details->amount), "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)); "diagnostic", diagnostic));
GNUNET_free (diagnostic); GNUNET_free (diagnostic);
return GNUNET_OK; return GNUNET_OK;
@ -1109,11 +1108,8 @@ history_debit_cb (void *cls,
{ {
char *diagnostic; char *diagnostic;
GNUNET_CRYPTO_hash (row_off,
row_off_size,
&rowh);
GNUNET_asprintf (&diagnostic, GNUNET_asprintf (&diagnostic,
"duplicate subject hash `%8s...'", "duplicate subject hash `%s'",
TALER_B2S (&roi->subject_hash)); TALER_B2S (&roi->subject_hash));
GNUNET_break (GNUNET_OK == GNUNET_break (GNUNET_OK ==
TALER_amount_add (&total_wire_format_amount, TALER_amount_add (&total_wire_format_amount,
@ -1122,7 +1118,8 @@ history_debit_cb (void *cls,
report (report_wire_format_inconsistencies, report (report_wire_format_inconsistencies,
json_pack ("{s:o, s:o, s:s}", json_pack ("{s:o, s:o, s:s}",
"amount", TALER_JSON_from_amount (&details->amount), "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)); "diagnostic", diagnostic));
GNUNET_free (diagnostic); GNUNET_free (diagnostic);
return GNUNET_OK; return GNUNET_OK;
@ -1542,7 +1539,7 @@ history_credit_cb (void *cls,
row_off_size), row_off_size),
"diagnostic", "execution date missmatch")); "diagnostic", "execution date missmatch"));
} }
cleanup: cleanup:
GNUNET_assert (GNUNET_OK == GNUNET_assert (GNUNET_OK ==
free_rii (NULL, free_rii (NULL,
&key, &key,

View File

@ -1023,7 +1023,6 @@ fi
echo PASS echo PASS
# cannot easily undo broad DELETE operation, hence full reload # cannot easily undo broad DELETE operation, hence full reload
echo -n "Reloading database ..." echo -n "Reloading database ..."
full_reload 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! :-) # FIXME: Add more tests here! :-)
# Specifically: # Specifically: