diff options
Diffstat (limited to 'src/exchange-lib')
| -rw-r--r-- | src/exchange-lib/testing_api_cmd_serialize_keys.c | 116 | 
1 files changed, 112 insertions, 4 deletions
| diff --git a/src/exchange-lib/testing_api_cmd_serialize_keys.c b/src/exchange-lib/testing_api_cmd_serialize_keys.c index f647a622..4b9480ab 100644 --- a/src/exchange-lib/testing_api_cmd_serialize_keys.c +++ b/src/exchange-lib/testing_api_cmd_serialize_keys.c @@ -38,6 +38,13 @@ struct SerializeKeysState     * Serialized keys.     */    json_t *keys; + +  /** +   * Exchange URL.  Needed because the exchange gets disconnected +   * from, after keys serialization.  This value is then needed by +   * subsequent commands that have to reconnect to the exchagne. +   */ +  const char *exchange_url;  }; @@ -56,9 +63,12 @@ serialize_keys_run (void *cls,    struct SerializeKeysState *sks = cls;    sks->keys = TALER_EXCHANGE_serialize_data (is->exchange); -    if (NULL == sks->keys)      TALER_TESTING_interpreter_fail (is); + +  sks->exchange_url = TALER_EXCHANGE_get_base_url (is->exchange); +  TALER_EXCHANGE_disconnect (is->exchange); +  TALER_TESTING_interpreter_next (is);  } @@ -103,8 +113,8 @@ serialize_keys_traits (void *cls,    struct TALER_TESTING_Trait traits[] = { -    TALER_TESTING_make_trait_exchange_keys (0, -                                            sks->keys), +    TALER_TESTING_make_trait_exchange_keys (0, sks->keys), +    TALER_TESTING_make_trait_url (0, sks->exchange_url),      TALER_TESTING_trait_end ()    }; @@ -115,7 +125,81 @@ serialize_keys_traits (void *cls,  }  /** - * Make a serialize-keys CMD. + * /keys callback.  Just checks HTTP status is OK, + * and step forward to next command. + * + * @param cls closure + * @param keys information about the various keys used + *        by the exchange, NULL if /keys failed + * @param compat protocol compatibility information* + */ +static void +cb (void *cls, +    const struct TALER_EXCHANGE_Keys *keys, +    enum TALER_EXCHANGE_VersionCompatibility compat) +{ +  struct TALER_TESTING_Interpreter *is = cls; + +  if (NULL == keys) +    TALER_TESTING_interpreter_fail (is); +   +  TALER_TESTING_interpreter_next (is); +} + + +/** + * Run the command. + * + * @param cls closure. + * @param cmd the command to execute. + * @param is the interpreter state. + */ +static void +connect_with_state_run (void *cls, +                        const struct TALER_TESTING_Command *cmd, +                        struct TALER_TESTING_Interpreter *is) +{ +  const struct TALER_TESTING_Command *state_cmd; +  const json_t *serialized_keys; +  const char *state_reference = cls; +  const char *exchange_url; + +  state_cmd = TALER_TESTING_interpreter_lookup_command +    (is, state_reference); + +  /* Command providing serialized keys not found.  */ +  if (NULL == state_cmd) +  { +    GNUNET_break (0); +    TALER_TESTING_interpreter_fail (is); +    return; +  } + +  GNUNET_assert +    (GNUNET_OK == TALER_TESTING_get_trait_exchange_keys +      (state_cmd, +       0, +       &serialized_keys)); + +  GNUNET_assert +  (GNUNET_OK == TALER_TESTING_get_trait_url +    (state_cmd, +     0, +     &exchange_url)); + +  is->exchange = TALER_EXCHANGE_connect (is->ctx, +                                         exchange_url, +                                         cb, +                                         is, +                                         TALER_EXCHANGE_OPTION_DATA, +                                         serialized_keys, +                                         TALER_EXCHANGE_OPTION_END); +} + +/** + * Make a serialize-keys CMD.  It will ask for + * keys serialization __and__ disconnect from the + * exchange.   *   * @param label CMD label   * @return the CMD. @@ -136,3 +220,27 @@ TALER_TESTING_cmd_serialize_keys (const char *label)    return cmd;  } + + +/** + * Make a connect-with-state CMD.  This command + * will use a serialized key state to reconnect + * to the exchange. + * + * @param label command label + * @param state_reference label of a CMD offering + *        a serialized key state. + * @return the CMD. + */ +struct TALER_TESTING_Command +TALER_TESTING_cmd_connect_with_state (const char *label, +                                      const char *state_reference) +{ +  struct TALER_TESTING_Command cmd = { +    .cls = (char *) state_reference, +    .label = label, +    .run = connect_with_state_run,  +  }; + +  return cmd; +} | 
