From f39e8c62450a13705722563401410c7ebd7da0d8 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 29 Nov 2019 21:23:31 +0100 Subject: more work on testing logic --- src/include/sync_testing_lib.h | 20 +-- src/lib/test_sync_api.c | 6 +- .../.local/share/taler/auditors/auditor.out | Bin 42328 -> 42328 bytes src/lib/testing_api_cmd_backup_upload.c | 158 ++++++++++++++++++--- src/lib/testing_api_helpers.c | 6 +- src/lib/testing_api_trait_account_priv.c | 2 +- src/lib/testing_api_trait_account_pub.c | 2 +- src/lib/testing_api_trait_hash.c | 2 +- 8 files changed, 162 insertions(+), 34 deletions(-) diff --git a/src/include/sync_testing_lib.h b/src/include/sync_testing_lib.h index 25594e1..79e7eec 100644 --- a/src/include/sync_testing_lib.h +++ b/src/include/sync_testing_lib.h @@ -63,8 +63,8 @@ SYNC_TESTING_get_trait_hash (const struct TALER_TESTING_Command *cmd, * @return #GNUNET_OK on success. */ struct TALER_TESTING_Trait -TALER_TESTING_make_trait_hash (unsigned int index, - const struct GNUNET_HashCode *h); +SYNC_TESTING_make_trait_hash (unsigned int index, + const struct GNUNET_HashCode *h); /** @@ -89,8 +89,8 @@ SYNC_TESTING_get_trait_account_pub (const struct TALER_TESTING_Command *cmd, * @return #GNUNET_OK on success. */ struct TALER_TESTING_Trait -TALER_TESTING_make_trait_account_pub (unsigned int index, - const struct SYNC_AccountPublicKeyP *h); +SYNC_TESTING_make_trait_account_pub (unsigned int index, + const struct SYNC_AccountPublicKeyP *h); /** @@ -116,9 +116,9 @@ SYNC_TESTING_get_trait_account_priv (const struct TALER_TESTING_Command *cmd, * @return #GNUNET_OK on success. */ struct TALER_TESTING_Trait -TALER_TESTING_make_trait_account_priv (unsigned int index, - const struct - SYNC_AccountPrivateKeyP *priv); +SYNC_TESTING_make_trait_account_priv (unsigned int index, + const struct + SYNC_AccountPrivateKeyP *priv); /** @@ -132,8 +132,8 @@ TALER_TESTING_make_trait_account_priv (unsigned int index, * be started. */ struct GNUNET_OS_Process * -TALER_TESTING_run_sync (const char *config_filename, - const char *sync_url); +SYNC_TESTING_run_sync (const char *config_filename, + const char *sync_url); /** @@ -145,7 +145,7 @@ TALER_TESTING_run_sync (const char *config_filename, * by the caller. */ char * -TALER_TESTING_prepare_sync (const char *config_filename); +SYNC_TESTING_prepare_sync (const char *config_filename); /** diff --git a/src/lib/test_sync_api.c b/src/lib/test_sync_api.c index 3403127..9f18d39 100644 --- a/src/lib/test_sync_api.c +++ b/src/lib/test_sync_api.c @@ -249,6 +249,7 @@ run (void *cls, fakebank_url); } + int main (int argc, char *const *argv) @@ -271,7 +272,7 @@ main (int argc, return 77; if (NULL == - (sync_url = TALER_TESTING_prepare_sync (CONFIG_FILE))) + (sync_url = SYNC_TESTING_prepare_sync (CONFIG_FILE))) return 77; TALER_TESTING_cleanup_files (CONFIG_FILE); @@ -293,7 +294,7 @@ main (int argc, return 1; if (NULL == (syncd = - TALER_TESTING_run_sync (CONFIG_FILE, sync_url))) + SYNC_TESTING_run_sync (CONFIG_FILE, sync_url))) return 1; ret = TALER_TESTING_setup_with_exchange (&run, @@ -319,4 +320,5 @@ main (int argc, return 0; } + /* end of test_sync_api.c */ diff --git a/src/lib/test_sync_api_home/.local/share/taler/auditors/auditor.out b/src/lib/test_sync_api_home/.local/share/taler/auditors/auditor.out index a15de52..5af8228 100644 Binary files a/src/lib/test_sync_api_home/.local/share/taler/auditors/auditor.out and b/src/lib/test_sync_api_home/.local/share/taler/auditors/auditor.out differ diff --git a/src/lib/testing_api_cmd_backup_upload.c b/src/lib/testing_api_cmd_backup_upload.c index 6880205..9809942 100644 --- a/src/lib/testing_api_cmd_backup_upload.c +++ b/src/lib/testing_api_cmd_backup_upload.c @@ -26,6 +26,7 @@ #include "sync_testing_lib.h" #include #include +#include "sync_testing_lib.h" /** * State for a "backup upload" CMD. @@ -136,9 +137,56 @@ backup_upload_cb (void *cls, TALER_TESTING_interpreter_fail (bus->is); return; } - - // FIXME: check ud, store result! - + if (NULL != ud) + { + switch (ud->us) + { + case SYNC_US_SUCCESS: + if (0 != GNUNET_memcmp (&bus->curr_hash, + ud->details.curr_backup_hash)) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (bus->is); + return; + } + break; + case SYNC_US_PAYMENT_REQUIRED: + bus->payment_order_id = GNUNET_strdup (ud->details.payment_request); + break; + case SYNC_US_CONFLICTING_BACKUP: + { + const struct TALER_TESTING_Command *ref; + const struct GNUNET_HashCode *h; + + ref = TALER_TESTING_interpreter_lookup_command + (bus->is, + bus->prev_upload); + GNUNET_assert (NULL != ref); + GNUNET_assert (GNUNET_OK == + SYNC_TESTING_get_trait_hash (ref, + SYNC_TESTING_TRAIT_HASH_CURRENT, + &h)); + if (0 != GNUNET_memcmp (h, + &ud->details.recovered_backup. + existing_backup_hash)) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (bus->is); + return; + } + } + case SYNC_US_HTTP_ERROR: + break; + case SYNC_US_CLIENT_ERROR: + GNUNET_break (0); + TALER_TESTING_interpreter_fail (bus->is); + return; + case SYNC_US_SERVER_ERROR: + GNUNET_break (0); + TALER_TESTING_interpreter_fail (bus->is); + return; + } + } TALER_TESTING_interpreter_next (bus->is); } @@ -161,7 +209,6 @@ backup_upload_run (void *cls, if (NULL != bus->prev_upload) { const struct TALER_TESTING_Command *ref; - const struct BackupUploadState *prev; ref = TALER_TESTING_interpreter_lookup_command (is, @@ -172,19 +219,62 @@ backup_upload_run (void *cls, TALER_TESTING_interpreter_fail (bus->is); return; } - if (ref->run != &backup_upload_run) { - GNUNET_break (0); - TALER_TESTING_interpreter_fail (bus->is); - return; + const struct GNUNET_HashCode *h; + + if (GNUNET_OK != + SYNC_TESTING_get_trait_hash (ref, + SYNC_TESTING_TRAIT_HASH_CURRENT, + &h)) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (bus->is); + return; + } + bus->prev_hash = *h; + } + { + const struct SYNC_AccountPrivateKeyP *priv; + + if (GNUNET_OK != + SYNC_TESTING_get_trait_account_priv (ref, + 0, + &priv)) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (bus->is); + return; + } + bus->sync_priv = *priv; + } + { + const struct SYNC_AccountPublicKeyP *pub; + + if (GNUNET_OK != + SYNC_TESTING_get_trait_account_pub (ref, + 0, + &pub)) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (bus->is); + return; + } + bus->sync_pub = *pub; } - prev = ref->cls; - bus->sync_priv = prev->sync_priv; - bus->sync_pub = prev->sync_pub; - bus->prev_hash = prev->curr_hash; if (0 != (SYNC_TESTING_UO_REFERENCE_ORDER_ID & bus->uopt)) { - bus->payment_order_req = prev->payment_order_id; + const char *order_id; + + if (GNUNET_OK != + TALER_TESTING_get_trait_order_id (ref, + 0, + &order_id)) + { + GNUNET_break (0); + TALER_TESTING_interpreter_fail (bus->is); + return; + } + bus->payment_order_req = order_id; if (NULL == bus->payment_order_req) { GNUNET_break (0); @@ -255,6 +345,43 @@ backup_upload_cleanup (void *cls, } +/** + * Offer internal data to other commands. + * + * @param cls closure + * @param ret[out] result (could be anything) + * @param trait name of the trait + * @param index index number of the object to extract. + * @return #GNUNET_OK on success + */ +static int +backup_upload_traits (void *cls, + const void **ret, + const char *trait, + unsigned int index) +{ + struct BackupUploadState *bus = cls; + struct TALER_TESTING_Trait traits[] = { + SYNC_TESTING_make_trait_hash (SYNC_TESTING_TRAIT_HASH_CURRENT, + &bus->curr_hash), + SYNC_TESTING_make_trait_hash (SYNC_TESTING_TRAIT_HASH_PREVIOUS, + &bus->prev_hash), + SYNC_TESTING_make_trait_account_pub (0, + &bus->sync_pub), + SYNC_TESTING_make_trait_account_priv (0, + &bus->sync_priv), + TALER_TESTING_make_trait_order_id (0, + bus->payment_order_id), + TALER_TESTING_trait_end () + }; + + return TALER_TESTING_get_trait (traits, + ret, + trait, + index); +} + + /** * Make the "backup upload" command. * @@ -288,14 +415,13 @@ SYNC_TESTING_cmd_backup_upload (const char *label, bus->sync_url = sync_url; bus->backup = backup_data; bus->backup_size = backup_data_size; - // FIXME: traits! - { struct TALER_TESTING_Command cmd = { .cls = bus, .label = label, .run = &backup_upload_run, - .cleanup = &backup_upload_cleanup + .cleanup = &backup_upload_cleanup, + .traits = &backup_upload_traits }; return cmd; diff --git a/src/lib/testing_api_helpers.c b/src/lib/testing_api_helpers.c index a55b038..7b6e6ad 100644 --- a/src/lib/testing_api_helpers.c +++ b/src/lib/testing_api_helpers.c @@ -39,8 +39,8 @@ * be started. */ struct GNUNET_OS_Process * -TALER_TESTING_run_sync (const char *config_filename, - const char *sync_url) +SYNC_TESTING_run_sync (const char *config_filename, + const char *sync_url) { struct GNUNET_OS_Process *sync_proc; unsigned int iter; @@ -104,7 +104,7 @@ TALER_TESTING_run_sync (const char *config_filename, * by the caller. */ char * -TALER_TESTING_prepare_sync (const char *config_filename) +SYNC_TESTING_prepare_sync (const char *config_filename) { struct GNUNET_CONFIGURATION_Handle *cfg; unsigned long long port; diff --git a/src/lib/testing_api_trait_account_priv.c b/src/lib/testing_api_trait_account_priv.c index 213ca34..b8bfb5b 100644 --- a/src/lib/testing_api_trait_account_priv.c +++ b/src/lib/testing_api_trait_account_priv.c @@ -57,7 +57,7 @@ SYNC_TESTING_get_trait_account_priv * @return #GNUNET_OK on success. */ struct TALER_TESTING_Trait -TALER_TESTING_make_trait_account_priv +SYNC_TESTING_make_trait_account_priv (unsigned int index, const struct SYNC_AccountPrivateKeyP *priv) { diff --git a/src/lib/testing_api_trait_account_pub.c b/src/lib/testing_api_trait_account_pub.c index f5bbdeb..9fecb18 100644 --- a/src/lib/testing_api_trait_account_pub.c +++ b/src/lib/testing_api_trait_account_pub.c @@ -57,7 +57,7 @@ SYNC_TESTING_get_trait_account_pub * @return #GNUNET_OK on success. */ struct TALER_TESTING_Trait -TALER_TESTING_make_trait_account_pub +SYNC_TESTING_make_trait_account_pub (unsigned int index, const struct SYNC_AccountPublicKeyP *h) { diff --git a/src/lib/testing_api_trait_hash.c b/src/lib/testing_api_trait_hash.c index 810174d..10b10d8 100644 --- a/src/lib/testing_api_trait_hash.c +++ b/src/lib/testing_api_trait_hash.c @@ -57,7 +57,7 @@ SYNC_TESTING_get_trait_hash * @return #GNUNET_OK on success. */ struct TALER_TESTING_Trait -TALER_TESTING_make_trait_hash +SYNC_TESTING_make_trait_hash (unsigned int index, const struct GNUNET_HashCode *h) { -- cgit v1.2.3