# 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 logging
from datetime import datetime
from subprocess import PIPE
from subprocess import Popen
from sys import argv
-from sys import maxint
+from sys import maxsize
from threading import Timer
from time import time
if needed. Run the command, and update the result object.
"""
if options.dryrun is True:
- print self
+ print(self)
return
privcmd = self.update_cmd_privs(self.pathname, self.user)
try:
old = os.umask(0)
if not os.path.isdir(self.outputdir):
- os.makedirs(self.outputdir, mode=0777)
+ os.makedirs(self.outputdir, mode=0o777)
os.umask(old)
- except OSError, e:
+ except OSError as e:
fail('%s' % e)
self.result.starttime = time()
proc = Popen(privcmd, stdout=PIPE, stderr=PIPE)
# Allow a special timeout value of 0 to mean infinity
if int(self.timeout) == 0:
- self.timeout = maxint
+ self.timeout = maxsize
t = Timer(int(self.timeout), self.kill_cmd, [proc])
try:
logger.debug('%s%s%s' % (msga, pad, msgb))
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:
logger.debug('%s %s' % (dt.strftime("%H:%M:%S.%f ")[:11], line))
in the 'DEFAULT' section. If the Test or TestGroup passes
verification, add it to the TestRun.
"""
- config = ConfigParser.RawConfigParser()
+ config = configparser.RawConfigParser()
if not len(config.read(options.runfile)):
fail("Coulnd't read config file %s" % options.runfile)
defaults = dict([(prop, getattr(options, prop)) for prop, _ in
self.defaults])
- config = ConfigParser.RawConfigParser(defaults)
+ config = configparser.RawConfigParser(defaults)
for test in sorted(self.tests.keys()):
config.add_section(test)
"""
done = False
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)
base = self.outputdir
while not done:
paths = []
components -= 1
- for testfile in tmp_dict.keys():
+ for testfile in list(tmp_dict.keys()):
uniq = '/'.join(testfile.split('/')[components:]).lstrip('/')
if uniq not in paths:
paths.append(uniq)
if options.cmd is not 'wrconfig':
try:
old = os.umask(0)
- os.makedirs(self.outputdir, mode=0777)
+ os.makedirs(self.outputdir, mode=0o777)
os.umask(old)
- except OSError, e:
+ except OSError as e:
fail('%s' % e)
filename = os.path.join(self.outputdir, 'log')
if not os.path.exists(logsymlink):
os.symlink(self.outputdir, logsymlink)
else:
- print 'Could not make a symlink to directory %s' % (
- self.outputdir)
+ print('Could not make a symlink to directory %s' % (
+ self.outputdir))
iteration = 0
while iteration < options.iterations:
for test in sorted(self.tests.keys()):
if Result.total is 0:
return 2
- print '\nResults Summary'
- for key in Result.runresults.keys():
+ print('\nResults Summary')
+ for key in list(Result.runresults.keys()):
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)
h, m = divmod(m, 60)
- print '\nRunning Time:\t%02d:%02d:%02d' % (h, m, s)
- print 'Percent passed:\t%.1f%%' % ((float(Result.runresults['PASS']) /
- float(Result.total)) * 100)
- print 'Log directory:\t%s' % self.outputdir
+ print('\nRunning Time:\t%02d:%02d:%02d' % (h, m, s))
+ print('Percent passed:\t%.1f%%' % ((float(Result.runresults['PASS']) /
+ float(Result.total)) * 100))
+ print('Log directory:\t%s' % self.outputdir)
if Result.runresults['FAIL'] > 0:
return 1
def fail(retstr, ret=1):
- print '%s: %s' % (argv[0], retstr)
+ print('%s: %s' % (argv[0], retstr))
exit(ret)
def usage(s):
- print s
+ print(s)
sys.exit(1)
def process_results(pathname):
try:
f = open(pathname)
- except IOError, e:
- print 'Error opening file: %s' % e
+ except IOError as e:
+ print('Error opening file: %s' % e)
sys.exit(1)
prefix = '/zfs-tests/tests/functional/'
results = process_results(sys.argv[1])
if summary['total'] == 0:
- print "\n\nNo test results were found."
- print "Log directory: %s" % summary['logfile']
+ print("\n\nNo test results were found.")
+ print("Log directory: %s" % summary['logfile'])
sys.exit(0)
expected = []
unexpected = []
- for test in results.keys():
+ for test in list(results.keys()):
if results[test] == "PASS":
continue
else:
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):
issue_url = 'https://github.com/zfsonlinux/zfs/issues/'
continue
else:
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()):
# We probably should not be silently ignoring the case
# where "test" is not in "results".
if test not in results or results[test] != "PASS":
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):
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:
sys.exit(0)