gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] 01/02: re-enable cherry picking test (kind-of passes, n


From: gnunet
Subject: [taler-exchange] 01/02: re-enable cherry picking test (kind-of passes, not finished)
Date: Sun, 20 Dec 2020 17:10:22 +0100

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

grothoff pushed a commit to branch master
in repository exchange.

commit 6a73629aee0f04c0ab9c26329250299d3457c97e
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sun Dec 20 17:10:01 2020 +0100

    re-enable cherry picking test (kind-of passes, not finished)
---
 src/testing/Makefile.am                            |   5 +-
 .../test-taler-exchange-aggregator-postgres.conf   |   2 -
 .../test-taler-exchange-wirewatch-postgres.conf    |   3 -
 src/testing/test_auditor_api.conf                  |  15 +-
 src/testing/test_exchange_api.conf                 |  28 +--
 .../test_exchange_api_keys_cherry_picking.c        | 188 +++---------------
 .../test_exchange_api_keys_cherry_picking.conf     |  51 ++---
 .../test_exchange_api_overlapping_keys_bug.c       |   2 +-
 src/testing/test_exchange_api_twisted.conf         |  24 ---
 src/testing/testing_api_cmd_check_keys.c           | 216 +++++++++++----------
 10 files changed, 158 insertions(+), 376 deletions(-)

diff --git a/src/testing/Makefile.am b/src/testing/Makefile.am
index 34b86ebf..dfea5407 100644
--- a/src/testing/Makefile.am
+++ b/src/testing/Makefile.am
@@ -130,6 +130,7 @@ check_PROGRAMS = \
   test_bank_api_with_pybank \
   test_bank_api_with_nexus \
   test_exchange_api \
+  test_exchange_api_keys_cherry_picking \
   test_exchange_api_revocation \
   test_exchange_api_overlapping_keys_bug \
   test_exchange_management_api \
@@ -142,8 +143,6 @@ if HAVE_TWISTER
     test_bank_api_with_pybank_twisted
 endif
 
-# test_exchange_api_keys_cherry_picking disabled for now:
-# needs to be rewritten as we no longer support /keys timetravel!
 
 
 TESTS = \
@@ -373,8 +372,6 @@ EXTRA_DIST = \
   test_exchange_api.conf \
   test_exchange_api_twisted.conf \
   test_exchange_api_keys_cherry_picking.conf \
-  test_exchange_api_keys_cherry_picking_extended.conf \
-  test_exchange_api_keys_cherry_picking_extended_2.conf \
   test_exchange_api_expire_reserve_now.conf \
   test-taler-exchange-aggregator-postgres.conf \
   test-taler-exchange-wirewatch-postgres.conf
diff --git a/src/testing/test-taler-exchange-aggregator-postgres.conf 
b/src/testing/test-taler-exchange-aggregator-postgres.conf
index a6981dc3..f3a6dfe4 100644
--- a/src/testing/test-taler-exchange-aggregator-postgres.conf
+++ b/src/testing/test-taler-exchange-aggregator-postgres.conf
@@ -21,8 +21,6 @@ MASTER_PUBLIC_KEY = 
98NJW3CQHZQGQXTY3K85K531XKPAPAVV4Q5V8PYYRR00NJGZWNVG
 # the tracking API.
 BASE_URL = "http://localhost:8081/";
 
-SIGNKEY_LEGAL_DURATION = 2 years
-
 [auditor]
 BASE_URL = "http://auditor.example.com/";
 
diff --git a/src/testing/test-taler-exchange-wirewatch-postgres.conf 
b/src/testing/test-taler-exchange-wirewatch-postgres.conf
index afa1f34f..8dfd3858 100644
--- a/src/testing/test-taler-exchange-wirewatch-postgres.conf
+++ b/src/testing/test-taler-exchange-wirewatch-postgres.conf
@@ -20,8 +20,6 @@ MASTER_PUBLIC_KEY = 
98NJW3CQHZQGQXTY3K85K531XKPAPAVV4Q5V8PYYRR00NJGZWNVG
 # Expected base URL of the exchange.
 BASE_URL = "http://localhost:8081/";
 
-signkey_legal_duration = 2 years
-
 [exchangedb]
 # After how long do we close idle reserves?  The exchange
 # and the auditor must agree on this value.  We currently
@@ -51,7 +49,6 @@ PORT = 8083
 # What is the account URL?
 PAYTO_URI = "payto://x-taler-bank/localhost/2"
 WIRE_GATEWAY_URL = "http://localhost:8082/2/";
-
 WIRE_GATEWAY_AUTH_METHOD = basic
 USERNAME = Exchange
 PASSWORD = x
diff --git a/src/testing/test_auditor_api.conf 
b/src/testing/test_auditor_api.conf
index 294381d4..a0304452 100644
--- a/src/testing/test_auditor_api.conf
+++ b/src/testing/test_auditor_api.conf
@@ -20,13 +20,6 @@ TINY_AMOUNT = EUR:0.01
 
 [exchange]
 
-# how long is one signkey valid?
-signkey_duration = 4 weeks
-
-# how long are the signatures with the signkey valid?
-legal_duration = 2 years
-signkey_legal_duration = 2 years
-
 # HTTP port the exchange listens to
 PORT = 8081
 
@@ -40,9 +33,6 @@ DB = postgres
 # exchange (or the twister) is actually listening.
 BASE_URL = "http://localhost:8081/";
 
-# Keep it short so the test runs fast.
-LOOKAHEAD_SIGN = 12 h
-
 [exchangedb-postgres]
 CONFIG = "postgres:///talercheck"
 
@@ -51,10 +41,7 @@ CONFIG = "postgres:///talercheck"
 
 # Sections starting with "exchange-account-" configure the bank accounts
 # of the exchange.  The "URL" specifies the account in
-# payto://-format, while the WIRE_JSON specifies the
-# (possibly offline) signed version to be returned in /wire.
-# WIRE_JSON is optional, as not all accounts must be
-# advertised in /wire.
+# payto://-format.
 [exchange-account-1]
 # What is the URL of our account?
 PAYTO_URI = "payto://x-taler-bank/localhost/42"
diff --git a/src/testing/test_exchange_api.conf 
b/src/testing/test_exchange_api.conf
index a461620d..614aaed1 100644
--- a/src/testing/test_exchange_api.conf
+++ b/src/testing/test_exchange_api.conf
@@ -24,17 +24,6 @@ PRIVACY_ETAG = 0
 TERMS_DIR = /home/grothoff/share/taler-exchange/tos/
 PRIVACY_DIR = /home/grothoff/share/taler-exchange/pp/
 
-# how long is one signkey valid?
-signkey_duration = 4 weeks
-
-# how long are the signatures with the signkey valid?
-legal_duration = 2 years
-signkey_legal_duration = 2 years
-
-# how long do we provide to clients denomination and signing keys
-# ahead of time?
-lookahead_provide = 4 weeks 1 day
-
 # HTTP port the exchange listens to
 PORT = 8081
 
@@ -48,44 +37,29 @@ DB = postgres
 # exchange (or the twister) is actually listening.
 BASE_URL = "http://localhost:8081/";
 
-# Keep it short so the test runs fast.
-LOOKAHEAD_SIGN = 12 h
-
-
 [exchangedb-postgres]
 CONFIG = "postgres:///talercheck"
 
-
 [auditordb-postgres]
 CONFIG = "postgres:///talercheck"
 
 # Sections starting with "exchange-account-" configure the bank accounts
 # of the exchange.  The "URL" specifies the account in
-# payto://-format, while the WIRE_JSON specifies the
-# (possibly offline) signed version to be returned in /wire.
-# WIRE_JSON is optional, as not all accounts must be
-# advertised in /wire.
+# payto://-format.
 [exchange-account-1]
 # What is the URL of our account?
 PAYTO_URI = "payto://x-taler-bank/localhost/42"
-
 WIRE_GATEWAY_URL = "http://localhost:9081/42/";
-
 # ENABLE_CREDIT = YES
 
-
 [exchange-account-2]
 # What is the bank account (with the "Taler Bank" demo system)?
 PAYTO_URI = "payto://x-taler-bank/localhost/2"
-
 WIRE_GATEWAY_AUTH_METHOD = basic
 USERNAME = Exchange
 PASSWORD = x
-
 WIRE_GATEWAY_URL = "http://localhost:9081/2/";
-
 ENABLE_DEBIT = YES
-
 ENABLE_CREDIT = YES
 
 [bank]
diff --git a/src/testing/test_exchange_api_keys_cherry_picking.c 
b/src/testing/test_exchange_api_keys_cherry_picking.c
index 588ef752..e79bc2c5 100644
--- a/src/testing/test_exchange_api_keys_cherry_picking.c
+++ b/src/testing/test_exchange_api_keys_cherry_picking.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2018 Taler Systems SA
+  Copyright (C) 2020 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 pub
@@ -41,49 +41,6 @@ lished
  */
 #define CONFIG_FILE "test_exchange_api_keys_cherry_picking.conf"
 
-/**
- * Used to increase the number of denomination keys.
- */
-#define CONFIG_FILE_EXTENDED \
-  "test_exchange_api_keys_cherry_picking_extended.conf"
-
-/**
- * Used to increase the number of denomination keys.
- */
-#define CONFIG_FILE_EXTENDED_2 \
-  "test_exchange_api_keys_cherry_picking_extended_2.conf"
-
-
-#define NDKS_RIGHT_BEFORE_SERIALIZATION 40
-
-/**
- * Add seconds.
- *
- * @param base absolute time to add seconds to.
- * @param relative number of seconds to add.
- * @return a new absolute time, modified according to @e relative.
- */
-#define ADDSECS(base, secs) \
-  GNUNET_TIME_absolute_add \
-    (base, \
-    GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, \
-                                   secs))
-
-/**
- * Subtract seconds.
- *
- * @param base absolute time to subtract seconds to.
- * @param secs relative number of _seconds_ to subtract.
- * @return a new absolute time, modified according to @e relative.
- */
-#define SUBSECS(base, secs) \
-  GNUNET_TIME_absolute_subtract \
-    (base, \
-    GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, \
-                                   secs))
-#define JAN1971 "1971-01-01"
-#define JAN2030 "2030-01-01"
-
 /**
  * Exchange configuration data.
  */
