◆ _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 1196 of file BaseTest.py.
1198 Parse the TTree summary table in lines, starting from pos.
1199 Returns a tuple with the dictionary with the digested informations and the
1200 position of the first line after the summary.
1207 return [f.strip()
for f
in l.strip(
"*\n").split(
':', 2)]
1211 cols = splitcols(ll[0])
1212 r[
"Name"], r[
"Title"] = cols[1:]
1214 cols = splitcols(ll[1])
1215 r[
"Entries"] = int(cols[1])
1217 sizes = cols[2].split()
1218 r[
"Total size"] = int(sizes[2])
1219 if sizes[-1] ==
"memory":
1222 r[
"File size"] = int(sizes[-1])
1224 cols = splitcols(ll[2])
1225 sizes = cols[2].split()
1226 if cols[0] ==
"Baskets":
1227 r[
"Baskets"] = int(cols[1])
1228 r[
"Basket size"] = int(sizes[2])
1229 r[
"Compression"] = float(sizes[-1])
1232 if i < (count - 3)
and lines[i].startswith(
"*Tree"):
1233 result = parseblock(lines[i:i + 3])
1234 result[
"Branches"] = {}
1236 while i < (count - 3)
and lines[i].startswith(
"*Br"):
1237 if i < (count - 2)
and lines[i].startswith(
"*Branch "):
1241 branch = parseblock(lines[i:i + 3])
1242 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 1146 of file BaseTest.py.
1148 Check that all the keys in reference are in to_check too, with the same value.
1149 If the value is a dict, the function is called recursively. to_check can
1150 contain more keys than reference, that will not be tested.
1151 The function returns at the first difference found.
1156 ignore_re = re.compile(ignore)
1157 keys = [key
for key
in reference
if not ignore_re.match(key)]
1159 keys = reference.keys()
1163 if (
type(reference[k])
is dict)
and (
type(to_check[k])
is dict):
1166 failed = fail_keys =
cmpTreesDicts(reference[k], to_check[k],
1170 failed = to_check[k] != reference[k]
1175 fail_keys.insert(0, k)
◆ dumpProcs()
| def GaudiTesting.BaseTest.dumpProcs |
( |
|
name | ) |
|
helper to debug GAUDI-1084, dump the list of processes
Definition at line 71 of file BaseTest.py.
72 '''helper to debug GAUDI-1084, dump the list of processes'''
73 from getpass
import getuser
74 if 'WORKSPACE' in os.environ:
75 p = Popen([
'ps',
'-fH',
'-U', getuser()], stdout=PIPE)
76 with open(os.path.join(os.environ[
'WORKSPACE'], name),
'wb')
as f:
77 f.write(p.communicate()[0])
◆ findHistosSummaries()
| def GaudiTesting.BaseTest.findHistosSummaries |
( |
|
stdout | ) |
|
Scan stdout to find ROOT TTree summaries and digest them.
Definition at line 1318 of file BaseTest.py.
1320 Scan stdout to find ROOT TTree summaries and digest them.
1322 outlines = stdout.splitlines()
1323 nlines = len(outlines) - 1
1331 match = h_count_re.search(outlines[pos])
1332 while pos < nlines
and not match:
1334 match = h_count_re.search(outlines[pos])
1337 summaries.update(summ)
◆ findTTreeSummaries()
| def GaudiTesting.BaseTest.findTTreeSummaries |
( |
|
stdout | ) |
|
Scan stdout to find ROOT TTree summaries and digest them.
Definition at line 1124 of file BaseTest.py.
1126 Scan stdout to find ROOT TTree summaries and digest them.
1128 stars = re.compile(
r"^\*+$")
1129 outlines = stdout.splitlines()
1130 nlines = len(outlines)
1136 while i < nlines
and not stars.match(outlines[i]):
1141 trees[tree[
"Name"]] = tree
◆ getCmpFailingValues()
| def GaudiTesting.BaseTest.getCmpFailingValues |
( |
|
reference, |
|
|
|
to_check, |
|
|
|
fail_path |
|
) |
| |
Definition at line 1180 of file BaseTest.py.
1186 if c
is None or r
is None:
1188 return (fail_path, r, c)
◆ GetPlatform()
| def GaudiTesting.BaseTest.GetPlatform |
( |
|
self | ) |
|
Return the platform Id defined in CMTCONFIG or SCRAM_ARCH.
Definition at line 1341 of file BaseTest.py.
1343 Return the platform Id defined in CMTCONFIG or SCRAM_ARCH.
1347 if "BINARY_TAG" in os.environ:
1348 arch = os.environ[
"BINARY_TAG"]
1349 elif "CMTCONFIG" in os.environ:
1350 arch = os.environ[
"CMTCONFIG"]
1351 elif "SCRAM_ARCH" in os.environ:
1352 arch = os.environ[
"SCRAM_ARCH"]
1353 elif os.environ.get(
"ENV_CMAKE_BUILD_TYPE",
"")
in (
"Debug",
"FastDebug",
1356 elif os.environ.get(
"ENV_CMAKE_BUILD_TYPE",
1357 "")
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 1363 of file BaseTest.py.
1365 Return True if the current platform is Windows.
1367 This function was needed because of the change in the CMTCONFIG format,
1368 from win32_vc71_dbg to i686-winxp-vc9-dbg.
1371 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 80 of file BaseTest.py.
82 Send a signal to a process and all its child processes (starting from the
85 log = logging.getLogger(
'kill_tree')
86 ps_cmd = [
'ps',
'--no-headers',
'-o',
'pid',
'--ppid', str(ppid)]
87 get_children = Popen(ps_cmd, stdout=PIPE, stderr=PIPE)
88 children =
map(int, get_children.communicate()[0].split())
89 for child
in children:
92 log.debug(
'killing process %d', ppid)
94 except OSError
as err:
97 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 1248 of file BaseTest.py.
1250 Extract the histograms infos from the lines starting at pos.
1251 Returns the position of the first line after the summary block.
1254 h_table_head = re.compile(
1255 r'SUCCESS\s+(1D|2D|3D|1D profile|2D profile) histograms in directory\s+"(\w*)"'
1257 h_short_summ = re.compile(
r"ID=([^\"]+)\s+\"([^\"]+)\"\s+(.*)")
1262 m = h_count_re.search(lines[pos])
1263 name = m.group(1).strip()
1264 total = int(m.group(2))
1266 for k, v
in [x.split(
"=")
for x
in m.group(3).split()]:
1269 header[
"Total"] = total
1273 m = h_table_head.search(lines[pos])
1276 t = t.replace(
" profile",
"Prof")
1283 if l.startswith(
" | ID"):
1285 titles = [x.strip()
for x
in l.split(
"|")][1:]
1287 while pos < nlines
and lines[pos].startswith(
" |"):
1289 values = [x.strip()
for x
in l.split(
"|")][1:]
1291 for i
in range(len(titles)):
1292 hcont[titles[i]] = values[i]
1293 cont[hcont[
"ID"]] = hcont
1295 elif l.startswith(
" ID="):
1296 while pos < nlines
and lines[pos].startswith(
" ID="):
1299 for x
in h_short_summ.search(lines[pos]).groups()
1301 cont[values[0]] = values
1305 "Cannot understand line %d: '%s'" % (pos, l))
1309 summ[d][
"header"] = header
1314 summ[name] = {
"header": header}
◆ RationalizePath()
| def GaudiTesting.BaseTest.RationalizePath |
( |
|
p | ) |
|
Function used to normalize the used path
Definition at line 669 of file BaseTest.py.
671 Function used to normalize the used path
673 newPath = os.path.normpath(os.path.expandvars(p))
674 if os.path.exists(newPath):
675 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 53 of file BaseTest.py.
55 Take a string with invalid ASCII/UTF characters and quote them so that the
56 string can be used in an XML text.
58 >>> sanitize_for_xml('this is \x1b')
59 'this is [NON-XML-CHAR-0x1B]'
61 bad_chars = re.compile(
62 u'[\x00-\x08\x0b\x0c\x0e-\x1F\uD800-\uDFFF\uFFFE\uFFFF]')
66 return ''.join(
'[NON-XML-CHAR-0x%2X]' % ord(c)
for c
in match.group())
68 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 679 of file BaseTest.py.
679 def which(executable):
681 Locates an executable in the executables path ($PATH) and returns the full
682 path to it. An application is looked for with or without the '.exe' suffix.
683 If the executable cannot be found, None is returned
685 if os.path.isabs(executable):
686 if not os.path.isfile(executable):
687 if executable.endswith(
'.exe'):
688 if os.path.isfile(executable[:-4]):
689 return executable[:-4]
691 executable = os.path.split(executable)[1]
694 for d
in os.environ.get(
"PATH").split(os.pathsep):
695 fullpath = os.path.join(d, executable)
696 if os.path.isfile(fullpath):
698 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 1192 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 901 of file BaseTest.py.
◆ normalizeEOL
◆ normalizeExamples
◆ regexps
| GaudiTesting.BaseTest.regexps |
◆ SKIP_RETURN_CODE
| int GaudiTesting.BaseTest.SKIP_RETURN_CODE = 77 |
◆ 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.