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-<feature> 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 <andrew.gregory.8@gmail.com> Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
ecac357c1a
commit
2d403709d9
6 changed files with 59 additions and 19 deletions
|
@ -51,6 +51,12 @@ AM_PY_LOG_FLAGS = \
|
||||||
--ldconfig $(LDCONFIG) \
|
--ldconfig $(LDCONFIG) \
|
||||||
--bindir $(top_builddir)/src/pacman \
|
--bindir $(top_builddir)/src/pacman \
|
||||||
--bindir $(top_builddir)/scripts
|
--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
|
# create the pacman DB, cache, makepkg-template and system hook directories upon install
|
||||||
install-data-local:
|
install-data-local:
|
||||||
|
|
|
@ -342,11 +342,7 @@ foreach testobj : pacman_tests
|
||||||
input = testobj.get('name')
|
input = testobj.get('name')
|
||||||
test_name = input.split('/')[1]
|
test_name = input.split('/')[1]
|
||||||
should_fail = testobj.get('should_fail', false)
|
should_fail = testobj.get('should_fail', false)
|
||||||
|
args = [
|
||||||
test(
|
|
||||||
test_name,
|
|
||||||
PYTHON,
|
|
||||||
args : [
|
|
||||||
join_paths(meson.source_root(), 'build-aux/tap-driver.py'),
|
join_paths(meson.source_root(), 'build-aux/tap-driver.py'),
|
||||||
join_paths(meson.current_source_dir(), 'pactest.py'),
|
join_paths(meson.current_source_dir(), 'pactest.py'),
|
||||||
'--scriptlet-shell', get_option('scriptlet-shell'),
|
'--scriptlet-shell', get_option('scriptlet-shell'),
|
||||||
|
@ -354,7 +350,18 @@ foreach testobj : pacman_tests
|
||||||
'--ldconfig', LDCONFIG,
|
'--ldconfig', LDCONFIG,
|
||||||
'--verbose',
|
'--verbose',
|
||||||
join_paths(meson.current_source_dir(), input)
|
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 : args,
|
||||||
depends : [pacman_bin],
|
depends : [pacman_bin],
|
||||||
should_fail : should_fail)
|
should_fail : should_fail)
|
||||||
endforeach
|
endforeach
|
||||||
|
|
|
@ -77,6 +77,15 @@ def create_parser():
|
||||||
parser.add_option("--bindir", type = "string",
|
parser.add_option("--bindir", type = "string",
|
||||||
dest = "bindir", action = "append",
|
dest = "bindir", action = "append",
|
||||||
help = "specify location of binaries")
|
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",
|
parser.add_option("--keep-root", action = "store_true",
|
||||||
dest = "keeproot", default = False,
|
dest = "keeproot", default = False,
|
||||||
help = "don't remove the generated pacman root filesystem")
|
help = "don't remove the generated pacman root filesystem")
|
||||||
|
@ -137,6 +146,9 @@ if __name__ == "__main__":
|
||||||
env.pacman["manual-confirm"] = opts.manualconfirm
|
env.pacman["manual-confirm"] = opts.manualconfirm
|
||||||
env.pacman["scriptlet-shell"] = opts.scriptletshell
|
env.pacman["scriptlet-shell"] = opts.scriptletshell
|
||||||
env.pacman["ldconfig"] = opts.ldconfig
|
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:
|
try:
|
||||||
for i in args:
|
for i in args:
|
||||||
|
|
|
@ -36,6 +36,11 @@ class pmenv(object):
|
||||||
"valgrind": 0,
|
"valgrind": 0,
|
||||||
"nolog": 0
|
"nolog": 0
|
||||||
}
|
}
|
||||||
|
self.config = {
|
||||||
|
"gpg": True,
|
||||||
|
"nls": True,
|
||||||
|
"curl": True
|
||||||
|
}
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "root = %s\n" \
|
return "root = %s\n" \
|
||||||
|
@ -52,12 +57,15 @@ class pmenv(object):
|
||||||
def run(self):
|
def run(self):
|
||||||
"""
|
"""
|
||||||
"""
|
"""
|
||||||
tap.plan(len(self.testcases))
|
|
||||||
for testcase in self.testcases:
|
for testcase in self.testcases:
|
||||||
t = pmtest.pmtest(testcase, self.root)
|
t = pmtest.pmtest(testcase, self.root, self.config)
|
||||||
|
t.load()
|
||||||
|
if t.skipall:
|
||||||
|
tap.skip_all("skipping %s (%s)" % (t.description, t.skipall))
|
||||||
|
else:
|
||||||
|
tap.plan(1)
|
||||||
tap.diag("Running '%s'" % t.testname)
|
tap.diag("Running '%s'" % t.testname)
|
||||||
|
|
||||||
t.load()
|
|
||||||
t.generate(self.pacman)
|
t.generate(self.pacman)
|
||||||
t.run(self.pacman)
|
t.run(self.pacman)
|
||||||
|
|
||||||
|
|
|
@ -33,12 +33,13 @@ class pmtest(object):
|
||||||
"""Test object
|
"""Test object
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, name, root):
|
def __init__(self, name, root, config):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.testname = os.path.basename(name).replace('.py', '')
|
self.testname = os.path.basename(name).replace('.py', '')
|
||||||
self.root = root
|
self.root = root
|
||||||
self.dbver = 9
|
self.dbver = 9
|
||||||
self.cachepkgs = True
|
self.cachepkgs = True
|
||||||
|
self.config = config
|
||||||
self.cmd = ["pacman", "--noconfirm",
|
self.cmd = ["pacman", "--noconfirm",
|
||||||
"--config", self.configfile(),
|
"--config", self.configfile(),
|
||||||
"--root", self.rootdir(),
|
"--root", self.rootdir(),
|
||||||
|
@ -101,6 +102,7 @@ class pmtest(object):
|
||||||
self.rules = []
|
self.rules = []
|
||||||
self.files = []
|
self.files = []
|
||||||
self.expectfailure = False
|
self.expectfailure = False
|
||||||
|
self.skipall = False
|
||||||
|
|
||||||
if os.path.isfile(self.name):
|
if os.path.isfile(self.name):
|
||||||
# all tests expect this to be available
|
# all tests expect this to be available
|
||||||
|
@ -201,6 +203,10 @@ class pmtest(object):
|
||||||
self.files.append(f)
|
self.files.append(f)
|
||||||
vprint("\t%s" % f.name)
|
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):
|
def add_hook(self, name, content):
|
||||||
if not name.endswith(".hook"):
|
if not name.endswith(".hook"):
|
||||||
name = name + ".hook"
|
name = name + ".hook"
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
self.description = "Add a bogus signature to a package DB"
|
self.description = "Add a bogus signature to a package DB"
|
||||||
|
self.require_capability("gpg")
|
||||||
|
|
||||||
sp = pmpkg("pkg1")
|
sp = pmpkg("pkg1")
|
||||||
sp.pgpsig = "asdfasdfsdfasdfsdafasdfsdfasd"
|
sp.pgpsig = "asdfasdfsdfasdfsdafasdfsdfasd"
|
||||||
|
|
Loading…
Add table
Reference in a new issue