@@ -91,26 +48,7 @@ static struct TALER_TESTING_ExchangeConfiguration ec;
 
 
 /**
- * Wrapper around the time parser.
- *
- * @param str human-readable time string.
- * @return the parsed time from @a str.
- */
-static struct GNUNET_TIME_Absolute
-TTH_parse_time (const char *str)
-{
-  struct GNUNET_TIME_Absolute ret;
-
-  GNUNET_assert
-    (GNUNET_OK == GNUNET_STRINGS_fancy_time_to_absolute (str,
-                                                         &ret));
-  return ret;
-}
-
-
-/**
- * Main function that will tell the interpreter what commands to
- * run.
+ * Main function that will tell the interpreter what commands to run.
  *
  * @param cls closure
  * @param is[in,out] interpreter state
@@ -119,92 +57,6 @@ static void
 run (void *cls,
      struct TALER_TESTING_Interpreter *is)
 {
-  struct TALER_TESTING_Command keys_serialization[] = {
-    TALER_TESTING_cmd_serialize_keys
-      ("serialize-keys"),
-    TALER_TESTING_cmd_connect_with_state
-      ("reconnect-with-state",
-      "serialize-keys"),
-    /**
-     * Make sure we have the same keys situation as
-     * it was before the serialization.
-     */
-    TALER_TESTING_cmd_check_keys_with_now (
-      "check-keys-after-deserialization",
-      4,
-      NDKS_RIGHT_BEFORE_SERIALIZATION,
-      /**
-       * Pretend 5 seconds passed.
-       */
-      ADDSECS (TTH_parse_time (JAN2030),
-               5)),
-    /**
-     * Use one of the deserialized keys.
-     */
-    TALER_TESTING_cmd_wire
-      ("verify-/wire-with-serialized-keys",
-      "x-taler-bank",
-      NULL,
-      MHD_HTTP_OK),
-    TALER_TESTING_cmd_end (),
-  };
-
-  struct TALER_TESTING_Command ordinary_cherry_pick[] = {
-    /**
-     * 1 DK with 80s withdraw duration, lookahead_sign is 60s
-     * => expect 1 DK.
-     */
-    TALER_TESTING_cmd_check_keys ("check-keys-1",
-                                  1, /* generation */
-                                  1),
-    /**
-     * The far-future now will cause "keyup" to start a fresh
-     * key set.  The new KS will have only one key, because the
-     * current lookahead_sign == 60 seconds and the key's withdraw
-     * duration is 80 seconds.
-     *///
-    TALER_TESTING_cmd_exec_keyup_with_now ("keyup-1",
-                                           CONFIG_FILE,
-                                           TTH_parse_time (JAN2030)),
-    /**
-     * Should return 1 new key, + the original one.  NOTE: the
-     * original DK will never be 'cancelled' as for the current
-     * libtalerexchange logic, so it must always be counted.
-     *///
-    TALER_TESTING_cmd_check_keys_with_now ("check-keys-2",
-                                           2, /* generation */
-                                           2,
-                                           TTH_parse_time (JAN2030)),
-    TALER_TESTING_cmd_exec_keyup_with_now
-      ("keyup-3",
-      CONFIG_FILE_EXTENDED_2,
-      /* Taking care of not using a 'now' that equals the
-       * last DK timestamp, otherwise it would get silently
-       * overridden.  */
-      ADDSECS (TTH_parse_time (JAN2030),
-               10)),
-    /**
-     * Expected number of DK:
-     *
-     * 3000 (the lookahead_sign time frame, in seconds)
-     * - 69 (how many seconds are covered by the latest DK, 79s - 10s already 
past)
-     * ----
-     * 2931
-     * / 79 (how many seconds each DK will cover, 80-1)
-     * ----
-     *   38 (rounded up)
-     *  + 2 (old DKs already stored locally: 1 from the
-     *       very initial setup, and 1 from the 'keyup-1' CMD)
-     * ----
-     *   40
-     *///
-    TALER_TESTING_cmd_check_keys_with_now (
-      "check-keys-3",
-      3 /* generation */,
-      NDKS_RIGHT_BEFORE_SERIALIZATION,
-      TTH_parse_time (JAN2030)),
-    TALER_TESTING_cmd_end ()
-  };
   struct TALER_TESTING_Command commands[] = {
     TALER_TESTING_cmd_auditor_add ("add-auditor-OK",
                                    MHD_HTTP_NO_CONTENT,
@@ -213,15 +65,37 @@ run (void *cls,
                                 "payto://x-taler-bank/localhost/2",
                                 MHD_HTTP_NO_CONTENT,
                                 false),
+    TALER_TESTING_cmd_exec_offline_sign_fees ("offline-sign-fees",
+                                              CONFIG_FILE,
+                                              "EUR:0.01",
+                                              "EUR:0.01"),
     TALER_TESTING_cmd_exec_offline_sign_keys ("offline-sign-future-keys",
                                               CONFIG_FILE),
-    TALER_TESTING_cmd_check_keys_pull_all_keys ("refetch /keys",
-                                                1,
-                                                1 /* FIXME: wrong number... 
*/),
-    TALER_TESTING_cmd_batch ("ordinary-cherry-pick",
-                             ordinary_cherry_pick),
-    TALER_TESTING_cmd_batch ("keys-serialization",
-                             keys_serialization),
+    TALER_TESTING_cmd_check_keys_pull_all_keys ("initial-/keys",
+                                                1),
+    TALER_TESTING_cmd_sleep ("sleep",
+                             6 /* seconds */),
+    TALER_TESTING_cmd_check_keys ("check-keys-1",
+                                  2 /* generation */),
+    TALER_TESTING_cmd_check_keys_with_last_denom ("check-keys-2",
+                                                  3 /* generation */,
+                                                  "check-keys-1"),
+    TALER_TESTING_cmd_serialize_keys ("serialize-keys"),
+    TALER_TESTING_cmd_connect_with_state ("reconnect-with-state",
+                                          "serialize-keys"),
+    /**
+     * Make sure we have the same keys situation as
+     * it was before the serialization.
+     */
+    TALER_TESTING_cmd_check_keys ("check-keys-after-deserialization",
+                                  4),
+    /**
+     * Use one of the deserialized keys.
+     */
+    TALER_TESTING_cmd_wire ("wire-with-serialized-keys",
+                            "x-taler-bank",
+                            NULL,
+                            MHD_HTTP_OK),
     TALER_TESTING_cmd_end ()
   };
 
diff --git a/src/testing/test_exchange_api_keys_cherry_picking.conf 
b/src/testing/test_exchange_api_keys_cherry_picking.conf
index 1ce82bd4..74c64e24 100644
--- a/src/testing/test_exchange_api_keys_cherry_picking.conf
+++ b/src/testing/test_exchange_api_keys_cherry_picking.conf
@@ -24,25 +24,6 @@ BASE_URL = "http://localhost:8083/";
 PORT = 8083
 
 [exchange]
-
-# how long is one signkey valid?
-signkey_duration = 5 seconds
-
-# how long are the signatures with the signkey valid?
-legal_duration = 2 years
-signkey_legal_duration = 2 years
-
-# This value causes keys to be *RETURNED* in a /keys response.
-# It's a relative time that materializes always in now+itsvalue.
-# We keep it very high, so as to not introduce divergencies between
-# keys that have been created and keys that are returned along /keys.
-lookahead_provide = 10000 seconds
-
-# This value causes keys to be *CREATED*.  The rule is that
-# at any given time there are always N keys whose all the withdraw
-# durations sum up to a time window as big as lookahead_sign.
-lookahead_sign = 60 s
-
 # HTTP port the exchange listens to
 PORT = 8081
 
@@ -63,48 +44,38 @@ CONFIG = "postgres:///talercheck"
 [auditordb-postgres]
 CONFIG = "postgres:///talercheck"
 
-
 [exchange-account-1]
-# This is the response we give out for the /wire request.  It provides
-# wallets with the bank information for transfers to the exchange.
-WIRE_RESPONSE = ${TALER_CONFIG_HOME}/iban.json
-
-# What is the URL of our bank account? Must match WIRE_RESPONSE above!
 PAYTO_URI = payto://x-taler-bank/localhost/42
-
 WIRE_GATEWAY_URL = "http://localhost:9082/42/";
 
-
 [exchange-account-2]
-# This is the response we give out for the /wire request.  It provides
-# wallets with the bank information for transfers to the exchange.
-WIRE_RESPONSE = ${TALER_CONFIG_HOME}/x-taler-bank.json
-
-# What is the URL of our bank account? Must match WIRE_RESPONSE above!
 PAYTO_URI = payto://x-taler-bank/localhost/2
-
 WIRE_GATEWAY_URL = "http://localhost:9082/2/";
 
 # Authentication information for basic authentication
 TALER_BANK_AUTH_METHOD = "basic"
 USERNAME = user
 PASSWORD = pass
-
 ENABLE_DEBIT = YES
-
 ENABLE_CREDIT = YES
 
 [bank]
 HTTP_PORT=8082
 
-[exchangedb]
-duration_overlap = 1 s
+[taler-helper-crypto-rsa]
+OVERLAP_DURATION = 1 s
+LOOKAHEAD_SIGN = 20 s
+
+[taler-helper-crypto-eddsa]
+OVERLAP_DURATION = 1 s
+DURATION = 30 s
+LOOKAHEAD_SIGN = 20 s
 
 [coin_eur_1]
 value = EUR:1
-duration_withdraw = 80 s
-duration_spend = 80 s
-duration_legal = 60 s
+duration_withdraw = 5 s
+duration_spend = 6 s
+duration_legal = 7 s
 fee_withdraw = EUR:0.01
 fee_deposit = EUR:0.01
 fee_refresh = EUR:0.03
diff --git a/src/testing/test_exchange_api_overlapping_keys_bug.c 
b/src/testing/test_exchange_api_overlapping_keys_bug.c
index 86f75f93..27d4c680 100644
--- a/src/testing/test_exchange_api_overlapping_keys_bug.c
+++ b/src/testing/test_exchange_api_overlapping_keys_bug.c
@@ -87,7 +87,7 @@ run (void *cls,
     /* Causes GET /keys?last_denom_issue=0 */
     TALER_TESTING_cmd_check_keys_with_last_denom ("second-download",
                                                   1,
-                                                  GNUNET_TIME_UNIT_ZERO_ABS),
+                                                  "zero"),
     TALER_TESTING_cmd_end ()
   };
 
