diff --git a/test/pacman/pmrule.py b/test/pacman/pmrule.py index 62630457..c68d085e 100755 --- a/test/pacman/pmrule.py +++ b/test/pacman/pmrule.py @@ -146,6 +146,13 @@ class pmrule(object): else: print "FILE rule '%s' not found" % case success = -1 + elif kind == "CACHE": + cachedir = os.path.join(test.root, util.PM_CACHEDIR) + if case == "EXISTS": + pkg = test.findpkg(key, value, allow_local=True) + if not pkg or not os.path.isfile( + os.path.join(cachedir, pkg.filename())): + success = 0 else: print "Rule kind '%s' not found" % kind success = -1 diff --git a/test/pacman/pmtest.py b/test/pacman/pmtest.py index 958e2630..82dfda6d 100755 --- a/test/pacman/pmtest.py +++ b/test/pacman/pmtest.py @@ -55,6 +55,22 @@ class pmtest(object): """ self.localpkgs.append(pkg) + def findpkg(self, name, version, allow_local=False): + """Find a package object matching the name and version specified in + either sync databases or the local package collection. The local database + is allowed to match if allow_local is True.""" + for db in self.db.itervalues(): + if db.treename == "local" and not allow_local: + continue + pkg = db.getpkg(name) + if pkg and pkg.version == version: + return pkg + for pkg in self.localpkgs: + if pkg.name == name and pkg.version == version: + return pkg + + return None + def addrule(self, rulename): """ """ @@ -76,6 +92,7 @@ class pmtest(object): "local": pmdb.pmdb("local", self.root) } self.localpkgs = [] + self.createlocalpkgs = False self.filesystem = [] self.description = "" @@ -131,7 +148,7 @@ class pmtest(object): vprint("\t%s" % os.path.join(util.TMPDIR, pkg.filename())) pkg.makepkg(tmpdir) for key, value in self.db.iteritems(): - if key == "local": + if key == "local" and not self.createlocalpkgs: continue for pkg in value.pkgs: vprint("\t%s" % os.path.join(util.PM_CACHEDIR, pkg.filename()))