gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [taler-exchange] branch master updated: modify fakebank API


From: gnunet
Subject: [GNUnet-SVN] [taler-exchange] branch master updated: modify fakebank API to allow arbitrary subjects, not just well-fromed WTIDs
Date: Sun, 11 Jun 2017 15:26:02 +0200

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

grothoff pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new 16b7c26  modify fakebank API to allow arbitrary subjects, not just 
well-fromed WTIDs
16b7c26 is described below

commit 16b7c266057cbfc6d235b6a1c3fe914b14944a25
Author: Christian Grothoff <address@hidden>
AuthorDate: Sun Jun 11 15:25:59 2017 +0200

    modify fakebank API to allow arbitrary subjects, not just well-fromed WTIDs
---
 src/bank-lib/fakebank.c                       | 113 +++++++++++++++++---------
 src/bank-lib/test_bank_interpreter.c          |  50 +++++++-----
 src/exchange-lib/test_exchange_api.c          |  26 ++++--
 src/exchange/test_taler_exchange_aggregator.c |   4 +-
 src/exchange/test_taler_exchange_wirewatch.c  |   7 +-
 src/include/taler_fakebank_lib.h              |  27 +++++-
 6 files changed, 154 insertions(+), 73 deletions(-)

diff --git a/src/bank-lib/fakebank.c b/src/bank-lib/fakebank.c
index ceda4d3..34a11f9 100644
--- a/src/bank-lib/fakebank.c
+++ b/src/bank-lib/fakebank.c
@@ -65,7 +65,7 @@ struct Transaction
   /**
    * Subject of the transfer.
    */
