Home | History | Annotate | Download | only in build
      1 #!/usr/bin/env python
      2 #
      3 #    Script for determining items missing from LTP install based on the output
      4 #    log provided by runltp[lite.sh].
      5 #
      6 #    Copyright (C) 2009, Cisco Systems Inc.
      7 #
      8 #    This program is free software; you can redistribute it and/or modify
      9 #    it under the terms of the GNU General Public License as published by
     10 #    the Free Software Foundation; either version 2 of the License, or
     11 #    (at your option) any later version.
     12 #
     13 #    This program is distributed in the hope that it will be useful,
     14 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
     15 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16 #    GNU General Public License for more details.
     17 #
     18 #    You should have received a copy of the GNU General Public License along
     19 #    with this program; if not, write to the Free Software Foundation, Inc.,
     20 #    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     21 #
     22 # Ngie Cooper, July 2009
     23 #
     24 # Please invoke this script with --help to determine usage.
     25 #
     26 
     27 from optparse import OptionParser
     28 import os, re, sys
     29 
     30 parser = OptionParser(usage='usage: %prog [options] logfile ...')
     31 
     32 parser.add_option('-v', '--verbose', action='store_true', default=False,
     33                   dest='verbose', help=('print out successful results as '
     34                                         'well as failures'))
     35 
     36 opts, logfiles = parser.parse_args()
     37 
     38 if not len(logfiles):
     39     parser.print_help()
     40 
     41 for logfile in logfiles:
     42     if not os.access(logfile, os.R_OK):
     43         sys.exit("%s not readable" % logfile)
     44 
     45 todo_res = [
     46     re.compile("""initiation_status="pan\(\d+\): execvp of '(?P<app>.+)' \(tag (?P<tag>\w+)\) failed.+errno:2\s+No such file or directory"""),
     47     re.compile("(?P<tag>\S+): line \d+: (?P<app>\S+): No such file or directory"),
     48     re.compile("(?P<caller>\S+): (?P<app>\s+): No such file or directory"),
     49     re.compile("""tag=(?P<tag>\w+) [\w=]+
     50 cmdline=.+
     51 contacts=.+
     52 analysis=.+
     53 <<<test_output>>>
     54 (\S+): (?P<app>\w+): command not found
     55 <<<execution_status>>>
     56 initiation_status=.+
     57 .+termination_id=127.+""")
     58 ]
     59 
     60 for logfile in logfiles:
     61     fd = open(logfile)
     62 
     63     # Case 1:
     64 
     65     # initiation_status="pan(9908): execvp of 'fs_perms_simpletest.sh' (tag fs_perms) failed.  errno:2  No such file or directory"
     66 
     67     # Case 2:
     68 
     69     # /scratch/ltp-install4/testcases/bin/test_controllers.sh: line 109: /scratch/ltp-install4/testcases/bin/run_cpuset_test.sh: No such file or directory
     70 
     71     # Case 3:
     72 
     73     # gcc: /scratch/ltp-install4/testcases/bin/nmfile2.c: No such file or directory
     74 
     75     # Case 4:
     76 
     77     # <<<test_start>>>
     78     # tag=iogen01 stime=1248638309
     79     # cmdline="export LTPROOT; rwtest -N iogen01 -i 120s -s read,write -Da -Dv -n 2 500b:doio.f1.$$ 1000b:doio.f2.$$"
     80     # contacts=""
     81     # analysis=exit
     82     # <<<test_output>>>
     83     # sh: rwtest: command not found
     84     # <<<execution_status>>>
     85     # initiation_status="ok"
     86     # duration=0 termination_type=exited termination_id=127 corefile=no
     87 
     88     missing_ents = []
     89 
     90     try:
     91 
     92         lines = fd.readlines()
     93 
     94         for line in lines:
     95 
     96             for todo_re in todo_res[:-1]:
     97 
     98                 m = todo_re.match(line)
     99                 if m:
    100                     missing_ent = " ".join([m.group(1), m.group('app')])
    101                     if missing_ent not in missing_ents:
    102                         missing_ents.append(missing_ent)
    103                     break
    104 
    105         for m in todo_res[2].finditer("".join(lines)):
    106             missing_ent = " ".join([m.group('tag'), m.group('app')])
    107             if missing_ent not in missing_ents:
    108                 missing_ents.append(missing_ent)
    109 
    110     finally:
    111         fd.close()
    112 
    113     if len(missing_ents):
    114         print "\n".join(["%s: %s" % (os.path.basename(logfile), i) for i in ["Tag | App"] + missing_ents])
    115     elif opts.verbose:
    116         print "%s: CONGRATULATIONS -- no missing files found!" % os.path.basename(logfile)
    117