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

Reply via email to