gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [taler-exchange] 03/03: Benchmark.


From: gnunet
Subject: [GNUnet-SVN] [taler-exchange] 03/03: Benchmark.
Date: Wed, 25 Jul 2018 10:26:07 +0200

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

marcello pushed a commit to branch master
in repository exchange.

commit 5f0b98a29833f072012907f0a4876c6a431a537f
Author: Marcello Stanisci <address@hidden>
AuthorDate: Wed Jul 25 10:23:40 2018 +0200

    Benchmark.
    
    Define the "unity" benchmark: a array of CMDs containing
    at least a withdraw+deposit, and _possibly_ a refresh operation.
---
 src/benchmark/taler-exchange-benchmark-new.c | 264 +++++++++++++--------------
 1 file changed, 128 insertions(+), 136 deletions(-)

diff --git a/src/benchmark/taler-exchange-benchmark-new.c 
b/src/benchmark/taler-exchange-benchmark-new.c
index edc3c1d..7e46463 100644
--- a/src/benchmark/taler-exchange-benchmark-new.c
+++ b/src/benchmark/taler-exchange-benchmark-new.c
@@ -47,6 +47,15 @@ enum BenchmarkError {
   NO_CONFIG_FILE_GIVEN
 };
 
+/**
+ * Probability a coin can be refreshed.
+ * This probability multiplied by the number of coins
+ * generated during the average refresh must be smaller
+ * than one.  The variance must be covered by the
+ * #INVALID_COIN_SLACK.
+ */
+#define REFRESH_PROBABILITY 0.1
+
 /* Hard-coded params.  Note, the bank is expected to
  * have the Tor user with account number 3 and password 'x'.
  *
@@ -113,123 +122,37 @@ static char *currency;
  */
 
 #define ALLOCATE_AMOUNTS(...) \
-  char *CURRENCY_10_02; \
-  char *CURRENCY_10; \
-  char *CURRENCY_9_98; \
-  char *CURRENCY_5_01; \
-  char *CURRENCY_5; \
-  char *CURRENCY_4_99; \
-  char *CURRENCY_0_02; \
-  char *CURRENCY_0_01; \
+  char *AMOUNT_5; \
+  char *AMOUNT_4; \
+  char *AMOUNT_1; \
   \
