diff options
Diffstat (limited to 'src/testing')
34 files changed, 994 insertions, 1659 deletions
diff --git a/src/testing/.gitignore b/src/testing/.gitignore index a6eb294..9ac5ba4 100644 --- a/src/testing/.gitignore +++ b/src/testing/.gitignore @@ -1,3 +1,6 @@ test_anastasis test_anastasisrest_api -test_anastasis_api_home/.local/share/taler/crypto-* +test_anastasis_api_home/taler/exchange-secmod-* +test_anastasis_api_home/taler/auditor/ +test_anastasis_api_home/taler/exchange/offline-keys/secm_tofus.pub +test_anastasis_api.conf.edited diff --git a/src/testing/Makefile.am b/src/testing/Makefile.am index 8fc710b..22162d3 100644 --- a/src/testing/Makefile.am +++ b/src/testing/Makefile.am @@ -14,29 +14,18 @@ libanastasistesting_la_LDFLAGS = \ -no-undefined libanastasistesting_la_SOURCES = \ testing_api_cmd_policy_store.c \ + testing_api_cmd_truth_challenge.c \ + testing_api_cmd_truth_solve.c \ testing_api_cmd_truth_store.c \ testing_api_cmd_policy_lookup.c \ - testing_api_cmd_keyshare_lookup.c \ testing_api_cmd_config.c \ testing_api_helpers.c \ - testing_api_trait_account_pub.c \ - testing_api_trait_account_priv.c \ - testing_api_trait_eks.c \ - testing_api_trait_payment_secret.c \ - testing_api_trait_truth_key.c \ - testing_api_trait_truth_uuid.c \ - testing_api_trait_hash.c \ - testing_api_trait_salt.c \ - testing_api_trait_code.c \ + testing_api_traits.c \ testing_cmd_truth_upload.c \ testing_cmd_policy_create.c \ testing_cmd_secret_share.c \ testing_cmd_recover_secret.c \ - testing_cmd_challenge_answer.c \ - testing_trait_truth.c \ - testing_trait_policy.c \ - testing_trait_core_secret.c \ - testing_trait_challenge.c + testing_cmd_challenge_answer.c libanastasistesting_la_LIBADD = \ $(top_builddir)/src/restclient/libanastasisrest.la \ $(top_builddir)/src/lib/libanastasis.la \ @@ -49,7 +38,6 @@ libanastasistesting_la_LIBADD = \ -lgnunetjson \ -lgnunetutil \ -ljansson \ - -luuid \ -ltalertesting \ $(XLIB) @@ -83,9 +71,8 @@ test_anastasis_LDADD = \ EXTRA_DIST = \ test_anastasis_api.conf \ - test_anastasis_api_home/.config/taler/exchange/account-2.json \ - test_anastasis_api_home/.local/share/taler/exchange/offline-keys/master.priv \ + test_anastasis_api_home/taler/exchange/offline-keys/master.priv \ sms_authentication.sh MOSTLYCLEANFILES = \ - test_anastasis_api_home/.local/share/taler/exchange/offline-keys/secm_tofus.pub + test_anastasis_api_home/taler/exchange/offline-keys/secm_tofus.pub diff --git a/src/testing/test_anastasis.c b/src/testing/test_anastasis.c index f821f20..f28d9a9 100644 --- a/src/testing/test_anastasis.c +++ b/src/testing/test_anastasis.c @@ -1,16 +1,16 @@ /* This file is part of Anastasis - Copyright (C) 2020, 2021 Anastasis SARL + Copyright (C) 2020-2023 Anastasis SARL Anastasis is free software; you can redistribute it and/or modify it under the - terms of the GNU Lesser General Public License as published by the Free Software + terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with + You should have received a copy of the GNU General Public License along with Anastasis; see the file COPYING.GPL. If not, see <http://www.gnu.org/licenses/> */ /** @@ -52,34 +52,29 @@ #define MERCHANT_ACCOUNT_NAME "3" /** - * Configuration of the bank. + * Credentials for the test. */ -static struct TALER_TESTING_BankConfiguration bc; - -/** - * Configuration of the exchange. - */ -static struct TALER_TESTING_ExchangeConfiguration ec; +static struct TALER_TESTING_Credentials cred; /** * Payto URI of the customer (payer). */ -static char *payer_payto; +static const char *payer_payto; /** * Payto URI of the exchange (escrow account). */ -static char *exchange_payto; +static const char *exchange_payto; /** * Payto URI of the merchant (receiver). */ -static char *merchant_payto; +static const char *merchant_payto; /** * Merchant base URL. */ -static char *merchant_url; +static const char *merchant_url; /** * Anastasis base URL. @@ -92,11 +87,6 @@ static char *anastasis_url; static char *file_secret; /** - * Merchant process. - */ -static struct GNUNET_OS_Process *merchantd; - -/** * Anastasis process. */ static struct GNUNET_OS_Process *anastasisd; @@ -135,7 +125,7 @@ cmd_transfer_to_exchange (const char *label, { return TALER_TESTING_cmd_admin_add_incoming (label, amount, - &bc.exchange_auth, + &cred.ba, payer_payto); } @@ -164,10 +154,12 @@ run (void *cls, TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-1", "create-reserve-1", "EUR:5", + 0, /* age */ MHD_HTTP_OK), TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-2", "create-reserve-1", "EUR:5", + 0, /* age */ MHD_HTTP_OK), /** * Check the reserve is depleted. @@ -278,7 +270,7 @@ run (void *cls, 0, /* challenge index */ "SomeTruth1", 0, /* mode */ - ANASTASIS_CHALLENGE_STATUS_SOLVED), + ANASTASIS_CHALLENGE_ANSWER_STATUS_SOLVED), #if 0 ANASTASIS_TESTING_cmd_challenge_answer ("challenge-answer-2", NULL, /* payment ref */ @@ -286,13 +278,13 @@ run (void *cls, 1, /* challenge index */ "SomeTruth2", 0, /* mode */ - ANASTASIS_CHALLENGE_STATUS_SOLVED), + ANASTASIS_CHALLENGE_ANSWER_STATUS_SOLVED), #endif ANASTASIS_TESTING_cmd_challenge_start ("challenge-start-3-pay", NULL, /* payment ref */ "recover-secret-1", 2, /* challenge index */ - ANASTASIS_CHALLENGE_STATUS_PAYMENT_REQUIRED), + ANASTASIS_CHALLENGE_START_STATUS_PAYMENT_REQUIRED), TALER_TESTING_cmd_merchant_claim_order ("fetch-challenge-pay-proposal", merchant_url, MHD_HTTP_OK, @@ -310,14 +302,14 @@ run (void *cls, "challenge-start-3-pay", /* payment ref */ "recover-secret-1", 2, /* challenge index */ - ANASTASIS_CHALLENGE_STATUS_INSTRUCTIONS), + ANASTASIS_CHALLENGE_START_STATUS_FILENAME_PROVIDED), ANASTASIS_TESTING_cmd_challenge_answer ("challenge-answer-3", "challenge-start-3-pay", /* payment ref */ "recover-secret-1", 2, /* challenge index */ "challenge-start-3-paid", /* answer */ 1, /* mode */ - ANASTASIS_CHALLENGE_STATUS_SOLVED), + ANASTASIS_CHALLENGE_ANSWER_STATUS_SOLVED), ANASTASIS_TESTING_cmd_recover_secret_finish ("recover-finish-1", "recover-secret-1", GNUNET_TIME_UNIT_SECONDS), @@ -326,27 +318,29 @@ run (void *cls, struct TALER_TESTING_Command commands[] = { /* general setup */ - TALER_TESTING_cmd_auditor_add ("add-auditor-OK", - MHD_HTTP_NO_CONTENT, - false), - TALER_TESTING_cmd_wire_add ("add-wire-account", - "payto://x-taler-bank/localhost/2", - MHD_HTTP_NO_CONTENT, - false), - TALER_TESTING_cmd_exec_offline_sign_keys ("offline-sign-future-keys", - CONFIG_FILE), - TALER_TESTING_cmd_exec_offline_sign_fees ("offline-sign-fees", - CONFIG_FILE, - "EUR:0.01", - "EUR:0.01"), - TALER_TESTING_cmd_check_keys_pull_all_keys ("refetch /keys", - 1), + TALER_TESTING_cmd_run_fakebank ("run-fakebank", + cred.cfg, + "exchange-account-exchange"), + TALER_TESTING_cmd_system_start ("start-taler", + CONFIG_FILE, + "-em", + "-u", "exchange-account-exchange", + NULL), + TALER_TESTING_cmd_get_exchange ("get-exchange", + cred.cfg, + NULL, + true, + true), TALER_TESTING_cmd_merchant_post_instances ("instance-create-default", merchant_url, "default", - merchant_payto, - "EUR", MHD_HTTP_NO_CONTENT), + TALER_TESTING_cmd_merchant_post_account ( + "instance-create-default-account", + merchant_url, + merchant_payto, + NULL, NULL, + MHD_HTTP_OK), TALER_TESTING_cmd_batch ("pay", pay), TALER_TESTING_cmd_batch ("anastasis", @@ -354,9 +348,8 @@ run (void *cls, TALER_TESTING_cmd_end () }; - TALER_TESTING_run_with_fakebank (is, - commands, - bc.exchange_auth.wire_gateway_url); + TALER_TESTING_run (is, + commands); } @@ -364,19 +357,7 @@ int main (int argc, char *const *argv) { - unsigned int ret; - /* These environment variables get in the way... */ - unsetenv ("XDG_DATA_HOME"); - unsetenv ("XDG_CONFIG_HOME"); - - GNUNET_log_setup ("test-anastasis", - "DEBUG", - NULL); - if (GNUNET_OK != - TALER_TESTING_prepare_fakebank (CONFIG_FILE, - "exchange-account-exchange", - &bc)) - return 77; + int ret; { char dir[] = "/tmp/test-anastasis-file-XXXXXX"; @@ -391,73 +372,42 @@ main (int argc, "%s/.secret", dir); } - id_data = ANASTASIS_TESTING_make_id_data_example ( - "MaxMuster123456789"); - payer_payto = ("payto://x-taler-bank/localhost/" USER_ACCOUNT_NAME); - exchange_payto = ("payto://x-taler-bank/localhost/" EXCHANGE_ACCOUNT_NAME); - merchant_payto = ("payto://x-taler-bank/localhost/" MERCHANT_ACCOUNT_NAME); - if (NULL == - (merchant_url = TALER_TESTING_prepare_merchant (CONFIG_FILE))) - return 77; - TALER_TESTING_cleanup_files (CONFIG_FILE); + id_data = ANASTASIS_TESTING_make_id_data_example ("MaxMuster123456789"); + payer_payto = + "payto://x-taler-bank/localhost/" USER_ACCOUNT_NAME + "?receiver-name=62"; + exchange_payto = + "payto://x-taler-bank/localhost/" EXCHANGE_ACCOUNT_NAME + "?receiver-name=exchange"; + merchant_payto = + "payto://x-taler-bank/localhost/" MERCHANT_ACCOUNT_NAME + "?receiver-name=merchant"; + merchant_url = "http://localhost:8080/"; if (NULL == (anastasis_url = ANASTASIS_TESTING_prepare_anastasis (CONFIG_FILE))) return 77; - TALER_TESTING_cleanup_files (CONFIG_FILE); - - switch (TALER_TESTING_prepare_exchange (CONFIG_FILE, - GNUNET_YES, - &ec)) + if (NULL == (anastasisd = + ANASTASIS_TESTING_run_anastasis (CONFIG_FILE, + anastasis_url))) { - case GNUNET_SYSERR: - GNUNET_break (0); - return 1; - case GNUNET_NO: - return 77; - case GNUNET_OK: - if (NULL == (merchantd = - TALER_TESTING_run_merchant (CONFIG_FILE, - merchant_url))) - { - GNUNET_break (0); - return 1; - } - if (NULL == (anastasisd = - ANASTASIS_TESTING_run_anastasis (CONFIG_FILE, - anastasis_url))) - { - GNUNET_break (0); - GNUNET_OS_process_kill (merchantd, - SIGTERM); - GNUNET_OS_process_wait (merchantd); - GNUNET_OS_process_destroy (merchantd); - - return 1; - } - ret = TALER_TESTING_setup_with_exchange (&run, - NULL, - CONFIG_FILE); - - GNUNET_OS_process_kill (merchantd, - SIGTERM); - GNUNET_OS_process_kill (anastasisd, - SIGTERM); - GNUNET_OS_process_wait (merchantd); - GNUNET_OS_process_wait (anastasisd); - GNUNET_OS_process_destroy (merchantd); - GNUNET_OS_process_destroy (anastasisd); - GNUNET_free (merchant_url); - GNUNET_free (anastasis_url); - - if (GNUNET_OK != ret) - return 1; - break; - default: GNUNET_break (0); return 1; } - return 0; + ret = TALER_TESTING_main (argv, + "INFO", + CONFIG_FILE, + "exchange-account-exchange", + TALER_TESTING_BS_FAKEBANK, + &cred, + &run, + NULL); + GNUNET_OS_process_kill (anastasisd, + SIGTERM); + GNUNET_OS_process_wait (anastasisd); + GNUNET_OS_process_destroy (anastasisd); + GNUNET_free (anastasis_url); + return ret; } diff --git a/src/testing/test_anastasis_api.c b/src/testing/test_anastasis_api.c index 2767264..7d7e2ac 100644 --- a/src/testing/test_anastasis_api.c +++ b/src/testing/test_anastasis_api.c @@ -3,14 +3,14 @@ Copyright (C) 2020, 2021 Anastasis SARL Anastasis is free software; you can redistribute it and/or modify it under the - terms of the GNU Lesser General Public License as published by the Free Software + terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with + You should have received a copy of the GNU General Public License along with Anastasis; see the file COPYING.GPL. If not, see <http://www.gnu.org/licenses/> */ /** @@ -52,34 +52,29 @@ #define MERCHANT_ACCOUNT_NAME "3" /** - * Configuration of the bank. + * Test credentials. */ -static struct TALER_TESTING_BankConfiguration bc; - -/** - * Configuration of the exchange. - */ -static struct TALER_TESTING_ExchangeConfiguration ec; +static struct TALER_TESTING_Credentials cred; /** * Payto URI of the customer (payer). */ -static char *payer_payto; +static const char *payer_payto; /** * Payto URI of the exchange (escrow account). */ -static char *exchange_payto; +static const char *exchange_payto; /** * Payto URI of the merchant (receiver). */ -static char *merchant_payto; +static const char *merchant_payto; /** * Merchant base URL. */ -static char *merchant_url; +static const char *merchant_url; /** * Anastasis base URL. @@ -87,11 +82,6 @@ static char *merchant_url; static char *anastasis_url; /** - * Merchant process. - */ -static struct GNUNET_OS_Process *merchantd; - -/** * Anastasis process. */ static struct GNUNET_OS_Process *anastasisd; @@ -129,7 +119,7 @@ cmd_transfer_to_exchange (const char *label, { return TALER_TESTING_cmd_admin_add_incoming (label, amount, - &bc.exchange_auth, + &cred.ba, payer_payto); } @@ -150,10 +140,12 @@ run (void *cls, TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-1", "create-reserve-1", "EUR:5", + 0, /* age */ MHD_HTTP_OK), TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-2", "create-reserve-1", "EUR:5", + 0, /* age */ MHD_HTTP_OK), TALER_TESTING_cmd_status ("withdraw-status-1", "create-reserve-1", @@ -207,14 +199,14 @@ run (void *cls, "The-Answer", ANASTASIS_TESTING_TSO_NONE, MHD_HTTP_NO_CONTENT), - ANASTASIS_TESTING_cmd_keyshare_lookup ( + ANASTASIS_TESTING_cmd_truth_solve ( "keyshare-lookup-1", anastasis_url, "The-Answer", NULL, /* payment ref */ "truth-store-1", 0, - ANASTASIS_KSD_SUCCESS), + MHD_HTTP_OK), ANASTASIS_TESTING_cmd_truth_store ( "truth-store-2", anastasis_url, @@ -225,22 +217,20 @@ run (void *cls, file_secret, ANASTASIS_TESTING_TSO_NONE, MHD_HTTP_NO_CONTENT), - ANASTASIS_TESTING_cmd_keyshare_lookup ( + ANASTASIS_TESTING_cmd_truth_solve ( "challenge-fail-1", anastasis_url, "Wrong-Answer", - NULL, - "truth-store-1", - 0, - ANASTASIS_KSD_INVALID_ANSWER), - ANASTASIS_TESTING_cmd_keyshare_lookup ( + NULL, /* payment ref */ + "truth-store-1", /* upload ref */ + 0, /* security question mode */ + MHD_HTTP_FORBIDDEN), + ANASTASIS_TESTING_cmd_truth_challenge ( "file-challenge-run-1", anastasis_url, - NULL, /* no answer */ NULL, /* payment ref */ "truth-store-2", /* upload ref */ - 0, - ANASTASIS_KSD_PAYMENT_REQUIRED), + MHD_HTTP_PAYMENT_REQUIRED), /* what would we have to pay? */ TALER_TESTING_cmd_merchant_claim_order ("fetch-proposal-2", merchant_url, @@ -257,48 +247,48 @@ run (void *cls, "EUR:1", NULL), - ANASTASIS_TESTING_cmd_keyshare_lookup ( + ANASTASIS_TESTING_cmd_truth_challenge ( "file-challenge-run-2", anastasis_url, - NULL, /* no answer */ "file-challenge-run-1", /* payment ref */ "truth-store-2", - 0, - ANASTASIS_KSD_INVALID_ANSWER), - ANASTASIS_TESTING_cmd_keyshare_lookup ( + MHD_HTTP_OK), + ANASTASIS_TESTING_cmd_truth_solve ( "file-challenge-run-3", anastasis_url, "file-challenge-run-2", /* answer */ "file-challenge-run-1", /* payment ref */ "truth-store-2", 1, - ANASTASIS_KSD_SUCCESS), + MHD_HTTP_OK), TALER_TESTING_cmd_end () }; struct TALER_TESTING_Command commands[] = { /* general setup */ - TALER_TESTING_cmd_auditor_add ("add-auditor-OK", - MHD_HTTP_NO_CONTENT, - false), - TALER_TESTING_cmd_wire_add ("add-wire-account", - "payto://x-taler-bank/localhost/2", - MHD_HTTP_NO_CONTENT, - false), - TALER_TESTING_cmd_exec_offline_sign_keys ("offline-sign-future-keys", - CONFIG_FILE), - TALER_TESTING_cmd_exec_offline_sign_fees ("offline-sign-fees", - CONFIG_FILE, - "EUR:0.01", - "EUR:0.01"), - TALER_TESTING_cmd_check_keys_pull_all_keys ("refetch /keys", - 1), + TALER_TESTING_cmd_run_fakebank ("run-fakebank", + cred.cfg, + "exchange-account-exchange"), + TALER_TESTING_cmd_system_start ("start-taler", + CONFIG_FILE, + "-em", + "-u", "exchange-account-exchange", + NULL), + TALER_TESTING_cmd_get_exchange ("get-exchange", + cred.cfg, + NULL, + true, + true), TALER_TESTING_cmd_merchant_post_instances ("instance-create-default", merchant_url, "default", - merchant_payto, - "EUR", MHD_HTTP_NO_CONTENT), + TALER_TESTING_cmd_merchant_post_account ( + "instance-create-default-account", + merchant_url, + merchant_payto, + NULL, NULL, + MHD_HTTP_OK), ANASTASIS_TESTING_cmd_config ("salt-request-1", anastasis_url, MHD_HTTP_OK), @@ -311,9 +301,8 @@ run (void *cls, TALER_TESTING_cmd_end () }; - TALER_TESTING_run_with_fakebank (is, - commands, - bc.exchange_auth.wire_gateway_url); + TALER_TESTING_run (is, + commands); } @@ -323,17 +312,6 @@ main (int argc, { int ret; - /* These environment variables get in the way... */ - unsetenv ("XDG_DATA_HOME"); - unsetenv ("XDG_CONFIG_HOME"); - GNUNET_log_setup ("test-anastasis-api", - "DEBUG", - NULL); - if (GNUNET_OK != - TALER_TESTING_prepare_fakebank (CONFIG_FILE, - "exchange-account-exchange", - &bc)) - return 77; { char dir[] = "/tmp/test-anastasis-file-XXXXXX"; @@ -348,73 +326,41 @@ main (int argc, "%s/.secret", dir); } - payer_payto = ("payto://x-taler-bank/localhost/" USER_ACCOUNT_NAME); - exchange_payto = ("payto://x-taler-bank/localhost/" EXCHANGE_ACCOUNT_NAME); - merchant_payto = ("payto://x-taler-bank/localhost/" MERCHANT_ACCOUNT_NAME); - if (NULL == - (merchant_url = TALER_TESTING_prepare_merchant (CONFIG_FILE))) - return 77; - TALER_TESTING_cleanup_files (CONFIG_FILE); + payer_payto = + "payto://x-taler-bank/localhost/" USER_ACCOUNT_NAME + "?receiver-name=62"; + exchange_payto = + "payto://x-taler-bank/localhost/" EXCHANGE_ACCOUNT_NAME + "?receiver-name=exchange"; + merchant_payto = + "payto://x-taler-bank/localhost/" MERCHANT_ACCOUNT_NAME + "?receiver-name=merchant"; + merchant_url = "http://localhost:8080/"; if (NULL == (anastasis_url = ANASTASIS_TESTING_prepare_anastasis (CONFIG_FILE))) return 77; - TALER_TESTING_cleanup_files (CONFIG_FILE); - - switch (TALER_TESTING_prepare_exchange (CONFIG_FILE, - GNUNET_YES, - &ec)) + if (NULL == (anastasisd = + ANASTASIS_TESTING_run_anastasis (CONFIG_FILE, + anastasis_url))) { - case GNUNET_SYSERR: - GNUNET_break (0); - return 1; - case GNUNET_NO: - return 77; - case GNUNET_OK: - if (NULL == (merchantd = - TALER_TESTING_run_merchant (CONFIG_FILE, - merchant_url))) - { - GNUNET_break (0); - return 1; - } - if (NULL == (anastasisd = - ANASTASIS_TESTING_run_anastasis (CONFIG_FILE, - anastasis_url))) - { - GNUNET_break (0); - GNUNET_OS_process_kill (merchantd, - SIGTERM); - GNUNET_OS_process_wait (merchantd); - GNUNET_OS_process_destroy (merchantd); - return 1; - } - ret = TALER_TESTING_setup_with_exchange (&run, - NULL, - CONFIG_FILE); - GNUNET_OS_process_kill (merchantd, - SIGTERM); - GNUNET_OS_process_kill (anastasisd, - SIGTERM); - GNUNET_OS_process_wait (merchantd); - GNUNET_OS_process_wait (anastasisd); - GNUNET_OS_process_destroy (merchantd); - GNUNET_OS_process_destroy (anastasisd); - GNUNET_free (merchant_url); - GNUNET_free (anastasis_url); - - if (GNUNET_OK != ret) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Test failed in interpreter\n"); - return 1; - } - break; - default: GNUNET_break (0); return 1; } - return 0; + ret = TALER_TESTING_main (argv, + "INFO", + CONFIG_FILE, + "exchange-account-exchange", + TALER_TESTING_BS_FAKEBANK, + &cred, + &run, + NULL); + GNUNET_OS_process_kill (anastasisd, + SIGTERM); + GNUNET_OS_process_wait (anastasisd); + GNUNET_OS_process_destroy (anastasisd); + GNUNET_free (anastasis_url); + return ret; } diff --git a/src/testing/test_anastasis_api.conf b/src/testing/test_anastasis_api.conf index 8befd99..53801d4 100644 --- a/src/testing/test_anastasis_api.conf +++ b/src/testing/test_anastasis_api.conf @@ -1,231 +1,125 @@ # This file is in the public domain. # [PATHS] -# Persistent data storage for the testcase TALER_TEST_HOME = test_anastasis_api_home/ -TALER_RUNTIME_DIR = ${TMPDIR:-${TMP:-/tmp}}/${USER:-}/taler-system-runtime/ - -# Persistent data storage -TALER_DATA_HOME = $TALER_TEST_HOME/.local/share/taler/ - -# Configuration files -TALER_CONFIG_HOME = $TALER_TEST_HOME/.config/taler/ - -# Cached data, no big deal if lost -TALER_CACHE_HOME = $TALER_TEST_HOME/.cache/taler/ +TALER_HOME = ${TALER_TEST_HOME:-${HOME:-${USERPROFILE}}} +TALER_DATA_HOME = ${TALER_TEST_HOME:-${XDG_DATA_HOME:-${TALER_HOME}/.local/share/}/.local/share/}taler/ +TALER_CONFIG_HOME = ${TALER_TEST_HOME:-${XDG_CONFIG_HOME:-${TALER_HOME}/.config/}/.config/}taler/ +TALER_CACHE_HOME = ${TALER_TEST_HOME:-${XDG_CACHE_HOME:-${TALER_HOME}/.cache/}/.cache/}taler/ +TALER_RUNTIME_DIR = ${TMPDIR:-${TMP:-/tmp}}/taler-system-runtime/ [taler] -# What currency do we use? -#currency = EUR -currency = EUR -#CURRENCY_ROUND_UNIT = EUR:0.01 -#CURRENCY_ROUND_UNIT = EUR:0.01 +CURRENCY = EUR +CURRENCY_ROUND_UNIT = EUR:0.01 [taler-helper-crypto-rsa] -# Reduce from 1 year to speed up test LOOKAHEAD_SIGN = 12 days [taler-helper-crypto-eddsa] -# Reduce from 1 year to speed up test LOOKAHEAD_SIGN = 12 days -# Reduce from 12 weeks to ensure we have multiple DURATION = 7 days - [bank] HTTP_PORT = 8082 -#BASE_URL = https://bank.test.taler.net/ +BASE_URL = http://localhost:8082/ -########################################## -# Configuration for Anastasis # -########################################## +[libeufin-bank] +CURRENCY = EUR +WIRE_TYPE = iban +IBAN_PAYTO_BIC = SANDBOXX +DEFAULT_CUSTOMER_DEBT_LIMIT = EUR:200 +DEFAULT_ADMIN_DEBT_LIMIT = EUR:2000 +REGISTRATION_BONUS_ENABLED = yes +REGISTRATION_BONUS = EUR:100 +SUGGESTED_WITHDRAWAL_EXCHANGE = http://localhost:8081/ +SERVE = tcp +PORT = 8082 [anastasis] PORT = 8086 - DB = postgres - BUSINESS_NAME = "Checker's Test Inc." - -# Upload limit UPLOAD_LIMIT_MB = 1 - ANNUAL_POLICY_UPLOAD_LIMIT = 64 - INSURANCE = EUR:0 - -SERVER_SALT = salty - - -# Annual fee we charge. -#ANNUAL_FEE = EUR:4.99 +PROVIDER_SALT = salty ANNUAL_FEE = EUR:4.99 - TRUTH_UPLOAD_FEE = EUR:0.0 - -# Base URL of anastasis. -# BASE_URL = http://localhost:8086/ +BASE_URL = http://localhost:8086/ [anastasis-merchant-backend] -# Where does our payment backend run? Must match PORT under [merchant] PAYMENT_BACKEND_URL = http://localhost:8080/ -# Authentication costs [authorization-question] -# Cost of authentication by question COST = EUR:0 [authorization-file] -# Cost of authentication by file (only for testing purposes) COST = EUR:1 [authorization-email] -# Cost of authentication by E-Mail COST = EUR:0 [authorization-sms] -# Cost of authentication by SMS COST = EUR:0 - -# Command which is executed for the sms authentication COMMAND = ./sms_authentication.sh - - - -# This specifies which database the postgres backend uses. [stasis-postgres] CONFIG = postgres:///anastasischeck -########################################## -# Configuration for the merchant backend # -########################################## - [merchant] - -# Which port do we run the backend on? (HTTP server) PORT = 8080 - -# How quickly do we want the exchange to send us our money? -# Used only if the frontend does not specify a value. WIRE_TRANSFER_DELAY = 0 s - -# Which plugin (backend) do we use for the DB. DB = postgres -# Default choice for maximum wire fee. -DEFAULT_MAX_WIRE_FEE = EUR:0.10 - -# Default choice for maximum deposit fee. -DEFAULT_MAX_DEPOSIT_FEE = EUR:0.10 - - -# This specifies which database the postgres backend uses. [merchantdb-postgres] CONFIG = postgres:///talercheck -# Sections starting with "exchange-" specify trusted exchanges -# (by the merchant) [merchant-exchange-default] MASTER_KEY = T1VVFQZZARQ1CMF4BN58EE7SKTW5AV2BS18S87ZEGYS4S29J6DNG EXCHANGE_BASE_URL = http://localhost:8081/ -#MASTER_KEY = DY95EXAHQ2BKM2WK9YHZHYG1R7PPMMJPY14FNGP662DAKE35AKQG -#EXCHANGE_BASE_URL = https://exchange.test.taler.net/ -#CURRENCY = EUR CURRENCY = EUR -# only fixes skips. [auditor] -BASE_URL = http://the.auditor/ -#BASE_URL = https://auditor.test.taler.net/ -#AUDITOR_KEY = DSDASDXAMDAARMNAD53ZA4AFAHA2QADAMAHHASWDAWXN84SDAA11 -# If currency does not match [TALER] section, the auditor -# will be ignored! -CURRENCY = EUR - -# Where do we store the auditor's private key? -AUDITOR_PRIV_FILE = ${TALER_DATA_HOME}/auditor/offline-keys/auditor.priv - -# Auditors must be in sections "auditor-", the rest of the section -# name could be anything. -[auditor-ezb] -# Informal name of the auditor. Just for the user. -NAME = European Central Bank - -# URL of the auditor (especially for in the future, when the -# auditor offers an automated issue reporting system). -# Not really used today. -URL = http://taler.ezb.eu/ - -# This is the important bit: the signing key of the auditor. -PUBLIC_KEY = 9QXF7XY7E9VPV47B5Z806NDFSX2VJ79SVHHD29QEQ3BG31ANHZ60 - -# Which currency is this auditor trusted for? -CURRENCY = EUR - - -################################################### -# Configuration for the exchange for the testcase # -################################################### +PORT = 8083 +BASE_URL = "http://localhost:8083/" [exchange] -# How to access our database +AML_THRESHOLD = EUR:1000000 DB = postgres - -# HTTP port the exchange listens to PORT = 8081 - -# how long are the signatures with the signkey valid? SIGNKEY_LEGAL_DURATION = 2 years - -# Our public key MASTER_PUBLIC_KEY = T1VVFQZZARQ1CMF4BN58EE7SKTW5AV2BS18S87ZEGYS4S29J6DNG - -# Base URL of the exchange. BASE_URL = "http://localhost:8081/" -#BASE_URL = https://exchange.test.taler.net/ - -# Network configuration for the normal API/service HTTP server -# serve via tcp socket (on PORT) SERVE = tcp +STEFAN_ABS = "EUR:5" [exchange-offline] - -# Where do we store the offline master private key of the exchange? MASTER_PRIV_FILE = ${TALER_DATA_HOME}/exchange/offline-keys/master.priv -# Where do we store the TOFU key material? SECM_TOFU_FILE = ${TALER_DATA_HOME}/exchange/offline-keys/secm_tofus.pub - [taler-exchange-secmod-eddsa] -# Where do we store the generated private keys. KEY_DIR = ${TALER_DATA_HOME}/exchange-secmod-eddsa/keys [taler-exchange-secmod-rsa] -# Where do we store the generated private keys. KEY_DIR = ${TALER_DATA_HOME}/exchange-secmod-rsa/keys +[taler-exchange-secmod-cs] +KEY_DIR = ${TALER_DATA_HOME}/exchange-secmod-cs/keys -[exchangedb-postgres] -CONFIG = "postgres:///talercheck" -[auditordb-postgres] +[exchangedb-postgres] CONFIG = "postgres:///talercheck" -# Account of the EXCHANGE [exchange-account-exchange] -# What is the exchange's bank account (with the "Taler Bank" demo system)? -PAYTO_URI = "payto://x-taler-bank/localhost:8082/2" +PAYTO_URI = "payto://x-taler-bank/localhost:8082/2?receiver-name=exchange" ENABLE_DEBIT = YES ENABLE_CREDIT = YES [exchange-accountcredentials-exchange] -WIRE_GATEWAY_URL = "http://localhost:8082/2/" +WIRE_GATEWAY_URL = "http://localhost:8082/accounts/2/taler-wire-gateway/" WIRE_GATEWAY_AUTH_METHOD = NONE - - [coin_eur_ct_1] value = EUR:0.01 duration_withdraw = 7 days @@ -236,6 +130,7 @@ fee_deposit = EUR:0.00 fee_refresh = EUR:0.01 fee_refund = EUR:0.01 rsa_keysize = 1024 +CIPHER = RSA [coin_eur_ct_10] value = EUR:0.10 @@ -247,6 +142,7 @@ fee_deposit = EUR:0.01 fee_refresh = EUR:0.03 fee_refund = EUR:0.01 rsa_keysize = 1024 +CIPHER = RSA [coin_eur_1] value = EUR:1 @@ -258,6 +154,7 @@ fee_deposit = EUR:0.01 fee_refresh = EUR:0.03 fee_refund = EUR:0.01 rsa_keysize = 1024 +CIPHER = RSA [coin_eur_5] value = EUR:5 @@ -269,3 +166,4 @@ fee_deposit = EUR:0.01 fee_refresh = EUR:0.03 fee_refund = EUR:0.01 rsa_keysize = 1024 +CIPHER = RSA diff --git a/src/testing/test_anastasis_api_home/.config/taler/exchange/account-2.json b/src/testing/test_anastasis_api_home/.config/taler/exchange/account-2.json deleted file mode 100644 index f798275..0000000 --- a/src/testing/test_anastasis_api_home/.config/taler/exchange/account-2.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "payto_uri": "payto://x-taler-bank/localhost:8082/2", - "master_sig": "AM32QB4RYMWK548PE63PJXJMWSA001TFFWTZZPSSD8HQ8JE4D5V5X8WTSYSX59ANF4YRTRMF5Q4Q12CE2KTA8KQ03CM11YDTK75SJ20"} diff --git a/src/testing/test_anastasis_api_home/.local/share/taler/exchange/offline-keys/master.priv b/src/testing/test_anastasis_api_home/taler/exchange-offline/master.priv index c20942d..c20942d 100644 --- a/src/testing/test_anastasis_api_home/.local/share/taler/exchange/offline-keys/master.priv +++ b/src/testing/test_anastasis_api_home/taler/exchange-offline/master.priv diff --git a/src/testing/test_anastasis_api_home/taler/exchange/offline-keys/master.priv b/src/testing/test_anastasis_api_home/taler/exchange/offline-keys/master.priv new file mode 100644 index 0000000..c20942d --- /dev/null +++ b/src/testing/test_anastasis_api_home/taler/exchange/offline-keys/master.priv @@ -0,0 +1 @@ +åÊk;d³_Uû}£A.wÔ"!Gûçv_m "_ò
\ No newline at end of file diff --git a/src/testing/testing_api_cmd_config.c b/src/testing/testing_api_cmd_config.c index 58a58dc..542e140 100644 --- a/src/testing/testing_api_cmd_config.c +++ b/src/testing/testing_api_cmd_config.c @@ -3,14 +3,14 @@ Copyright (C) 2019, 2021 Anastasis SARL Anastasis is free software; you can redistribute it and/or modify it under the - terms of the GNU Affero General Public License as published by the Free Software + terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with + You should have received a copy of the GNU General Public License along with Anastasis; see the file COPYING. If not, see <http://www.gnu.org/licenses/> */ /** @@ -53,7 +53,7 @@ struct ConfigState /** * The salt value from server. */ - struct ANASTASIS_CRYPTO_ProviderSaltP salt; + struct ANASTASIS_CRYPTO_ProviderSaltP provider_salt; }; @@ -61,39 +61,26 @@ struct ConfigState * Function called with the results of a #ANASTASIS_get_config(). * * @param cls closure - * @param http_status HTTP status of the request * @param config config from the server */ static void config_cb (void *cls, - unsigned int http_status, const struct ANASTASIS_Config *config) { struct ConfigState *ss = cls; ss->so = NULL; - if (http_status != ss->http_status) + if (config->http_status != ss->http_status) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Unexpected response code %u to command %s in %s:%u\n", - http_status, - ss->is->commands[ss->is->ip].label, - __FILE__, - __LINE__); - TALER_TESTING_interpreter_fail (ss->is); + TALER_TESTING_unexpected_status (ss->is, + config->http_status, + ss->http_status); return; } - if (NULL == config) + if (GNUNET_OK == config->http_status) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Config is NULL, command %s in %s:%u\n", - ss->is->commands[ss->is->ip].label, - __FILE__, - __LINE__); - TALER_TESTING_interpreter_fail (ss->is); - return; + ss->provider_salt = config->details.ok.provider_salt; } - ss->salt = config->salt; TALER_TESTING_interpreter_next (ss->is); } @@ -113,10 +100,11 @@ config_run (void *cls, struct ConfigState *ss = cls; ss->is = is; - ss->so = ANASTASIS_get_config (is->ctx, - ss->anastasis_url, - &config_cb, - ss); + ss->so = ANASTASIS_get_config ( + TALER_TESTING_interpreter_get_context (is), + ss->anastasis_url, + &config_cb, + ss); if (NULL == ss->so) { GNUNET_break (0); @@ -167,10 +155,8 @@ config_traits (void *cls, unsigned int index) { struct ConfigState *ss = cls; - struct TALER_TESTING_Trait traits[] = { - ANASTASIS_TESTING_make_trait_salt (0, - &ss->salt), + ANASTASIS_TESTING_make_trait_provider_salt (&ss->provider_salt), TALER_TESTING_trait_end () }; diff --git a/src/testing/testing_api_cmd_policy_lookup.c b/src/testing/testing_api_cmd_policy_lookup.c index eaff0f2..2d854c5 100644 --- a/src/testing/testing_api_cmd_policy_lookup.c +++ b/src/testing/testing_api_cmd_policy_lookup.c @@ -3,14 +3,14 @@ Copyright (C) 2020 Anastasis SARL Anastasis is free software; you can redistribute it and/or modify it under the - terms of the GNU Lesser General Public License as published by the Free Software + terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with + You should have received a copy of the GNU General Public License along with Anastasis; see the file COPYING.GPL. If not, see <http://www.gnu.org/licenses/> */ /** @@ -72,32 +72,26 @@ struct PolicyLookupState * Function called with the results of a #ANASTASIS_policy_lookup(). * * @param cls closure - * @param http_status HTTP status of the request * @param dd details about the lookup operation */ static void policy_lookup_cb (void *cls, - unsigned int http_status, const struct ANASTASIS_DownloadDetails *dd) { struct PolicyLookupState *pls = cls; pls->plo = NULL; - if (http_status != pls->http_status) + if (dd->http_status != pls->http_status) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Unexpected response code %u to command %s in %s:%u\n", - http_status, - pls->is->commands[pls->is->ip].label, - __FILE__, - __LINE__); - TALER_TESTING_interpreter_fail (pls->is); + TALER_TESTING_unexpected_status (pls->is, + dd->http_status, + pls->http_status); return; } if (NULL != pls->upload_reference) { - if ( (MHD_HTTP_OK == http_status) && - (0 != GNUNET_memcmp (&dd->curr_policy_hash, + if ( (MHD_HTTP_OK == dd->http_status) && + (0 != GNUNET_memcmp (&dd->details.ok.curr_policy_hash, pls->upload_hash)) ) { GNUNET_break (0); @@ -140,7 +134,6 @@ policy_lookup_run (void *cls, } if (GNUNET_OK != ANASTASIS_TESTING_get_trait_hash (upload_cmd, - ANASTASIS_TESTING_TRAIT_HASH_CURRENT, &pls->upload_hash)) { GNUNET_break (0); @@ -149,7 +142,6 @@ policy_lookup_run (void *cls, } if (GNUNET_OK != ANASTASIS_TESTING_get_trait_account_pub (upload_cmd, - 0, &anastasis_pub)) { GNUNET_break (0); @@ -158,11 +150,12 @@ policy_lookup_run (void *cls, } pls->anastasis_pub = *anastasis_pub; } - pls->plo = ANASTASIS_policy_lookup (is->ctx, - pls->anastasis_url, - &pls->anastasis_pub, - &policy_lookup_cb, - pls); + pls->plo = ANASTASIS_policy_lookup ( + TALER_TESTING_interpreter_get_context (is), + pls->anastasis_url, + &pls->anastasis_pub, + &policy_lookup_cb, + pls); if (NULL == pls->plo) { GNUNET_break (0); diff --git a/src/testing/testing_api_cmd_policy_store.c b/src/testing/testing_api_cmd_policy_store.c index 4b96472..edc753d 100644 --- a/src/testing/testing_api_cmd_policy_store.c +++ b/src/testing/testing_api_cmd_policy_store.c @@ -3,16 +3,16 @@ Copyright (C) 2014-2019 Anastasis SARL ANASTASIS is free software; you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as + it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. ANASTASIS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. + GNU General Public License for more details. - You should have received a copy of the GNU Affero General Public + You should have received a copy of the GNU General Public License along with ANASTASIS; see the file COPYING. If not, see <http://www.gnu.org/licenses/> */ @@ -139,13 +139,9 @@ policy_store_cb (void *cls, pss->pso = NULL; if (ud->http_status != pss->http_status) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Unexpected response code %u to command %s in %s:%u\n", - ud->http_status, - pss->is->commands[pss->is->ip].label, - __FILE__, - __LINE__); - TALER_TESTING_interpreter_fail (pss->is); + TALER_TESTING_unexpected_status (pss->is, + ud->http_status, + pss->http_status); return; } switch (ud->us) @@ -229,7 +225,6 @@ policy_store_run (void *cls, if (GNUNET_OK != ANASTASIS_TESTING_get_trait_account_priv (ref, - 0, &priv)) { GNUNET_break (0); @@ -243,7 +238,6 @@ policy_store_run (void *cls, if (GNUNET_OK != ANASTASIS_TESTING_get_trait_account_pub (ref, - 0, &pub)) { GNUNET_break (0); @@ -257,7 +251,6 @@ policy_store_run (void *cls, if (GNUNET_OK != ANASTASIS_TESTING_get_trait_payment_secret (ref, - 0, &ps)) { GNUNET_break (0); @@ -279,11 +272,12 @@ policy_store_run (void *cls, pss->recovery_data_size, &pss->curr_hash); pss->pso = ANASTASIS_policy_store ( - is->ctx, + TALER_TESTING_interpreter_get_context (is), pss->anastasis_url, &pss->anastasis_priv, pss->recovery_data, pss->recovery_data_size, + "metadata", strlen ("metadata"), (0 != (ANASTASIS_TESTING_PSO_REQUEST_PAYMENT & pss->psopt)), pss->payment_secret_set ? &pss->payment_secret_request : NULL, GNUNET_TIME_UNIT_ZERO, @@ -341,18 +335,12 @@ policy_store_traits (void *cls, { struct PolicyStoreState *pss = cls; struct TALER_TESTING_Trait traits[] = { - TALER_TESTING_make_trait_claim_token (0, - &pss->claim_token), - TALER_TESTING_make_trait_order_id (0, - pss->order_id), - ANASTASIS_TESTING_make_trait_hash (0, - &pss->curr_hash), - ANASTASIS_TESTING_make_trait_account_pub (0, - &pss->anastasis_pub), - ANASTASIS_TESTING_make_trait_account_priv (0, - &pss->anastasis_priv), - ANASTASIS_TESTING_make_trait_payment_secret (0, - &pss->payment_secret_response), + TALER_TESTING_make_trait_claim_token (&pss->claim_token), + TALER_TESTING_make_trait_order_id (pss->order_id), + ANASTASIS_TESTING_make_trait_hash (&pss->curr_hash), + ANASTASIS_TESTING_make_trait_account_pub (&pss->anastasis_pub), + ANASTASIS_TESTING_make_trait_account_priv (&pss->anastasis_priv), + ANASTASIS_TESTING_make_trait_payment_secret (&pss->payment_secret_response), TALER_TESTING_trait_end () }; diff --git a/src/testing/testing_api_cmd_truth_challenge.c b/src/testing/testing_api_cmd_truth_challenge.c new file mode 100644 index 0000000..c399345 --- /dev/null +++ b/src/testing/testing_api_cmd_truth_challenge.c @@ -0,0 +1,368 @@ +/* + This file is part of Anastasis + Copyright (C) 2020, 2022 Anastasis SARL + + Anastasis is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + Anastasis; see the file COPYING.GPL. If not, see <http://www.gnu.org/licenses/> +*/ +/** + * @file testing/testing_api_cmd_truth_challenge.c + * @brief Testing of Implementation of the /truth GET + * @author Christian Grothoff + * @author Dennis Neufeld + * @author Dominik Meister + */ + +#include "platform.h" +#include "anastasis_testing_lib.h" +#include <taler/taler_util.h> +#include <taler/taler_testing_lib.h> +#include <taler/taler_merchant_service.h> + + +/** + * State for a "keyshare lookup" CMD. + */ +struct TruthChallengeState +{ + /** + * The interpreter state. + */ + struct TALER_TESTING_Interpreter *is; + + /** + * URL of the anastasis backend. + */ + const char *anastasis_url; + + /** + * Expected HTTP status code. + */ + unsigned int expected_http_status; + + /** + * The /truth GET operation handle. + */ + struct ANASTASIS_TruthChallengeOperation *tco; + + /** + * Reference to upload command we expect to lookup. + */ + const char *upload_reference; + + /** + * Reference to upload command we expect to lookup. + */ + const char *payment_reference; + + /** + * Payment secret requested by the service, if any. + */ + struct ANASTASIS_PaymentSecretP payment_secret_response; + + /** + * Taler-URI with payment request, if any. + */ + char *pay_uri; + + /** + * Order ID for payment request, if any. + */ + char *order_id; + + /** + * "code" returned by service, if any. + */ + char *code; + + /** + * "instructions" for how to solve the challenge as returned by service, if any. + */ + char *instructions; + +}; + + +static void +truth_challenge_cb (void *cls, + const struct ANASTASIS_TruthChallengeDetails *tcd) +{ + struct TruthChallengeState *ksls = cls; + + ksls->tco = NULL; + if (tcd->http_status != ksls->expected_http_status) + { + TALER_TESTING_unexpected_status (ksls->is, + tcd->http_status, + ksls->expected_http_status); + return; + } + switch (tcd->http_status) + { + case MHD_HTTP_OK: + switch (tcd->details.success.cs) + { + case ANASTASIS_CS_FILE_WRITTEN: + { + FILE *file; + char code[22]; + + file = fopen (tcd->details.success.details.challenge_filename, + "r"); + if (NULL == file) + { + GNUNET_log_strerror_file ( + GNUNET_ERROR_TYPE_ERROR, + "open", + tcd->details.success.details.challenge_filename); + TALER_TESTING_interpreter_fail (ksls->is); + return; + } + if (0 == fscanf (file, + "%21s", + code)) + { + GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, + "fscanf", + tcd->details.success.details. + challenge_filename); + GNUNET_break (0 == fclose (file)); + TALER_TESTING_interpreter_fail (ksls->is); + return; + } + GNUNET_break (0 == fclose (file)); + ksls->code = GNUNET_strdup (code); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Read code `%s'\n", + code); + } + break; + case ANASTASIS_CS_TAN_SENT: + ksls->instructions = GNUNET_strdup ( + tcd->details.success.details.tan_address_hint); + break; + case ANASTASIS_CS_TAN_ALREADY_SENT: + break; + case ANASTASIS_CS_WIRE_FUNDS: + /* FIXME: not implemented */ + GNUNET_break (0); + return; + } + break; + case MHD_HTTP_PAYMENT_REQUIRED: + ksls->pay_uri = GNUNET_strdup ( + tcd->details.payment_required.payment_request); + ksls->payment_secret_response = tcd->details.payment_required.ps; + { + struct TALER_MERCHANT_PayUriData pd; + + if (GNUNET_OK != + TALER_MERCHANT_parse_pay_uri (ksls->pay_uri, + &pd)) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (ksls->is); + return; + } + ksls->order_id = GNUNET_strdup (pd.order_id); + TALER_MERCHANT_parse_pay_uri_free (&pd); + } + + break; + default: + break; + } + TALER_TESTING_interpreter_next (ksls->is); +} + + +static void +truth_challenge_run (void *cls, + const struct TALER_TESTING_Command *cmd, + struct TALER_TESTING_Interpreter *is) +{ + struct TruthChallengeState *ksls = cls; + const struct ANASTASIS_CRYPTO_TruthKeyP *truth_key; + const struct ANASTASIS_CRYPTO_TruthUUIDP *truth_uuid; + const struct ANASTASIS_PaymentSecretP *payment_secret; + + ksls->is = is; + if (NULL == ksls->upload_reference) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (ksls->is); + return; + } + { + const struct TALER_TESTING_Command *upload_cmd; + + upload_cmd = TALER_TESTING_interpreter_lookup_command ( + is, + ksls->upload_reference); + if (NULL == upload_cmd) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (ksls->is); + return; + } + if (GNUNET_OK != + ANASTASIS_TESTING_get_trait_truth_uuid (upload_cmd, + &truth_uuid)) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (ksls->is); + return; + } + if (NULL == truth_uuid) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (ksls->is); + return; + } + if (GNUNET_OK != + ANASTASIS_TESTING_get_trait_truth_key (upload_cmd, + &truth_key)) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (ksls->is); + return; + } + if (NULL == truth_key) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (ksls->is); + return; + } + } + + if (NULL != ksls->payment_reference) + { + const struct TALER_TESTING_Command *payment_cmd; + + payment_cmd = TALER_TESTING_interpreter_lookup_command ( + is, + ksls->payment_reference); + if (GNUNET_OK != + ANASTASIS_TESTING_get_trait_payment_secret (payment_cmd, + &payment_secret)) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (ksls->is); + return; + } + } + else + { + payment_secret = NULL; + } + + ksls->tco = ANASTASIS_truth_challenge ( + TALER_TESTING_interpreter_get_context (is), + ksls->anastasis_url, + truth_uuid, + truth_key, + payment_secret, + &truth_challenge_cb, + ksls); + if (NULL == ksls->tco) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (ksls->is); + return; + } +} + + +static void +truth_challenge_cleanup (void *cls, + const struct TALER_TESTING_Command *cmd) +{ + struct TruthChallengeState *ksls = cls; + + if (NULL != ksls->tco) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "Command '%s' did not complete (keyshare lookup)\n", + cmd->label); + ANASTASIS_truth_challenge_cancel (ksls->tco); + ksls->tco = NULL; + } + GNUNET_free (ksls->pay_uri); + GNUNET_free (ksls->order_id); + GNUNET_free (ksls->code); + GNUNET_free (ksls->instructions); + GNUNET_free (ksls); +} + + +/** + * Offer internal data to other commands. + * + * @param cls closure + * @param[out] ret result (could be anything) + * @param[out] trait name of the trait + * @param index index number of the object to extract. + * @return #GNUNET_OK on success + */ +static enum GNUNET_GenericReturnValue +truth_challenge_traits (void *cls, + const void **ret, + const char *trait, + unsigned int index) +{ + struct TruthChallengeState *ksls = cls; + struct TALER_TESTING_Trait traits[] = { + ANASTASIS_TESTING_make_trait_payment_secret ( + &ksls->payment_secret_response), + TALER_TESTING_make_trait_payto_uri (ksls->pay_uri), + TALER_TESTING_make_trait_order_id (ksls->order_id), + ANASTASIS_TESTING_make_trait_code (ksls->code), + TALER_TESTING_trait_end () + }; + + return TALER_TESTING_get_trait (traits, + ret, + trait, + index); +} + + +struct TALER_TESTING_Command +ANASTASIS_TESTING_cmd_truth_challenge ( + const char *label, + const char *anastasis_url, + const char *payment_ref, + const char *upload_ref, + unsigned int http_status) +{ + struct TruthChallengeState *ksls; + + GNUNET_assert (NULL != upload_ref); + ksls = GNUNET_new (struct TruthChallengeState); + ksls->expected_http_status = http_status; + ksls->anastasis_url = anastasis_url; + ksls->upload_reference = upload_ref; + ksls->payment_reference = payment_ref; + { + struct TALER_TESTING_Command cmd = { + .cls = ksls, + .label = label, + .run = &truth_challenge_run, + .cleanup = &truth_challenge_cleanup, + .traits = &truth_challenge_traits + }; + + return cmd; + } +} + + +/* end of testing_api_cmd_truth_challenge.c */ diff --git a/src/testing/testing_api_cmd_keyshare_lookup.c b/src/testing/testing_api_cmd_truth_solve.c index 04ecf43..29157ed 100644 --- a/src/testing/testing_api_cmd_keyshare_lookup.c +++ b/src/testing/testing_api_cmd_truth_solve.c @@ -1,20 +1,20 @@ /* This file is part of Anastasis - Copyright (C) 2020 Anastasis SARL + Copyright (C) 2020, 2022 Anastasis SARL Anastasis is free software; you can redistribute it and/or modify it under the - terms of the GNU Lesser General Public License as published by the Free Software + terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with + You should have received a copy of the GNU General Public License along with Anastasis; see the file COPYING.GPL. If not, see <http://www.gnu.org/licenses/> */ /** - * @file testing/testing_api_cmd_keyshare_lookup.c + * @file testing/testing_api_cmd_truth_solve.c * @brief Testing of Implementation of the /truth GET * @author Christian Grothoff * @author Dennis Neufeld @@ -31,7 +31,7 @@ /** * State for a "keyshare lookup" CMD. */ -struct KeyShareLookupState +struct TruthSolveState { /** * The interpreter state. @@ -46,12 +46,18 @@ struct KeyShareLookupState /** * Expected status code. */ - enum ANASTASIS_KeyShareDownloadStatus expected_ksdd; + unsigned int expected_http_status; + + /** + * Resulting encrypted key share. + * Note: currently not used. + */ + struct ANASTASIS_CRYPTO_EncryptedKeyShareP eks; /** * The /truth GET operation handle. */ - struct ANASTASIS_KeyShareLookupOperation *kslo; + struct ANASTASIS_TruthSolveOperation *tso; /** * answer to a challenge @@ -113,100 +119,31 @@ struct KeyShareLookupState static void -keyshare_lookup_cb (void *cls, - const struct ANASTASIS_KeyShareDownloadDetails *dd) +truth_solve_cb (void *cls, + const struct ANASTASIS_TruthSolveReply *tsr) { - struct KeyShareLookupState *ksls = cls; + struct TruthSolveState *ksls = cls; - ksls->kslo = NULL; - if (dd->status != ksls->expected_ksdd) + ksls->tso = NULL; + if (tsr->http_status != ksls->expected_http_status) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Unexpected response code %u to command %s in %s:%u\n", - dd->status, - ksls->is->commands[ksls->is->ip].label, - __FILE__, - __LINE__); - TALER_TESTING_interpreter_fail (ksls->is); + TALER_TESTING_unexpected_status (ksls->is, + tsr->http_status, + ksls->expected_http_status); return; } - switch (dd->status) + switch (tsr->http_status) { - case ANASTASIS_KSD_SUCCESS: - break; - case ANASTASIS_KSD_PAYMENT_REQUIRED: - ksls->pay_uri = GNUNET_strdup (dd->details.payment_required.taler_pay_uri); - ksls->payment_secret_response = dd->details.payment_required.payment_secret; - { - struct TALER_MERCHANT_PayUriData pd; - - if (GNUNET_OK != - TALER_MERCHANT_parse_pay_uri (ksls->pay_uri, - &pd)) - { - GNUNET_break (0); - TALER_TESTING_interpreter_fail (ksls->is); - return; - } - ksls->order_id = GNUNET_strdup (pd.order_id); - TALER_MERCHANT_parse_pay_uri_free (&pd); - } - - break; - case ANASTASIS_KSD_INVALID_ANSWER: - if (ksls->filename) - { - FILE *file; - char code[22]; - - file = fopen (ksls->filename, - "r"); - if (NULL == file) - { - GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, - "open", - ksls->filename); - TALER_TESTING_interpreter_fail (ksls->is); - return; - } - if (0 == fscanf (file, - "%21s", - code)) - { - GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, - "fscanf", - ksls->filename); - GNUNET_break (0 == fclose (file)); - TALER_TESTING_interpreter_fail (ksls->is); - return; - } - GNUNET_break (0 == fclose (file)); - ksls->code = GNUNET_strdup (code); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Read code `%s'\n", - code); - } - else - { - ksls->instructions = GNUNET_strndup ( - dd->details.open_challenge.body, - dd->details.open_challenge.body_size); - } - break; - case ANASTASIS_KSD_REDIRECT_FOR_AUTHENTICATION: - ksls->redirect_uri = GNUNET_strdup (dd->details.redirect_url); + case MHD_HTTP_OK: + ksls->eks = tsr->details.success.eks; break; - case ANASTASIS_KSD_SERVER_ERROR: + case MHD_HTTP_PAYMENT_REQUIRED: + ksls->pay_uri = GNUNET_strdup ( + tsr->details.payment_required.payment_request); + ksls->payment_secret_response = tsr->details.payment_required.ps; + ksls->order_id = GNUNET_strdup (tsr->details.payment_required.pd->order_id); break; - case ANASTASIS_KSD_CLIENT_FAILURE: - break; - case ANASTASIS_KSD_TRUTH_UNKNOWN: - break; - case ANASTASIS_KSD_RATE_LIMIT_EXCEEDED: - break; - case ANASTASIS_KSD_AUTHENTICATION_TIMEOUT: - break; - case ANASTASIS_KSD_EXTERNAL_CHALLENGE_INSTRUCTIONS: + default: break; } TALER_TESTING_interpreter_next (ksls->is); @@ -214,11 +151,11 @@ keyshare_lookup_cb (void *cls, static void -keyshare_lookup_run (void *cls, - const struct TALER_TESTING_Command *cmd, - struct TALER_TESTING_Interpreter *is) +truth_solve_run (void *cls, + const struct TALER_TESTING_Command *cmd, + struct TALER_TESTING_Interpreter *is) { - struct KeyShareLookupState *ksls = cls; + struct TruthSolveState *ksls = cls; const struct ANASTASIS_CRYPTO_TruthKeyP *truth_key; const struct ANASTASIS_CRYPTO_TruthUUIDP *truth_uuid; const struct ANASTASIS_PaymentSecretP *payment_secret; @@ -247,9 +184,8 @@ keyshare_lookup_run (void *cls, const char *fn; if (GNUNET_OK != - TALER_TESTING_get_trait_string (upload_cmd, - 0, - &fn)) + ANASTASIS_TESTING_get_trait_filename (upload_cmd, + &fn)) { GNUNET_break (0); TALER_TESTING_interpreter_fail (ksls->is); @@ -260,7 +196,6 @@ keyshare_lookup_run (void *cls, } if (GNUNET_OK != ANASTASIS_TESTING_get_trait_truth_uuid (upload_cmd, - 0, &truth_uuid)) { GNUNET_break (0); @@ -275,7 +210,6 @@ keyshare_lookup_run (void *cls, } if (GNUNET_OK != ANASTASIS_TESTING_get_trait_truth_key (upload_cmd, - 0, &truth_key)) { GNUNET_break (0); @@ -304,7 +238,6 @@ keyshare_lookup_run (void *cls, } if (GNUNET_OK != ANASTASIS_TESTING_get_trait_code (download_cmd, - 0, &answer)) { GNUNET_break (0); @@ -323,17 +256,22 @@ keyshare_lookup_run (void *cls, /* answer is the answer */ answer = ksls->answer; } + if (NULL == answer) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (ksls->is); + return; + } if (NULL != ksls->payment_reference) { const struct TALER_TESTING_Command *payment_cmd; - payment_cmd = TALER_TESTING_interpreter_lookup_command - (is, - ksls->payment_reference); + payment_cmd = TALER_TESTING_interpreter_lookup_command ( + is, + ksls->payment_reference); if (GNUNET_OK != ANASTASIS_TESTING_get_trait_payment_secret (payment_cmd, - 0, &payment_secret)) { GNUNET_break (0); @@ -349,23 +287,21 @@ keyshare_lookup_run (void *cls, { struct GNUNET_HashCode h_answer; - if (NULL != answer) - GNUNET_CRYPTO_hash (answer, - strlen (answer), - &h_answer); - ksls->kslo = ANASTASIS_keyshare_lookup (is->ctx, - ksls->anastasis_url, - truth_uuid, - truth_key, - payment_secret, - GNUNET_TIME_UNIT_ZERO, - (NULL != answer) - ? &h_answer - : NULL, - &keyshare_lookup_cb, - ksls); + GNUNET_CRYPTO_hash (answer, + strlen (answer), + &h_answer); + ksls->tso = ANASTASIS_truth_solve ( + TALER_TESTING_interpreter_get_context (is), + ksls->anastasis_url, + truth_uuid, + truth_key, + payment_secret, + GNUNET_TIME_UNIT_ZERO, + &h_answer, + &truth_solve_cb, + ksls); } - if (NULL == ksls->kslo) + if (NULL == ksls->tso) { GNUNET_break (0); TALER_TESTING_interpreter_fail (ksls->is); @@ -375,22 +311,23 @@ keyshare_lookup_run (void *cls, static void -keyshare_lookup_cleanup (void *cls, - const struct TALER_TESTING_Command *cmd) +truth_solve_cleanup (void *cls, + const struct TALER_TESTING_Command *cmd) { - struct KeyShareLookupState *ksls = cls; + struct TruthSolveState *ksls = cls; - if (NULL != ksls->kslo) + if (NULL != ksls->tso) { GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Command '%s' did not complete (keyshare lookup)\n", cmd->label); - ANASTASIS_keyshare_lookup_cancel (ksls->kslo); - ksls->kslo = NULL; + ANASTASIS_truth_solve_cancel (ksls->tso); + ksls->tso = NULL; } GNUNET_free (ksls->pay_uri); GNUNET_free (ksls->order_id); GNUNET_free (ksls->code); + GNUNET_free (ksls->filename); GNUNET_free (ksls->instructions); GNUNET_free (ksls->redirect_uri); GNUNET_free (ksls); @@ -406,22 +343,19 @@ keyshare_lookup_cleanup (void *cls, * @param index index number of the object to extract. * @return #GNUNET_OK on success */ -static int -keyshare_lookup_traits (void *cls, - const void **ret, - const char *trait, - unsigned int index) +static enum GNUNET_GenericReturnValue +truth_solve_traits (void *cls, + const void **ret, + const char *trait, + unsigned int index) { - struct KeyShareLookupState *ksls = cls; + struct TruthSolveState *ksls = cls; struct TALER_TESTING_Trait traits[] = { - ANASTASIS_TESTING_make_trait_payment_secret (0, - &ksls->payment_secret_response), - TALER_TESTING_make_trait_url (TALER_TESTING_UT_TALER_URL, - ksls->pay_uri), - TALER_TESTING_make_trait_order_id (0, - ksls->order_id), - ANASTASIS_TESTING_make_trait_code (0, - ksls->code), + ANASTASIS_TESTING_make_trait_payment_secret ( + &ksls->payment_secret_response), + TALER_TESTING_make_trait_payto_uri (ksls->pay_uri), + TALER_TESTING_make_trait_order_id (ksls->order_id), + ANASTASIS_TESTING_make_trait_code (ksls->code), TALER_TESTING_trait_end () }; @@ -433,20 +367,20 @@ keyshare_lookup_traits (void *cls, struct TALER_TESTING_Command -ANASTASIS_TESTING_cmd_keyshare_lookup ( +ANASTASIS_TESTING_cmd_truth_solve ( const char *label, const char *anastasis_url, const char *answer, const char *payment_ref, const char *upload_ref, int lookup_mode, - enum ANASTASIS_KeyShareDownloadStatus ksdd) + unsigned int http_status) { - struct KeyShareLookupState *ksls; + struct TruthSolveState *ksls; GNUNET_assert (NULL != upload_ref); - ksls = GNUNET_new (struct KeyShareLookupState); - ksls->expected_ksdd = ksdd; + ksls = GNUNET_new (struct TruthSolveState); + ksls->expected_http_status = http_status; ksls->anastasis_url = anastasis_url; ksls->upload_reference = upload_ref; ksls->payment_reference = payment_ref; @@ -456,9 +390,9 @@ ANASTASIS_TESTING_cmd_keyshare_lookup ( struct TALER_TESTING_Command cmd = { .cls = ksls, .label = label, - .run = &keyshare_lookup_run, - .cleanup = &keyshare_lookup_cleanup, - .traits = &keyshare_lookup_traits + .run = &truth_solve_run, + .cleanup = &truth_solve_cleanup, + .traits = &truth_solve_traits }; return cmd; @@ -466,4 +400,4 @@ ANASTASIS_TESTING_cmd_keyshare_lookup ( } -/* end of testing_api_cmd_keyshare_lookup.c */ +/* end of testing_api_cmd_truth_solve.c */ diff --git a/src/testing/testing_api_cmd_truth_store.c b/src/testing/testing_api_cmd_truth_store.c index 141ef20..f7a6ece 100644 --- a/src/testing/testing_api_cmd_truth_store.c +++ b/src/testing/testing_api_cmd_truth_store.c @@ -3,14 +3,14 @@ Copyright (C) 2020 Anastasis SARL Anastasis is free software; you can redistribute it and/or modify it under the - terms of the GNU Lesser General Public License as published by the Free Software + terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with + You should have received a copy of the GNU General Public License along with Anastasis; see the file COPYING.GPL. If not, see <http://www.gnu.org/licenses/> */ /** @@ -125,16 +125,11 @@ truth_store_cb (void *cls, struct TruthStoreState *tss = cls; tss->tso = NULL; - if ( (NULL == ud) || - (ud->http_status != tss->http_status) ) + if (ud->http_status != tss->http_status) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Unexpected response code %u to command %s in %s:%u\n", - (NULL != ud) ? ud->http_status : 0, - tss->is->commands[tss->is->ip].label, - __FILE__, - __LINE__); - TALER_TESTING_interpreter_fail (tss->is); + TALER_TESTING_unexpected_status (tss->is, + ud->http_status, + tss->http_status); return; } switch (ud->us) @@ -205,7 +200,6 @@ truth_store_run (void *cls, if (GNUNET_OK != ANASTASIS_TESTING_get_trait_truth_uuid (ref, - 0, &uuid)) { GNUNET_break (0); @@ -215,7 +209,6 @@ truth_store_run (void *cls, tss->uuid = *uuid; if (GNUNET_OK != ANASTASIS_TESTING_get_trait_eks (ref, - 0, &eks)) { GNUNET_break (0); @@ -275,7 +268,7 @@ truth_store_run (void *cls, GNUNET_free (t); } tss->tso = ANASTASIS_truth_store ( - is->ctx, + TALER_TESTING_interpreter_get_context (is), tss->anastasis_url, &tss->uuid, tss->method, @@ -335,7 +328,7 @@ truth_store_cleanup (void *cls, * @param index index number of the object to extract. * @return #GNUNET_OK on success */ -static int +static enum GNUNET_GenericReturnValue truth_store_traits (void *cls, const void **ret, const char *trait, @@ -343,18 +336,12 @@ truth_store_traits (void *cls, { struct TruthStoreState *tss = cls; struct TALER_TESTING_Trait traits[] = { - ANASTASIS_TESTING_make_trait_truth_uuid (0, - &tss->uuid), - ANASTASIS_TESTING_make_trait_truth_key (0, - &tss->key), - ANASTASIS_TESTING_make_trait_eks (0, - &tss->encrypted_keyshare), - ANASTASIS_TESTING_make_trait_payment_secret (0, - &tss->payment_secret_response), - TALER_TESTING_make_trait_url (TALER_TESTING_UT_TALER_URL, - tss->pay_uri), - TALER_TESTING_make_trait_string (0, - tss->filename), + ANASTASIS_TESTING_make_trait_truth_uuid (&tss->uuid), + ANASTASIS_TESTING_make_trait_truth_key (&tss->key), + ANASTASIS_TESTING_make_trait_eks (&tss->encrypted_keyshare), + ANASTASIS_TESTING_make_trait_payment_secret (&tss->payment_secret_response), + TALER_TESTING_make_trait_payto_uri (tss->pay_uri), + ANASTASIS_TESTING_make_trait_filename (tss->filename), TALER_TESTING_trait_end () }; diff --git a/src/testing/testing_api_helpers.c b/src/testing/testing_api_helpers.c index 15fa136..f131d00 100644 --- a/src/testing/testing_api_helpers.c +++ b/src/testing/testing_api_helpers.c @@ -3,16 +3,16 @@ Copyright (C) 2014-2021 Anastasis SARL ANASTASIS is free software; you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as + it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. ANASTASIS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of ANASTASISABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. + GNU General Public License for more details. - You should have received a copy of the GNU Affero General Public + You should have received a copy of the GNU General Public License along with ANASTASIS; see the file COPYING. If not, see <http://www.gnu.org/licenses/> */ diff --git a/src/testing/testing_api_trait_account_priv.c b/src/testing/testing_api_trait_account_priv.c deleted file mode 100644 index aa8addd..0000000 --- a/src/testing/testing_api_trait_account_priv.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - This file is part of Anastasis - Copyright (C) 2019 Anastasis SARL - - Anastasis is free software; you can redistribute it and/or modify it - under the terms of the GNU Affero General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - Anastasis is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Privlic License for more details. - - You should have received a copy of the GNU Affero General Privlic - License along with Anastasis; see the file COPYING. If not, see - <http://www.gnu.org/licenses/> -*/ -/** - * @file testing/testing_api_trait_account_priv.c - * @brief traits to offer a account_priv - * @author Christian Grothoff - */ -#include "platform.h" -#include "anastasis_testing_lib.h" - -#define ANASTASIS_TESTING_TRAIT_ACCOUNT_PRIV "anastasis-account_priv" - - -int -ANASTASIS_TESTING_get_trait_account_priv ( - const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_CRYPTO_AccountPrivateKeyP **priv) -{ - return cmd->traits (cmd->cls, - (const void **) priv, - ANASTASIS_TESTING_TRAIT_ACCOUNT_PRIV, - index); -} - - -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_account_priv ( - unsigned int index, - const struct ANASTASIS_CRYPTO_AccountPrivateKeyP *priv) -{ - struct TALER_TESTING_Trait ret = { - .index = index, - .trait_name = ANASTASIS_TESTING_TRAIT_ACCOUNT_PRIV, - .ptr = (const void *) priv - }; - - return ret; -} - - -/* end of testing_api_trait_account_priv.c */ diff --git a/src/testing/testing_api_trait_account_pub.c b/src/testing/testing_api_trait_account_pub.c deleted file mode 100644 index b4bc6f5..0000000 --- a/src/testing/testing_api_trait_account_pub.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - This file is part of Anastasis - Copyright (C) 2019 Anastasis SARL - - Anastasis is free software; you can redistribute it and/or modify it - under the terms of the GNU Affero General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - Anastasis is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public - License along with Anastasis; see the file COPYING. If not, see - <http://www.gnu.org/licenses/> -*/ -/** - * @file testing/testing_api_trait_account_pub.c - * @brief traits to offer a account_pub - * @author Christian Grothoff - */ -#include "platform.h" -#include "anastasis_testing_lib.h" - -#define ANASTASIS_TESTING_TRAIT_ACCOUNT_PUB "anastasis-account_pub" - - -int -ANASTASIS_TESTING_get_trait_account_pub ( - const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_CRYPTO_AccountPublicKeyP **pub) -{ - return cmd->traits (cmd->cls, - (const void **) pub, - ANASTASIS_TESTING_TRAIT_ACCOUNT_PUB, - index); -} - - -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_account_pub ( - unsigned int index, - const struct ANASTASIS_CRYPTO_AccountPublicKeyP *h) -{ - struct TALER_TESTING_Trait ret = { - .index = index, - .trait_name = ANASTASIS_TESTING_TRAIT_ACCOUNT_PUB, - .ptr = (const void *) h - }; - - return ret; -} - - -/* end of testing_api_trait_account_pub.c */ diff --git a/src/testing/testing_api_trait_code.c b/src/testing/testing_api_trait_code.c deleted file mode 100644 index bdc289b..0000000 --- a/src/testing/testing_api_trait_code.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - This file is part of Anastasis - Copyright (C) 2019 Anastasis SARL - - Anastasis is free software; you can redistribute it and/or modify it - under the terms of the GNU Affero General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - Anastasis is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public - License along with Anastasis; see the file COPYING. If not, see - <http://www.gnu.org/licenses/> -*/ -/** - * @file testing/testing_api_trait_code.c - * @brief traits to offers a code for a challenge - * @author Dominik Meister - * @author Christian Grothoff - */ -#include "platform.h" -#include "anastasis_testing_lib.h" - -#define ANASTASIS_TESTING_TRAIT_CODE "anastasis-code" - - -int -ANASTASIS_TESTING_get_trait_code ( - const struct TALER_TESTING_Command *cmd, - unsigned int index, - const char **code) -{ - return cmd->traits (cmd->cls, - (const void **) code, - ANASTASIS_TESTING_TRAIT_CODE, - index); -} - - -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_code ( - unsigned int index, - const char *code) -{ - struct TALER_TESTING_Trait ret = { - .index = index, - .trait_name = ANASTASIS_TESTING_TRAIT_CODE, - .ptr = (const void *) code - }; - - return ret; -} - - -/* end of testing_api_trait_code.c */ diff --git a/src/testing/testing_api_trait_eks.c b/src/testing/testing_api_trait_eks.c deleted file mode 100644 index d148456..0000000 --- a/src/testing/testing_api_trait_eks.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - This file is part of Anastasis - Copyright (C) 2021 Anastasis SARL - - Anastasis is free software; you can redistribute it and/or modify it - under the terms of the GNU Affero General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - Anastasis is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public - License along with Anastasis; see the file COPYING. If not, see - <http://www.gnu.org/licenses/> -*/ -/** - * @file testing/testing_api_trait_eks.c - * @brief traits to offer a payment identifier - * @author Dennis Neufeld - */ -#include "platform.h" -#include "anastasis_testing_lib.h" - -#define ANASTASIS_TESTING_TRAIT_EKS \ - "anastasis-eks" - - -int -ANASTASIS_TESTING_get_trait_eks ( - const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_CRYPTO_EncryptedKeyShareP **eks) -{ - return cmd->traits (cmd->cls, - (const void **) eks, - ANASTASIS_TESTING_TRAIT_EKS, - index); -} - - -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_eks ( - unsigned int index, - const struct ANASTASIS_CRYPTO_EncryptedKeyShareP *eks) -{ - struct TALER_TESTING_Trait ret = { - .index = index, - .trait_name = ANASTASIS_TESTING_TRAIT_EKS, - .ptr = (const void *) eks - }; - return ret; -} - - -/* end of testing_api_trait_eks.c */ diff --git a/src/testing/testing_api_trait_hash.c b/src/testing/testing_api_trait_hash.c deleted file mode 100644 index 9f9d554..0000000 --- a/src/testing/testing_api_trait_hash.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - This file is part of Anastasis - Copyright (C) 2019 Anastasis SARL - - Anastasis is free software; you can redistribute it and/or modify it - under the terms of the GNU Affero General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - Anastasis is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public - License along with Anastasis; see the file COPYING. If not, see - <http://www.gnu.org/licenses/> -*/ -/** - * @file anastasis/src/testing/testing_api_trait_hash.c - * @brief traits to offer a hash - * @author Christian Grothoff - */ -#include "platform.h" -#include "anastasis_testing_lib.h" - -#define ANASTASIS_TESTING_TRAIT_HASH "anastasis-hash" - - -int -ANASTASIS_TESTING_get_trait_hash ( - const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct GNUNET_HashCode **h) -{ - return cmd->traits (cmd->cls, - (const void **) h, - ANASTASIS_TESTING_TRAIT_HASH, - index); -} - - -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_hash ( - unsigned int index, - const struct GNUNET_HashCode *h) -{ - struct TALER_TESTING_Trait ret = { - .index = index, - .trait_name = ANASTASIS_TESTING_TRAIT_HASH, - .ptr = (const void *) h - }; - return ret; -} - - -/* end of testing_api_trait_hash.c */ diff --git a/src/testing/testing_api_trait_payment_secret.c b/src/testing/testing_api_trait_payment_secret.c deleted file mode 100644 index aa580da..0000000 --- a/src/testing/testing_api_trait_payment_secret.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - This file is part of Anastasis - Copyright (C) 2019 Anastasis SARL - - Anastasis is free software; you can redistribute it and/or modify it - under the terms of the GNU Affero General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - Anastasis is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public - License along with Anastasis; see the file COPYING. If not, see - <http://www.gnu.org/licenses/> -*/ -/** - * @file testing/testing_api_trait_payment_secret.c - * @brief traits to offer a payment identifier - * @author Dennis Neufeld - */ -#include "platform.h" -#include "anastasis_testing_lib.h" - -#define ANASTASIS_TESTING_TRAIT_PAYMENT_SECRET \ - "anastasis-payment_secret" - - -int -ANASTASIS_TESTING_get_trait_payment_secret ( - const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_PaymentSecretP **payment_secret) -{ - return cmd->traits (cmd->cls, - (const void **) payment_secret, - ANASTASIS_TESTING_TRAIT_PAYMENT_SECRET, - index); -} - - -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_payment_secret ( - unsigned int index, - const struct ANASTASIS_PaymentSecretP *h) -{ - struct TALER_TESTING_Trait ret = { - .index = index, - .trait_name = ANASTASIS_TESTING_TRAIT_PAYMENT_SECRET, - .ptr = (const void *) h - }; - - return ret; -} - - -/* end of testing_api_trait_payment_secret.c */ diff --git a/src/testing/testing_api_trait_salt.c b/src/testing/testing_api_trait_salt.c deleted file mode 100644 index 178b092..0000000 --- a/src/testing/testing_api_trait_salt.c +++ /dev/null @@ -1,60 +0,0 @@ -/* - This file is part of Anastasis - Copyright (C) 2020 Anastasis SARL - - Anastasis is free software; you can redistribute it and/or modify it - under the terms of the GNU Affero General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - Anastasis is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public - License along with Anastasis; see the file COPYING. If not, see - <http://www.gnu.org/licenses/> -*/ -/** - * @file testing/testing_api_trait_salt.c - * @brief traits to offer a hash - * @author Christian Grothoff - * @author Dominik Meister - * @author Dennis Neufeld - */ -#include "platform.h" -#include "anastasis_testing_lib.h" - -#define ANASTASIS_TESTING_TRAIT_SALT "anastasis-provider-salt" - - -int -ANASTASIS_TESTING_get_trait_salt ( - const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_CRYPTO_ProviderSaltP **s) -{ - return cmd->traits (cmd->cls, - (const void **) s, - ANASTASIS_TESTING_TRAIT_SALT, - index); -} - - -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_salt ( - unsigned int index, - const struct ANASTASIS_CRYPTO_ProviderSaltP *s) -{ - struct TALER_TESTING_Trait ret = { - .index = index, - .trait_name = ANASTASIS_TESTING_TRAIT_SALT, - .ptr = (const void *) s - }; - - return ret; -} - - -/* end of testing_api_trait_salt.c */ diff --git a/src/testing/testing_api_trait_truth_key.c b/src/testing/testing_api_trait_truth_key.c deleted file mode 100644 index 5de8860..0000000 --- a/src/testing/testing_api_trait_truth_key.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - This file is part of Anastasis - Copyright (C) 2019, 2021 Anastasis SARL - - Anastasis is free software; you can redistribute it and/or modify it - under the terms of the GNU Affero General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - Anastasis is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public - License along with Anastasis; see the file COPYING. If not, see - <http://www.gnu.org/licenses/> -*/ -/** - * @file testing/testing_api_trait_truth_key.c - * @brief traits to offer a payment identifier - * @author Dennis Neufeld - */ -#include "platform.h" -#include "anastasis_testing_lib.h" - -#define ANASTASIS_TESTING_TRAIT_TRUTH_KEY \ - "anastasis-truth_key" - - -int -ANASTASIS_TESTING_get_trait_truth_key - (const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_CRYPTO_TruthKeyP **truth_key) -{ - return cmd->traits (cmd->cls, - (const void **) truth_key, - ANASTASIS_TESTING_TRAIT_TRUTH_KEY, - index); -} - - -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_truth_key - (unsigned int index, - const struct ANASTASIS_CRYPTO_TruthKeyP *h) -{ - struct TALER_TESTING_Trait ret = { - .index = index, - .trait_name = ANASTASIS_TESTING_TRAIT_TRUTH_KEY, - .ptr = (const void *) h - }; - return ret; -} - - -/* end of testing_api_trait_truth_key.c */ diff --git a/src/testing/testing_api_trait_truth_uuid.c b/src/testing/testing_api_trait_truth_uuid.c deleted file mode 100644 index 7eba4b0..0000000 --- a/src/testing/testing_api_trait_truth_uuid.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - This file is part of Anastasis - Copyright (C) 2020 Anastasis SARL - - Anastasis is free software; you can redistribute it and/or modify it - under the terms of the GNU Affero General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - Anastasis is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public - License along with Anastasis; see the file COPYING. If not, see - <http://www.gnu.org/licenses/> -*/ -/** - * @file testing/testing_api_trait_truth_uuid.c - * @brief traits to offer a UUID for some truth - * @author Christian Grothoff - * @author Dominik Meister - * @author Dennis Neufeld - */ -#include "platform.h" -#include "anastasis_testing_lib.h" - - -#define ANASTASIS_TESTING_TRAIT_TRUTH_UUID "anastasis-truth-uuid" - - -int -ANASTASIS_TESTING_get_trait_truth_uuid ( - const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_CRYPTO_TruthUUIDP **tpk) -{ - return cmd->traits (cmd->cls, - (const void **) tpk, - ANASTASIS_TESTING_TRAIT_TRUTH_UUID, - index); -} - - -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_truth_uuid ( - unsigned int index, - const struct ANASTASIS_CRYPTO_TruthUUIDP *tpk) -{ - struct TALER_TESTING_Trait ret = { - .index = index, - .trait_name = ANASTASIS_TESTING_TRAIT_TRUTH_UUID, - .ptr = (const void *) tpk - }; - - return ret; -} - - -/* end of testing_api_trait_truth_uuid.c */ diff --git a/src/testing/testing_api_traits.c b/src/testing/testing_api_traits.c new file mode 100644 index 0000000..79b78a5 --- /dev/null +++ b/src/testing/testing_api_traits.c @@ -0,0 +1,36 @@ +/* + This file is part of TALER + Copyright (C) 2018, 2021 Taler Systems SA + + TALER is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 3, or + (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with TALER; see the file COPYING. If not, see + <http://www.gnu.org/licenses/> +*/ +/** + * @file testing/testing_api_traits.c + * @brief loop for trait resolution + * @author Christian Grothoff + * @author Marcello Stanisci + */ +#include "platform.h" +#include "anastasis_testing_lib.h" +#include <taler/taler_json_lib.h> +#include <gnunet/gnunet_curl_lib.h> +#include <taler/taler_testing_lib.h> + + +ANASTASIS_TESTING_SIMPLE_TRAITS (ANASTASIS_TESTING_MAKE_IMPL_SIMPLE_TRAIT) + +ANASTASIS_TESTING_INDEXED_TRAITS (ANASTASIS_TESTING_MAKE_IMPL_INDEXED_TRAIT) + +/* end of testing_api_traits.c */ diff --git a/src/testing/testing_cmd_challenge_answer.c b/src/testing/testing_cmd_challenge_answer.c index ff897f3..ad24861 100644 --- a/src/testing/testing_cmd_challenge_answer.c +++ b/src/testing/testing_cmd_challenge_answer.c @@ -1,16 +1,16 @@ /* This file is part of Anastasis - Copyright (C) 2020, 2021 Anastasis SARL + Copyright (C) 2020, 2021, 2022 Anastasis SARL Anastasis is free software; you can redistribute it and/or modify it under the - terms of the GNU Lesser General Public License as published by the Free Software + terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with + You should have received a copy of the GNU General Public License along with Anastasis; see the file COPYING.GPL. If not, see <http://www.gnu.org/licenses/> */ /** @@ -20,7 +20,6 @@ * @author Dennis Neufeld * @author Dominik Meister */ - #include "platform.h" #include "anastasis_testing_lib.h" #include <taler/taler_util.h> @@ -28,6 +27,8 @@ #include <taler/taler_merchant_service.h> +// FIXME: break up into two files, one for start, one for answer! + /** * State for a "challenge answer" CMD. */ @@ -74,9 +75,14 @@ struct ChallengeState struct ANASTASIS_PaymentSecretP payment_order_req; /** - * Expected status code. + * Expected answer status code. + */ + enum ANASTASIS_ChallengeAnswerStatus expected_acs; + + /** + * Expected start status code. */ - enum ANASTASIS_ChallengeStatus expected_cs; + enum ANASTASIS_ChallengeStartStatus expected_scs; /** * Index of the challenge we are solving @@ -91,103 +97,35 @@ struct ChallengeState /** * code we read in the file generated by the plugin */ - char code[22]; + char *code; }; static void challenge_answer_cb (void *af_cls, - const struct ANASTASIS_ChallengeStartResponse *csr) + const struct ANASTASIS_ChallengeAnswerResponse *csr) { struct ChallengeState *cs = af_cls; cs->c = NULL; - if (csr->cs != cs->expected_cs) + if (csr->cs != cs->expected_acs) { GNUNET_break (0); GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Expected status %u, got %u\n", - cs->expected_cs, + cs->expected_acs, csr->cs); TALER_TESTING_interpreter_fail (cs->is); return; } switch (csr->cs) { - case ANASTASIS_CHALLENGE_STATUS_SOLVED: + case ANASTASIS_CHALLENGE_ANSWER_STATUS_SOLVED: break; - case ANASTASIS_CHALLENGE_STATUS_INSTRUCTIONS: - { - FILE *file; - char *fn; - - if (0 == strcasecmp (csr->details.open_challenge.content_type, - "application/json")) - { - const char *filename; - json_t *in; - - in = json_loadb (csr->details.open_challenge.body, - csr->details.open_challenge.body_size, - JSON_REJECT_DUPLICATES, - NULL); - if (NULL == in) - { - GNUNET_break (0); - TALER_TESTING_interpreter_fail (cs->is); - return; - } - filename = json_string_value (json_object_get (in, - "filename")); - if (NULL == filename) - { - GNUNET_break (0); - json_decref (in); - TALER_TESTING_interpreter_fail (cs->is); - return; - } - fn = GNUNET_strdup (filename); - json_decref (in); - } - else - { - fn = GNUNET_strndup (csr->details.open_challenge.body, - csr->details.open_challenge.body_size); - } - file = fopen (fn, - "r"); - if (NULL == file) - { - GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, - "open", - fn); - GNUNET_free (fn); - TALER_TESTING_interpreter_fail (cs->is); - return; - } - if (0 == fscanf (file, - "%21s", - cs->code)) - { - GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, - "fscanf", - fn); - TALER_TESTING_interpreter_fail (cs->is); - fclose (file); - GNUNET_free (fn); - return; - } - GNUNET_log (GNUNET_ERROR_TYPE_INFO, - "Read challenge answer `%s' from file `%s'\n", - cs->code, - fn); - TALER_TESTING_interpreter_next (cs->is); - GNUNET_break (0 == fclose (file)); - GNUNET_free (fn); - return; - } - case ANASTASIS_CHALLENGE_STATUS_PAYMENT_REQUIRED: + case ANASTASIS_CHALLENGE_ANSWER_STATUS_INVALID_ANSWER: + break; + case ANASTASIS_CHALLENGE_ANSWER_STATUS_PAYMENT_REQUIRED: if (0 != strncmp (csr->details.payment_required.taler_pay_uri, "taler+http://pay/", strlen ("taler+http://pay/"))) @@ -227,19 +165,13 @@ challenge_answer_cb (void *af_cls, } TALER_TESTING_interpreter_next (cs->is); return; - case ANASTASIS_CHALLENGE_STATUS_TRUTH_UNKNOWN: - break; - case ANASTASIS_CHALLENGE_STATUS_REDIRECT_FOR_AUTHENTICATION: + case ANASTASIS_CHALLENGE_ANSWER_STATUS_TRUTH_UNKNOWN: break; - case ANASTASIS_CHALLENGE_STATUS_SERVER_FAILURE: + case ANASTASIS_CHALLENGE_ANSWER_STATUS_SERVER_FAILURE: GNUNET_break (0); TALER_TESTING_interpreter_fail (cs->is); return; - case ANASTASIS_CHALLENGE_STATUS_RATE_LIMIT_EXCEEDED: - break; - case ANASTASIS_CHALLENGE_STATUS_AUTH_TIMEOUT: - break; - case ANASTASIS_CHALLENGE_STATUS_EXTERNAL_INSTRUCTIONS: + case ANASTASIS_CHALLENGE_ANSWER_STATUS_RATE_LIMIT_EXCEEDED: break; } TALER_TESTING_interpreter_next (cs->is); @@ -259,7 +191,7 @@ challenge_answer_run (void *cls, struct TALER_TESTING_Interpreter *is) { struct ChallengeState *cs = cls; - const struct ANASTASIS_Challenge *c; + const struct ANASTASIS_Challenge **c; const struct ANASTASIS_PaymentSecretP *ps; cs->is = is; @@ -277,14 +209,15 @@ challenge_answer_run (void *cls, return; } if (GNUNET_OK != - ANASTASIS_TESTING_get_trait_challenge (ref, - cs->challenge_index, - &c)) + ANASTASIS_TESTING_get_trait_challenges (ref, + cs->challenge_index, + &c)) { GNUNET_break (0); TALER_TESTING_interpreter_fail (cs->is); return; } + cs->c = (struct ANASTASIS_Challenge *) *c; } if (NULL != cs->payment_ref) @@ -301,7 +234,6 @@ challenge_answer_run (void *cls, } if (GNUNET_OK != ANASTASIS_TESTING_get_trait_payment_secret (ref, - 0, &ps)) { GNUNET_break (0); @@ -314,8 +246,6 @@ challenge_answer_run (void *cls, ps = NULL; } - cs->c = (struct ANASTASIS_Challenge *) c; - if (1 == cs->mode) { const struct TALER_TESTING_Command *ref; @@ -333,7 +263,6 @@ challenge_answer_run (void *cls, } if (GNUNET_OK != ANASTASIS_TESTING_get_trait_code (ref, - 0, &answer)) { GNUNET_break (0); @@ -384,6 +313,118 @@ challenge_answer_run (void *cls, } +static void +challenge_start_cb (void *af_cls, + const struct ANASTASIS_ChallengeStartResponse *csr) +{ + struct ChallengeState *cs = af_cls; + + cs->c = NULL; + if (csr->cs != cs->expected_scs) + { + GNUNET_break (0); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Expected status %u, got %u\n", + cs->expected_scs, + csr->cs); + TALER_TESTING_interpreter_fail (cs->is); + return; + } + switch (csr->cs) + { + case ANASTASIS_CHALLENGE_START_STATUS_FILENAME_PROVIDED: + { + FILE *file; + char code[22]; + + file = fopen (csr->details.tan_filename, + "r"); + if (NULL == file) + { + GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, + "open", + csr->details.tan_filename); + TALER_TESTING_interpreter_fail (cs->is); + return; + } + if (0 == fscanf (file, + "%21s", + code)) + { + GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR, + "fscanf", + csr->details.tan_filename); + GNUNET_break (0 == fclose (file)); + TALER_TESTING_interpreter_fail (cs->is); + return; + } + GNUNET_break (0 == fclose (file)); + cs->code = GNUNET_strdup (code); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Read code `%s'\n", + code); + } + break; + case ANASTASIS_CHALLENGE_START_STATUS_TAN_SENT_HINT_PROVIDED: + GNUNET_break (0); /* FIXME: not implemented */ + break; + case ANASTASIS_CHALLENGE_START_STATUS_TAN_ALREADY_SENT: + GNUNET_break (0); /* FIXME: not implemented */ + break; + case ANASTASIS_CHALLENGE_START_STATUS_BANK_TRANSFER_REQUIRED: + GNUNET_break (0); /* FIXME: not implemented */ + break; + case ANASTASIS_CHALLENGE_START_STATUS_PAYMENT_REQUIRED: + if (0 != strncmp (csr->details.payment_required.taler_pay_uri, + "taler+http://pay/", + strlen ("taler+http://pay/"))) + { + GNUNET_break (0); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Invalid payment URI `%s'\n", + csr->details.payment_required.taler_pay_uri); + TALER_TESTING_interpreter_fail (cs->is); + return; + } + cs->payment_uri = GNUNET_strdup ( + csr->details.payment_required.taler_pay_uri); + { + struct TALER_MERCHANT_PayUriData pud; + + if (GNUNET_OK != + TALER_MERCHANT_parse_pay_uri (cs->payment_uri, + &pud)) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (cs->is); + return; + } + cs->order_id = GNUNET_strdup (pud.order_id); + if (GNUNET_OK != + GNUNET_STRINGS_string_to_data (cs->order_id, + strlen (cs->order_id), + &cs->payment_order_req, + sizeof (cs->payment_order_req))) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (cs->is); + return; + } + TALER_MERCHANT_parse_pay_uri_free (&pud); + } + TALER_TESTING_interpreter_next (cs->is); + return; + case ANASTASIS_CHALLENGE_START_STATUS_TRUTH_UNKNOWN: + break; + case ANASTASIS_CHALLENGE_START_STATUS_SERVER_FAILURE: + GNUNET_break (0); + TALER_TESTING_interpreter_fail (cs->is); + return; + } + TALER_TESTING_interpreter_next (cs->is); +} + + /** * Run a "recover secret" CMD. * @@ -397,7 +438,7 @@ challenge_start_run (void *cls, struct TALER_TESTING_Interpreter *is) { struct ChallengeState *cs = cls; - const struct ANASTASIS_Challenge *c; + const struct ANASTASIS_Challenge **c; const struct TALER_TESTING_Command *ref; const struct ANASTASIS_PaymentSecretP *ps; @@ -412,9 +453,9 @@ challenge_start_run (void *cls, return; } if (GNUNET_OK != - ANASTASIS_TESTING_get_trait_challenge (ref, - cs->challenge_index, - &c)) + ANASTASIS_TESTING_get_trait_challenges (ref, + cs->challenge_index, + &c)) { GNUNET_break (0); TALER_TESTING_interpreter_fail (cs->is); @@ -434,7 +475,6 @@ challenge_start_run (void *cls, } if (GNUNET_OK != ANASTASIS_TESTING_get_trait_payment_secret (ref, - 0, &ps)) { GNUNET_break (0); @@ -447,11 +487,9 @@ challenge_start_run (void *cls, ps = NULL; } if (GNUNET_OK != - ANASTASIS_challenge_start ((struct ANASTASIS_Challenge *) c, + ANASTASIS_challenge_start ((struct ANASTASIS_Challenge *) *c, ps, - GNUNET_TIME_UNIT_ZERO, - NULL, - &challenge_answer_cb, + &challenge_start_cb, cs)) { GNUNET_break (0); @@ -484,6 +522,7 @@ challenge_cleanup (void *cls, } GNUNET_free (cs->payment_uri); GNUNET_free (cs->order_id); + GNUNET_free (cs->code); GNUNET_free (cs); } @@ -497,7 +536,7 @@ challenge_cleanup (void *cls, * @param index index number of the object to extract. * @return #GNUNET_OK on success */ -static int +static enum GNUNET_GenericReturnValue challenge_create_traits (void *cls, const void **ret, const char *trait, @@ -505,14 +544,11 @@ challenge_create_traits (void *cls, { struct ChallengeState *cs = cls; struct TALER_TESTING_Trait traits[] = { - ANASTASIS_TESTING_make_trait_code (0, - cs->code), - ANASTASIS_TESTING_make_trait_payment_secret (0, - &cs->payment_order_req), - TALER_TESTING_make_trait_url (TALER_TESTING_UT_TALER_URL, - cs->payment_uri), - TALER_TESTING_make_trait_order_id (0, - cs->order_id), + ANASTASIS_TESTING_make_trait_code (cs->code), + ANASTASIS_TESTING_make_trait_payment_secret ( + &cs->payment_order_req), + TALER_TESTING_make_trait_payto_uri (cs->payment_uri), + TALER_TESTING_make_trait_order_id (cs->order_id), TALER_TESTING_trait_end () }; @@ -529,12 +565,12 @@ ANASTASIS_TESTING_cmd_challenge_start ( const char *payment_ref, const char *challenge_ref, unsigned int challenge_index, - enum ANASTASIS_ChallengeStatus expected_cs) + enum ANASTASIS_ChallengeStartStatus expected_cs) { struct ChallengeState *cs; cs = GNUNET_new (struct ChallengeState); - cs->expected_cs = expected_cs; + cs->expected_scs = expected_cs; cs->challenge_ref = challenge_ref; cs->payment_ref = payment_ref; cs->challenge_index = challenge_index; @@ -560,12 +596,12 @@ ANASTASIS_TESTING_cmd_challenge_answer ( unsigned int challenge_index, const char *answer, unsigned int mode, - enum ANASTASIS_ChallengeStatus expected_cs) + enum ANASTASIS_ChallengeAnswerStatus expected_cs) { struct ChallengeState *cs; cs = GNUNET_new (struct ChallengeState); - cs->expected_cs = expected_cs; + cs->expected_acs = expected_cs; cs->challenge_ref = challenge_ref; cs->payment_ref = payment_ref; cs->answer = answer; diff --git a/src/testing/testing_cmd_policy_create.c b/src/testing/testing_cmd_policy_create.c index 62ad71f..64f7060 100644 --- a/src/testing/testing_cmd_policy_create.c +++ b/src/testing/testing_cmd_policy_create.c @@ -3,14 +3,14 @@ Copyright (C) 2020 Anastasis SARL Anastasis is free software; you can redistribute it and/or modify it under the - terms of the GNU Lesser General Public License as published by the Free Software + terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with + You should have received a copy of the GNU General Public License along with Anastasis; see the file COPYING.GPL. If not, see <http://www.gnu.org/licenses/> */ /** @@ -82,7 +82,7 @@ policy_create_run (void *cls, for (unsigned int i = 0; i < pcs->cmd_label_array_length; i++) { const struct TALER_TESTING_Command *ref; - const struct ANASTASIS_Truth *truth; + const struct ANASTASIS_Truth **truth; ref = TALER_TESTING_interpreter_lookup_command (is, pcs->cmd_label_array[i]); @@ -94,15 +94,14 @@ policy_create_run (void *cls, } if (GNUNET_OK != ANASTASIS_TESTING_get_trait_truth (ref, - 0, &truth)) { GNUNET_break (0); TALER_TESTING_interpreter_fail (pcs->is); return; } - GNUNET_assert (NULL != truth); - truths[i] = truth; + GNUNET_assert (NULL != *truth); + truths[i] = *truth; } } @@ -159,8 +158,8 @@ policy_create_traits (void *cls, { struct PolicyCreateState *pcs = cls; struct TALER_TESTING_Trait traits[] = { - ANASTASIS_TESTING_make_trait_policy (0, - pcs->policy), + ANASTASIS_TESTING_make_trait_policy ( + (const struct ANASTASIS_Policy **) &pcs->policy), TALER_TESTING_trait_end () }; diff --git a/src/testing/testing_cmd_recover_secret.c b/src/testing/testing_cmd_recover_secret.c index 55c0168..1f3e832 100644 --- a/src/testing/testing_cmd_recover_secret.c +++ b/src/testing/testing_cmd_recover_secret.c @@ -3,14 +3,14 @@ Copyright (C) 2020, 2021 Anastasis SARL Anastasis is free software; you can redistribute it and/or modify it under the - terms of the GNU Lesser General Public License as published by the Free Software + terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with + You should have received a copy of the GNU General Public License along with Anastasis; see the file COPYING.GPL. If not, see <http://www.gnu.org/licenses/> */ /** @@ -67,11 +67,6 @@ struct RecoverSecretState json_t *id_data; /** - * Salt to be used to derive the id - */ - struct ANASTASIS_CRYPTO_ProviderSaltP *salt; - - /** * Recovery information from the lookup */ struct ANASTASIS_RecoveryInformation *ri; @@ -113,13 +108,19 @@ policy_lookup_cb (void *cls, { struct RecoverSecretState *rss = cls; - rss->ri = (struct ANASTASIS_RecoveryInformation *) ri; if (NULL == ri) { GNUNET_break (0); TALER_TESTING_interpreter_fail (rss->is); return; } + if (0 == ri->cs_len) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (rss->is); + return; + } + rss->ri = (struct ANASTASIS_RecoveryInformation *) ri; TALER_TESTING_interpreter_next (rss->is); } @@ -188,14 +189,14 @@ recover_secret_run (void *cls, { struct RecoverSecretState *rss = cls; const struct TALER_TESTING_Command *ref; - const struct ANASTASIS_CRYPTO_ProviderSaltP *salt; + const struct ANASTASIS_CRYPTO_ProviderSaltP *provider_salt; rss->is = is; if (NULL != rss->download_reference) { - ref = TALER_TESTING_interpreter_lookup_command - (is, - rss->download_reference); + ref = TALER_TESTING_interpreter_lookup_command ( + is, + rss->download_reference); if (NULL == ref) { GNUNET_break (0); @@ -203,9 +204,8 @@ recover_secret_run (void *cls, return; } if (GNUNET_OK != - ANASTASIS_TESTING_get_trait_salt (ref, - 0, - &salt)) + ANASTASIS_TESTING_get_trait_provider_salt (ref, + &provider_salt)) { GNUNET_break (0); TALER_TESTING_interpreter_fail (rss->is); @@ -224,24 +224,25 @@ recover_secret_run (void *cls, return; } if (GNUNET_OK != - ANASTASIS_TESTING_get_trait_core_secret (ref, - 0, - &rss->core_secret)) + ANASTASIS_TESTING_get_trait_core_secret ( + ref, + &rss->core_secret)) { GNUNET_break (0); TALER_TESTING_interpreter_fail (rss->is); return; } } - rss->recovery = ANASTASIS_recovery_begin (is->ctx, - rss->id_data, - rss->version, - rss->anastasis_url, - salt, - &policy_lookup_cb, - rss, - &core_secret_cb, - rss); + rss->recovery = ANASTASIS_recovery_begin ( + TALER_TESTING_interpreter_get_context (is), + rss->id_data, + rss->version, + rss->anastasis_url, + provider_salt, + &policy_lookup_cb, + rss, + &core_secret_cb, + rss); if (NULL == rss->recovery) { GNUNET_break (0); @@ -307,7 +308,7 @@ recover_secret_cleanup (void *cls, * @param index index number of the object to extract. * @return #GNUNET_OK on success */ -static int +static enum GNUNET_GenericReturnValue recover_secret_traits (void *cls, const void **ret, const char *trait, @@ -327,8 +328,9 @@ recover_secret_traits (void *cls, } { struct TALER_TESTING_Trait traits[] = { - ANASTASIS_TESTING_make_trait_challenge (index, - rss->ri->cs[index]), + ANASTASIS_TESTING_make_trait_challenges ( + index, + (const struct ANASTASIS_Challenge **) &rss->ri->cs[index]), TALER_TESTING_trait_end () }; diff --git a/src/testing/testing_cmd_secret_share.c b/src/testing/testing_cmd_secret_share.c index d9122e8..3c401d2 100644 --- a/src/testing/testing_cmd_secret_share.c +++ b/src/testing/testing_cmd_secret_share.c @@ -3,14 +3,14 @@ Copyright (C) 2020 Anastasis SARL Anastasis is free software; you can redistribute it and/or modify it under the - terms of the GNU Lesser General Public License as published by the Free Software + terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with + You should have received a copy of the GNU General Public License along with Anastasis; see the file COPYING.GPL. If not, see <http://www.gnu.org/licenses/> */ /** @@ -135,14 +135,7 @@ secret_share_result_cb (void *cls, sss->sso = NULL; if (sr->ss != sss->want_status) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Unexpected response code %u to command %s in %s:%u\n", - sr->ss, - sss->is->commands[sss->is->ip].label, - __FILE__, - __LINE__); TALER_TESTING_interpreter_fail (sss->is); - return; } switch (sr->ss) { @@ -199,7 +192,7 @@ secret_share_run (void *cls, for (unsigned int i = 0; i < sss->cmd_label_array_length; i++) { const struct TALER_TESTING_Command *ref; - const struct ANASTASIS_Policy *policy; + const struct ANASTASIS_Policy **policy; ref = TALER_TESTING_interpreter_lookup_command (is, sss->cmd_label_array[i]); @@ -211,15 +204,14 @@ secret_share_run (void *cls, } if (GNUNET_OK != ANASTASIS_TESTING_get_trait_policy (ref, - 0, &policy)) { GNUNET_break (0); TALER_TESTING_interpreter_fail (sss->is); return; } - GNUNET_assert (NULL != policy); - policies[i] = policy; + GNUNET_assert (NULL != *policy); + policies[i] = *policy; } } @@ -238,15 +230,13 @@ secret_share_run (void *cls, } if (GNUNET_OK != TALER_TESTING_get_trait_order_id (ref, - 0, &order_id)) { GNUNET_break (0); TALER_TESTING_interpreter_fail (sss->is); return; } - sss->payment_order_id = (char *) order_id; - + sss->payment_order_id = GNUNET_strdup (order_id); if (NULL == sss->payment_order_id) { GNUNET_break (0); @@ -277,7 +267,7 @@ secret_share_run (void *cls, pds.provider_url = sss->anastasis_url; { const struct TALER_TESTING_Command *ref; - const struct ANASTASIS_CRYPTO_ProviderSaltP *salt; + const struct ANASTASIS_CRYPTO_ProviderSaltP *provider_salt; ref = TALER_TESTING_interpreter_lookup_command (is, sss->config_ref); @@ -288,30 +278,30 @@ secret_share_run (void *cls, return; } if (GNUNET_OK != - ANASTASIS_TESTING_get_trait_salt (ref, - 0, - &salt)) + ANASTASIS_TESTING_get_trait_provider_salt (ref, + &provider_salt)) { GNUNET_break (0); TALER_TESTING_interpreter_fail (sss->is); return; } - pds.provider_salt = *salt; + pds.provider_salt = *provider_salt; } - sss->sso = ANASTASIS_secret_share (is->ctx, - sss->id_data, - &pds, - 1, - policies, - sss->cmd_label_array_length, - false, - GNUNET_TIME_UNIT_ZERO, - &secret_share_result_cb, - sss, - "test-case", - sss->core_secret, - sss->core_secret_size); + sss->sso = ANASTASIS_secret_share ( + TALER_TESTING_interpreter_get_context (is), + sss->id_data, + &pds, + 1, + policies, + sss->cmd_label_array_length, + false, + GNUNET_TIME_UNIT_ZERO, + &secret_share_result_cb, + sss, + "test-case", + sss->core_secret, + sss->core_secret_size); if (NULL == sss->sso) { GNUNET_break (0); @@ -368,12 +358,9 @@ secret_share_traits (void *cls, { struct SecretShareState *sss = cls; struct TALER_TESTING_Trait traits[] = { - TALER_TESTING_make_trait_claim_token (0, - &sss->token), - ANASTASIS_TESTING_make_trait_core_secret (0, - sss->core_secret), - TALER_TESTING_make_trait_order_id (0, - sss->payment_order_id), + TALER_TESTING_make_trait_claim_token (&sss->token), + ANASTASIS_TESTING_make_trait_core_secret (sss->core_secret), + TALER_TESTING_make_trait_order_id (sss->payment_order_id), TALER_TESTING_trait_end () }; diff --git a/src/testing/testing_cmd_truth_upload.c b/src/testing/testing_cmd_truth_upload.c index 19692c8..2e3523b 100644 --- a/src/testing/testing_cmd_truth_upload.c +++ b/src/testing/testing_cmd_truth_upload.c @@ -3,14 +3,14 @@ Copyright (C) 2020 Anastasis SARL Anastasis is free software; you can redistribute it and/or modify it under the - terms of the GNU Lesser General Public License as published by the Free Software + terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with + You should have received a copy of the GNU General Public License along with Anastasis; see the file COPYING.GPL. If not, see <http://www.gnu.org/licenses/> */ /** @@ -181,15 +181,15 @@ truth_upload_run (void *cls, { struct TruthUploadState *tus = cls; const struct TALER_TESTING_Command *ref; - const struct ANASTASIS_CRYPTO_ProviderSaltP *salt; + const struct ANASTASIS_CRYPTO_ProviderSaltP *provider_salt; struct ANASTASIS_CRYPTO_UserIdentifierP user_id; tus->is = is; if (NULL != tus->salt_reference) { - ref = TALER_TESTING_interpreter_lookup_command - (is, - tus->salt_reference); + ref = TALER_TESTING_interpreter_lookup_command ( + is, + tus->salt_reference); if (NULL == ref) { GNUNET_break (0); @@ -197,33 +197,31 @@ truth_upload_run (void *cls, return; } if (GNUNET_OK != - ANASTASIS_TESTING_get_trait_salt (ref, - 0, - &salt)) + ANASTASIS_TESTING_get_trait_provider_salt (ref, + &provider_salt)) { GNUNET_break (0); TALER_TESTING_interpreter_fail (tus->is); return; } } - ANASTASIS_CRYPTO_user_identifier_derive (tus->id_data, - salt, + provider_salt, &user_id); - - tus->tuo = ANASTASIS_truth_upload (is->ctx, - &user_id, - tus->anastasis_url, - tus->method, - tus->instructions, - tus->mime_type, - salt, - tus->truth_data, - tus->truth_data_size, - false, /* force payment */ - GNUNET_TIME_UNIT_ZERO, - &truth_upload_cb, - tus); + tus->tuo = ANASTASIS_truth_upload ( + TALER_TESTING_interpreter_get_context (is), + &user_id, + tus->anastasis_url, + tus->method, + tus->instructions, + tus->mime_type, + provider_salt, + tus->truth_data, + tus->truth_data_size, + false, /* force payment */ + GNUNET_TIME_UNIT_ZERO, + &truth_upload_cb, + tus); if (NULL == tus->tuo) { GNUNET_break (0); @@ -285,10 +283,9 @@ truth_upload_traits (void *cls, { struct TruthUploadState *tus = cls; struct TALER_TESTING_Trait traits[] = { - ANASTASIS_TESTING_make_trait_truth (0, - tus->truth), - ANASTASIS_TESTING_make_trait_payment_secret (0, - &tus->payment_secret_response), + ANASTASIS_TESTING_make_trait_truth ( + (const struct ANASTASIS_Truth **) &tus->truth), + ANASTASIS_TESTING_make_trait_payment_secret (&tus->payment_secret_response), TALER_TESTING_trait_end () }; diff --git a/src/testing/testing_trait_challenge.c b/src/testing/testing_trait_challenge.c deleted file mode 100644 index f0485a1..0000000 --- a/src/testing/testing_trait_challenge.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - This file is part of Anastasis - Copyright (C) 2020 Anastasis SARL - - Anastasis is free software; you can redistribute it and/or modify it - under the terms of the GNU Affero General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - Anastasis is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public - License along with Anastasis; see the file COPYING. If not, see - <http://www.gnu.org/licenses/> -*/ -/** - * @file testing/testing_trait_challenge.c - * @brief traits to offer a challenge - * @author Christian Grothoff - * @author Dominik Meister - * @author Dennis Neufeld - */ -#include "platform.h" -#include "anastasis_testing_lib.h" - -#define ANASTASIS_TESTING_TRAIT_CHALLENGE "anastasis-challenge" - - -int -ANASTASIS_TESTING_get_trait_challenge (const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_Challenge **c) -{ - return cmd->traits (cmd->cls, - (const void **) c, - ANASTASIS_TESTING_TRAIT_CHALLENGE, - index); -} - - -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_challenge (unsigned int index, - const struct ANASTASIS_Challenge *c) -{ - struct TALER_TESTING_Trait ret = { - .index = index, - .trait_name = ANASTASIS_TESTING_TRAIT_CHALLENGE, - .ptr = (const void *) c - }; - return ret; -} - - -/* end of testing_trait_challenge.c */ diff --git a/src/testing/testing_trait_core_secret.c b/src/testing/testing_trait_core_secret.c deleted file mode 100644 index e6aee0f..0000000 --- a/src/testing/testing_trait_core_secret.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - This file is part of Anastasis - Copyright (C) 2020 Anastasis SARL - - Anastasis is free software; you can redistribute it and/or modify it - under the terms of the GNU Affero General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - Anastasis is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public - License along with Anastasis; see the file COPYING. If not, see - <http://www.gnu.org/licenses/> -*/ -/** - * @file testing/testing_trait_core_secret.c - * @brief traits to offer the core secret - * @author Christian Grothoff - * @author Dominik Meister - * @author Dennis Neufeld - */ -#include "platform.h" -#include "anastasis_testing_lib.h" - -#define ANASTASIS_TESTING_TRAIT_CORE_SECRET "anastasis-core-secret" - - -int -ANASTASIS_TESTING_get_trait_core_secret (const struct - TALER_TESTING_Command *cmd, - unsigned int index, - const void **s) -{ - return cmd->traits (cmd->cls, - s, - ANASTASIS_TESTING_TRAIT_CORE_SECRET, - index); -} - - -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_core_secret (unsigned int index, - const void *s) -{ - struct TALER_TESTING_Trait ret = { - .index = index, - .trait_name = ANASTASIS_TESTING_TRAIT_CORE_SECRET, - .ptr = s - }; - - return ret; -} - - -/* end of testing_trait_core_secret.c */ diff --git a/src/testing/testing_trait_policy.c b/src/testing/testing_trait_policy.c deleted file mode 100644 index 0944088..0000000 --- a/src/testing/testing_trait_policy.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - This file is part of Anastasis - Copyright (C) 2020 Anastasis SARL - - Anastasis is free software; you can redistribute it and/or modify it - under the terms of the GNU Affero General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - Anastasis is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public - License along with Anastasis; see the file COPYING. If not, see - <http://www.gnu.org/licenses/> -*/ -/** - * @file testing/testing_trait_policy.c - * @brief traits to offer a policy - * @author Christian Grothoff - * @author Dominik Meister - * @author Dennis Neufeld - */ -#include "platform.h" -#include "anastasis_testing_lib.h" - -#define ANASTASIS_TESTING_TRAIT_POLICY "anastasis-policy" - - -int -ANASTASIS_TESTING_get_trait_policy (const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_Policy **p) -{ - return cmd->traits (cmd->cls, - (const void **) p, - ANASTASIS_TESTING_TRAIT_POLICY, - index); -} - - -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_policy (unsigned int index, - const struct ANASTASIS_Policy *p) -{ - struct TALER_TESTING_Trait ret = { - .index = index, - .trait_name = ANASTASIS_TESTING_TRAIT_POLICY, - .ptr = (const void *) p - }; - - return ret; -} - - -/* end of testing_trait_policy.c */ diff --git a/src/testing/testing_trait_truth.c b/src/testing/testing_trait_truth.c deleted file mode 100644 index 559fd9e..0000000 --- a/src/testing/testing_trait_truth.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - This file is part of Anastasis - Copyright (C) 2020 Anastasis SARL - - Anastasis is free software; you can redistribute it and/or modify it - under the terms of the GNU Affero General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - Anastasis is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public - License along with Anastasis; see the file COPYING. If not, see - <http://www.gnu.org/licenses/> -*/ -/** - * @file testing/testing_trait_truth.c - * @brief traits to offer a truth - * @author Christian Grothoff - * @author Dominik Meister - * @author Dennis Neufeld - */ -#include "platform.h" -#include "anastasis_testing_lib.h" - -#define ANASTASIS_TESTING_TRAIT_TRUTH "anastasis-truth" - - -int -ANASTASIS_TESTING_get_trait_truth (const struct TALER_TESTING_Command *cmd, - unsigned int index, - const struct ANASTASIS_Truth **t) -{ - return cmd->traits (cmd->cls, - (const void **) t, - ANASTASIS_TESTING_TRAIT_TRUTH, - index); -} - - -struct TALER_TESTING_Trait -ANASTASIS_TESTING_make_trait_truth (unsigned int index, - const struct ANASTASIS_Truth *t) -{ - struct TALER_TESTING_Trait ret = { - .index = index, - .trait_name = ANASTASIS_TESTING_TRAIT_TRUTH, - .ptr = (const void *) t - }; - - return ret; -} - - -/* end of testing_trait_truth.c */ |