gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-exchange] branch master updated: cover actual aggregation in exch


From: gnunet
Subject: [taler-exchange] branch master updated: cover actual aggregation in exchange test
Date: Fri, 27 Mar 2020 16:17:38 +0100

This is an automated email from the git hooks/post-receive script.

dold pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new e267cb98 cover actual aggregation in exchange test
e267cb98 is described below

commit e267cb985bd5b7bc16b14fd6d19c338c8dfe52c5
Author: Florian Dold <address@hidden>
AuthorDate: Fri Mar 27 20:47:30 2020 +0530

    cover actual aggregation in exchange test
---
 src/include/taler_testing_lib.h       |  34 ++++++++++
 src/testing/test_exchange_api.c       |  49 ++++++++++++++
 src/testing/testing_api_cmd_deposit.c | 119 ++++++++++++++++++++++++++++++++++
 3 files changed, 202 insertions(+)

diff --git a/src/include/taler_testing_lib.h b/src/include/taler_testing_lib.h
index c3a3cea1..9e473f75 100644
--- a/src/include/taler_testing_lib.h
+++ b/src/include/taler_testing_lib.h
@@ -1319,6 +1319,40 @@ TALER_TESTING_cmd_deposit (const char *label,
                            const char *amount,
                            unsigned int expected_response_code);
 
+/**
+ * Create a "deposit" command that references an existing merchant key.
+ *
+ * @param label command label.
+ * @param coin_reference reference to any operation that can
+ *        provide a coin.
+ * @param coin_index if @a withdraw_reference offers an array of
+ *        coins, this parameter selects which one in that array.
+ *        This value is currently ignored, as only one-coin
+ *        withdrawals are implemented.
+ * @param target_account_payto target account for the "deposit"
+ *        request.
+ * @param contract_terms contract terms to be signed over by the
+ *        coin.
+ * @param refund_deadline refund deadline, zero means 'no refunds'.
+ *        Note, if time were absolute, then it would have come
+ *        one day and disrupt tests meaning.
+ * @param amount how much is going to be deposited.
+ * @param expected_response_code expected HTTP response code.
+ * @param merchant_priv_reference reference to another operation
+ *        that has a merchant private key trait
+ *
+ * @return the command.
+ */
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_deposit_with_ref (const char *label,
+                                    const char *coin_reference,
+                                    unsigned int coin_index,
+                                    const char *target_account_payto,
+                                    const char *contract_terms,
+                                    struct GNUNET_TIME_Relative 
refund_deadline,
+                                    const char *amount,
+                                    unsigned int expected_response_code,
+                                    const char *merchant_priv_reference);
 
 /**
  * Modify a deposit command to enable retries when we get transient
diff --git a/src/testing/test_exchange_api.c b/src/testing/test_exchange_api.c
index 5162e1dd..7832e736 100644
--- a/src/testing/test_exchange_api.c
+++ b/src/testing/test_exchange_api.c
@@ -436,6 +436,53 @@ run (void *cls,
     TALER_TESTING_cmd_end ()
   };
 
+
+  /**
+   * This block exercises the aggretation logic by making two payments
+   * to the same merchant.
+   */
+  struct TALER_TESTING_Command aggregation[] = {
+    CMD_TRANSFER_TO_EXCHANGE ("create-reserve-aggtest",
+                              "EUR:5.01"),
+    /* "consume" reserve creation transfer.  */
+    TALER_TESTING_cmd_check_bank_admin_transfer (
+      "check-create-reserve-aggtest",
+      "EUR:5.01",
+      bc.user42_payto,
+      bc.exchange_payto,
+      "create-reserve-aggtest"),
+    CMD_EXEC_WIREWATCH ("wirewatch-aggtest"),
+    TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-aggtest",
+                                       "create-reserve-aggtest",
+                                       "EUR:5",
+                                       MHD_HTTP_OK),
+    TALER_TESTING_cmd_deposit ("deposit-aggtest-1",
+                               "withdraw-coin-aggtest",
+                               0,
+                               bc.user43_payto,
+                               "{\"items\":[{\"name\":\"ice 
cream\",\"value\":1}]}",
+                               GNUNET_TIME_UNIT_ZERO,
+                               "EUR:2",
+                               MHD_HTTP_OK),
+    TALER_TESTING_cmd_deposit_with_ref ("deposit-aggtest-2",
+                                        "withdraw-coin-aggtest",
+                                        0,
+                                        bc.user43_payto,
+                                        "{\"items\":[{\"name\":\"foo 
bar\",\"value\":1}]}",
+                                        GNUNET_TIME_UNIT_ZERO,
+                                        "EUR:2",
+                                        MHD_HTTP_OK,
+                                        "deposit-aggtest-1"),
+    CMD_EXEC_AGGREGATOR ("aggregation-aggtest"),
+    TALER_TESTING_cmd_check_bank_transfer ("check-bank-transfer-aggtest",
+                                           ec.exchange_url,
+                                           "EUR:3.97",
+                                           bc.exchange_payto,
+                                           bc.user43_payto),
+    TALER_TESTING_cmd_check_bank_empty ("check-bank-empty-aggtest"),
+    TALER_TESTING_cmd_end ()
+  };
+
   struct TALER_TESTING_Command refund[] = {
     /**
      * Fill reserve with EUR:5.01, as withdraw fee is 1 ct per
@@ -786,6 +833,8 @@ run (void *cls,
                                track),
       TALER_TESTING_cmd_batch ("unaggregation",
                                unaggregation),
+      TALER_TESTING_cmd_batch ("aggregation",
+                               aggregation),
       TALER_TESTING_cmd_batch ("refund",
                                refund),
       TALER_TESTING_cmd_batch ("recoup",
diff --git a/src/testing/testing_api_cmd_deposit.c 
b/src/testing/testing_api_cmd_deposit.c
index ba4dc307..4f3a385d 100644
--- a/src/testing/testing_api_cmd_deposit.c
+++ b/src/testing/testing_api_cmd_deposit.c
@@ -151,6 +151,12 @@ struct DepositState
    * this will only be set after the command has been started.
    */
   int command_initialized;
+
+  /**
+   * Reference to fetch the merchant private key from.
+   * If NULL, we generate our own, fresh merchant key.
+   */
+  const char *merchant_priv_reference;
 };
 
 
