From 2d403709d97cca381873a9d56cd37f51c0f3eade Mon Sep 17 00:00:00 2001 From: Andrew Gregory Date: Sat, 22 Dec 2018 22:24:41 -0800 Subject: allow tests for disabled features to be skipped Previously, pacman's test suite would fail when compiled without signature support. Adds a require_capability method to pmtest objects. Currently recognized values are 'gpg', 'curl', and 'nls'; although only gpg is used presently. Missing features are indicated by running pactest with one of the --without- options. This modifies pmenv to run each case as independent tests. Previously, a single pmenv could run multiple tests, combining there output into a single TAP stream but making it impossible to properly skip an entire test case. This change does not affect running pactest.py with a single test (as both autotools and meson do), but will affect anybody manually running pactest.py with multiple tests at once. Signed-off-by: Andrew Gregory Signed-off-by: Allan McRae --- Makefile.am | 6 ++++++ test/pacman/meson.build | 25 ++++++++++++++++--------- test/pacman/pactest.py | 12 ++++++++++++ test/pacman/pmenv.py | 26 +++++++++++++++++--------- test/pacman/pmtest.py | 8 +++++++- test/pacman/tests/sign001.py | 1 + 6 files changed, 59 insertions(+), 19 deletions(-) diff --git a/Makefile.am b/Makefile.am index 1e9ee152..98ad8b62 100644 --- a/Makefile.am +++ b/Makefile.am @@ -51,6 +51,12 @@ AM_PY_LOG_FLAGS = \ --ldconfig $(LDCONFIG) \ --bindir $(top_builddir)/src/pacman \ --bindir $(top_builddir)/scripts +if !HAVE_LIBGPGME +AM_PY_LOG_FLAGS += --without-gpg +endif +if !HAVE_LIBCURL +AM_PY_LOG_FLAGS += --without-curl +endif # create the pacman DB, cache, makepkg-template and system hook directories upon install install-data-local: diff --git a/test/pacman/meson.build b/test/pacman/meson.build index 3ad1fcd0..5edbbd43 100644 --- a/test/pacman/meson.build +++ b/test/pacman/meson.build @@ -342,19 +342,26 @@ foreach testobj : pacman_tests input = testobj.get('name') test_name = input.split('/')[1] should_fail = testobj.get('should_fail', false) + args = [ + join_paths(meson.source_root(), 'build-aux/tap-driver.py'), + join_paths(meson.current_source_dir(), 'pactest.py'), + '--scriptlet-shell', get_option('scriptlet-shell'), + '--bindir', meson.build_root(), + '--ldconfig', LDCONFIG, + '--verbose', + join_paths(meson.current_source_dir(), input) + ] + if not conf.get('HAVE_LIBCURL') + args += '--without-curl' + endif + if not conf.get('HAVE_LIBGPGME') + args += '--without-gpg' + endif test( test_name, PYTHON, - args : [ - join_paths(meson.source_root(), 'build-aux/tap-driver.py'), - join_paths(meson.current_source_dir(), 'pactest.py'), - '--scriptlet-shell', get_option('scriptlet-shell'), - '--bindir', meson.build_root(), - '--ldconfig', LDCONFIG, - '--verbose', - join_paths(meson.current_source_dir(), input) - ], + args : args, depends : [pacman_bin], should_fail : should_fail) endforeach diff --git a/test/pacman/pactest.py b/test/pacman/pactest.py index a563fa72..2d1edf1d 100755 --- a/test/pacman/pactest.py +++ b/test/pacman/pactest.py @@ -77,6 +77,15 @@ def create_parser(): parser.add_option("--bindir", type = "string", dest = "bindir", action = "append", help = "specify location of binaries") + parser.add_option("--without-gpg", action = "store_true", + dest = "missing_gpg", default = False, + help = "skip gpg-related tests") + parser.add_option("--without-curl", action = "store_true", + dest = "missing_curl", default = False, + help = "skip downloader-related tests") + parser.add_option("--without-nls", action = "store_true", + dest = "missing_nls", default = False, + help = "skip translation-related tests") parser.add_option("--keep-root", action = "store_true", dest = "keeproot", default = False, help = "don't remove the generated pacman root filesystem") @@ -137,6 +146,9 @@ def create_parser(): env.pacman["manual-confirm"] = opts.manualconfirm env.pacman["scriptlet-shell"] = opts.scriptletshell env.pacman["ldconfig"] = opts.ldconfig + env.config["gpg"] = not opts.missing_gpg + env.config["nls"] = not opts.missing_nls + env.config["curl"] = not opts.missing_curl try: for i in args: diff --git a/test/pacman/pmenv.py b/test/pacman/pmenv.py index 9e6b5625..71001dbf 100644 --- a/test/pacman/pmenv.py +++ b/test/pacman/pmenv.py @@ -36,6 +36,11 @@ def __init__(self, root = "root"): "valgrind": 0, "nolog": 0 } + self.config = { + "gpg": True, + "nls": True, + "curl": True + } def __str__(self): return "root = %s\n" \ @@ -52,15 +57,18 @@ def addtest(self, testcase): def run(self): """ """ - tap.plan(len(self.testcases)) for testcase in self.testcases: - t = pmtest.pmtest(testcase, self.root) - tap.diag("Running '%s'" % t.testname) - + t = pmtest.pmtest(testcase, self.root, self.config) t.load() - t.generate(self.pacman) - t.run(self.pacman) + if t.skipall: + tap.skip_all("skipping %s (%s)" % (t.description, t.skipall)) + else: + tap.plan(1) + tap.diag("Running '%s'" % t.testname) + + t.generate(self.pacman) + t.run(self.pacman) - tap.diag("==> Checking rules") - tap.todo = t.expectfailure - tap.subtest(lambda: t.check(), t.description) + tap.diag("==> Checking rules") + tap.todo = t.expectfailure + tap.subtest(lambda: t.check(), t.description) diff --git a/test/pacman/pmtest.py b/test/pacman/pmtest.py index 00012ac6..274677d2 100644 --- a/test/pacman/pmtest.py +++ b/test/pacman/pmtest.py @@ -33,12 +33,13 @@ class pmtest(object): """Test object """ - def __init__(self, name, root): + def __init__(self, name, root, config): self.name = name self.testname = os.path.basename(name).replace('.py', '') self.root = root self.dbver = 9 self.cachepkgs = True + self.config = config self.cmd = ["pacman", "--noconfirm", "--config", self.configfile(), "--root", self.rootdir(), @@ -101,6 +102,7 @@ def load(self): self.rules = [] self.files = [] self.expectfailure = False + self.skipall = False if os.path.isfile(self.name): # all tests expect this to be available @@ -201,6 +203,10 @@ def generate(self, pacman): self.files.append(f) vprint("\t%s" % f.name) + def require_capability(self, cap): + if not self.config[cap]: + self.skipall = "missing capability " + cap + def add_hook(self, name, content): if not name.endswith(".hook"): name = name + ".hook" diff --git a/test/pacman/tests/sign001.py b/test/pacman/tests/sign001.py index 14add09c..e63bce2c 100644 --- a/test/pacman/tests/sign001.py +++ b/test/pacman/tests/sign001.py @@ -1,4 +1,5 @@ self.description = "Add a bogus signature to a package DB" +self.require_capability("gpg") sp = pmpkg("pkg1") sp.pgpsig = "asdfasdfsdfasdfsdafasdfsdfasd" -- cgit v1.2.3-54-g00ecf