diff options
Diffstat (limited to 'src/benchmark/taler-exchange-benchmark.c')
-rw-r--r-- | src/benchmark/taler-exchange-benchmark.c | 79 |
1 files changed, 49 insertions, 30 deletions
diff --git a/src/benchmark/taler-exchange-benchmark.c b/src/benchmark/taler-exchange-benchmark.c index 5b4f1f5ef..7e19d8318 100644 --- a/src/benchmark/taler-exchange-benchmark.c +++ b/src/benchmark/taler-exchange-benchmark.c @@ -184,31 +184,38 @@ static struct TALER_MerchantPrivateKeyP merchant_priv; */ #define SPEND_PROBABILITY 0.1 + static unsigned int eval_probability (float probability) { unsigned int random; float random_01; + random = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, UINT32_MAX); random_01 = (float) random / UINT32_MAX; return random_01 <= probability ? GNUNET_OK : GNUNET_NO; } + static void do_shutdown (void *cls); + /** * Shutdown benchmark in case of errors * * @param msg error message to print in logs */ static void -fail (char *msg) +fail (const char *msg) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "%s\n", msg); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "%s\n", + msg); GNUNET_SCHEDULER_shutdown (); } + /** * Function called with the result of a /deposit operation. * @@ -223,8 +230,7 @@ deposit_cb (void *cls, unsigned int http_status, const json_t *obj) { - unsigned int coin_index = (unsigned int) cls; - + unsigned int coin_index = (unsigned int) (long) cls; coins[coin_index].dh = NULL; if (MHD_HTTP_OK != http_status) @@ -254,12 +260,14 @@ reserve_withdraw_cb (void *cls, const json_t *full_response) { - unsigned int coin_index = (unsigned int) cls; + unsigned int coin_index = (unsigned int) (long) cls; coins[coin_index].wsh = NULL; if (MHD_HTTP_OK != http_status) fail ("At least one coin has not correctly been withdrawn\n"); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%d-th coin withdrawn\n", coin_index); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "%d-th coin withdrawn\n", + coin_index); coins[coin_index].sig.rsa_signature = GNUNET_CRYPTO_rsa_signature_dup (sig->rsa_signature); if (GNUNET_OK == eval_probability (SPEND_PROBABILITY)) @@ -280,7 +288,7 @@ reserve_withdraw_cb (void *cls, GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, &h_contract, sizeof (h_contract)); - timestamp = GNUNET_TIME_absolute_get (); + timestamp = GNUNET_TIME_absolute_get (); wire_deadline = GNUNET_TIME_absolute_add (timestamp, GNUNET_TIME_UNIT_WEEKS); refund_deadline = GNUNET_TIME_absolute_add (timestamp, GNUNET_TIME_UNIT_DAYS); GNUNET_TIME_round_abs (×tamp); @@ -333,7 +341,7 @@ reserve_withdraw_cb (void *cls, refund_deadline, &coin_sig, &deposit_cb, - (void *) coin_index); + (void *) (long) coin_index); if (NULL == coins[coin_index].dh) { json_decref (merchant_details); @@ -341,10 +349,10 @@ reserve_withdraw_cb (void *cls, } json_decref (merchant_details); transaction_id++; - } - } + + /** * Function called upon completion of our /admin/add/incoming request. * @@ -358,19 +366,18 @@ add_incoming_cb (void *cls, unsigned int http_status, const json_t *full_response) { - + unsigned int reserve_index = (unsigned int) (long) cls; struct GNUNET_CRYPTO_EddsaPrivateKey *coin_priv; unsigned int i; unsigned int coin_index; - unsigned int reserve_index = (unsigned int) cls; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "/admin/add/incoming callback called on %d-th reserve\n", reserve_index); reserves[reserve_index].aih = NULL; if (MHD_HTTP_OK != http_status) fail ("At least one reserve failed in being created\n"); - + for (i=0; i < COINS_PER_RESERVE; i++) { coin_priv = GNUNET_CRYPTO_eddsa_key_create (); @@ -387,11 +394,11 @@ add_incoming_cb (void *cls, &coins[coin_index].coin_priv, &blinding_key, reserve_withdraw_cb, - (void *) coin_index); + (void *) (long) coin_index); } - } + /** * Run the main interpreter loop that performs exchange operations. * @@ -408,7 +415,7 @@ benchmark_run (void *cls) struct TALER_ReservePublicKeyP reserve_pub; struct GNUNET_TIME_Absolute execution_date; struct TALER_Amount reserve_amount; - + priv = GNUNET_CRYPTO_eddsa_key_create (); merchant_priv.eddsa_priv = *priv; GNUNET_free (priv); @@ -423,13 +430,20 @@ benchmark_run (void *cls) execution_date = GNUNET_TIME_absolute_get (); GNUNET_TIME_round_abs (&execution_date); - GNUNET_log (GNUNET_ERROR_TYPE_INFO, "benchmark_run() invoked\n"); - GNUNET_log (GNUNET_ERROR_TYPE_INFO, "gotten pool_size of %d\n", pool_size); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "benchmark_run() invoked\n"); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "gotten pool_size of %d\n", + pool_size); nreserves = pool_size / COINS_PER_RESERVE; - GNUNET_log (GNUNET_ERROR_TYPE_INFO, "creating %d reserves\n", nreserves); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "creating %d reserves\n", + nreserves); - reserves = GNUNET_malloc (nreserves * sizeof (struct Reserve)); - coins = GNUNET_malloc (COINS_PER_RESERVE * nreserves * sizeof (struct Coin)); + reserves = GNUNET_new_array (nreserves, + struct Reserve); + coins = GNUNET_new_array (COINS_PER_RESERVE * nreserves, + struct Coin); /* reserves */ for (i=0;i < nreserves && 0 < nreserves;i++) @@ -450,15 +464,16 @@ benchmark_run (void *cls) sender_details, transfer_details, &add_incoming_cb, - (void *) i); - GNUNET_assert (NULL != reserves[i].aih); + (void *) (long) i); + GNUNET_assert (NULL != reserves[i].aih); json_decref (transfer_details); } json_decref (sender_details); - GNUNET_log (GNUNET_ERROR_TYPE_INFO, "benchmark_run() returns\n"); - return; + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "benchmark_run() returns\n"); } + /** * Functions of this type are called to provide the retrieved signing and * denomination keys of the exchange. No TALER_EXCHANGE_*() functions should be called @@ -493,6 +508,7 @@ cert_cb (void *cls, NULL); } + /** * Function run when the test terminates (good or bad). * Cleans up our state. @@ -527,13 +543,11 @@ do_shutdown (void *cls) { TALER_EXCHANGE_reserve_withdraw_cancel(coins[i].wsh); coins[i].wsh = NULL; - - } + } if (NULL != coins[i].dh) { TALER_EXCHANGE_deposit_cancel(coins[i].dh); coins[i].dh = NULL; - } } @@ -560,6 +574,7 @@ do_shutdown (void *cls) } + /** * Main function that will be run by the scheduler. * @@ -568,8 +583,11 @@ do_shutdown (void *cls) static void run (void *cls) { - GNUNET_log (GNUNET_ERROR_TYPE_INFO, "running run()\n"); - GNUNET_array_append (spent_coins, spent_coins_size, 1); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "running run()\n"); + GNUNET_array_append (spent_coins, + spent_coins_size, + 1); spent_coins_size++; reserves = NULL; @@ -587,6 +605,7 @@ run (void *cls) GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL); } + int main (int argc, char * const *argv) |