-  GNUNET_asprintf (&CURRENCY_10_02, \
-                   "%s:10.02", \
-                   currency); \
-  GNUNET_asprintf (&CURRENCY_10, \
-                   "%s:10", \
-                   currency); \
-  GNUNET_asprintf (&CURRENCY_9_98, \
-                   "%s:9.98", \
-                   currency); \
-  GNUNET_asprintf (&CURRENCY_5_01, \
-                   "%s:5.01", \
-                   currency); \
-  GNUNET_asprintf (&CURRENCY_5, \
+  GNUNET_asprintf (&AMOUNT_5, \
                    "%s:5", \
                    currency); \
-  GNUNET_asprintf (&CURRENCY_4_99, \
-                   "%s:4.99", \
-                   currency); \
-  GNUNET_asprintf (&CURRENCY_0_02, \
-                   "%s:0.02", \
+  GNUNET_asprintf (&AMOUNT_4, \
+                   "%s:4", \
                    currency); \
-  GNUNET_asprintf (&CURRENCY_0_01, \
-                   "%s:0.01", \
+  GNUNET_asprintf (&AMOUNT_1, \
+                   "%s:1", \
                    currency);
 
-#define ALLOCATE_ORDERS(...) \
-  char *order_worth_5; \
-  char *order_worth_5_track; \
-  char *order_worth_5_unaggregated; \
-  char *order_worth_10_2coins; \
-  \
-  GNUNET_asprintf \
-    (&order_worth_5, \
-     "{\"max_fee\":\
-       {\"currency\":\"%s\",\
-        \"value\":0,\
-        \"fraction\":50000000},\
-       \"refund_deadline\":\"\\/Date(0)\\/\",\
-       \"pay_deadline\":\"\\/Date(99999999999)\\/\",\
-       \"amount\":\
-         {\"currency\":\"%s\",\
-          \"value\":5,\
-          \"fraction\":0},\
-        \"summary\": \"merchant-lib testcase\",\
-        \"fulfillment_url\": \"https://example.com/\",\
-        \"products\": [ {\"description\":\"ice cream\",\
-                         \"value\":\"{%s:5}\"} ] }", \
-     currency, \
-     currency, \
-     currency); \
-  GNUNET_asprintf \
-    (&order_worth_5_track, \
-     "{\"max_fee\":\
-       {\"currency\":\"%s\",\
-        \"value\":0,\
-        \"fraction\":50000000},\
-       \"refund_deadline\":\"\\/Date(0)\\/\",\
-       \"pay_deadline\":\"\\/Date(99999999999)\\/\",\
-       \"amount\":\
-         {\"currency\":\"%s\",\
-          \"value\":5,\
-          \"fraction\":0},\
-        \"summary\": \"ice track cream!\",\
-        \"fulfillment_url\": \"https://example.com/\",\
-        \"products\": [ {\"description\":\"ice track cream\",\
-                         \"value\":\"{%s:5}\"} ] }", \
-     currency, \
-     currency, \
-     currency); \
-  GNUNET_asprintf \
-    (&order_worth_5_unaggregated, \
-     "{\"max_fee\":\
-       {\"currency\":\"%s\",\
-        \"value\":0,\
-        \"fraction\":50000000},\
-       \"wire_transfer_delay\":\"\\/Delay(30000)\\/\",\
-       \"refund_deadline\":\"\\/Date(22)\\/\",\
-       \"pay_deadline\":\"\\/Date(1)\\/\",\
-       \"amount\":\
-         {\"currency\":\"%s\",\
-          \"value\":5,\
-          \"fraction\":0},\
-        \"summary\": \"unaggregated deposit!\",\
-        \"fulfillment_url\": \"https://example.com/\",\
-        \"products\": [ {\"description\":\"unaggregated cream\",\
-                         \"value\":\"{%s:5}\"} ] }", \
-     currency, \
-     currency, \
-     currency); \
-  GNUNET_asprintf \
-    (&order_worth_10_2coins, \
-     "{\"max_fee\":\
-       {\"currency\":\"%s\",\
-        \"value\":0,\
-        \"fraction\":50000000},\
-       \"refund_deadline\":\"\\/Date(0)\\/\",\
-       \"pay_deadline\":\"\\/Date(99999999999)\\/\",\
-       \"amount\":\
-         {\"currency\":\"%s\",\
-          \"value\":10,\
-          \"fraction\":0},\
-        \"summary\": \"2-coins payment\",\
-        \"fulfillment_url\": \"https://example.com/\",\
-        \"products\": [ {\"description\":\"2-coins payment\",\
-                         \"value\":\"{%s:10}\"} ] }", \
-     currency, \
-     currency, \
-     currency);
+/**
+ * Throw a weighted coin with @a probability.
+ *
+ * @return #GNUNET_OK with @a probability,
+ *         #GNUNET_NO with 1 - @a probability
+ */
+static unsigned int
+eval_probability (float probability)
+{
+  uint64_t random;
+  float random_01;
+
+  random = GNUNET_CRYPTO_random_u64 (GNUNET_CRYPTO_QUALITY_WEAK,
+                                    UINT64_MAX);
+  random_01 = (double) random / UINT64_MAX;
+  return (random_01 <= probability) ? GNUNET_OK : GNUNET_NO;
+}
 
 
 /**
@@ -251,19 +174,9 @@ run (void *cls,
       (is->ctx, APIKEY_SANDBOX));
 
   ALLOCATE_AMOUNTS
-      (CURRENCY_10_02,
-       CURRENCY_9_98,
-       CURRENCY_5_01,
-       CURRENCY_5,
-       CURRENCY_4_99,
-       CURRENCY_0_02,
-       CURRENCY_0_01);
-
-  ALLOCATE_ORDERS
-    (order_worth_5,
-     order_worth_5_track,
-     order_worth_5_unaggregated,
-     order_worth_10_2coins);
+    (AMOUNT_5,
+     AMOUNT_4,
+     AMOUNT_1);
 
   strcpy (total_reserve_amount.currency,
           currency);
@@ -278,20 +191,101 @@ run (void *cls,
                       &total_reserve_amount,
                       &withdraw_fee);
 
-  /* 1st, calculate how much money should be held in
-   * reserve.  Being all 5-valued coins, the overall
-   * value should be: 5 times `howmany_coins' */
-
-  struct TALER_TESTING_Command commands[] = {
+  struct TALER_TESTING_Command make_reserve[] = {
 
     CMD_TRANSFER_TO_EXCHANGE
-      ("create-reserve-1",
-       CURRENCY_10_02),
+      ("create-reserve",
+       TALER_amount_to_string (&total_reserve_amount)),
 
     TALER_TESTING_cmd_exec_wirewatch
-      ("wirewatch-1",
+      ("wirewatch",
        cfg_filename),
 
+    TALER_TESTING_cmd_end ()
+
+  };
+
+  for (unsigned int i = 0; i < howmany_coins; i++)
+  {
+    #define UNITY_SIZE 6
+    char *withdraw_label;
+    char *order_enc;
+    struct TALER_TESTING_Command unity[UNITY_SIZE];
+
+    GNUNET_asprintf (&withdraw_label,
+                     "withdraw-%u",
+                     i);
+
+    GNUNET_asprintf (&order_enc,
+                     "{\"nonce\": %u}",
+                     i);
+
+    unity[0] = TALER_TESTING_cmd_withdraw_amount
+      (withdraw_label,
+       is->exchange,
+       "create-reserve",
+       AMOUNT_5,
+       MHD_HTTP_OK);
+
+    unity[1] = TALER_TESTING_cmd_deposit
+      ("deposit",
+       is->exchange,
+       withdraw_label,
+       0, /* Index of the one withdrawn coin in the traits.  */
+       TALER_TESTING_make_wire_details
+         (24,
+          "https://no-aggregation";),
+       order_enc,
+       GNUNET_TIME_UNIT_ZERO,
+       AMOUNT_1,
+       MHD_HTTP_OK);
+
+    if (eval_probability (REFRESH_PROBABILITY))
+    {
+      char *melt_label;
+      char *reveal_label;
+
+
+      GNUNET_asprintf (&melt_label,
+                       "refresh-melt-%u",
+                       i);
+
+      GNUNET_asprintf (&reveal_label,
+                       "refresh-reveal-%u",
+                       i);
+
+      unity[2] = TALER_TESTING_cmd_refresh_melt
+        (melt_label,
+         is->exchange,
+         AMOUNT_4,
+         withdraw_label,
+         MHD_HTTP_OK);
+
+      unity[3] = TALER_TESTING_cmd_refresh_reveal
+        (reveal_label,
+         is->exchange,
+         melt_label,
+         MHD_HTTP_OK);
+
+      unity[4] = TALER_TESTING_cmd_refresh_link
+        ("refresh-link",
+         is->exchange,
+         reveal_label,
+         MHD_HTTP_OK);
+
+      unity[5] = TALER_TESTING_cmd_end ();
+    }
+    else unity[2] = TALER_TESTING_cmd_end ();
+  
+  }
+
+  struct TALER_TESTING_Command all_commands[] = {
+    TALER_TESTING_cmd_batch ("make-reserve",
+                             make_reserve),
+    TALER_TESTING_cmd_end ()
+  };
+
+    /*
     TALER_TESTING_cmd_withdraw_amount
       ("withdraw-coin-1",
        is->exchange, // picks port from config's [exchange].
@@ -307,12 +301,10 @@ run (void *cls,
        MHD_HTTP_OK),
 
     TALER_TESTING_cmd_end ()
-  };
+  }; */
 
-  #if 0
   TALER_TESTING_run (is,
-                     commands);
-  #endif
+                     all_commands);
   result = 1;
 }
 

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



reply via email to

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