From ae9918852bed2d822c12e110d6b754520e601388 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Wed, 20 Jul 2016 22:37:09 +0000 Subject: [PATCH] -skip mysql tests properly if mysql is not configured correctly --- src/datastore/test_datastore_api.c | 68 ++++++++++++++++++- src/datastore/test_datastore_api_management.c | 54 ++++++++++++++- 2 files changed, 119 insertions(+), 3 deletions(-) diff --git a/src/datastore/test_datastore_api.c b/src/datastore/test_datastore_api.c index 43f6e9fa6..9f89d4087 100644 --- a/src/datastore/test_datastore_api.c +++ b/src/datastore/test_datastore_api.c @@ -30,6 +30,7 @@ #include "gnunet_util_lib.h" #include "gnunet_protocols.h" #include "gnunet_datastore_service.h" +#include "gnunet_datastore_plugin.h" #include "gnunet_testing_lib.h" @@ -650,6 +651,66 @@ run (void *cls, } +/** + * Function invoked to notify service of disk utilization + * changes. + * + * @param cls closure + * @param delta change in disk utilization, + * 0 for "reset to empty" + */ +static void +duc_dummy (void *cls, + int delta) +{ + /* intentionally empty */ +} + + +/** + * check if plugin is actually working + */ +static int +test_plugin (const char *cfg_name) +{ + char libname[128]; + struct GNUNET_CONFIGURATION_Handle *cfg; + struct GNUNET_DATASTORE_PluginFunctions *api; + struct GNUNET_DATASTORE_PluginEnvironment env; + + cfg = GNUNET_CONFIGURATION_create (); + if (GNUNET_OK != + GNUNET_CONFIGURATION_load (cfg, + cfg_name)) + { + GNUNET_CONFIGURATION_destroy (cfg); + fprintf (stderr, + "Failed to load configuration %s\n", + cfg_name); + return 1; + } + memset (&env, 0, sizeof (env)); + env.cfg = cfg; + env.duc = &duc_dummy; + GNUNET_snprintf (libname, + sizeof (libname), + "libgnunet_plugin_datastore_%s", + plugin_name); + api = GNUNET_PLUGIN_load (libname, &env); + if (NULL == api) + { + GNUNET_CONFIGURATION_destroy (cfg); + fprintf (stderr, + "Failed to load plugin `%s'\n", + libname); + return 77; + } + GNUNET_PLUGIN_unload (libname, api); + GNUNET_CONFIGURATION_destroy (cfg); + return 0; +} + + /** * Entry point into the test. Determines which configuration / plugin * we are running with based on the name of the binary and starts @@ -664,12 +725,17 @@ main (int argc, char *argv[]) { char cfg_name[128]; - + int ret; + plugin_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]); GNUNET_snprintf (cfg_name, sizeof (cfg_name), "test_datastore_api_data_%s.conf", plugin_name); + ret = test_plugin (cfg_name); + if (0 != ret) + return ret; + /* run actual test */ if (0 != GNUNET_TESTING_peer_run ("test-gnunet-datastore", cfg_name, diff --git a/src/datastore/test_datastore_api_management.c b/src/datastore/test_datastore_api_management.c index 954e61bec..5e536d6c5 100644 --- a/src/datastore/test_datastore_api_management.c +++ b/src/datastore/test_datastore_api_management.c @@ -26,6 +26,7 @@ #include "gnunet_util_lib.h" #include "gnunet_protocols.h" #include "gnunet_datastore_service.h" +#include "gnunet_datastore_plugin.h" #include "gnunet_testing_lib.h" @@ -296,14 +297,63 @@ run (void *cls, } +/** + * check if plugin is actually working + */ +static int +test_plugin (const char *cfg_name) +{ + char libname[128]; + struct GNUNET_CONFIGURATION_Handle *cfg; + struct GNUNET_DATASTORE_PluginFunctions *api; + struct GNUNET_DATASTORE_PluginEnvironment env; + + cfg = GNUNET_CONFIGURATION_create (); + if (GNUNET_OK != + GNUNET_CONFIGURATION_load (cfg, + cfg_name)) + { + GNUNET_CONFIGURATION_destroy (cfg); + fprintf (stderr, + "Failed to load configuration %s\n", + cfg_name); + return 1; + } + memset (&env, 0, sizeof (env)); + env.cfg = cfg; + GNUNET_snprintf (libname, + sizeof (libname), + "libgnunet_plugin_datastore_%s", + plugin_name); + api = GNUNET_PLUGIN_load (libname, &env); + if (NULL == api) + { + GNUNET_CONFIGURATION_destroy (cfg); + fprintf (stderr, + "Failed to load plugin `%s'\n", + libname); + return 77; + } + GNUNET_PLUGIN_unload (libname, api); + GNUNET_CONFIGURATION_destroy (cfg); + return 0; +} + + int main (int argc, char *argv[]) { char cfg_name[128]; + int ret; plugin_name = GNUNET_TESTING_get_testname_from_underscore (argv[0]); - GNUNET_snprintf (cfg_name, sizeof (cfg_name), - "test_datastore_api_data_%s.conf", plugin_name); + GNUNET_snprintf (cfg_name, + sizeof (cfg_name), + "test_datastore_api_data_%s.conf", + plugin_name); + ret = test_plugin (cfg_name); + if (0 != ret) + return ret; if (0 != GNUNET_TESTING_peer_run ("test-gnunet-datastore-management", cfg_name, -- 2.25.1