diff --git a/src/testing/test_exchange_api_twisted.conf 
b/src/testing/test_exchange_api_twisted.conf
index 4c7e0ce6..378ee61a 100644
--- a/src/testing/test_exchange_api_twisted.conf
+++ b/src/testing/test_exchange_api_twisted.conf
@@ -9,21 +9,6 @@ CURRENCY = EUR
 CURRENCY_ROUND_UNIT = EUR:0.01
 
 [exchange]
-
-# how long is one signkey valid?
-SIGNKEY_DURATION = 4 weeks
-
-# how long are the signatures with the signkey valid?
-LEGAL_DURATION = 2 years
-signkey_legal_duration = 2 years
-
-# how long do we provide to clients denomination and signing keys
-# ahead of time?
-LOOKAHEAD_PROVIDE = 4 weeks 1 day
-
-# Keep it short so the test runs fast.
-LOOKAHEAD_SIGN = 12 h
-
 # HTTP port the exchange listens to
 PORT = 8081
 
@@ -40,29 +25,22 @@ DB = postgres
 # only seeks the exchange/BASE_URL URL to connect to the exchange.
 BASE_URL = "http://localhost:8888/";
 
-
 [exchangedb-postgres]
 CONFIG = "postgres:///talercheck"
 
-
 [auditor]
 BASE_URL = "http://localhost:8083/";
