summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Gregory <andrew.gregory.8@gmail.com>2017-03-27 08:33:30 -0400
committerAllan McRae <allan@archlinux.org>2017-04-04 11:55:31 +1000
commita202959a1973564474d39e2dbd76ca4ad1302eed (patch)
treee658775cdc5861541db2af89c3006641d4ea86dd
parent5678298f7dc8e0d4394e477a1a64d734e65a3ef0 (diff)
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>
-rwxr-xr-xtest/pacman/pactest.py41
1 files changed, 40 insertions, 1 deletions
diff --git a/test/pacman/pactest.py b/test/pacman/pactest.py
index db61233d..b5f6d4d7 100755
--- a/test/pacman/pactest.py
+++ b/test/pacman/pactest.py
@@ -23,6 +23,8 @@ import os
import shutil
import sys
import tempfile
+import glob
+import subprocess
import pmenv
import tap
@@ -31,6 +33,30 @@ import util
__author__ = "Aurelien FORET"
__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():
usage = "usage: %prog [options] <path/to/testfile.py>..."
description = "Runs automated tests on the pacman binary. Tests are " \
@@ -71,6 +97,12 @@ def create_parser():
parser.add_option("--ldconfig", type = "string",
dest = "ldconfig", default = "/sbin/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
@@ -114,7 +146,14 @@ if __name__ == "__main__":
sys.exit(2)
# run tests
- env.run()
+ if not opts.review:
+ 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:
shutil.rmtree(root_path)