-  struct TALER_WireTransferIdentifierRawP wtid;
+  char *subject;
 
   /**
    * Base URL of the exchange.
@@ -119,7 +119,7 @@ struct TALER_FAKEBANK_Handle
 /**
  * Check that the @a want_amount was transferred from
  * the @a want_debit to the @a want_credit account.  If
- * so, set the @a wtid to the transfer identifier.
+ * so, set the @a subject to the transfer identifier.
  * If not, return #GNUNET_SYSERR.
  *
  * @param h bank instance
@@ -137,11 +137,9 @@ TALER_FAKEBANK_check (struct TALER_FAKEBANK_Handle *h,
                       uint64_t want_debit,
                       uint64_t want_credit,
                       const char *exchange_base_url,
-                      struct TALER_WireTransferIdentifierRawP *wtid)
+                      char **subject)
 {
-  struct Transaction *t;
-
-  for (t = h->transactions_head; NULL != t; t = t->next)
+  for (struct Transaction *t = h->transactions_head; NULL != t; t = t->next)
   {
     if ( (want_debit == t->debit_account) &&
          (want_credit == t->credit_account) &&
@@ -153,7 +151,7 @@ TALER_FAKEBANK_check (struct TALER_FAKEBANK_Handle *h,
       GNUNET_CONTAINER_DLL_remove (h->transactions_head,
                                    h->transactions_tail,
                                    t);
-      *wtid = t->wtid;
+      *subject = t->subject;
       GNUNET_free (t->exchange_base_url);
       GNUNET_free (t);
       return GNUNET_OK;
@@ -161,7 +159,7 @@ TALER_FAKEBANK_check (struct TALER_FAKEBANK_Handle *h,
   }
   fprintf (stderr,
            "Did not find matching transaction!\nI have:\n");
-  for (t = h->transactions_head; NULL != t; t = t->next)
+  for (struct Transaction *t = h->transactions_head; NULL != t; t = t->next)
   {
     char *s;
 
@@ -179,6 +177,49 @@ TALER_FAKEBANK_check (struct TALER_FAKEBANK_Handle *h,
 
 
 /**
+ * Tell the fakebank to create another wire transfer.
+ *
+ * @param h fake bank handle
+ * @param debit_account account to debit
+ * @param credit_account account to credit
+ * @param amount amount to transfer
+ * @param subject wire transfer subject to use
+ * @param exchange_base_url exchange URL
+ * @return serial_id of the transfer
+ */
+uint64_t
+TALER_FAKEBANK_make_transfer (struct TALER_FAKEBANK_Handle *h,
+                              uint64_t debit_account,
+                              uint64_t credit_account,
+                              const struct TALER_Amount *amount,
+                              const char *subject,
+                              const char *exchange_base_url)
+{
+  struct Transaction *t;
+
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "Making transfer from %llu to %llu over %s and subject %s\n",
+              (unsigned long long) debit_account,
+              (unsigned long long) credit_account,
+              TALER_amount2s (amount),
+              subject);
+  t = GNUNET_new (struct Transaction);
+  t->debit_account = debit_account;
+  t->credit_account = credit_account;
+  t->amount = *amount;
+  t->exchange_base_url = GNUNET_strdup (exchange_base_url);
+  t->serial_id = ++h->serial_counter;
+  t->date = GNUNET_TIME_absolute_get ();
+  t->subject = GNUNET_strdup (subject);
+  GNUNET_TIME_round_abs (&t->date);
+  GNUNET_CONTAINER_DLL_insert_tail (h->transactions_head,
+                                    h->transactions_tail,
+                                    t);
+  return t->serial_id;
+}
+
+
+/**
  * Check that no wire transfers were ordered (or at least none
  * that have not been taken care of via #TALER_FAKEBANK_check()).
  * If any transactions are onrecord, return #GNUNET_SYSERR.
@@ -228,6 +269,7 @@ TALER_FAKEBANK_stop (struct TALER_FAKEBANK_Handle *h)
     GNUNET_CONTAINER_DLL_remove (h->transactions_head,
                                  h->transactions_tail,
                                  t);
+    GNUNET_free (t->subject);
     GNUNET_free (t->exchange_base_url);
     GNUNET_free (t);
   }
@@ -291,9 +333,9 @@ handle_admin_add_incoming (struct TALER_FAKEBANK_Handle *h,
 {
   enum GNUNET_JSON_PostResult pr;
   json_t *json;
-  struct Transaction *t;
   struct MHD_Response *resp;
   int ret;
+  uint64_t serial_id;
 
   pr = GNUNET_JSON_post_parser (REQUEST_BUFFER_MAX,
                                 con_cls,
@@ -316,14 +358,17 @@ handle_admin_add_incoming (struct TALER_FAKEBANK_Handle 
*h,
   case GNUNET_JSON_PR_SUCCESS:
     break;
   }
-  t = GNUNET_new (struct Transaction);
   {
+    const char *wtid;
+    uint64_t debit_account;
+    uint64_t credit_account;
     const char *base_url;
+    struct TALER_Amount amount;
     struct GNUNET_JSON_Specification spec[] = {
-      GNUNET_JSON_spec_fixed_auto ("wtid", &t->wtid),
-      GNUNET_JSON_spec_uint64 ("debit_account", &t->debit_account),
-      GNUNET_JSON_spec_uint64 ("credit_account", &t->credit_account),
-      TALER_JSON_spec_amount ("amount", &t->amount),
+      GNUNET_JSON_spec_string ("wtid", &wtid),
+      GNUNET_JSON_spec_uint64 ("debit_account", &debit_account),
+      GNUNET_JSON_spec_uint64 ("credit_account", &credit_account),
+      TALER_JSON_spec_amount ("amount", &amount),
       GNUNET_JSON_spec_string ("exchange_url", &base_url),
       GNUNET_JSON_spec_end ()
     };
@@ -336,19 +381,18 @@ handle_admin_add_incoming (struct TALER_FAKEBANK_Handle 
*h,
       json_decref (json);
       return MHD_NO;
     }
-    t->exchange_base_url = GNUNET_strdup (base_url);
-    t->serial_id = ++h->serial_counter;
-    t->date = GNUNET_TIME_absolute_get ();
-    GNUNET_TIME_round_abs (&t->date);
-    GNUNET_CONTAINER_DLL_insert_tail (h->transactions_head,
-                                      h->transactions_tail,
-                                      t);
+    serial_id = TALER_FAKEBANK_make_transfer (h,
+                                              debit_account,
+                                              credit_account,
+                                              &amount,
+                                              wtid,
+                                              base_url);
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Receiving incoming wire transfer: %llu->%llu from %s\n",
+                (unsigned long long) debit_account,
+                (unsigned long long) credit_account,
+                base_url);
   }
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-              "Receiving incoming wire transfer: %llu->%llu from %s\n",
-              (unsigned long long) t->debit_account,
-              (unsigned long long) t->credit_account,
-              t->exchange_base_url);
   json_decref (json);
 
   /* Finally build response object */
