summaryrefslogtreecommitdiff
path: root/src/mintdb/test_mintdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mintdb/test_mintdb.c')
-rw-r--r--src/mintdb/test_mintdb.c907
1 files changed, 0 insertions, 907 deletions
diff --git a/src/mintdb/test_mintdb.c b/src/mintdb/test_mintdb.c
deleted file mode 100644
index 0938f8fab..000000000
--- a/src/mintdb/test_mintdb.c
+++ /dev/null
@@ -1,907 +0,0 @@
-/*
- This file is part of TALER
- Copyright (C) 2014, 2015, 2016 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
- 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.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/licenses/>
-*/
-/**
- * @file mintdb/test_mintdb.c
- * @brief test cases for DB interaction functions
- * @author Sree Harsha Totakura <sreeharsha@totakura.in>
- */
-#include "platform.h"
-#include "taler_mintdb_lib.h"
-#include "taler_mintdb_plugin.h"
-
-static int result;
-
-#define FAILIF(cond) \
- do { \
- if (!(cond)){ break;} \
- GNUNET_break (0); \
- goto drop; \
- } while (0)
-
-
-#define RND_BLK(ptr) \
- GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, ptr, sizeof (*ptr))
-
-#define ZR_BLK(ptr) \
- memset (ptr, 0, sizeof (*ptr))
-
-
-#define CURRENCY "EUR"
-
-static struct TALER_MINTDB_Plugin *plugin;
-
-/**
- * Checks if the given reserve has the given amount of balance and expiry
- *
- * @param session the database connection
- * @param pub the public key of the reserve
- * @param value balance value
- * @param fraction balance fraction
- * @param currency currency of the reserve
- * @return #GNUNET_OK if the given reserve has the same balance and expiration
- * as the given parameters; #GNUNET_SYSERR if not
- */
-static int
-check_reserve (struct TALER_MINTDB_Session *session,
- const struct TALER_ReservePublicKeyP *pub,
- uint64_t value,
- uint32_t fraction,
- const char *currency)
-{
- struct TALER_MINTDB_Reserve reserve;
-
- reserve.pub = *pub;
-
- FAILIF (GNUNET_OK !=
- plugin->reserve_get (plugin->cls,
- session,
- &reserve));
- FAILIF (value != reserve.balance.value);
- FAILIF (fraction != reserve.balance.fraction);
- FAILIF (0 != strcmp (currency, reserve.balance.currency));
-
- return GNUNET_OK;
- drop:
- return GNUNET_SYSERR;
-}
-
-
-struct DenomKeyPair
-{
- struct TALER_DenominationPrivateKey priv;
- struct TALER_DenominationPublicKey pub;
-};
-
-
-/**
- * Destroy a denomination key pair. The key is not necessarily removed from the DB.
- *
- * @param dkp the keypair to destroy
- */
-static void
-destroy_denom_key_pair (struct DenomKeyPair *dkp)
-{
- GNUNET_CRYPTO_rsa_public_key_free (dkp->pub.rsa_public_key);
- GNUNET_CRYPTO_rsa_private_key_free (dkp->priv.rsa_private_key);
- GNUNET_free (dkp);
-}
-
-
-/**
- * Create a denominaiton key pair by registering the denomination in the DB.
- *
- * @param size the size of the denomination key
- * @param session the DB session
- * @return the denominaiton key pair; NULL upon error
- */
-static struct DenomKeyPair *
-create_denom_key_pair (unsigned int size,
- struct TALER_MINTDB_Session *session,
- const struct TALER_Amount *value,
- const struct TALER_Amount *fee_withdraw,
- const struct TALER_Amount *fee_deposit,
- const struct TALER_Amount *fee_refresh)
-{
- struct DenomKeyPair *dkp;
- struct TALER_MINTDB_DenominationKeyIssueInformation dki;
-
- dkp = GNUNET_new (struct DenomKeyPair);
- dkp->priv.rsa_private_key = GNUNET_CRYPTO_rsa_private_key_create (size);
- GNUNET_assert (NULL != dkp->priv.rsa_private_key);
- dkp->pub.rsa_public_key
- = GNUNET_CRYPTO_rsa_private_key_get_public (dkp->priv.rsa_private_key);
-
- /* Using memset() as fields like master key and signature
- are not properly initialized for this test. */
- memset (&dki,
- 0,
- sizeof (struct TALER_MINTDB_DenominationKeyIssueInformation));
- dki.denom_pub = dkp->pub;
- dki.issue.properties.start = GNUNET_TIME_absolute_hton (GNUNET_TIME_absolute_get ());
- dki.issue.properties.expire_withdraw = GNUNET_TIME_absolute_hton
- (GNUNET_TIME_absolute_add (GNUNET_TIME_absolute_get (),
- GNUNET_TIME_UNIT_HOURS));
- dki.issue.properties.expire_spend = GNUNET_TIME_absolute_hton
- (GNUNET_TIME_absolute_add
- (GNUNET_TIME_absolute_get (),
- GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_HOURS, 2)));
- dki.issue.properties.expire_legal = GNUNET_TIME_absolute_hton
- (GNUNET_TIME_absolute_add
- (GNUNET_TIME_absolute_get (),
- GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_HOURS, 3)));
- TALER_amount_hton (&dki.issue.properties.value, value);
- TALER_amount_hton (&dki.issue.properties.fee_withdraw, fee_withdraw);
- TALER_amount_hton (&dki.issue.properties.fee_deposit, fee_deposit);
- TALER_amount_hton (&dki.issue.properties.fee_refresh, fee_refresh);
- GNUNET_CRYPTO_rsa_public_key_hash (dkp->pub.rsa_public_key,
- &dki.issue.properties.denom_hash);
- if (GNUNET_OK !=
- plugin->insert_denomination_info (plugin->cls,
- session,
- &dki.denom_pub,
- &dki.issue))
- {
- GNUNET_break(0);
- destroy_denom_key_pair (dkp);
- return NULL;
- }
- return dkp;
-}
-
-static struct TALER_Amount value;
-static struct TALER_Amount fee_withdraw;
-static struct TALER_Amount fee_deposit;
-static struct TALER_Amount fee_refresh;
-static struct TALER_Amount amount_with_fee;
-
-static void
-free_refresh_commit_coins_array(struct TALER_MINTDB_RefreshCommitCoin
- *commit_coins,
- unsigned int size)
-{
- unsigned int cnt;
- struct TALER_MINTDB_RefreshCommitCoin *ccoin;
- struct TALER_RefreshLinkEncrypted *rlink;
-
- for (cnt = 0; cnt < size; cnt++)
- {
- ccoin = &commit_coins[cnt];
- GNUNET_free_non_null (ccoin->coin_ev);
- rlink = (struct TALER_RefreshLinkEncrypted *) ccoin->refresh_link;
- GNUNET_free_non_null (rlink);
- }
- GNUNET_free (commit_coins);
-}
-
-#define MELT_NEW_COINS 5
-
-static int
-test_refresh_commit_coins (struct TALER_MINTDB_Session *session,
- struct TALER_MINTDB_RefreshSession *refresh_session,
- const struct GNUNET_HashCode *session_hash)
-{
- struct TALER_MINTDB_RefreshCommitCoin *commit_coins;
- struct TALER_MINTDB_RefreshCommitCoin *ret_commit_coins;
- struct TALER_MINTDB_RefreshCommitCoin *a_ccoin;
- struct TALER_RefreshLinkEncrypted *a_rlink;
- struct TALER_MINTDB_RefreshCommitCoin *b_ccoin;
- struct TALER_RefreshLinkEncrypted *b_rlink;
- size_t size;
- unsigned int cnt;
- uint16_t cnc_index;
- int ret;
-
- #define COIN_ENC_MAX_SIZE 512
- ret = GNUNET_SYSERR;
- ret_commit_coins = NULL;
- commit_coins = GNUNET_new_array (MELT_NEW_COINS,
- struct TALER_MINTDB_RefreshCommitCoin);
- cnc_index = (uint16_t) GNUNET_CRYPTO_random_u32
- (GNUNET_CRYPTO_QUALITY_WEAK, GNUNET_MIN (MELT_NEW_COINS, UINT16_MAX));
- for (cnt=0; cnt < MELT_NEW_COINS; cnt++)
- {
- struct TALER_MINTDB_RefreshCommitCoin *ccoin;
- struct TALER_RefreshLinkEncrypted *rlink;
- ccoin = &commit_coins[cnt];
- size = GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK,
- COIN_ENC_MAX_SIZE);
- rlink = GNUNET_malloc (sizeof (struct TALER_RefreshLinkEncrypted) + size);
- ccoin->refresh_link = rlink;
- ccoin->coin_ev_size = GNUNET_CRYPTO_random_u64
- (GNUNET_CRYPTO_QUALITY_WEAK, COIN_ENC_MAX_SIZE);
- ccoin->coin_ev = GNUNET_malloc (ccoin->coin_ev_size);
- GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK,
- ccoin->coin_ev,
- ccoin->coin_ev_size);
- rlink->blinding_key_enc_size = size;
- RND_BLK (&rlink->coin_priv_enc);
- rlink->blinding_key_enc = (const char *) &rlink[1];
- GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK,
- (void *)rlink->blinding_key_enc,
- rlink->blinding_key_enc_size);
- }
- FAILIF (GNUNET_OK !=
- plugin->insert_refresh_commit_coins (plugin->cls,
- session,
- session_hash,
- cnc_index,
- MELT_NEW_COINS,
- commit_coins));
- ret_commit_coins = GNUNET_new_array (MELT_NEW_COINS,
- struct TALER_MINTDB_RefreshCommitCoin);
- FAILIF (GNUNET_OK !=
- plugin->get_refresh_commit_coins (plugin->cls,
- session,
- session_hash,
- cnc_index,
- MELT_NEW_COINS,
- ret_commit_coins));
- /* compare the refresh commit coin arrays */
- for (cnt = 0; cnt < MELT_NEW_COINS; cnt++)
- {
- a_ccoin = &commit_coins[cnt];
- b_ccoin = &ret_commit_coins[cnt];
- FAILIF (a_ccoin->coin_ev_size != b_ccoin->coin_ev_size);
- FAILIF (0 != memcmp (a_ccoin->coin_ev,
- a_ccoin->coin_ev,
- a_ccoin->coin_ev_size));
- a_rlink = a_ccoin->refresh_link;
- b_rlink = b_ccoin->refresh_link;
- FAILIF (a_rlink->blinding_key_enc_size != b_rlink->blinding_key_enc_size);
- FAILIF (0 != memcmp (a_rlink->blinding_key_enc,
- b_rlink->blinding_key_enc,
- a_rlink->blinding_key_enc_size));
- FAILIF (0 != memcmp (a_rlink->coin_priv_enc,
- b_rlink->coin_priv_enc,
- sizeof (a_rlink->coin_priv_enc)));
- }
- ret = GNUNET_OK;
-
- drop:
- if (NULL != ret_commit_coins)
- free_refresh_commit_coins_array (ret_commit_coins, MELT_NEW_COINS);
- if (NULL != commit_coins)
- free_refresh_commit_coins_array (commit_coins, MELT_NEW_COINS);
- return ret;
-}
-
-/**
- * Function to test melting of coins as part of a refresh session
- *
- * @param session the database session
- * @param refresh_session the refresh session
- * @return #GNUNET_OK if everything went well; #GNUNET_SYSERR if not
- */
-static int
-test_melting (struct TALER_MINTDB_Session *session)
-{
-#define MELT_OLD_COINS 10
- struct TALER_MINTDB_RefreshSession refresh_session;
- struct TALER_MINTDB_RefreshSession ret_refresh_session;
- struct GNUNET_HashCode session_hash;
- struct DenomKeyPair *dkp;
- struct DenomKeyPair **new_dkp;
- /* struct TALER_CoinPublicInfo *coins; */
- struct TALER_MINTDB_RefreshMelt *melts;
- struct TALER_DenominationPublicKey *new_denom_pubs;
- struct TALER_DenominationPublicKey *ret_denom_pubs;
- unsigned int cnt;
- int ret;
-
- ret = GNUNET_SYSERR;
- RND_BLK (&refresh_session);
- RND_BLK (&session_hash);
- melts = NULL;
- dkp = NULL;
- new_dkp = NULL;
- new_denom_pubs = NULL;
- ret_denom_pubs = NULL;
- /* create and test a refresh session */
- refresh_session.num_oldcoins = MELT_OLD_COINS;
- refresh_session.num_newcoins = 1;
- refresh_session.noreveal_index = 1;
- FAILIF (GNUNET_OK != plugin->create_refresh_session (plugin->cls,
- session,
- &session_hash,
- &refresh_session));
- FAILIF (GNUNET_OK != plugin->get_refresh_session (plugin->cls,
- session,
- &session_hash,
- &ret_refresh_session));
- FAILIF (0 != memcmp (&ret_refresh_session,
- &refresh_session,
- sizeof (refresh_session)));
-
- /* create a denomination (value: 1; fraction: 100) */
- dkp = create_denom_key_pair (512, session,
- &value,
- &fee_withdraw,
- &fee_deposit,
- &fee_refresh);
- /* create MELT_OLD_COINS number of refresh melts */
- melts = GNUNET_new_array (MELT_OLD_COINS, struct TALER_MINTDB_RefreshMelt);
- for (cnt=0; cnt < MELT_OLD_COINS; cnt++)
- {
- RND_BLK (&melts[cnt].coin.coin_pub);
- melts[cnt].coin.denom_sig.rsa_signature =
- GNUNET_CRYPTO_rsa_sign (dkp->priv.rsa_private_key,
- &melts[cnt].coin.coin_pub,
- sizeof (melts[cnt].coin.coin_pub));
- melts[cnt].coin.denom_pub = dkp->pub;
- RND_BLK (&melts[cnt].coin_sig);
- melts[cnt].session_hash = session_hash;
- melts[cnt].amount_with_fee = amount_with_fee;
- melts[cnt].melt_fee = fee_refresh;
- FAILIF (GNUNET_OK != plugin->insert_refresh_melt (plugin->cls,
- session,
- cnt,
- &melts[cnt]));
- }
- for (cnt = 0; cnt < MELT_OLD_COINS; cnt++)
- {
- struct TALER_MINTDB_RefreshMelt ret_melt;
- FAILIF (GNUNET_OK != plugin->get_refresh_melt (plugin->cls,
- session,
- &session_hash,
- cnt,
- &ret_melt));
- FAILIF (0 != GNUNET_CRYPTO_rsa_signature_cmp
- (ret_melt.coin.denom_sig.rsa_signature,
- melts[cnt].coin.denom_sig.rsa_signature));
- FAILIF (0 != memcmp (&ret_melt.coin.coin_pub,
- &melts[cnt].coin.coin_pub,
- sizeof (ret_melt.coin.coin_pub)));
- FAILIF (0 != GNUNET_CRYPTO_rsa_public_key_cmp
- (ret_melt.coin.denom_pub.rsa_public_key,
- melts[cnt].coin.denom_pub.rsa_public_key));
- FAILIF (0 != memcmp (&ret_melt.coin_sig,
- &melts[cnt].coin_sig,
- sizeof (ret_melt.coin_sig)));
- FAILIF (0 != memcmp (&ret_melt.session_hash,
- &melts[cnt].session_hash,
- sizeof (ret_melt.session_hash)));
- FAILIF (0 != TALER_amount_cmp (&ret_melt.amount_with_fee,
- &melts[cnt].amount_with_fee));
- FAILIF (0 != TALER_amount_cmp (&ret_melt.melt_fee,
- &melts[cnt].melt_fee));
- GNUNET_CRYPTO_rsa_signature_free (ret_melt.coin.denom_sig.rsa_signature);
- GNUNET_CRYPTO_rsa_public_key_free (ret_melt.coin.denom_pub.rsa_public_key);
- }
- new_dkp = GNUNET_new_array (MELT_NEW_COINS, struct DenomKeyPair *);
- new_denom_pubs = GNUNET_new_array (MELT_NEW_COINS,
- struct TALER_DenominationPublicKey);
- for (cnt=0; cnt < MELT_NEW_COINS; cnt++)
- {
- new_dkp[cnt] = create_denom_key_pair (128, session,
- &value,
- &fee_withdraw,
- &fee_deposit,
- &fee_refresh);
- new_denom_pubs[cnt]=new_dkp[cnt]->pub;
- }
- FAILIF (GNUNET_OK != plugin->insert_refresh_order (plugin->cls,
- session,
- &session_hash,
- MELT_NEW_COINS,
- new_denom_pubs));
- ret_denom_pubs = GNUNET_new_array (MELT_NEW_COINS,
- struct TALER_DenominationPublicKey);
- FAILIF (GNUNET_OK != plugin->get_refresh_order (plugin->cls,
- session,
- &session_hash,
- MELT_NEW_COINS,
- ret_denom_pubs));
- for (cnt=0; cnt < MELT_NEW_COINS; cnt++)
- {
- FAILIF (0 != GNUNET_CRYPTO_rsa_public_key_cmp
- (ret_denom_pubs[cnt].rsa_public_key,
- new_denom_pubs[cnt].rsa_public_key));
- }
- FAILIF (GNUNET_OK !=
- test_refresh_commit_coins (session,
- &refresh_session,
- &session_hash));
-
- ret = GNUNET_OK;
-
- drop:
- if (NULL != dkp)
- destroy_denom_key_pair (dkp);
- if (NULL != melts)
- {
- for (cnt = 0; cnt < MELT_OLD_COINS; cnt++)
- GNUNET_CRYPTO_rsa_signature_free (melts[cnt].coin.denom_sig.rsa_signature);
- GNUNET_free (melts);
- }
- for (cnt = 0;
- (NULL != ret_denom_pubs) && (cnt < MELT_NEW_COINS)
- && (NULL != ret_denom_pubs[cnt].rsa_public_key);
- cnt++)
- GNUNET_CRYPTO_rsa_public_key_free (ret_denom_pubs[cnt].rsa_public_key);
- GNUNET_free_non_null (ret_denom_pubs);
- GNUNET_free_non_null (new_denom_pubs);
- for (cnt = 0;
- (NULL != new_dkp) && (cnt < MELT_NEW_COINS) && (NULL != new_dkp[cnt]);
- cnt++)
- destroy_denom_key_pair (new_dkp[cnt]);
- GNUNET_free_non_null (new_dkp);
- return ret;
-}
-
-
-/**
- * Callback that should never be called.
- */
-static void
-cb_wt_never (void *cls,
- const struct TALER_MerchantPublicKeyP *merchant_pub,
- const struct GNUNET_HashCode *h_wire,
- const struct GNUNET_HashCode *h_contract,
- uint64_t transaction_id,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_Amount *coin_value,
- const struct TALER_Amount *coin_fee)
-{
- GNUNET_assert (0); /* this statement should be unreachable */
-}
-
-
-/**
- * Callback that should never be called.
- */
-static void
-cb_wtid_never (void *cls,
- const struct TALER_WireTransferIdentifierRawP *wtid,
- const struct TALER_Amount *coin_contribution,
- const struct TALER_Amount *coin_fee,
- struct GNUNET_TIME_Absolute execution_time)
-{
- GNUNET_assert (0);
-}
-
-
-static struct TALER_MerchantPublicKeyP merchant_pub_wt;
-static struct GNUNET_HashCode h_wire_wt;
-static struct GNUNET_HashCode h_contract_wt;
-static uint64_t transaction_id_wt;
-static struct TALER_CoinSpendPublicKeyP coin_pub_wt;
-static struct TALER_Amount coin_value_wt;
-static struct TALER_Amount coin_fee_wt;
-static struct TALER_Amount transfer_value_wt;
-static struct GNUNET_TIME_Absolute execution_time_wt;
-static struct TALER_WireTransferIdentifierRawP wtid_wt;
-
-
-/**
- * Callback that should be called with the WT data.
- */
-static void
-cb_wt_check (void *cls,
- const struct TALER_MerchantPublicKeyP *merchant_pub,
- const struct GNUNET_HashCode *h_wire,
- const struct GNUNET_HashCode *h_contract,
- uint64_t transaction_id,
- const struct TALER_CoinSpendPublicKeyP *coin_pub,
- const struct TALER_Amount *coin_value,
- const struct TALER_Amount *coin_fee)
-{
- GNUNET_assert (cls == &cb_wt_never);
- GNUNET_assert (0 == memcmp (merchant_pub,
- &merchant_pub_wt,
- sizeof (struct TALER_MerchantPublicKeyP)));
- GNUNET_assert (0 == memcmp (h_wire,
- &h_wire_wt,
- sizeof (struct GNUNET_HashCode)));
- GNUNET_assert (0 == memcmp (h_contract,
- &h_contract_wt,
- sizeof (struct GNUNET_HashCode)));
- GNUNET_assert (transaction_id == transaction_id_wt);
- GNUNET_assert (0 == memcmp (coin_pub,
- &coin_pub_wt,
- sizeof (struct TALER_CoinSpendPublicKeyP)));
- GNUNET_assert (0 == TALER_amount_cmp (coin_value,
- &coin_value_wt));
- GNUNET_assert (0 == TALER_amount_cmp (coin_fee,
- &coin_fee_wt));
-}
-
-
-/**
- * Callback that should be called with the WT data.
- */
-static void
-cb_wtid_check (void *cls,
- const struct TALER_WireTransferIdentifierRawP *wtid,
- const struct TALER_Amount *coin_contribution,
- const struct TALER_Amount *coin_fee,
- struct GNUNET_TIME_Absolute execution_time)
-{
- GNUNET_assert (cls == &cb_wtid_never);
- GNUNET_assert (0 == memcmp (wtid,
- &wtid_wt,
- sizeof (struct TALER_WireTransferIdentifierRawP)));
- GNUNET_assert (execution_time.abs_value_us ==
- execution_time_wt.abs_value_us);
- GNUNET_assert (0 == TALER_amount_cmp (coin_contribution,
- &coin_value_wt));
- GNUNET_assert (0 == TALER_amount_cmp (coin_fee,
- &coin_fee_wt));
-}
-
-
-/**
- * Main function that will be run by the scheduler.
- *
- * @param cls closure
- * @param args remaining command-line arguments
- * @param cfgfile name of the configuration file used (for saving, can be NULL!)
- * @param cfg configuration
- */
-static void
-run (void *cls,
- char *const *args,
- const char *cfgfile,
- const struct GNUNET_CONFIGURATION_Handle *cfg)
-{
- struct TALER_MINTDB_Session *session;
- struct TALER_ReservePublicKeyP reserve_pub;
- struct DenomKeyPair *dkp;
- struct TALER_MINTDB_CollectableBlindcoin cbc;
- struct TALER_MINTDB_CollectableBlindcoin cbc2;
- struct TALER_MINTDB_ReserveHistory *rh;
- struct TALER_MINTDB_ReserveHistory *rh_head;
- struct TALER_MINTDB_BankTransfer *bt;
- struct TALER_MINTDB_CollectableBlindcoin *withdraw;
- struct TALER_MINTDB_Deposit deposit;
- struct TALER_MINTDB_Deposit deposit2;
- struct TALER_WireTransferIdentifierRawP wtid;
- json_t *wire;
- json_t *just;
- const char * const json_wire_str =
- "{ \"type\":\"SEPA\", \
-\"IBAN\":\"DE67830654080004822650\", \
-\"name\":\"GNUnet e.V.\", \
-\"bic\":\"GENODEF1SLR\", \
-\"edate\":\"1449930207000\", \
-\"r\":123456789, \
-\"address\": \"foobar\"}";
- unsigned int cnt;
-
- dkp = NULL;
- rh = NULL;
- wire = NULL;
- session = NULL;
- ZR_BLK (&cbc);
- ZR_BLK (&cbc2);
- if (NULL ==
- (plugin = TALER_MINTDB_plugin_load (cfg)))
- {
- result = 1;
- return;
- }
- if (GNUNET_OK !=
- plugin->create_tables (plugin->cls,
- GNUNET_YES))
- {
- result = 2;
- goto drop;
- }
- if (NULL ==
- (session = plugin->get_session (plugin->cls,
- GNUNET_YES)))
- {
- result = 3;
- goto drop;
- }
- RND_BLK (&reserve_pub);
- GNUNET_assert (GNUNET_OK ==
- TALER_string_to_amount (CURRENCY ":1.000010",
- &value));
- GNUNET_assert (GNUNET_OK ==
- TALER_string_to_amount (CURRENCY ":0.000010",
- &fee_withdraw));
- GNUNET_assert (GNUNET_OK ==
- TALER_string_to_amount (CURRENCY ":0.000010",
- &fee_deposit));
- GNUNET_assert (GNUNET_OK ==
- TALER_string_to_amount (CURRENCY ":0.000010",
- &fee_refresh));
- GNUNET_assert (GNUNET_OK ==
- TALER_string_to_amount (CURRENCY ":1.000010",
- &amount_with_fee));
-
- result = 4;
- just = json_loads ("{ \"justification\":\"1\" }", 0, NULL);
- FAILIF (GNUNET_OK !=
- plugin->reserves_in_insert (plugin->cls,
- session,
- &reserve_pub,
- &value,
- GNUNET_TIME_absolute_get (),
- just));
- json_decref (just);
- FAILIF (GNUNET_OK !=
- check_reserve (session,
- &reserve_pub,
- value.value,
- value.fraction,
- value.currency));
- just = json_loads ("{ \"justification\":\"2\" }", 0, NULL);
- FAILIF (GNUNET_OK !=
- plugin->reserves_in_insert (plugin->cls,
- session,
- &reserve_pub,
- &value,
- GNUNET_TIME_absolute_get (),
- just));
- json_decref (just);
- FAILIF (GNUNET_OK !=
- check_reserve (session,
- &reserve_pub,
- value.value * 2,
- value.fraction * 2,
- value.currency));
- dkp = create_denom_key_pair (1024, session,
- &value,
- &fee_withdraw,
- &fee_deposit,
- &fee_refresh);
- RND_BLK(&cbc.h_coin_envelope);
- RND_BLK(&cbc.reserve_sig);
- cbc.denom_pub = dkp->pub;
- cbc.sig.rsa_signature
- = GNUNET_CRYPTO_rsa_sign (dkp->priv.rsa_private_key,
- &cbc.h_coin_envelope,
- sizeof (cbc.h_coin_envelope));
- cbc.reserve_pub = reserve_pub;
- cbc.amount_with_fee = value;
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_get_zero (CURRENCY, &cbc.withdraw_fee));
- FAILIF (GNUNET_OK !=
- plugin->insert_withdraw_info (plugin->cls,
- session,
- &cbc));
- FAILIF (GNUNET_OK !=
- check_reserve (session,
- &reserve_pub,
- value.value,
- value.fraction,
- value.currency));
- FAILIF (GNUNET_YES !=
- plugin->get_withdraw_info (plugin->cls,
- session,
- &cbc.h_coin_envelope,
- &cbc2));
- FAILIF (NULL == cbc2.denom_pub.rsa_public_key);
- FAILIF (0 != memcmp (&cbc2.reserve_sig,
- &cbc.reserve_sig,
- sizeof (cbc2.reserve_sig)));
- FAILIF (0 != memcmp (&cbc2.reserve_pub,
- &cbc.reserve_pub,
- sizeof (cbc2.reserve_pub)));
- FAILIF (GNUNET_OK !=
- GNUNET_CRYPTO_rsa_verify (&cbc.h_coin_envelope,
- cbc2.sig.rsa_signature,
- dkp->pub.rsa_public_key));
- rh = plugin->get_reserve_history (plugin->cls,
- session,
- &reserve_pub);
- FAILIF (NULL == rh);
- rh_head = rh;
- for (cnt=0; NULL != rh_head; rh_head=rh_head->next, cnt++)
- {
- switch (rh_head->type)
- {
- case TALER_MINTDB_RO_BANK_TO_MINT:
- bt = rh_head->details.bank;
- FAILIF (0 != memcmp (&bt->reserve_pub,
- &reserve_pub,
- sizeof (reserve_pub)));
- /* this is the amount we trasferred twice*/
- FAILIF (1 != bt->amount.value);
- FAILIF (10 != bt->amount.fraction);
- FAILIF (0 != strcmp (CURRENCY, bt->amount.currency));
- FAILIF (NULL == bt->wire);
- break;
- case TALER_MINTDB_RO_WITHDRAW_COIN:
- withdraw = rh_head->details.withdraw;
- FAILIF (0 != memcmp (&withdraw->reserve_pub,
- &reserve_pub,
- sizeof (reserve_pub)));
- FAILIF (0 != memcmp (&withdraw->h_coin_envelope,
- &cbc.h_coin_envelope,
- sizeof (cbc.h_coin_envelope)));
- break;
- }
- }
- FAILIF (3 != cnt);
- /* Tests for deposits */
- memset (&deposit, 0, sizeof (deposit));
- RND_BLK (&deposit.coin.coin_pub);
- deposit.coin.denom_pub = dkp->pub;
- deposit.coin.denom_sig = cbc.sig;
- RND_BLK (&deposit.csig);
- RND_BLK (&deposit.merchant_pub);
- RND_BLK (&deposit.h_contract);
- RND_BLK (&deposit.h_wire);
- wire = json_loads (json_wire_str, 0, NULL);
- deposit.wire = wire;
- deposit.transaction_id =
- GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK, UINT64_MAX);
- deposit.amount_with_fee = value;
- GNUNET_assert (GNUNET_OK ==
- TALER_amount_get_zero (CURRENCY, &deposit.deposit_fee));
- FAILIF (GNUNET_OK !=
- plugin->insert_deposit (plugin->cls,
- session, &deposit));
- FAILIF (GNUNET_YES !=
- plugin->have_deposit (plugin->cls,
- session,
- &deposit));
- deposit2 = deposit;
- deposit2.transaction_id++; /* should fail if transaction id is different */
- FAILIF (GNUNET_NO !=
- plugin->have_deposit (plugin->cls,
- session,
- &deposit2));
- deposit2.transaction_id = deposit.transaction_id;
- RND_BLK (&deposit2.merchant_pub); /* should fail if merchant is different */
- FAILIF (GNUNET_NO !=
- plugin->have_deposit (plugin->cls,
- session,
- &deposit2));
- deposit2.merchant_pub = deposit.merchant_pub;
- RND_BLK (&deposit2.coin.coin_pub); /* should fail if coin is different */
- FAILIF (GNUNET_NO !=
- plugin->have_deposit (plugin->cls,
- session,
- &deposit2));
- FAILIF (GNUNET_OK != test_melting (session));
-
- /* setup values for wire transfer aggregation data */
- memset (&wtid, 42, sizeof (wtid));
- memset (&merchant_pub_wt, 43, sizeof (merchant_pub_wt));
- memset (&h_wire_wt, 44, sizeof (h_wire_wt));
- memset (&h_contract_wt, 45, sizeof (h_contract_wt));
- memset (&coin_pub_wt, 46, sizeof (coin_pub_wt));
- transaction_id_wt = 47;
- execution_time_wt = GNUNET_TIME_absolute_get ();
- memset (&merchant_pub_wt, 48, sizeof (merchant_pub_wt));
- GNUNET_assert (GNUNET_OK ==
- TALER_string_to_amount (CURRENCY "KUDOS:1.000010",
- &coin_value_wt));
- GNUNET_assert (GNUNET_OK ==
- TALER_string_to_amount (CURRENCY "KUDOS:0.000010",
- &coin_fee_wt));
- GNUNET_assert (GNUNET_OK ==
- TALER_string_to_amount (CURRENCY "KUDOS:1.000000",
- &transfer_value_wt));
-
- FAILIF (GNUNET_NO !=
- plugin->lookup_wire_transfer (plugin->cls,
- session,
- &wtid_wt,
- &cb_wt_never,
- NULL));
- FAILIF (GNUNET_NO !=
- plugin->wire_lookup_deposit_wtid (plugin->cls,
- session,
- &h_contract_wt,
- &h_wire_wt,
- &coin_pub_wt,
- &merchant_pub_wt,
- transaction_id_wt,
- &cb_wtid_never,
- NULL));
- /* insert WT data */
- FAILIF (GNUNET_OK !=
- plugin->insert_aggregation_tracking (plugin->cls,
- session,
- &wtid_wt,
- &merchant_pub_wt,
- &h_wire_wt,
- &h_contract_wt,
- transaction_id_wt,
- execution_time_wt,
- &coin_pub_wt,
- &coin_value_wt,
- &coin_fee_wt));
- FAILIF (GNUNET_OK !=
- plugin->lookup_wire_transfer (plugin->cls,
- session,
- &wtid_wt,
- &cb_wt_check,
- &cb_wt_never));
- FAILIF (GNUNET_OK !=
- plugin->wire_lookup_deposit_wtid (plugin->cls,
- session,
- &h_contract_wt,
- &h_wire_wt,
- &coin_pub_wt,
- &merchant_pub_wt,
- transaction_id_wt,
- &cb_wtid_check,
- &cb_wtid_never));
- result = 0;
-
- drop:
- if (NULL != wire)
- json_decref (wire);
- if (NULL != rh)
- plugin->free_reserve_history (plugin->cls,
- rh);
- rh = NULL;
- if (NULL != session)
- GNUNET_break (GNUNET_OK ==
- plugin->drop_temporary (plugin->cls,
- session));
- if (NULL != dkp)
- destroy_denom_key_pair (dkp);
- if (NULL != cbc.sig.rsa_signature)
- GNUNET_CRYPTO_rsa_signature_free (cbc.sig.rsa_signature);
- if (NULL != cbc2.denom_pub.rsa_public_key)
- GNUNET_CRYPTO_rsa_public_key_free (cbc2.denom_pub.rsa_public_key);
- if (NULL != cbc2.sig.rsa_signature)
- GNUNET_CRYPTO_rsa_signature_free (cbc2.sig.rsa_signature);
- dkp = NULL;
- TALER_MINTDB_plugin_unload (plugin);
- plugin = NULL;
-}
-
-
-int
-main (int argc,
- char *const argv[])
-{
- static const struct GNUNET_GETOPT_CommandLineOption options[] = {
- GNUNET_GETOPT_OPTION_END
- };
- char *argv2[] = {
- "test-mint-db-<plugin_name>", /* will be replaced later */
- "-c", "test-mint-db-<plugin_name>.conf", /* will be replaced later */
- NULL,
- };
- const char *plugin_name;
- char *config_filename;
- char *testname;
-
- result = -1;
- if (NULL == (plugin_name = strrchr (argv[0], (int) '-')))
- {
- GNUNET_break (0);
- return -1;
- }
- plugin_name++;
- (void) GNUNET_asprintf (&testname,
- "test-mint-db-%s", plugin_name);
- (void) GNUNET_asprintf (&config_filename,
- "%s.conf", testname);
- argv2[0] = argv[0];
- argv2[2] = config_filename;
- if (GNUNET_OK !=
- GNUNET_PROGRAM_run ((sizeof (argv2)/sizeof (char *)) - 1, argv2,
- testname,
- "Test cases for mint database helper functions.",
- options, &run, NULL))
- {
- GNUNET_free (config_filename);
- GNUNET_free (testname);
- return 3;
- }
- GNUNET_free (config_filename);
- GNUNET_free (testname);
- return result;
-}