write test for new wire fee APIs (#4931)

This commit is contained in:
Christian Grothoff 2017-03-04 23:01:25 +01:00
parent 0e15a99504
commit 43cfb0eace
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC

View File

@ -1,6 +1,6 @@
/* /*
This file is part of TALER 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 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 General Public License as published by the Free Software
@ -947,6 +947,7 @@ deposit_cb (void *cls,
return GNUNET_OK; return GNUNET_OK;
} }
/** /**
* Callback for #select_deposits_above_serial_id () * 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) * @param done flag set if the deposit was already executed (or not)
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/ */
int static int
audit_deposit_cb (void *cls, audit_deposit_cb (void *cls,
uint64_t rowid, uint64_t rowid,
const struct TALER_MerchantPublicKeyP *merchant_pub, 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 * @param amount_with_fee amount that was deposited including fee
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/ */
int static int
audit_refund_cb (void *cls, audit_refund_cb (void *cls,
uint64_t rowid, uint64_t rowid,
const struct TALER_CoinSpendPublicKeyP *coin_pub, const struct TALER_CoinSpendPublicKeyP *coin_pub,
@ -1025,7 +1026,7 @@ audit_refund_cb (void *cls,
* @param execution_date when did we receive the funds * @param execution_date when did we receive the funds
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/ */
int static int
audit_reserve_in_cb (void *cls, audit_reserve_in_cb (void *cls,
uint64_t rowid, uint64_t rowid,
const struct TALER_ReservePublicKeyP *reserve_pub, const struct TALER_ReservePublicKeyP *reserve_pub,
@ -1038,6 +1039,7 @@ audit_reserve_in_cb (void *cls,
return GNUNET_OK; return GNUNET_OK;
} }
/** /**
* Function called with details about withdraw operations. * 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 * @param amount_with_fee amount that was withdrawn
* @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop
*/ */
int static int
audit_reserve_out_cb (void *cls, audit_reserve_out_cb (void *cls,
uint64_t rowid, uint64_t rowid,
const struct GNUNET_HashCode *h_blind_ev, const struct GNUNET_HashCode *h_blind_ev,
@ -1067,6 +1069,7 @@ audit_reserve_out_cb (void *cls,
return GNUNET_OK; return GNUNET_OK;
} }
/** /**
* Test garbage collection. * Test garbage collection.
* *
@ -1115,6 +1118,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. * Main function that will be run by the scheduler.
* *
@ -1595,6 +1691,8 @@ run (void *cls)
&cb_wtid_never)); &cb_wtid_never));
FAILIF (GNUNET_OK != FAILIF (GNUNET_OK !=
test_gc (session)); test_gc (session));
FAILIF (GNUNET_OK !=
test_wire_fees (session));
result = 0; result = 0;