diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/include/taler_testing_lib.h | 16 | ||||
| -rw-r--r-- | src/testing/Makefile.am | 1 | ||||
| -rw-r--r-- | src/testing/testing_api_cmd_change_auth.c | 154 | 
3 files changed, 171 insertions, 0 deletions
| diff --git a/src/include/taler_testing_lib.h b/src/include/taler_testing_lib.h index 49767534..c0a76c44 100644 --- a/src/include/taler_testing_lib.h +++ b/src/include/taler_testing_lib.h @@ -575,6 +575,7 @@ TALER_TESTING_interpreter_lookup_command (struct TALER_TESTING_Interpreter *is,  struct GNUNET_CURL_Context *  TALER_TESTING_interpreter_get_context (struct TALER_TESTING_Interpreter *is); +  /**   * Obtain label of the command being now run.   * @@ -932,6 +933,21 @@ TALER_TESTING_has_in_name (const char *prog,  /** + * Command to modify authorization header used in the CURL context. + * This will destroy the existing CURL context and create a fresh + * one. The command will fail (badly) if the existing CURL context + * still has active HTTP requests associated with it. + * + * @param label command label. + * @param auth_token auth token to use henceforth, can be NULL + * @return the command. + */ +struct TALER_TESTING_Command +TALER_TESTING_cmd_set_authorization (const char *label, +                                     const char *auth_token); + + +/**   * Make a credit "history" CMD.   *   * @param label command label. diff --git a/src/testing/Makefile.am b/src/testing/Makefile.am index d7d6a7ff..7042f243 100644 --- a/src/testing/Makefile.am +++ b/src/testing/Makefile.am @@ -52,6 +52,7 @@ libtalertesting_la_SOURCES = \    testing_api_cmd_bank_history_debit.c \    testing_api_cmd_bank_transfer.c \    testing_api_cmd_batch.c \ +  testing_api_cmd_change_auth.c \    testing_api_cmd_check_keys.c \    testing_api_cmd_deposit.c \    testing_api_cmd_deposits_get.c \ diff --git a/src/testing/testing_api_cmd_change_auth.c b/src/testing/testing_api_cmd_change_auth.c new file mode 100644 index 00000000..f79170f8 --- /dev/null +++ b/src/testing/testing_api_cmd_change_auth.c @@ -0,0 +1,154 @@ +/* +  This file is part of TALER +  (C) 2018 Taler Systems SA + +  TALER is free software; you can redistribute it and/or modify +  it under the terms of the GNU General Public License as +  published by the Free Software Foundation; either version 3, or +  (at your option) any later version. + +  TALER is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +  GNU General Public License for more details. + +  You should have received a copy of the GNU General Public +  License along with TALER; see the file COPYING.  If not, see +  <http://www.gnu.org/licenses/> +*/ +/** + * @file testing/testing_api_change_auth.c + * @brief command(s) to change CURL context authorization header + * @author Christian Grothoff + */ +#include "platform.h" +#include "taler_json_lib.h" +#include <gnunet/gnunet_curl_lib.h> +#include "taler_testing_lib.h" + + +/** + * State for a "authchange" CMD. + */ +struct AuthchangeState +{ + +  /** +   * What is the new authorization token to send? +   */ +  const char *auth_token; +}; + + +/** + * No traits to offer, just provide a stub to be called when + * some CMDs iterates through the list of all the commands. + * + * @param cls closure. + * @param[out] ret result. + * @param trait name of the trait. + * @param index index number of the trait to return. + * @return #GNUNET_OK on success. + */ +static int +authchange_traits (void *cls, +                   const void **ret, +                   const char *trait, +                   unsigned int index) +{ +  (void) cls; +  (void) ret; +  (void) trait; +  (void) index; +  return GNUNET_NO; +} + + +/** + * Run the command. + * + * @param cls closure. + * @param cmd the command to execute. + * @param is the interpreter state. + */ +static void +authchange_run (void *cls, +                const struct TALER_TESTING_Command *cmd, +                struct TALER_TESTING_Interpreter *is) +{ +  struct AuthchangeState *ss = cls; + +  if (NULL != is->ctx) +  { +    GNUNET_CURL_fini (is->ctx); +    is->ctx = NULL; +  } +  if (NULL != is->rc) +  { +    GNUNET_CURL_gnunet_rc_destroy (is->rc); +    is->rc = NULL; +  } +  is->ctx = GNUNET_CURL_init (&GNUNET_CURL_gnunet_scheduler_reschedule, +                              &is->rc); +  GNUNET_CURL_enable_async_scope_header (is->ctx, +                                         "Taler-Correlation-Id"); +  GNUNET_assert (NULL != is->ctx); +  is->rc = GNUNET_CURL_gnunet_rc_create (is->ctx); +  if (NULL != ss->auth_token) +  { +    char *authorization; + +    GNUNET_asprintf (&authorization, +                     "%s: %s", +                     MHD_HTTP_HEADER_AUTHORIZATION, +                     ss->auth_token); +    GNUNET_assert (GNUNET_OK == +                   GNUNET_CURL_append_header (is->ctx, +                                              authorization)); +    GNUNET_free (authorization); +  } +  TALER_TESTING_interpreter_next (is); +} + + +/** + * Cleanup the state from a "authchange" CMD. + * + * @param cls closure. + * @param cmd the command which is being cleaned up. + */ +static void +authchange_cleanup (void *cls, +                    const struct TALER_TESTING_Command *cmd) +{ +  struct AuthchangeState *ss = cls; + +  (void) cmd; +  GNUNET_free (ss); +} + + +struct TALER_TESTING_Command +TALER_TESTING_cmd_set_authorization (const char *label, +                                     const char *auth_token) +{ +  struct AuthchangeState *ss; + +  ss = GNUNET_new (struct AuthchangeState); +  ss->auth_token = auth_token; + +  { +    struct TALER_TESTING_Command cmd = { +      .cls = ss, +      .label = label, +      .run = &authchange_run, +      .cleanup = &authchange_cleanup, +      .traits = &authchange_traits +    }; + +    return cmd; +  } +} + + +/* end of testing_api_cmd_change_auth.c  */ | 
