aboutsummaryrefslogtreecommitdiff
path: root/src/testing/testing_api_cmd_coin_history.c
diff options
context:
space:
mode:
authorChristian Grothoff <grothoff@gnunet.org>2023-11-09 13:29:40 +0100
committerChristian Grothoff <grothoff@gnunet.org>2023-11-09 13:29:40 +0100
commite18e0809b7657688c8301632f3e803686610fa6f (patch)
tree4da47c3d504ef2096b9e789666a6b5efbe615abe /src/testing/testing_api_cmd_coin_history.c
parent2992b42baedc5c2f5afeaef89c55604c45849370 (diff)
downloadexchange-e18e0809b7657688c8301632f3e803686610fa6f.tar.xz
towards testing coin history API properly
Diffstat (limited to 'src/testing/testing_api_cmd_coin_history.c')
-rw-r--r--src/testing/testing_api_cmd_coin_history.c161
1 files changed, 117 insertions, 44 deletions
diff --git a/src/testing/testing_api_cmd_coin_history.c b/src/testing/testing_api_cmd_coin_history.c
index 2de125932..d4b95fb48 100644
--- a/src/testing/testing_api_cmd_coin_history.c
+++ b/src/testing/testing_api_cmd_coin_history.c
@@ -104,7 +104,85 @@ struct AnalysisContext
};
-#if 0
+/**
+ * Compare @a h1 and @a h2.
+ *
+ * @param h1 a history entry
+ * @param h2 a history entry
+ * @return 0 if @a h1 and @a h2 are equal
+ */
+static int
+history_entry_cmp (
+ const struct TALER_EXCHANGE_CoinHistoryEntry *h1,
+ const struct TALER_EXCHANGE_CoinHistoryEntry *h2)
+{
+ if (h1->type != h2->type)
+ return 1;
+ if (0 != TALER_amount_cmp (&h1->amount,
+ &h2->amount))
+ return 1;
+ switch (h1->type)
+ {
+ case TALER_EXCHANGE_CTT_NONE:
+ GNUNET_break (0);
+ break;
+ case TALER_EXCHANGE_CTT_DEPOSIT:
+ if (0 != GNUNET_memcmp (&h1->details.deposit.sig,
+ &h2->details.deposit.sig))
+ return 1;
+ return 0;
+ case TALER_EXCHANGE_CTT_MELT:
+ if (0 != GNUNET_memcmp (&h1->details.melt.sig,
+ &h2->details.melt.sig))
+ return 1;
+ return 0;
+ case TALER_EXCHANGE_CTT_REFUND:
+ if (0 != GNUNET_memcmp (&h1->details.refund.sig,
+ &h2->details.refund.sig))
+ return 1;
+ return 0;
+ case TALER_EXCHANGE_CTT_RECOUP:
+ if (0 != GNUNET_memcmp (&h1->details.recoup.coin_sig,
+ &h2->details.recoup.coin_sig))
+ return 1;
+ if (0 != GNUNET_memcmp (&h1->details.recoup.exchange_sig,
+ &h2->details.recoup.exchange_sig))
+ return 1;
+ return 0;
+ case TALER_EXCHANGE_CTT_RECOUP_REFRESH:
+ if (0 != GNUNET_memcmp (&h1->details.recoup_refresh.coin_sig,
+ &h2->details.recoup_refresh.coin_sig))
+ return 1;
+ if (0 != GNUNET_memcmp (&h1->details.recoup_refresh.exchange_sig,
+ &h2->details.recoup_refresh.exchange_sig))
+ return 1;
+ return 0;
+ case TALER_EXCHANGE_CTT_OLD_COIN_RECOUP:
+ if (0 != GNUNET_memcmp (&h1->details.old_coin_recoup.exchange_sig,
+ &h2->details.old_coin_recoup.exchange_sig))
+ return 1;
+ return 0;
+ case TALER_EXCHANGE_CTT_PURSE_DEPOSIT:
+ if (0 != GNUNET_memcmp (&h1->details.purse_deposit.coin_sig,
+ &h2->details.purse_deposit.coin_sig))
+ return 1;
+ return 0;
+ case TALER_EXCHANGE_CTT_PURSE_REFUND:
+ if (0 != GNUNET_memcmp (&h1->details.purse_refund.exchange_sig,
+ &h2->details.purse_refund.exchange_sig))
+ return 1;
+ return 0;
+ case TALER_EXCHANGE_CTT_RESERVE_OPEN_DEPOSIT:
+ if (0 != GNUNET_memcmp (&h1->details.reserve_open_deposit.coin_sig,
+ &h2->details.reserve_open_deposit.coin_sig))
+ return 1;
+ return 0;
+ }
+ GNUNET_assert (0);
+ return -1;
+}
+
+
/**
* Check if @a cmd changed the coin, if so, find the
* entry in our history and set the respective index in found
@@ -156,64 +234,59 @@ analyze_command (void *cls,
return;
}
+ for (unsigned int j = 0; true; j++)
{
- const struct TALER_CoinPublicKeyP *rp;
+ const struct TALER_CoinSpendPublicKeyP *rp;
+ const struct TALER_EXCHANGE_CoinHistoryEntry *he;
+ bool matched = false;
if (GNUNET_OK !=
TALER_TESTING_get_trait_coin_pub (cmd,
+ j,
&rp))
- return; /* command does nothing for coins */
+ break; /* command does nothing for coins */
if (0 !=
GNUNET_memcmp (rp,
coin_pub))
- return; /* command affects some _other_ coin */
- for (unsigned int j = 0; true; j++)
+ continue; /* command affects some _other_ coin */
+ if (GNUNET_OK !=
+ TALER_TESTING_get_trait_coin_history (cmd,
+ j,
+ &he))
{
- const struct TALER_EXCHANGE_CoinHistoryEntry *he;
- bool matched = false;
-
- if (GNUNET_OK !=
- TALER_TESTING_get_trait_coin_history (cmd,
- j,
- &he))
- {
- /* NOTE: only for debugging... */
- if (0 == j)
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Command `%s' has the coin_pub, but lacks coin history trait\n",
- cmd->label);
- return; /* command does nothing for coins */
- }
- for (unsigned int i = 0; i<history_length; i++)
- {
- if (found[i])
- continue; /* already found, skip */
- if (0 ==
- TALER_TESTING_coin_history_entry_cmp (he,
- &history[i]))
- {
- found[i] = true;
- matched = true;
- break;
- }
- }
- if (! matched)
+ /* NOTE: only for debugging... */
+ if (0 == j)
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Command `%s' has the coin_pub, but lacks coin history trait\n",
+ cmd->label);
+ return; /* command does nothing for coins */
+ }
+ for (unsigned int i = 0; i<history_length; i++)
+ {
+ if (found[i])
+ continue; /* already found, skip */
+ if (0 ==
+ history_entry_cmp (he,
+ &history[i]))
{
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Command `%s' coin history entry #%u not found\n",
- cmd->label,
- j);
- ac->failure = true;
- return;
+ found[i] = true;
+ matched = true;
+ break;
}
}
+ if (! matched)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Command `%s' coin history entry #%u not found\n",
+ cmd->label,
+ j);
+ ac->failure = true;
+ return;
+ }
}
}
-#endif
-
-
/**
* Check that the coin balance and HTTP response code are
* both acceptable.
@@ -325,7 +398,6 @@ coin_history_cb (void *cls,
return;
}
(void) ac;
-#if FIXME
TALER_TESTING_iterate (is,
true,
&analyze_command,
@@ -338,6 +410,7 @@ coin_history_cb (void *cls,
TALER_TESTING_interpreter_fail (ss->is);
return;
}
+#if FIXME
for (unsigned int i = 0; i<rs->details.ok.history_len; i++)
{
if (found[i])