-
 PORT = 8083
 
-
 [auditordb-postgres]
 CONFIG = "postgres:///talercheck"
 
 [exchange-account-1]
 # What is the URL of our account?
 PAYTO_URI = "payto://x-taler-bank/localhost/42"
-# This is the response we give out for the /wire request.  It provides
-# wallets with the bank information for transfers to the exchange.
 WIRE_GATEWAY_URL = "http://localhost:9081/42/";
 WIRE_GATEWAY_AUTH_METHOD = NONE
 
-
 [exchange-account-2]
 PAYTO_URI = payto://x-taler-bank/localhost/2
 WIRE_GATEWAY_URL = "http://localhost:8082/2/";
@@ -72,11 +50,9 @@ PASSWORD = pass
 ENABLE_DEBIT = YES
 ENABLE_CREDIT = YES
 
-
 [bank]
 HTTP_PORT = 8082
 
-
 [twister]
 # HTTP listen port for twister
 HTTP_PORT = 8888
diff --git a/src/testing/testing_api_cmd_check_keys.c 
b/src/testing/testing_api_cmd_check_keys.c
index bdf142dd..5645bb9b 100644
--- a/src/testing/testing_api_cmd_check_keys.c
+++ b/src/testing/testing_api_cmd_check_keys.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  (C) 2018 Taler Systems SA
+  (C) 2018, 2020 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
@@ -18,15 +18,9 @@
 */
 /**
  * @file testing/testing_api_cmd_check_keys.c
- * @brief Implementation of "check keys" test command.  XXX-NOTE:
- *        the number of 'expected keys' is NOT the number of the
- *        downloaded keys, but rather the number of keys that the
- *        libtalerutil library keeps locally.  As for the current
- *        design, keys are _never_ discarded by the library,
- *        therefore their (expected) number is monotonically
- *        ascending.
- *
+ * @brief Implementation of "check keys" test command.
  * @author Marcello Stanisci
+ * @author Christian Grothoff
  */
 #include "platform.h"
 #include "taler_json_lib.h"
