diff options
author | Özgür Kesim <oec-taler@kesim.org> | 2023-06-10 11:07:06 +0200 |
---|---|---|
committer | Özgür Kesim <oec-taler@kesim.org> | 2023-06-10 11:07:06 +0200 |
commit | 70bfe0ed1b9a5dbb6cc487465ef3c3df4cdb0436 (patch) | |
tree | 5f32b30f5b58dfc502c273bebecffbcb79fc3c4b /src/testing/testing_api_cmd_rewind.c | |
parent | 46188ae07e97d12b73269167459707844b3c2486 (diff) | |
parent | d8f8c550bd7ad85f9da9bc5edba619e533eabcc8 (diff) | |
download | exchange-70bfe0ed1b9a5dbb6cc487465ef3c3df4cdb0436.tar.xz |
Merge branch 'master' into age-withdraw
Diffstat (limited to 'src/testing/testing_api_cmd_rewind.c')
-rw-r--r-- | src/testing/testing_api_cmd_rewind.c | 197 |
1 files changed, 0 insertions, 197 deletions
diff --git a/src/testing/testing_api_cmd_rewind.c b/src/testing/testing_api_cmd_rewind.c deleted file mode 100644 index 93b38d3c3..000000000 --- a/src/testing/testing_api_cmd_rewind.c +++ /dev/null @@ -1,197 +0,0 @@ -/* - This file is part of TALER - Copyright (C) 2014-2020 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_cmd_rewind.c - * @brief command to rewind the instruction pointer. - * @author Marcello Stanisci - * @author Christian Grothoff - */ -#include "platform.h" -#include "taler_exchange_service.h" -#include "taler_testing_lib.h" - - -/** - * State for a "rewind" CMD. - */ -struct RewindIpState -{ - /** - * Instruction pointer to set into the interpreter. - */ - const char *target_label; - - /** - * How many times this set should take place. However, this value lives at - * the calling process, and this CMD is only in charge of checking and - * decremeting it. - */ - unsigned int counter; -}; - - -/** - * Seek for the @a target command in @a batch (and rewind to it - * if successful). - * - * @param is the interpreter state (for failures) - * @param cmd batch to search for @a target - * @param target command to search for - * @return #GNUNET_OK on success, #GNUNET_NO if target was not found, - * #GNUNET_SYSERR if target is in the future and we failed - */ -static enum GNUNET_GenericReturnValue -seek_batch (struct TALER_TESTING_Interpreter *is, - const struct TALER_TESTING_Command *cmd, - const struct TALER_TESTING_Command *target) -{ - unsigned int new_ip; - struct TALER_TESTING_Command **batch; - struct TALER_TESTING_Command *current; - struct TALER_TESTING_Command *icmd; - struct TALER_TESTING_Command *match; - - current = TALER_TESTING_cmd_batch_get_current (cmd); - GNUNET_assert (GNUNET_OK == - TALER_TESTING_get_trait_batch_cmds (cmd, - &batch)); - match = NULL; - for (new_ip = 0; - NULL != (icmd = &(*batch)[new_ip]); - new_ip++) - { - if (current == target) - current = NULL; - if (icmd == target) - { - match = icmd; - break; - } - if (TALER_TESTING_cmd_is_batch (icmd)) - { - int ret = seek_batch (is, - icmd, - target); - if (GNUNET_SYSERR == ret) - return GNUNET_SYSERR; /* failure! */ - if (GNUNET_OK == ret) - { - match = icmd; - break; - } - } - } - if (NULL == current) - { - /* refuse to jump forward */ - GNUNET_break (0); - TALER_TESTING_interpreter_fail (is); - return GNUNET_SYSERR; - } - if (NULL == match) - return GNUNET_NO; /* not found */ - TALER_TESTING_cmd_batch_set_current (cmd, - new_ip); - return GNUNET_OK; -} - - -/** - * Run the "rewind" CMD. - * - * @param cls closure. - * @param cmd command being executed now. - * @param is the interpreter state. - */ -static void -rewind_ip_run (void *cls, - const struct TALER_TESTING_Command *cmd, - struct TALER_TESTING_Interpreter *is) -{ - struct RewindIpState *ris = cls; - const struct TALER_TESTING_Command *target; - unsigned int new_ip; - - (void) cmd; - if (0 == ris->counter) - { - TALER_TESTING_interpreter_next (is); - return; - } - target - = TALER_TESTING_interpreter_lookup_command (is, - ris->target_label); - if (NULL == target) - { - GNUNET_break (0); - TALER_TESTING_interpreter_fail (is); - return; - } - ris->counter--; - for (new_ip = 0; - NULL != is->commands[new_ip].label; - new_ip++) - { - const struct TALER_TESTING_Command *cmd = &is->commands[new_ip]; - - if (cmd == target) - break; - if (TALER_TESTING_cmd_is_batch (cmd)) - { - int ret = seek_batch (is, - cmd, - target); - if (GNUNET_SYSERR == ret) - return; /* failure! */ - if (GNUNET_OK == ret) - break; - } - } - if (new_ip > (unsigned int) is->ip) - { - /* refuse to jump forward */ - GNUNET_break (0); - TALER_TESTING_interpreter_fail (is); - return; - } - is->ip = new_ip - 1; /* -1 because the next function will advance by one */ - TALER_TESTING_interpreter_next (is); -} - - -struct TALER_TESTING_Command -TALER_TESTING_cmd_rewind_ip (const char *label, - const char *target_label, - unsigned int counter) -{ - struct RewindIpState *ris; - - ris = GNUNET_new (struct RewindIpState); - ris->target_label = target_label; - ris->counter = counter; - { - struct TALER_TESTING_Command cmd = { - .cls = ris, - .label = label, - .run = &rewind_ip_run - }; - - return cmd; - } -} |