From 4741f4ea02148ed1dede88affd83edd9a96e2680 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 20 May 2021 12:31:27 +0200 Subject: implement duplicate reserve_pub detection in fakebank, add test (fails in pybank), for #6863 --- src/testing/test_bank_api.c | 5 +++ src/testing/test_exchange_api.c | 18 +------- .../testing_api_cmd_bank_admin_add_incoming.c | 51 ++++++++++++---------- 3 files changed, 35 insertions(+), 39 deletions(-) (limited to 'src/testing') diff --git a/src/testing/test_bank_api.c b/src/testing/test_bank_api.c index 7069e44f9..98f97cd44 100644 --- a/src/testing/test_bank_api.c +++ b/src/testing/test_bank_api.c @@ -87,6 +87,11 @@ run (void *cls, "KUDOS:5.01", &bc.exchange_auth, bc.user42_payto), + TALER_TESTING_cmd_admin_add_incoming_with_ref ("credit-1-fail", + "KUDOS:2.01", + &bc.exchange_auth, + bc.user42_payto, + "credit-1"), TALER_TESTING_cmd_sleep ("Waiting 4s for 'credit-1' to settle", 4), TALER_TESTING_cmd_bank_credits ("history-1c", diff --git a/src/testing/test_exchange_api.c b/src/testing/test_exchange_api.c index 18f7237b6..008eefb20 100644 --- a/src/testing/test_exchange_api.c +++ b/src/testing/test_exchange_api.c @@ -121,9 +121,9 @@ run (void *cls, * Move money to the exchange's bank account. */ CMD_TRANSFER_TO_EXCHANGE ("create-reserve-1", - "EUR:4.01"), + "EUR:6.02"), TALER_TESTING_cmd_check_bank_admin_transfer ("check-create-reserve-1", - "EUR:4.01", + "EUR:6.02", bc.user42_payto, bc.exchange_payto, "create-reserve-1"), @@ -132,20 +132,6 @@ run (void *cls, * transfer. */ CMD_EXEC_WIREWATCH ("wirewatch-1"), - /** - * Do another transfer to the same reserve - */ - TALER_TESTING_cmd_admin_add_incoming_with_ref ("create-reserve-1.2", - "EUR:2.01", - &bc.exchange_auth, - bc.user42_payto, - "create-reserve-1"), - TALER_TESTING_cmd_check_bank_admin_transfer ("check-create-reserve-1.2", - "EUR:2.01", - bc.user42_payto, - bc.exchange_payto, - "create-reserve-1.2"), - CMD_EXEC_WIREWATCH ("wirewatch-1.2"), /** * Withdraw EUR:5. */ diff --git a/src/testing/testing_api_cmd_bank_admin_add_incoming.c b/src/testing/testing_api_cmd_bank_admin_add_incoming.c index e467063aa..aaa447fec 100644 --- a/src/testing/testing_api_cmd_bank_admin_add_incoming.c +++ b/src/testing/testing_api_cmd_bank_admin_add_incoming.c @@ -148,6 +148,11 @@ struct AdminAddIncomingState * enable retries? If so, how often should we still retry? */ unsigned int do_retry; + + /** + * Expected HTTP status code. + */ + unsigned int expected_http_status; }; @@ -215,6 +220,13 @@ confirmation_cb (void *cls, switch (http_status) { case MHD_HTTP_OK: + if (fts->expected_http_status != + MHD_HTTP_OK) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (is); + return; + } fts->serial_id = serial_id; fts->timestamp = timestamp; TALER_TESTING_interpreter_next (is); @@ -233,6 +245,16 @@ confirmation_cb (void *cls, break; } break; + case MHD_HTTP_CONFLICT: + if (fts->expected_http_status != + MHD_HTTP_CONFLICT) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (is); + return; + } + TALER_TESTING_interpreter_next (is); + return; default: if (0 != fts->do_retry) { @@ -405,6 +427,10 @@ admin_add_incoming_traits (void *cls, unsigned int index) { struct AdminAddIncomingState *fts = cls; + + if (MHD_HTTP_OK != + fts->expected_http_status) + return GNUNET_NO; /* requests that failed generate no history */ if (fts->reserve_priv_known) { struct TALER_TESTING_Trait traits[] = { @@ -479,6 +505,7 @@ make_fts (const char *amount, fts->exchange_credit_url = auth->wire_gateway_url; fts->payto_debit_account = payto_debit_account; fts->auth = *auth; + fts->expected_http_status = MHD_HTTP_OK; if (GNUNET_OK != TALER_string_to_amount (amount, &fts->amount)) @@ -515,15 +542,6 @@ make_command (const char *label, } -/** - * Create admin/add-incoming command. - * - * @param label command label. - * @param amount amount to transfer. - * @param payto_debit_account which account sends money. - * @param auth authentication data - * @return the command. - */ struct TALER_TESTING_Command TALER_TESTING_cmd_admin_add_incoming (const char *label, const char *amount, @@ -538,20 +556,6 @@ TALER_TESTING_cmd_admin_add_incoming (const char *label, } -/** - * Create "/admin/add-incoming" CMD, letting the caller specify - * a reference to a command that can offer a reserve private key. - * This private key will then be used to construct the subject line - * of the wire transfer. - * - * @param label command label. - * @param amount the amount to transfer. - * @param payto_debit_account which account sends money - * @param auth authentication data - * @param ref reference to a command that can offer a reserve - * private key or public key. - * @return the command. - */ struct TALER_TESTING_Command TALER_TESTING_cmd_admin_add_incoming_with_ref (const char *label, @@ -566,6 +570,7 @@ TALER_TESTING_cmd_admin_add_incoming_with_ref auth, payto_debit_account); fts->reserve_reference = ref; + fts->expected_http_status = MHD_HTTP_CONFLICT; return make_command (label, fts); } -- cgit v1.2.3