From 0b5dc8a620fca8dbca9c122594b70267e404859f Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sun, 24 Feb 2019 10:28:16 +0100 Subject: [PATCH] avoid failing hard if 'gnunetcheck' db does not exist (or plugins cannot be loaded for other reasons) --- src/namestore/Makefile.am | 1 + .../perf_namestore_api_zone_iteration.c | 17 ++-- src/namestore/test_common.c | 89 +++++++++++++++++++ .../test_namestore_api_lookup_nick.c | 9 +- .../test_namestore_api_lookup_private.c | 10 +-- .../test_namestore_api_lookup_public.c | 10 +-- .../test_namestore_api_lookup_shadow_filter.c | 10 +-- src/namestore/test_namestore_api_monitoring.c | 10 +-- src/namestore/test_namestore_api_store.c | 11 +-- .../test_namestore_api_store_update.c | 10 +-- .../test_namestore_api_zone_iteration.c | 16 ++-- 11 files changed, 134 insertions(+), 59 deletions(-) create mode 100644 src/namestore/test_common.c diff --git a/src/namestore/Makefile.am b/src/namestore/Makefile.am index c9ff763fd..ac4eebd06 100644 --- a/src/namestore/Makefile.am +++ b/src/namestore/Makefile.am @@ -662,6 +662,7 @@ check_SCRIPTS = \ test_namestore_delete.sh EXTRA_DIST = \ + test_common.c \ test_namestore_api.conf \ test_namestore_api_postgres.conf \ test_namestore_api_sqlite.conf \ diff --git a/src/namestore/perf_namestore_api_zone_iteration.c b/src/namestore/perf_namestore_api_zone_iteration.c index 505f624df..5da958aad 100644 --- a/src/namestore/perf_namestore_api_zone_iteration.c +++ b/src/namestore/perf_namestore_api_zone_iteration.c @@ -276,7 +276,12 @@ put_cont (void *cls, { (void) cls; qe = NULL; - GNUNET_assert (GNUNET_OK == success); + if (GNUNET_OK != success) + { + GNUNET_break (0); + GNUNET_SCHEDULER_shutdown (); + return; + } t = GNUNET_SCHEDULER_add_now (&publish_record, NULL); } @@ -349,6 +354,9 @@ run (void *cls, } +#include "test_common.c" + + int main (int argc, char *argv[]) @@ -356,13 +364,8 @@ main (int argc, const char *plugin_name; char *cfg_name; - plugin_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]); - GNUNET_asprintf (&cfg_name, - "perf_namestore_api_%s.conf", - plugin_name); + SETUP_CFG (plugin_name, cfg_name); res = 1; - GNUNET_DISK_purge_cfg_dir (cfg_name, - "GNUNET_TEST_HOME"); if (0 != GNUNET_TESTING_peer_run ("perf-namestore-api-zone-iteration", cfg_name, diff --git a/src/namestore/test_common.c b/src/namestore/test_common.c new file mode 100644 index 000000000..0dc6f9277 --- /dev/null +++ b/src/namestore/test_common.c @@ -0,0 +1,89 @@ +/* + This file is part of GNUnet. + Copyright (C) 2019 GNUnet e.V. + + GNUnet 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 of the License, + or (at your option) any later version. + + GNUnet 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. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + SPDX-License-Identifier: AGPL3.0-or-later +*/ +/** + * @file namestore/test_common.c + * @brief common functions for testcase setup + */ + +/** + * test if we can load the plugin @a name. + */ +static int +TNC_test_plugin (const char *cfg_name) +{ + char *database; + char *db_lib_name; + struct GNUNET_NAMESTORE_PluginFunctions *db; + struct GNUNET_CONFIGURATION_Handle *cfg; + + cfg = GNUNET_CONFIGURATION_create (); + if (GNUNET_OK != + GNUNET_CONFIGURATION_load (cfg, + cfg_name)) + { + GNUNET_break (0); + GNUNET_CONFIGURATION_destroy (cfg); + return GNUNET_SYSERR; + } + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_string (cfg, + "namestore", + "database", + &database)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "No database backend configured\n"); + GNUNET_CONFIGURATION_destroy (cfg); + return GNUNET_SYSERR; + } + GNUNET_asprintf (&db_lib_name, + "libgnunet_plugin_namestore_%s", + database); + db = GNUNET_PLUGIN_load (db_lib_name, + (void *) cfg); + if (NULL != db) + GNUNET_break (NULL == + GNUNET_PLUGIN_unload (db_lib_name, + db)); + GNUNET_free (db_lib_name); + GNUNET_CONFIGURATION_destroy (cfg); + if (NULL == db) + return GNUNET_NO; + return GNUNET_YES; +} + + +/** + * General setup logic for starting the tests. Obtains the @a + * plugin_name and initializes the @a cfg_name. + */ +#define SETUP_CFG(plugin_name,cfg_name) do { \ + plugin_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]); \ + GNUNET_asprintf (&cfg_name, \ + "test_namestore_api_%s.conf", \ + plugin_name); \ + if (! TNC_test_plugin (cfg_name)) \ + { \ + GNUNET_free (cfg_name); \ + return 77; \ + } \ + GNUNET_DISK_purge_cfg_dir (cfg_name, \ + "GNUNET_TEST_HOME"); \ + } while (0) diff --git a/src/namestore/test_namestore_api_lookup_nick.c b/src/namestore/test_namestore_api_lookup_nick.c index 8f2896359..1257701e9 100644 --- a/src/namestore/test_namestore_api_lookup_nick.c +++ b/src/namestore/test_namestore_api_lookup_nick.c @@ -306,6 +306,8 @@ run (void *cls, } } +#include "test_common.c" + int main (int argc, char *argv[]) @@ -313,12 +315,7 @@ main (int argc, char *argv[]) const char *plugin_name; char *cfg_name; - plugin_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]); - GNUNET_asprintf (&cfg_name, - "test_namestore_api_%s.conf", - plugin_name); - GNUNET_DISK_purge_cfg_dir (cfg_name, - "GNUNET_TEST_HOME"); + SETUP_CFG (plugin_name, cfg_name); res = 1; if (0 != GNUNET_TESTING_peer_run ("test-namestore-api-lookup-nick", diff --git a/src/namestore/test_namestore_api_lookup_private.c b/src/namestore/test_namestore_api_lookup_private.c index 0730db04c..2615f52c8 100644 --- a/src/namestore/test_namestore_api_lookup_private.c +++ b/src/namestore/test_namestore_api_lookup_private.c @@ -223,18 +223,16 @@ run (void *cls, } +#include "test_common.c" + + int main (int argc, char *argv[]) { const char *plugin_name; char *cfg_name; - plugin_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]); - GNUNET_asprintf (&cfg_name, - "test_namestore_api_%s.conf", - plugin_name); - GNUNET_DISK_purge_cfg_dir (cfg_name, - "GNUNET_TEST_HOME"); + SETUP_CFG(plugin_name, cfg_name); res = 1; if (0 != GNUNET_TESTING_peer_run ("test-namestore-api-lookup-private", diff --git a/src/namestore/test_namestore_api_lookup_public.c b/src/namestore/test_namestore_api_lookup_public.c index 2a75d42f3..460be0a18 100644 --- a/src/namestore/test_namestore_api_lookup_public.c +++ b/src/namestore/test_namestore_api_lookup_public.c @@ -223,18 +223,16 @@ run (void *cls, } +#include "test_common.c" + + int main (int argc, char *argv[]) { const char *plugin_name; char *cfg_name; - plugin_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]); - GNUNET_asprintf (&cfg_name, - "test_namestore_api_%s.conf", - plugin_name); - GNUNET_DISK_purge_cfg_dir (cfg_name, - "GNUNET_TEST_HOME"); + SETUP_CFG (plugin_name, cfg_name); res = 1; if (0 != GNUNET_TESTING_peer_run ("test-namestore-api", diff --git a/src/namestore/test_namestore_api_lookup_shadow_filter.c b/src/namestore/test_namestore_api_lookup_shadow_filter.c index 0347eafcc..3d1dbfacf 100644 --- a/src/namestore/test_namestore_api_lookup_shadow_filter.c +++ b/src/namestore/test_namestore_api_lookup_shadow_filter.c @@ -333,18 +333,16 @@ run (void *cls, } +#include "test_common.c" + + int main (int argc, char *argv[]) { const char *plugin_name; char *cfg_name; - plugin_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]); - GNUNET_asprintf (&cfg_name, - "test_namestore_api_%s.conf", - plugin_name); - GNUNET_DISK_purge_cfg_dir (cfg_name, - "GNUNET_TEST_HOME"); + SETUP_CFG (plugin_name, cfg_name); res = 1; if (0 != GNUNET_TESTING_peer_run ("test-namestore-api-lookup-shadow-filter", diff --git a/src/namestore/test_namestore_api_monitoring.c b/src/namestore/test_namestore_api_monitoring.c index 4aed21d86..c85ec8457 100644 --- a/src/namestore/test_namestore_api_monitoring.c +++ b/src/namestore/test_namestore_api_monitoring.c @@ -363,6 +363,9 @@ run (void *cls, } +#include "test_common.c" + + int main (int argc, char *argv[]) @@ -370,12 +373,7 @@ main (int argc, const char *plugin_name; char *cfg_name; - plugin_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]); - GNUNET_asprintf (&cfg_name, - "test_namestore_api_%s.conf", - plugin_name); - GNUNET_DISK_purge_cfg_dir (cfg_name, - "GNUNET_TEST_HOME"); + SETUP_CFG (plugin_name, cfg_name); res = 1; if (0 != GNUNET_TESTING_peer_run ("test-namestore-api-monitoring", diff --git a/src/namestore/test_namestore_api_store.c b/src/namestore/test_namestore_api_store.c index 4fe77a2c6..0dbad8ce3 100644 --- a/src/namestore/test_namestore_api_store.c +++ b/src/namestore/test_namestore_api_store.c @@ -144,24 +144,21 @@ run (void *cls, GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Namestore cannot store no block\n")); } - GNUNET_free ((void *)rd.data); } +#include "test_common.c" + + int main (int argc, char *argv[]) { const char *plugin_name; char *cfg_name; - plugin_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]); - GNUNET_asprintf (&cfg_name, - "test_namestore_api_%s.conf", - plugin_name); + SETUP_CFG (plugin_name, cfg_name); res = 1; - GNUNET_DISK_purge_cfg_dir (cfg_name, - "GNUNET_TEST_HOME"); if (0 != GNUNET_TESTING_peer_run ("test-namestore-api", cfg_name, diff --git a/src/namestore/test_namestore_api_store_update.c b/src/namestore/test_namestore_api_store_update.c index aad5852e9..b1c0770ae 100644 --- a/src/namestore/test_namestore_api_store_update.c +++ b/src/namestore/test_namestore_api_store_update.c @@ -283,6 +283,9 @@ run (void *cls, } +#include "test_common.c" + + int main (int argc, char *argv[]) @@ -290,13 +293,8 @@ main (int argc, const char *plugin_name; char *cfg_name; - plugin_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]); - GNUNET_asprintf (&cfg_name, - "test_namestore_api_%s.conf", - plugin_name); + SETUP_CFG (plugin_name, cfg_name); res = 1; - GNUNET_DISK_purge_cfg_dir (cfg_name, - "GNUNET_TEST_HOME"); if (0 != GNUNET_TESTING_peer_run ("test-namestore-api-store-update", cfg_name, diff --git a/src/namestore/test_namestore_api_zone_iteration.c b/src/namestore/test_namestore_api_zone_iteration.c index d09505db1..fa641954b 100644 --- a/src/namestore/test_namestore_api_zone_iteration.c +++ b/src/namestore/test_namestore_api_zone_iteration.c @@ -98,9 +98,9 @@ end (void *cls) GNUNET_free (privkey2); privkey2 = NULL; } - GNUNET_free (s_name_1); - GNUNET_free (s_name_2); - GNUNET_free (s_name_3); + GNUNET_free_non_null (s_name_1); + GNUNET_free_non_null (s_name_2); + GNUNET_free_non_null (s_name_3); if (NULL != s_rd_1) { GNUNET_free ((void *)s_rd_1->data); @@ -466,18 +466,16 @@ run (void *cls, } +#include "test_common.c" + + int main (int argc, char *argv[]) { const char *plugin_name; char *cfg_name; - plugin_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]); - GNUNET_asprintf (&cfg_name, - "test_namestore_api_%s.conf", - plugin_name); - GNUNET_DISK_purge_cfg_dir (cfg_name, - "GNUNET_TEST_HOME"); + SETUP_CFG (plugin_name, cfg_name); res = 1; if (0 != GNUNET_TESTING_peer_run ("test-namestore-api-zone-iteration", -- 2.25.1