1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
#! /usr/bin/python2
#
# pactest : run automated testing on the pacman binary
#
# Copyright (c) 2006 by Aurelien Foret <orelien@chez.com>
# Copyright (c) 2006-2014 Pacman Development Team <pacman-dev@archlinux.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from optparse import OptionParser
import os
import shutil
import sys
import tempfile
import pmenv
import tap
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 " \
"described using an easy python syntax, and several can be " \
"ran at once."
parser = OptionParser(usage = usage, description = description)
parser.add_option("-v", "--verbose", action = "count",
dest = "verbose", default = 0,
help = "print verbose output")
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"),
help = "specify location of the pacman binary")
parser.add_option("--keep-root", action = "store_true",
dest = "keeproot", default = False,
help = "don't remove the generated pacman root filesystem")
parser.add_option("--nolog", action = "store_true",
dest = "nolog", default = False,
help = "do not log pacman messages")
parser.add_option("--gdb", action = "store_true",
dest = "gdb", default = False,
help = "use gdb while calling pacman")
parser.add_option("--valgrind", action = "store_true",
dest = "valgrind", default = False,
help = "use valgrind while calling pacman")
parser.add_option("--manual-confirm", action = "store_true",
dest = "manualconfirm", default = False,
help = "do not use --noconfirm for pacman calls")
parser.add_option("--scriptlet-shell", type = "string",
dest = "scriptletshell", default = "/bin/sh",
help = "specify path to shell used for install scriptlets")
parser.add_option("--ldconfig", type = "string",
dest = "ldconfig", default = "/sbin/ldconfig",
help = "specify path to ldconfig")
return parser
if __name__ == "__main__":
if sys.hexversion < 0x02070000:
# bailing now with clear message better than mid-run with unhelpful one
tap.bail("Python versions before 2.7 are not supported.")
sys.exit(1)
# parse options
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)
# instantiate env
root_path = tempfile.mkdtemp(prefix='pactest-')
env = pmenv.pmenv(root=root_path)
# add parsed options to env object
util.verbose = opts.verbose
env.pacman["debug"] = opts.debug
env.pacman["bin"] = opts.bin
env.pacman["nolog"] = opts.nolog
env.pacman["gdb"] = opts.gdb
env.pacman["valgrind"] = opts.valgrind
env.pacman["manual-confirm"] = opts.manualconfirm
env.pacman["scriptlet-shell"] = opts.scriptletshell
env.pacman["ldconfig"] = opts.ldconfig
try:
for i in args:
env.addtest(i)
except Exception as e:
tap.bail(e)
os.rmdir(root_path)
sys.exit(2)
# run tests
env.run()
if not opts.keeproot:
shutil.rmtree(root_path)
else:
tap.diag("pacman testing root saved: %s" % root_path)
if env.failed > 0:
sys.exit(1)
# vim: set ts=4 sw=4 et:
|