aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/include/taler_merchant_testing_lib.h31
-rw-r--r--src/testing/Makefile.am1
-rw-r--r--src/testing/testing_api_cmd_delete_transfer.c202
-rw-r--r--src/testing/testing_api_cmd_get_transfers.c3
-rw-r--r--src/testing/testing_api_cmd_post_transfers.c19
5 files changed, 256 insertions, 0 deletions
diff --git a/src/include/taler_merchant_testing_lib.h b/src/include/taler_merchant_testing_lib.h
index bfc407cb..51dbb856 100644
--- a/src/include/taler_merchant_testing_lib.h
+++ b/src/include/taler_merchant_testing_lib.h
@@ -997,6 +997,19 @@ TALER_TESTING_cmd_merchant_post_transfer (
/**
+ * We have discovered the @a serial for a POST transfer
+ * command. Store it (for the bank row trait).
+ *
+ * @param cmd command to update
+ * @param serial serial number to store (identifies the row)
+ */
+void
+TALER_TESTING_cmd_merchant_post_transfer_set_serial (
+ struct TALER_TESTING_Command *cmd,
+ uint64_t serial);
+
+
+/**
* Define a GET /transfers CMD.
*
* @param label command label.
@@ -1017,6 +1030,24 @@ TALER_TESTING_cmd_merchant_get_transfers (const char *label,
...);
+/**
+ * Define a "DELETE transfer" CMD.
+ *
+ * @param label command label.
+ * @param merchant_url base URL of the merchant for the
+ * DELETE /transfers/$ID request.
+ * @param transfer_ref reference to a command that
+ * yields the transfer ID to delete
+ * @param http_status expected HTTP response code.
+ * @return the command.
+ */
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_merchant_delete_transfer (const char *label,
+ const char *merchant_url,
+ const char *transfer_ref,
+ unsigned int http_status);
+
+
/* ******************* /reserves *************** */
diff --git a/src/testing/Makefile.am b/src/testing/Makefile.am
index b2ec0860..d4e41bd2 100644
--- a/src/testing/Makefile.am
+++ b/src/testing/Makefile.am
@@ -37,6 +37,7 @@ libtalermerchanttesting_la_SOURCES = \
testing_api_cmd_delete_order.c \
testing_api_cmd_delete_product.c \
testing_api_cmd_delete_reserve.c \
+ testing_api_cmd_delete_transfer.c \
testing_api_cmd_forget_order.c \
testing_api_cmd_lock_product.c \
testing_api_cmd_instance_auth.c \
diff --git a/src/testing/testing_api_cmd_delete_transfer.c b/src/testing/testing_api_cmd_delete_transfer.c
new file mode 100644
index 00000000..6ccef365
--- /dev/null
+++ b/src/testing/testing_api_cmd_delete_transfer.c
@@ -0,0 +1,202 @@
+/*
+ This file is part of TALER
+ Copyright (C) 2021 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_api_cmd_delete_transfer.c
+ * @brief command to test DELETE /transfers/$TRANSFER_ID
+ * @author Jonathan Buchanan
+ */
+#include "platform.h"
+#include <taler/taler_exchange_service.h>
+#include <taler/taler_testing_lib.h>
+#include "taler_merchant_service.h"
+#include "taler_merchant_testing_lib.h"
+
+
+/**
+ * State of a "DELETE /transfer/$TRANSFER_ID" CMD.
+ */
+struct DeleteTransferState
+{
+
+ /**
+ * Handle for a "DELETE transfer" request.
+ */
+ struct TALER_MERCHANT_TransferDeleteHandle *tdh;
+
+ /**
+ * The interpreter state.
+ */
+ struct TALER_TESTING_Interpreter *is;
+
+ /**
+ * Base URL of the merchant serving the request.
+ */
+ const char *merchant_url;
+
+ /**
+ * Ref to cmd with ID of the transfer to run DELETE for.
+ */
+ const char *transfer_ref;
+
+ /**
+ * Expected HTTP response code.
+ */
+ unsigned int http_status;
+
+};
+
+
+/**
+ * Callback for a DELETE /transfers/$ID operation.
+ *
+ * @param cls closure for this function
+ * @param hr response being processed
+ */
+static void
+delete_transfer_cb (void *cls,
+ const struct TALER_MERCHANT_HttpResponse *hr)
+{
+ struct DeleteTransferState *dts = cls;
+
+ dts->tdh = NULL;
+ if (dts->http_status != hr->http_status)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Unexpected response code %u (%d) to command %s\n",
+ hr->http_status,
+ (int) hr->ec,
+ TALER_TESTING_interpreter_get_current_label (dts->is));
+ TALER_TESTING_interpreter_fail (dts->is);
+ return;
+ }
+ switch (hr->http_status)
+ {
+ case MHD_HTTP_NO_CONTENT:
+ break;
+ case MHD_HTTP_UNAUTHORIZED:
+ break;
+ case MHD_HTTP_NOT_FOUND:
+ break;
+ case MHD_HTTP_CONFLICT:
+ break;
+ default:
+ GNUNET_break (0);
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Unhandled HTTP status %u for DELETE transfer.\n",
+ hr->http_status);
+ }
+ TALER_TESTING_interpreter_next (dts->is);
+}
+
+
+/**
+ * Run the "DELETE transfer" CMD.
+ *
+ *
+ * @param cls closure.
+ * @param cmd command being run now.
+ * @param is interpreter state.
+ */
+static void
+delete_transfer_run (void *cls,
+ const struct TALER_TESTING_Command *cmd,
+ struct TALER_TESTING_Interpreter *is)
+{
+ struct DeleteTransferState *dts = cls;
+ const struct TALER_TESTING_Command *ref;
+ const uint64_t *tid;
+
+ dts->is = is;
+ ref = TALER_TESTING_interpreter_lookup_command (is,
+ dts->transfer_ref);
+ if (NULL == ref)
+ {
+ GNUNET_break (0);
+ TALER_TESTING_interpreter_fail (dts->is);
+ return;
+ }
+ if (GNUNET_OK !=
+ TALER_TESTING_get_trait_bank_row (ref,
+ &tid))
+ {
+ GNUNET_break (0);
+ TALER_TESTING_interpreter_fail (dts->is);
+ return;
+ }
+ if (0 == tid)
+ {
+ GNUNET_break (0);
+ TALER_TESTING_interpreter_fail (dts->is);
+ return;
+ }
+ dts->tdh = TALER_MERCHANT_transfer_delete (is->ctx,
+ dts->merchant_url,
+ *tid,
+ &delete_transfer_cb,
+ dts);
+ GNUNET_assert (NULL != dts->tdh);
+}
+
+
+/**
+ * Free the state of a "DELETE transfer" CMD, and possibly
+ * cancel a pending operation thereof.
+ *
+ * @param cls closure.
+ * @param cmd command being run.
+ */
+static void
+delete_transfer_cleanup (void *cls,
+ const struct TALER_TESTING_Command *cmd)
+{
+ struct DeleteTransferState *dts = cls;
+
+ if (NULL != dts->tdh)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "DELETE /transfers/$TRANSFER_ID operation did not complete\n");
+ TALER_MERCHANT_transfer_delete_cancel (dts->tdh);
+ }
+ GNUNET_free (dts);
+}
+
+
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_merchant_delete_transfer (const char *label,
+ const char *merchant_url,
+ const char *transfer_ref,
+ unsigned int http_status)
+{
+ struct DeleteTransferState *dts;
+
+ dts = GNUNET_new (struct DeleteTransferState);
+ dts->merchant_url = merchant_url;
+ dts->transfer_ref = transfer_ref;
+ dts->http_status = http_status;
+ {
+ struct TALER_TESTING_Command cmd = {
+ .cls = dts,
+ .label = label,
+ .run = &delete_transfer_run,
+ .cleanup = &delete_transfer_cleanup
+ };
+
+ return cmd;
+ }
+}
diff --git a/src/testing/testing_api_cmd_get_transfers.c b/src/testing/testing_api_cmd_get_transfers.c
index 3c0181cb..e82e6436 100644
--- a/src/testing/testing_api_cmd_get_transfers.c
+++ b/src/testing/testing_api_cmd_get_transfers.c
@@ -153,6 +153,9 @@ get_transfers_cb (
TALER_TESTING_interpreter_fail (gts->is);
return;
}
+ TALER_TESTING_cmd_merchant_post_transfer_set_serial (
+ (struct TALER_TESTING_Command *) transfer_cmd,
+ transfers[i].credit_serial);
}
{
const char *payto_uri;
diff --git a/src/testing/testing_api_cmd_post_transfers.c b/src/testing/testing_api_cmd_post_transfers.c
index 72b6f132..e78af34e 100644
--- a/src/testing/testing_api_cmd_post_transfers.c
+++ b/src/testing/testing_api_cmd_post_transfers.c
@@ -100,6 +100,12 @@ struct PostTransfersState
const char **deposits;
/**
+ * Serial number of the wire transfer in the merchant backend,
+ * set by #TALER_TESTING_cmd_merchant_get_transfers(). 0 if unknown.
+ */
+ uint64_t serial;
+
+ /**
* Length of @e deposits.
*/
unsigned int deposits_length;
@@ -338,6 +344,7 @@ post_transfers_traits (void *cls,
TALER_TESTING_make_trait_amount_obj (1, &pts->wire_fee),
TALER_TESTING_make_trait_string (1, pts->exchange_url),
TALER_TESTING_make_trait_absolute_time (0, &pts->execution_time),
+ TALER_TESTING_make_trait_bank_row (&pts->serial),
TALER_TESTING_trait_end (),
};
@@ -537,4 +544,16 @@ TALER_TESTING_cmd_merchant_post_transfer (
}
+void
+TALER_TESTING_cmd_merchant_post_transfer_set_serial (
+ struct TALER_TESTING_Command *cmd,
+ uint64_t serial)
+{
+ struct PostTransfersState *pts = cmd->cls;
+
+ GNUNET_assert (cmd->run = &post_transfers_run);
+ pts->serial = serial;
+}
+
+
/* end of testing_api_cmd_post_transfers.c */