test_memory_cache.py revision 1584db9c0b15ee239bd4e163c4ecaf6909b1b11b
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen# LDAP integration test
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen# Copyright (c) 2015 Red Hat, Inc.
7e209b78ca757294dbbc15604c88673b3a6b0c39Timo Sirainen# Author: Lukas Slebodnik <lslebodn@redhat.com>
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen# This is free software; you can redistribute it and/or modify it
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen# under the terms of the GNU General Public License as published by
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen# the Free Software Foundation; version 2 only
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen# This program is distributed in the hope that it will be useful, but
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen# WITHOUT ANY WARRANTY; without even the implied warranty of
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen# General Public License for more details.
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen# You should have received a copy of the GNU General Public License
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen# along with this program. If not, see <http://www.gnu.org/licenses/>.
6b265a8a9d1ce3b3a8033445e99c9035d62ffbc7Timo Sirainen """LDAP server instance fixture"""
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen request.addfinalizer(lambda: ds_inst.teardown())
db0735f9b388c5bcfb781b1b25015e898d63d953Timo Sirainen """LDAP server connection fixture"""
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen request.addfinalizer(lambda: ldap_conn.unbind_s())
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainendef create_ldap_fixture(request, ldap_conn, ent_list):
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen """Add LDAP entries and add teardown for removing them"""
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen """Generate sssd.conf and add teardown for removing it"""
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen os.chmod(config.CONF_PATH, stat.S_IRUSR | stat.S_IWUSR)
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen request.addfinalizer(lambda: os.unlink(config.CONF_PATH))
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen """Start sssd and add teardown for stopping it and removing state"""
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen if subprocess.call(["sssd", "-D", "-f"]) != 0:
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen ent_list.add_group("group1", 2001, ["user1", "user11", "user21"])
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen ent_list.add_group("group2", 2002, ["user2", "user12", "user22"])
3852872e6954b7132e637294132005e86b8ebd4aTimo Sirainen ent_list.add_group("group3", 2003, ["user3", "user13", "user23"])
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen ent_list.add_group("group0x", 2000, ["user1", "user2", "user3"])
fb5b342aab25d6dc96df14774eb5215dc5481546Timo Sirainen ent_list.add_group("group1x", 2010, ["user11", "user12", "user13"])
1330f999b8076b2f8eed2572c667f7482a555c1bTimo Sirainen ent_list.add_group("group2x", 2020, ["user21", "user22", "user23"])
1330f999b8076b2f8eed2572c667f7482a555c1bTimo Sirainen create_ldap_fixture(request, ldap_conn, ent_list)
3852872e6954b7132e637294132005e86b8ebd4aTimo Sirainen domains = LDAP
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen services = nss
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen ldap_auth_disable_tls_never_use_in_production = true
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen ldap_schema = rfc2307
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen id_provider = ldap
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen auth_provider = ldap
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen sudo_provider = ldap
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen ldap_uri = {ldap_conn.ds_inst.ldap_url}
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen ldap_search_base = {ldap_conn.ds_inst.base_dn}
b8835b8a21c617ceb82ddc5a176243faf36aa8f7Timo Sirainen domains = LDAP
3852872e6954b7132e637294132005e86b8ebd4aTimo Sirainen services = nss
b8835b8a21c617ceb82ddc5a176243faf36aa8f7Timo Sirainen ldap_auth_disable_tls_never_use_in_production = true
b8835b8a21c617ceb82ddc5a176243faf36aa8f7Timo Sirainen ldap_schema = rfc2307
3852872e6954b7132e637294132005e86b8ebd4aTimo Sirainen id_provider = ldap
b8835b8a21c617ceb82ddc5a176243faf36aa8f7Timo Sirainen auth_provider = ldap
b8835b8a21c617ceb82ddc5a176243faf36aa8f7Timo Sirainen sudo_provider = ldap
b8835b8a21c617ceb82ddc5a176243faf36aa8f7Timo Sirainen ldap_uri = {ldap_conn.ds_inst.ldap_url}
b8835b8a21c617ceb82ddc5a176243faf36aa8f7Timo Sirainen ldap_search_base = {ldap_conn.ds_inst.base_dn}
b8835b8a21c617ceb82ddc5a176243faf36aa8f7Timo Sirainen use_fully_qualified_names = true
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainendef fqname_case_insensitive_rfc2307(request, ldap_conn):
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen domains = LDAP
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen services = nss
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen ldap_auth_disable_tls_never_use_in_production = true
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen ldap_schema = rfc2307
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen id_provider = ldap
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen auth_provider = ldap
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen sudo_provider = ldap
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen ldap_uri = {ldap_conn.ds_inst.ldap_url}
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen ldap_search_base = {ldap_conn.ds_inst.base_dn}
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen use_fully_qualified_names = true
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen case_sensitive = false
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen dict(name='user1', passwd='*', uid=1001, gid=2001,
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen dict(name='user1', passwd='*', uid=1001, gid=2001,
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen dict(name='user2', passwd='*', uid=1002, gid=2002,
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen dict(name='user2', passwd='*', uid=1002, gid=2002,
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen dict(name='user3', passwd='*', uid=1003, gid=2003,
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen dict(name='user3', passwd='*', uid=1003, gid=2003,
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen dict(name='user11', passwd='*', uid=1011, gid=2001,
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen dict(name='user11', passwd='*', uid=1011, gid=2001,
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen dict(name='user12', passwd='*', uid=1012, gid=2002,
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen dict(name='user12', passwd='*', uid=1012, gid=2002,
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen dict(name='user13', passwd='*', uid=1013, gid=2003,
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen dict(name='user13', passwd='*', uid=1013, gid=2003,
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen dict(name='user21', passwd='*', uid=1021, gid=2001,
5e203e846133e28d0e36ca70ef1c30e72a922c14Timo Sirainen dict(name='user21', passwd='*', uid=1021, gid=2001,
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen dict(name='user22', passwd='*', uid=1022, gid=2002,
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen dict(name='user22', passwd='*', uid=1022, gid=2002,
834f2b9f60d93e4c7dfc6992e692f5b7213a1b11Timo Sirainen dict(name='user23', passwd='*', uid=1023, gid=2003,
107f6e87c6edcb29cf87195357144dea3fdda9afTimo Sirainen dict(name='user23', passwd='*', uid=1023, gid=2003,
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainendef test_getpwnam_with_mc(ldap_conn, sanity_rfc2307):
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainendef test_getgrnam_simple(ldap_conn, sanity_rfc2307):
3b1bf68d26c9f2fe4a649f40cf375d52acffc81cTimo Sirainen ent.assert_group_by_name("group1", dict(name="group1", gid=2001))
3b1bf68d26c9f2fe4a649f40cf375d52acffc81cTimo Sirainen ent.assert_group_by_gid(2001, dict(name="group1", gid=2001))
3b1bf68d26c9f2fe4a649f40cf375d52acffc81cTimo Sirainen ent.assert_group_by_name("group2", dict(name="group2", gid=2002))
3b1bf68d26c9f2fe4a649f40cf375d52acffc81cTimo Sirainen ent.assert_group_by_gid(2002, dict(name="group2", gid=2002))
3b1bf68d26c9f2fe4a649f40cf375d52acffc81cTimo Sirainen ent.assert_group_by_name("group3", dict(name="group3", gid=2003))
3b1bf68d26c9f2fe4a649f40cf375d52acffc81cTimo Sirainen ent.assert_group_by_gid(2003, dict(name="group3", gid=2003))
3b1bf68d26c9f2fe4a649f40cf375d52acffc81cTimo Sirainen ent.assert_group_by_name("group0x", dict(name="group0x", gid=2000))
3b1bf68d26c9f2fe4a649f40cf375d52acffc81cTimo Sirainen ent.assert_group_by_gid(2000, dict(name="group0x", gid=2000))
3b1bf68d26c9f2fe4a649f40cf375d52acffc81cTimo Sirainen ent.assert_group_by_name("group1x", dict(name="group1x", gid=2010))
3b1bf68d26c9f2fe4a649f40cf375d52acffc81cTimo Sirainen ent.assert_group_by_gid(2010, dict(name="group1x", gid=2010))
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen ent.assert_group_by_name("group2x", dict(name="group2x", gid=2020))
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen ent.assert_group_by_gid(2020, dict(name="group2x", gid=2020))
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainendef test_getgrnam_simple_with_mc(ldap_conn, sanity_rfc2307):
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen test_getgrnam_simple(ldap_conn, sanity_rfc2307)
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen test_getgrnam_simple(ldap_conn, sanity_rfc2307)
d22301419109ed4a38351715e6760011421dadecTimo Sirainendef test_getgrnam_membership(ldap_conn, sanity_rfc2307):
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen dict(mem=ent.contains_only("user1", "user11", "user21")))
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen dict(mem=ent.contains_only("user1", "user11", "user21")))
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen dict(mem=ent.contains_only("user2", "user12", "user22")))
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen dict(mem=ent.contains_only("user2", "user12", "user22")))
d22301419109ed4a38351715e6760011421dadecTimo Sirainen dict(mem=ent.contains_only("user3", "user13", "user23")))
d4854db53e9c141db3d02821ed857bea101b1cc2Timo Sirainen dict(mem=ent.contains_only("user3", "user13", "user23")))
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen dict(mem=ent.contains_only("user1", "user2", "user3")))
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen dict(mem=ent.contains_only("user1", "user2", "user3")))
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen dict(mem=ent.contains_only("user11", "user12", "user13")))
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen dict(mem=ent.contains_only("user11", "user12", "user13")))
867990944f0bda3a5bd70895d5a5ebfa611d0505Timo Sirainen dict(mem=ent.contains_only("user21", "user22", "user23")))
867990944f0bda3a5bd70895d5a5ebfa611d0505Timo Sirainen dict(mem=ent.contains_only("user21", "user22", "user23")))
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainendef test_getgrnam_membership_with_mc(ldap_conn, sanity_rfc2307):
3852872e6954b7132e637294132005e86b8ebd4aTimo Sirainen test_getgrnam_membership(ldap_conn, sanity_rfc2307)
111a7dda02defa4d612468cfc3c40da5240645afTimo Sirainen test_getgrnam_membership(ldap_conn, sanity_rfc2307)
d22301419109ed4a38351715e6760011421dadecTimo Sirainendef assert_user_gids_equal(user, expected_gids):
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen (res, errno, gids) = sssd_id.get_user_gids(user)
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen assert res == sssd_id.NssReturnCode.SUCCESS, \
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen "Could not find groups for user %s, %d" % (user, errno)
3b1bf68d26c9f2fe4a649f40cf375d52acffc81cTimo Sirainen assert sorted(gids) == sorted(expected_gids), \
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen "result: %s\n expected %s" % (
24e5e4526d8f5cbc056ab97fd0d154d0936d7a5eTimo Sirainen ", ".join(["%s" % s for s in sorted(expected_gids)])
db0735f9b388c5bcfb781b1b25015e898d63d953Timo Sirainendef test_initgroups(ldap_conn, sanity_rfc2307):
66c0f96d704f09c88dd03b0ee13a3e9711ffe593Timo Sirainen assert_user_gids_equal('user11', [2010, 2001])
66c0f96d704f09c88dd03b0ee13a3e9711ffe593Timo Sirainen assert_user_gids_equal('user12', [2010, 2002])
66c0f96d704f09c88dd03b0ee13a3e9711ffe593Timo Sirainen assert_user_gids_equal('user13', [2010, 2003])
eca30f1fe8556c46abc75c94d03f59b2e89d4162Timo Sirainen assert_user_gids_equal('user21', [2020, 2001])
db0735f9b388c5bcfb781b1b25015e898d63d953Timo Sirainen assert_user_gids_equal('user22', [2020, 2002])
def assert_mc_records_for_user1():