URL: https://github.com/SSSD/sssd/pull/5813 Author: shridhargadekar Title: #5813: Tests: files provider automation Action: opened
PR body: """ verifies: #4295 """ To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/5813/head:pr5813 git checkout pr5813
From ed4a94db16b8ceb573784da4ea54411899dfb3be Mon Sep 17 00:00:00 2001 From: Shridhar Gadekar <sgade...@sgadekar.pnq.csb> Date: Wed, 6 Oct 2021 17:52:07 +0530 Subject: [PATCH] Tests: files provider automation verifies: #4295 --- src/tests/multihost/alltests/conftest.py | 44 +++ src/tests/multihost/alltests/test_files.py | 382 +++++++++++++++++++++ 2 files changed, 426 insertions(+) create mode 100644 src/tests/multihost/alltests/test_files.py diff --git a/src/tests/multihost/alltests/conftest.py b/src/tests/multihost/alltests/conftest.py index 3996459632..be29bb49be 100644 --- a/src/tests/multihost/alltests/conftest.py +++ b/src/tests/multihost/alltests/conftest.py @@ -371,6 +371,28 @@ def remove_keys(): request.addfinalizer(remove_keys) +@pytest.fixture(scope="function") +def local_useradd(session_multihost, request): + tool = sssdTools(session_multihost.client[0]) + users = ['test1', 'user1'] + groups = ['localgrp', 'l_grp1', 'l_grp2', 'l_grp3'] + for user in users: + cmd = f'useradd {user}' + session_multihost.client[0].run_command(cmd) + for grp in groups: + cmd = f'groupadd {grp}' + session_multihost.client[0].run_command(cmd) + + def remove_local_users(): + for user in users: + cmd = f'userdel -rf {user}' + session_multihost.client[0].run_command(cmd) + for grp in groups: + cmd = f'groupdel {grp}' + session_multihost.client[0].run_command(cmd) + request.addfinalizer(remove_local_users) + + @pytest.fixture(scope='function') def enable_multiple_responders(session_multihost, request): """ Enable multiple responders to sssd services """ @@ -798,6 +820,28 @@ def removesssd(): request.addfinalizer(removesssd) +@pytest.fixture(scope='class') +def setup_sssd_files(session_multihost, request): + """ Configure sssd.conf """ + tools = sssdTools(session_multihost.client[0]) + sssd_params = {'domains': 'files'} + tools.sssd_conf('sssd', sssd_params) + domain_section = 'domain/%s' % 'files' + domain_params = { 'id_provider': 'files', + 'debug_level': '9'} + tools.sssd_conf(domain_section, domain_params) + start_sssd = 'systemctl start sssd' + session_multihost.client[0].run_command(start_sssd) + + def removesssd(): + """ Remove sssd configuration """ + stop_sssd = 'systemctl stop sssd' + session_multihost.client[0].run_command(stop_sssd) + removeconf = 'rm -f %s' % (SSSD_DEFAULT_CONF) + session_multihost.client[0].run_command(removeconf) + request.addfinalizer(removesssd) + + @pytest.fixture(scope="class") def multihost(session_multihost, request): """ Multihost fixture to be used by tests diff --git a/src/tests/multihost/alltests/test_files.py b/src/tests/multihost/alltests/test_files.py new file mode 100644 index 0000000000..65b9decf48 --- /dev/null +++ b/src/tests/multihost/alltests/test_files.py @@ -0,0 +1,382 @@ +from __future__ import print_function +import pdb +import re +import subprocess +import time +from sssd.testlib.common.utils import sssdTools + + +def getent_sss(multihost, obj, db): + gtnt = f'getent {db} -s sss {obj}' + cmd = multihost.client[0].run_command(gtnt, raiseonerr=False) + return cmd.returncode, cmd.stdout_text + + +def run_cmd(multihost, arg): + cmd = multihost.client[0].run_command(arg, raiseonerr=False) + return cmd.returncode, cmd.stdout_text + + +@pytest.mark.usefixtures("setup_sssd_files") +@pytest.mark.filesprovider +@pytest.mark.tier1 +class TestFilesProvider(object): + " This is a test case class for files-provider" + def test_001_local_usr_caching(self, multihost, local_useradd): + """ + :Title: local user caching with files-provider + :id: fa12373b-8285-4fca-afe1-5e544fd58674 + :customerscenario: false + :steps: + 1. Create an unprivileged user + 2. User details are returned from sss_cache + :expectedresults: + 1. Should succeed + 2. Should succeed + """ + multihost.client[0].service_sssd('start') + exit_status, ot = getent_sss(multihost, 'test1', "passwd") + assert exit_status == 0 + + def test_002_root_usr_caching(self, multihost, backupsssdconf): + """ + :Title: root user caching with files-provider + :id: 0fea4269-de00-4e34-95c5-ab106957769d + :customerscenario: false + :steps: + 1. SSSD should not cache root user + :expectedresults: + 1. Should succeed + """ + multihost.client[0].service_sssd('start') + exit_status, _ = getent_sss(multihost, 'root', "passwd") + assert exit_status != 0 + + def test_003_group_caching(self, multihost, backupsssdconf, local_useradd): + """ + :Title: local group caching with files-provider + :id: ce9bb642-0f73-406d-b5b8-cf66f3b32dfb + :customerscenario: false + :steps: + 1. Create local group and add a user as it's member + 2. Confirm local group is showing user as it's member + 3. Confirm the user's group list is showing that local group + :expectedresults: + 1. Should succeed + 2. Should succeed + 3. Should succeed + """ + multihost.client[0].service_sssd('start') + exit_status, _ = getent_sss(multihost, "localgrp", "group") + cmd = 'usermod -aG localgrp user1' + ex, _ = run_cmd(multihost, cmd) + assert ex == 0 + exit_status, stdout = getent_sss(multihost, "localgrp", "group") + assert 'user1' in stdout + cmd = 'groups user1' + ex, stdout = run_cmd(multihost, 'groups user1') + assert 'localgrp' in stdout + + def test_004_uid_change(self, multihost, backupsssdconf, local_useradd): + """ + :Title: changes in uid change of user + :id: bcd0ebfc-0478-4493-a3f8-123e6206e792 + :customerscenario: false + :steps: + 1. Create a local user + 2. Modify user's uid to a different value + 3. Confirm changes in uid of user are reflected by sssd + :expectedresults: + 1. Should succeed + 2. Should succeed + 3. Should succeed + """ + multihost.client[0].service_sssd('start') + exit_status, stdout = getent_sss(multihost, 'user1', 'passwd') + assert '7777' not in stdout + multihost.client[0].run_command('usermod -u 7777 user1') + exit_status, _ = run_cmd(multihost, 'usermod -u 7777 user1') + assert exit_status == 0 + time.sleep(1) + exit_status, stdout = getent_sss(multihost, 'user1', 'passwd') + assert '7777' in stdout + + @pytest.mark.tier2 + def test_005_gid_change(self, multihost, backupsssdconf, local_useradd): + """ + :Title: changes in gid of group + :id: 44c074d7-eb68-415d-a2f0-6a601c503ea2 + :customerscenario: false + :steps: + 1. Create a local group and add a local user to it's membership + 2. Modify group's gid to a different value + 3. Confirm changes in gid of group are reflected by sssd + :expectedresults: + 1. Should succeed + 2. Should succeed + 3. Should succeed + """ + multihost.client[0].service_sssd('start') + exit_status, stdout = getent_sss(multihost, "user1", "passwd") + exit_status, stdout = run_cmd(multihost, 'usermod -aG l_grp1 user1') + assert exit_status == 0 + exit_status, stdout = run_cmd(multihost, 'groupmod -g 3333 l_grp1') + assert exit_status == 0 + time.sleep(1) + exit_status, stdout = getent_sss(multihost, "l_grp1", "group") + assert '3333' in stdout + + def test_006_grp_removal(self, multihost, backupsssdconf, local_useradd): + """ + :Title: removal of a user from a group + :id: bbf70304-aeba-4fe9-93d7-9b04677d37c0 + :customerscenario: false + :steps: + 1. Create a local group and a local user. + 2. Add local user as a member of local-group + 3. Confirm chanages in user's and group's membership returned + correctly by SSSD + 4. Remove user from group's membership + 5. Confirm chanages in user's and group's membership returned + :expectedresults: + 1. Should succeed + 2. Should succeed + 3. Should succeed + 4. Should succeed + 5. Should succeed + """ + multihost.client[0].service_sssd('start') + cmd = 'getent passwd -s sss user1' + cmd1 = multihost.client[0].run_command(cmd, raiseonerr=False) + exit_status, _ = getent_sss(multihost, 'user1', 'passwd') + exit_status, _ = run_cmd(multihost, 'usermod -aG l_grp1 user1') + time.sleep(1) + cmd = 'groups user1' + cmd1 = multihost.client[0].run_command(cmd, raiseonerr=False) + exit_status, stdout_text = run_cmd(multihost, 'groups user1') + assert 'l_grp1' in stdout_text + exit_status, _ = run_cmd(multihost, 'gpasswd -d user1 l_grp1') + cmd = 'groups user1' + cmd1 = multihost.client[0].run_command(cmd, raiseonerr=False) + exit_status, stdout_text = run_cmd(multihost, 'groups user1') + assert 'l_grp1' not in stdout_text + + def test_007_zero_gid_user(self, multihost, backupsssdconf, local_useradd): + """ + :Title: caching of user with gid value set to zero + :id: f21526e8-1092-493d-a885-3bb732e14741 + :customerscenario: false + :steps: + 1. Create a local user with gid set to a zero + 2. Confirm SSSD does not cache this user information + :expectedresults: + 1. Should succeed + 2. Should succeed + """ + multihost.client[0].service_sssd('start') + exit_status, _ = run_cmd(multihost, 'local_useradd -g 0 u_zero_uid') + assert exit_status == 0 + time.sleep(1) + exit_status, _ = getent_sss(multihost, 'u_zero_uid', 'passwd') + assert exit_status != 0 + exit_status, _ = run_cmd(multihost, 'userdel -rf u_zero_uid') + assert exit_status == 0 + + def test_008_system_users(self, multihost, backupsssdconf): + """ + :Title: caching of system users + :id: 56be0457-989c-433f-87d8-51bb77f07631 + :customerscenario: false + :steps: + 1. All system-users with non-zero gid are returned by SSSD + :expectedresults: + 1. Should succeed + """ + multihost.client[0].service_sssd('start') + multihost.client[0].transport.get_file('/etc/passwd', '/tmp/passwd') + with open('/tmp/passwd', 'r') as file: + u_list = [] + f_read = file.readlines() + u_name = [usr.split(':')[0] for usr in f_read + if usr.split(':')[3] != '0'] + for user in u_name: + exit_status, _ = getent_sss(multihost, user, 'passwd') + assert exit_status == 0 + multihost.client[0].run_command('rm -f /tmp/passwd', raiseonerr=False) + + def test_009_system_users_zero_gid(self, multihost, backupsssdconf): + """ + :Title: caching of system users with zero gid + :id: 4149b84b-bbfc-4aaa-aaae-462444c9050c + :customerscenario: false + :steps: + 1. All system-users with zero gid are not returned by SSSD + :expectedresults: + 1. Should succeed + """ + multihost.client[0].service_sssd('start') + multihost.client[0].transport.get_file('/etc/passwd', '/tmp/passwd') + with open('/tmp/passwd', 'r') as file: + u_list = [] + f_read = file.readlines() + u_name = [usr.split(':')[0] for usr in f_read + if usr.split(':')[3] == '0'] + for user in u_name: + exit_status, _ = getent_sss(multihost, user, 'passwd') + assert exit_status != 0 + multihost.client[0].run_command('rm -f /tmp/passwd', raiseonerr=False) + + def test_010_dup_uid(self, multihost, backupsssdconf): + """ + :Title: caching of users with same uid + :id: f21c2bfe-baf6-4c8d-8195-e834729da0ba + :customerscenario: false + :steps: + 1. Create two local user with same uid + 2. Modify user's uid to a different value + 3. Confirm changes in uid of user are reflected by sssd + :expectedresults: + 1. Should succeed + 2. Should succeed + 3. Should succeed + """ + multihost.client[0].service_sssd('start') + localuser = 'local_user1' + dup_user = 'local_user2' + cmd = f'local_useradd -u 2222 {localuser}' + exit_status, _ = run_cmd(multihost, cmd) + cmd = f'local_useradd -u 2222 -o {dup_user}' + exit_status, _ = run_cmd(multihost, cmd) + time.sleep(1) + exit_status, _ = getent_sss(multihost, f'{dup_user}', 'passwd') + assert exit_status == 0 + exit_status, _ = getent_sss(multihost, f'{localuser}', 'passwd') + assert exit_status != 0 + cmd = f'userdel -rf {dup_user}' + multihost.client[0].run_command(cmd, raiseonerr=False) + cmd = f'userdel -rf {localuser}' + multihost.client[0].run_command(cmd, raiseonerr=False) + + def test_011_gecos_usr(self, multihost, backupsssdconf): + """ + :Title: caching of gecos data of user + :id: 0e16d3bf-9ded-4b45-bf12-81f90349b007 + :customerscenario: false + :steps: + 1. Create a local user with some gecos data + 2. Confirm gecos data of user is reflected by sssd + :expectedresults: + 1. Should succeed + 2. Should succeed + """ + multihost.client[0].service_sssd('start') + localuser = 'localuser1' + gecos = 'This gecos info added' + cmd = f'local_useradd -c "{gecos}" {localuser}' + exit_status, _ = run_cmd(multihost, cmd) + assert exit_status == 0 + time.sleep(1) + exit_status, stdout = getent_sss(multihost, localuser, "passwd") + assert f'{gecos}' in stdout + exit_status, _ = run_cmd(multihost, f'userdel -rf {localuser}') + + def test_012_expired_user(self, multihost, backupsssdconf): + """ + :Title: caching of gecos data of user + :id: bcd0ebfc-0478-4493-a3f8-123e6206e792 + :customerscenario: false + :steps: + 1. Create a local user with some gecos data + 2. Confirm gecos data of user is reflected by sssd + :expectedresults: + 1. Should succeed + 2. Should succeed + """ + multihost.client[0].service_sssd('start') + lusr = 'usr' + cmd = f'local_useradd -e 2018-08-09 {lusr}' + exit_status, _ = run_cmd(multihost, cmd) + assert exit_status == 0 + time.sleep(1) + exit_status, stdout = getent_sss(multihost, lusr, "passwd") + exit_status, _ = run_cmd(multihost, f'userdel -rf {lusr}') + + def test_013_expired_user(self, multihost, backupsssdconf): + """ + :Title: caching of gecos data of user + :id: bcd0ebfc-0478-4493-a3f8-123e6206e792 + :customerscenario: false + :steps: + 1. Create a local user with some gecos data + 2. Confirm gecos data of user is reflected by sssd + :expectedresults: + 1. Should succeed + 2. Should succeed + """ + multihost.client[0].service_sssd('start') + lusr = 'usr' + cmd = f'local_useradd -e 2018-08-09 {lusr}' + exit_status, _ = run_cmd(multihost, cmd) + assert exit_status == 0 + time.sleep(1) + exit_status, stdout = getent_sss(multihost, lusr, "passwd") + exit_status, _ = run_cmd(multihost, f'userdel -rf {lusr}') + + @pytest.mark.tier2 + def test_014_grp_membr_modification(self, multihost, + backupsssdconf, local_useradd): + """ + :Title: modification of user group membership + :id: ec84bdec-50d9-4eb8-a612-b4c14787639b + :customerscenario: false + :steps: + 1. Create a local user and a local group + 2. Add user as member to local group + 3. Confirm modification is reflected in + user and group information + :expectedresults: + 1. Should succeed + 2. Should succeed + 3. Should succeed + """ + multihost.client[0].service_sssd('start') + exit_status, stdout = getent_sss(multihost, 'user1', 'passwd') + assert 'l_grp1' not in stdout + exit_status, stdout = getent_sss(multihost, 'l_grp1', 'group') + assert 'user1' not in stdout + lusr = 'usr' + cmd = f'usermod -aG l_grp1 user1' + exit_status, _ = run_cmd(multihost, cmd) + time.sleep(1) + exit_status, stdout = run_cmd(multihost, 'groups user1') + assert 'l_grp1' in stdout + exit_status, stdout = getent_sss(multihost, 'l_grp1', 'group') + assert 'user1' in stdout + + @pytest.mark.tier2 + def test_015_homedir_modification(self, multihost, + backupsssdconf, local_useradd): + """ + :Title: modification of user home directory + :id: 538b74d4-32e2-466d-94b0-faa010a9b16e + :customerscenario: false + :steps: + 1. Create a local user + 2. Modify users home directory to other value + 3. Confirm modification is reflected in + user information + :expectedresults: + 1. Should succeed + 2. Should succeed + 3. Should succeed + """ + multihost.client[0].service_sssd('start') + exit_status, stdout = getent_sss(multihost, 'user1', 'passwd') + assert '/home/user1' in stdout + time.sleep(1) + new_home = '/home/new_user1' + cmd = f'usermod -d {new_home} user1' + exit_status, stdout = run_cmd(multihost, cmd) + time.sleep(1) + exit_status, stdout = getent_sss(multihost, 'user1', 'passwd') + assert new_home in stdout
_______________________________________________ sssd-devel mailing list -- sssd-devel@lists.fedorahosted.org To unsubscribe send an email to sssd-devel-le...@lists.fedorahosted.org Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedorahosted.org/archives/list/sssd-devel@lists.fedorahosted.org Do not reply to spam on the list, report it: https://pagure.io/fedora-infrastructure