From 727eccbe644aede46ef5eafc11964992960457e0 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 23 Apr 2020 11:55:10 +0200 Subject: add invariant checks for #6214 --- src/exchangedb/exchangedb_transactions.c | 11 +++++++---- src/exchangedb/plugin_exchangedb_postgres.c | 7 +++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/exchangedb/exchangedb_transactions.c b/src/exchangedb/exchangedb_transactions.c index 7fe65d523..93e4104e6 100644 --- a/src/exchangedb/exchangedb_transactions.c +++ b/src/exchangedb/exchangedb_transactions.c @@ -41,12 +41,14 @@ TALER_EXCHANGEDB_calculate_transaction_list_totals ( struct TALER_Amount spent = *off; struct TALER_Amount refunded; struct TALER_Amount deposit_fee; - int have_refund; + bool have_refund; + bool have_deposit; GNUNET_assert (GNUNET_OK == TALER_amount_get_zero (spent.currency, &refunded)); - have_refund = GNUNET_NO; + have_refund = false; + have_deposit = false; for (struct TALER_EXCHANGEDB_TransactionList *pos = tl; NULL != pos; pos = pos->next) @@ -55,6 +57,7 @@ TALER_EXCHANGEDB_calculate_transaction_list_totals ( { case TALER_EXCHANGEDB_TT_DEPOSIT: /* spent += pos->amount_with_fee */ + have_deposit = true; if (0 > TALER_amount_add (&spent, &spent, @@ -94,7 +97,7 @@ TALER_EXCHANGEDB_calculate_transaction_list_totals ( GNUNET_break (0); return GNUNET_SYSERR; } - have_refund = GNUNET_YES; + have_refund = true; break; case TALER_EXCHANGEDB_TT_OLD_COIN_RECOUP: /* refunded += pos->value */ @@ -152,7 +155,7 @@ TALER_EXCHANGEDB_calculate_transaction_list_totals ( GNUNET_break (0); return GNUNET_SYSERR; } - + GNUNET_break (have_deposit); *ret = spent; return GNUNET_OK; } diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c index 4f57f32fe..e517d069b 100644 --- a/src/exchangedb/plugin_exchangedb_postgres.c +++ b/src/exchangedb/plugin_exchangedb_postgres.c @@ -4004,6 +4004,11 @@ struct CoinHistoryContext * Set to 'true' if the transaction failed. */ bool failed; + + /** + * Set to 'true' if we found a deposit (for invariant check). + */ + bool have_deposit; }; @@ -4029,6 +4034,7 @@ add_coin_deposit (void *cls, struct TALER_EXCHANGEDB_TransactionList *tl; uint64_t serial_id; + chc->have_deposit = true; deposit = GNUNET_new (struct TALER_EXCHANGEDB_DepositListEntry); { struct GNUNET_PQ_ResultSpec rs[] = { @@ -4506,6 +4512,7 @@ postgres_get_coin_transactions ( *tlp = chc.head; if (NULL == chc.head) return GNUNET_DB_STATUS_SUCCESS_NO_RESULTS; + GNUNET_break (chc.have_deposit); return GNUNET_DB_STATUS_SUCCESS_ONE_RESULT; } -- cgit v1.2.3