@@ -47,37 +41,21 @@ struct CheckKeysState
   unsigned int generation;
 
   /**
-   * If this value is GNUNET_YES, then the "cherry
+   * If this value is true, then the "cherry
    * picking" facility is turned off; whole /keys is
    * downloaded.
    */
-  unsigned int pull_all_keys;
-
-  /**
-   * If GNUNET_YES, then the user must specify the
-   * last_denom_issue_date manually.  This way, it is possible
-   * to force whatever X value here (including 0): /keys?last_denom_issue=X.
-   */
-  unsigned int set_last_denom;
-
-  /**
-   * Value X to set as the URL parameter:
-   * "/keys?last_denom_issue=X" is used only when `set_last_denom'
-   * equals #GNUNET_YES.
-   */
-  struct GNUNET_TIME_Absolute last_denom_date;
+  bool pull_all_keys;
 
   /**
-   * If #GNUNET_YES, then we'll provide the "/keys" request.
-   * with the "now" argument.
+   * Label of a command to use to derive the "last_denom_issue" date to use.
    */
-  int with_now;
+  const char *last_denom_date_ref;
 
   /**
-   * Fake now as passed by the user.
+   * Last denomination date we received when doing this request.
    */
-  struct GNUNET_TIME_Absolute now;
-
+  struct GNUNET_TIME_Absolute my_denom_date;
 };
 
 
