The Gaudi Framework  v36r16 (ea80daf8)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
QMTTest.py
Go to the documentation of this file.
1 
11 import logging
12 import os
13 
14 from GaudiTesting.BaseTest import * # noqa: F401 F403 (to bring validators into scope)
15 from GaudiTesting.BaseTest import BaseTest
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  from string import Template
31 
32  log = logging.getLogger("QMTest.XMLParser")
33  import xml.etree.ElementTree as ET
34 
35  log.debug("parsing %s", path)
36 
37  self.name = ".".join(
38  os.path.relpath(path, self.basedir)
39  .replace(".qmt", "")
40  .replace(".qms", "")
41  .split(os.sep)
42  )
43 
44  tree = ET.parse(path)
45  for child in tree.getroot():
46  name = child.attrib["name"]
47  if hasattr(self, name):
48  log.debug("setting %s", name)
49  value = child[0]
50  if name in ("args", "unsupported_platforms"):
51  setattr(self, name, [el.text for el in value.findall("text")])
52  elif name == "environment":
53  for el in value.findall("text"):
54  key, value = el.text.split("=", 1)
55  self.environment[key] = Template(value).safe_substitute(
56  self.environment
57  )
58  else:
59  data = value.text
60  if data is not None:
61  if value.tag == "integer":
62  data = int(data)
63  setattr(self, name, data)
64 
65  def ValidateOutput(self, stdout, stderr, result):
66  if self.validator:
67 
68  class CallWrapper(object):
69  """
70  Small wrapper class to dynamically bind some default arguments
71  to a callable.
72  """
73 
74  def __init__(self, callable, extra_args={}):
75  self.callable = callable
76  self.extra_args = extra_args
77  # get the list of names of positional arguments
78  from inspect import getargspec
79 
80  self.args_order = getargspec(callable)[0]
81  # Remove "self" from the list of positional arguments
82  # since it is added automatically
83  if self.args_order[0] == "self":
84  del self.args_order[0]
85 
86  def __call__(self, *args, **kwargs):
87  # Check which positional arguments are used
88  positional = self.args_order[: len(args)]
89 
90  kwargs = dict(kwargs) # copy the arguments dictionary
91  for a in self.extra_args:
92  # use "extra_args" for the arguments not specified as
93  # positional or keyword
94  if a not in positional and a not in kwargs:
95  kwargs[a] = self.extra_args[a]
96  return self.callable(*args, **kwargs)
97 
98  # local names to be exposed in the script
99  stdout_ref = self._expandReferenceFileName(self.reference)
100  stderr_ref = self._expandReferenceFileName(self.error_reference)
101  exported_symbols = {
102  "self": self,
103  "stdout": stdout,
104  "stderr": stderr,
105  "result": result,
106  "causes": self.causes,
107  "reference": stdout_ref,
108  "error_reference": stderr_ref,
109  "findReferenceBlock": CallWrapper(
110  self.findReferenceBlock,
111  {"stdout": stdout, "result": result, "causes": self.causes},
112  ),
113  "validateWithReference": CallWrapper(
115  {
116  "stdout": stdout,
117  "stderr": stderr,
118  "result": result,
119  "causes": self.causes,
120  },
121  ),
122  "validateJSONWithReference": CallWrapper(
124  {
125  "result": result,
126  "causes": self.causes,
127  },
128  ),
129  "countErrorLines": CallWrapper(
130  self.countErrorLines,
131  {"stdout": stdout, "result": result, "causes": self.causes},
132  ),
133  "checkTTreesSummaries": CallWrapper(
135  {"stdout": stdout, "result": result, "causes": self.causes},
136  ),
137  "checkHistosSummaries": CallWrapper(
139  {"stdout": stdout, "result": result, "causes": self.causes},
140  ),
141  }
142  # print self.validator
143  exec(self.validator, globals(), exported_symbols)
144  return result, self.causes
145  else:
146  return super(QMTTest, self).ValidateOutput(stdout, stderr, result)
GaudiTesting.BaseTest.BaseTest.causes
causes
Definition: BaseTest.py:125
GaudiTesting.BaseTest.BaseTest.CheckHistosSummaries
def CheckHistosSummaries(self, stdout=None, result=None, causes=None, dict=None, ignore=None)
Definition: BaseTest.py:497
GaudiTesting.BaseTest.BaseTest.reference
reference
Definition: BaseTest.py:111
GaudiTesting.BaseTest.BaseTest.validateWithReference
def validateWithReference(self, stdout=None, stderr=None, result=None, causes=None, preproc=None)
Definition: BaseTest.py:539
GaudiTesting.BaseTest.BaseTest.environment
environment
Definition: BaseTest.py:117
GaudiTesting.BaseTest.BaseTest.validateJSONWithReference
def validateJSONWithReference(self, output_file, reference_file, result=None, causes=None, detailed=True)
Definition: BaseTest.py:622
GaudiTesting.QMTTest.QMTTest
Definition: QMTTest.py:18
GaudiTesting.QMTTest.QMTTest.ValidateOutput
def ValidateOutput(self, stdout, stderr, result)
Definition: QMTTest.py:65
GaudiTesting.BaseTest.BaseTest.basedir
basedir
Definition: BaseTest.py:132
GaudiTesting.QMTTest.QMTTest.extra_args
extra_args
Definition: QMTTest.py:76
GaudiTesting.BaseTest.BaseTest.name
name
Definition: BaseTest.py:124
GaudiTesting.QMTTest.QMTTest.validator
validator
Definition: QMTTest.py:21
GaudiTesting.BaseTest.BaseTest._expandReferenceFileName
def _expandReferenceFileName(self, reffile)
Definition: BaseTest.py:676
GaudiTesting.BaseTest.BaseTest.findReferenceBlock
def findReferenceBlock(self, reference=None, stdout=None, result=None, causes=None, signature_offset=0, signature=None, id=None)
Definition: BaseTest.py:350
GaudiTesting.QMTTest.QMTTest.callable
callable
Definition: QMTTest.py:75
GaudiTesting.BaseTest
Definition: BaseTest.py:1
Counter.__call__
__call__
Definition: Counter.py:42
GaudiTesting.BaseTest.BaseTest.CheckTTreesSummaries
def CheckTTreesSummaries(self, stdout=None, result=None, causes=None, trees_dict=None, ignore=r"Basket|.*size|Compression")
Definition: BaseTest.py:451
GaudiTesting.BaseTest.BaseTest
Definition: BaseTest.py:104
GaudiTesting.BaseTest.BaseTest.countErrorLines
def countErrorLines(self, expected={"ERROR":0, "FATAL":0}, stdout=None, result=None, causes=None)
Definition: BaseTest.py:407
GaudiTesting.BaseTest.BaseTest.error_reference
error_reference
Definition: BaseTest.py:112
GaudiTesting.QMTTest.QMTTest.XMLParser
def XMLParser(self, path)
Definition: QMTTest.py:25
GaudiTesting.QMTTest.QMTTest.args_order
args_order
Definition: QMTTest.py:80
GaudiTesting.QMTTest.QMTTest.__init__
def __init__(self, path=None)
Definition: QMTTest.py:19