aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcello Stanisci <stanisci.m@gmail.com>2018-12-21 15:03:58 +0100
committerMarcello Stanisci <stanisci.m@gmail.com>2018-12-21 15:03:58 +0100
commit615d35407b4b06e8a5793d6c8d7f3a14179d17fd (patch)
tree6c8ef0767ab02030a798d52a2d86be624a86b775
parentdf6eda3994236a29f961d473308c44d5fb85e187 (diff)
#5136.
Adding CMD that reconnects to a exchange, using serialized keys.
-rw-r--r--src/exchange-lib/testing_api_cmd_serialize_keys.c116
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 f647a6224..4b9480ab6 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;
+}