source: CMIP6dreqbuild/trunk/src/framework/dreqPy/simpleCheck.py @ 580

Subversion URL: http://proj.badc.rl.ac.uk/svn/exarch/CMIP6dreqbuild/trunk/src/framework/dreqPy/simpleCheck.py@580
Revision 580, 4.4 KB checked in by mjuckes, 5 years ago (diff)

adjusted to run checks smoothly from pypi package

Line 
1from __init__ import DOC_DIR
2import string, os, sys
3
4try:
5  import pkgutil
6  l = pkgutil.iter_modules()
7  ll = map( lambda x: x[1], l )
8  pkgutilFailed=False
9except:
10  pkgutilFailed=True
11  print ( 'Failed to load pkgutil .. more limited tests on available modules will be done' )
12  ll = []
13
14requiredModules = ['xml']
15confirmed = []
16installFailed = []
17missingLib = []
18for x in requiredModules:
19  if x in ll or pkgutilFailed:
20      try:
21        __import__(x)
22        confirmed.append( x )
23      except:
24        installFailed.append( x )
25        print ( 'Failed to install %s' % x )
26  else:
27      missingLib.append( x )
28
29if len( missingLib ) > 0 or len(installFailed) > 0:
30  print ( 'Could not load all required python libraries' )
31  if len(missingLib) > 0:
32    print ( 'MISSING LIBRARIES: %s' % str(missingLib) )
33  if len(installFailed) > 0:
34    print ( 'LIBRARIES PRESENT BUT FAILED TO INSTALL:%s' % str(missingLib) )
35  all = False
36  exit(0)
37else:
38  print ( 'Required libraries present' )
39  all = True
40
41import inspect
42class checkbase(object):
43  def __init__(self,lab):
44    self.lab = lab
45    self.ok = True
46    self.entryPoint = sys.argv[0].split( '/' )[-1]
47
48#document directory
49    self.docdir = DOC_DIR
50#schema location
51    self.schema = '%s/dreq2Schema.xsd' % self.docdir
52#sample xml location
53    self.sampleXml = '%s/dreq2Sample.xml' % self.docdir
54#definition document xml location
55    self.defnXml = '%s/dreq2Defn.xml' % self.docdir
56
57    ml = inspect.getmembers( self, predicate=inspect.ismethod ) 
58    ok = True
59    for tag,m in ml:
60      if tag[:3] == '_ch':
61        try:
62          self.ok = False
63          m()
64          ok &= self.ok
65        except:
66          print ( 'Failed to complete check %s' % tag )
67          raise
68    if ok:
69      print ( '%s: All checks passed' % lab )
70    else: 
71      print ( '%s: Errors detected' % lab )
72       
73class check1(checkbase):
74  def _ch01_importDreq(self):
75    import dreq
76    print ( 'Dreq software import checked' )
77    self.ok = True
78
79  def _ch02_importSample(self):
80    import dreq
81    rq = dreq.loadDreq( dreqXML=self.sampleXml,configdoc=self.defnXml )
82    print ( 'Dreq sample load checked' )
83    self.ok = True
84
85class check2(checkbase):
86
87  def _clear_ch03(self):
88    os.unlink( '.simpleCheck_check2_err.txt' )
89    os.unlink( '.simpleCheck_check2.txt' )
90
91  def _clear_ch04(self):
92    os.unlink( '.simpleCheck_check2_err.txt' )
93    os.unlink( '.simpleCheck_check2.txt' )
94
95  def _ch04_checkCmd(self):
96    import os
97    if self.entryPoint == 'drq':
98       cmd = 'drq'
99    else:
100       cmd = 'python dreqCmdl.py'
101
102    os.popen( '%s -v  2> .simpleCheck_check2_err.txt 1>.simpleCheck_check2.txt' % cmd ).readlines()
103
104    ii = open( '.simpleCheck_check2_err.txt' ).readlines()
105    if len(ii) > 0:
106      print ( 'WARNING[003]: failed to get version with command line call' )
107      self.ok = False
108      self._clear_ch04()
109      return
110
111    ii = open( '.simpleCheck_check2.txt' ).readlines()
112    if len(ii) < 1:
113      print ( 'WARNING[004]: failed to get version with command line call' )
114      self.ok = False
115      self._clear_ch04()
116      return
117
118    self.ok = True
119    return
120
121  def _ch03_checkXML(self):
122    import os
123    os.popen( 'which xmllint 2> .simpleCheck_check2_err.txt 1>.simpleCheck_check2.txt' ).readlines()
124    ii = open( '.simpleCheck_check2_err.txt' ).readlines()
125    if len(ii) > 0:
126      print ( 'WARNING[001]: failed to detect xmllint command line program' )
127      print ( 'optional checks omitted' )
128      self.ok = False
129      self._clear_ch03()
130      return
131    ii = open( '.simpleCheck_check2.txt' ).readlines()
132    if len(ii) < 1:
133      print ( 'WARNING[002]: failed to detect xmllint command line program' )
134      print ( 'Optional checks omitted' )
135      self.ok = False
136      self._clear_ch03()
137      return
138
139    cmd = 'xmllint --noout --schema %s %s  2> .simpleCheck_check2_err.txt 1>.simpleCheck_check2.txt' % (self.schema,self.sampleXml) 
140    os.popen( cmd ).readlines()
141    ii = open( '.simpleCheck_check2_err.txt' ).readlines()
142    if len(ii) == 0:
143      print ( 'WARNING[003]: Failed to capture xmllint response' )
144      print ( cmd )
145      self.ok = False
146      self._clear_ch03()
147      return
148    if ii[0].find('validates') != -1:
149      print ( 'Sample XML validated' )
150      self.ok = True
151      self._clear_ch03()
152    else:
153      print ( 'Sample XML failed to validate' )
154      print ( cmd )
155      self.ok = False
156    return
157   
158all &= check1('Suite 1 (dreq module)').ok
159all &= check2('Suite 2 (xmllint & command line)').ok
160
161if all:
162  print ( 'ALL CHECK PASSED' )
Note: See TracBrowser for help on using the repository browser.