URL: https://github.com/SSSD/sssd/pull/5792 Author: shridhargadekar Title: #5792: Tests: improve sssd refresh timers for sudo queries Action: synchronized
To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/5792/head:pr5792 git checkout pr5792
From f51dc36ef2080d6a039018e7432ab8977b57c4df Mon Sep 17 00:00:00 2001 From: Shridhar Gadekar <sgade...@sgadekar.pnq.csb> Date: Wed, 22 Sep 2021 15:15:36 +0530 Subject: [PATCH] Tests: improve sssd refresh timers for sudo queries verifies:#5604 bugzilla:https://github.com/shridhargadekar/sssd/pull/new/sssd-3162 --- src/tests/multihost/alltests/conftest.py | 37 +++++++++++-- src/tests/multihost/alltests/test_sudo.py | 66 +++++++++++++++++++++-- 2 files changed, 94 insertions(+), 9 deletions(-) diff --git a/src/tests/multihost/alltests/conftest.py b/src/tests/multihost/alltests/conftest.py index 6ace9dfe07..d7f34b7c24 100644 --- a/src/tests/multihost/alltests/conftest.py +++ b/src/tests/multihost/alltests/conftest.py @@ -424,11 +424,38 @@ def restore_sssd_conf(): request.addfinalizer(restore_sssd_conf) +@pytest.fixture(scope='function') +def sssd_sudo_conf(session_multihost, request): + """ Configure basic sudo parameters in sssd.conf """ + tools = sssdTools(session_multihost.client[0]) + session_multihost.client[0].service_sssd('stop') + tools.remove_sss_cache('/var/lib/sss/db/') + tools.remove_sss_cache('/var/log/sssd') + ldap_uri = f'ldap://{session_multihost.master[0].sys_hostname}' + section = "sssd" + sssd_params = {'services': 'nss, pam, sudo'} + tools.sssd_conf(section, sssd_params) + sudo_base = f'ou=sudoers,{ds_suffix}' + params = {'ldap_sudo_search_base': sudo_base, + 'sudo_provider': 'ldap'} + domain_section = 'domain/{ds_instance_name}' + tools.sssd_conf(domain_section, params, action='update') + ret = session_multihost.client[0].service_sssd('start') + + def restore_sssd_conf(): + """ Restore sssd.conf """ + services = 'nss, pam' + sssd_params = {'services': services} + tools.sssd_conf('sssd', sssd_params) + tools.sssd_conf(domain_section, params, action='delete') + request.addfinalizer(restore_sssd_conf) + + @pytest.fixture(scope='function') def sudo_rule(session_multihost, request): """ Create sudoers ldap entries """ - ldap_uri = 'ldap://%s' % (session_multihost.master[0].sys_hostname) - sudo_ou = 'ou=sudoers, %s' % ds_suffix + ldap_uri = f'ldap://{session_multihost.master[0].sys_hostname}' + sudo_ou = f'ou=sudoers,{ds_suffix}' ds_rootdn = 'cn=Directory Manager' ds_rootpw = 'Secret123' ldap_inst = LdapOperations(ldap_uri, ds_rootdn, ds_rootpw) @@ -439,12 +466,12 @@ def sudo_rule(session_multihost, request): sudo_options = ["!requiretty", "!authenticate"] sudo_cmd = '/usr/bin/head' sudo_user = 'foo1' - rule_dn = "cn=%s, %s" % (sudo_cmd, sudo_ou) + rule_dn = f'cn={sudo_cmd},{sudo_ou}' try: ldap_inst.add_sudo_rule(rule_dn, 'ALL', '/usr/bin/head', sudo_user, sudo_options) except LdapException: - pytest.fail("Failed to add sudo rule %s" % rule_dn) + pytest.fail(f"Failed to add sudo rule {rule_dn}") else: extra_user = 'foo2' add_extra = [(ldap.MOD_ADD, 'sudoUser', @@ -454,7 +481,7 @@ def sudo_rule(session_multihost, request): def del_sudo_rule(): """ Delete sudo rule """ - rule_dn = 'cn=%s,%s' % (sudo_cmd, sudo_ou) + rule_dn = f'cn={sudo_cmd},{sudo_ou}' (_, _) = ldap_inst.del_dn(rule_dn) (ret, _) = ldap_inst.del_dn(sudo_ou) assert ret == 'Success' diff --git a/src/tests/multihost/alltests/test_sudo.py b/src/tests/multihost/alltests/test_sudo.py index a906eaada2..90981e2317 100644 --- a/src/tests/multihost/alltests/test_sudo.py +++ b/src/tests/multihost/alltests/test_sudo.py @@ -184,9 +184,67 @@ def test_randomize_sudo_timeout(self, multihost, same_intvl += 1 index += 1 assert rand_intvl > same_intvl + + @pytest.mark.tier2 + def test_improve_refresh_timers_sudo_timeout(self, multihost, + backupsssdconf, + sssd_sudo_conf, + sudo_rule): + """ + :title: sudo: improve sudo full and smart refresh timeouts + :id: 3860d1b9-28fc-4d44-9537-caf28ab033c8 + :bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1925505 + :customerscenario: True + :steps: + 1. Edit sssdconfig and specify sssd smart, full timeout option + 2. Restart sssd with cleared logs and cache + 3. Wait for 40 seconds + 4. Parse logs and confirm sudo full refresh and smart refresh + timeout are not running at same time + 5. If sudo full refresh and smart refresh timer are scheduled at + same time then smart refresh is rescheduled to the next cycle + :expectedresults: + 1. Should succeed + 2. Should succeed + 3. Should succeed + 4. Should succeed + 5. Should succeed + """ + tools = sssdTools(multihost.client[0]) multihost.client[0].service_sssd('stop') - params = {'ldap_sudo_full_refresh_interval': '25', - 'ldap_sudo_smart_refresh_interval': '15', - 'ldap_sudo_random_offset': '5'} - tools.sssd_conf(domain_section, params, action='delete') + tools.remove_sss_cache('/var/lib/sss/db') + tools.remove_sss_cache('/var/log/sssd') + params = {'ldap_sudo_full_refresh_interval': '10', + 'ldap_sudo_random_offset': '0', + 'ldap_sudo_smart_refresh_interval': '5'} + domain_section = f'domain/{ds_instance_name}' + tools.sssd_conf(domain_section, params, action='update') multihost.client[0].service_sssd('start') + time.sleep(40) + logfile = f'/var/log/sssd/sssd_{ds_instance_name}.log' + tmout_ptrn = f"(SUDO.*Refresh.*executing)" + rschdl_ptrn = f"(SUDO.*Refresh.*rescheduling)" + regex_tmout = re.compile("%s" % tmout_ptrn) + rgx_rs_tstmp = re.compile("%s" % rschdl_ptrn) + full_rfsh_tstmp = [] + smrt_rfsh_tstmp = [] + rschdl_tstmp = [] + log = multihost.client[0].get_file_contents(logfile).decode('utf-8') + for line in log.split('\n'): + if (regex_tmout.findall(line)): + dt_time = line.split('):')[0] + tstmp = dt_time.split()[1] + ref_type = line.split()[7] + if ref_type == 'Smart': + smrt_rfsh_tstmp.append(tstmp) + elif ref_type == 'Full': + full_rfsh_tstmp.append(tstmp) + if (rgx_rs_tstmp.findall(line)): + dt_time = line.split('):')[0] + tstmp = dt_time.split()[1] + rschdl_tstmp.append(tstmp) + for tm_stamp in full_rfsh_tstmp: + if tm_stamp in smrt_rfsh_tstmp: + assert tm_stamp in rschdl_tstmp + else: + assert tm_stamp not in smrt_rfsh_tstmp
_______________________________________________ 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