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> --- Makefile.am | 3 ++- test/pacman/pactest.py | 16 ++++++---------- test/pacman/pmenv.py | 3 ++- test/pacman/pmtest.py | 23 ++++++++++++++++++----- test/pacman/util.py | 5 +++-- 5 files changed, 31 insertions(+), 19 deletions(-) diff --git a/Makefile.am b/Makefile.am index 4c6f656..44a2341 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 58c14f6..8e87c28 100755 --- a/test/pacman/pactest.py +++ b/test/pacman/pactest.py @@ -31,9 +31,6 @@ __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 @@ def create_parser(): 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 @@ def create_parser(): 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 2d887b0..27f44c9 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 3682963..5a79919 100644 --- a/test/pacman/pmtest.py +++ b/test/pacman/pmtest.py @@ -39,6 +39,11 @@ def __init__(self, name, root): 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 @@ def run(self, pacman): "--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 57471fe..ae96a3b 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): -- 2.1.2