pactest: add --review option

Opens the test file(s), test output, and any log files in the test
environment in an editor after the tests run for review.  Simplifies
debugging tests by avoiding the need to use --keep-root and manually
opening the relevant files.  The editor used can be set with --editor or
$EDITOR, falling back to vim.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Andrew Gregory 2017-03-27 08:33:30 -04:00 committed by Allan McRae
parent 5678298f7d
commit a202959a19

View file

@ -23,6 +23,8 @@ import os
import shutil import shutil
import sys import sys
import tempfile import tempfile
import glob
import subprocess
import pmenv import pmenv
import tap import tap
@ -31,6 +33,30 @@ import util
__author__ = "Aurelien FORET" __author__ = "Aurelien FORET"
__version__ = "0.4" __version__ = "0.4"
# writer to send output to multiple destinations simultaneously
class MultiWriter():
def __init__(self, *outputs):
self.outputs = outputs
def write(self, message):
for op in self.outputs:
op.write(message)
# duplicate stdout/stderr to a temporary file
class OutputSaver():
def __init__(self):
self.save_file = tempfile.NamedTemporaryFile(prefix='pactest-output-')
def __enter__(self):
sys.stdout = MultiWriter(sys.stdout, self.save_file)
sys.stderr = MultiWriter(sys.stderr, self.save_file)
return self.save_file
def __exit__(self, type, value, traceback):
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
self.save_file.flush()
def create_parser(): def create_parser():
usage = "usage: %prog [options] <path/to/testfile.py>..." usage = "usage: %prog [options] <path/to/testfile.py>..."
description = "Runs automated tests on the pacman binary. Tests are " \ description = "Runs automated tests on the pacman binary. Tests are " \
@ -71,6 +97,12 @@ def create_parser():
parser.add_option("--ldconfig", type = "string", parser.add_option("--ldconfig", type = "string",
dest = "ldconfig", default = "/sbin/ldconfig", dest = "ldconfig", default = "/sbin/ldconfig",
help = "specify path to ldconfig") help = "specify path to ldconfig")
parser.add_option("--review", action = "store_true",
dest = "review", default = False,
help = "review test files, test output, and saved logs")
parser.add_option("--editor", action = "store",
dest = "editor", default = os.getenv('EDITOR', 'vim'),
help = "editor to use for viewing files")
return parser return parser
@ -114,7 +146,14 @@ if __name__ == "__main__":
sys.exit(2) sys.exit(2)
# run tests # run tests
if not opts.review:
env.run() env.run()
else:
# save output in tempfile for review
with OutputSaver() as save_file:
env.run()
files = [save_file.name] + args + glob.glob(root_path + "/var/log/*")
subprocess.call([opts.editor] + files)
if not opts.keeproot: if not opts.keeproot:
shutil.rmtree(root_path) shutil.rmtree(root_path)