@@ -358,7 +402,7 @@ handle_admin_add_incoming (struct TALER_FAKEBANK_Handle *h,
 
     json = json_pack ("{s:I}",
                       "serial_id",
-                      (json_int_t) t->serial_id);
+                      (json_int_t) serial_id);
     json_str = json_dumps (json,
                            JSON_INDENT(2));
     json_decref (json);
@@ -514,17 +558,10 @@ handle_history (struct TALER_FAKEBANK_Handle *h,
       continue;
     }
 
-    {
-      char *ws;
-
-      ws = GNUNET_STRINGS_data_to_string_alloc (&pos->wtid,
-                                                sizeof (pos->wtid));
-      GNUNET_asprintf (&subject,
-                       "%s %s",
-                       ws,
-                       pos->exchange_base_url);
-      GNUNET_free (ws);
-    }
+    GNUNET_asprintf (&subject,
+                     "%s %s",
+                     pos->subject,
+                     pos->exchange_base_url);
     trans = json_pack ("{s:I, s:o, s:o, s:s, s:I, s:s}",
                        "row_id", (json_int_t) pos->serial_id,
                        "date", GNUNET_JSON_from_time_abs (pos->date),
diff --git a/src/bank-lib/test_bank_interpreter.c 
b/src/bank-lib/test_bank_interpreter.c
index e966424..f5aee8e 100644
--- a/src/bank-lib/test_bank_interpreter.c
+++ b/src/bank-lib/test_bank_interpreter.c
@@ -572,7 +572,9 @@ history_cb (void *cls,
                   "Expected history of length %llu, got %llu\n",
                   (unsigned long long) total,
                   (unsigned long long) cmd->details.history.results_obtained);
-      print_expected (h, total, UINT_MAX);
+      print_expected (h,
+                      total,
+                      UINT_MAX);
       free_history (h,
                     total);
       fail (is);
@@ -621,7 +623,6 @@ interpreter_run (void *cls)
   struct InterpreterState *is = cls;
   struct TBI_Command *cmd = &is->commands[is->ip];
   const struct TBI_Command *ref;
-  struct TALER_WireTransferIdentifierRawP wtid;
   struct TALER_Amount amount;
   const struct GNUNET_SCHEDULER_TaskContext *tc;
   struct TALER_BANK_AuthenticationData auth;
@@ -719,25 +720,34 @@ interpreter_run (void *cls)
     GNUNET_assert (GNUNET_OK ==
                    TALER_string_to_amount 
(ref->details.admin_add_incoming.amount,
                                            &amount));
-    if (GNUNET_OK !=
-        TALER_FAKEBANK_check (is->fakebank,
-                              &amount,
-                              ref->details.admin_add_incoming.debit_account_no,
-                              
ref->details.admin_add_incoming.credit_account_no,
-                              
ref->details.admin_add_incoming.exchange_base_url,
-                              &wtid))
     {
-      GNUNET_break (0);
-      fail (is);
-      return;
-    }
-    if (0 != memcmp (&wtid,
-                     &ref->details.admin_add_incoming.wtid,
-                     sizeof (wtid)))
-    {
-      GNUNET_break (0);
-      fail (is);
-      return;
+      char *subject;
+      char *expect;
+
+      if (GNUNET_OK !=
+          TALER_FAKEBANK_check (is->fakebank,
+                                &amount,
+                                
ref->details.admin_add_incoming.debit_account_no,
+                                
ref->details.admin_add_incoming.credit_account_no,
+                                
ref->details.admin_add_incoming.exchange_base_url,
+                                &subject))
+      {
+        GNUNET_break (0);
+        fail (is);
+        return;
+      }
+      expect = GNUNET_STRINGS_data_to_string_alloc 
(&ref->details.admin_add_incoming.wtid,
+                                                    sizeof 
(ref->details.admin_add_incoming.wtid));
+      if (0 != strcmp (subject, expect))
+      {
+        GNUNET_free (expect);
+        GNUNET_free (subject);
+        GNUNET_break (0);
+        fail (is);
+        return;
+      }
+      GNUNET_free (subject);
+      GNUNET_free (expect);
     }
     is->ip++;
     is->task = GNUNET_SCHEDULER_add_now (&interpreter_run,
diff --git a/src/exchange-lib/test_exchange_api.c 
b/src/exchange-lib/test_exchange_api.c
index 53bfbd1..e435ed7 100644
--- a/src/exchange-lib/test_exchange_api.c
+++ b/src/exchange-lib/test_exchange_api.c
@@ -636,9 +636,9 @@ struct Command
       const char *exchange_base_url;
 
       /**
-       * Set (!) to the wire transfer identifier observed.
+       * Set (!) to the wire transfer subject observed.
        */
-      struct TALER_WireTransferIdentifierRawP wtid;
+      char *subject;
 
     } check_bank_transfer;
 
@@ -1805,18 +1805,24 @@ deposit_wtid_cb (void *cls,
     if (NULL != cmd->details.deposit_wtid.bank_transfer_ref)
     {
       const struct Command *ref;
+      char *ws;
+
+      ws = GNUNET_STRINGS_data_to_string_alloc (wtid,
+                                                sizeof (*wtid));
+
 
       ref = find_command (is,
                           cmd->details.deposit_wtid.bank_transfer_ref);
       GNUNET_assert (NULL != ref);
-      if (0 != memcmp (wtid,
-                       &ref->details.check_bank_transfer.wtid,
-                       sizeof (struct TALER_WireTransferIdentifierRawP)))
+      if (0 != strcmp (ws,
+                       ref->details.check_bank_transfer.subject))
       {
         GNUNET_break (0);
+        GNUNET_free (ws);
         fail (is);
         return;
       }
+      GNUNET_free (ws);
     }
     break;
   case MHD_HTTP_ACCEPTED:
@@ -2496,7 +2502,11 @@ interpreter_run (void *cls)
         cmd->details.wire_deposits.wtid = ref->details.deposit_wtid.wtid;
         break;
       case OC_CHECK_BANK_TRANSFER:
-        cmd->details.wire_deposits.wtid = 
ref->details.check_bank_transfer.wtid;
+        GNUNET_assert (GNUNET_OK ==
+                       GNUNET_STRINGS_string_to_data 
(ref->details.check_bank_transfer.subject,
+                                                      strlen 
(ref->details.check_bank_transfer.subject),
+                                                      
&cmd->details.wire_deposits.wtid,
+                                                      sizeof 
(cmd->details.wire_deposits.wtid)));
         break;
       default:
         GNUNET_break (0);
@@ -2597,7 +2607,7 @@ interpreter_run (void *cls)
                                 cmd->details.check_bank_transfer.account_debit,
                                 
cmd->details.check_bank_transfer.account_credit,
                                 
cmd->details.check_bank_transfer.exchange_base_url,
-                                &cmd->details.check_bank_transfer.wtid))
+                                &cmd->details.check_bank_transfer.subject))
       {
         GNUNET_break (0);
         fail (is);
@@ -2951,6 +2961,8 @@ do_shutdown (void *cls)
       }
       break;
     case OC_CHECK_BANK_TRANSFER:
