/* 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); GNUNET_free(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)