ACK: [PATCH 1/1][autotest-client-tests] UBUNTU: SAUCE: ubuntu_boot: add tests to check error in log and kernel_tainted flags

Sean Feole sean.feole at canonical.com
Thu Jul 9 15:48:04 UTC 2020


Acked-by: Sean Feole <sean.feole at canonical.com>

On Wed, Jul 8, 2020 at 8:12 AM Po-Hsu Lin <po-hsu.lin at canonical.com> wrote:

> Add two sub-tests into the boot test to help us catching issues like
> lp:1840046 ("BUG: non-zero pgtables_bytes on freeing mm: -16384") in the
> early stage:
>   1. log_check test - use regex to search for error patterns in syslog
>   2. kernel_tainted test - check for kernel tainted flags
>
> Call the original test as a boot_smoke_test, so now there will be 3
> tests under this ubuntu_boot test.
>
> This ubuntu_boot test will be executed when the kernel was copied to
> our ppa.
>
> Signed-off-by: Po-Hsu Lin <po-hsu.lin at canonical.com>
> ---
>  ubuntu_boot/control.ubuntu |  8 +++---
>  ubuntu_boot/ubuntu_boot.py | 54 ++++++++++++++++++++++++++++++++++++--
>  2 files changed, 57 insertions(+), 5 deletions(-)
>
> diff --git a/ubuntu_boot/control.ubuntu b/ubuntu_boot/control.ubuntu
> index f9986199..bc687b8a 100644
> --- a/ubuntu_boot/control.ubuntu
> +++ b/ubuntu_boot/control.ubuntu
> @@ -1,11 +1,13 @@
>  AUTHOR = 'brad.figg at canonical.com (Brad Figg)'
>  TIME = 'MEDIUM'
> -NAME = 'Perform a simple "boot" test'
> +NAME = 'Perform a simple "boot" test and check error / taint flags'
>  TEST_TYPE = 'client'
>  TEST_CLASS = 'Kernel'
> -TEST_CATEGORY = 'Stress'
> +TEST_CATEGORY = 'Smoke'
>
>  DOC = '''
>  '''
>
> -job.run_test_detail('ubuntu_boot', test_time=600)
> +job.run_test_detail('ubuntu_boot', test_name='kernel_tainted',
> tag='kernel_tainted')
> +job.run_test_detail('ubuntu_boot', test_name='log_check', tag='log_check')
> +job.run_test_detail('ubuntu_boot', test_name='boot_smoke_test',
> tag='boot_smoke_test')
> diff --git a/ubuntu_boot/ubuntu_boot.py b/ubuntu_boot/ubuntu_boot.py
> index dba7a1ae..c799c560 100644
> --- a/ubuntu_boot/ubuntu_boot.py
> +++ b/ubuntu_boot/ubuntu_boot.py
> @@ -1,12 +1,62 @@
>  import os
> +import re
>  from autotest.client import test, utils
> +from autotest.client.shared import error
>
>
>  class ubuntu_boot(test.test):
>      version = 1
> +    def log_check(self):
> +        '''Test for checking error patterns in log files'''
> +        # dmesg will be cleared out in autotest with dmesg -c before the
> test starts
> +        # Let's check for /var/log/syslog instead
> +        logfile = '/var/log/syslog'
> +        patterns = [
> +            'kernel: \[ *\d+\.\d+\] BUG:',
> +            'kernel: \[ *\d+\.\d+\] Oops:',
> +            'kernel: \[ *\d+\.\d+\] kernel BUG at',
> +            'kernel: \[ *\d+\.\d+\] WARNING:'
> +        ]
> +        test_passed = True
> +        print('Checking error message in {}:'.format(logfile))
> +        if os.path.exists(logfile):
> +            with open(logfile) as f:
> +                content = f.read()
> +                for pat in patterns:
> +                    print('Scanning for pattern "{}"'.format(pat))
> +                    if re.search(pat, content):
> +                        print('Pattern found, Log NOT clean.')
> +                        test_passed = False
> +        else:
> +            print('Log file was not found.')
> +            test_passed = False
> +        return test_passed
> +
> +    def kernel_tainted(self):
> +        '''Test for checking kernel tatined flags'''
> +        test_passed = True
> +        print('Checking kernel tainted flags in /proc/sys/kernel/tainted')
> +        with open('/proc/sys/kernel/tainted') as f:
> +            content = f.read()
> +            if content != '0\n':
> +                test_passed = False
> +        return test_passed
> +
> +    def run_once(self, test_name, exit_on_error=True):
> +        if test_name == 'log_check':
> +            if not self.log_check():
> +                raise error.TestFail()
> +            else:
> +                print("GOOD: Log clean.")
> +            return
> +        elif test_name == 'kernel_tainted':
> +            if not self.kernel_tainted():
> +                raise error.TestFail()
> +            else:
> +                print('GOOD: Kernel not tainted.')
> +            return
>
> -    def run_once(self, test_time=10, exit_on_error=True, set_time=True):
>          cmd = "uname -a"
>          utils.system(cmd)
> -        cmd = "lsb_release"
> +        cmd = "lsb_release -a"
>          utils.system(cmd)
> --
> 2.17.1
>
>
> --
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20200709/2f2cf258/attachment-0001.html>


More information about the kernel-team mailing list