diff options
author | Christian Grothoff <christian@grothoff.org> | 2017-11-20 14:20:09 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2017-11-20 14:20:09 +0100 |
commit | 11269125fa994d412c2afa38314ea21b43222266 (patch) | |
tree | 81f7b9da414a770a633ca8ee130362e7e4b97ae9 /src/auditor/taler-auditor.c | |
parent | 8f48db8fdf84aad65d541723c115eb1bf62083a4 (diff) |
implement #5177 (not yet tested)
Diffstat (limited to 'src/auditor/taler-auditor.c')
-rw-r--r-- | src/auditor/taler-auditor.c | 44 |
1 files changed, 33 insertions, 11 deletions
diff --git a/src/auditor/taler-auditor.c b/src/auditor/taler-auditor.c index 7016dc701..cd1ee0d27 100644 --- a/src/auditor/taler-auditor.c +++ b/src/auditor/taler-auditor.c @@ -3,14 +3,14 @@ Copyright (C) 2016, 2017 Inria TALER is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software + terms of the GNU Affero Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. TALER is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. + A PARTICULAR PURPOSE. See the GNU Affero Public License for more details. - You should have received a copy of the GNU General Public License along with + You should have received a copy of the GNU Affero Public License along with TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> */ /** @@ -211,6 +211,11 @@ static json_t *report_aggregation_fee_balances; static json_t *report_amount_arithmetic_inconsistencies; /** + * Array of reports about wire fees being ambiguous in terms of validity periods. + */ +static json_t *report_fee_time_inconsistencies; + +/** * Profits the exchange made by bad amount calculations. */ static struct TALER_Amount total_arithmetic_delta_plus; @@ -2303,11 +2308,24 @@ get_wire_fee (struct AggregationContext *ac, pos->prev, wfi); /* Check non-overlaping fee invariant */ - /* TODO (#5177): report problems more nicely? */ - if (NULL != wfi->prev) - GNUNET_break (wfi->prev->end_date.abs_value_us <= wfi->start_date.abs_value_us); - if (NULL != wfi->next) - GNUNET_break (wfi->next->start_date.abs_value_us >= wfi->end_date.abs_value_us); + if ( (NULL != wfi->prev) && + (wfi->prev->end_date.abs_value_us > wfi->start_date.abs_value_us) ) + { + report (report_fee_time_inconsistencies, + json_pack ("{s:s, s:s, s:s}", + "type", type, + "diagnostic", "start date before previous end date", + "time", GNUNET_STRINGS_absolute_time_to_string (wfi->start_date))); + } + if ( (NULL != wfi->next) && + (wfi->next->start_date.abs_value_us >= wfi->end_date.abs_value_us) ) + { + report (report_fee_time_inconsistencies, + json_pack ("{s:s, s:s, s:s}", + "type", type, + "diagnostic", "end date date after next start date", + "time", GNUNET_STRINGS_absolute_time_to_string (wfi->end_date))); + } return &wfi->wire_fee; } @@ -4085,6 +4103,8 @@ run (void *cls, (report_amount_arithmetic_inconsistencies = json_array ())); GNUNET_assert (NULL != (report_bad_sig_losses = json_array ())); + GNUNET_assert (NULL != + (report_fee_time_inconsistencies = json_array ())); setup_sessions_and_run (); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Audit complete\n"); @@ -4108,7 +4128,8 @@ run (void *cls, " s:o, s:o, s:o, s:o, s:o," " s:o, s:o, s:o, s:o, s:o," " s:o, s:o, s:o, s:o, s:o," - " s:o, s:o, s:o, s:o, s:o}", + " s:o, s:o, s:o, s:o, s:o," + " s:o }", /* blocks of 5 for easier counting/matching to format string */ /* block */ "reserve_balance_insufficient_inconsistencies", @@ -4175,9 +4196,10 @@ run (void *cls, "total_arithmetic_delta_minus", TALER_JSON_from_amount (&total_arithmetic_delta_minus), "total_aggregation_fee_income", - TALER_JSON_from_amount (&total_aggregation_fee_income) + TALER_JSON_from_amount (&total_aggregation_fee_income), /* block */ - ); + "wire_fee_time_inconsistencies", + report_fee_time_inconsistencies); GNUNET_break (NULL != report); json_dumpf (report, stdout, |