diff options
author | Dan McGee <dan@archlinux.org> | 2008-02-08 02:36:17 +0100 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2008-02-08 02:36:17 +0100 |
commit | 11fe18479eeb7bb97062a2922da13ba816597007 (patch) | |
tree | dcc9807d8c3d78bfbbec9153cf4955e4580cbdde /pactest | |
parent | 0c2206f542ce6df2606586d43f190cd5a423fb13 (diff) | |
download | pacman-11fe18479eeb7bb97062a2922da13ba816597007.tar.gz pacman-11fe18479eeb7bb97062a2922da13ba816597007.tar.xz |
pactest: make more resiliant to missing files
Add a bunch of guards around function calls like open() and stat() to ensure
we are not going to get ourselves a python error. This made implementing and
testing the new upgrade045 pactest much easier, as its whole purpose was to
create a dead symlink and debug a segfault of pacman (which caused no DB
entries to be written) to support the previously checked in fix for FS#9235
(commit 0c2206f542ce6df2606586d43f190cd5a423fb13). Both of these cases are
now non-fatal in pactest.
Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'pactest')
-rwxr-xr-x | pactest/pmdb.py | 13 | ||||
-rw-r--r-- | pactest/tests/upgrade045.py | 16 | ||||
-rwxr-xr-x | pactest/util.py | 6 |
3 files changed, 33 insertions, 2 deletions
diff --git a/pactest/pmdb.py b/pactest/pmdb.py index cc852c2a..af392000 100755 --- a/pactest/pmdb.py +++ b/pactest/pmdb.py @@ -119,7 +119,10 @@ class pmdb: # desc filename = os.path.join(path, "desc") - fd = file(filename, "r") + if not os.path.isfile(filename): + print "invalid db entry found (desc missing) for pkg", pkgname + return None + fd = open(filename, "r") while 1: line = fd.readline() if not line: @@ -158,7 +161,10 @@ class pmdb: # files filename = os.path.join(path, "files") - fd = file(filename, "r") + if not os.path.isfile(filename): + print "invalid db entry found (files missing) for pkg", pkgname + return None + fd = open(filename, "r") while 1: line = fd.readline() if not line: @@ -177,6 +183,9 @@ class pmdb: # depends filename = os.path.join(path, "depends") + if not os.path.isfile(filename): + print "invalid db entry found (depends missing) for pkg", pkgname + return None fd = file(filename, "r") while 1: line = fd.readline() diff --git a/pactest/tests/upgrade045.py b/pactest/tests/upgrade045.py new file mode 100644 index 00000000..b2f81274 --- /dev/null +++ b/pactest/tests/upgrade045.py @@ -0,0 +1,16 @@ +self.description = "FS#9235" + +lp = pmpkg("foo") +lp.files = ["etc/foo.cfg -> etc/foo.cfg"] +lp.backup = ["etc/foo.cfg"] +self.addpkg2db("local", lp) + +p1 = pmpkg("foo", "1.0-2") +p1.files = ["etc/foo.cfg*"] +p1.backup = ["etc/foo.cfg"] +self.addpkg(p1) + +self.args = "-U %s" % p1.filename() + +self.addrule("PKG_VERSION=foo|1.0-2") +self.addrule("FILE_EXIST=etc/foo.cfg") diff --git a/pactest/util.py b/pactest/util.py index b24bfdcf..2a6ff4e7 100755 --- a/pactest/util.py +++ b/pactest/util.py @@ -196,6 +196,9 @@ def mkcfgfile(filename, root, option, db): def getmd5sum(filename): """ """ + if not os.path.isfile(filename): + print "file %s does not exist!" % filename + return "" fd = open(filename, "rb") checksum = md5.new() while 1: @@ -223,6 +226,9 @@ def mkmd5sum(data): def getmtime(filename): """ """ + if not os.path.exists(filename): + print "path %s does not exist!" % filename + return 0, 0, 0 st = os.stat(filename) return st[stat.ST_ATIME], st[stat.ST_MTIME], st[stat.ST_CTIME] |