@@ -307,6 +313,31 @@ deposit_run (void *cls,
     ds->merchant_priv = ods->merchant_priv;
     ds->command_initialized = GNUNET_YES;
   }
+  else if (NULL != ds->merchant_priv_reference)
+  {
+    // We're copying the merchant key from another deposit operation
+    const struct TALER_MerchantPrivateKeyP *merchant_priv;
+    const struct TALER_TESTING_Command *cmd;
+    cmd = TALER_TESTING_interpreter_lookup_command
+            (is,
+            ds->merchant_priv_reference);
+    if (NULL == cmd)
+    {
+      GNUNET_break (0);
+      TALER_TESTING_interpreter_fail (is);
+      return;
+    }
+    if ( (GNUNET_OK !=
+          TALER_TESTING_get_trait_merchant_priv (cmd,
+                                                 0,
+                                                 &merchant_priv)) )
+    {
+      GNUNET_break (0);
+      TALER_TESTING_interpreter_fail (is);
+      return;
+    }
+    ds->merchant_priv = *merchant_priv;
+  }
   GNUNET_assert (ds->coin_reference);
   coin_cmd = TALER_TESTING_interpreter_lookup_command
                (is,
@@ -608,6 +639,94 @@ TALER_TESTING_cmd_deposit (const char *label,
 }
 
 
+/**
+ * Create a "deposit" command that references an existing merchant key.
+ *
+ * @param label command label.
+ * @param coin_reference reference to any operation that can
+ *        provide a coin.
+ * @param coin_index if @a withdraw_reference offers an array of
+ *        coins, this parameter selects which one in that array.
+ *        This value is currently ignored, as only one-coin
+ *        withdrawals are implemented.
+ * @param target_account_payto target account for the "deposit"
+ *        request.
+ * @param contract_terms contract terms to be signed over by the
+ *        coin.
+ * @param refund_deadline refund deadline, zero means 'no refunds'.
+ *        Note, if time were absolute, then it would have come
+ *        one day and disrupt tests meaning.
+ * @param amount how much is going to be deposited.
+ * @param expected_response_code expected HTTP response code.
+ * @param merchant_priv_reference reference to another operation
+ *        that has a merchant private key trait
+ *
+ * @return the command.
+ */
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_deposit_with_ref (const char *label,
+                                    const char *coin_reference,
+                                    unsigned int coin_index,
+                                    const char *target_account_payto,
+                                    const char *contract_terms,
+                                    struct GNUNET_TIME_Relative 
refund_deadline,
+                                    const char *amount,
+                                    unsigned int expected_response_code,
+                                    const char *merchant_priv_reference)
+{
+  struct DepositState *ds;
+  json_t *wire_details;
+
+  wire_details = TALER_TESTING_make_wire_details (target_account_payto);
+  ds = GNUNET_new (struct DepositState);
+  ds->merchant_priv_reference = merchant_priv_reference;
+  ds->coin_reference = coin_reference;
+  ds->coin_index = coin_index;
+  ds->wire_details = wire_details;
+  ds->contract_terms = json_loads (contract_terms,
+                                   JSON_REJECT_DUPLICATES,
+                                   NULL);
+  if (NULL == ds->contract_terms)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Failed to parse contract terms `%s' for CMD `%s'\n",
+                contract_terms,
+                label);
+    GNUNET_assert (0);
+  }
+  ds->timestamp = GNUNET_TIME_absolute_get ();
+  (void) GNUNET_TIME_round_abs (&ds->timestamp);
+
+  json_object_set_new (ds->contract_terms,
+                       "timestamp",
+                       GNUNET_JSON_from_time_abs (ds->timestamp));
+  if (0 != refund_deadline.rel_value_us)
+  {
+    ds->refund_deadline = GNUNET_TIME_relative_to_absolute (refund_deadline);
+    (void) GNUNET_TIME_round_abs (&ds->refund_deadline);
+    json_object_set_new (ds->contract_terms,
+                         "refund_deadline",
+                         GNUNET_JSON_from_time_abs (ds->refund_deadline));
+  }
+  GNUNET_assert (GNUNET_OK ==
+                 TALER_string_to_amount (amount,
+                                         &ds->amount));
+  ds->expected_response_code = expected_response_code;
+  ds->command_initialized = GNUNET_YES;
+  {
+    struct TALER_TESTING_Command cmd = {
+      .cls = ds,
+      .label = label,
+      .run = &deposit_run,
+      .cleanup = &deposit_cleanup,
+      .traits = &deposit_traits
+    };
+
+    return cmd;
+  }
+}
+
+
 /**
  * Create a "deposit" command that repeats an existing
  * deposit command.

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]