diff options
author | Christian Grothoff <christian@grothoff.org> | 2018-01-21 19:11:27 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2018-01-21 19:11:27 +0100 |
commit | a252daa6a1b3fe5b22757e7aeffc502e7f098261 (patch) | |
tree | 5f442d527016b1aab5ad1929eb743440a5a303eb | |
parent | d09beecc8f5f111538208b7b8da100e0a7015cda (diff) | |
download | exchange-a252daa6a1b3fe5b22757e7aeffc502e7f098261.tar.xz |
factor out more helpers
-rw-r--r-- | src/exchange-lib/Makefile.am | 1 | ||||
-rw-r--r-- | src/exchange-lib/test_exchange_api_new.c | 135 | ||||
-rw-r--r-- | src/exchange-lib/testing_api_helpers.c | 158 | ||||
-rw-r--r-- | src/exchange-lib/testing_api_loop.c | 5 | ||||
-rw-r--r-- | src/include/taler_testing_lib.h | 31 |
5 files changed, 208 insertions, 122 deletions
diff --git a/src/exchange-lib/Makefile.am b/src/exchange-lib/Makefile.am index c8fc4471b..2f02a6e8b 100644 --- a/src/exchange-lib/Makefile.am +++ b/src/exchange-lib/Makefile.am @@ -39,6 +39,7 @@ libtalertesting_la_LDFLAGS = \ -version-info 0:0:0 \ -no-undefined libtalertesting_la_SOURCES = \ + testing_api_cmd_exec_wirewatch.c \ testing_api_cmd_fakebank_transfer.c \ testing_api_cmd_withdraw.c \ testing_api_helpers.c \ diff --git a/src/exchange-lib/test_exchange_api_new.c b/src/exchange-lib/test_exchange_api_new.c index 4cf842341..2bbbe0cda 100644 --- a/src/exchange-lib/test_exchange_api_new.c +++ b/src/exchange-lib/test_exchange_api_new.c @@ -46,6 +46,7 @@ */ #define EXCHANGE_ACCOUNT_NO 2 + /** * Handle to access the exchange. */ @@ -98,6 +99,8 @@ run (void *cls, EXCHANGE_ACCOUNT_NO, "user42", "pass42"), + TALER_TESTING_cmd_exec_wirewatch ("exec-wirewatch", + "test_exchange_api.conf"), TALER_TESTING_cmd_end () }; @@ -110,47 +113,11 @@ run (void *cls, -/** - * Remove files from previous runs - */ -static void -cleanup_files () -{ - struct GNUNET_CONFIGURATION_Handle *cfg; - char *dir; - - cfg = GNUNET_CONFIGURATION_create (); - if (GNUNET_OK != - GNUNET_CONFIGURATION_load (cfg, - "test_exchange_api.conf")) - { - GNUNET_break (0); - GNUNET_CONFIGURATION_destroy (cfg); - exit (77); - } - GNUNET_assert (GNUNET_OK == - GNUNET_CONFIGURATION_get_value_filename (cfg, - "exchange", - "keydir", - &dir)); - if (GNUNET_YES == - GNUNET_DISK_directory_test (dir, - GNUNET_NO)) - GNUNET_break (GNUNET_OK == - GNUNET_DISK_directory_remove (dir)); - GNUNET_free (dir); - GNUNET_CONFIGURATION_destroy (cfg); -} - - - - int main (int argc, char * const *argv) { struct GNUNET_OS_Process *proc; - struct GNUNET_SIGNAL_Context *shc_chld; enum GNUNET_OS_ProcessStatusType type; unsigned long code; unsigned int iter; @@ -159,18 +126,17 @@ main (int argc, /* These might get in the way... */ unsetenv ("XDG_DATA_HOME"); unsetenv ("XDG_CONFIG_HOME"); - GNUNET_log_setup ("test-exchange-api", + GNUNET_log_setup ("test-exchange-api-new", "INFO", NULL); - if (GNUNET_OK != - GNUNET_NETWORK_test_port_free (IPPROTO_TCP, - 8081)) - { - fprintf (stderr, - "Required port %u not available, skipping.\n", - 8081); + TALER_TESTING_cleanup_files ("test_exchange_api.conf"); + result = TALER_TESTING_prepare_exchange ("test_exchange_api.conf"); + if (GNUNET_SYSERR == result) + return 1; + if (GNUNET_NO == result) return 77; - } + + /* For fakebank */ if (GNUNET_OK != GNUNET_NETWORK_test_port_free (IPPROTO_TCP, 8082)) @@ -180,83 +146,7 @@ main (int argc, 8082); return 77; } - cleanup_files (); - proc = GNUNET_OS_start_process (GNUNET_NO, - GNUNET_OS_INHERIT_STD_ALL, - NULL, NULL, NULL, - "taler-exchange-keyup", - "taler-exchange-keyup", - "-c", "test_exchange_api.conf", - "-o", "auditor.in", - NULL); - if (NULL == proc) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Failed to run `taler-exchange-keyup`, is your PATH correct?\n"); - return 77; - } - GNUNET_OS_process_wait (proc); - GNUNET_OS_process_destroy (proc); - - proc = GNUNET_OS_start_process (GNUNET_NO, - GNUNET_OS_INHERIT_STD_ALL, - NULL, NULL, NULL, - "taler-auditor-sign", - "taler-auditor-sign", - "-c", "test_exchange_api.conf", - "-u", "http://auditor/", - "-m", "98NJW3CQHZQGQXTY3K85K531XKPAPAVV4Q5V8PYYRR00NJGZWNVG", - "-r", "auditor.in", - "-o", "test_exchange_api_home/.local/share/taler/auditors/auditor.out", - NULL); - if (NULL == proc) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Failed to run `taler-exchange-keyup`, is your PATH correct?\n"); - return 77; - } - GNUNET_OS_process_wait (proc); - GNUNET_OS_process_destroy (proc); - - proc = GNUNET_OS_start_process (GNUNET_NO, - GNUNET_OS_INHERIT_STD_ALL, - NULL, NULL, NULL, - "taler-exchange-dbinit", - "taler-exchange-dbinit", - "-c", "test_exchange_api.conf", - "-r", - NULL); - if (NULL == proc) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Failed to run `taler-exchange-dbinit`, is your PATH correct?\n"); - return 77; - } - if (GNUNET_SYSERR == - GNUNET_OS_process_wait_status (proc, - &type, - &code)) - { - GNUNET_break (0); - GNUNET_OS_process_destroy (proc); - return 1; - } - GNUNET_OS_process_destroy (proc); - if ( (type == GNUNET_OS_PROCESS_EXITED) && - (0 != code) ) - { - fprintf (stderr, - "Failed to setup database\n"); - return 77; - } - if ( (type != GNUNET_OS_PROCESS_EXITED) || - (0 != code) ) - { - fprintf (stderr, - "Unexpected error running `taler-exchange-dbinit'!\n"); - return 1; - } exchanged = GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_ALL, NULL, NULL, NULL, @@ -288,7 +178,8 @@ main (int argc, while (0 != system ("wget -q -t 1 -T 1 http://127.0.0.1:8081/keys -o /dev/null -O /dev/null")); fprintf (stderr, "\n"); - result = TALER_TESTING_setup (&run, NULL); + result = TALER_TESTING_setup (&run, + NULL); GNUNET_break (0 == GNUNET_OS_process_kill (exchanged, SIGTERM)); diff --git a/src/exchange-lib/testing_api_helpers.c b/src/exchange-lib/testing_api_helpers.c index 5f4904927..36ef5c942 100644 --- a/src/exchange-lib/testing_api_helpers.c +++ b/src/exchange-lib/testing_api_helpers.c @@ -30,6 +30,164 @@ /** + * Remove files from previous runs + */ +void +TALER_TESTING_cleanup_files (const char *config_name) +{ + struct GNUNET_CONFIGURATION_Handle *cfg; + char *dir; + + cfg = GNUNET_CONFIGURATION_create (); + if (GNUNET_OK != + GNUNET_CONFIGURATION_load (cfg, + config_name)) + { + GNUNET_break (0); + GNUNET_CONFIGURATION_destroy (cfg); + exit (77); + } + GNUNET_assert (GNUNET_OK == + GNUNET_CONFIGURATION_get_value_filename (cfg, + "exchange", + "keydir", + &dir)); + if (GNUNET_YES == + GNUNET_DISK_directory_test (dir, + GNUNET_NO)) + GNUNET_break (GNUNET_OK == + GNUNET_DISK_directory_remove (dir)); + GNUNET_free (dir); + GNUNET_CONFIGURATION_destroy (cfg); +} + + +/** + * Prepare launching an exchange. Checks that the configured + * port is available, runs taler-exchange-keyup, + * taler-auditor-sign and taler-exchange-dbinit. Does not + * launch the exchange process itself. + * + * @param config_filename configuration file to use + * @return #GNUNET_OK on success, #GNUNET_NO if test should be skipped, + * #GNUNET_SYSERR on test failure + */ +int +TALER_TESTING_prepare_exchange (const char *config_filename) +{ + struct GNUNET_OS_Process *proc; + enum GNUNET_OS_ProcessStatusType type; + unsigned long code; + struct GNUNET_CONFIGURATION_Handle *cfg; + unsigned long long port; + + cfg = GNUNET_CONFIGURATION_create (); + if (GNUNET_OK != + GNUNET_CONFIGURATION_load (cfg, + config_filename)) + return GNUNET_NO; + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_number (cfg, + "exchange", + "PORT", + &port)) + { + GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, + "exchange", + "PORT"); + return GNUNET_NO; + } + GNUNET_CONFIGURATION_destroy (cfg); + if (GNUNET_OK != + GNUNET_NETWORK_test_port_free (IPPROTO_TCP, + (uint16_t) port)) + { + fprintf (stderr, + "Required port %llu not available, skipping.\n", + port); + return GNUNET_NO; + } + + proc = GNUNET_OS_start_process (GNUNET_NO, + GNUNET_OS_INHERIT_STD_ALL, + NULL, NULL, NULL, + "taler-exchange-keyup", + "taler-exchange-keyup", + "-c", "test_exchange_api.conf", + "-o", "auditor.in", + NULL); + if (NULL == proc) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Failed to run `taler-exchange-keyup`, is your PATH correct?\n"); + return GNUNET_NO; + } + GNUNET_OS_process_wait (proc); + GNUNET_OS_process_destroy (proc); + + proc = GNUNET_OS_start_process (GNUNET_NO, + GNUNET_OS_INHERIT_STD_ALL, + NULL, NULL, NULL, + "taler-auditor-sign", + "taler-auditor-sign", + "-c", "test_exchange_api.conf", + "-u", "http://auditor/", + "-m", "98NJW3CQHZQGQXTY3K85K531XKPAPAVV4Q5V8PYYRR00NJGZWNVG", + "-r", "auditor.in", + "-o", "test_exchange_api_home/.local/share/taler/auditors/auditor.out", + NULL); + if (NULL == proc) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Failed to run `taler-exchange-keyup`, is your PATH correct?\n"); + return GNUNET_NO; + } + GNUNET_OS_process_wait (proc); + GNUNET_OS_process_destroy (proc); + + proc = GNUNET_OS_start_process (GNUNET_NO, + GNUNET_OS_INHERIT_STD_ALL, + NULL, NULL, NULL, + "taler-exchange-dbinit", + "taler-exchange-dbinit", + "-c", "test_exchange_api.conf", + "-r", + NULL); + if (NULL == proc) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Failed to run `taler-exchange-dbinit`, is your PATH correct?\n"); + return GNUNET_NO; + } + if (GNUNET_SYSERR == + GNUNET_OS_process_wait_status (proc, + &type, + &code)) + { + GNUNET_break (0); + GNUNET_OS_process_destroy (proc); + return GNUNET_SYSERR; + } + GNUNET_OS_process_destroy (proc); + if ( (type == GNUNET_OS_PROCESS_EXITED) && + (0 != code) ) + { + fprintf (stderr, + "Failed to setup database\n"); + return GNUNET_NO; + } + if ( (type != GNUNET_OS_PROCESS_EXITED) || + (0 != code) ) + { + fprintf (stderr, + "Unexpected error running `taler-exchange-dbinit'!\n"); + return GNUNET_SYSERR; + } + return GNUNET_OK; +} + + +/** * Find denomination key matching the given amount. * * @param keys array of keys to search diff --git a/src/exchange-lib/testing_api_loop.c b/src/exchange-lib/testing_api_loop.c index 22d786703..47175fe47 100644 --- a/src/exchange-lib/testing_api_loop.c +++ b/src/exchange-lib/testing_api_loop.c @@ -253,6 +253,11 @@ do_shutdown (void *cls) GNUNET_SCHEDULER_cancel (is->timeout_task); is->timeout_task = NULL; } + if (NULL != is->child_death_task) + { + GNUNET_SCHEDULER_cancel (is->child_death_task); + is->child_death_task = NULL; + } GNUNET_free_non_null (is->commands); } diff --git a/src/include/taler_testing_lib.h b/src/include/taler_testing_lib.h index 8e1191685..5643572ff 100644 --- a/src/include/taler_testing_lib.h +++ b/src/include/taler_testing_lib.h @@ -43,6 +43,28 @@ TALER_TESTING_find_pk (const struct TALER_EXCHANGE_Keys *keys, const struct TALER_Amount *amount); +/** + * Prepare launching an exchange. Checks that the configured + * port is available, runs taler-exchange-keyup, + * taler-auditor-sign and taler-exchange-dbinit. Does not + * launch the exchange process itself. + * + * @param config_filename configuration file to use + * @return #GNUNET_OK on success, #GNUNET_NO if test should be skipped, + * #GNUNET_SYSERR on test failure + */ +int +TALER_TESTING_prepare_exchange (const char *config_filename); + + +/** + * Remove files from previous runs + */ +void +TALER_TESTING_cleanup_files (const char *config_name); + + + /* ******************* Generic interpreter logic ****************** */ /** @@ -209,6 +231,15 @@ TALER_TESTING_cmd_fakebank_transfer (const char *label, /** + * Execute taler-exchange-wirewatch process. + * + */ +struct TALER_TESTING_Command +TALER_TESTING_cmd_exec_wirewatch (const char *label, + const char *config_filename); + + +/** * Create withdraw command. * * @return NULL on failure |