@@ -100,58 +78,74 @@ check_keys_run (void *cls,
               cmd->label,
               is->ip,
               is->key_generation);
-
   if (is->key_generation < cks->generation)
   {
+    struct GNUNET_TIME_Absolute rdate;
+
     is->working = GNUNET_NO;
     GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                 "Triggering GET /keys, cmd `%s'\n",
                 cmd->label);
-
-    if (GNUNET_YES == cks->set_last_denom)
+    if (NULL != cks->last_denom_date_ref)
     {
-      TALER_LOG_DEBUG ("Forcing last_denom_date URL argument\n");
-      TALER_EXCHANGE_set_last_denom (is->exchange,
-                                     cks->last_denom_date);
+      if (0 == strcmp ("zero",
+                       cks->last_denom_date_ref))
+      {
+        TALER_LOG_DEBUG ("Forcing last_denom_date URL argument set to zero\n");
+        TALER_EXCHANGE_set_last_denom (is->exchange,
+                                       GNUNET_TIME_UNIT_ZERO_ABS);
+      }
+      else
+      {
+        const struct GNUNET_TIME_Absolute *last_denom_date;
+        const struct TALER_TESTING_Command *ref;
+
+        ref = TALER_TESTING_interpreter_lookup_command (is,
+                                                        
cks->last_denom_date_ref);
+        if (NULL == ref)
+        {
+          GNUNET_break (0);
+          TALER_TESTING_interpreter_fail (is);
+          return;
+        }
+        if (GNUNET_OK !=
+            TALER_TESTING_get_trait_absolute_time (ref,
+                                                   0,
+                                                   &last_denom_date))
+        {
+          GNUNET_break (0);
+          TALER_TESTING_interpreter_fail (is);
+          return;
+        }
+
+        TALER_LOG_DEBUG ("Forcing last_denom_date URL argument\n");
+        TALER_EXCHANGE_set_last_denom (is->exchange,
+                                       *last_denom_date);
+      }
     }
 
