avoid failing hard if 'gnunetcheck' db does not exist
authorChristian Grothoff <christian@grothoff.org>
Sun, 24 Feb 2019 09:28:16 +0000 (10:28 +0100)
committerChristian Grothoff <christian@grothoff.org>
Sun, 24 Feb 2019 09:28:16 +0000 (10:28 +0100)
 (or plugins cannot be loaded for other reasons)

src/namestore/Makefile.am
src/namestore/perf_namestore_api_zone_iteration.c
src/namestore/test_common.c [new file with mode: 0644]
src/namestore/test_namestore_api_lookup_nick.c
src/namestore/test_namestore_api_lookup_private.c
src/namestore/test_namestore_api_lookup_public.c
src/namestore/test_namestore_api_lookup_shadow_filter.c
src/namestore/test_namestore_api_monitoring.c
src/namestore/test_namestore_api_store.c
src/namestore/test_namestore_api_store_update.c
src/namestore/test_namestore_api_zone_iteration.c

index c9ff763fdc3868c9988a85d4a9ff0f8ba30fa4a3..ac4eebd0674f103aa00056a75aa9c008232049d7 100644 (file)
@@ -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 \
index 505f624df3d42896e0113561d668640001f4f9f1..5da958aad375062508dc2f110bf31b1d376fd5fd 100644 (file)
@@ -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 (file)
index 0000000..0dc6f92
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.
+
+     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)
index 8f289635925a6ff4b4dff770d1f9d581d7ca8a0b..1257701e91e98a1bfcd6dee52657ff4714bca30a 100644 (file)
@@ -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",
index 0730db04ce8fca783d5ff53910859346c88b5dd5..2615f52c8b20b994550cb49d43bbb4f69c697fe4 100644 (file)
@@ -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",
index 2a75d42f3908ec2a69ddc00da5fcc769cac44a7c..460be0a185a0219190fe940e0567634c8c9a2423 100644 (file)
@@ -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",
index 0347eafcc5c6962cdcaa458dffb2d95197af3d30..3d1dbfacfc106df0fb277f7f861b6a3e376dab8e 100644 (file)
@@ -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",
index 4aed21d8690dee3b081362242ad52cab6cb8b6ce..c85ec8457467aab2a3d473beda25f82a689a969b 100644 (file)
@@ -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",
index 4fe77a2c69bdd8b5acd60898b61a37c2c1419c58..0dbad8ce34ae1df11285363ca5078568fb7a4735 100644 (file)
@@ -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,
index aad5852e93c7fc286065fcff64ee3df399d5584f..b1c0770ae193e83bc55de6029c6b65e1aed30d50 100644 (file)
@@ -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,
index d09505db1b7c3bdf46de5910ffa5eb765eea4609..fa641954be0f4ea2855df4c75bf28dca8bf7c7ff 100644 (file)
@@ -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",