[pacman-dev] [PATCH 2/5] Add unit tests for -Qk and -Qkk with missing files.

Jeremy Heiner scalaprotractor at gmail.com
Mon Nov 11 06:47:44 EST 2013


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



More information about the pacman-dev mailing list