diff options
author | Christian Grothoff <christian@grothoff.org> | 2016-05-19 17:47:27 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2016-05-19 17:47:27 +0200 |
commit | 14436d1241ef2c37c4cee92dc1a3c61ab3d6b1dc (patch) | |
tree | ba2bc074d9ea9c0500f1bb9ddaccb1d5ee0f4b46 /src | |
parent | 8199c0688281438d8f67933b807e68a64ce74b61 (diff) |
finished implementing #4401
Diffstat (limited to 'src')
-rw-r--r-- | src/exchangedb/test_exchangedb.c | 64 |
1 files changed, 58 insertions, 6 deletions
diff --git a/src/exchangedb/test_exchangedb.c b/src/exchangedb/test_exchangedb.c index f896b49e3..e15d657e5 100644 --- a/src/exchangedb/test_exchangedb.c +++ b/src/exchangedb/test_exchangedb.c @@ -372,6 +372,12 @@ commit_coin_cmp (struct TALER_EXCHANGEDB_RefreshCommitCoin *rc1, */ #define MELT_NEW_COINS 5 +/** + * Which index was 'randomly' chosen for the reveal for the test? + */ +#define MELT_NOREVEAL_INDEX 1 + + static struct TALER_EXCHANGEDB_RefreshCommitCoin *commit_coins[TALER_CNC_KAPPA]; /** @@ -498,7 +504,7 @@ test_refresh_commit_links (struct TALER_EXCHANGEDB_Session *session, plugin->get_refresh_commit_link (plugin->cls, session, session_hash, - 1, + MELT_NOREVEAL_INDEX, &cl2)); for (i=0;i<TALER_CNC_KAPPA;i++) { @@ -527,6 +533,42 @@ test_refresh_commit_links (struct TALER_EXCHANGEDB_Session *session, } +static struct GNUNET_HashCode session_hash; + + +/** + * Function called with the session hashes and transfer secret + * information for a given coin. Checks if they are as expected. + * + * @param cls closure + * @param sh a session the coin was melted in + * @param transfer_pub public transfer key for the session + * @param shared_secret_enc set to shared secret for the session + */ +static void +check_transfer_data (void *cls, + const struct GNUNET_HashCode *sh, + const struct TALER_TransferPublicKeyP *transfer_pub, + const struct TALER_EncryptedLinkSecretP *shared_secret_enc) +{ + int *ok = cls; + + FAILIF (0 != memcmp (&rclp[MELT_NOREVEAL_INDEX].transfer_pub, + transfer_pub, + sizeof (struct TALER_TransferPublicKeyP))); + FAILIF (0 != memcmp (&rclp[MELT_NOREVEAL_INDEX].shared_secret_enc, + shared_secret_enc, + sizeof (struct TALER_EncryptedLinkSecretP))); + FAILIF (0 != memcmp (&session_hash, + sh, + sizeof (struct GNUNET_HashCode))); + *ok = GNUNET_OK; + return; + drop: + *ok = GNUNET_SYSERR; +} + + /** * Function to test melting of coins as part of a refresh session * @@ -539,7 +581,6 @@ test_melting (struct TALER_EXCHANGEDB_Session *session) { struct TALER_EXCHANGEDB_RefreshSession refresh_session; struct TALER_EXCHANGEDB_RefreshSession ret_refresh_session; - struct GNUNET_HashCode session_hash; struct DenomKeyPair *dkp; struct DenomKeyPair **new_dkp; /* struct TALER_CoinPublicInfo *coins; */ @@ -563,7 +604,7 @@ test_melting (struct TALER_EXCHANGEDB_Session *session) ret_denom_pubs = NULL; /* create and test a refresh session */ refresh_session.num_newcoins = MELT_NEW_COINS; - refresh_session.noreveal_index = 1; + refresh_session.noreveal_index = MELT_NOREVEAL_INDEX; /* create a denomination (value: 1; fraction: 100) */ dkp = create_denom_key_pair (512, session, @@ -603,7 +644,7 @@ test_melting (struct TALER_EXCHANGEDB_Session *session) FAILIF (ret_refresh_session.num_newcoins != refresh_session.num_newcoins); FAILIF (ret_refresh_session.noreveal_index != refresh_session.noreveal_index); - /* check refresh sesison melt data */ + /* check refresh session melt data */ { struct TALER_EXCHANGEDB_RefreshMelt *ret_melt; @@ -731,7 +772,7 @@ test_melting (struct TALER_EXCHANGEDB_Session *session) found = GNUNET_NO; for (cnt=0;cnt < MELT_NEW_COINS;cnt++) { - r1 = commit_coins[1][cnt].refresh_link; + r1 = commit_coins[MELT_NOREVEAL_INDEX][cnt].refresh_link; r2 = ldlp->link_data_enc; FAILIF (NULL == ldlp->ev_sig.rsa_signature); if ( (0 == @@ -752,7 +793,18 @@ test_melting (struct TALER_EXCHANGEDB_Session *session) plugin->free_link_data_list (plugin->cls, ldl); - /* FIXME #4401: test: get_transfer */ + { + int ok; + + ok = GNUNET_NO; + FAILIF (GNUNET_OK != + plugin->get_transfer (plugin->cls, + session, + &meltp->coin.coin_pub, + &check_transfer_data, + &ok)); + FAILIF (GNUNET_OK != ok); + } ret = GNUNET_OK; drop: |