diff options
Diffstat (limited to 'src/testing/test_taler_exchange_aggregator.c')
-rw-r--r-- | src/testing/test_taler_exchange_aggregator.c | 291 |
1 files changed, 105 insertions, 186 deletions
diff --git a/src/testing/test_taler_exchange_aggregator.c b/src/testing/test_taler_exchange_aggregator.c index eaa621cfe..2d7acc6dc 100644 --- a/src/testing/test_taler_exchange_aggregator.c +++ b/src/testing/test_taler_exchange_aggregator.c @@ -31,24 +31,9 @@ /** - * Helper structure to keep exchange configuration values. + * Our credentials. */ -static struct TALER_TESTING_ExchangeConfiguration ec; - -/** - * Bank configuration data. - */ -static struct TALER_TESTING_BankConfiguration bc; - -/** - * Contains plugin and session. - */ -static struct TALER_TESTING_DatabaseConnection dbc; - -/** - * Return value from main(). - */ -static int result; +struct TALER_TESTING_Credentials cred; /** * Name of the configuration file to use. @@ -71,24 +56,6 @@ static char *config_filename; /** - * Function run on shutdown to unload the DB plugin. - * - * @param cls NULL - */ -static void -unload_db (void *cls) -{ - (void) cls; - if (NULL != dbc.plugin) - { - dbc.plugin->drop_tables (dbc.plugin->cls); - TALER_EXCHANGEDB_plugin_unload (dbc.plugin); - dbc.plugin = NULL; - } -} - - -/** * Collects all the tests. */ static void @@ -96,8 +63,13 @@ run (void *cls, struct TALER_TESTING_Interpreter *is) { struct TALER_TESTING_Command all[] = { - - // check no aggregation happens on a empty database + TALER_TESTING_cmd_run_fakebank ("run-fakebank", + cred.cfg, + "exchange-account-1"), + TALER_TESTING_cmd_system_start ("start-taler", + config_filename, + "-e", + NULL), CMD_EXEC_AGGREGATOR ("run-aggregator-on-empty-db", config_filename), TALER_TESTING_cmd_check_bank_empty ("expect-empty-transactions-on-start"), @@ -105,9 +77,10 @@ run (void *cls, /* check aggregation happens on the simplest case: one deposit into the database. */ TALER_TESTING_cmd_insert_deposit ("do-deposit-1", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_UNIT_ZERO, "EUR:1", "EUR:0.1"), @@ -115,25 +88,27 @@ run (void *cls, config_filename), TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-1", - ec.exchange_url, + cred.exchange_url, "EUR:0.89", - bc.exchange_payto, - bc.user42_payto), + cred.exchange_payto, + cred.user42_payto), TALER_TESTING_cmd_check_bank_empty ("expect-empty-transactions-after-1"), /* check aggregation accumulates well. */ TALER_TESTING_cmd_insert_deposit ("do-deposit-2a", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_UNIT_ZERO, "EUR:1", "EUR:0.1"), TALER_TESTING_cmd_insert_deposit ("do-deposit-2b", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_UNIT_ZERO, "EUR:1", "EUR:0.1"), @@ -142,31 +117,34 @@ run (void *cls, config_filename), TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-2", - ec.exchange_url, + cred.exchange_url, "EUR:1.79", - bc.exchange_payto, - bc.user42_payto), + cred.exchange_payto, + cred.user42_payto), TALER_TESTING_cmd_check_bank_empty ("expect-empty-transactions-after-2"), /* check that different merchants stem different aggregations. */ TALER_TESTING_cmd_insert_deposit ("do-deposit-3a", - &dbc, + cred.cfg, "bob", "4", + GNUNET_TIME_timestamp_get (), GNUNET_TIME_UNIT_ZERO, "EUR:1", "EUR:0.1"), TALER_TESTING_cmd_insert_deposit ("do-deposit-3b", - &dbc, + cred.cfg, "bob", "5", + GNUNET_TIME_timestamp_get (), GNUNET_TIME_UNIT_ZERO, "EUR:1", "EUR:0.1"), TALER_TESTING_cmd_insert_deposit ("do-deposit-3c", - &dbc, + cred.cfg, "alice", "4", + GNUNET_TIME_timestamp_get (), GNUNET_TIME_UNIT_ZERO, "EUR:1", "EUR:0.1"), @@ -174,36 +152,38 @@ run (void *cls, config_filename), TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-3a", - ec.exchange_url, + cred.exchange_url, "EUR:0.89", - bc.exchange_payto, - "payto://x-taler-bank/localhost/4"), + cred.exchange_payto, + "payto://x-taler-bank/localhost/4?receiver-name=4"), TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-3b", - ec.exchange_url, + cred.exchange_url, "EUR:0.89", - bc.exchange_payto, - "payto://x-taler-bank/localhost/4"), + cred.exchange_payto, + "payto://x-taler-bank/localhost/4?receiver-name=4"), TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-3c", - ec.exchange_url, + cred.exchange_url, "EUR:0.89", - bc.exchange_payto, - "payto://x-taler-bank/localhost/5"), + cred.exchange_payto, + "payto://x-taler-bank/localhost/5?receiver-name=5"), TALER_TESTING_cmd_check_bank_empty ("expect-empty-transactions-after-3"), /* checking that aggregator waits for the deadline. */ TALER_TESTING_cmd_insert_deposit ("do-deposit-4a", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5), "EUR:0.2", "EUR:0.1"), TALER_TESTING_cmd_insert_deposit ("do-deposit-4b", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5), @@ -219,16 +199,17 @@ run (void *cls, CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-4-delayed", config_filename), TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-4", - ec.exchange_url, + cred.exchange_url, "EUR:0.19", - bc.exchange_payto, - bc.user42_payto), + cred.exchange_payto, + cred.user42_payto), // test picking all deposits at earliest deadline TALER_TESTING_cmd_insert_deposit ("do-deposit-5a", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10), @@ -236,9 +217,10 @@ run (void *cls, "EUR:0.1"), TALER_TESTING_cmd_insert_deposit ("do-deposit-5b", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5), @@ -254,15 +236,16 @@ run (void *cls, CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-5-delayed", config_filename), TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-5", - ec.exchange_url, + cred.exchange_url, "EUR:0.19", - bc.exchange_payto, - bc.user42_payto), + cred.exchange_payto, + cred.user42_payto), /* Test NEVER running 'tiny' unless they make up minimum unit */ TALER_TESTING_cmd_insert_deposit ("do-deposit-6a", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_UNIT_ZERO, "EUR:0.102", "EUR:0.1"), @@ -271,16 +254,18 @@ run (void *cls, TALER_TESTING_cmd_check_bank_empty ( "expect-empty-transactions-after-6a-tiny"), TALER_TESTING_cmd_insert_deposit ("do-deposit-6b", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_UNIT_ZERO, "EUR:0.102", "EUR:0.1"), TALER_TESTING_cmd_insert_deposit ("do-deposit-6c", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_UNIT_ZERO, "EUR:0.102", "EUR:0.1"), @@ -289,9 +274,10 @@ run (void *cls, TALER_TESTING_cmd_check_bank_empty ( "expect-empty-transactions-after-6c-tiny"), TALER_TESTING_cmd_insert_deposit ("do-deposit-6d", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_UNIT_ZERO, "EUR:0.102", "EUR:0.1"), @@ -300,25 +286,27 @@ run (void *cls, TALER_TESTING_cmd_check_bank_empty ( "expect-empty-transactions-after-6d-tiny"), TALER_TESTING_cmd_insert_deposit ("do-deposit-6e", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_UNIT_ZERO, "EUR:0.112", "EUR:0.1"), CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-6e", config_filename), TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-6", - ec.exchange_url, + cred.exchange_url, "EUR:0.01", - bc.exchange_payto, - bc.user42_payto), + cred.exchange_payto, + cred.user42_payto), /* Test profiteering if wire deadline is short */ TALER_TESTING_cmd_insert_deposit ("do-deposit-7a", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_UNIT_ZERO, "EUR:0.109", "EUR:0.1"), @@ -327,41 +315,44 @@ run (void *cls, TALER_TESTING_cmd_check_bank_empty ( "expect-empty-transactions-after-7a-tiny"), TALER_TESTING_cmd_insert_deposit ("do-deposit-7b", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_UNIT_ZERO, "EUR:0.119", "EUR:0.1"), CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-7-profit", config_filename), TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-7", - ec.exchange_url, + cred.exchange_url, "EUR:0.01", - bc.exchange_payto, - bc.user42_payto), + cred.exchange_payto, + cred.user42_payto), /* Now check profit was actually taken */ TALER_TESTING_cmd_insert_deposit ("do-deposit-7c", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_UNIT_ZERO, "EUR:0.122", "EUR:0.1"), CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-7-loss", config_filename), TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-7", - ec.exchange_url, + cred.exchange_url, "EUR:0.01", - bc.exchange_payto, - bc.user42_payto), + cred.exchange_payto, + cred.user42_payto), /* Test that aggregation would happen fully if wire deadline is long */ TALER_TESTING_cmd_insert_deposit ("do-deposit-8a", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5), @@ -372,9 +363,10 @@ run (void *cls, TALER_TESTING_cmd_check_bank_empty ( "expect-empty-transactions-after-8a-tiny"), TALER_TESTING_cmd_insert_deposit ("do-deposit-8b", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5), @@ -387,25 +379,27 @@ run (void *cls, /* now trigger aggregate with large transaction and short deadline */ TALER_TESTING_cmd_insert_deposit ("do-deposit-8c", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_UNIT_ZERO, "EUR:0.122", "EUR:0.1"), CMD_EXEC_AGGREGATOR ("run-aggregator-deposit-8", config_filename), TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-8", - ec.exchange_url, + cred.exchange_url, "EUR:0.03", - bc.exchange_payto, - bc.user42_payto), + cred.exchange_payto, + cred.user42_payto), /* Test aggregation with fees and rounding profits. */ TALER_TESTING_cmd_insert_deposit ("do-deposit-9a", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5), @@ -416,9 +410,10 @@ run (void *cls, TALER_TESTING_cmd_check_bank_empty ( "expect-empty-transactions-after-9a-tiny"), TALER_TESTING_cmd_insert_deposit ("do-deposit-9b", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5), @@ -431,9 +426,10 @@ run (void *cls, /* now trigger aggregate with large transaction and short deadline */ TALER_TESTING_cmd_insert_deposit ("do-deposit-9c", - &dbc, + cred.cfg, "bob", USER42_ACCOUNT, + GNUNET_TIME_timestamp_get (), GNUNET_TIME_UNIT_ZERO, "EUR:0.112", "EUR:0.1"), @@ -441,58 +437,15 @@ run (void *cls, config_filename), /* 0.009 + 0.009 + 0.022 - 0.001 - 0.002 - 0.008 = 0.029 => 0.02 */ TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-9", - ec.exchange_url, + cred.exchange_url, "EUR:0.01", - bc.exchange_payto, - bc.user42_payto), + cred.exchange_payto, + cred.user42_payto), TALER_TESTING_cmd_end () }; - GNUNET_SCHEDULER_add_shutdown (&unload_db, - NULL); - TALER_TESTING_run_with_fakebank (is, - all, - bc.exchange_auth.wire_gateway_url); -} - - -/** - * Prepare database an launch the test. - * - * @param cls unused - * @param cfg our configuration - * @return #GNUNET_NO if database could not be prepared, - * otherwise #GNUNET_OK - */ -static int -prepare_database (void *cls, - const struct GNUNET_CONFIGURATION_Handle *cfg) -{ - dbc.plugin = TALER_EXCHANGEDB_plugin_load (cfg); - if (NULL == dbc.plugin) - { - GNUNET_break (0); - result = 77; - return GNUNET_NO; - } - if (GNUNET_OK != - dbc.plugin->create_tables (dbc.plugin->cls)) - { - GNUNET_break (0); - TALER_EXCHANGEDB_plugin_unload (dbc.plugin); - dbc.plugin = NULL; - result = 77; - return GNUNET_NO; - } - dbc.session = dbc.plugin->get_session (dbc.plugin->cls); - GNUNET_assert (NULL != dbc.session); - - result = TALER_TESTING_setup (&run, - NULL, - cfg, - NULL, // no exchange process handle. - GNUNET_NO); // do not try to connect to the exchange - return GNUNET_OK; + TALER_TESTING_run (is, + all); } @@ -501,7 +454,6 @@ main (int argc, char *const argv[]) { const char *plugin_name; - char *testname; if (NULL == (plugin_name = strrchr (argv[0], (int) '-'))) { @@ -509,50 +461,17 @@ main (int argc, return -1; } plugin_name++; - (void) GNUNET_asprintf (&testname, - "test-taler-exchange-aggregator-%s", - plugin_name); (void) GNUNET_asprintf (&config_filename, - "%s.conf", - testname); - - GNUNET_log_setup ("test_taler_exchange_aggregator", - "DEBUG", - NULL); - - /* these might get in the way */ - unsetenv ("XDG_DATA_HOME"); - unsetenv ("XDG_CONFIG_HOME"); - - TALER_TESTING_cleanup_files (config_filename); - - if (GNUNET_OK != TALER_TESTING_prepare_exchange (config_filename, - GNUNET_YES, - &ec)) - { - TALER_LOG_WARNING ("Could not prepare the exchange.\n"); - return 77; - } - - if (GNUNET_OK != TALER_TESTING_prepare_fakebank (config_filename, - "exchange-account-1", - &bc)) - { - TALER_LOG_WARNING ("Could not prepare the fakebank\n"); - return 77; - } - - if (GNUNET_OK != - GNUNET_CONFIGURATION_parse_and_run (config_filename, - &prepare_database, - NULL)) - { - TALER_LOG_WARNING ("Could not prepare database for tests.\n"); - return result; - } - GNUNET_free (config_filename); - GNUNET_free (testname); - return GNUNET_OK == result ? 0 : 1; + "test-taler-exchange-aggregator-%s.conf", + plugin_name); + return TALER_TESTING_main (argv, + "INFO", + config_filename, + "exchange-account-1", + TALER_TESTING_BS_FAKEBANK, + &cred, + &run, + NULL); } |