-    if (GNUNET_YES == cks->with_now)
-      TALER_EXCHANGE_set_now (is->exchange,
-                              cks->now);
+    rdate = TALER_EXCHANGE_check_keys_current (
+      is->exchange,
+      cks->pull_all_keys
+      ? TALER_EXCHANGE_CKF_FORCE_ALL_NOW
+      : TALER_EXCHANGE_CKF_FORCE_DOWNLOAD);
     /* Redownload /keys.  */
-    GNUNET_break
-      (0 == TALER_EXCHANGE_check_keys_current
-        (is->exchange,
-        cks->pull_all_keys
-        ? TALER_EXCHANGE_CKF_FORCE_ALL_NOW
-        : TALER_EXCHANGE_CKF_FORCE_DOWNLOAD).abs_value_us);
+    GNUNET_break (0 ==
+                  rdate.abs_value_us);
     return;
   }
-
-#if 0
-  /**
-   * Not sure this check makes sense: GET /keys is performed on
-   * a "maybe" basis, so it can get quite hard to track /keys
-   * request.  Rather, this CMD should just check if /keys was
-   * requested AT LEAST n times before going ahead with checks.
-   *///
-  if (is->key_generation > cks->generation)
   {
-    /* We got /keys too often, strange. Fatal. May theoretically
-       happen if somehow we were really unlucky and /keys expired
-       "naturally", but obviously with a sane configuration this
-       should also not be. */
-    GNUNET_break (0);
-    TALER_LOG_ERROR ("Acutal- vs expected key"
-                     " generation: %u vs %u\n",
-                     is->key_generation,
-                     cks->generation);
-    TALER_TESTING_interpreter_fail (is);
-    return;
+    const struct TALER_EXCHANGE_Keys *keys;
+
+    keys = TALER_EXCHANGE_get_keys (is->exchange);
+    if (NULL == keys)
+    {
+      GNUNET_break (0);
+      TALER_TESTING_interpreter_fail (is);
+      return;
+    }
+    cks->my_denom_date = keys->last_denom_issue_date;
   }
