The Gaudi Framework  v33r1 (b1225454)
QMTTest.py
Go to the documentation of this file.
1 # -*- coding: utf-8 -*-
2 
12 from GaudiTesting.BaseTest import *
13 import logging
14 import os
15 import sys
16 
17 
19  def __init__(self, path=None):
20  BaseTest.__init__(self)
21  self.validator = ''
22  if path:
23  self.XMLParser(path)
24 
25  def XMLParser(self, path):
26  '''
27  Parse a QMTest XML test description (.qmt file) to initialize the test
28  instance.
29  '''
30  log = logging.getLogger('QMTest.XMLParser')
31  import xml.etree.ElementTree as ET
32  log.debug('parsing %s', path)
33 
34  self.name = '.'.join(
35  os.path.relpath(path, self.basedir).replace('.qmt', '').replace(
36  '.qms', '').split(os.sep))
37 
38  tree = ET.parse(path)
39  for child in tree.getroot():
40  name = child.attrib['name']
41  if hasattr(self, name):
42  log.debug('setting %s', name)
43  value = child[0]
44  if name in ('args', 'unsupported_platforms'):
45  setattr(self, name,
46  [el.text for el in value.findall('text')])
47  elif name == 'environment':
48  setattr(
49  self, name,
50  dict(
51  el.text.split('=', 1)
52  for el in value.findall('text')))
53  else:
54  data = value.text
55  if data is not None:
56  if value.tag == 'integer':
57  data = int(data)
58  setattr(self, name, data)
59 
60  def ValidateOutput(self, stdout, stderr, result):
61  if self.validator:
62 
63  class CallWrapper(object):
64  """
65  Small wrapper class to dynamically bind some default arguments
66  to a callable.
67  """
68 
69  def __init__(self, callable, extra_args={}):
70  self.callable = callable
71  self.extra_args = extra_args
72  # get the list of names of positional arguments
73  from inspect import getargspec
74  self.args_order = getargspec(callable)[0]
75  # Remove "self" from the list of positional arguments
76  # since it is added automatically
77  if self.args_order[0] == "self":
78  del self.args_order[0]
79 
80  def __call__(self, *args, **kwargs):
81  # Check which positional arguments are used
82  positional = self.args_order[:len(args)]
83 
84  kwargs = dict(kwargs) # copy the arguments dictionary
85  for a in self.extra_args:
86  # use "extra_args" for the arguments not specified as
87  # positional or keyword
88  if a not in positional and a not in kwargs:
89  kwargs[a] = self.extra_args[a]
90  return self.callable(*args, **kwargs)
91 
92  # local names to be exposed in the script
93  stdout_ref = self._expandReferenceFileName(self.reference)
94  stderr_ref = self._expandReferenceFileName(self.error_reference)
95  exported_symbols = {
96  "self":
97  self,
98  "stdout":
99  stdout,
100  "stderr":
101  stderr,
102  "result":
103  result,
104  "causes":
105  self.causes,
106  "reference":
107  stdout_ref,
108  "error_reference":
109  stderr_ref,
110  "findReferenceBlock":
111  CallWrapper(self.findReferenceBlock, {
112  "stdout": stdout,
113  "result": result,
114  "causes": self.causes
115  }),
116  "validateWithReference":
117  CallWrapper(
118  self.validateWithReference, {
119  "stdout": stdout,
120  "stderr": stderr,
121  "result": result,
122  "causes": self.causes
123  }),
124  "countErrorLines":
125  CallWrapper(self.countErrorLines, {
126  "stdout": stdout,
127  "result": result,
128  "causes": self.causes
129  }),
130  "checkTTreesSummaries":
131  CallWrapper(self.CheckTTreesSummaries, {
132  "stdout": stdout,
133  "result": result,
134  "causes": self.causes
135  }),
136  "checkHistosSummaries":
137  CallWrapper(self.CheckHistosSummaries, {
138  "stdout": stdout,
139  "result": result,
140  "causes": self.causes
141  })
142  }
143  # print self.validator
144  exec (self.validator, globals(), exported_symbols)
145  return result, self.causes
146  else:
147  return super(QMTTest, self).ValidateOutput(stdout, stderr, result)
def XMLParser(self, path)
Definition: QMTTest.py:25
def validateWithReference(self, stdout=None, stderr=None, result=None, causes=None, preproc=None)
Definition: BaseTest.py:508
def ValidateOutput(self, stdout, stderr, result)
Definition: QMTTest.py:60
def countErrorLines(self, expected={ 'ERROR':0, 'FATAL':0 }, stdout=None, result=None, causes=None)
Definition: BaseTest.py:370
def __init__(self, path=None)
Definition: QMTTest.py:19
def _expandReferenceFileName(self, reffile)
Definition: BaseTest.py:594
def findReferenceBlock(self, reference=None, stdout=None, result=None, causes=None, signature_offset=0, signature=None, id=None)
Definition: BaseTest.py:313
def CheckHistosSummaries(self, stdout=None, result=None, causes=None, dict=None, ignore=None)
Definition: BaseTest.py:463
def CheckTTreesSummaries(self, stdout=None, result=None, causes=None, trees_dict=None, ignore=r"Basket|.*size|Compression")
Definition: BaseTest.py:418