Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Gregory <andrew.gregory.8@gmail.com>2014-10-06 03:01:40 -0400
committerAllan McRae <allan@archlinux.org>2014-10-13 12:54:29 +1000
commit42c859e4cc38f91a1236cd93eae9e9f9a1bc1e62 (patch)
tree23ddd2d78b3fbe4ce2cfed46e7c47f6c9acb91ec
parent01beca5df717252c7c9aa59bc705dc10a25ebdc8 (diff)
pmtest: allow tests to specify test binary
Adds a cmd property to tests (defaults to pacman) which is resolved using directories specified with --bindir (defaults to PATH). The ability to manually specify a particular binary is preserved in order to allow running individual tests with differently named binaries such as lt-pacman. Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com> Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--Makefile.am3
-rwxr-xr-xtest/pacman/pactest.py16
-rw-r--r--test/pacman/pmenv.py3
-rw-r--r--test/pacman/pmtest.py23
-rw-r--r--test/pacman/util.py5
5 files changed, 31 insertions, 19 deletions
diff --git a/Makefile.am b/Makefile.am
index 4c6f6565..44a23414 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -45,7 +45,8 @@ PY_LOG_COMPILER = $(PYTHON) $(top_srcdir)/test/pacman/pactest.py
AM_PY_LOG_FLAGS = \
--scriptlet-shell $(SCRIPTLET_SHELL) \
--ldconfig $(LDCONFIG) \
- -p $(top_builddir)/src/pacman/pacman
+ --bindir $(top_builddir)/src/pacman \
+ --bindir $(top_builddir)/scripts
# create the pacman DB and cache directories upon install
install-data-local:
diff --git a/test/pacman/pactest.py b/test/pacman/pactest.py
index 58c14f6d..8e87c288 100755
--- a/test/pacman/pactest.py
+++ b/test/pacman/pactest.py
@@ -31,9 +31,6 @@ import util
__author__ = "Aurelien FORET"
__version__ = "0.4"
-def resolve_binary_path(option, opt_str, value, parser):
- setattr(parser.values, option.dest, os.path.abspath(value))
-
def create_parser():
usage = "usage: %prog [options] <path/to/testfile.py>..."
description = "Runs automated tests on the pacman binary. Tests are " \
@@ -47,10 +44,12 @@ def create_parser():
parser.add_option("-d", "--debug", type = "int",
dest = "debug", default = 0,
help = "set debug level for pacman")
- parser.add_option("-p", "--pacman", action = "callback",
- callback = resolve_binary_path, type = "string",
- dest = "bin", default = util.which("pacman"),
+ parser.add_option("-p", "--pacman", type = "string",
+ dest = "bin", default = None,
help = "specify location of the pacman binary")
+ parser.add_option("--bindir", type = "string",
+ dest = "bindir", action = "append",
+ help = "specify location of binaries")
parser.add_option("--keep-root", action = "store_true",
dest = "keeproot", default = False,
help = "don't remove the generated pacman root filesystem")
@@ -86,10 +85,6 @@ if __name__ == "__main__":
opt_parser = create_parser()
(opts, args) = opt_parser.parse_args()
- if opts.bin is None or not os.access(opts.bin, os.X_OK):
- tap.bail("cannot locate pacman binary")
- sys.exit(2)
-
if args is None or len(args) == 0:
tap.bail("no tests defined, nothing to do")
sys.exit(2)
@@ -102,6 +97,7 @@ if __name__ == "__main__":
util.verbose = opts.verbose
env.pacman["debug"] = opts.debug
env.pacman["bin"] = opts.bin
+ env.pacman["bindir"] = opts.bindir
env.pacman["nolog"] = opts.nolog
env.pacman["gdb"] = opts.gdb
env.pacman["valgrind"] = opts.valgrind
diff --git a/test/pacman/pmenv.py b/test/pacman/pmenv.py
index 2d887b01..27f44c90 100644
--- a/test/pacman/pmenv.py
+++ b/test/pacman/pmenv.py
@@ -34,7 +34,8 @@ class pmenv(object):
def __init__(self, root = "root"):
self.root = os.path.abspath(root)
self.pacman = {
- "bin": "pacman",
+ "bin": None,
+ "bindir": ["/usr/bin/"],
"debug": 0,
"gdb": 0,
"valgrind": 0,
diff --git a/test/pacman/pmtest.py b/test/pacman/pmtest.py
index 36829632..5a79919e 100644
--- a/test/pacman/pmtest.py
+++ b/test/pacman/pmtest.py
@@ -39,6 +39,11 @@ class pmtest(object):
self.root = root
self.dbver = 9
self.cachepkgs = True
+ self.cmd = ["pacman", "--noconfirm",
+ "--config", os.path.join(self.root, util.PACCONF),
+ "--root", self.root,
+ "--dbpath", os.path.join(self.root, util.PM_DBPATH),
+ "--cachedir", os.path.join(self.root, util.PM_CACHEDIR)]
def __str__(self):
return "name = %s\n" \
@@ -234,16 +239,24 @@ class pmtest(object):
"--log-file=%s" % os.path.join(self.root, "var/log/valgrind"),
"--suppressions=%s" % suppfile])
self.addrule("FILE_EMPTY=var/log/valgrind")
- cmd.extend([pacman["bin"], "--noconfirm",
- "--config", os.path.join(self.root, util.PACCONF),
- "--root", self.root,
- "--dbpath", os.path.join(self.root, util.PM_DBPATH),
- "--cachedir", os.path.join(self.root, util.PM_CACHEDIR)])
+
+ # replace program name with absolute path
+ prog = pacman["bin"]
+ if not prog:
+ prog = util.which(self.cmd[0], pacman["bindir"])
+ if not prog or not os.access(prog, os.X_OK):
+ if not prog:
+ tap.bail("could not locate '%s' binary" % (self.cmd[0]))
+ return
+
+ cmd.append(os.path.abspath(prog))
+ cmd.extend(self.cmd[1:])
if pacman["manual-confirm"]:
cmd.append("--confirm")
if pacman["debug"]:
cmd.append("--debug=%s" % pacman["debug"])
cmd.extend(shlex.split(self.args))
+
if not (pacman["gdb"] or pacman["nolog"]):
output = open(os.path.join(self.root, util.LOGFILE), 'w')
else:
diff --git a/test/pacman/util.py b/test/pacman/util.py
index 57471fe8..ae96a3b7 100644
--- a/test/pacman/util.py
+++ b/test/pacman/util.py
@@ -157,8 +157,9 @@ def mkmd5sum(data):
# Miscellaneous
#
-def which(filename):
- path = os.environ["PATH"].split(':')
+def which(filename, path=None):
+ if not path:
+ path = os.environ["PATH"].split(os.pathsep)
for p in path:
f = os.path.join(p, filename)
if os.access(f, os.F_OK):