Line data Source code
1 : /*
2 : This file is part of TALER
3 : Copyright (C) 2014-2023 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 test_merchant_api.c
21 : * @brief testcase to test exchange's HTTP API interface
22 : * @author Sree Harsha Totakura <sreeharsha@totakura.in>
23 : * @author Christian Grothoff
24 : * @author Marcello Stanisci
25 : */
26 : #include "platform.h"
27 : #include <gnunet/gnunet_time_lib.h>
28 : #include <taler/taler_util.h>
29 : #include <taler/taler_signatures.h>
30 : #include <taler/taler_exchange_service.h>
31 : #include <taler/taler_json_lib.h>
32 : #include <gnunet/gnunet_util_lib.h>
33 : #include <gnunet/gnunet_testing_lib.h>
34 : #include <microhttpd.h>
35 : #include <taler/taler_bank_service.h>
36 : #include <taler/taler_fakebank_lib.h>
37 : #include <taler/taler_testing_lib.h>
38 : #include <taler/taler_error_codes.h>
39 : #include "taler_merchant_util.h"
40 : #include "taler_merchant_testing_lib.h"
41 :
42 : #ifdef HAVE_DONAU_DONAU_SERVICE_H
43 : #include <donau/donau_testing_lib.h>
44 : #endif
45 :
46 :
47 : /**
48 : * The 'poll-orders-conclude-1' and other 'conclude'
49 : * commands should NOT wait for this timeout!
50 : */
51 : #define POLL_ORDER_TIMEOUT \
52 : GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 60)
53 :
54 : /**
55 : * The 'poll-orders-conclude-1x' and other 'conclude'
56 : * commands that should (!) wait for this timeout! Hence,
57 : * here we use a short value!
58 : */
59 : #define POLL_ORDER_SHORT_TIMEOUT \
60 : GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 2)
61 :
62 : /**
63 : * Configuration file we use. One (big) configuration is used
64 : * for the various components for this test.
65 : */
66 : static char *config_file;
67 :
68 : /**
69 : * Exchange base URL. Could also be taken from config.
70 : */
71 : #define EXCHANGE_URL "http://localhost:8081/"
72 :
73 : /**
74 : * Payto URI of the customer (payer).
75 : */
76 : static struct TALER_FullPayto payer_payto;
77 :
78 : /**
79 : * Payto URI of the exchange (escrow account).
80 : */
81 : static struct TALER_FullPayto exchange_payto;
82 :
83 : /**
84 : * Payto URI of the merchant (receiver).
85 : */
86 : static struct TALER_FullPayto merchant_payto;
87 :
88 : /**
89 : * Credentials for the test.
90 : */
91 : static struct TALER_TESTING_Credentials cred;
92 :
93 : /**
94 : * Merchant base URL.
95 : */
96 : static const char *merchant_url;
97 :
98 : /**
99 : * Merchant instance "i1a" base URL.
100 : */
101 : static char *merchant_url_i1a;
102 :
103 : /**
104 : * Account number of the exchange at the bank.
105 : */
106 : #define EXCHANGE_ACCOUNT_NAME "2"
107 :
108 : /**
109 : * Account number of some user.
110 : */
111 : #define USER_ACCOUNT_NAME "62"
112 :
113 : /**
114 : * Account number of some other user.
115 : */
116 : #define USER_ACCOUNT_NAME2 "63"
117 :
118 : /**
119 : * Account number used by the merchant
120 : */
121 : #define MERCHANT_ACCOUNT_NAME "3"
122 :
123 : static const char *order_1_transfers[] = {
124 : "post-transfer-1",
125 : NULL
126 : };
127 :
128 : static const char *order_1_forgets_1[] = {
129 : "forget-1",
130 : NULL
131 : };
132 :
133 : static const char *order_1_forgets_2[] = {
134 : "forget-1",
135 : "forget-order-array-elem",
136 : NULL
137 : };
138 :
139 : static const char *order_1_forgets_3[] = {
140 : "forget-1",
141 : "forget-order-array-elem",
142 : "forget-order-array-wc",
143 : NULL
144 : };
145 :
146 : static const struct TALER_TESTING_ProductUnitExpectations
147 : expect_unicorn_defaults = {
148 : .have_unit_allow_fraction = true,
149 : .unit_allow_fraction = true,
150 : .have_unit_precision_level = true,
151 : .unit_precision_level = 1
152 : };
153 :
154 : static const struct TALER_TESTING_ProductUnitExpectations
155 : expect_unicorn_patched = {
156 : .have_unit_allow_fraction = true,
157 : .unit_allow_fraction = false,
158 : .have_unit_precision_level = true,
159 : .unit_precision_level = 0
160 : };
161 :
162 : /**
163 : * Execute the taler-merchant-webhook command with
164 : * our configuration file.
165 : *
166 : * @param label label to use for the command.
167 : */
168 : static struct TALER_TESTING_Command
169 2 : cmd_webhook (const char *label)
170 : {
171 2 : return TALER_TESTING_cmd_webhook (label, config_file);
172 : }
173 :
174 :
175 : /**
176 : * Execute the taler-exchange-wirewatch command with
177 : * our configuration file.
178 : *
179 : * @param label label to use for the command.
180 : */
181 : static struct TALER_TESTING_Command
182 18 : cmd_exec_wirewatch (const char *label)
183 : {
184 18 : return TALER_TESTING_cmd_exec_wirewatch (label,
185 : config_file);
186 : }
187 :
188 :
189 : /**
190 : * Execute the taler-exchange-aggregator, closer and transfer commands with
191 : * our configuration file.
192 : *
193 : * @param label label to use for the command.
194 : */
195 : #define CMD_EXEC_AGGREGATOR(label) \
196 : TALER_TESTING_cmd_exec_aggregator (label "-aggregator", config_file), \
197 : TALER_TESTING_cmd_exec_transfer (label "-transfer", config_file)
198 :
199 :
200 : /**
201 : * Run wire transfer of funds from some user's account to the
202 : * exchange.
203 : *
204 : * @param label label to use for the command.
205 : * @param amount amount to transfer, i.e. "EUR:1"
206 : * @param url exchange_url
207 : */
208 : static struct TALER_TESTING_Command
209 18 : cmd_transfer_to_exchange (const char *label,
210 : const char *amount)
211 : {
212 18 : return TALER_TESTING_cmd_admin_add_incoming (label,
213 : amount,
214 : &cred.ba,
215 : payer_payto);
216 : }
217 :
218 :
219 : /**
220 : * Main function that will tell the interpreter what commands to
221 : * run.
222 : *
223 : * @param cls closure
224 : */
225 : static void
226 2 : run (void *cls,
227 : struct TALER_TESTING_Interpreter *is)
228 : {
229 : struct TALER_TESTING_Command get_private_order_id[] = {
230 2 : TALER_TESTING_cmd_merchant_post_instances (
231 : "instance-create-admin",
232 : merchant_url,
233 : "admin",
234 : MHD_HTTP_NO_CONTENT),
235 2 : TALER_TESTING_cmd_merchant_post_account (
236 : "instance-create-default-account",
237 : merchant_url,
238 : merchant_payto,
239 : NULL, NULL,
240 : MHD_HTTP_OK),
241 2 : TALER_TESTING_cmd_merchant_kyc_get (
242 : "instance-create-kyc-0",
243 : merchant_url,
244 : NULL,
245 : NULL,
246 : EXCHANGE_URL,
247 : TALER_EXCHANGE_KLPT_NONE,
248 : MHD_HTTP_NO_CONTENT,
249 : false),
250 2 : TALER_TESTING_cmd_merchant_post_orders_no_claim (
251 : "create-proposal-bad-currency",
252 : merchant_url,
253 : MHD_HTTP_CONFLICT,
254 : "4",
255 2 : GNUNET_TIME_UNIT_ZERO_TS,
256 2 : GNUNET_TIME_UNIT_FOREVER_TS,
257 : "XXX:5.0"),
258 2 : TALER_TESTING_cmd_merchant_post_orders_no_claim (
259 : "create-proposal-4",
260 : merchant_url,
261 : MHD_HTTP_OK,
262 : "4",
263 2 : GNUNET_TIME_UNIT_ZERO_TS,
264 2 : GNUNET_TIME_UNIT_FOREVER_TS,
265 : "EUR:5.0"),
266 2 : TALER_TESTING_cmd_merchant_get_order (
267 : "get-order-4",
268 : merchant_url,
269 : "create-proposal-4",
270 : TALER_MERCHANT_OSC_UNPAID,
271 : false,
272 : MHD_HTTP_OK,
273 : NULL),
274 2 : TALER_TESTING_cmd_merchant_delete_order (
275 : "delete-order-4",
276 : merchant_url,
277 : "4",
278 : MHD_HTTP_NO_CONTENT),
279 2 : TALER_TESTING_cmd_merchant_purge_instance (
280 : "purge-admin",
281 : merchant_url,
282 : "admin",
283 : MHD_HTTP_NO_CONTENT),
284 2 : TALER_TESTING_cmd_end ()
285 : };
286 :
287 : struct TALER_TESTING_Command pay[] = {
288 : /**
289 : * Move money to the exchange's bank account.
290 : */
291 2 : cmd_transfer_to_exchange ("create-reserve-1",
292 : "EUR:10.02"),
293 : /**
294 : * Make a reserve exist, according to the previous transfer.
295 : */
296 2 : cmd_exec_wirewatch ("wirewatch-1"),
297 2 : TALER_TESTING_cmd_check_bank_admin_transfer ("check_bank_transfer-2",
298 : "EUR:10.02",
299 : payer_payto,
300 : exchange_payto,
301 : "create-reserve-1"),
302 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-1",
303 : "create-reserve-1",
304 : "EUR:5",
305 : 0,
306 : MHD_HTTP_OK),
307 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-2",
308 : "create-reserve-1",
309 : "EUR:5",
310 : 0,
311 : MHD_HTTP_OK),
312 2 : TALER_TESTING_cmd_merchant_get_orders ("get-orders-empty",
313 : merchant_url,
314 : MHD_HTTP_OK,
315 : NULL),
316 : /**
317 : * Check the reserve is depleted.
318 : */
319 2 : TALER_TESTING_cmd_status ("withdraw-status-1",
320 : "create-reserve-1",
321 : "EUR:0",
322 : MHD_HTTP_OK),
323 2 : TALER_TESTING_cmd_merchant_delete_order ("delete-order-nx",
324 : merchant_url,
325 : "1",
326 : MHD_HTTP_NOT_FOUND),
327 2 : TALER_TESTING_cmd_poll_orders_start ("poll-orders-1-start",
328 : merchant_url,
329 : POLL_ORDER_TIMEOUT),
330 2 : TALER_TESTING_cmd_merchant_claim_order ("claim-order-nx",
331 : merchant_url,
332 : MHD_HTTP_NOT_FOUND,
333 : NULL,
334 : "1"),
335 2 : TALER_TESTING_cmd_merchant_post_orders2 ("create-proposal-1",
336 2 : cred.cfg,
337 : merchant_url,
338 : MHD_HTTP_OK,
339 : "1",
340 2 : GNUNET_TIME_UNIT_ZERO_TS,
341 2 : GNUNET_TIME_UNIT_FOREVER_TS,
342 : true,
343 : "EUR:5.0",
344 : "x-taler-bank",
345 : "",
346 : "",
347 : NULL),
348 2 : TALER_TESTING_cmd_merchant_post_webhooks ("post-webhooks-pay-w1",
349 : merchant_url,
350 : "webhook-pay-1",
351 : "pay",
352 : MHD_HTTP_NO_CONTENT),
353 2 : TALER_TESTING_cmd_testserver ("launch-http-server-for-webhooks",
354 : 12345),
355 2 : TALER_TESTING_cmd_merchant_post_orders2 ("create-proposal-1-idem",
356 2 : cred.cfg,
357 : merchant_url,
358 : MHD_HTTP_OK,
359 : "1",
360 2 : GNUNET_TIME_UNIT_ZERO_TS,
361 2 : GNUNET_TIME_UNIT_FOREVER_TS,
362 : true,
363 : "EUR:5.0",
364 : "x-taler-bank",
365 : "",
366 : "",
367 : "create-proposal-1"),
368 2 : TALER_TESTING_cmd_merchant_post_orders2 ("create-proposal-1x",
369 2 : cred.cfg,
370 : merchant_url,
371 : MHD_HTTP_OK,
372 : "1x",
373 2 : GNUNET_TIME_UNIT_ZERO_TS,
374 2 : GNUNET_TIME_UNIT_FOREVER_TS,
375 : true,
376 : "EUR:5.0",
377 : "x-taler-bank",
378 : "",
379 : "",
380 : NULL),
381 2 : TALER_TESTING_cmd_merchant_claim_order ("reclaim-1",
382 : merchant_url,
383 : MHD_HTTP_OK,
384 : "create-proposal-1",
385 : NULL),
386 2 : TALER_TESTING_cmd_merchant_claim_order ("reclaim-1-bad-nonce",
387 : merchant_url,
388 : MHD_HTTP_CONFLICT,
389 : NULL,
390 : "1"),
391 2 : TALER_TESTING_cmd_merchant_claim_order ("reclaim-1x",
392 : merchant_url,
393 : MHD_HTTP_OK,
394 : "create-proposal-1x",
395 : NULL),
396 2 : TALER_TESTING_cmd_merchant_post_orders ("create-proposal-1-pre-exists",
397 2 : cred.cfg,
398 : merchant_url,
399 : MHD_HTTP_CONFLICT,
400 : "1",
401 2 : GNUNET_TIME_UNIT_ZERO_TS,
402 2 : GNUNET_TIME_UNIT_FOREVER_TS,
403 : "EUR:5.0"),
404 2 : TALER_TESTING_cmd_poll_orders_conclude ("poll-orders-1-conclude",
405 : MHD_HTTP_OK,
406 : "poll-orders-1-start"),
407 2 : TALER_TESTING_cmd_merchant_get_orders ("get-orders-1",
408 : merchant_url,
409 : MHD_HTTP_OK,
410 : "create-proposal-1x",
411 : "create-proposal-1",
412 : NULL),
413 2 : TALER_TESTING_cmd_wallet_get_order ("get-order-wallet-1",
414 : merchant_url,
415 : "create-proposal-1",
416 : false,
417 : false,
418 : false,
419 : MHD_HTTP_PAYMENT_REQUIRED),
420 2 : TALER_TESTING_cmd_merchant_get_order ("get-order-merchant-1",
421 : merchant_url,
422 : "create-proposal-1",
423 : TALER_MERCHANT_OSC_CLAIMED,
424 : false,
425 : MHD_HTTP_OK,
426 : NULL),
427 2 : TALER_TESTING_cmd_wallet_poll_order_start ("poll-order-wallet-start-1",
428 : merchant_url,
429 : "create-proposal-1",
430 : POLL_ORDER_TIMEOUT,
431 : NULL),
432 2 : TALER_TESTING_cmd_wallet_poll_order_start2 ("poll-order-wallet-start-1x",
433 : merchant_url,
434 : "create-proposal-1x",
435 : POLL_ORDER_SHORT_TIMEOUT,
436 : NULL, /* no refund */
437 : "session-0"),
438 2 : TALER_TESTING_cmd_poll_order_start ("poll-order-merchant-1-start",
439 : merchant_url,
440 : "1",
441 : POLL_ORDER_TIMEOUT),
442 2 : TALER_TESTING_cmd_merchant_pay_order ("deposit-simple",
443 : merchant_url,
444 : MHD_HTTP_OK,
445 : "create-proposal-1",
446 : "withdraw-coin-1",
447 : "EUR:5",
448 : "EUR:4.99",
449 : "session-0"),
450 2 : TALER_TESTING_cmd_poll_order_conclude ("poll-order-merchant-1-conclude",
451 : MHD_HTTP_OK,
452 : "poll-order-merchant-1-start"),
453 2 : TALER_TESTING_cmd_wallet_poll_order_conclude ("poll-order-1-conclude",
454 : MHD_HTTP_OK,
455 : NULL,
456 : "poll-order-wallet-start-1"),
457 : /* Check for webhook */
458 2 : cmd_webhook ("pending-webhooks-pay-w1"),
459 : /* Check webhook did anything: have a command that inspects traits of the testserver
460 : and check if the traits have the right values set! */
461 2 : TALER_TESTING_cmd_checkserver ("check-http-server-for-webhooks",
462 : "launch-http-server-for-webhooks",
463 : 0),
464 : /* Here we expect to run into a timeout, as we do not pay this one */
465 2 : TALER_TESTING_cmd_wallet_poll_order_conclude2 ("poll-order-1x-conclude",
466 : MHD_HTTP_PAYMENT_REQUIRED,
467 : NULL,
468 : "poll-order-wallet-start-1x",
469 : "1"),
470 2 : TALER_TESTING_cmd_merchant_post_orders_paid ("verify-order-1-paid",
471 : merchant_url,
472 : "deposit-simple",
473 : "session-1",
474 : MHD_HTTP_OK),
475 2 : TALER_TESTING_cmd_wallet_get_order ("get-order-wallet-1-2",
476 : merchant_url,
477 : "create-proposal-1",
478 : true,
479 : false,
480 : false,
481 : MHD_HTTP_OK),
482 2 : TALER_TESTING_cmd_merchant_get_order ("get-order-merchant-1-2a",
483 : merchant_url,
484 : "create-proposal-1",
485 : TALER_MERCHANT_OSC_PAID,
486 : false,
487 : MHD_HTTP_OK,
488 : NULL),
489 2 : TALER_TESTING_cmd_merchant_get_orders ("get-orders-1-paid",
490 : merchant_url,
491 : MHD_HTTP_OK,
492 : "create-proposal-1x",
493 : "create-proposal-1",
494 : NULL),
495 2 : TALER_TESTING_cmd_merchant_pay_order ("replay-simple",
496 : merchant_url,
497 : MHD_HTTP_OK,
498 : "create-proposal-1",
499 : "withdraw-coin-1",
500 : "EUR:5",
501 : "EUR:4.99",
502 : "session-0"),
503 2 : TALER_TESTING_cmd_check_bank_empty ("check_bank_empty-1"),
504 2 : TALER_TESTING_cmd_sleep (
505 : "Wait for wire transfer deadline",
506 : 3),
507 2 : CMD_EXEC_AGGREGATOR ("run-aggregator"),
508 2 : TALER_TESTING_cmd_check_bank_transfer ("check_bank_transfer-498c",
509 : EXCHANGE_URL,
510 : "EUR:4.98",
511 : exchange_payto,
512 : merchant_payto),
513 2 : TALER_TESTING_cmd_merchant_post_transfer ("post-transfer-1",
514 : &cred.ba,
515 : merchant_payto,
516 : merchant_url,
517 : "EUR:4.98",
518 : MHD_HTTP_NO_CONTENT,
519 : "deposit-simple",
520 : NULL),
521 2 : TALER_TESTING_cmd_depositcheck ("run taler-merchant-depositcheck-1",
522 : config_file),
523 2 : TALER_TESTING_cmd_run_tme ("run taler-merchant-reconciliation-1",
524 : config_file),
525 2 : TALER_TESTING_cmd_merchant_post_transfer2 ("post-transfer-bad",
526 : merchant_url,
527 : merchant_payto,
528 : "EUR:4.98",
529 : NULL,
530 : /*non-routable IP address
531 : so we are sure to not get
532 : any reply*/
533 : "http://192.0.2.1/404/",
534 : MHD_HTTP_NO_CONTENT),
535 2 : TALER_TESTING_cmd_merchant_get_transfers ("get-transfers-1",
536 : merchant_url,
537 : merchant_payto,
538 : MHD_HTTP_OK,
539 : "post-transfer-1",
540 : "post-transfer-bad",
541 : NULL),
542 2 : TALER_TESTING_cmd_merchant_delete_transfer ("delete-transfer-1",
543 : merchant_url,
544 : "post-transfer-bad",
545 : MHD_HTTP_NO_CONTENT),
546 2 : TALER_TESTING_cmd_merchant_get_order2 ("get-order-merchant-1-2b",
547 : merchant_url,
548 : "create-proposal-1",
549 : TALER_MERCHANT_OSC_PAID,
550 : true,
551 : order_1_transfers, /* "post-transfer-1" */
552 : false,
553 : NULL,
554 : NULL,
555 : MHD_HTTP_OK),
556 2 : TALER_TESTING_cmd_merchant_forget_order ("forget-1",
557 : merchant_url,
558 : MHD_HTTP_NO_CONTENT,
559 : "create-proposal-1",
560 : NULL,
561 : "$.dummy_obj",
562 : NULL),
563 2 : TALER_TESTING_cmd_merchant_get_order2 ("get-order-merchant-1-forget-1",
564 : merchant_url,
565 : "create-proposal-1",
566 : TALER_MERCHANT_OSC_PAID,
567 : true,
568 : order_1_transfers,
569 : false,
570 : NULL,
571 : order_1_forgets_1,
572 : MHD_HTTP_OK),
573 2 : TALER_TESTING_cmd_merchant_forget_order ("forget-unforgettable",
574 : merchant_url,
575 : MHD_HTTP_CONFLICT,
576 : "create-proposal-1",
577 : NULL,
578 : "$.amount",
579 : NULL),
580 2 : TALER_TESTING_cmd_merchant_forget_order ("forget-order-nx",
581 : merchant_url,
582 : MHD_HTTP_NOT_FOUND,
583 : NULL,
584 : "nx-order",
585 : "$.dummy_obj",
586 : NULL),
587 2 : TALER_TESTING_cmd_merchant_forget_order ("forget-order-array-elem",
588 : merchant_url,
589 : MHD_HTTP_NO_CONTENT,
590 : "create-proposal-1",
591 : NULL,
592 : "$.dummy_array[0].item",
593 : NULL),
594 2 : TALER_TESTING_cmd_merchant_get_order2 ("get-order-merchant-1-forget-2",
595 : merchant_url,
596 : "create-proposal-1",
597 : TALER_MERCHANT_OSC_PAID,
598 : true,
599 : order_1_transfers,
600 : false,
601 : NULL,
602 : order_1_forgets_2,
603 : MHD_HTTP_OK),
604 2 : TALER_TESTING_cmd_merchant_forget_order ("forget-order-array-wc",
605 : merchant_url,
606 : MHD_HTTP_NO_CONTENT,
607 : "create-proposal-1",
608 : NULL,
609 : "$.dummy_array[*].item",
610 : NULL),
611 2 : TALER_TESTING_cmd_merchant_get_order2 ("get-order-merchant-1-forget-3",
612 : merchant_url,
613 : "create-proposal-1",
614 : TALER_MERCHANT_OSC_PAID,
615 : true,
616 : order_1_transfers,
617 : false,
618 : NULL,
619 : order_1_forgets_3,
620 : MHD_HTTP_OK),
621 2 : TALER_TESTING_cmd_merchant_forget_order ("forget-order-malformed",
622 : merchant_url,
623 : MHD_HTTP_BAD_REQUEST,
624 : "create-proposal-1",
625 : NULL,
626 : "$.dummy_array[abc].item",
627 : NULL),
628 2 : TALER_TESTING_cmd_merchant_post_products ("post-products-p3",
629 : merchant_url,
630 : "product-3",
631 : "a product",
632 : "EUR:1",
633 : MHD_HTTP_NO_CONTENT),
634 2 : TALER_TESTING_cmd_merchant_post_products2 ("post-products-p4",
635 : merchant_url,
636 : "product-4age",
637 : "an age-restricted product",
638 : NULL,
639 : "unit",
640 : "EUR:1",
641 : "", /* image */
642 : NULL,
643 : 4,
644 : 16 /* minimum age */,
645 : NULL,
646 2 : GNUNET_TIME_UNIT_FOREVER_TS,
647 : MHD_HTTP_NO_CONTENT),
648 2 : TALER_TESTING_cmd_merchant_post_products3 ("post-products-frac",
649 : merchant_url,
650 : "product-frac",
651 : "fractional product",
652 : json_pack ("{s:s}",
653 : "en",
654 : "fractional product"),
655 : "kg",
656 : "EUR:1.5",
657 : "",
658 : json_array (),
659 : 1,
660 : (MERCHANT_UNIT_FRAC_BASE * 3)
661 : / 4,
662 : true,
663 : 0,
664 : NULL,
665 2 : GNUNET_TIME_UNIT_ZERO_TS,
666 : MHD_HTTP_NO_CONTENT),
667 2 : TALER_TESTING_cmd_merchant_get_product ("get-product-frac-post",
668 : merchant_url,
669 : "product-frac",
670 : MHD_HTTP_OK,
671 : "post-products-frac"),
672 2 : TALER_TESTING_cmd_merchant_patch_product ("patch-products-p3",
673 : merchant_url,
674 : "product-3",
675 : "a product",
676 : json_object (),
677 : "can",
678 : "EUR:1",
679 : "data:image/jpeg;base64,RAWDATA",
680 : json_array (),
681 : 5,
682 : 0,
683 : json_object (),
684 : GNUNET_TIME_relative_to_timestamp
685 : (
686 : GNUNET_TIME_UNIT_MINUTES),
687 : MHD_HTTP_NO_CONTENT),
688 2 : TALER_TESTING_cmd_merchant_patch_product2 ("patch-product-frac",
689 : merchant_url,
690 : "product-frac",
691 : "fractional product patched",
692 : json_pack ("{s:s}",
693 : "en",
694 : "fractional product patched"),
695 : "kg",
696 : "EUR:1.6",
697 : "",
698 : json_array (),
699 : 2,
700 : MERCHANT_UNIT_FRAC_BASE / 4,
701 : true,
702 : 0,
703 : json_object (),
704 : GNUNET_TIME_relative_to_timestamp (
705 : GNUNET_TIME_UNIT_MINUTES),
706 : MHD_HTTP_NO_CONTENT),
707 2 : TALER_TESTING_cmd_merchant_get_product ("get-product-frac-patched",
708 : merchant_url,
709 : "product-frac",
710 : MHD_HTTP_OK,
711 : "patch-product-frac"),
712 2 : TALER_TESTING_cmd_merchant_delete_unit ("delete-unit-piece-denied",
713 : merchant_url,
714 : "Piece",
715 : MHD_HTTP_CONFLICT),
716 2 : TALER_TESTING_cmd_merchant_post_units ("post-unit-piece-conflict",
717 : merchant_url,
718 : "Piece",
719 : "piece",
720 : "pc",
721 : false,
722 : 0,
723 : true,
724 : NULL,
725 : NULL,
726 : MHD_HTTP_CONFLICT),
727 2 : TALER_TESTING_cmd_merchant_post_units ("post-unit-bucket",
728 : merchant_url,
729 : "BucketCustomUnit",
730 : "bucket",
731 : "bkt",
732 : false,
733 : 0,
734 : true,
735 : json_pack ("{s:s}", "en", "bucket"),
736 : json_pack ("{s:s}", "en", "bkt"),
737 : MHD_HTTP_NO_CONTENT),
738 2 : TALER_TESTING_cmd_merchant_get_unit ("get-unit-bucket",
739 : merchant_url,
740 : "BucketCustomUnit",
741 : MHD_HTTP_OK,
742 : "post-unit-bucket"),
743 2 : TALER_TESTING_cmd_merchant_get_units ("get-units-bucket-list",
744 : merchant_url,
745 : MHD_HTTP_OK,
746 : "post-unit-bucket",
747 : NULL),
748 2 : TALER_TESTING_cmd_merchant_patch_unit ("patch-unit-bucket",
749 : merchant_url,
750 : "BucketCustomUnit",
751 : "bucket-updated",
752 : "bkt-upd",
753 : json_pack ("{s:s}", "en",
754 : "bucket-updated"),
755 : json_pack ("{s:s}", "en", "bkt-upd"),
756 : true,
757 : 0,
758 : false,
759 : MHD_HTTP_NO_CONTENT),
760 2 : TALER_TESTING_cmd_merchant_get_unit ("get-unit-bucket-patched",
761 : merchant_url,
762 : "BucketCustomUnit",
763 : MHD_HTTP_OK,
764 : "patch-unit-bucket"),
765 2 : TALER_TESTING_cmd_merchant_get_units ("get-units-bucket-updated",
766 : merchant_url,
767 : MHD_HTTP_OK,
768 : "patch-unit-bucket",
769 : NULL),
770 2 : TALER_TESTING_cmd_merchant_delete_unit ("delete-unit-bucket",
771 : merchant_url,
772 : "BucketCustomUnit",
773 : MHD_HTTP_NO_CONTENT),
774 2 : TALER_TESTING_cmd_merchant_get_unit ("get-unit-bucket-deleted",
775 : merchant_url,
776 : "BucketCustomUnit",
777 : MHD_HTTP_NOT_FOUND,
778 : NULL),
779 2 : TALER_TESTING_cmd_merchant_post_units ("post-unit-unicorn",
780 : merchant_url,
781 : "UnitUnicorn",
782 : "unicorn",
783 : "uni",
784 : true,
785 : 1,
786 : true,
787 : json_pack ("{s:s}", "en", "unicorn"),
788 : json_pack ("{s:s}", "en", "uni"),
789 : MHD_HTTP_NO_CONTENT),
790 2 : TALER_TESTING_cmd_merchant_post_products2 ("post-product-unicorn",
791 : merchant_url,
792 : "product-unicorn",
793 : "a unicorn snack",
794 : json_pack ("{s:s}",
795 : "en",
796 : "a unicorn snack"),
797 : "UnitUnicorn",
798 : "EUR:3.5",
799 : "",
800 : json_array (),
801 : 7,
802 : 0,
803 : json_object (),
804 2 : GNUNET_TIME_UNIT_ZERO_TS,
805 : MHD_HTTP_NO_CONTENT),
806 2 : TALER_TESTING_cmd_merchant_get_product2 ("get-product-unicorn-default",
807 : merchant_url,
808 : "product-unicorn",
809 : MHD_HTTP_OK,
810 : "post-product-unicorn",
811 : &expect_unicorn_defaults),
812 2 : TALER_TESTING_cmd_merchant_patch_unit ("patch-unit-unicorn",
813 : merchant_url,
814 : "UnitUnicorn",
815 : NULL,
816 : NULL,
817 : NULL,
818 : NULL,
819 : false,
820 : 0,
821 : true,
822 : MHD_HTTP_NO_CONTENT),
823 2 : TALER_TESTING_cmd_merchant_get_product2 ("get-product-unicorn-patched",
824 : merchant_url,
825 : "product-unicorn",
826 : MHD_HTTP_OK,
827 : "post-product-unicorn",
828 : &expect_unicorn_patched),
829 2 : TALER_TESTING_cmd_merchant_delete_product ("delete-product-unicorn",
830 : merchant_url,
831 : "product-unicorn",
832 : MHD_HTTP_NO_CONTENT),
833 2 : TALER_TESTING_cmd_merchant_delete_unit ("delete-unit-unicorn",
834 : merchant_url,
835 : "UnitUnicorn",
836 : MHD_HTTP_NO_CONTENT),
837 2 : TALER_TESTING_cmd_merchant_lock_product ("lock-product-p3",
838 : merchant_url,
839 : "product-3",
840 : GNUNET_TIME_UNIT_MINUTES,
841 : 2,
842 : MHD_HTTP_NO_CONTENT),
843 2 : TALER_TESTING_cmd_merchant_lock_product2 (
844 : "lock-product-p3-float-denied",
845 : merchant_url,
846 : "product-3",
847 : GNUNET_TIME_UNIT_MINUTES,
848 : 1,
849 : MERCHANT_UNIT_FRAC_BASE / 2,
850 : true,
851 : MHD_HTTP_BAD_REQUEST),
852 2 : TALER_TESTING_cmd_merchant_post_orders2 ("create-proposal-p3-float-denied",
853 2 : cred.cfg,
854 : merchant_url,
855 : MHD_HTTP_BAD_REQUEST,
856 : "order-p3-float-denied",
857 2 : GNUNET_TIME_UNIT_ZERO_TS,
858 2 : GNUNET_TIME_UNIT_FOREVER_TS,
859 : true,
860 : "EUR:5.0",
861 : "x-taler-bank",
862 : "product-3/1.5",
863 : "",
864 : NULL),
865 2 : TALER_TESTING_cmd_merchant_patch_product2 (
866 : "patch-product-3-allow-float",
867 : merchant_url,
868 : "product-3",
869 : "a product allow fractional",
870 : json_pack ("{s:s}",
871 : "en",
872 : "a product allow fractional"),
873 : "can",
874 : "EUR:1",
875 : "data:image/jpeg;base64,RAWDATA",
876 : json_array (),
877 : 5,
878 : 0,
879 : true,
880 : 0,
881 : json_object (),
882 : GNUNET_TIME_relative_to_timestamp (GNUNET_TIME_UNIT_MINUTES),
883 : MHD_HTTP_NO_CONTENT),
884 2 : cmd_transfer_to_exchange ("create-reserve-p3-float",
885 : "EUR:5.01"),
886 2 : cmd_exec_wirewatch ("wirewatch-p3-float"),
887 2 : TALER_TESTING_cmd_check_bank_admin_transfer (
888 : "check_bank_transfer-p3-float",
889 : "EUR:5.01",
890 : payer_payto,
891 : exchange_payto,
892 : "create-reserve-p3-float"),
893 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-p3-float",
894 : "create-reserve-p3-float",
895 : "EUR:5",
896 : 0,
897 : MHD_HTTP_OK),
898 2 : TALER_TESTING_cmd_merchant_lock_product2 (
899 : "lock-product-p3-float",
900 : merchant_url,
901 : "product-3",
902 : GNUNET_TIME_UNIT_MINUTES,
903 : 1,
904 : MERCHANT_UNIT_FRAC_BASE / 2,
905 : true,
906 : MHD_HTTP_NO_CONTENT),
907 2 : TALER_TESTING_cmd_merchant_post_orders2 ("create-proposal-p3-float",
908 2 : cred.cfg,
909 : merchant_url,
910 : MHD_HTTP_OK,
911 : "order-p3-float",
912 2 : GNUNET_TIME_UNIT_ZERO_TS,
913 2 : GNUNET_TIME_UNIT_FOREVER_TS,
914 : true,
915 : "EUR:5.0",
916 : "x-taler-bank",
917 : "product-3/1.5",
918 : "",
919 : NULL),
920 2 : TALER_TESTING_cmd_merchant_claim_order ("claim-order-p3-float",
921 : merchant_url,
922 : MHD_HTTP_OK,
923 : "create-proposal-p3-float",
924 : NULL),
925 2 : TALER_TESTING_cmd_merchant_pay_order ("pay-order-p3-float",
926 : merchant_url,
927 : MHD_HTTP_OK,
928 : "create-proposal-p3-float",
929 : "withdraw-coin-p3-float",
930 : "EUR:5",
931 : "EUR:4.99",
932 : "session-p3-float"),
933 2 : TALER_TESTING_cmd_sleep (
934 : "Wait for wire transfer deadline-p3-float",
935 : 3),
936 2 : CMD_EXEC_AGGREGATOR ("run-aggregator-p3-float"),
937 2 : TALER_TESTING_cmd_check_bank_transfer ("check_bank_transfer-p3-float",
938 : EXCHANGE_URL,
939 : "EUR:4.98",
940 : exchange_payto,
941 : merchant_payto),
942 2 : TALER_TESTING_cmd_merchant_get_order ("get-order-merchant-p3-float-paid",
943 : merchant_url,
944 : "create-proposal-p3-float",
945 : TALER_MERCHANT_OSC_PAID,
946 : false,
947 : MHD_HTTP_OK,
948 : NULL),
949 2 : TALER_TESTING_cmd_merchant_patch_product2 (
950 : "patch-product-3-restore",
951 : merchant_url,
952 : "product-3",
953 : "a product",
954 : json_pack ("{s:s}",
955 : "en",
956 : "a product"),
957 : "can",
958 : "EUR:1",
959 : "data:image/jpeg;base64,RAWDATA",
960 : json_array (),
961 : 5,
962 : 0,
963 : false,
964 : 0,
965 : json_object (),
966 : GNUNET_TIME_relative_to_timestamp (GNUNET_TIME_UNIT_MINUTES),
967 : MHD_HTTP_NO_CONTENT),
968 2 : TALER_TESTING_cmd_merchant_post_orders2 ("create-proposal-p3-wm-nx",
969 2 : cred.cfg,
970 : merchant_url,
971 : MHD_HTTP_NOT_FOUND,
972 : "order-p3",
973 2 : GNUNET_TIME_UNIT_ZERO_TS,
974 2 : GNUNET_TIME_UNIT_FOREVER_TS,
975 : true,
976 : "EUR:5.0",
977 : "unsupported-wire-method",
978 : "product-3/2",
979 : "", /* locks */
980 : NULL),
981 2 : TALER_TESTING_cmd_merchant_post_orders2 ("create-proposal-p3-pd-nx",
982 2 : cred.cfg,
983 : merchant_url,
984 : MHD_HTTP_NOT_FOUND,
985 : "order-p3",
986 2 : GNUNET_TIME_UNIT_ZERO_TS,
987 2 : GNUNET_TIME_UNIT_FOREVER_TS,
988 : true,
989 : "EUR:5.0",
990 : "x-taler-bank",
991 : "unknown-product/2",
992 : "",
993 : NULL),
994 2 : TALER_TESTING_cmd_merchant_post_orders2 (
995 : "create-proposal-p3-not-enough-stock",
996 2 : cred.cfg,
997 : merchant_url,
998 : MHD_HTTP_GONE,
999 : "order-p3",
1000 2 : GNUNET_TIME_UNIT_ZERO_TS,
1001 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1002 : true,
1003 : "EUR:5.0",
1004 : "x-taler-bank",
1005 : "product-3/24",
1006 : "",
1007 : NULL),
1008 2 : TALER_TESTING_cmd_merchant_post_orders2 ("create-proposal-p3",
1009 2 : cred.cfg,
1010 : merchant_url,
1011 : MHD_HTTP_OK,
1012 : "order-p3",
1013 2 : GNUNET_TIME_UNIT_ZERO_TS,
1014 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1015 : false,
1016 : "EUR:5.0",
1017 : "x-taler-bank",
1018 : "product-3/3",
1019 : "lock-product-p3",
1020 : NULL),
1021 2 : TALER_TESTING_cmd_merchant_post_orders2 ("create-proposal-p4-age",
1022 2 : cred.cfg,
1023 : merchant_url,
1024 : MHD_HTTP_OK,
1025 : "order-p4-age",
1026 2 : GNUNET_TIME_UNIT_ZERO_TS,
1027 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1028 : false,
1029 : "EUR:5.0",
1030 : "x-taler-bank",
1031 : "product-4age",
1032 : "", /* locks */
1033 : NULL),
1034 2 : TALER_TESTING_cmd_merchant_get_order4 ("get-order-merchant-p4-age",
1035 : merchant_url,
1036 : "create-proposal-p4-age",
1037 : TALER_MERCHANT_OSC_CLAIMED,
1038 : 16,
1039 : MHD_HTTP_OK),
1040 2 : TALER_TESTING_cmd_merchant_delete_order ("delete-order-paid",
1041 : merchant_url,
1042 : "1",
1043 : MHD_HTTP_CONFLICT),
1044 2 : TALER_TESTING_cmd_merchant_post_orders ("create-proposal-no-id",
1045 2 : cred.cfg,
1046 : merchant_url,
1047 : MHD_HTTP_OK,
1048 : NULL,
1049 2 : GNUNET_TIME_UNIT_ZERO_TS,
1050 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1051 : "EUR:5.0"),
1052 2 : TALER_TESTING_cmd_merchant_delete_webhook ("post-webhooks-pay-w1",
1053 : merchant_url,
1054 : "webhook-pay-1",
1055 : MHD_HTTP_NO_CONTENT),
1056 2 : TALER_TESTING_cmd_check_bank_empty ("check_bank_empty-2"),
1057 2 : TALER_TESTING_cmd_end ()
1058 : };
1059 : struct TALER_TESTING_Command double_spending[] = {
1060 2 : TALER_TESTING_cmd_merchant_post_orders ("create-proposal-2",
1061 2 : cred.cfg,
1062 : merchant_url,
1063 : MHD_HTTP_OK,
1064 : "2",
1065 2 : GNUNET_TIME_UNIT_ZERO_TS,
1066 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1067 : "EUR:5.0"),
1068 2 : TALER_TESTING_cmd_merchant_claim_order ("fetch-proposal-2",
1069 : merchant_url,
1070 : MHD_HTTP_OK,
1071 : "create-proposal-2",
1072 : NULL),
1073 2 : TALER_TESTING_cmd_merchant_pay_order ("deposit-double-2",
1074 : merchant_url,
1075 : MHD_HTTP_CONFLICT,
1076 : "create-proposal-2",
1077 : "withdraw-coin-1",
1078 : "EUR:5",
1079 : "EUR:4.99",
1080 : NULL),
1081 2 : TALER_TESTING_cmd_end ()
1082 : };
1083 :
1084 2 : const char *order_1r_refunds[] = {
1085 : "refund-increase-1r",
1086 : "refund-increase-1r-2",
1087 : NULL
1088 : };
1089 : struct TALER_TESTING_Command refund[] = {
1090 2 : cmd_transfer_to_exchange ("create-reserve-1r",
1091 : "EUR:10.02"),
1092 : /**
1093 : * Make a reserve exist, according to the previous transfer.
1094 : */
1095 2 : cmd_exec_wirewatch ("wirewatch-1r"),
1096 2 : TALER_TESTING_cmd_check_bank_admin_transfer ("check_bank_transfer-2r",
1097 : "EUR:10.02",
1098 : payer_payto,
1099 : exchange_payto,
1100 : "create-reserve-1r"),
1101 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-1r",
1102 : "create-reserve-1r",
1103 : "EUR:5",
1104 : 0,
1105 : MHD_HTTP_OK),
1106 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-2r",
1107 : "create-reserve-1r",
1108 : "EUR:5",
1109 : 0,
1110 : MHD_HTTP_OK),
1111 : /**
1112 : * Check the reserve is depleted.
1113 : */
1114 2 : TALER_TESTING_cmd_status ("withdraw-status-1r",
1115 : "create-reserve-1r",
1116 : "EUR:0",
1117 : MHD_HTTP_OK),
1118 2 : TALER_TESTING_cmd_merchant_post_orders ("create-proposal-1r",
1119 2 : cred.cfg,
1120 : merchant_url,
1121 : MHD_HTTP_OK,
1122 : "1r",
1123 2 : GNUNET_TIME_UNIT_ZERO_TS,
1124 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1125 : "EUR:5.0"),
1126 2 : TALER_TESTING_cmd_wallet_poll_order_start ("poll-order-wallet-refund-1-low",
1127 : merchant_url,
1128 : "create-proposal-1r",
1129 : POLL_ORDER_TIMEOUT,
1130 : "EUR:0.01"),
1131 2 : TALER_TESTING_cmd_wallet_poll_order_start (
1132 : "poll-order-wallet-refund-1-high",
1133 : merchant_url,
1134 : "create-proposal-1r",
1135 : POLL_ORDER_TIMEOUT,
1136 : "EUR:0.2"),
1137 2 : TALER_TESTING_cmd_merchant_pay_order ("pay-for-refund-1r",
1138 : merchant_url,
1139 : MHD_HTTP_OK,
1140 : "create-proposal-1r",
1141 : "withdraw-coin-1r",
1142 : "EUR:5",
1143 : "EUR:4.99",
1144 : NULL),
1145 2 : TALER_TESTING_cmd_poll_order_start ("poll-payment-refund-1",
1146 : merchant_url,
1147 : "1r", /* proposal name, not cmd ref! */
1148 : POLL_ORDER_TIMEOUT),
1149 2 : TALER_TESTING_cmd_merchant_order_refund ("refund-increase-1r",
1150 : merchant_url,
1151 : "refund test",
1152 : "1r", /* order ID */
1153 : "EUR:0.1",
1154 : MHD_HTTP_OK),
1155 2 : TALER_TESTING_cmd_wallet_poll_order_conclude ("poll-order-1-conclude-low",
1156 : MHD_HTTP_OK,
1157 : "EUR:0.1",
1158 : "poll-order-wallet-refund-1-low"),
1159 2 : TALER_TESTING_cmd_wallet_get_order ("get-order-wallet-1r",
1160 : merchant_url,
1161 : "create-proposal-1r",
1162 : true,
1163 : true,
1164 : true,
1165 : MHD_HTTP_OK),
1166 2 : TALER_TESTING_cmd_merchant_order_refund ("refund-increase-1r-2",
1167 : merchant_url,
1168 : "refund test 2",
1169 : "1r", /* order ID */
1170 : "EUR:1.0",
1171 : MHD_HTTP_OK),
1172 2 : TALER_TESTING_cmd_wallet_poll_order_conclude ("poll-order-1-conclude-high",
1173 : MHD_HTTP_OK,
1174 : "EUR:1.0",
1175 : "poll-order-wallet-refund-1-high"),
1176 2 : TALER_TESTING_cmd_wallet_get_order ("get-order-wallet-1r-2",
1177 : merchant_url,
1178 : "create-proposal-1r",
1179 : true,
1180 : true,
1181 : true,
1182 : MHD_HTTP_OK),
1183 2 : TALER_TESTING_cmd_wallet_order_refund ("obtain-refund-1r",
1184 : merchant_url,
1185 : "create-proposal-1r",
1186 : MHD_HTTP_OK,
1187 : "refund-increase-1r",
1188 : "refund-increase-1r-2",
1189 : NULL),
1190 2 : TALER_TESTING_cmd_wallet_get_order ("get-order-wallet-1r-3",
1191 : merchant_url,
1192 : "create-proposal-1r",
1193 : true,
1194 : true,
1195 : false,
1196 : MHD_HTTP_OK),
1197 2 : TALER_TESTING_cmd_merchant_get_order ("get-order-merchant-1r",
1198 : merchant_url,
1199 : "create-proposal-1r",
1200 : TALER_MERCHANT_OSC_PAID,
1201 : true,
1202 : MHD_HTTP_OK,
1203 : "refund-increase-1r",
1204 : "refund-increase-1r-2",
1205 : NULL),
1206 2 : TALER_TESTING_cmd_merchant_get_order2 ("get-order-merchant-1r-2",
1207 : merchant_url,
1208 : "create-proposal-1r",
1209 : TALER_MERCHANT_OSC_PAID,
1210 : false,
1211 : NULL,
1212 : true,
1213 : order_1r_refunds,
1214 : NULL,
1215 : MHD_HTTP_OK),
1216 2 : TALER_TESTING_cmd_poll_order_conclude ("poll-payment-refund-conclude-1",
1217 : MHD_HTTP_OK,
1218 : "poll-payment-refund-1"),
1219 :
1220 : /* Test /refund on a contract that was never paid. */
1221 2 : TALER_TESTING_cmd_merchant_post_orders ("create-proposal-not-to-be-paid",
1222 2 : cred.cfg,
1223 : merchant_url,
1224 : MHD_HTTP_OK,
1225 : "1-unpaid",
1226 2 : GNUNET_TIME_UNIT_ZERO_TS,
1227 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1228 : "EUR:5.0"),
1229 : /* Try to increase an unpaid proposal. */
1230 2 : TALER_TESTING_cmd_merchant_order_refund ("refund-increase-unpaid-proposal",
1231 : merchant_url,
1232 : "refund test",
1233 : "1-unpaid",
1234 : "EUR:0.1",
1235 : MHD_HTTP_CONFLICT),
1236 : /* Try to increase a non existent proposal. */
1237 2 : TALER_TESTING_cmd_merchant_order_refund (
1238 : "refund-increase-nonexistent-proposal",
1239 : merchant_url,
1240 : "refund test",
1241 : "non-existent-id",
1242 : "EUR:0.1",
1243 : MHD_HTTP_NOT_FOUND),
1244 : /*
1245 : The following block will (1) create a new
1246 : reserve, then (2) a proposal, then (3) pay for
1247 : it, and finally (4) attempt to pick up a refund
1248 : from it without any increasing taking place
1249 : in the first place.
1250 : */
1251 2 : cmd_transfer_to_exchange ("create-reserve-unincreased-refund",
1252 : "EUR:5.01"),
1253 2 : cmd_exec_wirewatch ("wirewatch-unincreased-refund"),
1254 2 : TALER_TESTING_cmd_check_bank_admin_transfer (
1255 : "check_bank_transfer-unincreased-refund",
1256 : "EUR:5.01",
1257 : payer_payto,
1258 : exchange_payto,
1259 : "create-reserve-unincreased-refund"),
1260 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-unincreased-refund",
1261 : "create-reserve-unincreased-refund",
1262 : "EUR:5",
1263 : 0,
1264 : MHD_HTTP_OK),
1265 2 : TALER_TESTING_cmd_merchant_post_orders (
1266 : "create-proposal-unincreased-refund",
1267 2 : cred.cfg,
1268 : merchant_url,
1269 : MHD_HTTP_OK,
1270 : "unincreased-proposal",
1271 2 : GNUNET_TIME_UNIT_ZERO_TS,
1272 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1273 : "EUR:5.0"),
1274 2 : TALER_TESTING_cmd_merchant_pay_order ("pay-unincreased-proposal",
1275 : merchant_url,
1276 : MHD_HTTP_OK,
1277 : "create-proposal-unincreased-refund",
1278 : "withdraw-coin-unincreased-refund",
1279 : "EUR:5",
1280 : "EUR:4.99",
1281 : NULL),
1282 2 : TALER_TESTING_cmd_sleep (
1283 : "Wait for wire transfer deadline",
1284 : 3),
1285 2 : CMD_EXEC_AGGREGATOR ("run-aggregator-unincreased-refund"),
1286 2 : TALER_TESTING_cmd_check_bank_transfer (
1287 : "check_bank_transfer-paid-unincreased-refund",
1288 : EXCHANGE_URL,
1289 : "EUR:8.97", /* '4.98 from above', plus 4.99 from 'pay-for-refund-1r'
1290 : and MINUS 0.1 MINUS 0.9 from
1291 : 'refund-increase-1r' and 'refund-increase-1r-2' */
1292 : exchange_payto,
1293 : merchant_payto),
1294 2 : TALER_TESTING_cmd_end ()
1295 : };
1296 :
1297 : struct TALER_TESTING_Command auth[] = {
1298 2 : TALER_TESTING_cmd_merchant_post_instances ("instance-create-i1a",
1299 : merchant_url,
1300 : "i1a",
1301 : MHD_HTTP_NO_CONTENT),
1302 2 : TALER_TESTING_cmd_merchant_post_account (
1303 : "instance-create-i1a-account",
1304 : merchant_url_i1a,
1305 : merchant_payto,
1306 : NULL, NULL,
1307 : MHD_HTTP_OK),
1308 2 : TALER_TESTING_cmd_merchant_get_product ("get-nx-product-i1a-1",
1309 : merchant_url_i1a,
1310 : "nx-product",
1311 : MHD_HTTP_NOT_FOUND,
1312 : NULL),
1313 2 : TALER_TESTING_cmd_merchant_get_products ("get-i1a-products-empty-1",
1314 : merchant_url_i1a,
1315 : MHD_HTTP_OK,
1316 : NULL),
1317 2 : TALER_TESTING_cmd_merchant_get_product ("get-nx-product-i1a-2",
1318 : merchant_url_i1a,
1319 : "nx-product",
1320 : MHD_HTTP_NOT_FOUND,
1321 : NULL),
1322 2 : TALER_TESTING_cmd_merchant_get_products ("get-i1a-products-empty-2",
1323 : merchant_url_i1a,
1324 : MHD_HTTP_OK,
1325 : NULL),
1326 2 : TALER_TESTING_cmd_merchant_post_instance_auth (
1327 : "instance-create-i1a-auth-ok",
1328 : merchant_url,
1329 : "i1a",
1330 : "my-secret",
1331 : MHD_HTTP_NO_CONTENT),
1332 2 : TALER_TESTING_cmd_merchant_get_product ("get-nx-product-i1a-3",
1333 : merchant_url_i1a,
1334 : "nx-product",
1335 : MHD_HTTP_UNAUTHORIZED,
1336 : NULL),
1337 2 : TALER_TESTING_cmd_merchant_get_products ("get-i1a-products-empty-3",
1338 : merchant_url_i1a,
1339 : MHD_HTTP_UNAUTHORIZED,
1340 : NULL),
1341 2 : TALER_TESTING_cmd_set_authorization ("set-auth-valid",
1342 : "Basic aTFhOm15LXNlY3JldA=="),
1343 2 : TALER_TESTING_cmd_merchant_post_instance_token (
1344 : "instance-create-i1a-token-ok",
1345 : merchant_url,
1346 : "i1a",
1347 : "write", /* scope */
1348 : GNUNET_TIME_UNIT_DAYS, /* duration */
1349 : GNUNET_YES, /* refreshable */
1350 : MHD_HTTP_OK),
1351 2 : TALER_TESTING_cmd_set_authorization ("unset-auth-valid",
1352 : NULL), // Unset header
1353 2 : TALER_TESTING_cmd_merchant_set_instance_token (
1354 : "instance-create-i1a-token-set",
1355 : "instance-create-i1a-token-ok"),
1356 2 : TALER_TESTING_cmd_merchant_get_product ("get-nx-product-i1a-4",
1357 : merchant_url_i1a,
1358 : "nx-product",
1359 : MHD_HTTP_NOT_FOUND,
1360 : NULL),
1361 2 : TALER_TESTING_cmd_merchant_get_products ("get-i1a-products-empty-4",
1362 : merchant_url_i1a,
1363 : MHD_HTTP_OK,
1364 : NULL),
1365 2 : TALER_TESTING_cmd_merchant_delete_instance_token (
1366 : "instance-create-i1a-token-delete",
1367 : merchant_url,
1368 : "i1a",
1369 : MHD_HTTP_NO_CONTENT),
1370 2 : TALER_TESTING_cmd_merchant_get_product ("get-nx-product-i1a-5",
1371 : merchant_url_i1a,
1372 : "nx-product",
1373 : MHD_HTTP_UNAUTHORIZED,
1374 : NULL),
1375 2 : TALER_TESTING_cmd_merchant_get_products ("get-i1a-products-empty-5",
1376 : merchant_url_i1a,
1377 : MHD_HTTP_UNAUTHORIZED,
1378 : NULL),
1379 2 : TALER_TESTING_cmd_merchant_purge_instance ("instance-delete-i1a-fail",
1380 : merchant_url_i1a,
1381 : NULL,
1382 : MHD_HTTP_UNAUTHORIZED),
1383 2 : TALER_TESTING_cmd_set_authorization ("set-token-auth-valid-again",
1384 : "Basic aTFhOm15LXNlY3JldA=="),
1385 2 : TALER_TESTING_cmd_merchant_post_instance_token (
1386 : "set-auth-valid-again",
1387 : merchant_url,
1388 : "i1a",
1389 : "write", /* scope */
1390 : GNUNET_TIME_UNIT_DAYS, /* duration */
1391 : GNUNET_YES, /* refreshable */
1392 : MHD_HTTP_OK),
1393 2 : TALER_TESTING_cmd_set_authorization ("unset-auth-valid2",
1394 : NULL), // Unset header
1395 2 : TALER_TESTING_cmd_merchant_set_instance_token (
1396 : "instance-create-i1a-token-set-again",
1397 : "set-auth-valid-again"),
1398 2 : TALER_TESTING_cmd_merchant_post_instance_auth (
1399 : "instance-create-i1a-auth-ok-idempotent",
1400 : merchant_url_i1a,
1401 : NULL,
1402 : RFC_8959_PREFIX "my-other-secret",
1403 : MHD_HTTP_NO_CONTENT),
1404 2 : TALER_TESTING_cmd_merchant_post_instance_auth (
1405 : "instance-create-i1a-clear-auth",
1406 : merchant_url_i1a,
1407 : NULL,
1408 : NULL,
1409 : MHD_HTTP_NO_CONTENT),
1410 2 : TALER_TESTING_cmd_set_authorization ("set-auth-none",
1411 : NULL),
1412 2 : TALER_TESTING_cmd_merchant_purge_instance ("instance-delete-i1a",
1413 : merchant_url_i1a,
1414 : NULL,
1415 : MHD_HTTP_NO_CONTENT),
1416 2 : TALER_TESTING_cmd_end ()
1417 : };
1418 :
1419 : struct TALER_TESTING_Command pay_again[] = {
1420 2 : cmd_transfer_to_exchange ("create-reserve-20",
1421 : "EUR:20.04"),
1422 2 : cmd_exec_wirewatch ("wirewatch-20"),
1423 2 : TALER_TESTING_cmd_check_bank_admin_transfer ("check_bank_transfer-10",
1424 : "EUR:20.04",
1425 : payer_payto,
1426 : exchange_payto,
1427 : "create-reserve-20"),
1428 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-10a",
1429 : "create-reserve-20",
1430 : "EUR:5",
1431 : 0,
1432 : MHD_HTTP_OK),
1433 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-10b",
1434 : "create-reserve-20",
1435 : "EUR:5",
1436 : 0,
1437 : MHD_HTTP_OK),
1438 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-10c",
1439 : "create-reserve-20",
1440 : "EUR:5",
1441 : 0,
1442 : MHD_HTTP_OK),
1443 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-10d",
1444 : "create-reserve-20",
1445 : "EUR:5",
1446 : 0,
1447 : MHD_HTTP_OK),
1448 2 : TALER_TESTING_cmd_status ("withdraw-status-20",
1449 : "create-reserve-20",
1450 : "EUR:0",
1451 : MHD_HTTP_OK),
1452 2 : TALER_TESTING_cmd_merchant_post_orders ("create-proposal-10",
1453 2 : cred.cfg,
1454 : merchant_url,
1455 : MHD_HTTP_OK,
1456 : "10",
1457 2 : GNUNET_TIME_UNIT_ZERO_TS,
1458 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1459 : "EUR:10.0"),
1460 2 : TALER_TESTING_cmd_merchant_pay_order ("pay-fail-partial-double-10",
1461 : merchant_url,
1462 : MHD_HTTP_CONFLICT,
1463 : "create-proposal-10",
1464 : "withdraw-coin-10a;withdraw-coin-1",
1465 : "EUR:5",
1466 : "EUR:4.99",
1467 : NULL),
1468 2 : TALER_TESTING_cmd_merchant_pay_order ("pay-again-10",
1469 : merchant_url,
1470 : MHD_HTTP_OK,
1471 : "create-proposal-10",
1472 : "withdraw-coin-10a;withdraw-coin-10b",
1473 : "EUR:5",
1474 : "EUR:4.99",
1475 : NULL),
1476 2 : TALER_TESTING_cmd_merchant_pay_order ("pay-too-much-10",
1477 : merchant_url,
1478 : MHD_HTTP_CONFLICT,
1479 : "create-proposal-10",
1480 : "withdraw-coin-10c;withdraw-coin-10d",
1481 : "EUR:5",
1482 : "EUR:4.99",
1483 : NULL),
1484 2 : TALER_TESTING_cmd_sleep (
1485 : "Wait for wire transfer deadline",
1486 : 3),
1487 2 : CMD_EXEC_AGGREGATOR ("run-aggregator-10"),
1488 2 : TALER_TESTING_cmd_check_bank_transfer ("check_bank_transfer-9.97-10",
1489 : EXCHANGE_URL,
1490 : "EUR:9.97",
1491 : exchange_payto,
1492 : merchant_payto),
1493 2 : TALER_TESTING_cmd_check_bank_empty ("check_bank_empty-10"),
1494 2 : TALER_TESTING_cmd_end ()
1495 : };
1496 :
1497 : struct TALER_TESTING_Command pay_abort[] = {
1498 2 : cmd_transfer_to_exchange ("create-reserve-11",
1499 : "EUR:10.02"),
1500 2 : cmd_exec_wirewatch ("wirewatch-11"),
1501 2 : TALER_TESTING_cmd_check_bank_admin_transfer ("check_bank_transfer-11",
1502 : "EUR:10.02",
1503 : payer_payto,
1504 : exchange_payto,
1505 : "create-reserve-11"),
1506 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-11a",
1507 : "create-reserve-11",
1508 : "EUR:5",
1509 : 0,
1510 : MHD_HTTP_OK),
1511 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-11b",
1512 : "create-reserve-11",
1513 : "EUR:5",
1514 : 0,
1515 : MHD_HTTP_OK),
1516 2 : TALER_TESTING_cmd_status ("withdraw-status-11",
1517 : "create-reserve-11",
1518 : "EUR:0",
1519 : MHD_HTTP_OK),
1520 2 : TALER_TESTING_cmd_merchant_post_orders ("create-proposal-11",
1521 2 : cred.cfg,
1522 : merchant_url,
1523 : MHD_HTTP_OK,
1524 : "11",
1525 2 : GNUNET_TIME_UNIT_ZERO_TS,
1526 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1527 : "EUR:10.0"),
1528 2 : TALER_TESTING_cmd_merchant_pay_order ("pay-fail-partial-double-11-good",
1529 : merchant_url,
1530 : MHD_HTTP_BAD_REQUEST,
1531 : "create-proposal-11",
1532 : "withdraw-coin-11a",
1533 : "EUR:5",
1534 : "EUR:4.99",
1535 : NULL),
1536 2 : TALER_TESTING_cmd_merchant_pay_order ("pay-fail-partial-double-11-bad",
1537 : merchant_url,
1538 : MHD_HTTP_CONFLICT,
1539 : "create-proposal-11",
1540 : "withdraw-coin-1",
1541 : "EUR:5",
1542 : "EUR:4.99",
1543 : NULL),
1544 2 : TALER_TESTING_cmd_merchant_order_abort ("pay-abort-11",
1545 : merchant_url,
1546 : "pay-fail-partial-double-11-good",
1547 : MHD_HTTP_OK),
1548 2 : TALER_TESTING_cmd_sleep (
1549 : "Wait for wire transfer deadline",
1550 : 3),
1551 2 : CMD_EXEC_AGGREGATOR ("run-aggregator-11"),
1552 2 : TALER_TESTING_cmd_check_bank_empty ("check_bank_empty-11"),
1553 2 : TALER_TESTING_cmd_end ()
1554 : };
1555 :
1556 : struct TALER_TESTING_Command templates[] = {
1557 2 : cmd_transfer_to_exchange ("create-reserve-20x",
1558 : "EUR:20.04"),
1559 2 : cmd_exec_wirewatch ("wirewatch-20x"),
1560 2 : TALER_TESTING_cmd_check_bank_admin_transfer ("check_bank_transfer-20x",
1561 : "EUR:20.04",
1562 : payer_payto,
1563 : exchange_payto,
1564 : "create-reserve-20x"),
1565 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-xa",
1566 : "create-reserve-20x",
1567 : "EUR:5",
1568 : 0,
1569 : MHD_HTTP_OK),
1570 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-xb",
1571 : "create-reserve-20x",
1572 : "EUR:5",
1573 : 0,
1574 : MHD_HTTP_OK),
1575 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-xc",
1576 : "create-reserve-20x",
1577 : "EUR:5",
1578 : 0,
1579 : MHD_HTTP_OK),
1580 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-xd",
1581 : "create-reserve-20x",
1582 : "EUR:5",
1583 : 0,
1584 : MHD_HTTP_OK),
1585 2 : TALER_TESTING_cmd_status ("withdraw-status-20x",
1586 : "create-reserve-20x",
1587 : "EUR:0",
1588 : MHD_HTTP_OK),
1589 2 : TALER_TESTING_cmd_merchant_get_templates ("get-templates-empty",
1590 : merchant_url,
1591 : MHD_HTTP_OK,
1592 : NULL),
1593 2 : TALER_TESTING_cmd_merchant_post_templates ("post-templates-t1",
1594 : merchant_url,
1595 : "template-1",
1596 : "a template",
1597 : MHD_HTTP_NO_CONTENT),
1598 2 : TALER_TESTING_cmd_merchant_post_templates ("post-templates-t1-idem",
1599 : merchant_url,
1600 : "template-1",
1601 : "a template",
1602 : MHD_HTTP_NO_CONTENT),
1603 2 : TALER_TESTING_cmd_merchant_post_templates ("post-templates-t1-non-idem",
1604 : merchant_url,
1605 : "template-1",
1606 : "a different template",
1607 : MHD_HTTP_CONFLICT),
1608 2 : TALER_TESTING_cmd_merchant_get_templates ("get-templates-t1",
1609 : merchant_url,
1610 : MHD_HTTP_OK,
1611 : "post-templates-t1",
1612 : NULL),
1613 2 : TALER_TESTING_cmd_merchant_get_template ("get-template-t1",
1614 : merchant_url,
1615 : "template-1",
1616 : MHD_HTTP_OK,
1617 : "post-templates-t1"),
1618 2 : TALER_TESTING_cmd_merchant_post_templates ("post-templates-t2",
1619 : merchant_url,
1620 : "template-2",
1621 : "a template",
1622 : MHD_HTTP_NO_CONTENT),
1623 2 : TALER_TESTING_cmd_merchant_patch_template (
1624 : "patch-templates-t2",
1625 : merchant_url,
1626 : "template-2",
1627 : "another template",
1628 : NULL,
1629 2 : GNUNET_JSON_PACK (
1630 : GNUNET_JSON_pack_uint64 ("minimum_age", 0),
1631 : GNUNET_JSON_pack_time_rel ("pay_duration",
1632 : GNUNET_TIME_UNIT_MINUTES)),
1633 : MHD_HTTP_NO_CONTENT),
1634 2 : TALER_TESTING_cmd_merchant_get_template ("get-template-t2",
1635 : merchant_url,
1636 : "template-2",
1637 : MHD_HTTP_OK,
1638 : "patch-templates-t2"),
1639 2 : TALER_TESTING_cmd_merchant_get_template ("get-template-nx",
1640 : merchant_url,
1641 : "template-nx",
1642 : MHD_HTTP_NOT_FOUND,
1643 : NULL),
1644 2 : TALER_TESTING_cmd_merchant_post_otp_devices (
1645 : "post-otp-device",
1646 : merchant_url,
1647 : "otp-dev",
1648 : "my OTP device",
1649 : "FEE4P2J",
1650 : TALER_MCA_WITH_PRICE,
1651 : 0,
1652 : MHD_HTTP_NO_CONTENT),
1653 2 : TALER_TESTING_cmd_merchant_patch_template (
1654 : "patch-templates-t3-nx",
1655 : merchant_url,
1656 : "template-3",
1657 : "updated template",
1658 : "otp-dev",
1659 2 : GNUNET_JSON_PACK (
1660 : GNUNET_JSON_pack_uint64 ("minimum_age", 0),
1661 : GNUNET_JSON_pack_time_rel ("pay_duration",
1662 : GNUNET_TIME_UNIT_MINUTES)),
1663 : MHD_HTTP_NOT_FOUND),
1664 2 : TALER_TESTING_cmd_merchant_post_templates2 (
1665 : "post-templates-t3-amount",
1666 : merchant_url,
1667 : "template-amount",
1668 : "a different template with an amount",
1669 : NULL,
1670 2 : GNUNET_JSON_PACK (
1671 : GNUNET_JSON_pack_uint64 ("minimum_age", 0),
1672 : GNUNET_JSON_pack_time_rel ("pay_duration",
1673 : GNUNET_TIME_UNIT_MINUTES),
1674 : GNUNET_JSON_pack_string ("amount",
1675 : "EUR:4")),
1676 : MHD_HTTP_NO_CONTENT),
1677 2 : TALER_TESTING_cmd_merchant_post_using_templates (
1678 : "using-templates-t1",
1679 : "post-templates-t1",
1680 : NULL,
1681 : merchant_url,
1682 : "1",
1683 : "summary-1",
1684 : "EUR:9.98",
1685 2 : GNUNET_TIME_UNIT_ZERO_TS,
1686 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1687 : MHD_HTTP_OK),
1688 2 : TALER_TESTING_cmd_merchant_post_using_templates (
1689 : "using-templates-t1-amount-missing",
1690 : "post-templates-t1",
1691 : NULL,
1692 : merchant_url,
1693 : "2",
1694 : "summary-1",
1695 : NULL,
1696 2 : GNUNET_TIME_UNIT_ZERO_TS,
1697 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1698 : MHD_HTTP_CONFLICT),
1699 2 : TALER_TESTING_cmd_merchant_post_using_templates (
1700 : "using-templates-t1-summary-missing",
1701 : "post-templates-t1",
1702 : NULL,
1703 : merchant_url,
1704 : "3",
1705 : NULL,
1706 : "EUR:10",
1707 2 : GNUNET_TIME_UNIT_ZERO_TS,
1708 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1709 : MHD_HTTP_CONFLICT),
1710 2 : TALER_TESTING_cmd_merchant_post_using_templates (
1711 : "using-templates-t1-amount-conflict",
1712 : "post-templates-t3-amount",
1713 : NULL,
1714 : merchant_url,
1715 : "4",
1716 : "summary-1",
1717 : "EUR:10",
1718 2 : GNUNET_TIME_UNIT_ZERO_TS,
1719 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1720 : MHD_HTTP_CONFLICT),
1721 2 : TALER_TESTING_cmd_merchant_post_using_templates (
1722 : "using-templates-t1-amount-duplicate",
1723 : "post-templates-t3-amount",
1724 : NULL,
1725 : merchant_url,
1726 : "4",
1727 : "summary-1",
1728 : "EUR:4",
1729 2 : GNUNET_TIME_UNIT_ZERO_TS,
1730 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1731 : MHD_HTTP_CONFLICT),
1732 2 : TALER_TESTING_cmd_merchant_pay_order ("pay-100",
1733 : merchant_url,
1734 : MHD_HTTP_OK,
1735 : "using-templates-t1",
1736 : "withdraw-coin-xa;withdraw-coin-xb",
1737 : "EUR:4.99",
1738 : "EUR:4.99",
1739 : NULL),
1740 2 : TALER_TESTING_cmd_merchant_delete_template ("get-templates-empty",
1741 : merchant_url,
1742 : "t1",
1743 : MHD_HTTP_NOT_FOUND),
1744 2 : TALER_TESTING_cmd_merchant_delete_template ("get-templates-empty",
1745 : merchant_url,
1746 : "template-1",
1747 : MHD_HTTP_NO_CONTENT),
1748 2 : TALER_TESTING_cmd_merchant_post_using_templates (
1749 : "post-templates-t1-deleted",
1750 : "post-templates-t1",
1751 : NULL,
1752 : merchant_url,
1753 : "0",
1754 : "summary-1",
1755 : "EUR:5",
1756 2 : GNUNET_TIME_UNIT_ZERO_TS,
1757 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1758 : MHD_HTTP_NOT_FOUND),
1759 2 : TALER_TESTING_cmd_merchant_post_otp_devices (
1760 : "post-otp-device",
1761 : merchant_url,
1762 : "otp-dev-2",
1763 : "my OTP device",
1764 : "secret",
1765 : TALER_MCA_WITH_PRICE,
1766 : 0,
1767 : MHD_HTTP_NO_CONTENT),
1768 2 : TALER_TESTING_cmd_merchant_post_templates2 (
1769 : "post-templates-with-pos-key",
1770 : merchant_url,
1771 : "template-key",
1772 : "a different template with POS KEY",
1773 : "otp-dev-2",
1774 2 : GNUNET_JSON_PACK (
1775 : GNUNET_JSON_pack_uint64 ("minimum_age", 0),
1776 : GNUNET_JSON_pack_time_rel ("pay_duration",
1777 : GNUNET_TIME_UNIT_MINUTES)),
1778 : MHD_HTTP_NO_CONTENT),
1779 :
1780 2 : TALER_TESTING_cmd_merchant_post_using_templates (
1781 : "using-templates-pos-key",
1782 : "post-templates-with-pos-key",
1783 : "post-otp-device",
1784 : merchant_url,
1785 : "1",
1786 : "summary-1-pos",
1787 : "EUR:9.98",
1788 2 : GNUNET_TIME_UNIT_ZERO_TS,
1789 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1790 : MHD_HTTP_OK),
1791 2 : TALER_TESTING_cmd_merchant_pay_order ("pay-with-pos",
1792 : merchant_url,
1793 : MHD_HTTP_OK,
1794 : "using-templates-pos-key",
1795 : "withdraw-coin-xc;withdraw-coin-xd",
1796 : "EUR:4.99",
1797 : "EUR:4.99",
1798 : NULL),
1799 :
1800 :
1801 2 : TALER_TESTING_cmd_end ()
1802 : };
1803 :
1804 : struct TALER_TESTING_Command webhooks[] = {
1805 2 : TALER_TESTING_cmd_merchant_get_webhooks ("get-webhooks-empty",
1806 : merchant_url,
1807 : MHD_HTTP_OK,
1808 : NULL),
1809 2 : TALER_TESTING_cmd_merchant_post_webhooks ("post-webhooks-w1",
1810 : merchant_url,
1811 : "webhook-1",
1812 : "Paid",
1813 : MHD_HTTP_NO_CONTENT),
1814 2 : TALER_TESTING_cmd_merchant_post_webhooks ("post-webhooks-w1-idem",
1815 : merchant_url,
1816 : "webhook-1",
1817 : "Paid",
1818 : MHD_HTTP_NO_CONTENT),
1819 2 : TALER_TESTING_cmd_merchant_post_webhooks ("post-webhooks-w1-non-idem",
1820 : merchant_url,
1821 : "webhook-1",
1822 : "Refund",
1823 : MHD_HTTP_CONFLICT),
1824 2 : TALER_TESTING_cmd_merchant_get_webhooks ("get-webhooks-w1",
1825 : merchant_url,
1826 : MHD_HTTP_OK,
1827 : "post-webhooks-w1",
1828 : NULL),
1829 2 : TALER_TESTING_cmd_merchant_get_webhook ("get-webhook-w1",
1830 : merchant_url,
1831 : "webhook-1",
1832 : MHD_HTTP_OK,
1833 : "post-webhooks-w1"),
1834 2 : TALER_TESTING_cmd_merchant_post_webhooks ("post-webhooks-w2",
1835 : merchant_url,
1836 : "webhook-2",
1837 : "Paid",
1838 : MHD_HTTP_NO_CONTENT),
1839 2 : TALER_TESTING_cmd_merchant_patch_webhook ("patch-webhooks-w2",
1840 : merchant_url,
1841 : "webhook-2",
1842 : "Refund2",
1843 : "http://localhost:38188/",
1844 : "POST",
1845 : "Authorization:WHWOXZXPLL",
1846 : "Amount",
1847 : MHD_HTTP_NO_CONTENT),
1848 2 : TALER_TESTING_cmd_merchant_get_webhook ("get-webhook-w2",
1849 : merchant_url,
1850 : "webhook-2",
1851 : MHD_HTTP_OK,
1852 : "patch-webhooks-w2"),
1853 2 : TALER_TESTING_cmd_merchant_get_webhook ("get-webhook-nx",
1854 : merchant_url,
1855 : "webhook-nx",
1856 : MHD_HTTP_NOT_FOUND,
1857 : NULL),
1858 2 : TALER_TESTING_cmd_merchant_patch_webhook ("patch-webhooks-w3-nx",
1859 : merchant_url,
1860 : "webhook-3",
1861 : "Paid2",
1862 : "https://example.com",
1863 : "POST",
1864 : "Authorization:WHWOXZXPLL",
1865 : "Amount",
1866 : MHD_HTTP_NOT_FOUND),
1867 2 : TALER_TESTING_cmd_merchant_delete_webhook ("get-webhooks-empty",
1868 : merchant_url,
1869 : "w1",
1870 : MHD_HTTP_NOT_FOUND),
1871 2 : TALER_TESTING_cmd_merchant_delete_webhook ("get-webhooks-empty",
1872 : merchant_url,
1873 : "webhook-1",
1874 : MHD_HTTP_NO_CONTENT),
1875 2 : TALER_TESTING_cmd_end ()
1876 : };
1877 : struct TALER_TESTING_Command repurchase[] = {
1878 2 : cmd_transfer_to_exchange (
1879 : "create-reserve-30x",
1880 : "EUR:30.06"),
1881 2 : cmd_exec_wirewatch (
1882 : "wirewatch-30x"),
1883 2 : TALER_TESTING_cmd_check_bank_admin_transfer (
1884 : "check_bank_transfer-30x",
1885 : "EUR:30.06",
1886 : payer_payto,
1887 : exchange_payto,
1888 : "create-reserve-30x"),
1889 2 : TALER_TESTING_cmd_withdraw_amount (
1890 : "withdraw-coin-rep",
1891 : "create-reserve-30x",
1892 : "EUR:5",
1893 : 0,
1894 : MHD_HTTP_OK),
1895 2 : TALER_TESTING_cmd_merchant_post_orders3 (
1896 : "post-order-repurchase-original",
1897 2 : cred.cfg,
1898 : merchant_url,
1899 : MHD_HTTP_OK,
1900 : "repurchase-original",
1901 : GNUNET_TIME_relative_to_timestamp (GNUNET_TIME_UNIT_MINUTES),
1902 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1903 : "https://fulfillment.example.com/",
1904 : "EUR:1.0"),
1905 2 : TALER_TESTING_cmd_merchant_pay_order (
1906 : "repurchase-pay-first",
1907 : merchant_url,
1908 : MHD_HTTP_OK,
1909 : "post-order-repurchase-original",
1910 : "withdraw-coin-rep",
1911 : "EUR:1.00",
1912 : "EUR:0.99",
1913 : "repurchase-session"),
1914 2 : TALER_TESTING_cmd_wallet_get_order (
1915 : "repurchase-wallet-check-primary-order",
1916 : merchant_url,
1917 : "post-order-repurchase-original",
1918 : true,
1919 : false,
1920 : false,
1921 : MHD_HTTP_OK),
1922 2 : TALER_TESTING_cmd_merchant_get_order3 (
1923 : "repurchase-check-primary-payment",
1924 : merchant_url,
1925 : "post-order-repurchase-original",
1926 : TALER_MERCHANT_OSC_PAID,
1927 : "repurchase-session",
1928 : NULL,
1929 : MHD_HTTP_OK),
1930 2 : TALER_TESTING_cmd_merchant_get_order3 (
1931 : "repurchase-check-primary-payment-bad-binding",
1932 : merchant_url,
1933 : "post-order-repurchase-original",
1934 : TALER_MERCHANT_OSC_CLAIMED, /* someone else has it! */
1935 : "wrong-session",
1936 : NULL,
1937 : MHD_HTTP_OK),
1938 2 : TALER_TESTING_cmd_merchant_post_orders3 (
1939 : "post-order-repurchase-secondary",
1940 2 : cred.cfg,
1941 : merchant_url,
1942 : MHD_HTTP_OK,
1943 : "repurchase-secondary",
1944 : GNUNET_TIME_relative_to_timestamp (GNUNET_TIME_UNIT_MINUTES),
1945 2 : GNUNET_TIME_UNIT_FOREVER_TS,
1946 : "https://fulfillment.example.com/",
1947 : "EUR:1.0"),
1948 2 : TALER_TESTING_cmd_merchant_get_order3 (
1949 : "repurchase-check-secondary-payment",
1950 : merchant_url,
1951 : "post-order-repurchase-secondary",
1952 : TALER_MERCHANT_OSC_UNPAID,
1953 : "repurchase-session",
1954 : NULL,
1955 : MHD_HTTP_OK),
1956 2 : TALER_TESTING_cmd_merchant_get_order3 (
1957 : "repurchase-check-secondary-payment",
1958 : merchant_url,
1959 : "post-order-repurchase-secondary",
1960 : TALER_MERCHANT_OSC_UNPAID,
1961 : "repurchase-session",
1962 : "post-order-repurchase-original",
1963 : MHD_HTTP_OK),
1964 2 : TALER_TESTING_cmd_wallet_get_order2 (
1965 : "repurchase-wallet-check-order-secondary",
1966 : merchant_url,
1967 : "post-order-repurchase-secondary",
1968 : "repurchase-session",
1969 : false,
1970 : false,
1971 : false,
1972 : "post-order-repurchase-original",
1973 : MHD_HTTP_PAYMENT_REQUIRED),
1974 2 : TALER_TESTING_cmd_wallet_get_order2 (
1975 : "repurchase-wallet-check-order-secondary-bad-session",
1976 : merchant_url,
1977 : "post-order-repurchase-secondary",
1978 : "wrong-session",
1979 : false,
1980 : false,
1981 : false,
1982 : NULL,
1983 : MHD_HTTP_PAYMENT_REQUIRED),
1984 2 : TALER_TESTING_cmd_merchant_order_refund (
1985 : "refund-repurchased",
1986 : merchant_url,
1987 : "refund repurchase",
1988 : "repurchase-original",
1989 : "EUR:1.0",
1990 : MHD_HTTP_OK),
1991 2 : TALER_TESTING_cmd_wallet_get_order2 (
1992 : "repurchase-wallet-check-primary-order-refunded-no-session",
1993 : merchant_url,
1994 : "post-order-repurchase-original",
1995 : NULL,
1996 : true,
1997 : true,
1998 : true,
1999 : "post-order-repurchase-original",
2000 : MHD_HTTP_OK),
2001 2 : TALER_TESTING_cmd_wallet_get_order2 (
2002 : "repurchase-wallet-check-primary-order-refunded",
2003 : merchant_url,
2004 : "post-order-repurchase-original",
2005 : "repurchase-session",
2006 : true,
2007 : true,
2008 : true,
2009 : "post-order-repurchase-original",
2010 : MHD_HTTP_OK),
2011 2 : TALER_TESTING_cmd_merchant_get_order3 (
2012 : "repurchase-check-refunded",
2013 : merchant_url,
2014 : "post-order-repurchase-secondary",
2015 : TALER_MERCHANT_OSC_CLAIMED,
2016 : "repurchase-session",
2017 : NULL,
2018 : MHD_HTTP_OK),
2019 :
2020 2 : TALER_TESTING_cmd_end ()
2021 : };
2022 :
2023 : struct TALER_TESTING_Command tokens[] = {
2024 : /**
2025 : * Move money to the exchange's bank account.
2026 : */
2027 2 : cmd_transfer_to_exchange ("create-reserve-tokens",
2028 : "EUR:20.03"),
2029 : /**
2030 : * Make a reserve exist, according to the previous transfer.
2031 : */
2032 2 : cmd_exec_wirewatch ("wirewatch-1"),
2033 2 : TALER_TESTING_cmd_check_bank_admin_transfer ("check_bank_transfer-tokens",
2034 : "EUR:20.03",
2035 : payer_payto,
2036 : exchange_payto,
2037 : "create-reserve-tokens"),
2038 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-1",
2039 : "create-reserve-tokens",
2040 : "EUR:5",
2041 : 0,
2042 : MHD_HTTP_OK),
2043 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-2",
2044 : "create-reserve-tokens",
2045 : "EUR:5",
2046 : 0,
2047 : MHD_HTTP_OK),
2048 2 : TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-3",
2049 : "create-reserve-tokens",
2050 : "EUR:5",
2051 : 0,
2052 : MHD_HTTP_OK),
2053 6 : TALER_TESTING_cmd_merchant_post_tokenfamilies (
2054 : "create-upcoming-tokenfamily",
2055 : merchant_url,
2056 : MHD_HTTP_NO_CONTENT,
2057 : "subscription-upcoming",
2058 : "Upcoming Subscription",
2059 : "An upcoming subscription that is not valid yet.",
2060 : NULL,
2061 : /* In one day */
2062 : GNUNET_TIME_absolute_to_timestamp (
2063 : GNUNET_TIME_absolute_add (
2064 2 : GNUNET_TIME_timestamp_get ().abs_time,
2065 : GNUNET_TIME_UNIT_DAYS)),
2066 : /* In a year */
2067 : GNUNET_TIME_absolute_to_timestamp (
2068 : GNUNET_TIME_absolute_add (
2069 2 : GNUNET_TIME_timestamp_get ().abs_time,
2070 : GNUNET_TIME_UNIT_YEARS)),
2071 : GNUNET_TIME_UNIT_MONTHS,
2072 : GNUNET_TIME_UNIT_MONTHS,
2073 : "subscription"),
2074 2 : TALER_TESTING_cmd_merchant_post_orders_choices (
2075 : "create-order-with-upcoming-output",
2076 2 : cred.cfg,
2077 : merchant_url,
2078 : MHD_HTTP_OK,
2079 : "subscription-upcoming",
2080 : "A choice in the contract",
2081 : NULL,
2082 : 0,
2083 : 1,
2084 : "5-upcoming-output",
2085 2 : GNUNET_TIME_UNIT_ZERO_TS,
2086 2 : GNUNET_TIME_UNIT_FOREVER_TS,
2087 : "EUR:5.0"),
2088 2 : TALER_TESTING_cmd_merchant_post_tokenfamilies (
2089 : "create-tokenfamily",
2090 : merchant_url,
2091 : MHD_HTTP_NO_CONTENT,
2092 : "subscription-1",
2093 : "Subscription",
2094 : "A subscription.",
2095 : NULL,
2096 2 : GNUNET_TIME_UNIT_ZERO_TS,
2097 : GNUNET_TIME_relative_to_timestamp
2098 : (GNUNET_TIME_UNIT_YEARS),
2099 : GNUNET_TIME_UNIT_MONTHS,
2100 : GNUNET_TIME_UNIT_MONTHS,
2101 : "subscription"),
2102 2 : TALER_TESTING_cmd_merchant_post_orders_choices (
2103 : "create-order-with-output",
2104 2 : cred.cfg,
2105 : merchant_url,
2106 : MHD_HTTP_OK,
2107 : "subscription-1",
2108 : "A choice in the contract",
2109 : NULL,
2110 : 0,
2111 : 1,
2112 : "5-output",
2113 2 : GNUNET_TIME_UNIT_ZERO_TS,
2114 2 : GNUNET_TIME_UNIT_FOREVER_TS,
2115 : "EUR:5.0"),
2116 2 : TALER_TESTING_cmd_merchant_pay_order_choices (
2117 : "pay-order-with-output",
2118 : merchant_url,
2119 : MHD_HTTP_OK,
2120 : "create-order-with-output",
2121 : "withdraw-coin-1",
2122 : "EUR:5",
2123 : "EUR:4.99",
2124 : NULL,
2125 : 0,
2126 : NULL),
2127 2 : TALER_TESTING_cmd_merchant_post_orders_choices (
2128 : "create-order-with-input-and-output",
2129 2 : cred.cfg,
2130 : merchant_url,
2131 : MHD_HTTP_OK,
2132 : "subscription-1",
2133 : "A choice in the contract",
2134 : NULL,
2135 : 1,
2136 : 1,
2137 : "5-input-output",
2138 2 : GNUNET_TIME_UNIT_ZERO_TS,
2139 2 : GNUNET_TIME_UNIT_FOREVER_TS,
2140 : "EUR:0.0"),
2141 2 : TALER_TESTING_cmd_merchant_pay_order_choices (
2142 : "pay-order-with-input-and-output",
2143 : merchant_url,
2144 : MHD_HTTP_OK,
2145 : "create-order-with-input-and-output",
2146 : "",
2147 : "EUR:0",
2148 : "EUR:0",
2149 : NULL,
2150 : 0,
2151 : "pay-order-with-output"),
2152 : // TALER_TESTING_cmd_merchant_pay_order_choices ("idempotent-pay-order-with-input-and-output",
2153 : // merchant_url,
2154 : // MHD_HTTP_OK,
2155 : // "create-order-with-input-and-output",
2156 : // "",
2157 : // "EUR:0",
2158 : // "EUR:0",
2159 : // NULL,
2160 : // 0,
2161 : // "pay-order-with-output"),
2162 2 : TALER_TESTING_cmd_merchant_post_orders_choices (
2163 : "create-another-order-with-input-and-output",
2164 2 : cred.cfg,
2165 : merchant_url,
2166 : MHD_HTTP_OK,
2167 : "subscription-1",
2168 : "A choice in the contract",
2169 : NULL,
2170 : 1,
2171 : 1,
2172 : "5-input-output-2",
2173 2 : GNUNET_TIME_UNIT_ZERO_TS,
2174 2 : GNUNET_TIME_UNIT_FOREVER_TS,
2175 : "EUR:0.0"),
2176 2 : TALER_TESTING_cmd_merchant_pay_order_choices ("double-spend-token",
2177 : merchant_url,
2178 : MHD_HTTP_CONFLICT,
2179 : "create-another-order-with-input-and-output",
2180 : "",
2181 : "EUR:0",
2182 : "EUR:0",
2183 : NULL,
2184 : 0,
2185 : "pay-order-with-output"),
2186 2 : TALER_TESTING_cmd_end ()
2187 : };
2188 :
2189 : #ifdef HAVE_DONAU_DONAU_SERVICE_H
2190 : const struct DONAU_BearerToken bearer = {
2191 : .token = NULL
2192 : };
2193 :
2194 : struct TALER_TESTING_Command donau[] = {
2195 : TALER_TESTING_cmd_set_var (
2196 : "donau",
2197 : TALER_TESTING_cmd_get_donau ("get-donau",
2198 : cred.cfg,
2199 : true)),
2200 : TALER_TESTING_cmd_charity_post_merchant ("post-charity",
2201 : "example",
2202 : "example.com",
2203 : "EUR:50", // max_per_year
2204 : &bearer,
2205 : "create-another-order-with-input-and-output",
2206 : // reusing the merchant_reference for merchant_pub
2207 : MHD_HTTP_CREATED),
2208 : TALER_TESTING_cmd_charity_post_merchant ("post-charity-idempotent",
2209 : "example",
2210 : "example.com",
2211 : "EUR:50", // max_per_year
2212 : &bearer,
2213 : "create-another-order-with-input-and-output",
2214 : // reusing the merchant_reference for merchant_pub
2215 : MHD_HTTP_CREATED),
2216 : TALER_TESTING_cmd_merchant_post_donau_instance (
2217 : "post-donau-instance",
2218 : merchant_url,
2219 : "create-another-order-with-input-and-output",
2220 : MHD_HTTP_NO_CONTENT),
2221 : TALER_TESTING_cmd_merchant_post_donau_instance (
2222 : "post-donau-instance-idempotent",
2223 : merchant_url,
2224 : "create-another-order-with-input-and-output",
2225 : MHD_HTTP_NO_CONTENT),
2226 : TALER_TESTING_cmd_merchant_get_donau_instances (
2227 : "get-donau-instances-after-insert",
2228 : merchant_url,
2229 : 1,
2230 : MHD_HTTP_OK),
2231 : TALER_TESTING_cmd_sleep (
2232 : "In this time donaukeyupdate must fetch the keys from the donau",
2233 : 1),
2234 : TALER_TESTING_cmd_merchant_get_donau_instances (
2235 : "get-donau-instance",
2236 : merchant_url,
2237 : 1,
2238 : MHD_HTTP_OK),
2239 : TALER_TESTING_cmd_merchant_post_orders_donau (
2240 : "create-donau-order",
2241 : cred.cfg,
2242 : merchant_url,
2243 : MHD_HTTP_OK,
2244 : "donau",
2245 : GNUNET_TIME_UNIT_ZERO_TS,
2246 : GNUNET_TIME_UNIT_FOREVER_TS,
2247 : "EUR:1"),
2248 : TALER_TESTING_cmd_merchant_pay_order_donau (
2249 : "pay-donau-order",
2250 : merchant_url,
2251 : MHD_HTTP_OK,
2252 : "create-donau-order",
2253 : "withdraw-coin-3",
2254 : "EUR:1", /* full amount */
2255 : "EUR:0.99", /* amount without fees */
2256 : "EUR:1", /* donation amount */
2257 : NULL,
2258 : 0,
2259 : "post-charity",
2260 : 2025,
2261 : "7560001010000",
2262 : "1234"
2263 : ),
2264 : TALER_TESTING_cmd_merchant_delete_donau_instance (
2265 : "delete-donau-instance",
2266 : merchant_url,
2267 : 1,
2268 : MHD_HTTP_NO_CONTENT),
2269 : TALER_TESTING_cmd_merchant_get_donau_instances (
2270 : "get-donau-instances-after-delete",
2271 : merchant_url,
2272 : 0,
2273 : MHD_HTTP_OK),
2274 : TALER_TESTING_cmd_end ()
2275 : };
2276 : #endif
2277 :
2278 : struct TALER_TESTING_Command commands[] = {
2279 : /* general setup */
2280 2 : TALER_TESTING_cmd_run_fakebank (
2281 : "run-fakebank",
2282 2 : cred.cfg,
2283 : "exchange-account-exchange"),
2284 : #ifdef HAVE_DONAU_DONAU_SERVICE_H
2285 : TALER_TESTING_cmd_system_start (
2286 : "start-taler",
2287 : config_file,
2288 : "-emaDZ",
2289 : "-u", "exchange-account-exchange",
2290 : "-r", "merchant-exchange-test",
2291 : NULL),
2292 : #else
2293 2 : TALER_TESTING_cmd_system_start (
2294 : "start-taler",
2295 : config_file,
2296 : "-ema",
2297 : "-u", "exchange-account-exchange",
2298 : "-r", "merchant-exchange-test",
2299 : NULL),
2300 : #endif
2301 2 : TALER_TESTING_cmd_get_exchange (
2302 : "get-exchange",
2303 2 : cred.cfg,
2304 : NULL,
2305 : true,
2306 : true),
2307 2 : TALER_TESTING_cmd_batch (
2308 : "orders-id",
2309 : get_private_order_id),
2310 2 : TALER_TESTING_cmd_config (
2311 : "config",
2312 : merchant_url,
2313 : MHD_HTTP_OK),
2314 2 : TALER_TESTING_cmd_merchant_get_instances (
2315 : "instances-empty",
2316 : merchant_url,
2317 : MHD_HTTP_OK,
2318 : NULL),
2319 2 : TALER_TESTING_cmd_merchant_post_instances (
2320 : "instance-create-default-setup",
2321 : merchant_url,
2322 : "admin",
2323 : MHD_HTTP_NO_CONTENT),
2324 2 : TALER_TESTING_cmd_merchant_post_account (
2325 : "instance-create-default-account",
2326 : merchant_url,
2327 : merchant_payto,
2328 : NULL, NULL,
2329 : MHD_HTTP_OK),
2330 2 : TALER_TESTING_cmd_merchant_post_instances (
2331 : "instance-create-i1",
2332 : merchant_url,
2333 : "i1",
2334 : MHD_HTTP_NO_CONTENT),
2335 2 : TALER_TESTING_cmd_merchant_get_instances (
2336 : "instances-get-i1",
2337 : merchant_url,
2338 : MHD_HTTP_OK,
2339 : "instance-create-i1",
2340 : "instance-create-default-setup",
2341 : NULL),
2342 2 : TALER_TESTING_cmd_merchant_get_instance (
2343 : "instances-get-i1",
2344 : merchant_url,
2345 : "i1",
2346 : MHD_HTTP_OK,
2347 : "instance-create-i1"),
2348 4 : TALER_TESTING_cmd_merchant_patch_instance (
2349 : "instance-patch-i1",
2350 : merchant_url,
2351 : "i1",
2352 : "bob-the-merchant",
2353 : json_pack ("{s:s}",
2354 : "street",
2355 : "bobstreet"),
2356 : json_pack ("{s:s}",
2357 : "street",
2358 : "bobjuryst"),
2359 : true,
2360 2 : GNUNET_TIME_UNIT_ZERO, /* wire transfer */
2361 : GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS,
2362 : 2), /* small pay delay */
2363 : MHD_HTTP_NO_CONTENT),
2364 2 : TALER_TESTING_cmd_merchant_get_instance (
2365 : "instances-get-i1-2",
2366 : merchant_url,
2367 : "i1",
2368 : MHD_HTTP_OK,
2369 : "instance-patch-i1"),
2370 2 : TALER_TESTING_cmd_merchant_get_instance (
2371 : "instances-get-i2-nx",
2372 : merchant_url,
2373 : "i2",
2374 : MHD_HTTP_NOT_FOUND,
2375 : NULL),
2376 4 : TALER_TESTING_cmd_merchant_post_instances2 (
2377 : "instance-create-ACL",
2378 : merchant_url,
2379 : "i-acl",
2380 : "controlled instance",
2381 : json_pack ("{s:s}", "city",
2382 : "shopcity"),
2383 : json_pack ("{s:s}", "city",
2384 : "lawyercity"),
2385 : true,
2386 2 : GNUNET_TIME_UNIT_ZERO, /* wire transfer */
2387 : GNUNET_TIME_UNIT_SECONDS, /* pay delay */
2388 : // FIXME: change this back once
2389 : // we have a update auth test CMD
2390 : // RFC_8959_PREFIX "EXAMPLE",
2391 : NULL,
2392 : MHD_HTTP_NO_CONTENT),
2393 4 : TALER_TESTING_cmd_merchant_patch_instance (
2394 : "instance-patch-ACL",
2395 : merchant_url,
2396 : "i-acl",
2397 : "controlled instance",
2398 : json_pack ("{s:s}",
2399 : "street",
2400 : "bobstreet"),
2401 : json_pack ("{s:s}",
2402 : "street",
2403 : "bobjuryst"),
2404 : true,
2405 2 : GNUNET_TIME_UNIT_ZERO, /* wire transfer */
2406 : GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS,
2407 : 2), /* small pay delay */
2408 : MHD_HTTP_NO_CONTENT),
2409 2 : TALER_TESTING_cmd_merchant_post_instances (
2410 : "instance-create-i2",
2411 : merchant_url,
2412 : "i2",
2413 : MHD_HTTP_NO_CONTENT),
2414 2 : TALER_TESTING_cmd_merchant_post_instances (
2415 : "instance-create-i2-idem",
2416 : merchant_url,
2417 : "i2",
2418 : MHD_HTTP_NO_CONTENT),
2419 2 : TALER_TESTING_cmd_merchant_delete_instance (
2420 : "instance-delete-i2",
2421 : merchant_url,
2422 : "i2",
2423 : MHD_HTTP_NO_CONTENT),
2424 2 : TALER_TESTING_cmd_merchant_get_instance (
2425 : "instances-get-i2-post-deletion",
2426 : merchant_url,
2427 : "i2",
2428 : MHD_HTTP_NOT_FOUND,
2429 : NULL),
2430 2 : TALER_TESTING_cmd_merchant_purge_instance (
2431 : "instance-delete-then-purge-i2",
2432 : merchant_url,
2433 : "i2",
2434 : MHD_HTTP_NO_CONTENT),
2435 2 : TALER_TESTING_cmd_merchant_purge_instance (
2436 : "instance-purge-i1",
2437 : merchant_url,
2438 : "i1",
2439 : MHD_HTTP_NO_CONTENT),
2440 2 : TALER_TESTING_cmd_merchant_delete_instance (
2441 : "instance-purge-then-delete-i1",
2442 : merchant_url,
2443 : "i1",
2444 : MHD_HTTP_NOT_FOUND),
2445 2 : TALER_TESTING_cmd_merchant_purge_instance (
2446 : "instance-purge-i-acl-middle",
2447 : merchant_url,
2448 : "i-acl",
2449 : MHD_HTTP_NO_CONTENT),
2450 2 : TALER_TESTING_cmd_merchant_purge_instance (
2451 : "instance-purge-default-middle",
2452 : merchant_url,
2453 : "admin",
2454 : MHD_HTTP_NO_CONTENT),
2455 2 : TALER_TESTING_cmd_merchant_post_instances (
2456 : "instance-create-default-after-purge",
2457 : merchant_url,
2458 : "admin",
2459 : MHD_HTTP_NO_CONTENT),
2460 2 : TALER_TESTING_cmd_merchant_post_account (
2461 : "instance-create-default-account-after-purge",
2462 : merchant_url,
2463 : merchant_payto,
2464 : NULL, NULL,
2465 : MHD_HTTP_OK),
2466 2 : TALER_TESTING_cmd_merchant_get_products (
2467 : "get-products-empty",
2468 : merchant_url,
2469 : MHD_HTTP_OK,
2470 : NULL),
2471 2 : TALER_TESTING_cmd_merchant_post_products (
2472 : "post-products-p1",
2473 : merchant_url,
2474 : "product-1",
2475 : "a product",
2476 : "EUR:1",
2477 : MHD_HTTP_NO_CONTENT),
2478 2 : TALER_TESTING_cmd_merchant_post_products (
2479 : "post-products-p1-idem",
2480 : merchant_url,
2481 : "product-1",
2482 : "a product",
2483 : "EUR:1",
2484 : MHD_HTTP_NO_CONTENT),
2485 2 : TALER_TESTING_cmd_merchant_post_products (
2486 : "post-products-p1-non-idem",
2487 : merchant_url,
2488 : "product-1",
2489 : "a different product",
2490 : "EUR:1",
2491 : MHD_HTTP_CONFLICT),
2492 2 : TALER_TESTING_cmd_merchant_get_products (
2493 : "get-products-p1",
2494 : merchant_url,
2495 : MHD_HTTP_OK,
2496 : "post-products-p1",
2497 : NULL),
2498 2 : TALER_TESTING_cmd_merchant_get_product (
2499 : "get-product-p1",
2500 : merchant_url,
2501 : "product-1",
2502 : MHD_HTTP_OK,
2503 : "post-products-p1"),
2504 2 : TALER_TESTING_cmd_merchant_post_products2 (
2505 : "post-products-img",
2506 : merchant_url,
2507 : "product-img",
2508 : "product with image",
2509 : json_pack ("{s:s}", "en", "product with image"),
2510 : "test-unit",
2511 : "EUR:1",
2512 : "data:image/jpeg;base64,RAWDATA",
2513 : json_array (),
2514 : 4,
2515 : 0,
2516 : json_pack ("{s:s}", "street", "my street"),
2517 2 : GNUNET_TIME_UNIT_ZERO_TS,
2518 : MHD_HTTP_NO_CONTENT),
2519 2 : TALER_TESTING_cmd_get_product_image (
2520 : "get-product-image-img",
2521 : merchant_url,
2522 : "post-products-img",
2523 : "5831ca012639a29df949c3b1e5cd436bac0a5b26a5340ccd95df394b7a8742d6",
2524 : MHD_HTTP_OK),
2525 2 : TALER_TESTING_cmd_get_product_image (
2526 : "get-product-image-invalid",
2527 : merchant_url,
2528 : NULL,
2529 : "not-a-valid-hash",
2530 : MHD_HTTP_BAD_REQUEST),
2531 2 : TALER_TESTING_cmd_get_product_image (
2532 : "get-product-image-empty",
2533 : merchant_url,
2534 : NULL,
2535 : "",
2536 : MHD_HTTP_BAD_REQUEST),
2537 2 : TALER_TESTING_cmd_get_product_image (
2538 : "get-product-image-not-found",
2539 : merchant_url,
2540 : NULL,
2541 : "5831ca012639a29df949c3b1e5cd436bac0a5b26a5340ccd95df394b7a8742d7",
2542 : MHD_HTTP_NOT_FOUND),
2543 2 : TALER_TESTING_cmd_merchant_post_products (
2544 : "post-products-p2",
2545 : merchant_url,
2546 : "product-2",
2547 : "a product",
2548 : "EUR:1",
2549 : MHD_HTTP_NO_CONTENT),
2550 2 : TALER_TESTING_cmd_merchant_patch_product (
2551 : "patch-products-p2",
2552 : merchant_url,
2553 : "product-2",
2554 : "another product",
2555 : json_pack ("{s:s}", "en", "text"),
2556 : "kg",
2557 : "EUR:1",
2558 : "data:image/jpeg;base64,RAWDATA",
2559 : json_array (),
2560 : 40,
2561 : 0,
2562 : json_pack ("{s:s}",
2563 : "street",
2564 : "pstreet"),
2565 : GNUNET_TIME_relative_to_timestamp (
2566 : GNUNET_TIME_UNIT_MINUTES),
2567 : MHD_HTTP_NO_CONTENT),
2568 2 : TALER_TESTING_cmd_merchant_get_product (
2569 : "get-product-p2",
2570 : merchant_url,
2571 : "product-2",
2572 : MHD_HTTP_OK,
2573 : "patch-products-p2"),
2574 2 : TALER_TESTING_cmd_merchant_get_product (
2575 : "get-product-nx",
2576 : merchant_url,
2577 : "product-nx",
2578 : MHD_HTTP_NOT_FOUND,
2579 : NULL),
2580 2 : TALER_TESTING_cmd_merchant_patch_product (
2581 : "patch-products-p3-nx",
2582 : merchant_url,
2583 : "product-3",
2584 : "nx updated product",
2585 : json_pack ("{s:s}", "en", "text"),
2586 : "kg",
2587 : "EUR:1",
2588 : "data:image/jpeg;base64,RAWDATA",
2589 : json_array (),
2590 : 40,
2591 : 0,
2592 : json_pack ("{s:s}",
2593 : "street",
2594 : "pstreet"),
2595 : GNUNET_TIME_relative_to_timestamp (
2596 : GNUNET_TIME_UNIT_MINUTES),
2597 : MHD_HTTP_NOT_FOUND),
2598 2 : TALER_TESTING_cmd_merchant_delete_product (
2599 : "get-products-empty",
2600 : merchant_url,
2601 : "p1",
2602 : MHD_HTTP_NOT_FOUND),
2603 2 : TALER_TESTING_cmd_merchant_delete_product (
2604 : "get-products-empty",
2605 : merchant_url,
2606 : "product-1",
2607 : MHD_HTTP_NO_CONTENT),
2608 2 : TALER_TESTING_cmd_merchant_lock_product (
2609 : "lock-product-p2",
2610 : merchant_url,
2611 : "product-2",
2612 : GNUNET_TIME_UNIT_MINUTES,
2613 : 2,
2614 : MHD_HTTP_NO_CONTENT),
2615 2 : TALER_TESTING_cmd_merchant_lock_product (
2616 : "lock-product-nx",
2617 : merchant_url,
2618 : "product-nx",
2619 : GNUNET_TIME_UNIT_MINUTES,
2620 : 2,
2621 : MHD_HTTP_NOT_FOUND),
2622 2 : TALER_TESTING_cmd_merchant_lock_product (
2623 : "lock-product-too-much",
2624 : merchant_url,
2625 : "product-2",
2626 : GNUNET_TIME_UNIT_MINUTES,
2627 : 39,
2628 : MHD_HTTP_GONE),
2629 2 : TALER_TESTING_cmd_merchant_delete_product (
2630 : "delete-product-locked",
2631 : merchant_url,
2632 : "product-2",
2633 : MHD_HTTP_CONFLICT),
2634 2 : TALER_TESTING_cmd_batch ("pay",
2635 : pay),
2636 2 : TALER_TESTING_cmd_batch ("double-spending",
2637 : double_spending),
2638 2 : TALER_TESTING_cmd_batch ("pay-again",
2639 : pay_again),
2640 2 : TALER_TESTING_cmd_batch ("pay-abort",
2641 : pay_abort),
2642 2 : TALER_TESTING_cmd_batch ("refund",
2643 : refund),
2644 2 : TALER_TESTING_cmd_batch ("templates",
2645 : templates),
2646 2 : TALER_TESTING_cmd_batch ("webhooks",
2647 : webhooks),
2648 2 : TALER_TESTING_cmd_batch ("auth",
2649 : auth),
2650 2 : TALER_TESTING_cmd_batch ("repurchase",
2651 : repurchase),
2652 2 : TALER_TESTING_cmd_batch ("tokens",
2653 : tokens),
2654 :
2655 : #ifdef HAVE_DONAU_DONAU_SERVICE_H
2656 : TALER_TESTING_cmd_batch ("donau",
2657 : donau),
2658 : #endif
2659 :
2660 2 : TALER_TESTING_cmd_merchant_get_statisticsamount ("stats-refund",
2661 : merchant_url,
2662 : "refunds-granted", 6, 0,
2663 : MHD_HTTP_OK),
2664 2 : TALER_TESTING_cmd_merchant_get_statisticscounter ("stats-tokens-issued",
2665 : merchant_url,
2666 : "tokens-issued", 6, 0,
2667 : MHD_HTTP_OK),
2668 2 : TALER_TESTING_cmd_merchant_get_statisticscounter ("stats-tokens-used",
2669 : merchant_url,
2670 : "tokens-used", 6, 0,
2671 : MHD_HTTP_OK),
2672 :
2673 : /**
2674 : * End the suite.
2675 : */
2676 2 : TALER_TESTING_cmd_end ()
2677 : };
2678 :
2679 2 : TALER_TESTING_run (is,
2680 : commands);
2681 2 : }
2682 :
2683 :
2684 : int
2685 2 : main (int argc,
2686 : char *const *argv)
2687 : {
2688 : {
2689 : char *cipher;
2690 :
2691 2 : cipher = GNUNET_STRINGS_get_suffix_from_binary_name (argv[0]);
2692 2 : GNUNET_assert (NULL != cipher);
2693 2 : GNUNET_asprintf (&config_file,
2694 : "test_merchant_api-%s.conf",
2695 : cipher);
2696 2 : GNUNET_free (cipher);
2697 : }
2698 2 : payer_payto.full_payto =
2699 : (char *) "payto://x-taler-bank/localhost/" USER_ACCOUNT_NAME
2700 : "?receiver-name=" USER_ACCOUNT_NAME;
2701 2 : exchange_payto.full_payto =
2702 : (char *) "payto://x-taler-bank/localhost/" EXCHANGE_ACCOUNT_NAME
2703 : "?receiver-name="
2704 : EXCHANGE_ACCOUNT_NAME;
2705 2 : merchant_payto.full_payto =
2706 : (char *) "payto://x-taler-bank/localhost/" MERCHANT_ACCOUNT_NAME
2707 : "?receiver-name=" MERCHANT_ACCOUNT_NAME;
2708 2 : merchant_url = "http://localhost:8080/";
2709 2 : GNUNET_asprintf (&merchant_url_i1a,
2710 : "%sinstances/i1a/",
2711 : merchant_url);
2712 2 : return TALER_TESTING_main (argv,
2713 : "INFO",
2714 : config_file,
2715 : "exchange-account-exchange",
2716 : TALER_TESTING_BS_FAKEBANK,
2717 : &cred,
2718 : &run,
2719 : NULL);
2720 : }
2721 :
2722 :
2723 : /* end of test_merchant_api.c */
|