pmpkg.install_package (which is called by the framework to populate the filesystem with "local" db packages) now executes any pre_install and/or post_install scripts it finds. Prior to this commit no unit test had a "local" package with such a script. The two new tests in this commit use post_install to remove some installed files. As with the previous commit, the -Qk test (003) validates the filesystem (warning about the missing files), while the -Qkk test (004) can only check for the warning about the lack of an mtree. Signed-off-by: Jeremy Heiner <ScalaProtractor at gmail.com> --- test/pacman/pmpkg.py | 13 +++++++++++++ test/pacman/tests/TESTS | 2 ++ test/pacman/tests/querycheck003.py | 19 +++++++++++++++++++ test/pacman/tests/querycheck004.py | 17 +++++++++++++++++ 4 files changed, 51 insertions(+) create mode 100644 test/pacman/tests/querycheck003.py create mode 100644 test/pacman/tests/querycheck004.py diff --git a/test/pacman/pmpkg.py b/test/pacman/pmpkg.py index 6f7ae6e..fd469b1 100644 --- a/test/pacman/pmpkg.py +++ b/test/pacman/pmpkg.py @@ -22,6 +22,7 @@ import stat import shutil from StringIO import StringIO +import subprocess import tarfile import util @@ -177,13 +178,25 @@ def makepkg(self, path): tar.close() + def runscript(self, root, name): + script = self.install[name] + if script: + util.vprint("running %s script: %s" % (name, script)) + # note: there are differences between the environment the script + # gets from here versus the one the pacman binary would give it. + # in particular there's no chroot, so use relative paths. + subprocess.call(["sh", "-c", script], + cwd=os.path.join(root,util.TMPDIR)) + def install_package(self, root): """Install the package in the given root.""" + self.runscript(root, "pre_install") for f in self.files: util.mkfile(root, f, f) path = os.path.join(root, f) if os.path.isfile(path): os.utime(path, (355, 355)) + self.runscript(root, "post_install") def filelist(self): """Generate a list of package files.""" diff --git a/test/pacman/tests/TESTS b/test/pacman/tests/TESTS index 0997f58..f4e6caf 100644 --- a/test/pacman/tests/TESTS +++ b/test/pacman/tests/TESTS @@ -90,6 +90,8 @@ TESTS += test/pacman/tests/query011.py TESTS += test/pacman/tests/query012.py TESTS += test/pacman/tests/querycheck001.py TESTS += test/pacman/tests/querycheck002.py +TESTS += test/pacman/tests/querycheck003.py +TESTS += test/pacman/tests/querycheck004.py TESTS += test/pacman/tests/reason001.py TESTS += test/pacman/tests/remove001.py TESTS += test/pacman/tests/remove002.py diff --git a/test/pacman/tests/querycheck003.py b/test/pacman/tests/querycheck003.py new file mode 100644 index 0000000..3181188 --- /dev/null +++ b/test/pacman/tests/querycheck003.py @@ -0,0 +1,19 @@ +self.description = "Query--check files, missing" + +pkg = pmpkg("dummy") +pkg.files = [ + "usr/lib/libdummy.so.0", + "usr/lib/libdummy.so -> libdummy.so.0", + "usr/share/dummy/C/", + "usr/share/dummy/C/msgs", + "usr/share/dummy/en -> C"] +pkg.install['post_install'] = "rm -r ../usr/share/dummy/*" +self.addpkg2db("local",pkg) + +self.args = "-Qk" + +self.addrule("PACMAN_RETCODE=1") +self.addrule("PACMAN_OUTPUT=/usr/share/dummy/C/ .No such file") +self.addrule("PACMAN_OUTPUT=/usr/share/dummy/C/msgs .No such file") +self.addrule("PACMAN_OUTPUT=/usr/share/dummy/en .No such file") +self.addrule("PACMAN_OUTPUT=, 3 missing files") diff --git a/test/pacman/tests/querycheck004.py b/test/pacman/tests/querycheck004.py new file mode 100644 index 0000000..0d2015a --- /dev/null +++ b/test/pacman/tests/querycheck004.py @@ -0,0 +1,17 @@ +self.description = "Query--check mtree, no mtree + missing" + +pkg = pmpkg("dummy") +pkg.files = [ + "usr/lib/libdummy.so.0", + "usr/lib/libdummy.so -> libdummy.so.0", + "usr/share/dummy/C/", + "usr/share/dummy/C/msgs", + "usr/share/dummy/en -> C"] +pkg.install['post_install'] = "rm -r ../usr/share/dummy/*" +self.addpkg2db("local",pkg) + +self.args = "-Qkk" + +# the existence of files is not checked when there is no mtree +self.addrule("PACMAN_RETCODE=0") +self.addrule("PACMAN_OUTPUT=dummy: no mtree file") -- 1.8.4.2