summaryrefslogtreecommitdiff
path: root/src/benchmark/taler-exchange-benchmark-new.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/benchmark/taler-exchange-benchmark-new.c')
-rw-r--r--src/benchmark/taler-exchange-benchmark-new.c432
1 files changed, 0 insertions, 432 deletions
diff --git a/src/benchmark/taler-exchange-benchmark-new.c b/src/benchmark/taler-exchange-benchmark-new.c
deleted file mode 100644
index abe57b109..000000000
--- a/src/benchmark/taler-exchange-benchmark-new.c
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- This file is part of TALER
- (C) 2014-2018 Taler Systems SA
-
- TALER is free software; you can redistribute it and/or modify it
- under the terms of the GNU Affero 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,
- see <http://www.gnu.org/licenses/>
-*/
-
-/**
- * @file merchant/backend/taler-merchant-httpd.c
- * @brief HTTP serving layer intended to perform crypto-work and
- * communication with the exchange
- * @author Marcello Stanisci
- */
-
-#include "platform.h"
-#include <taler/taler_util.h>
-#include <taler/taler_signatures.h>
-#include <taler/taler_exchange_service.h>
-#include <taler/taler_json_lib.h>
-#include <gnunet/gnunet_util_lib.h>
-#include <microhttpd.h>
-#include <taler/taler_bank_service.h>
-#include <taler/taler_fakebank_lib.h>
-#include <taler/taler_testing_lib.h>
-#include <taler/taler_testing_bank_lib.h>
-#include <taler/taler_error_codes.h>
-
-/* Error codes. */
-enum BenchmarkError {
-
- MISSING_BANK_URL,
- FAILED_TO_LAUNCH_BANK,
- BAD_CLI_ARG,
- BAD_CONFIG_FILE,
- NO_CONFIG_FILE_GIVEN
-};
-
-/**
- * Probability that a spent coin will be refreshed.
- */
-#define REFRESH_PROBABILITY 0.1
-
-/**
- * The whole benchmark is a repetition of a "unit". Each
- * unit is a array containing a withdraw+deposit operation,
- * and _possibly_ a refresh of the deposited coin.
- */
-#define UNITY_SIZE 6
-
-/* Hard-coded params. Note, the bank is expected to
- * have the Tor user with account number 3 and password 'x'.
- *
- * This is not a problem _so far_, as the fakebank mocks logins,
- * and the Python bank makes that account by default. */
-#define USER_ACCOUNT_NO 3
-#define EXCHANGE_ACCOUNT_NO 2
-#define USER_LOGIN_NAME "Tor"
-#define USER_LOGIN_PASS "x"
-#define EXCHANGE_URL "http://example.com/"
-
-#define FIRST_INSTRUCTION -1
-
-#define CMD_TRANSFER_TO_EXCHANGE(label,amount) \
- TALER_TESTING_cmd_fakebank_transfer (label, amount, \
- fakebank_url, USER_ACCOUNT_NO, EXCHANGE_ACCOUNT_NO, \
- USER_LOGIN_NAME, USER_LOGIN_PASS, EXCHANGE_URL)
-
-
-/**
- * Exchange URL; never used, just needed by exchange preparator.
- */
-static char *exchange_url;
-
-/**
- * Time snapshot taken right before executing the CMDs.
- */
-static struct GNUNET_TIME_Absolute start_time;
-
-/**
- * Benchmark duration time taken right after the CMD interpreter
- * returns.
- */
-static struct GNUNET_TIME_Relative duration;
-
-/**
- * Exit code.
- */
-static unsigned int result;
-
-/**
- * How many refreshes got executed.
- */
-static unsigned int howmany_refreshes;
-
-/**
- * How many coins we want to create.
- */
-static unsigned int howmany_coins = 1;
-
-/**
- * Log level used during the run.
- */
-static char *loglev;
-
-/**
- * Log file.
- */
-static char *logfile;
-
-/**
- * Config filename.
- */
-static char *cfg_filename;
-
-/**
- * Fake bank base URL.
- */
-static char *fakebank_url;
-
-/**
- * Currency used.
- */
-static char *currency;
-
-/**
- * Convenience macros to allocate all the currency-dependant
- * strings; note that the argument list of the macro is ignored.
- * It is kept as a way to make the macro more auto-descriptive
- * where it is called.
- */
-
-#define ALLOCATE_AMOUNTS(...) \
- char *AMOUNT_5; \
- char *AMOUNT_4; \
- char *AMOUNT_1; \
- \
- GNUNET_asprintf (&AMOUNT_5, \
- "%s:5", \
- currency); \
- GNUNET_asprintf (&AMOUNT_4, \
- "%s:4", \
- currency); \
- GNUNET_asprintf (&AMOUNT_1, \
- "%s:1", \
- currency);
-
-/**
- * Throw a weighted coin with @a probability.
- *
- * @return #GNUNET_OK with @a probability,
- * #GNUNET_NO with 1 - @a probability
- */
-static unsigned int
-eval_probability (float probability)
-{
- uint64_t random;
- float random_01;
-
- random = GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK,
- UINT64_MAX);
- random_01 = (double) random / UINT64_MAX;
- return (random_01 <= probability) ? GNUNET_OK : GNUNET_NO;
-}
-
-
-/**
- * Actual commands collection.
- */
-static void
-run (void *cls,
- struct TALER_TESTING_Interpreter *is)
-{
- struct TALER_Amount total_reserve_amount;
- struct TALER_Amount withdraw_fee;
- char *withdraw_fee_str;
-
- struct TALER_TESTING_Command all_commands
- [1 + /* Withdraw block */
- howmany_coins + /* All units */
- 1 /* End CMD */];
-
- ALLOCATE_AMOUNTS
- (AMOUNT_5,
- AMOUNT_4,
- AMOUNT_1);
-
- total_reserve_amount.value = 5 * howmany_coins;
- strncpy (total_reserve_amount.currency,
- currency,
- TALER_CURRENCY_LEN);
-
- GNUNET_asprintf (&withdraw_fee_str,
- "%s:0.1",
- currency);
- TALER_string_to_amount (withdraw_fee_str,
- &withdraw_fee);
- for (unsigned int i = 0; i < howmany_coins; i++)
- TALER_amount_add (&total_reserve_amount,
- &total_reserve_amount,
- &withdraw_fee);
-
- struct TALER_TESTING_Command make_reserve[] = {
-
- CMD_TRANSFER_TO_EXCHANGE
- ("create-reserve",
- TALER_amount_to_string (&total_reserve_amount)),
-
- TALER_TESTING_cmd_exec_wirewatch
- ("wirewatch",
- cfg_filename),
-
- TALER_TESTING_cmd_end ()
-
- };
-
- all_commands[0] = TALER_TESTING_cmd_batch ("make-reserve",
- make_reserve);
- for (unsigned int i = 0; i < howmany_coins; i++)
- {
- char *withdraw_label;
- char *order_enc;
- struct TALER_TESTING_Command unit[UNITY_SIZE];
-
- GNUNET_asprintf (&withdraw_label,
- "withdraw-%u",
- i);
-
- GNUNET_asprintf (&order_enc,
- "{\"nonce\": %u}",
- i);
-
- unit[0] = TALER_TESTING_cmd_withdraw_amount
- (withdraw_label,
- is->exchange,
- "create-reserve",
- AMOUNT_5,
- MHD_HTTP_OK);
-
- unit[1] = TALER_TESTING_cmd_deposit
- ("deposit",
- is->exchange,
- withdraw_label,
- 0, /* Index of the one withdrawn coin in the traits. */
- TALER_TESTING_make_wire_details
- (24,
- "no-aggregation"),
- order_enc,
- GNUNET_TIME_UNIT_ZERO,
- AMOUNT_1,
- MHD_HTTP_OK);
-
- if (eval_probability (REFRESH_PROBABILITY))
- {
- char *melt_label;
- char *reveal_label;
-
- howmany_refreshes++;
- GNUNET_asprintf (&melt_label,
- "refresh-melt-%u",
- i);
-
- GNUNET_asprintf (&reveal_label,
- "refresh-reveal-%u",
- i);
-
- unit[2] = TALER_TESTING_cmd_refresh_melt
- (melt_label,
- is->exchange,
- AMOUNT_4,
- withdraw_label,
- MHD_HTTP_OK);
-
- unit[3] = TALER_TESTING_cmd_refresh_reveal
- (reveal_label,
- is->exchange,
- melt_label,
- MHD_HTTP_OK);
-
- unit[4] = TALER_TESTING_cmd_refresh_link
- ("refresh-link",
- is->exchange,
- reveal_label,
- MHD_HTTP_OK);
-
- unit[5] = TALER_TESTING_cmd_end ();
- }
- else unit[2] = TALER_TESTING_cmd_end ();
-
- all_commands[1 + i] = TALER_TESTING_cmd_batch ("unit",
- unit);
- }
- all_commands[1 + howmany_coins] = TALER_TESTING_cmd_end ();
- start_time = GNUNET_TIME_absolute_get ();
- TALER_TESTING_run_with_fakebank (is,
- all_commands,
- fakebank_url);
- result = 1;
-}
-
-/**
- * The main function of the serve tool
- *
- * @param argc number of arguments from the command line
- * @param argv command line arguments
- * @return 0 ok, or `enum PaymentGeneratorError` on error
- */
-int
-main (int argc,
- char *const *argv)
-{
- struct GNUNET_CONFIGURATION_Handle *cfg;
-
- loglev = NULL;
- GNUNET_log_setup ("taler-exchange-benchmark",
- loglev,
- logfile);
-
- struct GNUNET_GETOPT_CommandLineOption options[] = {
-
- GNUNET_GETOPT_option_cfgfile
- (&cfg_filename),
-
- GNUNET_GETOPT_option_version
- (PACKAGE_VERSION " " VCS_VERSION),
-
- GNUNET_GETOPT_option_help
- ("Exchange benchmark"),
-
- GNUNET_GETOPT_option_loglevel
- (&loglev),
-
- GNUNET_GETOPT_option_uint
- ('n',
- "coins-number",
- "CN",
- "How many coins we should instantiate",
- &howmany_coins),
-
- GNUNET_GETOPT_option_string
- ('b',
- "bank-url",
- "BU",
- "bank base url, mandatory,"
- " must match exchange's escrow bank",
- &fakebank_url),
-
- GNUNET_GETOPT_option_string
- ('l',
- "logfile",
- "LF",
- "will log to file LF",
- &logfile),
-
- GNUNET_GETOPT_OPTION_END
- };
-
- if (GNUNET_SYSERR == (result = GNUNET_GETOPT_run
- ("taler-exchange-benchmark",
- options,
- argc,
- argv)))
- {
- TALER_LOG_ERROR ("Unparsable CLI options\n");
- return BAD_CLI_ARG;
- }
-
- if (NULL == cfg_filename)
- {
- TALER_LOG_ERROR ("-c option is mandatory\n");
- return NO_CONFIG_FILE_GIVEN;
- }
-
- cfg = GNUNET_CONFIGURATION_create ();
- if (GNUNET_OK != GNUNET_CONFIGURATION_load
- (cfg,
- cfg_filename))
- {
- TALER_LOG_ERROR ("Could not parse configuration\n");
- return BAD_CONFIG_FILE;
- }
- if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string
- (cfg,
- "taler",
- "currency",
- &currency))
- {
- GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
- "taler",
- "currency");
- GNUNET_CONFIGURATION_destroy (cfg);
- return BAD_CONFIG_FILE;
- }
- GNUNET_CONFIGURATION_destroy (cfg);
-
- if (NULL == fakebank_url)
- {
- TALER_LOG_ERROR ("Option -b is mandatory!\n");
- return MISSING_BANK_URL;
- }
-
- GNUNET_assert (GNUNET_OK == TALER_TESTING_prepare_exchange
- (cfg_filename,
- &exchange_url)); // never used, we do all via handle.
- result = TALER_TESTING_setup_with_exchange
- (run,
- NULL,
- cfg_filename);
-
- duration = GNUNET_TIME_absolute_get_duration (start_time);
-
- TALER_LOG_INFO ("Executed W=%u, D=%u, R=%u, operations in %s\n",
- howmany_coins,
- howmany_coins,
- howmany_refreshes,
- GNUNET_STRINGS_relative_time_to_string
- (duration,
- GNUNET_YES));
-
- return (GNUNET_OK == result) ? 0 : result;
-}