summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2018-08-09 10:33:21 +0200
committerChristian Grothoff <christian@grothoff.org>2018-08-09 10:33:21 +0200
commitf17ad4de768e297879a6ace43f7be723ddff6b6f (patch)
tree906297edbe737f96028187d444f4d261257a4f91
parent4693708b8c53471f7bc5e956dff8158615c46deb (diff)
downloadexchange-f17ad4de768e297879a6ace43f7be723ddff6b6f.tar.gz
exchange-f17ad4de768e297879a6ace43f7be723ddff6b6f.tar.bz2
exchange-f17ad4de768e297879a6ace43f7be723ddff6b6f.zip
in parallel tests, only launch one exchange -- still broken: code attempts to launch multiple fakebanks
-rw-r--r--src/benchmark/exchange_benchmark_home/.config/taler/account-2.json4
-rw-r--r--src/benchmark/taler-exchange-benchmark.c47
-rw-r--r--src/exchange-lib/testing_api_helpers.c74
-rw-r--r--src/exchange-lib/testing_api_loop.c7
-rw-r--r--src/include/taler_testing_lib.h16
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