+      GNUNET_free_non_null (cmd->details.check_bank_transfer.subject);
+      cmd->details.check_bank_transfer.subject = NULL;
       break;
     case OC_CHECK_BANK_TRANSFERS_EMPTY:
       break;
diff --git a/src/exchange/test_taler_exchange_aggregator.c 
b/src/exchange/test_taler_exchange_aggregator.c
index 6eaa093..db22613 100644
--- a/src/exchange/test_taler_exchange_aggregator.c
+++ b/src/exchange/test_taler_exchange_aggregator.c
@@ -118,7 +118,7 @@ struct Command
       /**
        * Subject of the transfer, set by the command.
        */
-      struct TALER_WireTransferIdentifierRawP wtid;
+      char *subject;
 
     } expect_transaction;
 
@@ -565,7 +565,7 @@ interpreter (void *cls)
                                   
cmd->details.expect_transaction.debit_account,
                                   
cmd->details.expect_transaction.credit_account,
                                   
cmd->details.expect_transaction.exchange_base_url,
-                                  &cmd->details.expect_transaction.wtid))
+                                  &cmd->details.expect_transaction.subject))
         {
           fail (cmd);
           return;
diff --git a/src/exchange/test_taler_exchange_wirewatch.c 
b/src/exchange/test_taler_exchange_wirewatch.c
index cf3cd49..f47a126 100644
--- a/src/exchange/test_taler_exchange_wirewatch.c
+++ b/src/exchange/test_taler_exchange_wirewatch.c
@@ -31,7 +31,6 @@
 #include "taler_fakebank_lib.h"
 
 
-
 /**
  * Commands for the interpreter.
  */
@@ -127,7 +126,7 @@ struct Command
       /**
        * Subject of the transfer, set by the command.
        */
-      struct TALER_WireTransferIdentifierRawP wtid;
+      char *subject;
 
     } expect_transfer;
 
