◆ _new_backslashreplace_errors()
def GaudiTesting.BaseTest._new_backslashreplace_errors |
( |
|
exc | ) |
|
|
private |
Definition at line 37 of file BaseTest.py.
38 if isinstance(exc, UnicodeDecodeError):
39 code =
hex(ord(exc.object[exc.start]))
40 return (
"\\" + code[1:], exc.start + 1)
42 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 1281 of file BaseTest.py.
1283 Parse the TTree summary table in lines, starting from pos.
1284 Returns a tuple with the dictionary with the digested informations and the
1285 position of the first line after the summary.
1292 return [f.strip()
for f
in l.strip(
"*\n").split(
":", 2)]
1297 cols = splitcols(ll[0])
1301 r[
"Name"], r[
"Title"] = cols[1:]
1306 r[
"Title"] = ll[1].strip(
"*\n").split(
"|")[1].strip()
1310 cols = splitcols(ll[1 + delta_i])
1311 r[
"Entries"] = int(cols[1])
1313 sizes = cols[2].split()
1314 r[
"Total size"] = int(sizes[2])
1315 if sizes[-1] ==
"memory":
1318 r[
"File size"] = int(sizes[-1])
1320 cols = splitcols(ll[2 + delta_i])
1321 sizes = cols[2].split()
1322 if cols[0] ==
"Baskets":
1323 r[
"Baskets"] = int(cols[1])
1324 r[
"Basket size"] = int(sizes[2])
1325 r[
"Compression"] = float(sizes[-1])
1329 def nextblock(lines, i):
1331 dots = re.compile(
r"^\.+$")
1332 stars = re.compile(
r"^\*+$")
1336 and not dots.match(lines[i + delta_i][1:-1])
1337 and not stars.match(lines[i + delta_i])
1342 if i < (count - 3)
and lines[i].startswith(
"*Tree"):
1343 i_nextblock = nextblock(lines, i)
1344 result = parseblock(lines[i:i_nextblock])
1345 result[
"Branches"] = {}
1347 while i < (count - 3)
and lines[i].startswith(
"*Br"):
1348 if i < (count - 2)
and lines[i].startswith(
"*Branch "):
1352 i_nextblock = nextblock(lines, i)
1353 if i_nextblock >= count:
1355 branch = parseblock(lines[i:i_nextblock])
1356 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 1233 of file BaseTest.py.
1235 Check that all the keys in reference are in to_check too, with the same value.
1236 If the value is a dict, the function is called recursively. to_check can
1237 contain more keys than reference, that will not be tested.
1238 The function returns at the first difference found.
1243 ignore_re = re.compile(ignore)
1244 keys = [key
for key
in reference
if not ignore_re.match(key)]
1246 keys = reference.keys()
1250 if (
type(reference[k])
is dict)
and (
type(to_check[k])
is dict):
1253 failed = fail_keys =
cmpTreesDicts(reference[k], to_check[k], ignore)
1256 failed = to_check[k] != reference[k]
1261 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
73 if "WORKSPACE" in os.environ:
74 p = Popen([
"ps",
"-fH",
"-U", getuser()], stdout=PIPE)
75 with open(os.path.join(os.environ[
"WORKSPACE"], name),
"wb")
as f:
76 f.write(p.communicate()[0])
◆ findHistosSummaries()
def GaudiTesting.BaseTest.findHistosSummaries |
( |
|
stdout | ) |
|
Scan stdout to find ROOT TTree summaries and digest them.
Definition at line 1430 of file BaseTest.py.
1432 Scan stdout to find ROOT TTree summaries and digest them.
1434 outlines = stdout.splitlines()
1435 nlines = len(outlines) - 1
1443 match = h_count_re.search(outlines[pos])
1444 while pos < nlines
and not match:
1446 match = h_count_re.search(outlines[pos])
1449 summaries.update(summ)
◆ findTTreeSummaries()
def GaudiTesting.BaseTest.findTTreeSummaries |
( |
|
stdout | ) |
|
Scan stdout to find ROOT TTree summaries and digest them.
Definition at line 1211 of file BaseTest.py.
1213 Scan stdout to find ROOT TTree summaries and digest them.
1215 stars = re.compile(
r"^\*+$")
1216 outlines = stdout.splitlines()
1217 nlines = len(outlines)
1223 while i < nlines
and not stars.match(outlines[i]):
1228 trees[tree[
"Name"]] = tree
◆ getCmpFailingValues()
def GaudiTesting.BaseTest.getCmpFailingValues |
( |
|
reference, |
|
|
|
to_check, |
|
|
|
fail_path |
|
) |
| |
Definition at line 1266 of file BaseTest.py.
1272 if c
is None or r
is None:
1274 return (fail_path, r, c)
◆ GetPlatform()
def GaudiTesting.BaseTest.GetPlatform |
( |
|
self | ) |
|
Return the platform Id defined in CMTCONFIG or SCRAM_ARCH.
Definition at line 1453 of file BaseTest.py.
1455 Return the platform Id defined in CMTCONFIG or SCRAM_ARCH.
1459 if "BINARY_TAG" in os.environ:
1460 arch = os.environ[
"BINARY_TAG"]
1461 elif "CMTCONFIG" in os.environ:
1462 arch = os.environ[
"CMTCONFIG"]
1463 elif "SCRAM_ARCH" in os.environ:
1464 arch = os.environ[
"SCRAM_ARCH"]
1465 elif os.environ.get(
"ENV_CMAKE_BUILD_TYPE",
"")
in (
1471 elif os.environ.get(
"ENV_CMAKE_BUILD_TYPE",
"")
in (
◆ 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 1481 of file BaseTest.py.
1483 Return True if the current platform is Windows.
1485 This function was needed because of the change in the CMTCONFIG format,
1486 from win32_vc71_dbg to i686-winxp-vc9-dbg.
1489 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 79 of file BaseTest.py.
81 Send a signal to a process and all its child processes (starting from the
84 log = logging.getLogger(
"kill_tree")
85 ps_cmd = [
"ps",
"--no-headers",
"-o",
"pid",
"--ppid", str(ppid)]
88 get_children = Popen(ps_cmd, stdout=PIPE, stderr=PIPE, env={})
89 children =
map(int, get_children.communicate()[0].split())
90 for child
in children:
93 log.debug(
"killing process %d", ppid)
95 except OSError
as err:
98 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 1362 of file BaseTest.py.
1364 Extract the histograms infos from the lines starting at pos.
1365 Returns the position of the first line after the summary block.
1368 h_table_head = re.compile(
1369 r'SUCCESS\s+(1D|2D|3D|1D profile|2D profile) histograms in directory\s+"(\w*)"'
1371 h_short_summ = re.compile(
r"ID=([^\"]+)\s+\"([^\"]+)\"\s+(.*)")
1376 m = h_count_re.search(lines[pos])
1377 name = m.group(1).strip()
1378 total = int(m.group(2))
1380 for k, v
in [x.split(
"=")
for x
in m.group(3).split()]:
1383 header[
"Total"] = total
1387 m = h_table_head.search(lines[pos])
1390 t = t.replace(
" profile",
"Prof")
1397 if l.startswith(
" | ID"):
1399 titles = [x.strip()
for x
in l.split(
"|")][1:]
1401 while pos < nlines
and lines[pos].startswith(
" |"):
1403 values = [x.strip()
for x
in l.split(
"|")][1:]
1405 for i
in range(len(titles)):
1406 hcont[titles[i]] = values[i]
1407 cont[hcont[
"ID"]] = hcont
1409 elif l.startswith(
" ID="):
1410 while pos < nlines
and lines[pos].startswith(
" ID="):
1412 x.strip()
for x
in h_short_summ.search(lines[pos]).groups()
1414 cont[values[0]] = values
1417 raise RuntimeError(
"Cannot understand line %d: '%s'" % (pos, l))
1421 summ[d][
"header"] = header
1426 summ[name] = {
"header": header}
◆ RationalizePath()
def GaudiTesting.BaseTest.RationalizePath |
( |
|
p | ) |
|
Function used to normalize the used path
Definition at line 735 of file BaseTest.py.
737 Function used to normalize the used path
739 newPath = os.path.normpath(os.path.expandvars(p))
740 if os.path.exists(newPath):
741 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 52 of file BaseTest.py.
54 Take a string with invalid ASCII/UTF characters and quote them so that the
55 string can be used in an XML text.
57 >>> sanitize_for_xml('this is \x1b')
58 'this is [NON-XML-CHAR-0x1B]'
60 bad_chars = re.compile(
"[\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 745 of file BaseTest.py.
745 def which(executable):
747 Locates an executable in the executables path ($PATH) and returns the full
748 path to it. An application is looked for with or without the '.exe' suffix.
749 If the executable cannot be found, None is returned
751 if os.path.isabs(executable):
752 if not os.path.isfile(executable):
753 if executable.endswith(
".exe"):
754 if os.path.isfile(executable[:-4]):
755 return executable[:-4]
757 executable = os.path.split(executable)[1]
760 for d
in os.environ.get(
"PATH").split(os.pathsep):
761 fullpath = os.path.join(d, executable)
762 if os.path.isfile(fullpath):
764 elif executable.endswith(
".exe")
and os.path.isfile(fullpath[:-4]):
◆ __processLine__
GaudiTesting.BaseTest.__processLine__ |
|
private |
◆ h_count_re
GaudiTesting.BaseTest.h_count_re |
◆ lineSkipper
GaudiTesting.BaseTest.lineSkipper |
◆ maskPointers
GaudiTesting.BaseTest.maskPointers |
◆ normalizeDate
GaudiTesting.BaseTest.normalizeDate |
◆ normalizeEOL
GaudiTesting.BaseTest.normalizeEOL |
◆ normalizeExamples
GaudiTesting.BaseTest.normalizeExamples |
◆ regexps
list GaudiTesting.BaseTest.regexps |
◆ SKIP_RETURN_CODE
GaudiTesting.BaseTest.SKIP_RETURN_CODE |
◆ skipEmptyLines
GaudiTesting.BaseTest.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.