mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 18:40:43 +03:00
ZTS: Log test name to /dev/kmsg on Linux
Add a -K option to the test suite to log each test name to /dev/kmsg (on Linux), so if there's a kernel warning we'll be able to match it up to a particular test. Reviewed-by: John Kennedy <john.kennedy@delphix.com> Signed-off-by: Tony Hutter <hutter2@llnl.gov> Closes #13227
This commit is contained in:
@@ -34,6 +34,7 @@ from subprocess import Popen
|
||||
from subprocess import check_output
|
||||
from threading import Timer
|
||||
from time import time, CLOCK_MONOTONIC
|
||||
from os.path import exists
|
||||
|
||||
BASEDIR = '/var/tmp/test_results'
|
||||
TESTDIR = '/usr/share/zfs/'
|
||||
@@ -256,7 +257,7 @@ User: %s
|
||||
|
||||
return out.lines, err.lines
|
||||
|
||||
def run(self, dryrun, kmemleak):
|
||||
def run(self, dryrun, kmemleak, kmsg):
|
||||
"""
|
||||
This is the main function that runs each individual test.
|
||||
Determine whether or not the command requires sudo, and modify it
|
||||
@@ -275,6 +276,18 @@ User: %s
|
||||
except OSError as e:
|
||||
fail('%s' % e)
|
||||
|
||||
"""
|
||||
Log each test we run to /dev/kmsg (on Linux), so if there's a kernel
|
||||
warning we'll be able to match it up to a particular test.
|
||||
"""
|
||||
if kmsg is True and exists("/dev/kmsg"):
|
||||
try:
|
||||
kp = Popen([SUDO, "sh", "-c",
|
||||
f"echo ZTS run {self.pathname} > /dev/kmsg"])
|
||||
kp.wait()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
self.result.starttime = monotonic_time()
|
||||
|
||||
if kmemleak:
|
||||
@@ -459,14 +472,14 @@ Tags: %s
|
||||
|
||||
cont = True
|
||||
if len(pretest.pathname):
|
||||
pretest.run(options.dryrun, False)
|
||||
pretest.run(options.dryrun, False, options.kmsg)
|
||||
cont = pretest.result.result == 'PASS'
|
||||
pretest.log(options)
|
||||
|
||||
if cont:
|
||||
test.run(options.dryrun, options.kmemleak)
|
||||
test.run(options.dryrun, options.kmemleak, options.kmsg)
|
||||
if test.result.result == 'KILLED' and len(failsafe.pathname):
|
||||
failsafe.run(options.dryrun, False)
|
||||
failsafe.run(options.dryrun, False, options.kmsg)
|
||||
failsafe.log(options, suppress_console=True)
|
||||
else:
|
||||
test.skip()
|
||||
@@ -474,7 +487,7 @@ Tags: %s
|
||||
test.log(options)
|
||||
|
||||
if len(posttest.pathname):
|
||||
posttest.run(options.dryrun, False)
|
||||
posttest.run(options.dryrun, False, options.kmsg)
|
||||
posttest.log(options)
|
||||
|
||||
|
||||
@@ -577,7 +590,7 @@ Tags: %s
|
||||
|
||||
cont = True
|
||||
if len(pretest.pathname):
|
||||
pretest.run(options.dryrun, False)
|
||||
pretest.run(options.dryrun, False, options.kmsg)
|
||||
cont = pretest.result.result == 'PASS'
|
||||
pretest.log(options)
|
||||
|
||||
@@ -590,9 +603,9 @@ Tags: %s
|
||||
failsafe = Cmd(self.failsafe, outputdir=odir, timeout=self.timeout,
|
||||
user=self.failsafe_user, identifier=self.identifier)
|
||||
if cont:
|
||||
test.run(options.dryrun, options.kmemleak)
|
||||
test.run(options.dryrun, options.kmemleak, options.kmsg)
|
||||
if test.result.result == 'KILLED' and len(failsafe.pathname):
|
||||
failsafe.run(options.dryrun, False)
|
||||
failsafe.run(options.dryrun, False, options.kmsg)
|
||||
failsafe.log(options, suppress_console=True)
|
||||
else:
|
||||
test.skip()
|
||||
@@ -600,7 +613,7 @@ Tags: %s
|
||||
test.log(options)
|
||||
|
||||
if len(posttest.pathname):
|
||||
posttest.run(options.dryrun, False)
|
||||
posttest.run(options.dryrun, False, options.kmsg)
|
||||
posttest.log(options)
|
||||
|
||||
|
||||
@@ -1060,6 +1073,8 @@ def parse_args():
|
||||
parser.add_option('-i', action='callback', callback=options_cb,
|
||||
default=TESTDIR, dest='testdir', type='string',
|
||||
metavar='testdir', help='Specify a test directory.')
|
||||
parser.add_option('-K', action='store_true', default=False, dest='kmsg',
|
||||
help='Log tests names to /dev/kmsg')
|
||||
parser.add_option('-m', action='callback', callback=kmemleak_cb,
|
||||
default=False, dest='kmemleak',
|
||||
help='Enable kmemleak reporting (Linux only)')
|
||||
|
||||
Reference in New Issue
Block a user