The Gaudi Framework  v36r7 (7f57a304)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
QMTTest.py
Go to the documentation of this file.
1 # -*- coding: utf-8 -*-
2 
12 import logging
13 import os
14 import sys
15 
16 from GaudiTesting.BaseTest import *
17 
18 
20  def __init__(self, path=None):
21  BaseTest.__init__(self)
22  self.validator = ""
23  if path:
24  self.XMLParser(path)
25 
26  def XMLParser(self, path):
27  """
28  Parse a QMTest XML test description (.qmt file) to initialize the test
29  instance.
30  """
31  from string import Template
32 
33  log = logging.getLogger("QMTest.XMLParser")
34  import xml.etree.ElementTree as ET
35 
36  log.debug("parsing %s", path)
37 
38  self.name = ".".join(
39  os.path.relpath(path, self.basedir)
40  .replace(".qmt", "")
41  .replace(".qms", "")
42  .split(os.sep)
43  )
44 
45  tree = ET.parse(path)
46  for child in tree.getroot():
47  name = child.attrib["name"]
48  if hasattr(self, name):
49  log.debug("setting %s", name)
50  value = child[0]
51  if name in ("args", "unsupported_platforms"):
52  setattr(self, name, [el.text for el in value.findall("text")])
53  elif name == "environment":
54  for el in value.findall("text"):
55  key, value = el.text.split("=", 1)
56  self.environment[key] = Template(value).safe_substitute(
57  self.environment
58  )
59  else:
60  data = value.text
61  if data is not None:
62  if value.tag == "integer":
63  data = int(data)
64  setattr(self, name, data)
65 
66  def ValidateOutput(self, stdout, stderr, result):
67  if self.validator:
68 
69  class CallWrapper(object):
70  """
71  Small wrapper class to dynamically bind some default arguments
72  to a callable.
73  """
74 
75  def __init__(self, callable, extra_args={}):
76  self.callable = callable
77  self.extra_args = extra_args
78  # get the list of names of positional arguments
79  from inspect import getargspec
80 
81  self.args_order = getargspec(callable)[0]
82  # Remove "self" from the list of positional arguments
83  # since it is added automatically
84  if self.args_order[0] == "self":
85  del self.args_order[0]
86 
87  def __call__(self, *args, **kwargs):
88  # Check which positional arguments are used
89  positional = self.args_order[: len(args)]
90 
91  kwargs = dict(kwargs) # copy the arguments dictionary
92  for a in self.extra_args:
93  # use "extra_args" for the arguments not specified as
94  # positional or keyword
95  if a not in positional and a not in kwargs:
96  kwargs[a] = self.extra_args[a]
97  return self.callable(*args, **kwargs)
98 
99  # local names to be exposed in the script
100  stdout_ref = self._expandReferenceFileName(self.reference)
101  stderr_ref = self._expandReferenceFileName(self.error_reference)
102  exported_symbols = {
103  "self": self,
104  "stdout": stdout,
105  "stderr": stderr,
106  "result": result,
107  "causes": self.causes,
108  "reference": stdout_ref,
109  "error_reference": stderr_ref,
110  "findReferenceBlock": CallWrapper(
111  self.findReferenceBlock,
112  {"stdout": stdout, "result": result, "causes": self.causes},
113  ),
114  "validateWithReference": CallWrapper(
116  {
117  "stdout": stdout,
118  "stderr": stderr,
119  "result": result,
120  "causes": self.causes,
121  },
122  ),
123  "validateJSONWithReference": CallWrapper(
125  {
126  "result": result,
127  "causes": self.causes,
128  },
129  ),
130  "countErrorLines": CallWrapper(
131  self.countErrorLines,
132  {"stdout": stdout, "result": result, "causes": self.causes},
133  ),
134  "checkTTreesSummaries": CallWrapper(
136  {"stdout": stdout, "result": result, "causes": self.causes},
137  ),
138  "checkHistosSummaries": CallWrapper(
140  {"stdout": stdout, "result": result, "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)
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:493
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:535
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:618
GaudiTesting.QMTTest.QMTTest
Definition: QMTTest.py:19
GaudiTesting.QMTTest.QMTTest.ValidateOutput
def ValidateOutput(self, stdout, stderr, result)
Definition: QMTTest.py:66
GaudiTesting.BaseTest.BaseTest.basedir
basedir
Definition: BaseTest.py:132
GaudiTesting.QMTTest.QMTTest.extra_args
extra_args
Definition: QMTTest.py:77
GaudiTesting.BaseTest.BaseTest.name
name
Definition: BaseTest.py:124
GaudiTesting.QMTTest.QMTTest.validator
validator
Definition: QMTTest.py:22
GaudiTesting.BaseTest.BaseTest._expandReferenceFileName
def _expandReferenceFileName(self, reffile)
Definition: BaseTest.py:672
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:346
GaudiTesting.QMTTest.QMTTest.callable
callable
Definition: QMTTest.py:76
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:447
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:403
GaudiTesting.BaseTest.BaseTest.error_reference
error_reference
Definition: BaseTest.py:112
GaudiTesting.QMTTest.QMTTest.XMLParser
def XMLParser(self, path)
Definition: QMTTest.py:26
GaudiTesting.QMTTest.QMTTest.args_order
args_order
Definition: QMTTest.py:81
GaudiTesting.QMTTest.QMTTest.__init__
def __init__(self, path=None)
Definition: QMTTest.py:20