RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: mancoosi Date: 04-Apr-2011 21:20:35 Branch: HEAD Handle: 2011040419203500 Modified files: mancoosi/framework rpmtest.py Log: P.PR: Summary: Revision Changes Path 1.4 +81 -18 mancoosi/framework/rpmtest.py ____________________________________________________________________________ patch -p0 <<'@@ .' Index: mancoosi/framework/rpmtest.py ============================================================================ $ cvs diff -u -r1.3 -r1.4 rpmtest.py --- mancoosi/framework/rpmtest.py 4 Apr 2011 16:10:08 -0000 1.3 +++ mancoosi/framework/rpmtest.py 4 Apr 2011 19:20:35 -0000 1.4 @@ -44,6 +44,7 @@ if maxdelay: self.maxdelay = maxdelay self.erase_maxdelay = maxdelay + self.query_maxdelay = maxdelay self.install_maxdelay = maxdelay self.ts = None self.killtimes = [] @@ -52,6 +53,10 @@ self.stats = {} self.stats['stale_lock'] = 0 self.stats['recover_failed'] = 0 + self.stats['script_error'] = 0 + self.stats['file_truncated'] = 0 + self.stats['config_rpmnew'] = 0 + self.stats['config_rpmsave'] = 0 self.warning_pat = '.*warning: (.*)$' self.error_pat = '.*error: (.*)$' @@ -66,7 +71,17 @@ self.failed_deps = '^error: Failed dependencies:' self.is_needed_by = '(.*) is needed by (.*)' # warning: /etc/sysconfig/ldap created as /etc/sysconfig/ldap.rpmnew - self.created_as = '.*warning: (.*) created as (.*)' +# warning: /etc/sysconfig/ldap saved as /etc/sysconfig/ldap.rpmsave + self.created_as = '^warning: (.*) created as (.*)' + self.saved_as = '^warning: (.*) saved as (.*)' +# ldconfig: file /usr/lib/libldap-2.4.so.2.5.5;4d99f2c1 is truncated + self.file_truncated = '^ldconfig: file ([^ ]*) is truncated' +# warning: cleaning stale lock + self.script_pats = [ + 'rndc: decode base64 secret: bad base64 encoding', + 'rndc: connect failed: 127.0.0.1#953: connection refused', + ] + def bad(self, args): print colored(args, 'red') @@ -86,8 +101,13 @@ print 'Running(' + str(delay) + '): ' + str(args) po = subprocess.Popen(args, stdout=None, stderr=None) pid = po.pid - time.sleep(delay) - res = subprocess.Popen.poll(po) + res = None + for i in range(int(delay+1)): + time.sleep(1) + res = subprocess.Popen.poll(po) + if res: + break + if not res: try: po.kill() @@ -121,6 +141,34 @@ mo = re.match(self.is_needed_by, l) if mo: continue + mo = re.match(self.file_truncated, l) + if mo: + fn = mo.group(1) + self.stats['file_truncated'] += 1 + self.bad("truncated: " + fn) + os.unlink(fn) + continue + mo = re.match(self.created_as, l) + if mo: + fn = mo.group(2) + self.stats['config_rpmnew'] += 1 + self.bad("rpmnew: " + fn) + os.unlink(fn) + continue + mo = re.match(self.saved_as, l) + if mo: + fn = mo.group(2) + self.stats['config_rpmsave'] += 1 + self.bad("rpmsave: " + fn) + os.unlink(fn) + continue + for pat in self.script_pats: + mo = re.match(pat, l) + if mo: + break + if mo: + self.stats['script_error'] += 1 + continue; a.append(l) res = '\n'.join(a) return res @@ -159,14 +207,22 @@ # Calibrate maxdelay from pkg set install/erase times. def calibrate(self): xx = self.erase_pkgset() + bgn = time.time() args = [bin_rpm, '-U' ] + self.rpms xx = self.run(args) self.install_maxdelay = (time.time() - bgn) * 1000. + + bgn = time.time() + args = [bin_rpm, '-q' ] + self.pkgs + xx = self.run(args) + self.query_maxdelay = (time.time() - bgn) * 1000. + bgn = time.time() args = [bin_rpm, '-e' ] + self.pkgs xx = self.run(args) self.erase_maxdelay = (time.time() - bgn) * 1000. + return xx def rollback(self, rollback_list): @@ -242,21 +298,24 @@ # Start with known pre-conditions. def prenatal(self, opts): - if opts != '-Uvh': - return self.install_pkgset() - else: - return self.erase_pkgset() + # XXX necessary? + args = ['/bin/rm', '-f', var_lib_rpm + '__db*'] + xx = self.run(args) + xx = self.erase_pkgset() + if opts == '-ev': + xx = self.install_pkgset() + return xx # See if a stale lock stops rpmdb queries (must be run as root). def check_query(self): - watchdog_delay = 2.0 + watchdog_delay = (self.query_maxdelay / 1000) + 1 args = [bin_rpm, '-q'] + self.pkgs xx = self.timed(args, watchdog_delay) return xx # See if rpmdb access is recoverable. def check_recover(self): - watchdog_delay = 2.0 + watchdog_delay = (self.query_maxdelay / 1000) + 1 args = [usr_bin_dbrecover, '-h', var_lib_rpm] xx = self.timed(args, watchdog_delay) return xx @@ -518,18 +577,18 @@ 'Failures timestamps', 'Kill interval (sec)']] package_sets = [ + 'bind,bind-doc', + 'apache-mpm-prefork,apache-modules,apache-base,libapr-util1', 'openldap,libldap2.4_2,openldap-clients,openldap-doc,openldap-extra-schemas,openldap-servers,libunixODBC1', - 'postgresql8.3,postgresql8.3-contrib,postgresql8.3-devel,postgresql8.3-docs' - , - 'ghostscript,ghostscript-X,ghostscript-common,ghostscript-doc', 'ruby,ruby-devel,ruby-doc', - 'apache-mod_dbd,apache-mod_disk_cache,apache-mod_deflate,apache-mod_mod_proxy' - , + 'ghostscript,ghostscript-X,ghostscript-common,ghostscript-doc', + 'git,gitk,perl-Git,git-core-1.7.1,git-cvs,git-email,git-svn', + 'mysql,mysql-bench,mysql-client,mysql-common-core-5.1.46,mysql-common-5.1.46,mysql-core,libmysql16', + + 'postgresql8.3,postgresql8.3-contrib,postgresql8.3-devel,postgresql8.3-docs', 'beagle,beagle-crawl-system,beagle-evolution', - 'bind,bind-devel,bind-doc', 'evolution,evolution-data-server,evolution-exchange', - 'git,git-core,git-cvs,git-svn', - 'mysql,mysql-bench,mysql-common,mysql-doc', + ] if opts.package_set and not opts.singlepkg: @@ -624,14 +683,18 @@ # if to_rollback: # uut.rollback(to_rollback) + # Final clean-up + xx = uut.prenatal('-Uvh') + print 'Test aggregate results: %d/%d pkgs' \ - % (uut.success_cases, uut.niters) + % (uut.success_cases, 2 * uut.niters) if not opts.singlepkg: print 'Multiple package test details: %d transactions to completion /%d initial state' \ % (uut.details[0], uut.details[1]) print 'Average killtimes: %f' % (sum(uut.killtimes) / len(uut.killtimes)) + print "Detected failure cases:" print uut.stats # dumpResultsToCsv(global_results, output_file) @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org