aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2017-03-04 23:01:25 +0100
committerChristian Grothoff <christian@grothoff.org>2017-03-04 23:01:25 +0100
commit43cfb0eacec9dfbc256b520972deaf4f8f68dc14 (patch)
tree96dea4cf3eab8fc5428a97707ce44bf8fd031fb6
parent0e15a995048f1653e92f762d983bf47b4fc6b39f (diff)
write test for new wire fee APIs (#4931)
-rw-r--r--src/exchangedb/test_exchangedb.c108
1 files changed, 103 insertions, 5 deletions
diff --git a/src/exchangedb/test_exchangedb.c b/src/exchangedb/test_exchangedb.c
index a29e04513..9b4cfdeae 100644
--- a/src/exchangedb/test_exchangedb.c
+++ b/src/exchangedb/test_exchangedb.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- Copyright (C) 2014, 2015, 2016 GNUnet e.V.
+ Copyright (C) 2014, 2015, 2016, 2017 GNUnet e.V.
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
@@ -947,6 +947,7 @@ deposit_cb (void *cls,
return GNUNET_OK;
}
+
/**
* Callback for #select_deposits_above_serial_id ()
*
@@ -965,7 +966,7 @@ deposit_cb (void *cls,
* @param done flag set if the deposit was already executed (or not)
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-int
+static int
audit_deposit_cb (void *cls,
uint64_t rowid,
const struct TALER_MerchantPublicKeyP *merchant_pub,
@@ -998,7 +999,7 @@ audit_deposit_cb (void *cls,
* @param amount_with_fee amount that was deposited including fee
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-int
+static int
audit_refund_cb (void *cls,
uint64_t rowid,
const struct TALER_CoinSpendPublicKeyP *coin_pub,
@@ -1025,7 +1026,7 @@ audit_refund_cb (void *cls,
* @param execution_date when did we receive the funds
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-int
+static int
audit_reserve_in_cb (void *cls,
uint64_t rowid,
const struct TALER_ReservePublicKeyP *reserve_pub,
@@ -1038,6 +1039,7 @@ audit_reserve_in_cb (void *cls,
return GNUNET_OK;
}
+
/**
* Function called with details about withdraw operations.
*
@@ -1052,7 +1054,7 @@ audit_reserve_in_cb (void *cls,
* @param amount_with_fee amount that was withdrawn
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/
-int
+static int
audit_reserve_out_cb (void *cls,
uint64_t rowid,
const struct GNUNET_HashCode *h_blind_ev,
@@ -1067,6 +1069,7 @@ audit_reserve_out_cb (void *cls,
return GNUNET_OK;
}
+
/**
* Test garbage collection.
*
@@ -1116,6 +1119,99 @@ test_gc (struct TALER_EXCHANGEDB_Session *session)
/**
+ * Test wire fee storage.
+ *
+ * @param session DB session to use
+ * @return #GNUNET_OK on success
+ */
+static int
+test_wire_fees (struct TALER_EXCHANGEDB_Session *session)
+{
+ struct GNUNET_TIME_Absolute start_date;
+ struct GNUNET_TIME_Absolute end_date;
+ struct TALER_Amount wire_fee;
+ struct TALER_MasterSignatureP master_sig;
+ struct GNUNET_TIME_Absolute sd;
+ struct GNUNET_TIME_Absolute ed;
+ struct TALER_Amount fee;
+ struct TALER_MasterSignatureP ms;
+
+ start_date = GNUNET_TIME_absolute_get ();
+ end_date = GNUNET_TIME_relative_to_absolute (GNUNET_TIME_UNIT_MINUTES);
+ GNUNET_assert (GNUNET_OK ==
+ TALER_string_to_amount (CURRENCY ":1.424242",
+ &wire_fee));
+ GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK,
+ &master_sig,
+ sizeof (master_sig));
+ if (GNUNET_OK !=
+ plugin->insert_wire_fee (plugin->cls,
+ session,
+ "wire-method",
+ start_date,
+ end_date,
+ &wire_fee,
+ &master_sig))
+ {
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
+ if (GNUNET_NO !=
+ plugin->insert_wire_fee (plugin->cls,
+ session,
+ "wire-method",
+ start_date,
+ end_date,
+ &wire_fee,
+ &master_sig))
+ {
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
+ /* This must fail as 'end_date' is NOT in the
+ half-open interval [start_date,end_date) */
+ if (GNUNET_OK ==
+ plugin->get_wire_fee (plugin->cls,
+ session,
+ "wire-method",
+ end_date,
+ &sd,
+ &ed,
+ &fee,
+ &ms))
+ {
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
+ if (GNUNET_OK !=
+ plugin->get_wire_fee (plugin->cls,
+ session,
+ "wire-method",
+ start_date,
+ &sd,
+ &ed,
+ &fee,
+ &ms))
+ {
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
+ if ( (sd.abs_value_us != start_date.abs_value_us) ||
+ (ed.abs_value_us != end_date.abs_value_us) ||
+ (0 != TALER_amount_cmp (&fee,
+ &wire_fee)) ||
+ (0 != memcmp (&ms,
+ &master_sig,
+ sizeof (ms))) )
+ {
+ GNUNET_break (0);
+ return GNUNET_SYSERR;
+ }
+ return GNUNET_OK;
+}
+
+
+/**
* Main function that will be run by the scheduler.
*
* @param cls closure with config
@@ -1595,6 +1691,8 @@ run (void *cls)
&cb_wtid_never));
FAILIF (GNUNET_OK !=
test_gc (session));
+ FAILIF (GNUNET_OK !=
+ test_wire_fees (session));
result = 0;