diff options
Diffstat (limited to 'src/tests/common_dom.c')
-rw-r--r-- | src/tests/common_dom.c | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/src/tests/common_dom.c b/src/tests/common_dom.c new file mode 100644 index 00000000..f8356210 --- /dev/null +++ b/src/tests/common_dom.c @@ -0,0 +1,167 @@ +/* + Authors: + Jakub Hrozek <jhrozek@redhat.com> + + Copyright (C) 2013 Red Hat + + SSSD tests: Common utilities for tests that exercise domains + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <talloc.h> +#include <errno.h> + +#include "tests/common.h" + +struct sss_test_ctx * +create_dom_test_ctx(TALLOC_CTX *mem_ctx, + const char *tests_path, + const char *confdb_path, + const char *sysdb_path, + const char *domain_name, + const char *id_provider, + struct sss_test_conf_param *params) +{ + struct sss_test_ctx *test_ctx; + char *conf_db; + size_t i; + const char *val[2]; + val[1] = NULL; + errno_t ret; + char *dompath; + + test_ctx = talloc_zero(mem_ctx, struct sss_test_ctx); + if (test_ctx == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, ("talloc_zero failed\n")); + goto fail; + } + + /* Create an event context */ + test_ctx->ev = tevent_context_init(test_ctx); + if (test_ctx->ev == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, ("tevent_context_init failed\n")); + goto fail; + } + + conf_db = talloc_asprintf(test_ctx, "%s/%s", tests_path, confdb_path); + if (conf_db == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, ("talloc_asprintf failed\n")); + goto fail; + } + + /* Connect to the conf db */ + ret = confdb_init(test_ctx, &test_ctx->confdb, conf_db); + if (ret != EOK) { + DEBUG(SSSDBG_CRIT_FAILURE, ("confdb_init failed: %d\n", ret)); + goto fail; + } + + val[0] = domain_name; + ret = confdb_add_param(test_ctx->confdb, true, + "config/sssd", "domains", val); + if (ret != EOK) { + DEBUG(SSSDBG_CRIT_FAILURE, ("cannot add domain: %d\n", ret)); + goto fail; + } + + dompath = talloc_asprintf(test_ctx, "config/domain/%s", domain_name); + if (dompath == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, ("talloc_asprintf failed\n")); + goto fail; + } + + val[0] = id_provider; + ret = confdb_add_param(test_ctx->confdb, true, + dompath, "id_provider", val); + if (ret != EOK) { + DEBUG(SSSDBG_CRIT_FAILURE, ("cannot add id_provider: %d\n", ret)); + goto fail; + } + + if (params) { + for (i=0; params[i].key; i++) { + val[0] = params[i].key; + ret = confdb_add_param(test_ctx->confdb, true, + dompath, params[i].value, val); + if (ret != EOK) { + DEBUG(SSSDBG_CRIT_FAILURE, + ("cannot add parameter %s: %d\n", params[i].key, ret)); + goto fail; + } + } + } + + ret = sssd_domain_init(test_ctx, test_ctx->confdb, domain_name, + tests_path, &test_ctx->dom); + if (ret != EOK) { + DEBUG(SSSDBG_CRIT_FAILURE, ("cannot add id_provider: %d\n", ret)); + goto fail; + } + test_ctx->sysdb = test_ctx->dom->sysdb; + + return test_ctx; + +fail: + talloc_free(test_ctx); + return NULL; +} + +void test_dom_suite_setup(const char *tests_path) +{ + errno_t ret; + + /* Create tests directory if it doesn't exist */ + /* (relative to current dir) */ + ret = mkdir(tests_path, 0775); + if (ret != 0 && errno != EEXIST) { + DEBUG(SSSDBG_CRIT_FAILURE, + ("Could not create test directory\n")); + } +} + +void test_dom_suite_cleanup(const char *tests_path, + const char *confdb_path, + const char *sysdb_path) +{ + errno_t ret; + char *conf_db; + char *sys_db; + + conf_db = talloc_asprintf(NULL, "%s/%s", tests_path, confdb_path); + sys_db = talloc_asprintf(NULL, "%s/%s", tests_path, sysdb_path); + if (!conf_db || !sys_db) { + DEBUG(SSSDBG_CRIT_FAILURE, + ("Could not construct db paths\n")); + } + + errno = 0; + ret = unlink(conf_db); + if (ret != 0 && errno != ENOENT) { + DEBUG(SSSDBG_CRIT_FAILURE, + ("Could not delete the test config ldb file (%d) (%s)\n", + errno, strerror(errno))); + } + + errno = 0; + ret = unlink(sys_db); + if (ret != 0 && errno != ENOENT) { + DEBUG(SSSDBG_CRIT_FAILURE, + ("Could not delete the test ldb file (%d) (%s)\n", + errno, strerror(errno))); + } + + talloc_free(conf_db); + talloc_free(sys_db); +} |