summaryrefslogtreecommitdiffstats
path: root/test/pacman/pmrule.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/pacman/pmrule.py')
-rwxr-xr-xtest/pacman/pmrule.py159
1 files changed, 159 insertions, 0 deletions
diff --git a/test/pacman/pmrule.py b/test/pacman/pmrule.py
new file mode 100755
index 00000000..e7c9c44f
--- /dev/null
+++ b/test/pacman/pmrule.py
@@ -0,0 +1,159 @@
+#! /usr/bin/python
+#
+# Copyright (c) 2006 by Aurelien Foret <orelien@chez.com>
+#
+# 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/>.
+
+import os
+from util import *
+from stat import *
+
+class pmrule:
+ """Rule object
+ """
+
+ def __init__(self, rule):
+ self.rule = rule
+ self.false = 0
+ self.result = 0
+
+ def __str__(self):
+ return "rule = %s" % self.rule
+
+ def check(self, root, retcode, localdb, files):
+ """
+ """
+
+ success = 1
+
+ [test, args] = self.rule.split("=")
+ if test[0] == "!":
+ self.false = 1
+ test = test.lstrip("!")
+ [kind, case] = test.split("_")
+ if "|" in args:
+ [key, value] = args.split("|", 1)
+ else:
+ [key, value] = [args, None]
+
+ if kind == "PACMAN":
+ if case == "RETCODE":
+ if retcode != int(key):
+ success = 0
+ elif case == "OUTPUT":
+ logfile = os.path.join(root, LOGFILE)
+ if not os.access(logfile, os.F_OK):
+ print "LOGFILE not found, cannot validate 'OUTPUT' rule"
+ success = 0
+ elif not grep(os.path.join(root, LOGFILE), key):
+ success = 0
+ else:
+ print "PACMAN rule '%s' not found" % case
+ success = -1
+ elif kind == "PKG":
+ newpkg = localdb.db_read(key)
+ if not newpkg:
+ success = 0
+ else:
+ vprint("\tnewpkg.checksum : %s" % newpkg.checksum)
+ vprint("\tnewpkg.mtime : %s" % newpkg.mtime)
+ if case == "EXIST":
+ success = 1
+ elif case == "MODIFIED":
+ if not localdb.ispkgmodified(newpkg):
+ success = 0
+ elif case == "VERSION":
+ if value != newpkg.version:
+ success = 0
+ elif case == "GROUPS":
+ if not value in newpkg.groups:
+ success = 0
+ elif case == "PROVIDES":
+ if not value in newpkg.provides:
+ success = 0
+ elif case == "DEPENDS":
+ if not value in newpkg.depends:
+ success = 0
+ elif case == "OPTDEPENDS":
+ if not value in newpkg.optdepends:
+ success = 0
+ elif case == "REASON":
+ if newpkg.reason != int(value):
+ success = 0
+ elif case == "FILES":
+ if not value in newpkg.files:
+ success = 0
+ elif case == "BACKUP":
+ found = 0
+ for f in newpkg.backup:
+ name, md5sum = f.split("\t")
+ if value == name:
+ found = 1
+ if not found:
+ success = 0
+ else:
+ print "PKG rule '%s' not found" % case
+ success = -1
+ elif kind == "FILE":
+ filename = os.path.join(root, key)
+ if case == "EXIST":
+ if not os.path.isfile(filename):
+ success = 0
+ elif case == "MODIFIED":
+ for f in files:
+ if f.name == key:
+ if not f.ismodified():
+ success = 0
+ elif case == "MODE":
+ if not os.path.isfile(filename):
+ success = 0
+ else:
+ mode = os.lstat(filename)[ST_MODE]
+ if int(value,8) != S_IMODE(mode):
+ success = 0
+ elif case == "TYPE":
+ if value == "dir":
+ if not os.path.isdir(filename):
+ success = 0
+ elif value == "file":
+ if not os.path.isfile(filename):
+ success = 0
+ elif value == "link":
+ if not os.path.islink(filename):
+ success = 0
+ elif case == "PACNEW":
+ if not os.path.isfile("%s%s" % (filename, PM_PACNEW)):
+ success = 0
+ elif case == "PACORIG":
+ if not os.path.isfile("%s%s" % (filename, PM_PACORIG)):
+ success = 0
+ elif case == "PACSAVE":
+ if not os.path.isfile("%s%s" % (filename, PM_PACSAVE)):
+ success = 0
+ else:
+ print "FILE rule '%s' not found" % case
+ success = -1
+ else:
+ print "Rule kind '%s' not found" % kind
+ success = -1
+
+ if self.false and success != -1:
+ success = not success
+ self.result = success
+ return success
+
+
+if __name__ != "__main__":
+ rule = pmrule("PKG_EXIST=dummy")
+# vim: set ts=4 sw=4 et: