diff options
author | Jonathan Buchanan <jonathan.russ.buchanan@gmail.com> | 2020-07-13 17:31:46 -0400 |
---|---|---|
committer | Jonathan Buchanan <jonathan.russ.buchanan@gmail.com> | 2020-07-13 17:31:46 -0400 |
commit | 8147661f94b31710393e4695b78fe54864a2c3e7 (patch) | |
tree | 06122368fe90d46a555eff585a56c6f3dcd9f5a3 /src | |
parent | 5e5a15b01b136b347d15bf7517ad2745a4e1b465 (diff) | |
download | exchange-8147661f94b31710393e4695b78fe54864a2c3e7.tar.xz |
test for use-after-free crash when getting keys
Diffstat (limited to 'src')
-rw-r--r-- | src/include/taler_twister_testing_lib.h | 17 | ||||
-rw-r--r-- | src/testing/test_exchange_api_twisted.c | 33 | ||||
-rw-r--r-- | src/testing/testing_api_cmd_twister_exec_client.c | 68 |
3 files changed, 116 insertions, 2 deletions
diff --git a/src/include/taler_twister_testing_lib.h b/src/include/taler_twister_testing_lib.h index fb0c352df..4ff3f42a8 100644 --- a/src/include/taler_twister_testing_lib.h +++ b/src/include/taler_twister_testing_lib.h @@ -100,6 +100,23 @@ TALER_TESTING_cmd_modify_object_ul (const char *label, /** + * Create a "modify header" CMD. This command instructs + * the twister to modify a header in the next HTTP response. + * + * @param label command label + * @param config_filename configuration filename. + * @param header name of the header to modify. + * @param value value to set the header to. + * @return the command + */ +struct TALER_TESTING_Command +TALER_TESTING_cmd_modify_header_dl (const char *label, + const char *config_filename, + const char *path, + const char *value); + + +/** * Create a "malform response" CMD. This command makes * the next response randomly malformed (by truncating it). * diff --git a/src/testing/test_exchange_api_twisted.c b/src/testing/test_exchange_api_twisted.c index c99c7410d..25cee058c 100644 --- a/src/testing/test_exchange_api_twisted.c +++ b/src/testing/test_exchange_api_twisted.c @@ -33,7 +33,7 @@ #include "taler_bank_service.h" #include "taler_fakebank_lib.h" #include "taler_testing_lib.h" -#include <taler/taler_twister_testing_lib.h> +#include "taler_twister_testing_lib.h" #include <taler/taler_twister_service.h> /** @@ -153,7 +153,8 @@ run (void *cls, * NOTE: not all CMDs actually need the twister, * so it may be better to move those into the "main" * lib test suite. - */struct TALER_TESTING_Command refund[] = { + */ + struct TALER_TESTING_Command refund[] = { CMD_TRANSFER_TO_EXCHANGE ("create-reserve-r1", "EUR:5.01"), CMD_EXEC_WIREWATCH ("wirewatch-r1"), @@ -208,11 +209,39 @@ run (void *cls, TALER_TESTING_cmd_end () }; + /** + * Test that we don't get errors when the keys from the exchange + * are out of date. + */ + struct TALER_TESTING_Command expired_keys[] = { + TALER_TESTING_cmd_modify_header_dl ("modify-expiration", + CONFIG_FILE, + MHD_HTTP_HEADER_EXPIRES, + "Wed, 19 Jan 586524 08:01:49 GMT"), + TALER_TESTING_cmd_check_keys_pull_all_keys ( + "check-keys-expiration-0", + 2, + 5), + /** + * Run some normal commands after this to make sure everything is fine. + */ + CMD_TRANSFER_TO_EXCHANGE ("create-reserve-r2", + "EUR:55.01"), + CMD_EXEC_WIREWATCH ("wirewatch-r2"), + TALER_TESTING_cmd_withdraw_amount ("withdraw-coin-r2", + "create-reserve-r2", + "EUR:5", + MHD_HTTP_OK), + TALER_TESTING_cmd_end () + }; + struct TALER_TESTING_Command commands[] = { TALER_TESTING_cmd_batch ("refresh-reveal-409-conflict", refresh_409_conflict), TALER_TESTING_cmd_batch ("refund", refund), + TALER_TESTING_cmd_batch ("expired-keys", + expired_keys), TALER_TESTING_cmd_end () }; diff --git a/src/testing/testing_api_cmd_twister_exec_client.c b/src/testing/testing_api_cmd_twister_exec_client.c index bfcfe4591..3f1fefabe 100644 --- a/src/testing/testing_api_cmd_twister_exec_client.c +++ b/src/testing/testing_api_cmd_twister_exec_client.c @@ -496,6 +496,39 @@ modify_object_ul_run (void *cls, /** + * Run a "modify header" CMD + * + * @param cls closure. + * @param cmd the command being run. + * @param is the interpreter state. + */ +static void +modify_header_dl_run (void *cls, + const struct TALER_TESTING_Command *cmd, + struct TALER_TESTING_Interpreter *is) +{ + struct ModifyObjectState *mos = cls; + + mos->proc = GNUNET_OS_start_process (GNUNET_NO, + GNUNET_OS_INHERIT_STD_ALL, + NULL, NULL, NULL, + "taler-twister", + "taler-twister", + "-H", mos->path, + "--value", mos->value, + "-c", mos->config_filename, + NULL); + if (NULL == mos->proc) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (is); + return; + } + TALER_TESTING_wait_for_sigchld (is); +} + + +/** * Create a "delete object" CMD. This command deletes * the JSON object pointed by @a path. * @@ -1020,4 +1053,39 @@ TALER_TESTING_cmd_modify_object_ul (const char *label, } +/** + * Create a "modify header" CMD. This command instructs + * the twister to modify a header in the next HTTP response. + * + * @param label command label + * @param config_filename configuration filename. + * @param header name of the header to modify. + * @param value value to set the header to. + * @return the command + */ +struct TALER_TESTING_Command +TALER_TESTING_cmd_modify_header_dl (const char *label, + const char *config_filename, + const char *path, + const char *value) +{ + struct ModifyObjectState *mos; + + mos = GNUNET_new (struct ModifyObjectState); + mos->path = path; + mos->value = value; + mos->config_filename = config_filename; + + struct TALER_TESTING_Command cmd = { + .label = label, + .run = &modify_header_dl_run, + .cleanup = &modify_object_cleanup, + .traits = &modify_object_traits, + .cls = mos + }; + + return cmd; +} + + /* end of testing_api_cmd_exec_client.c */ |