diff options
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | src/tests/simple_access-tests.c | 98 |
2 files changed, 99 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am index 032e06a2..4dd8ed35 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1079,6 +1079,7 @@ ad_ldap_opt_tests_LDADD = \ simple_access_tests_SOURCES = \ src/tests/simple_access-tests.c \ + src/providers/simple/simple_access.c \ src/providers/simple/simple_access_check.c \ src/providers/data_provider_be.c \ src/providers/data_provider_fo.c \ diff --git a/src/tests/simple_access-tests.c b/src/tests/simple_access-tests.c index 48ebea6f..d1a6056a 100644 --- a/src/tests/simple_access-tests.c +++ b/src/tests/simple_access-tests.c @@ -43,6 +43,7 @@ struct simple_test_ctx { struct sysdb_ctx *sysdb; struct confdb_ctx *confdb; struct tevent_context *ev; + struct be_ctx *be_ctx; bool done; int error; @@ -201,6 +202,30 @@ void teardown_simple_group(void) teardown_simple(); } +void setup_simple_init(void) +{ + errno_t ret; + + setup_simple(); + + test_ctx->be_ctx = talloc_zero(test_ctx, struct be_ctx); + fail_if(test_ctx->be_ctx == NULL, "Unable to setup be_ctx"); + + test_ctx->be_ctx->cdb = test_ctx->confdb; + test_ctx->be_ctx->ev = test_ctx->ev; + test_ctx->be_ctx->conf_path = "config/domain/LOCAL"; + test_ctx->be_ctx->domain = test_ctx->ctx->domain; + + ret = sss_names_init(test_ctx->ctx->domain, test_ctx->confdb, + "LOCAL", &test_ctx->be_ctx->domain->names); + fail_if(ret != EOK, "Unable to setup domain names (%d)", ret); +} + +void teardown_simple_init(void) +{ + teardown_simple(); +} + START_TEST(test_both_empty) { struct tevent_req *req; @@ -509,6 +534,74 @@ START_TEST(test_group_case) } END_TEST +static void check_access_list(char **list, const char **values) +{ + int i; + + if (list == NULL) { + fail_if(values != NULL, "List is empty, but it shouldn't be"); + } + + for (i = 0; list[i] != NULL; i++) { + fail_if(values[i] == NULL, "List contains too many entries"); + fail_if(strcmp(list[i], values[i]) != 0, "%s != %s", list[i], values[i]); + } + + fail_if(values[i] != NULL, "List contains fewer entries than expected"); +} + +int sssm_simple_access_init(struct be_ctx *bectx, struct bet_ops **ops, + void **pvt_data); + +START_TEST(test_provider_init) +{ + struct bet_ops *bet_ops = NULL; + struct simple_ctx *ctx = NULL; + errno_t ret; + + const char *val[2] = {"user-1, user-2@LOCAL, user with space, " + "another space@LOCAL", NULL}; + + const char *correct[] = {"user-1", "user-2", "user with space", + "another space", NULL}; + + /* allow users */ + ret = confdb_add_param(test_ctx->confdb, true, "config/domain/LOCAL", + "simple_allow_users", val); + fail_if(ret != EOK, "Could setup allow users list"); + + /* deny users */ + ret = confdb_add_param(test_ctx->confdb, true, "config/domain/LOCAL", + "simple_deny_users", val); + fail_if(ret != EOK, "Could setup deny users list"); + + /* allow groups */ + ret = confdb_add_param(test_ctx->confdb, true, "config/domain/LOCAL", + "simple_allow_groups", val); + fail_if(ret != EOK, "Could setup allow groups list"); + + /* deny groups */ + ret = confdb_add_param(test_ctx->confdb, true, "config/domain/LOCAL", + "simple_deny_groups", val); + fail_if(ret != EOK, "Could setup deny groups list"); + + ret = sssm_simple_access_init(test_ctx->be_ctx, &bet_ops, (void**)&ctx); + fail_if(ret != EOK); + + DEBUG(SSSDBG_TRACE_FUNC, ("Checking allow users list\n")); + check_access_list(ctx->allow_users, correct); + + DEBUG(SSSDBG_TRACE_FUNC, ("Checking deny users list\n")); + check_access_list(ctx->deny_users, correct); + + DEBUG(SSSDBG_TRACE_FUNC, ("Checking allow groups list\n")); + check_access_list(ctx->allow_groups, correct); + + DEBUG(SSSDBG_TRACE_FUNC, ("Checking deny groups list\n")); + check_access_list(ctx->deny_groups, correct); +} +END_TEST + Suite *access_simple_suite (void) { Suite *s = suite_create("access_simple"); @@ -532,6 +625,11 @@ Suite *access_simple_suite (void) tcase_add_test(tc_grp_allow_deny, test_group_case); suite_add_tcase(s, tc_grp_allow_deny); + TCase *tc_init = tcase_create("provider init"); + tcase_add_checked_fixture(tc_init, setup_simple_init, teardown_simple_init); + tcase_add_test(tc_init, test_provider_init); + suite_add_tcase(s, tc_init); + return s; } |