summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bank-lib/fakebank.c56
-rw-r--r--src/bank-lib/test_bank_api_twisted.c4
-rw-r--r--src/bank-lib/test_bank_api_with_fakebank_twisted.c20
-rw-r--r--src/include/taler_testing_lib.h13
-rw-r--r--src/lib/test_exchange_api_twisted.c2
-rw-r--r--src/lib/testing_api_cmd_sleep.c119
6 files changed, 198 insertions, 16 deletions
diff --git a/src/bank-lib/fakebank.c b/src/bank-lib/fakebank.c
index 9915516c..1220fa05 100644
--- a/src/bank-lib/fakebank.c
+++ b/src/bank-lib/fakebank.c
@@ -587,6 +587,7 @@ handle_reject (struct TALER_FAKEBANK_Handle *h,
return ret;
}
+
/**
* Handle incoming HTTP request for /history
*
@@ -596,9 +597,40 @@ handle_reject (struct TALER_FAKEBANK_Handle *h,
* @return MHD result code
*/
static int
-handle_history_new (struct TALER_FAKEBANK_Handle *h,
- struct MHD_Connection *connection,
- void **con_cls)
+handle_home_page (struct TALER_FAKEBANK_Handle *h,
+ struct MHD_Connection *connection,
+ void **con_cls)
+{
+ int ret;
+ struct MHD_Response *resp;
+#define HELLOMSG "Hello, Fakebank!"
+
+ resp = MHD_create_response_from_buffer
+ (strlen (HELLOMSG),
+ HELLOMSG,
+ MHD_RESPMEM_MUST_COPY);
+
+ ret = MHD_queue_response (connection,
+ MHD_HTTP_OK,
+ resp);
+
+ MHD_destroy_response (resp);
+ return ret;
+}
+
+
+/**
+ * Handle incoming HTTP request for /history
+ *
+ * @param h the fakebank handle
+ * @param connection the connection
+ * @param con_cls place to store state, not used
+ * @return MHD result code
+ */
+static int
+handle_history (struct TALER_FAKEBANK_Handle *h,
+ struct MHD_Connection *connection,
+ void **con_cls)
{
struct HistoryArgs ha;
struct HistoryRangeIds hri;
@@ -763,6 +795,18 @@ handle_mhd_request (void *cls,
{
struct TALER_FAKEBANK_Handle *h = cls;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Fakebank, serving: %s\n",
+ url);
+
+
+ if ( (0 == strcasecmp (url,
+ "/")) &&
+ (0 == strcasecmp (method,
+ MHD_HTTP_METHOD_GET)) )
+ return handle_home_page (h,
+ connection,
+ con_cls);
if ( (0 == strcasecmp (url,
"/admin/add/incoming")) &&
(0 == strcasecmp (method,
@@ -792,9 +836,9 @@ handle_mhd_request (void *cls,
"/history")) &&
(0 == strcasecmp (method,
MHD_HTTP_METHOD_GET)) )
- return handle_history_new (h,
- connection,
- con_cls);
+ return handle_history (h,
+ connection,
+ con_cls);
/* Unexpected URL path, just close the connection. */
/* we're rather impolite here, but it's a testcase. */
diff --git a/src/bank-lib/test_bank_api_twisted.c b/src/bank-lib/test_bank_api_twisted.c
index 6d551eb6..d01dbad9 100644
--- a/src/bank-lib/test_bank_api_twisted.c
+++ b/src/bank-lib/test_bank_api_twisted.c
@@ -82,6 +82,10 @@ run (void *cls,
struct TALER_TESTING_Interpreter *is)
{
struct TALER_TESTING_Command commands[] = {
+
+ TALER_TESTING_cmd_wait_service ("wait-service",
+ "http://localhost:8888/"),
+
TALER_TESTING_cmd_bank_history ("history-0",
TWISTED_BANK_URL,
EXCHANGE_ACCOUNT_NUMBER,
diff --git a/src/bank-lib/test_bank_api_with_fakebank_twisted.c b/src/bank-lib/test_bank_api_with_fakebank_twisted.c
index 83838172..4cf500fb 100644
--- a/src/bank-lib/test_bank_api_with_fakebank_twisted.c
+++ b/src/bank-lib/test_bank_api_with_fakebank_twisted.c
@@ -75,18 +75,23 @@ static void
run (void *cls,
struct TALER_TESTING_Interpreter *is)
{
+
struct TALER_TESTING_Command commands[] = {
+
+ /**
+ * Can't use the "wait service" CMD here because the
+ * fakebank runs inside the same process of the test.
+ */
+ TALER_TESTING_cmd_sleep ("wait interface",
+ 2),
+
TALER_TESTING_cmd_bank_history ("history-0",
- twister_url,
+ TWISTED_BANK_URL,
EXCHANGE_ACCOUNT_NUMBER,
TALER_BANK_DIRECTION_BOTH,
GNUNET_NO,
NULL,
5),
- /**
- * End the suite. Fixme: better to have a label for this
- * too, as it shows a "(null)" token on logs.
- */
TALER_TESTING_cmd_end ()
};
@@ -120,8 +125,9 @@ main (int argc,
unsetenv ("XDG_DATA_HOME");
unsetenv ("XDG_CONFIG_HOME");
- GNUNET_log_setup ("test-bank-api-twisted",
- "DEBUG", NULL);
+ GNUNET_log_setup ("test-bank-api-with-fakebank-twisted",
+ "DEBUG",
+ NULL);
if (NULL == (fakebank_url = TALER_TESTING_prepare_fakebank
(CONFIG_FILE,
diff --git a/src/include/taler_testing_lib.h b/src/include/taler_testing_lib.h
index 31180c30..99be529b 100644
--- a/src/include/taler_testing_lib.h
+++ b/src/include/taler_testing_lib.h
@@ -1442,6 +1442,19 @@ TALER_TESTING_cmd_sleep (const char *label,
/**
+ * This CMD simply tries to connect via HTTP to the
+ * service addressed by @a url. It attemps 10 times
+ * before giving up and make the test fail.
+ *
+ * @param label label for the command.
+ * @param url complete URL to connect to.
+ */
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_wait_service (const char *label,
+ const char *url);
+
+
+/**
* Make a "check keys" command. This type of command
* checks whether the number of denomination keys from
* @a exchange matches @a num_denom_keys.
diff --git a/src/lib/test_exchange_api_twisted.c b/src/lib/test_exchange_api_twisted.c
index 7cc63c2c..74d84820 100644
--- a/src/lib/test_exchange_api_twisted.c
+++ b/src/lib/test_exchange_api_twisted.c
@@ -144,8 +144,6 @@ static void
run (void *cls,
struct TALER_TESTING_Interpreter *is)
{
-
-
/**
* This batch aims to trigger the 409 Conflict
* response from a refresh-reveal operation.
diff --git a/src/lib/testing_api_cmd_sleep.c b/src/lib/testing_api_cmd_sleep.c
index 165d0aae..188671be 100644
--- a/src/lib/testing_api_cmd_sleep.c
+++ b/src/lib/testing_api_cmd_sleep.c
@@ -40,6 +40,25 @@ struct SleepState
unsigned int duration;
};
+/**
+ * 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 ret[out] result.
+ * @param trait name of the trait.
+ * @param index index number of the trait to return.
+ *
+ * @return #GNUNET_OK on success.
+ */
+static int
+sleep_traits (void *cls,
+ const void **ret,
+ const char *trait,
+ unsigned int index)
+{
+ return GNUNET_NO;
+}
/**
* Run the command.
@@ -97,8 +116,106 @@ TALER_TESTING_cmd_sleep (const char *label,
.cls = ss,
.label = label,
.run = &sleep_run,
- .cleanup = &sleep_cleanup
+ .cleanup = &sleep_cleanup,
+ .traits = &sleep_traits
};
return cmd;
}
+
+/**
+ * Cleanup the state from a "wait service" CMD.
+ *
+ * @param cls closure.
+ * @param cmd the command which is being cleaned up.
+ */
+static void
+wait_service_cleanup (void *cls,
+ const struct TALER_TESTING_Command *cmd)
+{
+ /* nothing to clean. */
+ return;
+}
+
+/**
+ * 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 ret[out] result.
+ * @param trait name of the trait.
+ * @param index index number of the trait to return.
+ *
+ * @return #GNUNET_OK on success.
+ */
+static int
+wait_service_traits (void *cls,
+ const void **ret,
+ const char *trait,
+ unsigned int index)
+{
+ return GNUNET_NO;
+}
+
+/**
+ * Run a "wait service" CMD.
+ *
+ * @param cls closure.
+ * @param cmd the command being run.
+ * @param is the interpreter state.
+ */
+static void
+wait_service_run (void *cls,
+ const struct TALER_TESTING_Command *cmd,
+ struct TALER_TESTING_Interpreter *is)
+{
+ unsigned int iter = 0;
+ const char *url = cmd->cls;
+ char *wget_cmd;
+
+ GNUNET_asprintf (&wget_cmd,
+ "wget -q -t 1 -T 1 %s\n",
+ url);
+ do
+ {
+ fprintf (stderr, ".");
+
+ if (10 == iter++)
+ {
+ TALER_LOG_ERROR ("Could not reach the proxied service\n");
+ TALER_TESTING_interpreter_fail (is);
+ GNUNET_free (wget_cmd);
+ return;
+ }
+ }
+ while (0 != system (wget_cmd));
+
+ GNUNET_free (wget_cmd);
+ TALER_TESTING_interpreter_next (is);
+}
+
+
+/**
+ * This CMD simply tries to connect via HTTP to the
+ * service addressed by @a url. It attemps 10 times
+ * before giving up and make the test fail.
+ *
+ * @param label label for the command.
+ * @param url complete URL to connect to.
+ */
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_wait_service (const char *label,
+ const char *url)
+{
+ struct TALER_TESTING_Command cmd = {
+ .label = label,
+ .run = wait_service_run,
+ .cleanup = wait_service_cleanup,
+ .traits = wait_service_traits,
+ .cls = (void *) url
+ };
+
+ return cmd;
+}
+
+/* end of testing_api_cmd_sleep.c */