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 /src/exchange-lib | |
| parent | d09beecc8f5f111538208b7b8da100e0a7015cda (diff) | |
factor out more helpers
Diffstat (limited to 'src/exchange-lib')
| -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 | 
4 files changed, 177 insertions, 122 deletions
| diff --git a/src/exchange-lib/Makefile.am b/src/exchange-lib/Makefile.am index c8fc4471..2f02a6e8 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 4cf84234..2bbbe0cd 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 5f490492..36ef5c94 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 22d78670..47175fe4 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);  } | 
