URL: https://github.com/SSSD/sssd/pull/5929 Author: sgoveas Title: #5929: Tests: Add tests for poor man's backtrace Action: synchronized
To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/5929/head:pr5929 git checkout pr5929
From 4c5b146029387780a65f09fa9a89526fac39c34d Mon Sep 17 00:00:00 2001 From: Steeve Goveas <sgov...@redhat.com> Date: Sun, 5 Dec 2021 19:27:51 +0530 Subject: [PATCH] Tests: Add tests for poor man's backtrace Tests are added to check that no duplicate backtrace is generated and it is generated when * no debug level is defined / default debug level * debug level is set to 0 or 1 * no backtrace when debug level is >= 9 * backtrace can be disabled Verifies: #5585 https://bugzilla.redhat.com/show_bug.cgi?id=1949149 https://bugzilla.redhat.com/show_bug.cgi?id=2021196 --- src/tests/multihost/alltests/pytest.ini | 1 + .../multihost/alltests/test_backtrace.py | 167 ++++++++++++++++++ 2 files changed, 168 insertions(+) create mode 100644 src/tests/multihost/alltests/test_backtrace.py diff --git a/src/tests/multihost/alltests/pytest.ini b/src/tests/multihost/alltests/pytest.ini index ac127c07f3..8754deabef 100644 --- a/src/tests/multihost/alltests/pytest.ini +++ b/src/tests/multihost/alltests/pytest.ini @@ -25,6 +25,7 @@ markers = ssh: Tests related to ssh responder ldaplibdebuglevel: Test ldap_library_debug_level option no_tier: test cases are not executed on any tier + backtrace: test poor man's backtrace in logs for debug level < 9 tier1: tier1 test cases with run time of aproximately 60 minutes tier1_2: tier1 test cases split to keep runtime upto 60 minutes tier2: tier2 test cases diff --git a/src/tests/multihost/alltests/test_backtrace.py b/src/tests/multihost/alltests/test_backtrace.py new file mode 100644 index 0000000000..15bd45bd29 --- /dev/null +++ b/src/tests/multihost/alltests/test_backtrace.py @@ -0,0 +1,167 @@ +"""Automation poor man's backtrace + +:requirement: Poor Man's Backtrace +:casecomponent: sssd +:subsystemteam: sst_idm_sssd +:upstream: yes +:bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1949149 +""" + +from __future__ import print_function +import re +import time +import pytest +from sssd.testlib.common.utils import sssdTools +from sssd.testlib.common.expect import pexpect_ssh +from constants import ds_instance_name + + +@pytest.mark.usefixtures('setup_sssd', 'create_posix_usersgroups') +@pytest.mark.backtrace +@pytest.mark.tier1_2 +class TestPoorManBacktrace(object): + """ Check sssd backtrace feature """ + def test_0001_bz2021196(self, multihost, backupsssdconf): + """ + :title: avoid duplicate backtraces + :id: d4d8a0a0-ab90-4c8f-8087-95dc7ad3f3ae + :customerscenario: true + :bugzilla: + https://bugzilla.redhat.com/show_bug.cgi?id=2021196 + https://bugzilla.redhat.com/show_bug.cgi?id=2021499 + """ + hostname = multihost.master[0].sys_hostname + bad_ldap_uri = "ldaps://typo.%s" % hostname + tools = sssdTools(multihost.client[0]) + domain_params = {'ldap_uri': bad_ldap_uri} + tools.sssd_conf('domain/%s' % ds_instance_name, domain_params) + tools.clear_sssd_cache() + logfile = '/var/log/sssd/sssd_nss.log' + cmd = f'getent passwd fakeuser@{ds_instance_name}' + multihost.client[0].run_command(cmd, raiseonerr=False) + msg = 'BACKTRACE DUMP ENDS HERE' + msg2 = '... skipping repetitive backtrace ...' + pattern = re.compile(fr'{msg}') + pattern2 = re.compile(fr'{msg2}') + log_str1 = multihost.client[0].get_file_contents(logfile). \ + decode('utf-8') + multihost.client[0].run_command(f'> {logfile}') + multihost.client[0].run_command(cmd, raiseonerr=False) + time.sleep(2) + log_str2 = multihost.client[0].get_file_contents(logfile). \ + decode('utf-8') + # Check the backtrace is dumped first time and no backtrace is skipped + assert pattern.search(log_str1) and not pattern2.search(log_str1) + # Check there is no new backtrace with the same issue and repeative + # backtrace is skipped + assert pattern2.search(log_str2) and not pattern.search(log_str2) + + def test_0001_bz1949149(self, multihost, backupsssdconf): + """ + :title: backtrace is disabled if debug level >= 9 + :id: 50f2d501-3296-4229-86a0-b81844381637 + """ + section = "domain/%s" % ds_instance_name + param = {'debug_level': '9'} + serv_list = ['sssd', section, 'nss', 'pam'] + tools = sssdTools(multihost.client[0]) + for serv in serv_list: + tools.sssd_conf(serv, param) + tools.clear_sssd_cache() + cmd_kill = 'kill -SIGUSR2 $(pidof sssd)' + multihost.client[0].run_command(cmd_kill, raiseonerr=False) + cmd = f'getent passwd fakeuser@{ds_instance_name}' + multihost.client[0].run_command(cmd, raiseonerr=False) + log_list = ['sssd', 'sssd_example1', 'sssd_nss', 'sssd_pam'] + for logfilename in log_list: + log = f'/var/log/sssd/{logfilename}.log' + log_str = multihost.client[0].get_file_contents(log).decode( + 'utf-8') + find = re.compile(r'BACKTRACE DUMP ENDS HERE') + assert not find.search(log_str) + + def test_0002_bz1949149(self, multihost, backupsssdconf): + """ + :title: set debug_backtrace_enabled false + :id: b8084e03-5e21-45ee-a463-65ab537fa110 + """ + section = "domain/%s" % ds_instance_name + param = {'debug_backtrace_enabled': 'false'} + serv_list = ['sssd', section, 'nss', 'pam'] + tools = sssdTools(multihost.client[0]) + for serv in serv_list: + tools.sssd_conf(serv, param) + tools.clear_sssd_cache() + cmd_kill = 'kill -SIGUSR2 $(pidof sssd)' + multihost.client[0].run_command(cmd_kill, raiseonerr=False) + cmd = f'getent passwd fakeuser@{ds_instance_name}' + multihost.client[0].run_command(cmd, raiseonerr=False) + log_list = ['sssd', 'sssd_example1', 'sssd_nss', 'sssd_pam'] + for logfilename in log_list: + log = f'/var/log/sssd/{logfilename}.log' + log_str = multihost.client[0].get_file_contents(log).decode( + 'utf-8') + find = re.compile(r'BACKTRACE DUMP ENDS HERE') + assert not find.search(log_str) + + def test_0003_bz1949149(self, multihost, backupsssdconf): + """ + :title: backtrace level is 0 with debug level set to 0 + :id: 4376d596-a613-447c-8f85-e3f3fbc05728 + """ + section = "domain/%s" % ds_instance_name + param = {'debug_level': '0'} + serv_list = ['sssd', section, 'nss', 'pam'] + tools = sssdTools(multihost.client[0]) + for serv in serv_list: + tools.sssd_conf(serv, param) + param = {'ldap_uri': 'typo.test_0004_bz1949149'} + tools.sssd_conf(section, param) + # stop sssd, delete logs and cache, start sssd + tools.clear_sssd_cache(start=False) + multihost.client[0].run_command('systemctl start sssd', + raiseonerr=False) + log_list = ['sssd', f'sssd_{ds_instance_name}', 'sssd_nss', 'sssd_pam'] + find1 = re.compile(r'BACKTRACE DUMP ENDS HERE') + find2 = re.compile(r'.0x0010.') + for logfilename in log_list: + log = f'/var/log/sssd/{logfilename}.log' + log_str = multihost.client[0].get_file_contents(log). \ + decode('utf-8') + log_lines = log_str.splitlines() + # Check only error of level 0x0010 generates backtrace + for index, line in enumerate(log_lines): + if find1.search(line): + log_level = log_lines[index - 1] + assert find2.search(log_level) + + def test_0004_bz1949149(self, multihost, backupsssdconf): + """ + :title: backtrace level is 1 with debug level set to 1 + :id: 8a8adcdd-63bc-4a64-83cd-5c7b76fe745a + """ + section = "domain/%s" % ds_instance_name + param = {'debug_level': '1'} + serv_list = ['sssd', section, 'nss', 'pam'] + tools = sssdTools(multihost.client[0]) + for serv in serv_list: + tools.sssd_conf(serv, param) + param = {'ldap_uri': 'typo.test_0004_bz1949149'} + tools.sssd_conf(section, param) + tools.clear_sssd_cache(start=False) + multihost.client[0].run_command('systemctl start sssd', + raiseonerr=False) + log_list = ['sssd', f'sssd_{ds_instance_name}', 'sssd_nss', 'sssd_pam'] + find1 = re.compile(r'BACKTRACE DUMP ENDS HERE') + find2 = re.compile(r'.0x0010.') + find3 = re.compile(r'.0x0020.') + for logfilename in log_list: + log = f'/var/log/sssd/{logfilename}.log' + log_str = multihost.client[0].get_file_contents(log). \ + decode('utf-8') + log_lines = log_str.splitlines() + # Check only error of level 0x0010 and 0x0020 generates backtrace + for index, line in enumerate(log_lines): + if find1.search(line): + log_level = log_lines[index - 1] + assert find2.search(log_level) or find3.search(log_level)
_______________________________________________ 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