[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-merchant] 02/07: update of the test TOTP but not finish
From: |
gnunet |
Subject: |
[taler-merchant] 02/07: update of the test TOTP but not finish |
Date: |
Wed, 29 Mar 2023 16:39:49 +0200 |
This is an automated email from the git hooks/post-receive script.
priscilla-huang pushed a commit to branch master
in repository merchant.
commit 21bce66874c961271aed9016015a8d3fdcc09279
Author: priscilla <priscilla.huang@efrei.net>
AuthorDate: Tue Mar 14 10:08:08 2023 -0400
update of the test TOTP but not finish
---
src/testing/test_merchant_api.c | 20 +-
src/testing/testing_api_cmd_pay_order.c | 22 ++
src/testing/testing_api_cmd_post_using_templates.c | 245 ++++++++++++++++++++-
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
@@ -110,13 +110,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.
*/
@@ -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
@@ -43,6 +43,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.
*/
@@ -63,6 +70,67 @@ 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.
*/
@@ -70,6 +138,71 @@ struct PostUsingTemplatesState
};
+/**
+ * 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 (),
};
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-merchant] branch master updated (3fa7d3be -> 4e207441), gnunet, 2023/03/29
- [taler-merchant] 02/07: update of the test TOTP but not finish,
gnunet <=
- [taler-merchant] 07/07: update pay order / using templates for test case totp, gnunet, 2023/03/29
- [taler-merchant] 03/07: update of the test TOTP but not finish, gnunet, 2023/03/29
- [taler-merchant] 01/07: daily pull, gnunet, 2023/03/29
- [taler-merchant] 05/07: pull, gnunet, 2023/03/29
- [taler-merchant] 04/07: pull, gnunet, 2023/03/29
- [taler-merchant] 06/07: pull, gnunet, 2023/03/29