-#endif
-  /* Let's unset the fake now before moving on.  */
-  TALER_EXCHANGE_unset_now (is->exchange);
   TALER_TESTING_interpreter_next (is);
 }
 
@@ -173,28 +167,34 @@ check_keys_cleanup (void *cls,
 }
 
 
-struct TALER_TESTING_Command
-TALER_TESTING_cmd_check_keys_with_last_denom (
-  const char *label,
-  unsigned int generation,
-  struct GNUNET_TIME_Absolute last_denom_date)
+/**
+ * Offer internal data to a "check_keys" CMD state to other
+ * commands.
+ *
+ * @param cls closure
+ * @param[out] ret result (could be anything)
+ * @param trait name of the trait
+ * @param index index number of the object to offer.
+ * @return #GNUNET_OK on success
+ */
+static int
+check_keys_traits (void *cls,
+                   const void **ret,
+                   const char *trait,
+                   unsigned int index)
 {
-  struct CheckKeysState *cks;
-
-  cks = GNUNET_new (struct CheckKeysState);
-  cks->generation = generation;
-  cks->set_last_denom = GNUNET_YES;
-  cks->last_denom_date = last_denom_date;
-  {
-    struct TALER_TESTING_Command cmd = {
-      .cls = cks,
-      .label = label,
-      .run = &check_keys_run,
-      .cleanup = &check_keys_cleanup
-    };
-
-    return cmd;
-  }
+  struct CheckKeysState *cks = cls;
+  struct TALER_TESTING_Trait traits[] = {
+    /* history entry MUST be first due to response code logic below! */
+    TALER_TESTING_make_trait_absolute_time (0,
+                                            &cks->my_denom_date),
+    TALER_TESTING_trait_end ()
+  };
+
+  return TALER_TESTING_get_trait (traits,
+                                  ret,
+                                  trait,
+                                  index);
 }
 
 
@@ -211,7 +211,8 @@ TALER_TESTING_cmd_check_keys (const char *label,
       .cls = cks,
       .label = label,
       .run = &check_keys_run,
-      .cleanup = &check_keys_cleanup
+      .cleanup = &check_keys_cleanup,
+      .traits = &check_keys_traits
     };
 
     return cmd;
@@ -223,21 +224,28 @@ struct TALER_TESTING_Command
 TALER_TESTING_cmd_check_keys_pull_all_keys (const char *label,
                                             unsigned int generation)
 {
-  struct CheckKeysState *cks;
+  struct TALER_TESTING_Command cmd
+    = TALER_TESTING_cmd_check_keys (label,
+                                    generation);
+  struct CheckKeysState *cks = cmd.cls;
 
-  cks = GNUNET_new (struct CheckKeysState);
-  cks->generation = generation;
-  cks->pull_all_keys = GNUNET_YES;
-  {
-    struct TALER_TESTING_Command cmd = {
-      .cls = cks,
-      .label = label,
-      .run = &check_keys_run,
-      .cleanup = &check_keys_cleanup
-    };
+  cks->pull_all_keys = true;
+  return cmd;
+}
 
-    return cmd;
-  }
+
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_check_keys_with_last_denom (
+  const char *label,
+  unsigned int generation,
+  const char *last_denom_date_ref)
+{
+  struct TALER_TESTING_Command cmd
+    = TALER_TESTING_cmd_check_keys (label,
+                                    generation);
+  struct CheckKeysState *cks = cmd.cls;
+  cks->last_denom_date_ref = last_denom_date_ref;
+  return cmd;
 }
 
 

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

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