@@ -371,6 +370,8 @@ shutdown_action (void *cls)
                                                state);
       break;
     case OPCODE_EXPECT_TRANSFER:
+      GNUNET_free_non_null (cmd->details.expect_transfer.subject);
+      cmd->details.expect_transfer.subject = NULL;
       break;
     case OPCODE_EXPECT_TRANSFERS_EMPTY:
       break;
@@ -521,7 +522,7 @@ interpreter (void *cls)
                                 cmd->details.expect_transfer.debit_account,
                                 cmd->details.expect_transfer.credit_account,
                                 cmd->details.expect_transfer.exchange_base_url,
-                                &cmd->details.expect_transfer.wtid))
+                                &cmd->details.expect_transfer.subject))
       {
         fail (cmd);
         return;
diff --git a/src/include/taler_fakebank_lib.h b/src/include/taler_fakebank_lib.h
index 7d8757d..3df1e60 100644
--- a/src/include/taler_fakebank_lib.h
+++ b/src/include/taler_fakebank_lib.h
@@ -62,8 +62,29 @@ TALER_FAKEBANK_check_empty (struct TALER_FAKEBANK_Handle *h);
 
 
 /**
+ * Tell the fakebank to create another wire transfer.
+ *
+ * @param h fake bank handle
+ * @param debit_account account to debit
+ * @param credit_account account to credit
+ * @param amount amount to transfer
+ * @param subject wire transfer subject to use
+ * @param exchange_base_url exchange URL
+ * @return serial_id of the transfer
+ */
+uint64_t
+TALER_FAKEBANK_make_transfer (struct TALER_FAKEBANK_Handle *h,
+                              uint64_t debit_account,
+                              uint64_t credit_account,
+                              const struct TALER_Amount *amount,
+                              const char *subject,
+                              const char *exchange_base_url);
+
+
+
+/**
  * Check that the @a want_amount was transferred from the @a
- * want_debit to the @a want_credit account.  If so, set the @a wtid
+ * want_debit to the @a want_credit account.  If so, set the @a subject
  * to the transfer identifier and remove the transaction from the
  * list.  If the transaction was not recorded, return #GNUNET_SYSERR.
  *
@@ -73,7 +94,7 @@ TALER_FAKEBANK_check_empty (struct TALER_FAKEBANK_Handle *h);
  * @param want_debit account that should have been credited
  * @param exchange_base_url expected base URL of the exchange,
  *        i.e. "https://example.com/";; may include a port
- * @param[out] wtid set to the wire transfer identifier
+ * @param[out] subject set to the wire transfer identifier
  * @return #GNUNET_OK on success
  */
 int
@@ -82,7 +103,7 @@ TALER_FAKEBANK_check (struct TALER_FAKEBANK_Handle *h,
                       uint64_t want_debit,
                       uint64_t want_credit,
                       const char *exchange_base_url,
-                      struct TALER_WireTransferIdentifierRawP *wtid);
+                      char **subject);
 
 
 /**

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



reply via email to

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