summaryrefslogtreecommitdiffstats
path: root/src/tests/cmocka/test_nss_srv.c
diff options
context:
space:
mode:
authorSumit Bose <sbose@redhat.com>2015-01-20 12:48:19 +0100
committerJakub Hrozek <jhrozek@redhat.com>2015-01-20 19:57:12 +0100
commit5f4d896ec8e06476f4282b562b1044de14c48ecf (patch)
tree91f89b746e9b9a88d9d8a4635afecc88ff49b42f /src/tests/cmocka/test_nss_srv.c
parentb3b6189850d50c656d62efbd498789124c033b00 (diff)
downloadsssd-5f4d896ec8e06476f4282b562b1044de14c48ecf.tar.gz
sssd-5f4d896ec8e06476f4282b562b1044de14c48ecf.tar.xz
sssd-5f4d896ec8e06476f4282b562b1044de14c48ecf.zip
nss: make fill_orig() multi-value aware
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
Diffstat (limited to 'src/tests/cmocka/test_nss_srv.c')
-rw-r--r--src/tests/cmocka/test_nss_srv.c131
1 files changed, 130 insertions, 1 deletions
diff --git a/src/tests/cmocka/test_nss_srv.c b/src/tests/cmocka/test_nss_srv.c
index 8f297a784..7d958dbb3 100644
--- a/src/tests/cmocka/test_nss_srv.c
+++ b/src/tests/cmocka/test_nss_srv.c
@@ -51,7 +51,8 @@ struct nss_test_ctx {
bool ncache_hit;
};
-const char *global_extra_attrs[] = {"phone", "mobile", NULL};
+const char *global_extra_attrs[] = {"phone", "mobile", SYSDB_ORIG_MEMBEROF,
+ NULL};
struct nss_test_ctx *nss_test_ctx;
@@ -1945,6 +1946,132 @@ void test_nss_getorigbyname_extra_attrs(void **state)
assert_int_equal(ret, EOK);
}
+
+static int test_nss_getorigbyname_multi_check(uint32_t status, uint8_t *body,
+ size_t blen)
+{
+ const char *s;
+ enum sss_id_type id_type;
+ size_t rp = 2 * sizeof(uint32_t);
+
+ assert_int_equal(status, EOK);
+
+ SAFEALIGN_COPY_UINT32(&id_type, body+rp, &rp);
+ assert_int_equal(id_type, SSS_ID_TYPE_UID);
+
+ /* Sequence of null terminated strings */
+ s = (char *) body+rp;
+ assert_string_equal(s, SYSDB_SID_STR);
+ rp += strlen(s) + 1;
+ assert_true(rp < blen);
+
+ s = (char *) body+rp;
+ assert_string_equal(s, "S-1-2-3-4");
+ rp += strlen(s) + 1;
+ assert_true(rp < blen);
+
+ s = (char *) body+rp;
+ assert_string_equal(s, ORIGINALAD_PREFIX SYSDB_NAME);
+ rp += strlen(s) + 1;
+ assert_true(rp < blen);
+
+ s = (char *) body+rp;
+ assert_string_equal(s, "orig_name");
+ rp += strlen(s) + 1;
+ assert_true(rp < blen);
+
+ s = (char *) body+rp;
+ assert_string_equal(s, ORIGINALAD_PREFIX SYSDB_UIDNUM);
+ rp += strlen(s) + 1;
+ assert_true(rp < blen);
+
+ s = (char *) body+rp;
+ assert_string_equal(s, "1234");
+ rp += strlen(s) + 1;
+ assert_true(rp < blen);
+
+ s = (char *) body+rp;
+ assert_string_equal(s, SYSDB_ORIG_MEMBEROF);
+ rp += strlen(s) + 1;
+ assert_true(rp < blen);
+
+ s = (char *) body+rp;
+ assert_string_equal(s, "cn=abc");
+ rp += strlen(s) + 1;
+ assert_true(rp < blen);
+
+ s = (char *) body+rp;
+ assert_string_equal(s, SYSDB_ORIG_MEMBEROF);
+ rp += strlen(s) + 1;
+ assert_true(rp < blen);
+
+ s = (char *) body+rp;
+ assert_string_equal(s, "cn=def");
+ rp += strlen(s) + 1;
+ assert_true(rp < blen);
+
+ s = (char *) body+rp;
+ assert_string_equal(s, SYSDB_ORIG_MEMBEROF);
+ rp += strlen(s) + 1;
+ assert_true(rp < blen);
+
+ s = (char *) body+rp;
+ assert_string_equal(s, "cn=123");
+ rp += strlen(s) + 1;
+ assert_int_equal(rp, blen);
+
+ return EOK;
+}
+void test_nss_getorigbyname_multi_value_attrs(void **state)
+{
+ errno_t ret;
+ struct sysdb_attrs *attrs;
+
+ attrs = sysdb_new_attrs(nss_test_ctx);
+ assert_non_null(attrs);
+
+ ret = sysdb_attrs_add_string(attrs, SYSDB_SID_STR, "S-1-2-3-4");
+ assert_int_equal(ret, EOK);
+
+ ret = sysdb_attrs_add_string(attrs, ORIGINALAD_PREFIX SYSDB_NAME,
+ "orig_name");
+ assert_int_equal(ret, EOK);
+
+ ret = sysdb_attrs_add_uint32(attrs, ORIGINALAD_PREFIX SYSDB_UIDNUM, 1234);
+ assert_int_equal(ret, EOK);
+
+ ret = sysdb_attrs_add_string(attrs, SYSDB_ORIG_MEMBEROF, "cn=abc");
+ assert_int_equal(ret, EOK);
+
+ ret = sysdb_attrs_add_string(attrs, SYSDB_ORIG_MEMBEROF, "cn=def");
+ assert_int_equal(ret, EOK);
+
+ ret = sysdb_attrs_add_string(attrs, SYSDB_ORIG_MEMBEROF, "cn=123");
+ assert_int_equal(ret, EOK);
+
+ /* Prime the cache with a valid user */
+ ret = sysdb_add_user(nss_test_ctx->tctx->dom,
+ "testuserorigmulti", 3456, 7890,
+ "test user orig multi value",
+ "/home/testuserorigextra", "/bin/sh", NULL,
+ attrs, 300, 0);
+ assert_int_equal(ret, EOK);
+
+ mock_input_user_or_group("testuserorigmulti");
+ will_return(__wrap_sss_packet_get_cmd, SSS_NSS_GETORIGBYNAME);
+ will_return(__wrap_sss_packet_get_body, WRAP_CALL_REAL);
+
+ /* Query for that user, call a callback when command finishes */
+ set_cmd_cb(test_nss_getorigbyname_multi_check);
+ ret = sss_cmd_execute(nss_test_ctx->cctx, SSS_NSS_GETORIGBYNAME,
+ nss_test_ctx->nss_cmds);
+ assert_int_equal(ret, EOK);
+
+ /* Wait until the test finishes with EOK */
+ ret = test_ev_loop(nss_test_ctx->tctx);
+ assert_int_equal(ret, EOK);
+}
+
void nss_test_setup(void **state)
{
struct sss_test_conf_param params[] = {
@@ -2095,6 +2222,8 @@ int main(int argc, const char *argv[])
nss_test_setup, nss_test_teardown),
unit_test_setup_teardown(test_nss_getorigbyname_extra_attrs,
nss_test_setup_extra_attr, nss_test_teardown),
+ unit_test_setup_teardown(test_nss_getorigbyname_multi_value_attrs,
+ nss_test_setup_extra_attr, nss_test_teardown),
};
/* Set debug level to invalid value so we can deside if -d 0 was used. */