add auditor test #24: wire out amount inconsistency detection
This commit is contained in:
parent
d6ca052d27
commit
bfb6306d18
@ -454,7 +454,7 @@ violations do not imply that the wire transfer was actually made (as
|
|||||||
that is a separate check). Note that not making the wire transfer
|
that is a separate check). Note that not making the wire transfer
|
||||||
would be reported separately in Section~\ref{sec:wire_check_out}.
|
would be reported separately in Section~\ref{sec:wire_check_out}.
|
||||||
|
|
||||||
% Table generation tested by testcase #XX in test-auditor.sh
|
% Table generation tested by testcase #24 in test-auditor.sh
|
||||||
|
|
||||||
{% if data.wire_out_inconsistencies|length() == 0 %}
|
{% if data.wire_out_inconsistencies|length() == 0 %}
|
||||||
{\bf All aggregations matched up.}
|
{\bf All aggregations matched up.}
|
||||||
|
@ -9,7 +9,7 @@ set -eu
|
|||||||
|
|
||||||
# Set of numbers for all the testcases.
|
# Set of numbers for all the testcases.
|
||||||
# When adding new tests, increase the last number:
|
# When adding new tests, increase the last number:
|
||||||
ALL_TESTS=`seq 0 22`
|
ALL_TESTS=`seq 0 24`
|
||||||
|
|
||||||
# $TESTS determines which tests we should run.
|
# $TESTS determines which tests we should run.
|
||||||
# This construction is used to make it easy to
|
# This construction is used to make it easy to
|
||||||
@ -1295,8 +1295,6 @@ fi
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Test use of withdraw-expired denomination key
|
# Test use of withdraw-expired denomination key
|
||||||
function test_23() {
|
function test_23() {
|
||||||
echo "===========23: denomination key expired ================="
|
echo "===========23: denomination key expired ================="
|
||||||
@ -1325,10 +1323,92 @@ echo "UPDATE auditor_denominations SET expire_withdraw=${OLD_WEXP} WHERE denom_p
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Test calculation of wire-out amounts
|
||||||
|
function test_24() {
|
||||||
|
echo "===========24: wire out calculations ================="
|
||||||
|
|
||||||
|
# Check wire transfer lag reported (no aggregator!)
|
||||||
|
# NOTE: This test is EXPECTED to fail for ~1h after
|
||||||
|
# re-generating the test database as we do not
|
||||||
|
# report lag of less than 1h (see GRACE_PERIOD in
|
||||||
|
# taler-wire-auditor.c)
|
||||||
|
if [ $DATABASE_AGE -gt 3600 ]
|
||||||
|
then
|
||||||
|
|
||||||
|
# Need to first run the aggregator so the transfer is marked as done exists
|
||||||
|
pre_audit aggregator
|
||||||
|
|
||||||
|
OLD_AMOUNT=`echo "SELECT amount_frac FROM wire_out WHERE wireout_uuid=1;" | psql $DB -Aqt`
|
||||||
|
NEW_AMOUNT=`expr $OLD_AMOUNT - 1000000`
|
||||||
|
echo "UPDATE wire_out SET amount_frac=${NEW_AMOUNT} WHERE wireout_uuid=1;" | psql -Aqt $DB
|
||||||
|
|
||||||
|
audit_only
|
||||||
|
post_audit
|
||||||
|
|
||||||
|
echo -n "Testing inconsistency detection... "
|
||||||
|
|
||||||
|
jq -e .wire_out_inconsistencies[0] < test-audit.json > /dev/null || exit_fail "Wire out inconsistency not detected"
|
||||||
|
|
||||||
|
ROW=`jq .wire_out_inconsistencies[0].rowid < test-audit.json`
|
||||||
|
if test $ROW != 1
|
||||||
|
then
|
||||||
|
exit_fail "Row wrong"
|
||||||
|
fi
|
||||||
|
AMOUNT=`jq -r .total_wire_out_delta_plus < test-audit.json`
|
||||||
|
if test "x$AMOUNT" != "xTESTKUDOS:0"
|
||||||
|
then
|
||||||
|
exit_fail "Reported amount wrong: $AMOUNT"
|
||||||
|
fi
|
||||||
|
AMOUNT=`jq -r .total_wire_out_delta_minus < test-audit.json`
|
||||||
|
if test "x$AMOUNT" != "xTESTKUDOS:0.01"
|
||||||
|
then
|
||||||
|
exit_fail "Reported total amount wrong: $AMOUNT"
|
||||||
|
fi
|
||||||
|
echo PASS
|
||||||
|
|
||||||
|
# Second pass, this time accounting is wrong in the OTHER direction
|
||||||
|
NEW_AMOUNT=`expr $OLD_AMOUNT + 1000000`
|
||||||
|
echo "UPDATE wire_out SET amount_frac=${NEW_AMOUNT} WHERE wireout_uuid=1;" | psql -Aqt $DB
|
||||||
|
|
||||||
|
audit_only
|
||||||
|
post_audit
|
||||||
|
|
||||||
|
echo -n "Testing inconsistency detection... "
|
||||||
|
|
||||||
|
jq -e .wire_out_inconsistencies[0] < test-audit.json > /dev/null || exit_fail "Wire out inconsistency not detected"
|
||||||
|
|
||||||
|
ROW=`jq .wire_out_inconsistencies[0].rowid < test-audit.json`
|
||||||
|
if test $ROW != 1
|
||||||
|
then
|
||||||
|
exit_fail "Row wrong"
|
||||||
|
fi
|
||||||
|
AMOUNT=`jq -r .total_wire_out_delta_minus < test-audit.json`
|
||||||
|
if test "x$AMOUNT" != "xTESTKUDOS:0"
|
||||||
|
then
|
||||||
|
exit_fail "Reported amount wrong: $AMOUNT"
|
||||||
|
fi
|
||||||
|
AMOUNT=`jq -r .total_wire_out_delta_plus < test-audit.json`
|
||||||
|
if test "x$AMOUNT" != "xTESTKUDOS:0.01"
|
||||||
|
then
|
||||||
|
exit_fail "Reported total amount wrong: $AMOUNT"
|
||||||
|
fi
|
||||||
|
echo PASS
|
||||||
|
|
||||||
|
|
||||||
|
# cannot easily undo aggregator, hence full reload
|
||||||
|
echo -n "Reloading database ..."
|
||||||
|
full_reload
|
||||||
|
echo "DONE"
|
||||||
|
else
|
||||||
|
echo "Test skipped (database too new)"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
# **************************************************
|
# **************************************************
|
||||||
# FIXME: Add more tests here! :-)
|
# FIXME: Add more tests here! :-)
|
||||||
# Specifically:
|
# Specifically:
|
||||||
# - reserve closure (or lack thereof)
|
|
||||||
# - revocation (payback, accepting
|
# - revocation (payback, accepting
|
||||||
# of coins despite denomination revocation)
|
# of coins despite denomination revocation)
|
||||||
# - refunds
|
# - refunds
|
||||||
|
Loading…
Reference in New Issue
Block a user