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

Reply via email to