summaryrefslogtreecommitdiff
path: root/test/pacman
diff options
context:
space:
mode:
Diffstat (limited to 'test/pacman')
-rwxr-xr-xtest/pacman/pactest.py35
-rwxr-xr-xtest/pacman/pmdb.py10
-rwxr-xr-xtest/pacman/pmpkg.py9
-rw-r--r--test/pacman/tests/replace101.py25
-rw-r--r--test/pacman/tests/replace102.py27
-rw-r--r--test/pacman/tests/sign001.py9
-rw-r--r--test/pacman/tests/sign002.py10
-rw-r--r--test/pacman/tests/smoke002.py12
-rw-r--r--test/pacman/tests/smoke004.py11
-rwxr-xr-xtest/pacman/util.py3
10 files changed, 129 insertions, 22 deletions
diff --git a/test/pacman/pactest.py b/test/pacman/pactest.py
index 69e655a0..77f87da6 100755
--- a/test/pacman/pactest.py
+++ b/test/pacman/pactest.py
@@ -17,8 +17,12 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-import os, sys, glob
+import glob
from optparse import OptionParser
+import os
+import shutil
+import sys
+import tempfile
import pmenv
import util
@@ -63,6 +67,9 @@ def createOptParser():
parser.add_option("-t", "--test", action = "callback",
callback = globTests, dest = "testcases",
help = "specify test case(s)")
+ 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")
@@ -80,7 +87,8 @@ def createOptParser():
if __name__ == "__main__":
# instantiate env and parser objects
- env = pmenv.pmenv()
+ root_path = tempfile.mkdtemp()
+ env = pmenv.pmenv(root=root_path)
opt_parser = createOptParser()
(opts, args) = opt_parser.parse_args()
@@ -95,16 +103,23 @@ if __name__ == "__main__":
if opts.testcases is None or len(opts.testcases) == 0:
print "no tests defined, nothing to do"
+ os.rmdir(root_path)
sys.exit(2)
- else:
- for i in opts.testcases:
- env.addtest(i)
- # run tests and print overall results
- env.run()
- env.results()
+ for i in opts.testcases:
+ env.addtest(i)
+
+ # run tests and print overall results
+ env.run()
+ env.results()
- if env.failed > 0:
- sys.exit(1)
+ if env.failed > 0:
+ print "pacman testing root saved: %s" % root_path
+ sys.exit(1)
+
+ if not opts.keeproot:
+ shutil.rmtree(root_path)
+ else:
+ print "pacman testing root saved: %s" % root_path
# vim: set ts=4 sw=4 et:
diff --git a/test/pacman/pmdb.py b/test/pacman/pmdb.py
index b31498a7..1af24ae9 100755
--- a/test/pacman/pmdb.py
+++ b/test/pacman/pmdb.py
@@ -89,6 +89,12 @@ class pmdb(object):
def __str__(self):
return "%s" % self.treename
+ def getverify(self):
+ for value in "Always","Never","Optional":
+ if value in self.treename:
+ return value
+ return "Never"
+
def getpkg(self, name):
"""
"""
@@ -150,6 +156,8 @@ class pmdb(object):
pkg.size = int(fd.readline().strip("\n"))
elif line == "%MD5SUM%":
pkg.md5sum = fd.readline().strip("\n")
+ elif line == "%PGPSIG%":
+ pkg.pgpsig = fd.readline().strip("\n")
elif line == "%REPLACES%":
pkg.replaces = _getsection(fd)
elif line == "%DEPENDS%":
@@ -241,6 +249,8 @@ class pmdb(object):
data.append(_mksection("CSIZE", pkg.csize))
if pkg.md5sum:
data.append(_mksection("MD5SUM", pkg.md5sum))
+ if pkg.pgpsig:
+ data.append(_mksection("PGPSIG", pkg.pgpsig))
if data:
data.append("")
filename = os.path.join(path, "desc")
diff --git a/test/pacman/pmpkg.py b/test/pacman/pmpkg.py
index be177f35..4568adb9 100755
--- a/test/pacman/pmpkg.py
+++ b/test/pacman/pmpkg.py
@@ -27,7 +27,7 @@ import util
class pmpkg(object):
"""Package object.
- Object holding data from an ArchLinux package.
+ Object holding data from an Arch Linux package.
"""
def __init__(self, name, version = "1.0-1"):
@@ -47,6 +47,7 @@ class pmpkg(object):
self.csize = 0
self.reason = 0
self.md5sum = "" # sync only
+ self.pgpsig = "" # sync only
self.replaces = []
self.depends = []
self.optdepends = []
@@ -62,7 +63,7 @@ class pmpkg(object):
"pre_remove": "",
"post_remove": "",
"pre_upgrade": "",
- "post_upgrade": ""
+ "post_upgrade": "",
}
def __str__(self):
@@ -88,7 +89,7 @@ class pmpkg(object):
return "%s%s" % (self.fullname(), util.PM_EXT_PKG)
def makepkg(self, path):
- """Creates an ArchLinux package archive.
+ """Creates an Arch Linux package archive.
A package archive is generated in the location 'path', based on the data
from the object.
@@ -133,7 +134,7 @@ class pmpkg(object):
util.mkfile(".PKGINFO", "\n".join(data))
# .INSTALL
- if len(self.install.values()) > 0:
+ if any(self.install.values()):
util.mkinstallfile(".INSTALL", self.install)
# safely create the dir
diff --git a/test/pacman/tests/replace101.py b/test/pacman/tests/replace101.py
new file mode 100644
index 00000000..86c40ac6
--- /dev/null
+++ b/test/pacman/tests/replace101.py
@@ -0,0 +1,25 @@
+self.description = "Sysupgrade with a versioned replacement"
+
+sp1 = pmpkg("python2-yaml", "5-1")
+sp1.replaces = ["python-yaml<5"]
+sp1.conflicts = ["python-yaml<5"]
+sp1.files = ["lib/python2/file"]
+self.addpkg2db("sync", sp1)
+
+# the python3 version
+sp2 = pmpkg("python-yaml", "5-1")
+sp2.files = ["lib/python3/file"]
+self.addpkg2db("sync", sp2)
+
+lp1 = pmpkg("python-yaml", "4-1")
+lp1.files = ["lib/python2/file"]
+self.addpkg2db("local", lp1)
+
+self.args = "-Su"
+
+self.addrule("PACMAN_RETCODE=0")
+self.addrule("!PKG_EXIST=python-yaml")
+self.addrule("PKG_VERSION=python2-yaml|5-1")
+self.addrule("FILE_EXIST=lib/python2/file")
+
+self.expectfailure = True
diff --git a/test/pacman/tests/replace102.py b/test/pacman/tests/replace102.py
new file mode 100644
index 00000000..c6e2e5f0
--- /dev/null
+++ b/test/pacman/tests/replace102.py
@@ -0,0 +1,27 @@
+self.description = "Replace a package with a file in 'backup' (local modified)"
+# FS#24543
+
+lp = pmpkg("dummy")
+lp.files = ["etc/dummy.conf*", "bin/dummy"]
+lp.backup = ["etc/dummy.conf"]
+self.addpkg2db("local", lp)
+
+sp = pmpkg("replacement")
+sp.replaces = ["dummy"]
+sp.files = ["etc/dummy.conf", "bin/dummy*"]
+sp.backup = ["etc/dummy.conf"]
+self.addpkg2db("sync", sp)
+
+self.args = "-Su"
+
+self.addrule("!PKG_EXIST=dummy")
+self.addrule("PKG_EXIST=replacement")
+
+self.addrule("FILE_EXIST=etc/dummy.conf")
+self.addrule("!FILE_MODIFIED=etc/dummy.conf")
+self.addrule("!FILE_PACNEW=etc/dummy.conf")
+self.addrule("!FILE_PACSAVE=etc/dummy.conf")
+
+self.addrule("FILE_EXIST=bin/dummy")
+
+self.expectfailure = True
diff --git a/test/pacman/tests/sign001.py b/test/pacman/tests/sign001.py
new file mode 100644
index 00000000..0ae417b7
--- /dev/null
+++ b/test/pacman/tests/sign001.py
@@ -0,0 +1,9 @@
+self.description = "Add a signature to a package DB"
+
+sp = pmpkg("pkg1")
+sp.pgpsig = "asdfasdfsdfasdfsdafasdfsdfasd"
+self.addpkg2db("sync+Always", sp)
+
+self.args = "-Ss"
+
+self.addrule("PACMAN_RETCODE=0")
diff --git a/test/pacman/tests/sign002.py b/test/pacman/tests/sign002.py
new file mode 100644
index 00000000..b55f331e
--- /dev/null
+++ b/test/pacman/tests/sign002.py
@@ -0,0 +1,10 @@
+self.description = "Verify a signature in a sync DB (failure)"
+
+sp = pmpkg("pkg1")
+sp.pgpsig = "iEYEABECAAYFAkhMOggACgkQXC5GoPU6du2WVQCffVxF8GKXJIY4juJBIw/ljLrQxygAnj2QlvsUd7MdFekLX18+Ov/xzgZ1"
+self.addpkg2db("sync+Always", sp)
+
+self.args = "-S %s" % sp.name
+
+self.addrule("PACMAN_RETCODE=1")
+self.addrule("!PKG_EXIST=pkg1")
diff --git a/test/pacman/tests/smoke002.py b/test/pacman/tests/smoke002.py
index 44f2d0ec..8ff5cab7 100644
--- a/test/pacman/tests/smoke002.py
+++ b/test/pacman/tests/smoke002.py
@@ -10,10 +10,8 @@ self.addpkg(p2)
self.args = "-U %s %s" % (p1.filename(), p2.filename())
-# Note that the current cutoff on line length is 512K, so the first package
-# will succeed while the second one will fail to record the description.
-self.addrule("PACMAN_RETCODE=0")
-self.addrule("PKG_EXIST=pkg1")
-self.addrule("PKG_DESC=pkg1|%s" % p1.desc)
-self.addrule("PKG_EXIST=pkg1")
-self.addrule("!PKG_DESC=pkg1|%s" % p2.desc)
+# We error out when fed a package with an invalid description; the second one
+# fits the bill in this case as the desc is > 512K
+self.addrule("PACMAN_RETCODE=1")
+self.addrule("!PKG_EXIST=pkg1")
+self.addrule("!PKG_EXIST=pkg1")
diff --git a/test/pacman/tests/smoke004.py b/test/pacman/tests/smoke004.py
new file mode 100644
index 00000000..1f9b883d
--- /dev/null
+++ b/test/pacman/tests/smoke004.py
@@ -0,0 +1,11 @@
+self.description = "Read a package DB with several PGP signatures"
+
+for i in range(1000):
+ sp = pmpkg("pkg%03d" % i)
+ sp.desc = "test description for package %d" % i
+ sp.pgpsig = "asdfasdfsdfasdfsdafasdfsdfasd"
+ self.addpkg2db("sync", sp)
+
+self.args = "-Ss"
+
+self.addrule("PACMAN_RETCODE=0")
diff --git a/test/pacman/util.py b/test/pacman/util.py
index 47fde310..ddd955a2 100755
--- a/test/pacman/util.py
+++ b/test/pacman/util.py
@@ -132,8 +132,9 @@ def mkcfgfile(filename, root, option, db):
if key != "local":
value = db[key]
data.append("[%s]\n" \
+ "VerifySig = %s\n" \
"Server = file://%s" \
- % (value.treename,
+ % (value.treename, value.getverify(), \
os.path.join(root, SYNCREPO, value.treename)))
for optkey, optval in value.option.iteritems():
data.extend(["%s = %s" % (optkey, j) for j in optval])