diff options
Diffstat (limited to 'test/pacman/pmtest.py')
-rw-r--r--[-rwxr-xr-x] | test/pacman/pmtest.py | 98 |
1 files changed, 30 insertions, 68 deletions
diff --git a/test/pacman/pmtest.py b/test/pacman/pmtest.py index 82dfda6d..0572d6f0 100755..100644 --- a/test/pacman/pmtest.py +++ b/test/pacman/pmtest.py @@ -17,9 +17,10 @@ import os -import os.path +import shlex import shutil import stat +import subprocess import time import pmrule @@ -44,15 +45,11 @@ class pmtest(object): "root = %s" % (self.name, self.testname, self.root) def addpkg2db(self, treename, pkg): - """ - """ if not treename in self.db: self.db[treename] = pmdb.pmdb(treename, self.root) self.db[treename].pkgs.append(pkg) def addpkg(self, pkg): - """ - """ self.localpkgs.append(pkg) def findpkg(self, name, version, allow_local=False): @@ -60,7 +57,7 @@ class pmtest(object): 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: + if db.is_local and not allow_local: continue pkg = db.getpkg(name) if pkg and pkg.version == version: @@ -72,15 +69,10 @@ class pmtest(object): return None def addrule(self, rulename): - """ - """ rule = pmrule.pmrule(rulename) self.rules.append(rule) def load(self): - """ - """ - # Reset test parameters self.result = { "success": 0, @@ -111,9 +103,6 @@ class pmtest(object): raise IOError("file %s does not exist!" % self.name) def generate(self): - """ - """ - print "==> Generating test environment" # Cleanup leftover files from a previous test session @@ -123,7 +112,7 @@ class pmtest(object): # Create directory structure vprint(" Creating directory structure:") - dbdir = os.path.join(self.root, util.PM_DBPATH) + dbdir = os.path.join(self.root, util.PM_SYNCDBPATH) cachedir = os.path.join(self.root, util.PM_CACHEDIR) syncdir = os.path.join(self.root, util.SYNCREPO) tmpdir = os.path.join(self.root, util.TMPDIR) @@ -159,40 +148,21 @@ class pmtest(object): pkg.md5sum = util.getmd5sum(pkg.path) pkg.csize = os.stat(pkg.path)[stat.ST_SIZE] - # Populating databases - vprint(" Populating databases") - for key, value in self.db.iteritems(): - for pkg in value.pkgs: - vprint("\t%s/%s" % (key, pkg.fullname())) - if key == "local": - pkg.installdate = time.ctime() - value.db_write(pkg) - # Creating sync database archives - vprint(" Creating sync database archives") + vprint(" Creating databases") for key, value in self.db.iteritems(): - if key == "local": - continue vprint("\t" + value.treename) - value.gensync() - serverpath = os.path.join(syncdir, value.treename) - util.mkdir(serverpath) - shutil.copy(value.dbfile, serverpath) + value.generate() # Filesystem vprint(" Populating file system") for pkg in self.db["local"].pkgs: vprint("\tinstalling %s" % pkg.fullname()) - for f in pkg.files: - vprint("\t%s" % f) - path = os.path.join(self.root, f) - util.mkfile(path, f) - if os.path.isfile(path): - os.utime(path, (355, 355)) + pkg.install_package(self.root) for f in self.filesystem: vprint("\t%s" % f) + util.mkfile(self.root, f, f) path = os.path.join(self.root, f) - util.mkfile(path, f) if os.path.isfile(path): os.utime(path, (355, 355)) @@ -201,14 +171,11 @@ class pmtest(object): for roots, dirs, files in os.walk(self.root): for i in files: filename = os.path.join(roots, i) - f = pmfile.pmfile(self.root, filename.replace(self.root + "/", "")) + f = pmfile.PacmanFile(self.root, filename.replace(self.root + "/", "")) self.files.append(f) vprint("\t%s" % f.name) def run(self, pacman): - """ - """ - if os.path.isfile(util.PM_LOCK): print "\tERROR: another pacman session is on-going -- skipping" return @@ -216,7 +183,7 @@ class pmtest(object): print "==> Running test" vprint("\tpacman %s" % self.args) - cmd = [""] + cmd = [] if os.geteuid() != 0: fakeroot = util.which("fakeroot") if not fakeroot: @@ -229,41 +196,39 @@ class pmtest(object): cmd.append("fakechroot") if pacman["gdb"]: - cmd.append("libtool execute gdb --args") + cmd.extend(["libtool", "execute", "gdb", "--args"]) if pacman["valgrind"]: - cmd.append("valgrind -q --tool=memcheck --leak-check=full --show-reachable=yes --suppressions=%s/valgrind.supp" % os.getcwd()) - cmd.append("\"%s\" --config=\"%s\" --root=\"%s\" --dbpath=\"%s\" --cachedir=\"%s\"" \ - % (pacman["bin"], - os.path.join(self.root, util.PACCONF), - self.root, - os.path.join(self.root, util.PM_DBPATH), - os.path.join(self.root, util.PM_CACHEDIR))) + cmd.extend(["libtool", "execute", "valgrind", "-q", + "--tool=memcheck", "--leak-check=full", + "--show-reachable=yes", "--suppressions=%s/valgrind.supp" % os.getcwd()]) + cmd.extend([pacman["bin"], + "--config", os.path.join(self.root, util.PACCONF), + "--root", self.root, + "--dbpath", os.path.join(self.root, util.PM_DBPATH), + "--cachedir", os.path.join(self.root, util.PM_CACHEDIR)]) if not pacman["manual-confirm"]: cmd.append("--noconfirm") if pacman["debug"]: cmd.append("--debug=%s" % pacman["debug"]) - cmd.append("%s" % self.args) - if not pacman["gdb"] and not pacman["valgrind"] and not pacman["nolog"]: - cmd.append(">\"%s\" 2>&1" % os.path.join(self.root, util.LOGFILE)) + cmd.extend(shlex.split(self.args)) + if not (pacman["gdb"] or pacman["valgrind"] or pacman["nolog"]): + output = open(os.path.join(self.root, util.LOGFILE), 'w') + else: + output = None vprint("\trunning: %s" % " ".join(cmd)) # Change to the tmp dir before running pacman, so that local package # archives are made available more easily. - curdir = os.getcwd() - tmpdir = os.path.join(self.root, util.TMPDIR) - os.chdir(tmpdir) - time_start = time.time() - self.retcode = os.system(" ".join(cmd)) + self.retcode = subprocess.call(cmd, stdout=output, stderr=output, + cwd=os.path.join(self.root, util.TMPDIR)) time_end = time.time() - vprint("\ttime elapsed: %ds" % (time_end - time_start)) + vprint("\ttime elapsed: %.2fs" % (time_end - time_start)) + + if output: + output.close() - if self.retcode == None: - self.retcode = 0 - else: - self.retcode /= 256 vprint("\tretcode = %s" % self.retcode) - os.chdir(curdir) # Check if the lock is still there if os.path.isfile(util.PM_LOCK): @@ -274,9 +239,6 @@ class pmtest(object): print "\tERROR: pacman dumped a core file" def check(self): - """ - """ - print "==> Checking rules" for i in self.rules: |