diff options
author | Christian Grothoff <christian@grothoff.org> | 2018-08-09 10:33:21 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2018-08-09 10:33:21 +0200 |
commit | f17ad4de768e297879a6ace43f7be723ddff6b6f (patch) | |
tree | 906297edbe737f96028187d444f4d261257a4f91 /src | |
parent | 4693708b8c53471f7bc5e956dff8158615c46deb (diff) |
in parallel tests, only launch one exchange -- still broken: code attempts to launch multiple fakebanks
Diffstat (limited to 'src')
-rw-r--r-- | src/benchmark/exchange_benchmark_home/.config/taler/account-2.json | 4 | ||||
-rw-r--r-- | src/benchmark/taler-exchange-benchmark.c | 47 | ||||
-rw-r--r-- | src/exchange-lib/testing_api_helpers.c | 74 | ||||
-rw-r--r-- | src/exchange-lib/testing_api_loop.c | 7 | ||||
-rw-r--r-- | src/include/taler_testing_lib.h | 16 |
5 files changed, 95 insertions, 53 deletions
diff --git a/src/benchmark/exchange_benchmark_home/.config/taler/account-2.json b/src/benchmark/exchange_benchmark_home/.config/taler/account-2.json index dabd5092f..b320bd946 100644 --- a/src/benchmark/exchange_benchmark_home/.config/taler/account-2.json +++ b/src/benchmark/exchange_benchmark_home/.config/taler/account-2.json @@ -1,5 +1,5 @@ { "url": "payto://x-taler-bank/localhost:8082/2", - "salt": "V7S6Y75HPSFGKXET03NHS3SDEST5Q0XNX9WYCXRRRNRHPBVSD86Y1A7ZR5KR7105JN3XDBTKWDD3WQZ9XA2MJKD020APECA0P61FFBG", - "master_sig": "H61WAQKG8F9W25SZNVF1JPNYG0BFYXPN65D936TT44ZC0JT849R8YNC0CFPJBQX77EW51DCR0864DC82A4J2AF7H55DSVVMWVYEZR1R" + "salt": "NYZ2WR8CPT5PB58X10EZDJDY3MSWHAHTD0M99JJH54Z0A916NTX4P4AF5Y3KPGRYEVX3TV7J2ZG6PKZSKFYMSKMHCN83ZT3V2216YP8", + "master_sig": "0RF7GBGKGJQ0ZQVP0HJ516CC882RV6HVJZABN5S1YMF6WD94QJJRZSTFB669QTNW63DPRP0YYJ0RGCNXA3AHQ1HGYDGAMZX0S983020" }
\ No newline at end of file diff --git a/src/benchmark/taler-exchange-benchmark.c b/src/benchmark/taler-exchange-benchmark.c index 5039a96f5..a5528fff5 100644 --- a/src/benchmark/taler-exchange-benchmark.c +++ b/src/benchmark/taler-exchange-benchmark.c @@ -327,7 +327,6 @@ run (void *cls, 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 */ @@ -353,19 +352,14 @@ run (void *cls, 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", @@ -379,18 +373,15 @@ run (void *cls, 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, @@ -424,22 +415,20 @@ run (void *cls, 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 (); + else + unit[2] = TALER_TESTING_cmd_end (); all_commands[1 + i] = TALER_TESTING_cmd_batch ("unit", unit); @@ -473,17 +462,37 @@ parallel_benchmark (TALER_TESTING_Main main_cb, int result; pid_t cpids[howmany_clients]; int wstatus; - + struct GNUNET_OS_Process *exchanged; + + exchanged = GNUNET_OS_start_process (GNUNET_NO, + GNUNET_OS_INHERIT_STD_ALL, + NULL, NULL, NULL, + "taler-exchange-httpd", + "taler-exchange-httpd", + "-c", config_file, + "-i", + NULL); + if (NULL == exchanged) + return GNUNET_SYSERR; + if (0 != TALER_TESTING_wait_exchange_ready (exchange_url)) + { + GNUNET_OS_process_kill (exchanged, + SIGTERM); + GNUNET_OS_process_wait (exchanged); + GNUNET_OS_process_destroy (exchanged); + return 77; + } result = GNUNET_OK; for (unsigned int i=0;i<howmany_clients;i++) { if (0 == (cpids[i] = fork ())) { /* I am the child, do the work! */ - result = TALER_TESTING_setup_with_exchange + result = TALER_TESTING_setup (run, NULL, - cfg_filename); + cfg_filename, + exchanged); if (GNUNET_OK == result) exit (0); else @@ -509,6 +518,12 @@ parallel_benchmark (TALER_TESTING_Main main_cb, (0 != WEXITSTATUS (wstatus)) ) result = GNUNET_SYSERR; } + GNUNET_break (0 == + GNUNET_OS_process_kill (exchanged, + SIGTERM)); + GNUNET_break (GNUNET_OK == + GNUNET_OS_process_wait (exchanged)); + GNUNET_OS_process_destroy (exchanged); return result; } diff --git a/src/exchange-lib/testing_api_helpers.c b/src/exchange-lib/testing_api_helpers.c index d0efae390..bcdb44305 100644 --- a/src/exchange-lib/testing_api_helpers.c +++ b/src/exchange-lib/testing_api_helpers.c @@ -338,6 +338,47 @@ TALER_TESTING_find_pk (const struct TALER_EXCHANGE_Keys *keys, /** + * Wait for the exchange to have started. Waits for at + * most 10s, after that returns 77 to indicate an error. + * + * @param base_url what URL should we expect the exchange + * to be running at + * @return 0 on success + */ +int +TALER_TESTING_wait_exchange_ready (const char *base_url) +{ + char *wget_cmd; + unsigned int iter; + + GNUNET_asprintf (&wget_cmd, + "wget -q -t 1 -T 1 %skeys" + " -o /dev/null -O /dev/null", + base_url); // make sure ends with '/' + /* give child time to start and bind against the socket */ + fprintf (stderr, + "Waiting for `taler-exchange-httpd' to be ready\n"); + iter = 0; + do + { + if (10 == iter) + { + fprintf (stderr, + "Failed to launch `taler-exchange-httpd' (or `wget')\n"); + GNUNET_free (wget_cmd); + return 77; + } + fprintf (stderr, ".\n"); + sleep (1); + iter++; + } + while (0 != system (wget_cmd)); + GNUNET_free (wget_cmd); + return 0; +} + + +/** * Initialize scheduler loop and curl context for the testcase * including starting and stopping the exchange using the given * configuration file. @@ -356,12 +397,10 @@ TALER_TESTING_setup_with_exchange (TALER_TESTING_Main main_cb, const char *config_filename) { int result; - unsigned int iter; struct GNUNET_OS_Process *exchanged; struct GNUNET_CONFIGURATION_Handle *cfg; unsigned long long port; char *serve; - char *wget_cmd; char *base_url; cfg = GNUNET_CONFIGURATION_create (); @@ -397,7 +436,7 @@ TALER_TESTING_setup_with_exchange (TALER_TESTING_Main main_cb, GNUNET_CONFIGURATION_destroy (cfg); return GNUNET_NO; } - + if (GNUNET_OK != GNUNET_NETWORK_test_port_free (IPPROTO_TCP, (uint16_t) port)) @@ -431,33 +470,8 @@ TALER_TESTING_setup_with_exchange (TALER_TESTING_Main main_cb, } GNUNET_CONFIGURATION_destroy (cfg); - GNUNET_asprintf (&wget_cmd, - "wget -q -t 1 -T 1 %skeys" - " -o /dev/null -O /dev/null", - base_url); // make sure ends with '/' - - /* give child time to start and bind against the socket */ - fprintf (stderr, - "Waiting for `taler-exchange-httpd' to be ready\n"); - iter = 0; - do - { - if (10 == iter) - { - fprintf (stderr, - "Failed to launch `taler-exchange-httpd'" - " (or `wget')\n"); - GNUNET_OS_process_kill (exchanged, - SIGTERM); - GNUNET_OS_process_wait (exchanged); - GNUNET_OS_process_destroy (exchanged); - return 77; - } - fprintf (stderr, ".\n"); - sleep (1); - iter++; - } - while (0 != system (wget_cmd)); + if (0 != TALER_TESTING_wait_exchange_ready (base_url)) + return 77; /* NOTE: this blocks. */ result = TALER_TESTING_setup (main_cb, diff --git a/src/exchange-lib/testing_api_loop.c b/src/exchange-lib/testing_api_loop.c index 54323d6b4..29cafe948 100644 --- a/src/exchange-lib/testing_api_loop.c +++ b/src/exchange-lib/testing_api_loop.c @@ -78,7 +78,7 @@ TALER_TESTING_interpreter_lookup_command for (unsigned int i=0; NULL != (cmd = &batch[i])->label; - i++) + i++) { if ( (NULL != cmd->label) && (0 == strcmp (cmd->label, @@ -181,7 +181,7 @@ TALER_TESTING_interpreter_next (struct TALER_TESTING_Interpreter *is) GNUNET_assert (GNUNET_OK == TALER_TESTING_get_trait_cmd (cmd, CURRENT_BATCH_SUBCMD_INDEX, &sub_cmd)); - + if (NULL == sub_cmd->label) is->ip++; } @@ -520,7 +520,7 @@ sighandler_child_death () * @param keys the exchange's keys. * @param compat protocol compatibility information. */ -void +static void cert_cb (void *cls, const struct TALER_EXCHANGE_Keys *keys, enum TALER_EXCHANGE_VersionCompatibility compat) @@ -562,6 +562,7 @@ cert_cb (void *cls, main_ctx->is); } + /** * Initialize scheduler loop and curl context for the testcase, * and responsible to run the "run" method. diff --git a/src/include/taler_testing_lib.h b/src/include/taler_testing_lib.h index 694db70fe..708d73405 100644 --- a/src/include/taler_testing_lib.h +++ b/src/include/taler_testing_lib.h @@ -114,6 +114,18 @@ TALER_TESTING_prepare_exchange (const char *config_filename, /** + * Wait for the exchange to have started. Waits for at + * most 10s, after that returns 77 to indicate an error. + * + * @param base_url what URL should we expect the exchange + * to be running at + * @return 0 on success + */ +int +TALER_TESTING_wait_exchange_ready (const char *base_url); + + +/** * Remove files from previous runs */ void @@ -1241,7 +1253,7 @@ TALER_TESTING_get_trait_process /** * Offer location where a command stores a pointer to a process. - * + * * @param index offered location index number, in case there are * multiple on offer. * @param processp process location to offer. @@ -1501,7 +1513,7 @@ TALER_TESTING_get_trait_contract_terms * * @param index contract terms index number. * @param contract_terms contract terms to offer. - * + * * @return the trait. */ struct TALER_TESTING_Trait |