◆ _new_backslashreplace_errors()
def GaudiTesting.BaseTest._new_backslashreplace_errors |
( |
|
exc | ) |
|
|
private |
Definition at line 38 of file BaseTest.py.
39 if isinstance(exc, UnicodeDecodeError):
40 code =
hex(ord(exc.object[exc.start]))
41 return (
u'\\' + code[1:], exc.start + 1)
43 return backslashreplace_errors(exc)
◆ _parseTTreeSummary()
def GaudiTesting.BaseTest._parseTTreeSummary |
( |
|
lines, |
|
|
|
pos |
|
) |
| |
|
private |
Parse the TTree summary table in lines, starting from pos.
Returns a tuple with the dictionary with the digested informations and the
position of the first line after the summary.
Definition at line 1191 of file BaseTest.py.
1193 Parse the TTree summary table in lines, starting from pos.
1194 Returns a tuple with the dictionary with the digested informations and the
1195 position of the first line after the summary.
1202 return [f.strip()
for f
in l.strip(
"*\n").split(
':', 2)]
1206 cols = splitcols(ll[0])
1207 r[
"Name"], r[
"Title"] = cols[1:]
1209 cols = splitcols(ll[1])
1210 r[
"Entries"] = int(cols[1])
1212 sizes = cols[2].split()
1213 r[
"Total size"] = int(sizes[2])
1214 if sizes[-1] ==
"memory":
1217 r[
"File size"] = int(sizes[-1])
1219 cols = splitcols(ll[2])
1220 sizes = cols[2].split()
1221 if cols[0] ==
"Baskets":
1222 r[
"Baskets"] = int(cols[1])
1223 r[
"Basket size"] = int(sizes[2])
1224 r[
"Compression"] = float(sizes[-1])
1227 if i < (count - 3)
and lines[i].startswith(
"*Tree"):
1228 result = parseblock(lines[i:i + 3])
1229 result[
"Branches"] = {}
1231 while i < (count - 3)
and lines[i].startswith(
"*Br"):
1232 if i < (count - 2)
and lines[i].startswith(
"*Branch "):
1236 branch = parseblock(lines[i:i + 3])
1237 result[
"Branches"][branch[
"Name"]] = branch
◆ cmpTreesDicts()
def GaudiTesting.BaseTest.cmpTreesDicts |
( |
|
reference, |
|
|
|
to_check, |
|
|
|
ignore = None |
|
) |
| |
Check that all the keys in reference are in to_check too, with the same value.
If the value is a dict, the function is called recursively. to_check can
contain more keys than reference, that will not be tested.
The function returns at the first difference found.
Definition at line 1141 of file BaseTest.py.
1143 Check that all the keys in reference are in to_check too, with the same value.
1144 If the value is a dict, the function is called recursively. to_check can
1145 contain more keys than reference, that will not be tested.
1146 The function returns at the first difference found.
1151 ignore_re = re.compile(ignore)
1152 keys = [key
for key
in reference
if not ignore_re.match(key)]
1154 keys = reference.keys()
1158 if (
type(reference[k])
is dict)
and (
type(to_check[k])
is dict):
1161 failed = fail_keys =
cmpTreesDicts(reference[k], to_check[k],
1165 failed = to_check[k] != reference[k]
1170 fail_keys.insert(0, k)
◆ dumpProcs()
def GaudiTesting.BaseTest.dumpProcs |
( |
|
name | ) |
|
helper to debug GAUDI-1084, dump the list of processes
Definition at line 69 of file BaseTest.py.
70 '''helper to debug GAUDI-1084, dump the list of processes'''
71 from getpass
import getuser
72 if 'WORKSPACE' in os.environ:
73 p = Popen([
'ps',
'-fH',
'-U', getuser()], stdout=PIPE)
74 with open(os.path.join(os.environ[
'WORKSPACE'], name),
'wb')
as f:
75 f.write(p.communicate()[0])
◆ findHistosSummaries()
def GaudiTesting.BaseTest.findHistosSummaries |
( |
|
stdout | ) |
|
Scan stdout to find ROOT TTree summaries and digest them.
Definition at line 1313 of file BaseTest.py.
1315 Scan stdout to find ROOT TTree summaries and digest them.
1317 outlines = stdout.splitlines()
1318 nlines = len(outlines) - 1
1326 match = h_count_re.search(outlines[pos])
1327 while pos < nlines
and not match:
1329 match = h_count_re.search(outlines[pos])
1332 summaries.update(summ)
◆ findTTreeSummaries()
def GaudiTesting.BaseTest.findTTreeSummaries |
( |
|
stdout | ) |
|
Scan stdout to find ROOT TTree summaries and digest them.
Definition at line 1119 of file BaseTest.py.
1121 Scan stdout to find ROOT TTree summaries and digest them.
1123 stars = re.compile(
r"^\*+$")
1124 outlines = stdout.splitlines()
1125 nlines = len(outlines)
1131 while i < nlines
and not stars.match(outlines[i]):
1136 trees[tree[
"Name"]] = tree
◆ getCmpFailingValues()
def GaudiTesting.BaseTest.getCmpFailingValues |
( |
|
reference, |
|
|
|
to_check, |
|
|
|
fail_path |
|
) |
| |
Definition at line 1175 of file BaseTest.py.
1181 if c
is None or r
is None:
1183 return (fail_path, r, c)
◆ GetPlatform()
def GaudiTesting.BaseTest.GetPlatform |
( |
|
self | ) |
|
Return the platform Id defined in CMTCONFIG or SCRAM_ARCH.
Definition at line 1336 of file BaseTest.py.
1338 Return the platform Id defined in CMTCONFIG or SCRAM_ARCH.
1342 if "BINARY_TAG" in os.environ:
1343 arch = os.environ[
"BINARY_TAG"]
1344 elif "CMTCONFIG" in os.environ:
1345 arch = os.environ[
"CMTCONFIG"]
1346 elif "SCRAM_ARCH" in os.environ:
1347 arch = os.environ[
"SCRAM_ARCH"]
1348 elif os.environ.get(
"ENV_CMAKE_BUILD_TYPE",
"")
in (
"Debug",
"FastDebug",
1351 elif os.environ.get(
"ENV_CMAKE_BUILD_TYPE",
1352 "")
in (
"Release",
"MinSizeRel",
"RelWithDebInfo",
◆ isWinPlatform()
def GaudiTesting.BaseTest.isWinPlatform |
( |
|
self | ) |
|
Return True if the current platform is Windows.
This function was needed because of the change in the CMTCONFIG format,
from win32_vc71_dbg to i686-winxp-vc9-dbg.
Definition at line 1358 of file BaseTest.py.
1360 Return True if the current platform is Windows.
1362 This function was needed because of the change in the CMTCONFIG format,
1363 from win32_vc71_dbg to i686-winxp-vc9-dbg.
1366 return "winxp" in platform
or platform.startswith(
"win")
◆ kill_tree()
def GaudiTesting.BaseTest.kill_tree |
( |
|
ppid, |
|
|
|
sig |
|
) |
| |
Send a signal to a process and all its child processes (starting from the
leaves).
Definition at line 78 of file BaseTest.py.
80 Send a signal to a process and all its child processes (starting from the
83 log = logging.getLogger(
'kill_tree')
84 ps_cmd = [
'ps',
'--no-headers',
'-o',
'pid',
'--ppid', str(ppid)]
85 get_children = Popen(ps_cmd, stdout=PIPE, stderr=PIPE)
86 children =
map(int, get_children.communicate()[0].split())
87 for child
in children:
90 log.debug(
'killing process %d', ppid)
92 except OSError
as err:
95 log.debug(
'no such process %d', ppid)
◆ parseHistosSummary()
def GaudiTesting.BaseTest.parseHistosSummary |
( |
|
lines, |
|
|
|
pos |
|
) |
| |
Extract the histograms infos from the lines starting at pos.
Returns the position of the first line after the summary block.
Definition at line 1243 of file BaseTest.py.
1245 Extract the histograms infos from the lines starting at pos.
1246 Returns the position of the first line after the summary block.
1249 h_table_head = re.compile(
1250 r'SUCCESS\s+(1D|2D|3D|1D profile|2D profile) histograms in directory\s+"(\w*)"'
1252 h_short_summ = re.compile(
r"ID=([^\"]+)\s+\"([^\"]+)\"\s+(.*)")
1257 m = h_count_re.search(lines[pos])
1258 name = m.group(1).strip()
1259 total = int(m.group(2))
1261 for k, v
in [x.split(
"=")
for x
in m.group(3).split()]:
1264 header[
"Total"] = total
1268 m = h_table_head.search(lines[pos])
1271 t = t.replace(
" profile",
"Prof")
1278 if l.startswith(
" | ID"):
1280 titles = [x.strip()
for x
in l.split(
"|")][1:]
1282 while pos < nlines
and lines[pos].startswith(
" |"):
1284 values = [x.strip()
for x
in l.split(
"|")][1:]
1286 for i
in range(len(titles)):
1287 hcont[titles[i]] = values[i]
1288 cont[hcont[
"ID"]] = hcont
1290 elif l.startswith(
" ID="):
1291 while pos < nlines
and lines[pos].startswith(
" ID="):
1294 for x
in h_short_summ.search(lines[pos]).groups()
1296 cont[values[0]] = values
1300 "Cannot understand line %d: '%s'" % (pos, l))
1304 summ[d][
"header"] = header
1309 summ[name] = {
"header": header}
◆ RationalizePath()
def GaudiTesting.BaseTest.RationalizePath |
( |
|
p | ) |
|
Function used to normalize the used path
Definition at line 664 of file BaseTest.py.
666 Function used to normalize the used path
668 newPath = os.path.normpath(os.path.expandvars(p))
669 if os.path.exists(newPath):
670 p = os.path.realpath(newPath)
◆ ROOT6WorkAroundEnabled()
def GaudiTesting.BaseTest.ROOT6WorkAroundEnabled |
( |
|
id = None | ) |
|
◆ sanitize_for_xml()
def GaudiTesting.BaseTest.sanitize_for_xml |
( |
|
data | ) |
|
Take a string with invalid ASCII/UTF characters and quote them so that the
string can be used in an XML text.
>>> sanitize_for_xml('this is \x1b')
'this is [NON-XML-CHAR-0x1B]'
Definition at line 51 of file BaseTest.py.
53 Take a string with invalid ASCII/UTF characters and quote them so that the
54 string can be used in an XML text.
56 >>> sanitize_for_xml('this is \x1b')
57 'this is [NON-XML-CHAR-0x1B]'
59 bad_chars = re.compile(
60 u'[\x00-\x08\x0b\x0c\x0e-\x1F\uD800-\uDFFF\uFFFE\uFFFF]')
64 return ''.join(
'[NON-XML-CHAR-0x%2X]' % ord(c)
for c
in match.group())
66 return bad_chars.sub(quote, data)
◆ which()
def GaudiTesting.BaseTest.which |
( |
|
executable | ) |
|
Locates an executable in the executables path ($PATH) and returns the full
path to it. An application is looked for with or without the '.exe' suffix.
If the executable cannot be found, None is returned
Definition at line 674 of file BaseTest.py.
674 def which(executable):
676 Locates an executable in the executables path ($PATH) and returns the full
677 path to it. An application is looked for with or without the '.exe' suffix.
678 If the executable cannot be found, None is returned
680 if os.path.isabs(executable):
681 if not os.path.isfile(executable):
682 if executable.endswith(
'.exe'):
683 if os.path.isfile(executable[:-4]):
684 return executable[:-4]
686 executable = os.path.split(executable)[1]
689 for d
in os.environ.get(
"PATH").split(os.pathsep):
690 fullpath = os.path.join(d, executable)
691 if os.path.isfile(fullpath):
693 elif executable.endswith(
'.exe')
and os.path.isfile(fullpath[:-4]):
◆ __processLine__
GaudiTesting.BaseTest.__processLine__ |
|
private |
◆ h_count_re
GaudiTesting.BaseTest.h_count_re |
Initial value:
2 r"^(.*)SUCCESS\s+Booked (\d+) Histogram\(s\) :\s+([\s\w=-]*)")
Definition at line 1187 of file BaseTest.py.
◆ lineSkipper
GaudiTesting.BaseTest.lineSkipper |
◆ maskPointers
GaudiTesting.BaseTest.maskPointers = RegexpReplacer("0x[0-9a-fA-F]{4,16}", "0x########") |
◆ normalizeDate
GaudiTesting.BaseTest.normalizeDate |
Initial value:
2 "[0-2]?[0-9]:[0-5][0-9]:[0-5][0-9] [0-9]{4}[-/][01][0-9][-/][0-3][0-9][ A-Z]*",
Definition at line 896 of file BaseTest.py.
◆ normalizeEOL
◆ normalizeExamples
◆ regexps
GaudiTesting.BaseTest.regexps |
◆ skipEmptyLines
MsgStream & hex(MsgStream &log)
def _parseTTreeSummary(lines, pos)
def sanitize_for_xml(data)
def getCmpFailingValues(reference, to_check, fail_path)
def _new_backslashreplace_errors(exc)
struct GAUDI_API map
Parametrisation class for map-like implementation.
def parseHistosSummary(lines, pos)
def cmpTreesDicts(reference, to_check, ignore=None)
def findHistosSummaries(stdout)
def findTTreeSummaries(stdout)
def ROOT6WorkAroundEnabled(id=None)
decltype(auto) range(Args &&... args)
Zips multiple containers together to form a single range.