summaryrefslogtreecommitdiffstats
path: root/src/tests/common_dom.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/common_dom.c')
-rw-r--r--src/tests/common_dom.c167
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 000000000..f83562100
--- /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);
+}