exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

test_auditor_api.c (26642B)


      1 /*
      2   This file is part of TALER
      3   Copyright (C) 2014-2020 Taler Systems SA
      4 
      5   TALER is free software; you can redistribute it and/or modify
      6   it under the terms of the GNU General Public License as
      7   published by the Free Software Foundation; either version 3, or
      8   (at your option) any later version.
      9 
     10   TALER is distributed in the hope that it will be useful, but
     11   WITHOUT ANY WARRANTY; without even the implied warranty of
     12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13   GNU General Public License for more details.
     14 
     15   You should have received a copy of the GNU General Public
     16   License along with TALER; see the file COPYING.  If not, see
     17   <http://www.gnu.org/licenses/>
     18 */
     19 /**
     20  * @file testing/test_auditor_api.c
     21  * @brief testcase to test auditor's HTTP API interface
     22  * @author Christian Grothoff
     23  * @author Marcello Stanisci
     24  */
     25 #include "taler/platform.h"
     26 #include "taler/taler_util.h"
     27 #include "taler/taler_signatures.h"
     28 #include "taler/taler_exchange_service.h"
     29 #include "taler/taler_auditor_service.h"
     30 #include "taler/taler_json_lib.h"
     31 #include <gnunet/gnunet_util_lib.h>
     32 #include <gnunet/gnunet_testing_lib.h>
     33 #include <microhttpd.h>
     34 #include "taler/taler_bank_service.h"
     35 #include "taler/taler_fakebank_lib.h"
     36 #include "taler/taler_testing_lib.h"
     37 
     38 
     39 /**
     40  * Configuration file we use.  One (big) configuration is used
     41  * for the various components for this test.
     42  */
     43 static char *config_file;
     44 
     45 static char *config_file_expire_reserve_now;
     46 
     47 /**
     48  * Our credentials.
     49  */
     50 static struct TALER_TESTING_Credentials cred;
     51 
     52 /**
     53  * Execute the taler-exchange-wirewatch command with
     54  * our configuration file.
     55  *
     56  * @param label label to use for the command.
     57  */
     58 #define CMD_EXEC_WIREWATCH(label) \
     59         TALER_TESTING_cmd_exec_wirewatch2 (label, config_file, \
     60                                            "exchange-account-2")
     61 
     62 /**
     63  * Execute the taler-exchange-aggregator, closer and transfer commands with
     64  * our configuration file.
     65  *
     66  * @param label label to use for the command.
     67  */
     68 #define CMD_EXEC_AGGREGATOR(label) \
     69         TALER_TESTING_cmd_sleep (label "-sleep", 1), \
     70         TALER_TESTING_cmd_exec_aggregator (label, config_file), \
     71         TALER_TESTING_cmd_exec_transfer (label, config_file)
     72 
     73 /**
     74  * Run wire transfer of funds from some user's account to the
     75  * exchange.
     76  *
     77  * @param label label to use for the command.
     78  * @param amount amount to transfer, i.e. "EUR:1"
     79  */
     80 #define CMD_TRANSFER_TO_EXCHANGE(label,amount) \
     81         TALER_TESTING_cmd_admin_add_incoming (label, amount,           \
     82                                               &cred.ba,       \
     83                                               cred.user42_payto)
     84 
     85 /**
     86  * Run the taler-auditor.
     87  *
     88  * @param label label to use for the command.
     89  */
     90 #define CMD_RUN_AUDITOR(label) \
     91         TALER_TESTING_cmd_exec_auditor (label, config_file)
     92 
     93 
     94 /**
     95  * Main function that will tell the interpreter what commands to
     96  * run.
     97  *
     98  * @param cls closure
     99  */
    100 static void
    101 run (void *cls,
    102      struct TALER_TESTING_Interpreter *is)
    103 {
    104   /**
    105    * Test withdraw.
    106    */
    107   struct TALER_TESTING_Command withdraw[] = {
    108     /**
    109      * Move money to the exchange's bank account.
    110      */
    111     CMD_TRANSFER_TO_EXCHANGE ("create-reserve-1",
    112                               "EUR:5.01"),
    113     TALER_TESTING_cmd_check_bank_admin_transfer
    114       ("check-create-reserve-1",
    115       "EUR:5.01", cred.user42_payto, cred.exchange_payto,
    116       "create-reserve-1"),
    117     /**
    118      * Make a reserve exist, according to the previous transfer.
    119      */
    120     CMD_EXEC_WIREWATCH ("wirewatch-1"),
    121     /**
    122      * Withdraw EUR:5.
    123      */
    124     TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-1",
    125                                        "create-reserve-1",
    126                                        "EUR:5",
    127                                        0, /* age restriction off */
    128                                        MHD_HTTP_OK),
    129     TALER_TESTING_cmd_end ()
    130   };
    131 
    132   struct TALER_TESTING_Command spend[] = {
    133     /**
    134      * Spend the coin.
    135      */
    136     TALER_TESTING_cmd_deposit ("deposit-simple",
    137                                "withdraw-coin-1",
    138                                0,
    139                                cred.user42_payto,
    140                                "{\"items\":[{\"name\":\"ice cream\",\"value\":1}]}",
    141                                GNUNET_TIME_UNIT_ZERO,
    142                                "EUR:5",
    143                                MHD_HTTP_OK),
    144     TALER_TESTING_cmd_end ()
    145   };
    146 
    147   struct TALER_TESTING_Command refresh[] = {
    148     /* Fill reserve with EUR:5, 1ct is for fees.  NOTE: the old
    149      * test-suite gave a account number of _424_ to the user at
    150      * this step; to type less, here the _42_ number is reused.
    151      * Does this change the tests semantics? *///
    152     CMD_TRANSFER_TO_EXCHANGE ("refresh-create-reserve-1",
    153                               "EUR:5.01"),
    154     TALER_TESTING_cmd_check_bank_admin_transfer
    155       ("check-refresh-create-reserve-1",
    156       "EUR:5.01", cred.user42_payto, cred.exchange_payto,
    157       "refresh-create-reserve-1"),
    158     /**
    159      * Make previous command effective.
    160      */
    161     CMD_EXEC_WIREWATCH ("wirewatch-2"),
    162     /**
    163      * Withdraw EUR:5.
    164      */
    165     TALER_TESTING_cmd_withdraw_amount ("refresh-withdraw-coin-1",
    166                                        "refresh-create-reserve-1",
    167                                        "EUR:5",
    168                                        0, /* age restriction off */
    169                                        MHD_HTTP_OK),
    170     /**
    171      * Try to partially spend (deposit) 1 EUR of the 5 EUR coin (in
    172      * full) Merchant receives EUR:0.99 due to 1 ct deposit fee.
    173      */
    174     TALER_TESTING_cmd_deposit ("refresh-deposit-partial",
    175                                "refresh-withdraw-coin-1",
    176                                0,
    177                                cred.user42_payto,
    178                                "{\"items\":[{\"name\":\"ice\",\"value\":\"EUR:1\"}]}",
    179                                GNUNET_TIME_UNIT_ZERO,
    180                                "EUR:1",
    181                                MHD_HTTP_OK),
    182     /**
    183      * Melt the rest of the coin's value (EUR:4.00 = 3x EUR:1.03 + 7x
    184      * EUR:0.13)
    185      */
    186     TALER_TESTING_cmd_melt_double ("refresh-melt-1",
    187                                    "refresh-withdraw-coin-1",
    188                                    MHD_HTTP_OK,
    189                                    NULL),
    190     /**
    191      * Complete (successful) melt operation, and withdraw the coins
    192      */
    193     TALER_TESTING_cmd_melt_reveal ("refresh-reveal-1",
    194                                    "refresh-melt-1",
    195                                    MHD_HTTP_OK),
    196     /**
    197      * Try to spend a refreshed EUR:0.1 coin
    198      */
    199     TALER_TESTING_cmd_deposit ("refresh-deposit-refreshed-1b",
    200                                "refresh-reveal-1",
    201                                3,
    202                                cred.user43_payto,
    203                                "{\"items\":[{\"name\":\"ice cream\",\"value\":3}]}",
    204                                GNUNET_TIME_UNIT_ZERO,
    205                                "EUR:0.1",
    206                                MHD_HTTP_OK),
    207     TALER_TESTING_cmd_end ()
    208   };
    209 
    210   struct TALER_TESTING_Command track[] = {
    211     /**
    212      * Run transfers. Note that _actual_ aggregation will NOT
    213      * happen here, as each deposit operation is run with a
    214      * fresh merchant public key! NOTE: this comment comes
    215      * "verbatim" from the old test-suite, and IMO does not explain
    216      * a lot! */
    217     CMD_EXEC_AGGREGATOR ("run-aggregator"),
    218 
    219     /**
    220      * Check all the transfers took place.
    221      */
    222     TALER_TESTING_cmd_check_bank_transfer (
    223       "check_bank_transfer-499c",
    224       cred.exchange_url,
    225       "EUR:4.98",
    226       cred.exchange_payto,
    227       cred.user42_payto),
    228     TALER_TESTING_cmd_check_bank_transfer (
    229       "check_bank_transfer-99c1",
    230       cred.exchange_url,
    231       "EUR:0.98",
    232       cred.exchange_payto,
    233       cred.user42_payto),
    234     TALER_TESTING_cmd_check_bank_transfer (
    235       "check_bank_transfer-99c",
    236       cred.exchange_url,
    237       "EUR:0.08",
    238       cred.exchange_payto,
    239       cred.user43_payto),
    240 
    241     /* The following transactions got originated within
    242      * the "massive deposit confirms" batch.  */
    243     TALER_TESTING_cmd_check_bank_transfer (
    244       "check-massive-transfer-1",
    245       cred.exchange_url,
    246       "EUR:0.98",
    247       cred.exchange_payto, cred.user43_payto),
    248     TALER_TESTING_cmd_check_bank_transfer
    249       ("check-massive-transfer-2",
    250       cred.exchange_url,
    251       "EUR:0.98",
    252       cred.exchange_payto, cred.user43_payto),
    253     TALER_TESTING_cmd_check_bank_transfer
    254       ("check-massive-transfer-3",
    255       cred.exchange_url,
    256       "EUR:0.98",
    257       cred.exchange_payto, cred.user43_payto),
    258     TALER_TESTING_cmd_check_bank_transfer
    259       ("check-massive-transfer-4",
    260       cred.exchange_url,
    261       "EUR:0.98",
    262       cred.exchange_payto, cred.user43_payto),
    263     TALER_TESTING_cmd_check_bank_transfer
    264       ("check-massive-transfer-5",
    265       cred.exchange_url,
    266       "EUR:0.98",
    267       cred.exchange_payto, cred.user43_payto),
    268     TALER_TESTING_cmd_check_bank_transfer
    269       ("check-massive-transfer-6",
    270       cred.exchange_url,
    271       "EUR:0.98",
    272       cred.exchange_payto, cred.user43_payto),
    273     TALER_TESTING_cmd_check_bank_transfer
    274       ("check-massive-transfer-7",
    275       cred.exchange_url,
    276       "EUR:0.98",
    277       cred.exchange_payto, cred.user43_payto),
    278     TALER_TESTING_cmd_check_bank_transfer
    279       ("check-massive-transfer-8",
    280       cred.exchange_url,
    281       "EUR:0.98",
    282       cred.exchange_payto, cred.user43_payto),
    283     TALER_TESTING_cmd_check_bank_transfer
    284       ("check-massive-transfer-9",
    285       cred.exchange_url,
    286       "EUR:0.98",
    287       cred.exchange_payto, cred.user43_payto),
    288     TALER_TESTING_cmd_check_bank_transfer
    289       ("check-massive-transfer-10",
    290       cred.exchange_url,
    291       "EUR:0.98",
    292       cred.exchange_payto, cred.user43_payto),
    293     TALER_TESTING_cmd_check_bank_empty ("check_bank_empty"),
    294     TALER_TESTING_cmd_end ()
    295   };
    296 
    297   /**
    298    * This block checks whether a wire deadline
    299    * very far in the future does NOT get aggregated now.
    300    */
    301   struct TALER_TESTING_Command unaggregation[] = {
    302     TALER_TESTING_cmd_check_bank_empty ("far-future-aggregation-a"),
    303     CMD_TRANSFER_TO_EXCHANGE ("create-reserve-unaggregated",
    304                               "EUR:5.01"),
    305     CMD_EXEC_WIREWATCH ("wirewatch-unaggregated"),
    306     /* "consume" reserve creation transfer.  */
    307     TALER_TESTING_cmd_check_bank_admin_transfer (
    308       "check_bank_transfer-unaggregated",
    309       "EUR:5.01",
    310       cred.user42_payto,
    311       cred.exchange_payto,
    312       "create-reserve-unaggregated"),
    313     TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-unaggregated",
    314                                        "create-reserve-unaggregated",
    315                                        "EUR:5",
    316                                        0, /* age restriction off */
    317                                        MHD_HTTP_OK),
    318     TALER_TESTING_cmd_deposit ("deposit-unaggregated",
    319                                "withdraw-coin-unaggregated",
    320                                0,
    321                                cred.user43_payto,
    322                                "{\"items\":[{\"name\":\"ice cream\",\"value\":1}]}",
    323                                GNUNET_TIME_relative_multiply
    324                                  (GNUNET_TIME_UNIT_YEARS,
    325                                  3000),
    326                                "EUR:5",
    327                                MHD_HTTP_OK),
    328     CMD_EXEC_AGGREGATOR ("aggregation-attempt"),
    329     TALER_TESTING_cmd_check_bank_empty ("far-future-aggregation-b"),
    330     TALER_TESTING_cmd_end ()
    331   };
    332 
    333   struct TALER_TESTING_Command refund[] = {
    334     /**
    335      * Fill reserve with EUR:5.01, as withdraw fee is 1 ct per config.
    336      */
    337     CMD_TRANSFER_TO_EXCHANGE ("create-reserve-r1",
    338                               "EUR:5.01"),
    339     /**
    340      * Run wire-watch to trigger the reserve creation.
    341      */
    342     CMD_EXEC_WIREWATCH ("wirewatch-3"),
    343     /**
    344      * Withdraw a 5 EUR coin, at fee of 1 ct
    345      */
    346     TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-r1",
    347                                        "create-reserve-r1",
    348                                        "EUR:5",
    349                                        0, /* age restriction off */
    350                                        MHD_HTTP_OK),
    351     /**
    352      * Spend 5 EUR of the 5 EUR coin (in full). Merchant would
    353      * receive EUR:4.99 due to 1 ct deposit fee.
    354      */
    355     TALER_TESTING_cmd_deposit ("deposit-refund-1",
    356                                "withdraw-coin-r1",
    357                                0,
    358                                cred.user42_payto,
    359                                "{\"items\":[{\"name\":\"ice\",\"value\":\"EUR:5\"}]}",
    360                                GNUNET_TIME_UNIT_MINUTES,
    361                                "EUR:5",
    362                                MHD_HTTP_OK),
    363 
    364     TALER_TESTING_cmd_refund ("refund-ok",
    365                               MHD_HTTP_OK,
    366                               "EUR:5",
    367                               "deposit-refund-1"),
    368     /**
    369      * Spend 4.99 EUR of the refunded 4.99 EUR coin (1ct gone
    370      * due to refund) (merchant would receive EUR:4.98 due to
    371      * 1 ct deposit fee) */
    372     TALER_TESTING_cmd_deposit ("deposit-refund-2",
    373                                "withdraw-coin-r1",
    374                                0,
    375                                cred.user42_payto,
    376                                "{\"items\":[{\"name\":\"more\",\"value\":\"EUR:5\"}]}",
    377                                GNUNET_TIME_UNIT_ZERO,
    378                                "EUR:4.99",
    379                                MHD_HTTP_OK),
    380     /**
    381      * Run transfers. This will do the transfer as refund deadline was
    382      * 0.
    383      */
    384     CMD_EXEC_AGGREGATOR ("run-aggregator-3"),
    385     TALER_TESTING_cmd_end ()
    386   };
    387 
    388 #if FIXME_9828
    389   struct TALER_TESTING_Command recoup[] = {
    390     /**
    391      * Fill reserve with EUR:5.01, as withdraw fee is 1 ct per
    392      * config.
    393      */
    394     CMD_TRANSFER_TO_EXCHANGE ("recoup-create-reserve-1",
    395                               "EUR:5.01"),
    396     /**
    397      * Run wire-watch to trigger the reserve creation.
    398      */
    399     CMD_EXEC_WIREWATCH ("wirewatch-4"),
    400     /**
    401      * Withdraw a 5 EUR coin, at fee of 1 ct
    402      */
    403     TALER_TESTING_cmd_withdraw_amount ("recoup-withdraw-coin-1",
    404                                        "recoup-create-reserve-1",
    405                                        "EUR:5",
    406                                        0, /* age restriction off */
    407                                        MHD_HTTP_OK),
    408     TALER_TESTING_cmd_revoke ("revoke-1",
    409                               MHD_HTTP_OK,
    410                               "recoup-withdraw-coin-1",
    411                               config_file),
    412     TALER_TESTING_cmd_recoup ("recoup-1",
    413                               MHD_HTTP_OK,
    414                               "recoup-withdraw-coin-1",
    415                               "EUR:5"),
    416     /**
    417      * Re-withdraw from this reserve
    418      */
    419     TALER_TESTING_cmd_withdraw_amount ("recoup-withdraw-coin-2",
    420                                        "recoup-create-reserve-1",
    421                                        "EUR:1",
    422                                        0, /* age restriction off */
    423                                        MHD_HTTP_OK),
    424     /**
    425      * These commands should close the reserve because the aggregator
    426      * is given a config file that overrides the reserve expiration
    427      * time (making it now-ish)
    428      */
    429     CMD_TRANSFER_TO_EXCHANGE ("short-lived-reserve",
    430                               "EUR:5.01"),
    431     TALER_TESTING_cmd_exec_wirewatch2 ("short-lived-aggregation",
    432                                        config_file_expire_reserve_now,
    433                                        "exchange-account-2"),
    434     TALER_TESTING_cmd_exec_aggregator ("close-reserves",
    435                                        config_file_expire_reserve_now),
    436     /**
    437      * Fill reserve with EUR:2.02, as withdraw fee is 1 ct per
    438      * config, then withdraw two coin, partially spend one, and
    439      * then have the rest paid back.  Check deposit of other coin
    440      * fails.  (Do not use EUR:5 here as the EUR:5 coin was
    441      * revoked and we did not bother to create a new one...)
    442      */CMD_TRANSFER_TO_EXCHANGE ("recoup-create-reserve-2",
    443                               "EUR:2.02"),
    444     /**
    445      * Make previous command effective.
    446      */
    447     CMD_EXEC_WIREWATCH ("wirewatch-5"),
    448     /**
    449      * Withdraw a 1 EUR coin, at fee of 1 ct
    450      */
    451     TALER_TESTING_cmd_withdraw_amount ("recoup-withdraw-coin-2a",
    452                                        "recoup-create-reserve-2",
    453                                        "EUR:1",
    454                                        0, /* age restriction off */
    455                                        MHD_HTTP_OK),
    456     /**
    457      * Withdraw a 1 EUR coin, at fee of 1 ct
    458      */
    459     TALER_TESTING_cmd_withdraw_amount ("recoup-withdraw-coin-2b",
    460                                        "recoup-create-reserve-2",
    461                                        "EUR:1",
    462                                        0, /* age restriction off */
    463                                        MHD_HTTP_OK),
    464     TALER_TESTING_cmd_deposit ("recoup-deposit-partial",
    465                                "recoup-withdraw-coin-2a",
    466                                0,
    467                                cred.user42_payto,
    468                                "{\"items\":[{\"name\":\"more ice cream\",\"value\":1}]}",
    469                                GNUNET_TIME_UNIT_ZERO,
    470                                "EUR:0.5",
    471                                MHD_HTTP_OK),
    472     TALER_TESTING_cmd_revoke ("revoke-2",
    473                               MHD_HTTP_OK,
    474                               "recoup-withdraw-coin-2a",
    475                               config_file),
    476     TALER_TESTING_cmd_recoup ("recoup-2",
    477                               MHD_HTTP_OK,
    478                               "recoup-withdraw-coin-2a",
    479                               "EUR:0.5"),
    480     TALER_TESTING_cmd_end ()
    481   };
    482 #endif
    483 
    484   struct TALER_TESTING_Command massive_deposit_confirms[] = {
    485 
    486     /**
    487      * Move money to the exchange's bank account.
    488      */
    489     CMD_TRANSFER_TO_EXCHANGE ("massive-reserve",
    490                               "EUR:10.10"),
    491     TALER_TESTING_cmd_check_bank_admin_transfer (
    492       "check-massive-transfer",
    493       "EUR:10.10",
    494       cred.user42_payto,
    495       cred.exchange_payto,
    496       "massive-reserve"),
    497     CMD_EXEC_WIREWATCH ("massive-wirewatch"),
    498     TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-1",
    499                                        "massive-reserve",
    500                                        "EUR:1",
    501                                        0, /* age restriction off */
    502                                        MHD_HTTP_OK),
    503     TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-2",
    504                                        "massive-reserve",
    505                                        "EUR:1",
    506                                        0, /* age restriction off */
    507                                        MHD_HTTP_OK),
    508     TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-3",
    509                                        "massive-reserve",
    510                                        "EUR:1",
    511                                        0, /* age restriction off */
    512                                        MHD_HTTP_OK),
    513     TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-4",
    514                                        "massive-reserve",
    515                                        "EUR:1",
    516                                        0, /* age restriction off */
    517                                        MHD_HTTP_OK),
    518     TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-5",
    519                                        "massive-reserve",
    520                                        "EUR:1",
    521                                        0, /* age restriction off */
    522                                        MHD_HTTP_OK),
    523     TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-6",
    524                                        "massive-reserve",
    525                                        "EUR:1",
    526                                        0, /* age restriction off */
    527                                        MHD_HTTP_OK),
    528     TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-7",
    529                                        "massive-reserve",
    530                                        "EUR:1",
    531                                        0, /* age restriction off */
    532                                        MHD_HTTP_OK),
    533     TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-8",
    534                                        "massive-reserve",
    535                                        "EUR:1",
    536                                        0, /* age restriction off */
    537                                        MHD_HTTP_OK),
    538     TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-9",
    539                                        "massive-reserve",
    540                                        "EUR:1",
    541                                        0, /* age restriction off */
    542                                        MHD_HTTP_OK),
    543     TALER_TESTING_cmd_withdraw_amount ("massive-withdraw-10",
    544                                        "massive-reserve",
    545                                        "EUR:1",
    546                                        0, /* age restriction off */
    547                                        MHD_HTTP_OK),
    548     TALER_TESTING_cmd_deposit (
    549       "massive-deposit-1",
    550       "massive-withdraw-1",
    551       0,
    552       cred.user43_payto,
    553       "{\"items\":[{\"name\":\"ice cream\",\"value\":1}]}",
    554       GNUNET_TIME_UNIT_ZERO,
    555       "EUR:1",
    556       MHD_HTTP_OK),
    557     TALER_TESTING_cmd_deposit
    558       ("massive-deposit-2",
    559       "massive-withdraw-2",
    560       0,
    561       cred.user43_payto,
    562       "{\"items\":[{\"name\":\"ice cream\",\"value\":1}]}",
    563       GNUNET_TIME_UNIT_ZERO,
    564       "EUR:1",
    565       MHD_HTTP_OK),
    566     TALER_TESTING_cmd_deposit
    567       ("massive-deposit-3",
    568       "massive-withdraw-3",
    569       0,
    570       cred.user43_payto,
    571       "{\"items\":[{\"name\":\"ice cream\",\"value\":1}]}",
    572       GNUNET_TIME_UNIT_ZERO,
    573       "EUR:1",
    574       MHD_HTTP_OK),
    575     TALER_TESTING_cmd_deposit
    576       ("massive-deposit-4",
    577       "massive-withdraw-4",
    578       0,
    579       cred.user43_payto,
    580       "{\"items\":[{\"name\":\"ice cream\",\"value\":1}]}",
    581       GNUNET_TIME_UNIT_ZERO,
    582       "EUR:1",
    583       MHD_HTTP_OK),
    584     TALER_TESTING_cmd_deposit
    585       ("massive-deposit-5",
    586       "massive-withdraw-5",
    587       0,
    588       cred.user43_payto,
    589       "{\"items\":[{\"name\":\"ice cream\",\"value\":1}]}",
    590       GNUNET_TIME_UNIT_ZERO,
    591       "EUR:1",
    592       MHD_HTTP_OK),
    593     TALER_TESTING_cmd_deposit
    594       ("massive-deposit-6",
    595       "massive-withdraw-6",
    596       0,
    597       cred.user43_payto,
    598       "{\"items\":[{\"name\":\"ice cream\",\"value\":1}]}",
    599       GNUNET_TIME_UNIT_ZERO,
    600       "EUR:1",
    601       MHD_HTTP_OK),
    602     TALER_TESTING_cmd_deposit
    603       ("massive-deposit-7",
    604       "massive-withdraw-7",
    605       0,
    606       cred.user43_payto,
    607       "{\"items\":[{\"name\":\"ice cream\",\"value\":1}]}",
    608       GNUNET_TIME_UNIT_ZERO,
    609       "EUR:1",
    610       MHD_HTTP_OK),
    611     TALER_TESTING_cmd_deposit
    612       ("massive-deposit-8",
    613       "massive-withdraw-8",
    614       0,
    615       cred.user43_payto,
    616       "{\"items\":[{\"name\":\"ice cream\",\"value\":1}]}",
    617       GNUNET_TIME_UNIT_ZERO,
    618       "EUR:1",
    619       MHD_HTTP_OK),
    620     TALER_TESTING_cmd_deposit
    621       ("massive-deposit-9",
    622       "massive-withdraw-9",
    623       0,
    624       cred.user43_payto,
    625       "{\"items\":[{\"name\":\"ice cream\",\"value\":1}]}",
    626       GNUNET_TIME_UNIT_ZERO,
    627       "EUR:1",
    628       MHD_HTTP_OK),
    629     TALER_TESTING_cmd_deposit (
    630       "massive-deposit-10",
    631       "massive-withdraw-10",
    632       0,
    633       cred.user43_payto,
    634       "{\"items\":[{\"name\":\"ice cream\",\"value\":1}]}",
    635       GNUNET_TIME_UNIT_ZERO,
    636       "EUR:1",
    637       MHD_HTTP_OK),
    638     TALER_TESTING_cmd_deposit_confirmation ("deposit-confirmation",
    639                                             "massive-deposit-10",
    640                                             1,
    641                                             "EUR:0.99",
    642                                             MHD_HTTP_OK),
    643     // CMD_RUN_AUDITOR ("massive-auditor"),
    644 
    645     TALER_TESTING_cmd_end ()
    646   };
    647 
    648   struct TALER_TESTING_Command commands[] = {
    649     TALER_TESTING_cmd_run_fakebank ("run-fakebank",
    650                                     cred.cfg,
    651                                     "exchange-account-2"),
    652     TALER_TESTING_cmd_system_start ("start-taler",
    653                                     config_file,
    654                                     "-u", "exchange-account-2",
    655                                     "-ea",
    656                                     NULL),
    657     TALER_TESTING_cmd_get_exchange ("get-exchange",
    658                                     cred.cfg,
    659                                     NULL,
    660                                     true,
    661                                     true),
    662     TALER_TESTING_cmd_get_auditor ("get-auditor",
    663                                    cred.cfg,
    664                                    true),
    665     TALER_TESTING_cmd_exec_auditor_offline ("auditor-offline",
    666                                             config_file),
    667     // CMD_RUN_AUDITOR ("virgin-auditor"),
    668     TALER_TESTING_cmd_batch ("massive-deposit-confirms",
    669                              massive_deposit_confirms),
    670     TALER_TESTING_cmd_batch ("withdraw",
    671                              withdraw),
    672     TALER_TESTING_cmd_batch ("spend",
    673                              spend),
    674     TALER_TESTING_cmd_batch ("refresh",
    675                              refresh),
    676     TALER_TESTING_cmd_batch ("track",
    677                              track),
    678     TALER_TESTING_cmd_batch ("unaggregation",
    679                              unaggregation),
    680     TALER_TESTING_cmd_batch ("refund",
    681                              refund),
    682 #if FIXME_9828
    683     TALER_TESTING_cmd_batch ("recoup",
    684                              recoup),
    685 #endif
    686     // CMD_RUN_AUDITOR ("normal-auditor"),
    687     TALER_TESTING_cmd_end ()
    688   };
    689 
    690   (void) cls;
    691   TALER_TESTING_run (is,
    692                      commands);
    693 }
    694 
    695 
    696 int
    697 main (int argc,
    698       char *const *argv)
    699 {
    700   (void) argc;
    701   {
    702     char *cipher;
    703 
    704     cipher = GNUNET_STRINGS_get_suffix_from_binary_name (argv[0]);
    705     GNUNET_assert (NULL != cipher);
    706     GNUNET_asprintf (&config_file,
    707                      "test_auditor_api-%s.conf",
    708                      cipher);
    709     GNUNET_asprintf (&config_file_expire_reserve_now,
    710                      "test_auditor_api_expire_reserve_now-%s.conf",
    711                      cipher);
    712     GNUNET_free (cipher);
    713   }
    714   return TALER_TESTING_main (argv,
    715                              "INFO",
    716                              config_file,
    717                              "exchange-account-2",
    718                              TALER_TESTING_BS_FAKEBANK,
    719                              &cred,
    720                              &run,
    721                              NULL);
    722 }
    723 
    724 
    725 /* end of test_auditor_api.c */