Line data Source code
1 : /*
2 : This file is part of TALER
3 : (C) 2016-2020 Taler Systems SA
4 :
5 : TALER is free software; you can redistribute it and/or modify it under the
6 : terms of the GNU General Public License as published by the Free Software
7 : Foundation; either version 3, or (at your option) any later version.
8 :
9 : TALER is distributed in the hope that it will be useful, but WITHOUT ANY
10 : WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
11 : A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12 :
13 : You should have received a copy of the GNU General Public License along with
14 : TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
15 : */
16 :
17 : /**
18 : * @file testing/test_taler_exchange_wirewatch.c
19 : * @brief Tests for taler-exchange-wirewatch and taler-exchange-aggregator logic;
20 : * Performs an invalid wire transfer to the exchange, and then checks that
21 : * wirewatch immediately sends the money back.
22 : * Then performs a valid wire transfer, waits for the reserve to expire,
23 : * and then checks that the aggregator sends the money back.
24 : * @author Christian Grothoff <christian@grothoff.org>
25 : */
26 : #include "taler/platform.h"
27 : #include "taler/taler_util.h"
28 : #include <gnunet/gnunet_json_lib.h>
29 : #include <gnunet/gnunet_pq_lib.h>
30 : #include "taler/taler_json_lib.h"
31 : #include <microhttpd.h>
32 : #include "taler/taler_fakebank_lib.h"
33 : #include "taler/taler_testing_lib.h"
34 :
35 :
36 : /**
37 : * Our credentials.
38 : */
39 : static struct TALER_TESTING_Credentials cred;
40 :
41 : /**
42 : * Name of the configuration file to use.
43 : */
44 : static char *config_filename;
45 :
46 :
47 : /**
48 : * Execute the taler-exchange-aggregator, closer and transfer commands with
49 : * our configuration file.
50 : *
51 : * @param label label to use for the command.
52 : */
53 : #define CMD_EXEC_AGGREGATOR(label) \
54 : TALER_TESTING_cmd_exec_aggregator (label "-aggregator", config_filename) \
55 : , \
56 : TALER_TESTING_cmd_exec_transfer (label "-transfer", config_filename)
57 :
58 :
59 : static struct TALER_TESTING_Command
60 1 : transfer_to_exchange (const char *label,
61 : const char *amount)
62 : {
63 1 : return TALER_TESTING_cmd_admin_add_incoming (label,
64 : amount,
65 : &cred.ba,
66 : cred.user42_payto);
67 : }
68 :
69 :
70 : /**
71 : * Main function that will tell the interpreter what commands to
72 : * run.
73 : *
74 : * @param cls closure
75 : */
76 : static void
77 1 : run (void *cls,
78 : struct TALER_TESTING_Interpreter *is)
79 : {
80 : struct TALER_TESTING_Command all[] = {
81 1 : TALER_TESTING_cmd_run_fakebank ("run-fakebank",
82 1 : cred.cfg,
83 : "exchange-account-1"),
84 1 : TALER_TESTING_cmd_system_start ("start-taler",
85 : config_filename,
86 : "-e",
87 : "-u", "exchange-account-1",
88 : NULL),
89 1 : TALER_TESTING_cmd_get_exchange ("get-exchange",
90 1 : cred.cfg,
91 : NULL,
92 : true,
93 : true),
94 1 : TALER_TESTING_cmd_check_bank_empty ("expect-empty-transactions-on-start"),
95 1 : CMD_EXEC_AGGREGATOR ("run-aggregator-on-empty"),
96 1 : TALER_TESTING_cmd_exec_wirewatch ("run-wirewatch-on-empty",
97 : config_filename),
98 1 : TALER_TESTING_cmd_check_bank_empty ("expect-transfers-empty-after-dry-run"),
99 :
100 1 : transfer_to_exchange ("run-transfer-good-to-exchange",
101 : "EUR:5"),
102 1 : TALER_TESTING_cmd_exec_wirewatch ("run-wirewatch-on-good-transfer",
103 : config_filename),
104 :
105 1 : TALER_TESTING_cmd_check_bank_admin_transfer (
106 : "clear-good-transfer-to-the-exchange",
107 : "EUR:5",
108 : cred.user42_payto, // debit
109 : cred.exchange_payto, // credit
110 : "run-transfer-good-to-exchange"),
111 :
112 1 : TALER_TESTING_cmd_exec_closer ("run-closer-non-expired-reserve",
113 : config_filename,
114 : NULL,
115 : NULL,
116 : NULL),
117 1 : TALER_TESTING_cmd_exec_transfer ("do-idle-transfer", config_filename),
118 :
119 1 : TALER_TESTING_cmd_check_bank_empty ("expect-empty-transactions-1"),
120 1 : TALER_TESTING_cmd_sleep ("wait (5s)",
121 : 5),
122 1 : TALER_TESTING_cmd_exec_closer ("run-closer-expired-reserve",
123 : config_filename,
124 : "EUR:4.99",
125 : "EUR:0.01",
126 : "run-transfer-good-to-exchange"),
127 1 : TALER_TESTING_cmd_exec_transfer ("do-closing-transfer",
128 : config_filename),
129 :
130 1 : CMD_EXEC_AGGREGATOR ("run-closer-on-expired-reserve"),
131 1 : TALER_TESTING_cmd_check_bank_transfer ("expect-deposit-1",
132 1 : cred.exchange_url,
133 : "EUR:4.99",
134 : cred.exchange_payto,
135 : cred.user42_payto),
136 1 : TALER_TESTING_cmd_check_bank_empty ("expect-empty-transactions-2"),
137 1 : TALER_TESTING_cmd_end ()
138 : };
139 :
140 : (void) cls;
141 1 : TALER_TESTING_run (is,
142 : all);
143 1 : }
144 :
145 :
146 : int
147 1 : main (int argc,
148 : char *const argv[])
149 : {
150 : (void) argc;
151 : {
152 : const char *plugin_name;
153 :
154 1 : plugin_name = strrchr (argv[0], (int) '-');
155 1 : if (NULL == plugin_name)
156 : {
157 0 : GNUNET_break (0);
158 0 : return -1;
159 : }
160 1 : plugin_name++;
161 1 : GNUNET_asprintf (&config_filename,
162 : "test-taler-exchange-wirewatch-%s.conf",
163 : plugin_name);
164 : }
165 1 : return TALER_TESTING_main (argv,
166 : "INFO",
167 : config_filename,
168 : "exchange-account-1",
169 : TALER_TESTING_BS_FAKEBANK,
170 : &cred,
171 : &run,
172 : NULL);
173 : }
174 :
175 :
176 : /* end of test_taler_exchange_wirewatch.c */
|