e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl/*
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl Authors:
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl Pavel Reichl <preichl@redhat.com>
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl Copyright (C) 2015 Red Hat
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl SSSD tests - id cleanup
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl This program is free software; you can redistribute it and/or modify
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl it under the terms of the GNU General Public License as published by
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl the Free Software Foundation; either version 3 of the License, or
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl (at your option) any later version.
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl This program is distributed in the hope that it will be useful,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl but WITHOUT ANY WARRANTY; without even the implied warranty of
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl GNU General Public License for more details.
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl You should have received a copy of the GNU General Public License
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl along with this program. If not, see <http://www.gnu.org/licenses/>.
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl*/
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl#include <stdarg.h>
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl#include <stdlib.h>
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl#include <stddef.h>
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl#include <setjmp.h>
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl#include <unistd.h>
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl#include <sys/types.h>
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl#include <cmocka.h>
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl#include <popt.h>
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl#include "tests/cmocka/common_mock.h"
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl#include "providers/ldap/ldap_auth.h"
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl#include "tests/cmocka/test_expire_common.h"
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl#include "providers/ldap/ldap_common.h"
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl#include "providers/ldap/ldap_opts.h"
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl#include "providers/ipa/ipa_opts.h"
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
50c9d542e8bf641412debaa82a4dcf67ddb72258Lukas Slebodnik#define TESTS_PATH "tp_" BASE_FILE_STEM
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl#define TEST_CONF_FILE "tests_conf.ldb"
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichlstruct sysdb_test_ctx {
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl struct sysdb_ctx *sysdb;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl struct confdb_ctx *confdb;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl struct tevent_context *ev;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl struct sss_domain_info *domain;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl struct sdap_options *opts;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl};
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichlstatic int _setup_sysdb_tests(struct sysdb_test_ctx **ctx, bool enumerate)
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl{
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl struct sysdb_test_ctx *test_ctx;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl char *conf_db;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl int ret;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl const char *val[2];
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl val[1] = NULL;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl /* Create tests directory if it doesn't exist */
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl /* (relative to current dir) */
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = mkdir(TESTS_PATH, 0775);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_true(ret == 0 || errno == EEXIST);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl test_ctx = talloc_zero(global_talloc_context, struct sysdb_test_ctx);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_non_null(test_ctx);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl /* Create an event context
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl * It will not be used except in confdb_init and sysdb_init
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl */
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl test_ctx->ev = tevent_context_init(test_ctx);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_non_null(test_ctx->ev);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl conf_db = talloc_asprintf(test_ctx, "%s/%s", TESTS_PATH, TEST_CONF_FILE);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_non_null(conf_db);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl DEBUG(SSSDBG_MINOR_FAILURE, "CONFDB: %s\n", conf_db);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl /* Connect to the conf db */
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = confdb_init(test_ctx, &test_ctx->confdb, conf_db);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl val[0] = "LOCAL";
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = confdb_add_param(test_ctx->confdb, true,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl "config/sssd", "domains", val);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl val[0] = "local";
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = confdb_add_param(test_ctx->confdb, true,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl "config/domain/LOCAL", "id_provider", val);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl val[0] = enumerate ? "TRUE" : "FALSE";
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = confdb_add_param(test_ctx->confdb, true,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl "config/domain/LOCAL", "enumerate", val);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl val[0] = "TRUE";
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = confdb_add_param(test_ctx->confdb, true,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl "config/domain/LOCAL", "cache_credentials", val);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = sssd_domain_init(test_ctx, test_ctx->confdb, "local",
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl TESTS_PATH, &test_ctx->domain);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl test_ctx->domain->has_views = true;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl test_ctx->sysdb = test_ctx->domain->sysdb;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl *ctx = test_ctx;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl return EOK;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl}
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl#define setup_sysdb_tests(ctx) _setup_sysdb_tests((ctx), false)
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichlstatic int test_sysdb_setup(void **state)
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl{
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl int ret;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl struct sysdb_test_ctx *test_ctx;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_true(leak_check_setup());
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = setup_sysdb_tests(&test_ctx);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl test_ctx->domain->mpg = false;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl /* set options */
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl test_ctx->opts = talloc_zero(test_ctx, struct sdap_options);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_non_null(test_ctx->opts);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = sdap_copy_map(test_ctx->opts, rfc2307_user_map,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl SDAP_OPTS_USER, &test_ctx->opts->user_map);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, ERR_OK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = dp_copy_defaults(test_ctx->opts, default_basic_opts,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl SDAP_OPTS_BASIC, &test_ctx->opts->basic);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, ERR_OK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl dp_opt_set_int(test_ctx->opts->basic, SDAP_ACCOUNT_CACHE_EXPIRATION, 1);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl *state = (void *) test_ctx;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl return 0;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl}
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichlstatic int test_sysdb_teardown(void **state)
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl{
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl struct sysdb_test_ctx *test_ctx = talloc_get_type_abort(*state,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl struct sysdb_test_ctx);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl talloc_free(test_ctx);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_true(leak_check_teardown());
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl return 0;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl}
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichlstatic errno_t invalidate_group(TALLOC_CTX *ctx,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl struct sss_domain_info *domain,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl const char *name)
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl{
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl struct sysdb_attrs *sys_attrs = NULL;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl errno_t ret;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl sys_attrs = sysdb_new_attrs(ctx);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl if (sys_attrs) {
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = sysdb_attrs_add_time_t(sys_attrs,
2cec08a3174bff951c048c57b4b0e4517ad6b7b1Lukas Slebodnik SYSDB_CACHE_EXPIRE, 1);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl if (ret == EOK) {
2cec08a3174bff951c048c57b4b0e4517ad6b7b1Lukas Slebodnik ret = sysdb_set_group_attr(domain, name, sys_attrs,
2cec08a3174bff951c048c57b4b0e4517ad6b7b1Lukas Slebodnik SYSDB_MOD_REP);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl } else {
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl DEBUG(SSSDBG_MINOR_FAILURE,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl "Could not add expiration time to attributes\n");
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl }
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl talloc_zfree(sys_attrs);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl } else {
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl DEBUG(SSSDBG_MINOR_FAILURE, "Could not create sysdb attributes\n");
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = ENOMEM;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl }
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl return ret;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl}
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichlstatic void test_id_cleanup_exp_group(void **state)
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl{
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl errno_t ret;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl struct ldb_message *msg;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl struct sdap_domain sdom;
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek char *special_grp;
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek char *empty_special_grp;
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek char *empty_grp;
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek char *grp;
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek char *test_user;
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek char *test_user2;
f02b62138466c876f6e8d6382769105f2e920d96Michal Židek /* This timeout can be bigger because we will call invalidate_group
f02b62138466c876f6e8d6382769105f2e920d96Michal Židek * to expire entries without waiting. */
f02b62138466c876f6e8d6382769105f2e920d96Michal Židek const uint64_t CACHE_TIMEOUT = 30;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl struct sysdb_test_ctx *test_ctx = talloc_get_type_abort(*state,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl struct sysdb_test_ctx);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek special_grp = sss_create_internal_fqname(test_ctx,
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek "special_gr*o/u\\p(2016)",
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek test_ctx->domain->name);
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek assert_non_null(special_grp);
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek empty_special_grp = sss_create_internal_fqname(test_ctx,
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek "empty_gr*o/u\\p(2016)",
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek test_ctx->domain->name);
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek assert_non_null(empty_special_grp);
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek empty_grp = sss_create_internal_fqname(test_ctx, "empty_grp",
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek test_ctx->domain->name);
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek assert_non_null(empty_grp);
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek grp = sss_create_internal_fqname(test_ctx, "grp", test_ctx->domain->name);
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek assert_non_null(grp);
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek test_user = sss_create_internal_fqname(test_ctx, "test_user",
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek test_ctx->domain->name);
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek assert_non_null(test_user);
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek test_user2 = sss_create_internal_fqname(test_ctx, "test_user2",
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek test_ctx->domain->name);
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek assert_non_null(test_user2);
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = sysdb_store_group(test_ctx->domain, special_grp,
f02b62138466c876f6e8d6382769105f2e920d96Michal Židek 10002, NULL, CACHE_TIMEOUT, 0);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = sysdb_store_group(test_ctx->domain, empty_special_grp,
f02b62138466c876f6e8d6382769105f2e920d96Michal Židek 10003, NULL, CACHE_TIMEOUT, 0);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = sysdb_store_group(test_ctx->domain, grp,
f02b62138466c876f6e8d6382769105f2e920d96Michal Židek 10004, NULL, CACHE_TIMEOUT, 0);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = sysdb_store_group(test_ctx->domain, empty_grp,
f02b62138466c876f6e8d6382769105f2e920d96Michal Židek 10005, NULL, CACHE_TIMEOUT, 0);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek ret = sysdb_store_user(test_ctx->domain, test_user, NULL,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl 10001, 10002, "Test user",
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl NULL, NULL, NULL, NULL, NULL,
2cec08a3174bff951c048c57b4b0e4517ad6b7b1Lukas Slebodnik 0, 0);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
338af078fcc18126df939f20182acea7a646b7c8Michal Zidek ret = sysdb_store_user(test_ctx->domain, test_user2, NULL,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl 10002, 10004, "Test user",
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl NULL, NULL, NULL, NULL, NULL,
2cec08a3174bff951c048c57b4b0e4517ad6b7b1Lukas Slebodnik 0, 0);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl sdom.dom = test_ctx->domain;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl /* not expired */
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = ldap_id_cleanup(test_ctx->opts, &sdom);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = sysdb_search_group_by_name(test_ctx, test_ctx->domain,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl special_grp, NULL, &msg);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = sysdb_search_group_by_name(test_ctx, test_ctx->domain,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl empty_special_grp, NULL, &msg);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = sysdb_search_group_by_name(test_ctx, test_ctx->domain,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl grp, NULL, &msg);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = sysdb_search_group_by_name(test_ctx, test_ctx->domain,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl empty_grp, NULL, &msg);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl /* let records to expire */
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl invalidate_group(test_ctx, test_ctx->domain, special_grp);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl invalidate_group(test_ctx, test_ctx->domain, empty_special_grp);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl invalidate_group(test_ctx, test_ctx->domain, grp);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl invalidate_group(test_ctx, test_ctx->domain, empty_grp);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = ldap_id_cleanup(test_ctx->opts, &sdom);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = sysdb_search_group_by_name(test_ctx, test_ctx->domain,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl special_grp, NULL, &msg);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = sysdb_search_group_by_name(test_ctx, test_ctx->domain,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl empty_special_grp, NULL, &msg);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, ENOENT);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = sysdb_search_group_by_name(test_ctx, test_ctx->domain,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl grp, NULL, &msg);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, EOK);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl ret = sysdb_search_group_by_name(test_ctx, test_ctx->domain,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl empty_grp, NULL, &msg);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl assert_int_equal(ret, ENOENT);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl}
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichlint main(int argc, const char *argv[])
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl{
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl int rv;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl int no_cleanup = 0;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl poptContext pc;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl int opt;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl struct poptOption long_options[] = {
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl POPT_AUTOHELP
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl SSSD_DEBUG_OPTS
2cec08a3174bff951c048c57b4b0e4517ad6b7b1Lukas Slebodnik { "no-cleanup", 'n', POPT_ARG_NONE, &no_cleanup, 0,
2cec08a3174bff951c048c57b4b0e4517ad6b7b1Lukas Slebodnik _("Do not delete the test database after a test run"), NULL },
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl POPT_TABLEEND
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl };
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl const struct CMUnitTest tests[] = {
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl cmocka_unit_test_setup_teardown(test_id_cleanup_exp_group,
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl test_sysdb_setup, test_sysdb_teardown),
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl };
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
57c5ea8825c7179fd93382dbcbb07e828e5aec19René Genz /* Set debug level to invalid value so we can decide if -d 0 was used. */
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl debug_level = SSSDBG_INVALID;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl pc = poptGetContext(argv[0], argc, argv, long_options, 0);
2cec08a3174bff951c048c57b4b0e4517ad6b7b1Lukas Slebodnik while ((opt = poptGetNextOpt(pc)) != -1) {
2cec08a3174bff951c048c57b4b0e4517ad6b7b1Lukas Slebodnik switch (opt) {
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl default:
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl fprintf(stderr, "\nInvalid option %s: %s\n\n",
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl poptBadOption(pc, 0), poptStrerror(opt));
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl poptPrintUsage(pc, stderr, 0);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl return 1;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl }
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl }
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl poptFreeContext(pc);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl DEBUG_CLI_INIT(debug_level);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl tests_set_cwd();
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl test_dom_suite_cleanup(TESTS_PATH, TEST_CONF_FILE, LOCAL_SYSDB_FILE);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl test_dom_suite_setup(TESTS_PATH);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl rv = cmocka_run_group_tests(tests, NULL, NULL);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl if (rv == 0 && no_cleanup == 0) {
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl test_dom_suite_cleanup(TESTS_PATH, TEST_CONF_FILE, LOCAL_SYSDB_FILE);
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl }
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl return rv;
e2e334b2f51118cb14c7391c4e4e44ff247ef638Pavel Reichl}