diff options
Diffstat (limited to 'src/bank-lib')
| -rw-r--r-- | src/bank-lib/bank_api_history.c | 13 | ||||
| -rw-r--r-- | src/bank-lib/fakebank.c | 78 | ||||
| -rw-r--r-- | src/bank-lib/test_bank_api_new.c | 5 | ||||
| -rw-r--r-- | src/bank-lib/test_bank_api_twisted.c | 1 | ||||
| -rw-r--r-- | src/bank-lib/test_bank_api_with_fakebank.c | 9 | ||||
| -rw-r--r-- | src/bank-lib/test_bank_api_with_fakebank_new.c | 13 | ||||
| -rw-r--r-- | src/bank-lib/test_bank_api_with_fakebank_twisted.c | 1 | ||||
| -rw-r--r-- | src/bank-lib/test_bank_interpreter.c | 1 | ||||
| -rw-r--r-- | src/bank-lib/test_bank_interpreter.h | 6 | ||||
| -rw-r--r-- | src/bank-lib/testing_api_cmd_history.c | 14 | 
10 files changed, 118 insertions, 23 deletions
| diff --git a/src/bank-lib/bank_api_history.c b/src/bank-lib/bank_api_history.c index 844f9b0c..ab757a2d 100644 --- a/src/bank-lib/bank_api_history.c +++ b/src/bank-lib/bank_api_history.c @@ -256,6 +256,7 @@ handle_history_finished (void *cls,   * @param auth authentication data to use   * @param account_number which account number should we query   * @param direction what kinds of wire transfers should be returned + * @param ascending if GNUNET_YES, history elements will be returned in chronological order.   * @param start_row from which row on do we want to get results, use UINT64_MAX for the latest; exclusive   * @param num_results how many results do we want; negative numbers to go into the past,   *                    positive numbers to go into the future starting at @a start_row; @@ -272,6 +273,7 @@ TALER_BANK_history (struct GNUNET_CURL_Context *ctx,                      const struct TALER_BANK_AuthenticationData *auth,                      uint64_t account_number,                      enum TALER_BANK_Direction direction, +                    unsigned int ascending,                      uint64_t start_row,                      int64_t num_results,                      TALER_BANK_HistoryResultCallback hres_cb, @@ -310,25 +312,28 @@ TALER_BANK_history (struct GNUNET_CURL_Context *ctx,      can = "show";    else      can = "omit"; +    if (UINT64_MAX == start_row)    {      GNUNET_asprintf (&url, -                     "/history?auth=basic&account_number=%llu&delta=%lld&direction=%s&cancelled=%s", +                     "/history?auth=basic&account_number=%llu&delta=%lld&direction=%s&cancelled=%s&ordering=%s",                       (unsigned long long) account_number,                       (long long) num_results,                       dir, -                     can); +                     can, +                     (GNUNET_YES == ascending) ? "ascending" : "descending");    }    else    {      GNUNET_asprintf (&url, -                     "/history?auth=basic&account_number=%llu&delta=%lld&start=%llu&direction=%s&cancelled=%s", +                     "/history?auth=basic&account_number=%llu&delta=%lld&start=%llu&direction=%s&cancelled=%s&ordering=%s",                       (unsigned long long) account_number,                       (long long) num_results,                       (unsigned long long) start_row,                       dir, -                     can); +                     can, +                     (GNUNET_YES == ascending) ? "ascending" : "descending");    }    hh = GNUNET_new (struct TALER_BANK_HistoryHandle); diff --git a/src/bank-lib/fakebank.c b/src/bank-lib/fakebank.c index 82c5a6ca..52f0d73a 100644 --- a/src/bank-lib/fakebank.c +++ b/src/bank-lib/fakebank.c @@ -96,6 +96,30 @@ struct Transaction  /** + * Needed to implement ascending/descending ordering + * of /history results. + */ +struct HistoryElement +{ + +  /** +   * History JSON element. +   */ +  json_t *element; + +  /** +   * Previous element. +   */ +  struct HistoryElement *prev; + +  /** +   * Next element. +   */ +  struct HistoryElement *next; +}; + + +/**   * Handle for the fake bank.   */  struct TALER_FAKEBANK_Handle @@ -660,6 +684,7 @@ handle_history (struct TALER_FAKEBANK_Handle *h,    const char *dir;    const char *acc;    const char *cancelled; +  const char *ordering;    unsigned long long account_number;    unsigned long long start_number;    long long count; @@ -668,6 +693,10 @@ handle_history (struct TALER_FAKEBANK_Handle *h,    json_t *history;    json_t *jresponse;    int ret; +  int ascending; +  struct HistoryElement *history_results_head = NULL; +  struct HistoryElement *history_results_tail = NULL; +  struct HistoryElement *history_element = NULL;    auth = MHD_lookup_connection_value (connection,                                        MHD_GET_ARGUMENT_KIND, @@ -684,6 +713,9 @@ handle_history (struct TALER_FAKEBANK_Handle *h,    start = MHD_lookup_connection_value (connection,                                         MHD_GET_ARGUMENT_KIND,                                         "start"); +  ordering = MHD_lookup_connection_value (connection, +                                          MHD_GET_ARGUMENT_KIND, +                                          "ordering");    acc = MHD_lookup_connection_value (connection,                                       MHD_GET_ARGUMENT_KIND,                                       "account_number"); @@ -727,11 +759,11 @@ handle_history (struct TALER_FAKEBANK_Handle *h,      return MHD_NO;    }    GNUNET_log (GNUNET_ERROR_TYPE_INFO, -              "Client asked for up to %lld results of type %s for account %llu starting at %s\n", +              "Client asked for up to %lld results of type %s for account %llu starting at %llu\n",                count,                dir,                (unsigned long long) account_number, -              start); +              start_number);    if (0 == strcasecmp (dir,                         "CREDIT"))    { @@ -767,12 +799,7 @@ handle_history (struct TALER_FAKEBANK_Handle *h,      return MHD_NO;    }    if (NULL == start) -  { -    if (count > 0) -      pos = h->transactions_head; -    else -      pos = h->transactions_tail; -  } +    pos = h->transactions_tail;    else if (NULL != h->transactions_head)    {      for (pos = h->transactions_head; @@ -800,6 +827,13 @@ handle_history (struct TALER_FAKEBANK_Handle *h,    }    history = json_array (); +  if ((NULL != ordering) +      && 0 == strcmp ("ascending", +                      ordering)) +    ascending = GNUNET_YES; +  else +    ascending = GNUNET_NO; +    while ( (NULL != pos) &&            (0 != count) )    { @@ -846,8 +880,19 @@ handle_history (struct TALER_FAKEBANK_Handle *h,                         "wt_subject", subject);      GNUNET_assert (NULL != trans);      GNUNET_free (subject); -    GNUNET_assert (0 == json_array_append_new (history, -                                               trans)); +     +    history_element = GNUNET_new (struct HistoryElement); +    history_element->element = trans; + +    if (((0 < count) && (GNUNET_YES == ascending)) +      || ((0 > count) && (GNUNET_NO == ascending))) +    GNUNET_CONTAINER_DLL_insert_tail (history_results_head, +                                      history_results_tail, +                                      history_element); +    else +      GNUNET_CONTAINER_DLL_insert (history_results_head, +                                   history_results_tail, +                                   history_element);      if (count > 0)      {        pos = pos->next; @@ -859,6 +904,19 @@ handle_history (struct TALER_FAKEBANK_Handle *h,        count++;      }    } + +  if (NULL != history_results_head) +    history_element = history_results_head; +  while (NULL != history_element) +  { +    json_array_append_new (history, +                           history_element->element); +    history_element = history_element->next; +    if (NULL != history_element) +      GNUNET_free_non_null (history_element->prev); +  } +  GNUNET_free_non_null (history_results_tail); +    if (0 == json_array_size (history))    {      struct MHD_Response *resp; diff --git a/src/bank-lib/test_bank_api_new.c b/src/bank-lib/test_bank_api_new.c index 3645b301..8513f5a5 100644 --- a/src/bank-lib/test_bank_api_new.c +++ b/src/bank-lib/test_bank_api_new.c @@ -78,6 +78,7 @@ run (void *cls,                                      bank_url,                                      EXCHANGE_ACCOUNT_NUMBER,                                      TALER_BANK_DIRECTION_BOTH, +                                    GNUNET_NO,                                      NULL,                                      5), @@ -110,6 +111,7 @@ run (void *cls,                                      bank_url,                                      EXCHANGE_ACCOUNT_NUMBER,                                      TALER_BANK_DIRECTION_CREDIT, +                                    GNUNET_NO,                                      NULL,                                      -5), @@ -117,6 +119,7 @@ run (void *cls,                                      bank_url,                                      EXCHANGE_ACCOUNT_NUMBER,                                      TALER_BANK_DIRECTION_DEBIT, +                                    GNUNET_NO,                                      NULL,                                      5), @@ -124,6 +127,7 @@ run (void *cls,                                      bank_url,                                      EXCHANGE_ACCOUNT_NUMBER,                                      TALER_BANK_DIRECTION_DEBIT, +                                    GNUNET_NO,                                      NULL,                                      -5), @@ -131,6 +135,7 @@ run (void *cls,                                      bank_url,                                      EXCHANGE_ACCOUNT_NUMBER,                                      TALER_BANK_DIRECTION_DEBIT, +                                    GNUNET_NO,                                      "deposit-1",                                      5), diff --git a/src/bank-lib/test_bank_api_twisted.c b/src/bank-lib/test_bank_api_twisted.c index f90b0572..99c33c9a 100644 --- a/src/bank-lib/test_bank_api_twisted.c +++ b/src/bank-lib/test_bank_api_twisted.c @@ -88,6 +88,7 @@ run (void *cls,                                      twister_url,                                      EXCHANGE_ACCOUNT_NUMBER,                                      TALER_BANK_DIRECTION_BOTH, +                                    GNUNET_NO,                                      NULL,                                      5),      /** diff --git a/src/bank-lib/test_bank_api_with_fakebank.c b/src/bank-lib/test_bank_api_with_fakebank.c index b860669c..42978469 100644 --- a/src/bank-lib/test_bank_api_with_fakebank.c +++ b/src/bank-lib/test_bank_api_with_fakebank.c @@ -88,13 +88,14 @@ run (void *cls)        .details.history.account_number = 2,        .details.history.direction = TALER_BANK_DIRECTION_BOTH,        .details.history.start_row_ref = NULL, -      .details.history.num_results = 5 }, +      .details.history.num_results = -5 },      { .oc = TBI_OC_HISTORY,        .label = "history-2bi",        .details.history.account_number = 2,        .details.history.direction = TALER_BANK_DIRECTION_BOTH,        .details.history.start_row_ref = "debit-1", -      .details.history.num_results = 5 }, +      .details.history.num_results = 5, +      .details.history.ascending = GNUNET_YES},      /* check transfers arrived at fakebank */      { .oc = TBI_OC_EXPECT_TRANSFER,        .label = "expect-2d", @@ -129,13 +130,13 @@ run (void *cls)           in the history. So to see the rejected transfer, we need to start           looking after "credit-2" */        .details.history.start_row_ref = NULL, -      .details.history.num_results = 5 }, +      .details.history.num_results = -5 },      { .oc = TBI_OC_HISTORY,        .label = "history-r1c",        .details.history.account_number = 1,        .details.history.direction = TALER_BANK_DIRECTION_BOTH | TALER_BANK_DIRECTION_CANCEL,        .details.history.start_row_ref = NULL, -      .details.history.num_results = 5 }, +      .details.history.num_results = -5 },      { .oc = TBI_OC_EXPECT_TRANSFER,        .label = "expect-credit-reject-1",        .details.expect_transfer.cmd_ref = "credit-for-reject-1" }, diff --git a/src/bank-lib/test_bank_api_with_fakebank_new.c b/src/bank-lib/test_bank_api_with_fakebank_new.c index 22ed30a5..cf7c0918 100644 --- a/src/bank-lib/test_bank_api_with_fakebank_new.c +++ b/src/bank-lib/test_bank_api_with_fakebank_new.c @@ -73,6 +73,7 @@ run (void *cls,                                      fakebank_url,                                      BANK_ACCOUNT_NUMBER,                                      TALER_BANK_DIRECTION_BOTH, +                                    GNUNET_NO,                                      NULL,                                      1), @@ -94,6 +95,7 @@ run (void *cls,                                      fakebank_url,                                      BANK_ACCOUNT_NUMBER,                                      TALER_BANK_DIRECTION_CREDIT, +                                    GNUNET_NO,                                      NULL,                                      5), @@ -101,6 +103,7 @@ run (void *cls,                                      fakebank_url,                                      BANK_ACCOUNT_NUMBER,                                      TALER_BANK_DIRECTION_DEBIT, +                                    GNUNET_NO,                                      NULL,                                      5), @@ -130,13 +133,15 @@ run (void *cls,                                      fakebank_url,                                      EXCHANGE_ACCOUNT_NUMBER,                                      TALER_BANK_DIRECTION_BOTH, +                                    GNUNET_NO,                                      NULL, -                                    5), +                                    -5),      TALER_TESTING_cmd_bank_history ("history-2bi",                                      fakebank_url,                                      EXCHANGE_ACCOUNT_NUMBER,                                      TALER_BANK_DIRECTION_BOTH, +                                    GNUNET_YES,                                      "debit-1",                                      5), @@ -170,16 +175,18 @@ run (void *cls,                                      fakebank_url,                                      BANK_ACCOUNT_NUMBER,                                      TALER_BANK_DIRECTION_BOTH, +                                    GNUNET_NO,                                      NULL, -                                    5), +                                    -5),      TALER_TESTING_cmd_bank_history ("history-r1c",                                      fakebank_url,                                      BANK_ACCOUNT_NUMBER,                                      TALER_BANK_DIRECTION_BOTH |                                      TALER_BANK_DIRECTION_CANCEL, +                                    GNUNET_NO,                                      NULL, -                                    5), +                                    -5),      TALER_TESTING_cmd_check_bank_transfer_with_ref        ("expect-credit-reject-1", diff --git a/src/bank-lib/test_bank_api_with_fakebank_twisted.c b/src/bank-lib/test_bank_api_with_fakebank_twisted.c index 88e9bc3b..fdd18eb2 100644 --- a/src/bank-lib/test_bank_api_with_fakebank_twisted.c +++ b/src/bank-lib/test_bank_api_with_fakebank_twisted.c @@ -80,6 +80,7 @@ run (void *cls,                                      fakebank_url,                                      EXCHANGE_ACCOUNT_NUMBER,                                      TALER_BANK_DIRECTION_BOTH, +                                    GNUNET_NO,                                      NULL,                                      5),      /** diff --git a/src/bank-lib/test_bank_interpreter.c b/src/bank-lib/test_bank_interpreter.c index fe6b4e1a..562b6dae 100644 --- a/src/bank-lib/test_bank_interpreter.c +++ b/src/bank-lib/test_bank_interpreter.c @@ -794,6 +794,7 @@ interpreter_run (void *cls)                              &auth,                              cmd->details.history.account_number,                              cmd->details.history.direction, +                            cmd->details.history.ascending,                              rowid,                              cmd->details.history.num_results,                              &history_cb, diff --git a/src/bank-lib/test_bank_interpreter.h b/src/bank-lib/test_bank_interpreter.h index 010538ac..ae323055 100644 --- a/src/bank-lib/test_bank_interpreter.h +++ b/src/bank-lib/test_bank_interpreter.h @@ -174,6 +174,12 @@ struct TBI_Command         */        int failed; +      /** +       * if true, the history elements will be asked in +       * chronological order. +       */ +      unsigned int ascending; +      } history;      /** diff --git a/src/bank-lib/testing_api_cmd_history.c b/src/bank-lib/testing_api_cmd_history.c index 7b831d4e..c60f6a13 100644 --- a/src/bank-lib/testing_api_cmd_history.c +++ b/src/bank-lib/testing_api_cmd_history.c @@ -84,6 +84,12 @@ struct HistoryState     * unexpected.      */    int failed; + +  /** +   * If GNUNET_YES, this parameter will ask for results in +   * chronological order. +   */ +  unsigned int ascending;  };  /** @@ -726,6 +732,7 @@ history_run (void *cls,                                 auth,                                 hs->account_no,                                 hs->direction, +                               hs->ascending,                                 row_id,                                 hs->num_results,                                 &history_cb, @@ -765,8 +772,9 @@ history_cleanup   * @param bank_url base URL of the bank offering the "history"   *        operation.   * @param account_no bank account number to ask the history for. - * @param direction which direction this operation is interested - *        in. + * @param direction which direction this operation is interested. + * @param ascending if GNUNET_YES, the bank will return the rows + *        in ascending (= chronological) order.   * @param start_row_reference reference to a command that can   *        offer a row identifier, to be used as the starting row   *        to accept in the result. @@ -780,6 +788,7 @@ TALER_TESTING_cmd_bank_history     const char *bank_url,     uint64_t account_no,     enum TALER_BANK_Direction direction, +   unsigned int ascending,     const char *start_row_reference,     long long num_results)  { @@ -792,6 +801,7 @@ TALER_TESTING_cmd_bank_history    hs->direction = direction;    hs->start_row_reference = start_row_reference;    hs->num_results = num_results; +  hs->ascending = ascending;    cmd.label = label;    cmd.cls = hs; | 
