summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorpriscilla <priscilla.huang@efrei.net>2023-03-14 10:08:08 -0400
committerpriscilla <priscilla.huang@efrei.net>2023-03-22 10:23:06 -0400
commit21bce66874c961271aed9016015a8d3fdcc09279 (patch)
tree5bd5564839e38b20c3fb9ca120006f10d65e5840 /src
parent702d2fc2346ea7d1829eac70928d6362235eea20 (diff)
downloadmerchant-21bce66874c961271aed9016015a8d3fdcc09279.tar.gz
merchant-21bce66874c961271aed9016015a8d3fdcc09279.tar.bz2
merchant-21bce66874c961271aed9016015a8d3fdcc09279.zip
update of the test TOTP but not finish
Diffstat (limited to 'src')
-rw-r--r--src/testing/test_merchant_api.c20
-rw-r--r--src/testing/testing_api_cmd_pay_order.c22
-rw-r--r--src/testing/testing_api_cmd_post_using_templates.c245
3 files changed, 267 insertions, 20 deletions
diff --git a/src/testing/test_merchant_api.c b/src/testing/test_merchant_api.c
index c4853fd4..9d828c12 100644
--- a/src/testing/test_merchant_api.c
+++ b/src/testing/test_merchant_api.c
@@ -111,13 +111,6 @@ static char *merchant_url_i1a;
static struct GNUNET_OS_Process *merchantd;
/**
- * total for totp
- */
-static struct TALER_Amount *total;
-enum GNUNET_Generic_ReturnValue TALER_string_to_amount ("EUR:10.0",
- total);
-
-/**
* Account number of the exchange at the bank.
*/
#define EXCHANGE_ACCOUNT_NAME "2"
@@ -1334,13 +1327,6 @@ run (void *cls,
merchant_url,
MHD_HTTP_OK,
NULL),
- TALER_TESTING_cmd_merchant_post_orders ("create-proposal-10",
- merchant_url,
- MHD_HTTP_OK,
- "100",
- GNUNET_TIME_UNIT_ZERO_TS,
- GNUNET_TIME_UNIT_FOREVER_TS,
- "EUR:10.0"),
TALER_TESTING_cmd_merchant_post_templates ("post-templates-t1",
merchant_url,
"template-1",
@@ -1457,15 +1443,11 @@ run (void *cls,
TALER_TESTING_cmd_merchant_pay_order ("pay-100",
merchant_url,
MHD_HTTP_OK,
- "create-proposal-100",
+ "using-templates-t1",
"withdraw-coin-10a;withdraw-coin-10b",
"EUR:5",
"EUR:4.99",
NULL),
- TALER_build_pos_confirmation ("pos1test",
- TALER_MCA_WITH_PRICE,
- total,
- GNUNET_TIME_timestamp_get()),
TALER_TESTING_cmd_merchant_delete_template ("get-templates-empty",
merchant_url,
"t1",
diff --git a/src/testing/testing_api_cmd_pay_order.c b/src/testing/testing_api_cmd_pay_order.c
index 5ec9e46b..c1c5fc5a 100644
--- a/src/testing/testing_api_cmd_pay_order.c
+++ b/src/testing/testing_api_cmd_pay_order.c
@@ -91,6 +91,11 @@ struct PayState
* The session for which the payment is made.
*/
const char *session_id;
+
+ /**
+ * This variable is for the verification of the payment.
+ */
+ const char *pos_confirmation;
};
@@ -239,6 +244,23 @@ pay_cb (void *cls,
if (MHD_HTTP_OK == pr->hr.http_status)
{
ps->merchant_sig = pr->details.success.merchant_sig;
+ /*
+ struct TALER_Amount total_amount;
+ const char *pos_key;
+ struct GNUNET_JSON_Specification spec[] = {
+ GNUNET_JSON_spec_string ("order_id",
+ &ps->proposal_reference),
+ GNUNET_JSON_spec_string ("pos_key",
+ &pos_key),
+ TALER_JSON_spec_amount_any ("amount",
+ &total_amount),
+ GNUNET_JSON_spec_end ()
+ };
+
+ ps->pos_confirmation = TALER_build_pos_confirmation (pos_key,
+ TALER_MCA_WITHOUT_PRICE,
+ &total_amount,
+ GNUNET_TIME_timestamp_get());*/
// FIXME: check if pr->details.success.pos_confirmation;
// for that, get pos_secret from ps->proposal_reference CMD and amount from pay/order creation cmd using traits
}
diff --git a/src/testing/testing_api_cmd_post_using_templates.c b/src/testing/testing_api_cmd_post_using_templates.c
index 137c7df1..d8f2c0a9 100644
--- a/src/testing/testing_api_cmd_post_using_templates.c
+++ b/src/testing/testing_api_cmd_post_using_templates.c
@@ -44,6 +44,13 @@ struct PostUsingTemplatesState
struct TALER_TESTING_Interpreter *is;
/**
+ * The (initial) POST /orders/$ID/claim operation handle.
+ * The logic is such that after an order creation,
+ * we immediately claim the order.
+ */
+ struct TALER_MERCHANT_OrderClaimHandle *och;
+
+ /**
* Base URL of the merchant serving the request.
*/
const char *merchant_url;
@@ -64,12 +71,138 @@ struct PostUsingTemplatesState
const char *template_ref;
/**
+ * Order id.
+ */
+ const char *order_id;
+
+ /**
+ * The order id we expect the merchant to assign (if not NULL).
+ */
+ const char *expected_order_id;
+
+ /**
+ * Contract terms obtained from the backend.
+ */
+ json_t *contract_terms;
+
+ /**
+ * Order submitted to the backend.
+ */
+ json_t *order_terms;
+
+ /**
+ * Contract terms hash code.
+ */
+ struct TALER_PrivateContractHashP h_contract_terms;
+
+ /**
+ * Merchant signature over the orders.
+ */
+ struct TALER_MerchantSignatureP merchant_sig;
+
+ /**
+ * Merchant public key.
+ */
+ struct TALER_MerchantPublicKeyP merchant_pub;
+
+ /**
+ * The nonce.
+ */
+ struct GNUNET_CRYPTO_EddsaPublicKey nonce;
+
+ /**
+ * The claim token
+ */
+ struct TALER_ClaimTokenP claim_token;
+
+ /**
+ * Should the command also CLAIM the order?
+ */
+ bool with_claim;
+
+ /**
+ * If not NULL, the command should duplicate the request and verify the
+ * response is the same as in this command.
+ */
+ const char *duplicate_of;
+
+ /**
+ * Encoded key for the payment verification.
+ */
+ const char **template_pos_key;
+
+ /**
* Expected HTTP response code.
*/
unsigned int http_status;
};
+/**
+ * Used to fill the "orders" CMD state with backend-provided
+ * values. Also double-checks that the order was correctly
+ * created.
+ *
+ * @param cls closure
+ * @param hr HTTP response we got
+ * @param contract_terms contract terms of this order
+ * @param sig merchant's signature
+ * @param hash hash over the contract
+ */
+static void
+orders_claim_cb (void *cls,
+ const struct TALER_MERCHANT_HttpResponse *hr,
+ const json_t *contract_terms,
+ const struct TALER_MerchantSignatureP *sig,
+ const struct TALER_PrivateContractHashP *hash)
+{
+ struct PostUsingTemplatesState *tis = cls;
+ struct TALER_MerchantPublicKeyP merchant_pub;
+ const char *error_name;
+ unsigned int error_line;
+ struct GNUNET_JSON_Specification spec[] = {
+ GNUNET_JSON_spec_fixed_auto ("merchant_pub",
+ &merchant_pub),
+ GNUNET_JSON_spec_end ()
+ };
+
+ tis->och = NULL;
+ if (tis->http_status != hr->http_status)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Expected status %u, got %u\n",
+ tis->http_status,
+ hr->http_status);
+ TALER_TESTING_FAIL (tis->is);
+ }
+
+ tis->contract_terms = json_deep_copy (contract_terms);
+ tis->h_contract_terms = *hash;
+ tis->merchant_sig = *sig;
+ if (GNUNET_OK !=
+ GNUNET_JSON_parse (contract_terms,
+ spec,
+ &error_name,
+ &error_line))
+ {
+ char *log;
+
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Parser failed on %s:%u\n",
+ error_name,
+ error_line);
+ log = json_dumps (tis->contract_terms,
+ JSON_INDENT (1));
+ fprintf (stderr,
+ "%s\n",
+ log);
+ free (log);
+ TALER_TESTING_FAIL (tis->is);
+ }
+ tis->merchant_pub = merchant_pub;
+ TALER_TESTING_interpreter_next (tis->is);
+}
+
/**
* Callback for a POST /using-templates operation.
@@ -94,6 +227,103 @@ post_using_templates_cb (void *cls,
TALER_TESTING_interpreter_fail (tis->is);
return;
}
+ if (0 == tis->http_status)
+ {
+ TALER_LOG_DEBUG ("/using_templates, expected 0 status code\n");
+ TALER_TESTING_interpreter_next (tis->is);
+ return;
+ }
+ // check the rest of the function to adapt to using_template
+ switch (por->hr.http_status)
+ {
+ case MHD_HTTP_OK:
+ if (NULL != por->details.ok.token)
+ tis->claim_token = *por->details.ok.token;
+ tis->order_id = GNUNET_strdup (por->details.ok.order_id);
+ if ((NULL != tis->expected_order_id) &&
+ (0 != strcmp (por->details.ok.order_id,
+ tis->expected_order_id)))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Order id assigned does not match\n");
+ TALER_TESTING_interpreter_fail (tis->is);
+ return;
+ }
+ if (NULL != tis->duplicate_of)
+ {
+ const struct TALER_TESTING_Command *order_cmd;
+ const struct TALER_ClaimTokenP *prev_token;
+ struct TALER_ClaimTokenP zero_token = {0};
+
+ order_cmd = TALER_TESTING_interpreter_lookup_command (
+ tis->is,
+ tis->duplicate_of);
+ if (GNUNET_OK !=
+ TALER_TESTING_get_trait_claim_token (order_cmd,
+ &prev_token))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Could not fetch previous order claim token\n");
+ TALER_TESTING_interpreter_fail (tis->is);
+ return;
+ }
+ if (NULL == por->details.ok.token)
+ prev_token = &zero_token;
+ if (0 != GNUNET_memcmp (prev_token,
+ por->details.ok.token))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Claim tokens for identical requests do not match\n");
+ TALER_TESTING_interpreter_fail (tis->is);
+ return;
+ }
+ }
+ break;
+ case MHD_HTTP_NOT_FOUND:
+ TALER_TESTING_interpreter_next (tis->is);
+ return;
+ case MHD_HTTP_GONE:
+ TALER_TESTING_interpreter_next (tis->is);
+ return;
+ case MHD_HTTP_CONFLICT:
+ TALER_TESTING_interpreter_next (tis->is);
+ return;
+ default:
+ {
+ char *s = json_dumps (por->hr.reply,
+ JSON_COMPACT);
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+ "Unexpected status code from /orders: %u (%d) at %s; JSON: %s\n",
+ por->hr.http_status,
+ (int) por->hr.ec,
+ TALER_TESTING_interpreter_get_current_label (tis->is),
+ s);
+ GNUNET_free (s);
+ /**
+ * Not failing, as test cases are _supposed_
+ * to create non 200 OK situations.
+ */
+ TALER_TESTING_interpreter_next (tis->is);
+ }
+ return;
+ }
+
+ if (! tis->with_claim)
+ {
+ TALER_TESTING_interpreter_next (tis->is);
+ return;
+ }
+ if (NULL ==
+ (tis->och = TALER_MERCHANT_order_claim (tis->is->ctx,
+ tis->merchant_url,
+ tis->order_id,
+ &tis->nonce,
+ &tis->claim_token,
+ &orders_claim_cb,
+ tis)))
+ TALER_TESTING_FAIL (tis->is);
+
+ /*
switch (por->hr.http_status)
{
case MHD_HTTP_OK:
@@ -109,7 +339,7 @@ post_using_templates_cb (void *cls,
por->hr.http_status);
break;
}
- TALER_TESTING_interpreter_next (tis->is);
+ TALER_TESTING_interpreter_next (tis->is);*/
}
@@ -137,6 +367,10 @@ post_using_templates_run (void *cls,
TALER_TESTING_get_trait_template_id (ref,
&template_id))
TALER_TESTING_FAIL (is);
+ if (GNUNET_OK !=
+ TALER_TESTING_get_trait_template_pos_key (ref,
+ &tis->template_pos_key))
+ TALER_TESTING_FAIL (is);
tis->iph = TALER_MERCHANT_using_templates_post (
is->ctx,
tis->merchant_url,
@@ -169,6 +403,15 @@ post_using_templates_traits (void *cls,
{
struct PostUsingTemplatesState *pts = cls;
struct TALER_TESTING_Trait traits[] = {
+ TALER_TESTING_make_trait_order_id (&pts->order_id),
+ TALER_TESTING_make_trait_contract_terms (pts->contract_terms),
+ TALER_TESTING_make_trait_order_terms (pts->order_terms),
+ TALER_TESTING_make_trait_h_contract_terms (&pts->h_contract_terms),
+ TALER_TESTING_make_trait_merchant_sig (&pts->merchant_sig),
+ TALER_TESTING_make_trait_merchant_pub (&pts->merchant_pub),
+ TALER_TESTING_make_trait_claim_nonce (&pts->nonce),
+ TALER_TESTING_make_trait_claim_token (&pts->claim_token),
+ TALER_TESTING_make_trait_template_pos_key (pts->template_pos_key), // extract from template creation CMD
TALER_TESTING_trait_end (),
};