Fix flake 8 style warnings
Ran zts-report.py and test-runner.py from ./tests/test-runner/bin/ through the 2to3 (https://docs.python.org/2/library/2to3.html). Checked the result, fixed: - 'maxint' -> 'maxsize' that 2to3 missed. - 'cmp=' parameter for a 'sorted()' with a 'key=' version. - try/except wrapping of configparser import as there are still python 2.7 systems that lack a compatibility shim Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Gregor Kopka <gregor@kopka.net> Closes #7925 Closes #7952
This commit is contained in:
parent
c13060e478
commit
3ed2fbcc1c
|
@ -16,7 +16,12 @@
|
||||||
# Copyright (c) 2017 Datto Inc.
|
# Copyright (c) 2017 Datto Inc.
|
||||||
#
|
#
|
||||||
|
|
||||||
import ConfigParser
|
# some python 2.7 system don't have a configparser shim
|
||||||
|
try:
|
||||||
|
import configparser
|
||||||
|
except ImportError:
|
||||||
|
import ConfigParser as configparser
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
@ -27,7 +32,7 @@ from select import select
|
||||||
from subprocess import PIPE
|
from subprocess import PIPE
|
||||||
from subprocess import Popen
|
from subprocess import Popen
|
||||||
from sys import argv
|
from sys import argv
|
||||||
from sys import maxint
|
from sys import maxsize
|
||||||
from threading import Timer
|
from threading import Timer
|
||||||
from time import time
|
from time import time
|
||||||
|
|
||||||
|
@ -204,23 +209,23 @@ class Cmd(object):
|
||||||
if needed. Run the command, and update the result object.
|
if needed. Run the command, and update the result object.
|
||||||
"""
|
"""
|
||||||
if options.dryrun is True:
|
if options.dryrun is True:
|
||||||
print self
|
print(self)
|
||||||
return
|
return
|
||||||
|
|
||||||
privcmd = self.update_cmd_privs(self.pathname, self.user)
|
privcmd = self.update_cmd_privs(self.pathname, self.user)
|
||||||
try:
|
try:
|
||||||
old = os.umask(0)
|
old = os.umask(0)
|
||||||
if not os.path.isdir(self.outputdir):
|
if not os.path.isdir(self.outputdir):
|
||||||
os.makedirs(self.outputdir, mode=0777)
|
os.makedirs(self.outputdir, mode=0o777)
|
||||||
os.umask(old)
|
os.umask(old)
|
||||||
except OSError, e:
|
except OSError as e:
|
||||||
fail('%s' % e)
|
fail('%s' % e)
|
||||||
|
|
||||||
self.result.starttime = time()
|
self.result.starttime = time()
|
||||||
proc = Popen(privcmd, stdout=PIPE, stderr=PIPE)
|
proc = Popen(privcmd, stdout=PIPE, stderr=PIPE)
|
||||||
# Allow a special timeout value of 0 to mean infinity
|
# Allow a special timeout value of 0 to mean infinity
|
||||||
if int(self.timeout) == 0:
|
if int(self.timeout) == 0:
|
||||||
self.timeout = maxint
|
self.timeout = maxsize
|
||||||
t = Timer(int(self.timeout), self.kill_cmd, [proc])
|
t = Timer(int(self.timeout), self.kill_cmd, [proc])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -274,7 +279,7 @@ class Cmd(object):
|
||||||
logger.debug('%s%s%s' % (msga, pad, msgb))
|
logger.debug('%s%s%s' % (msga, pad, msgb))
|
||||||
|
|
||||||
lines = sorted(self.result.stdout + self.result.stderr,
|
lines = sorted(self.result.stdout + self.result.stderr,
|
||||||
cmp=lambda x, y: cmp(x[0], y[0]))
|
key=lambda x: x[0])
|
||||||
|
|
||||||
for dt, line in lines:
|
for dt, line in lines:
|
||||||
logger.debug('%s %s' % (dt.strftime("%H:%M:%S.%f ")[:11], line))
|
logger.debug('%s %s' % (dt.strftime("%H:%M:%S.%f ")[:11], line))
|
||||||
|
@ -552,7 +557,7 @@ class TestRun(object):
|
||||||
in the 'DEFAULT' section. If the Test or TestGroup passes
|
in the 'DEFAULT' section. If the Test or TestGroup passes
|
||||||
verification, add it to the TestRun.
|
verification, add it to the TestRun.
|
||||||
"""
|
"""
|
||||||
config = ConfigParser.RawConfigParser()
|
config = configparser.RawConfigParser()
|
||||||
if not len(config.read(options.runfile)):
|
if not len(config.read(options.runfile)):
|
||||||
fail("Coulnd't read config file %s" % options.runfile)
|
fail("Coulnd't read config file %s" % options.runfile)
|
||||||
|
|
||||||
|
@ -608,7 +613,7 @@ class TestRun(object):
|
||||||
|
|
||||||
defaults = dict([(prop, getattr(options, prop)) for prop, _ in
|
defaults = dict([(prop, getattr(options, prop)) for prop, _ in
|
||||||
self.defaults])
|
self.defaults])
|
||||||
config = ConfigParser.RawConfigParser(defaults)
|
config = configparser.RawConfigParser(defaults)
|
||||||
|
|
||||||
for test in sorted(self.tests.keys()):
|
for test in sorted(self.tests.keys()):
|
||||||
config.add_section(test)
|
config.add_section(test)
|
||||||
|
@ -637,14 +642,15 @@ class TestRun(object):
|
||||||
"""
|
"""
|
||||||
done = False
|
done = False
|
||||||
components = 0
|
components = 0
|
||||||
tmp_dict = dict(self.tests.items() + self.testgroups.items())
|
tmp_dict = dict(list(self.tests.items()) +
|
||||||
|
list(self.testgroups.items()))
|
||||||
total = len(tmp_dict)
|
total = len(tmp_dict)
|
||||||
base = self.outputdir
|
base = self.outputdir
|
||||||
|
|
||||||
while not done:
|
while not done:
|
||||||
paths = []
|
paths = []
|
||||||
components -= 1
|
components -= 1
|
||||||
for testfile in tmp_dict.keys():
|
for testfile in list(tmp_dict.keys()):
|
||||||
uniq = '/'.join(testfile.split('/')[components:]).lstrip('/')
|
uniq = '/'.join(testfile.split('/')[components:]).lstrip('/')
|
||||||
if uniq not in paths:
|
if uniq not in paths:
|
||||||
paths.append(uniq)
|
paths.append(uniq)
|
||||||
|
@ -672,9 +678,9 @@ class TestRun(object):
|
||||||
if options.cmd is not 'wrconfig':
|
if options.cmd is not 'wrconfig':
|
||||||
try:
|
try:
|
||||||
old = os.umask(0)
|
old = os.umask(0)
|
||||||
os.makedirs(self.outputdir, mode=0777)
|
os.makedirs(self.outputdir, mode=0o777)
|
||||||
os.umask(old)
|
os.umask(old)
|
||||||
except OSError, e:
|
except OSError as e:
|
||||||
fail('%s' % e)
|
fail('%s' % e)
|
||||||
filename = os.path.join(self.outputdir, 'log')
|
filename = os.path.join(self.outputdir, 'log')
|
||||||
|
|
||||||
|
@ -707,8 +713,8 @@ class TestRun(object):
|
||||||
if not os.path.exists(logsymlink):
|
if not os.path.exists(logsymlink):
|
||||||
os.symlink(self.outputdir, logsymlink)
|
os.symlink(self.outputdir, logsymlink)
|
||||||
else:
|
else:
|
||||||
print 'Could not make a symlink to directory %s' % (
|
print('Could not make a symlink to directory %s' % (
|
||||||
self.outputdir)
|
self.outputdir))
|
||||||
iteration = 0
|
iteration = 0
|
||||||
while iteration < options.iterations:
|
while iteration < options.iterations:
|
||||||
for test in sorted(self.tests.keys()):
|
for test in sorted(self.tests.keys()):
|
||||||
|
@ -721,17 +727,17 @@ class TestRun(object):
|
||||||
if Result.total is 0:
|
if Result.total is 0:
|
||||||
return 2
|
return 2
|
||||||
|
|
||||||
print '\nResults Summary'
|
print('\nResults Summary')
|
||||||
for key in Result.runresults.keys():
|
for key in list(Result.runresults.keys()):
|
||||||
if Result.runresults[key] is not 0:
|
if Result.runresults[key] is not 0:
|
||||||
print '%s\t% 4d' % (key, Result.runresults[key])
|
print('%s\t% 4d' % (key, Result.runresults[key]))
|
||||||
|
|
||||||
m, s = divmod(time() - self.starttime, 60)
|
m, s = divmod(time() - self.starttime, 60)
|
||||||
h, m = divmod(m, 60)
|
h, m = divmod(m, 60)
|
||||||
print '\nRunning Time:\t%02d:%02d:%02d' % (h, m, s)
|
print('\nRunning Time:\t%02d:%02d:%02d' % (h, m, s))
|
||||||
print 'Percent passed:\t%.1f%%' % ((float(Result.runresults['PASS']) /
|
print('Percent passed:\t%.1f%%' % ((float(Result.runresults['PASS']) /
|
||||||
float(Result.total)) * 100)
|
float(Result.total)) * 100))
|
||||||
print 'Log directory:\t%s' % self.outputdir
|
print('Log directory:\t%s' % self.outputdir)
|
||||||
|
|
||||||
if Result.runresults['FAIL'] > 0:
|
if Result.runresults['FAIL'] > 0:
|
||||||
return 1
|
return 1
|
||||||
|
@ -804,7 +810,7 @@ def find_tests(testrun, options):
|
||||||
|
|
||||||
|
|
||||||
def fail(retstr, ret=1):
|
def fail(retstr, ret=1):
|
||||||
print '%s: %s' % (argv[0], retstr)
|
print('%s: %s' % (argv[0], retstr))
|
||||||
exit(ret)
|
exit(ret)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -277,15 +277,15 @@ maybe = {
|
||||||
|
|
||||||
|
|
||||||
def usage(s):
|
def usage(s):
|
||||||
print s
|
print(s)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
def process_results(pathname):
|
def process_results(pathname):
|
||||||
try:
|
try:
|
||||||
f = open(pathname)
|
f = open(pathname)
|
||||||
except IOError, e:
|
except IOError as e:
|
||||||
print 'Error opening file: %s' % e
|
print('Error opening file: %s' % e)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
prefix = '/zfs-tests/tests/functional/'
|
prefix = '/zfs-tests/tests/functional/'
|
||||||
|
@ -316,14 +316,14 @@ if __name__ == "__main__":
|
||||||
results = process_results(sys.argv[1])
|
results = process_results(sys.argv[1])
|
||||||
|
|
||||||
if summary['total'] == 0:
|
if summary['total'] == 0:
|
||||||
print "\n\nNo test results were found."
|
print("\n\nNo test results were found.")
|
||||||
print "Log directory: %s" % summary['logfile']
|
print("Log directory: %s" % summary['logfile'])
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
expected = []
|
expected = []
|
||||||
unexpected = []
|
unexpected = []
|
||||||
|
|
||||||
for test in results.keys():
|
for test in list(results.keys()):
|
||||||
if results[test] == "PASS":
|
if results[test] == "PASS":
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
@ -340,7 +340,7 @@ if __name__ == "__main__":
|
||||||
else:
|
else:
|
||||||
expected.append(test)
|
expected.append(test)
|
||||||
|
|
||||||
print "\nTests with results other than PASS that are expected:"
|
print("\nTests with results other than PASS that are expected:")
|
||||||
for test in sorted(expected):
|
for test in sorted(expected):
|
||||||
issue_url = 'https://github.com/zfsonlinux/zfs/issues/'
|
issue_url = 'https://github.com/zfsonlinux/zfs/issues/'
|
||||||
|
|
||||||
|
@ -366,20 +366,21 @@ if __name__ == "__main__":
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
expect = "UNKNOWN REASON"
|
expect = "UNKNOWN REASON"
|
||||||
print " %s %s (%s)" % (results[test], test, expect)
|
print(" %s %s (%s)" % (results[test], test, expect))
|
||||||
|
|
||||||
print "\nTests with result of PASS that are unexpected:"
|
print("\nTests with result of PASS that are unexpected:")
|
||||||
for test in sorted(known.keys()):
|
for test in sorted(known.keys()):
|
||||||
# We probably should not be silently ignoring the case
|
# We probably should not be silently ignoring the case
|
||||||
# where "test" is not in "results".
|
# where "test" is not in "results".
|
||||||
if test not in results or results[test] != "PASS":
|
if test not in results or results[test] != "PASS":
|
||||||
continue
|
continue
|
||||||
print " %s %s (expected %s)" % (results[test], test, known[test][0])
|
print(" %s %s (expected %s)" % (results[test], test,
|
||||||
|
known[test][0]))
|
||||||
|
|
||||||
print "\nTests with results other than PASS that are unexpected:"
|
print("\nTests with results other than PASS that are unexpected:")
|
||||||
for test in sorted(unexpected):
|
for test in sorted(unexpected):
|
||||||
expect = "PASS" if test not in known else known[test][0]
|
expect = "PASS" if test not in known else known[test][0]
|
||||||
print " %s %s (expected %s)" % (results[test], test, expect)
|
print(" %s %s (expected %s)" % (results[test], test, expect))
|
||||||
|
|
||||||
if len(unexpected) == 0:
|
if len(unexpected) == 0:
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
Loading…
Reference in New Issue