Line data Source code
1 : /* 2 : This file is part of 3 : (C) 2023 Taler Systems SA 4 : 5 : Challenger is free software; you can redistribute it and/or modify it under the 6 : terms of the GNU Lesser General Public License as published by the Free Software 7 : Foundation; either version 3, or (at your option) any later version. 8 : 9 : Challenger is distributed in the hope that it will be useful, but WITHOUT ANY 10 : WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR 11 : A PARTICULAR PURPOSE. See the GNU General Public License for more details. 12 : 13 : You should have received a copy of the GNU General Public License along with 14 : Challenger; see the file COPYING. If not, see <http://www.gnu.org/licenses/> 15 : */ 16 : /** 17 : * @file sync/test_sync_db.c 18 : * @brief testcase for sync postgres db plugin 19 : * @author Christian Grothoff 20 : */ 21 : #include "platform.h" 22 : #include <gnunet/gnunet_util_lib.h> 23 : #include <taler/taler_util.h> 24 : #include "challenger_database_plugin.h" 25 : #include "challenger_database_lib.h" 26 : #include "challenger_util.h" 27 : 28 : 29 : #define FAILIF(cond) \ 30 : do { \ 31 : if (! (cond)) { break;} \ 32 : GNUNET_break (0); \ 33 : goto drop; \ 34 : } while (0) 35 : 36 : #define RND_BLK(ptr) \ 37 : GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_WEAK, ptr, sizeof (* \ 38 : ptr)) 39 : 40 : /** 41 : * Global return value for the test. Initially -1, set to 0 upon 42 : * completion. Other values indicate some kind of error. 43 : */ 44 : static int result; 45 : 46 : /** 47 : * Handle to the plugin we are testing. 48 : */ 49 : static struct CHALLENGER_DatabasePlugin *plugin; 50 : 51 : 52 : /** 53 : * Main function that will be run by the scheduler. 54 : * 55 : * @param cls closure with config 56 : */ 57 : static void 58 1 : run (void *cls) 59 : { 60 1 : struct GNUNET_CONFIGURATION_Handle *cfg = cls; 61 : 62 1 : if (NULL == (plugin = CHALLENGER_DB_plugin_load (cfg, 63 : true))) 64 : { 65 0 : result = 77; 66 0 : return; 67 : } 68 1 : if (GNUNET_OK != 69 1 : plugin->drop_tables (plugin->cls)) 70 : { 71 1 : GNUNET_log (GNUNET_ERROR_TYPE_INFO, 72 : "Dropping tables failed\n"); 73 : } 74 1 : if (GNUNET_OK != 75 1 : plugin->create_tables (plugin->cls)) 76 : { 77 0 : GNUNET_log (GNUNET_ERROR_TYPE_INFO, 78 : "Creating tables failed\n"); 79 : } 80 1 : GNUNET_assert (GNUNET_OK == 81 : plugin->preflight (plugin->cls)); 82 : { 83 1 : struct GNUNET_TIME_Absolute ts = GNUNET_TIME_absolute_get (); 84 : 85 1 : FAILIF (0 > 86 : plugin->gc (plugin->cls, 87 : ts)); 88 : } 89 1 : result = 0; 90 1 : drop: 91 1 : GNUNET_break (GNUNET_OK == 92 : plugin->drop_tables (plugin->cls)); 93 1 : CHALLENGER_DB_plugin_unload (plugin); 94 1 : plugin = NULL; 95 : } 96 : 97 : 98 : int 99 1 : main (int argc, 100 : char *const argv[]) 101 : { 102 : const char *plugin_name; 103 : char *config_filename; 104 : char *testname; 105 : struct GNUNET_CONFIGURATION_Handle *cfg; 106 : 107 : (void) argc; 108 1 : result = EXIT_FAILURE; 109 1 : if (NULL == (plugin_name = strrchr (argv[0], (int) '-'))) 110 : { 111 0 : GNUNET_break (0); 112 0 : return EXIT_FAILURE; 113 : } 114 1 : GNUNET_log_setup (argv[0], 115 : "DEBUG", 116 : NULL); 117 1 : plugin_name++; 118 1 : (void) GNUNET_asprintf (&testname, 119 : "%s", 120 : plugin_name); 121 1 : (void) GNUNET_asprintf (&config_filename, 122 : "test_challenger_db_%s.conf", 123 : testname); 124 1 : cfg = GNUNET_CONFIGURATION_create (CHALLENGER_project_data ()); 125 1 : if (GNUNET_OK != 126 1 : GNUNET_CONFIGURATION_parse (cfg, 127 : config_filename)) 128 : { 129 0 : GNUNET_break (0); 130 0 : GNUNET_free (config_filename); 131 0 : GNUNET_free (testname); 132 0 : return EXIT_NOTCONFIGURED; 133 : } 134 1 : GNUNET_SCHEDULER_run (&run, cfg); 135 1 : GNUNET_CONFIGURATION_destroy (cfg); 136 1 : GNUNET_free (config_filename); 137 1 : GNUNET_free (testname); 138 1 : return result; 139 : } 140 : 141 : 142 : /* end of test_challenger_db.c */