◆ _new_backslashreplace_errors()
def GaudiTesting.BaseTest._new_backslashreplace_errors |
( |
|
exc | ) |
|
|
private |
Definition at line 32 of file BaseTest.py.
33 if isinstance(exc, UnicodeDecodeError):
34 code =
hex(ord(exc.object[exc.start]))
35 return (
"\\" + code[1:], exc.start + 1)
37 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 1337 of file BaseTest.py.
1339 Parse the TTree summary table in lines, starting from pos.
1340 Returns a tuple with the dictionary with the digested informations and the
1341 position of the first line after the summary.
1348 return [f.strip()
for f
in l.strip(
"*\n").split(
":", 2)]
1353 cols = splitcols(ll[0])
1357 r[
"Name"], r[
"Title"] = cols[1:]
1362 r[
"Title"] = ll[1].strip(
"*\n").split(
"|")[1].strip()
1366 cols = splitcols(ll[1 + delta_i])
1367 r[
"Entries"] = int(cols[1])
1369 sizes = cols[2].split()
1370 r[
"Total size"] = int(sizes[2])
1371 if sizes[-1] ==
"memory":
1374 r[
"File size"] = int(sizes[-1])
1376 cols = splitcols(ll[2 + delta_i])
1377 sizes = cols[2].split()
1378 if cols[0] ==
"Baskets":
1379 r[
"Baskets"] = int(cols[1])
1380 r[
"Basket size"] = int(sizes[2])
1381 r[
"Compression"] = float(sizes[-1])
1385 def nextblock(lines, i):
1387 dots = re.compile(
r"^\.+$")
1388 stars = re.compile(
r"^\*+$")
1392 and not dots.match(lines[i + delta_i][1:-1])
1393 and not stars.match(lines[i + delta_i])
1398 if i < (count - 3)
and lines[i].startswith(
"*Tree"):
1399 i_nextblock = nextblock(lines, i)
1400 result = parseblock(lines[i:i_nextblock])
1401 result[
"Branches"] = {}
1403 while i < (count - 3)
and lines[i].startswith(
"*Br"):
1404 if i < (count - 2)
and lines[i].startswith(
"*Branch "):
1408 i_nextblock = nextblock(lines, i)
1409 if i_nextblock >= count:
1411 branch = parseblock(lines[i:i_nextblock])
1412 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 1289 of file BaseTest.py.
1291 Check that all the keys in reference are in to_check too, with the same value.
1292 If the value is a dict, the function is called recursively. to_check can
1293 contain more keys than reference, that will not be tested.
1294 The function returns at the first difference found.
1299 ignore_re = re.compile(ignore)
1300 keys = [key
for key
in reference
if not ignore_re.match(key)]
1302 keys = reference.keys()
1306 if isinstance(reference[k], dict)
and isinstance(to_check[k], dict):
1309 failed = fail_keys =
cmpTreesDicts(reference[k], to_check[k], ignore)
1312 failed = to_check[k] != reference[k]
1317 fail_keys.insert(0, k)
◆ dumpProcs()
def GaudiTesting.BaseTest.dumpProcs |
( |
|
name | ) |
|
helper to debug GAUDI-1084, dump the list of processes
Definition at line 67 of file BaseTest.py.
68 """helper to debug GAUDI-1084, dump the list of processes"""
69 from getpass
import getuser
71 if "WORKSPACE" in os.environ:
72 p = Popen([
"ps",
"-fH",
"-U", getuser()], stdout=PIPE)
73 with open(os.path.join(os.environ[
"WORKSPACE"], name),
"wb")
as f:
74 f.write(p.communicate()[0])
◆ findHistosSummaries()
def GaudiTesting.BaseTest.findHistosSummaries |
( |
|
stdout | ) |
|
Scan stdout to find ROOT TTree summaries and digest them.
Definition at line 1486 of file BaseTest.py.
1488 Scan stdout to find ROOT TTree summaries and digest them.
1490 outlines = stdout.splitlines()
1491 nlines = len(outlines) - 1
1499 match = h_count_re.search(outlines[pos])
1500 while pos < nlines
and not match:
1502 match = h_count_re.search(outlines[pos])
1505 summaries.update(summ)
◆ findTTreeSummaries()
def GaudiTesting.BaseTest.findTTreeSummaries |
( |
|
stdout | ) |
|
Scan stdout to find ROOT TTree summaries and digest them.
Definition at line 1267 of file BaseTest.py.
1269 Scan stdout to find ROOT TTree summaries and digest them.
1271 stars = re.compile(
r"^\*+$")
1272 outlines = stdout.splitlines()
1273 nlines = len(outlines)
1279 while i < nlines
and not stars.match(outlines[i]):
1284 trees[tree[
"Name"]] = tree
◆ getCmpFailingValues()
def GaudiTesting.BaseTest.getCmpFailingValues |
( |
|
reference, |
|
|
|
to_check, |
|
|
|
fail_path |
|
) |
| |
Definition at line 1322 of file BaseTest.py.
1328 if c
is None or r
is None:
1330 return (fail_path, r, c)
◆ GetPlatform()
def GaudiTesting.BaseTest.GetPlatform |
( |
|
self | ) |
|
Return the platform Id defined in CMTCONFIG or SCRAM_ARCH.
Definition at line 1509 of file BaseTest.py.
1511 Return the platform Id defined in CMTCONFIG or SCRAM_ARCH.
1515 if "BINARY_TAG" in os.environ:
1516 arch = os.environ[
"BINARY_TAG"]
1517 elif "CMTCONFIG" in os.environ:
1518 arch = os.environ[
"CMTCONFIG"]
1519 elif "SCRAM_ARCH" in os.environ:
1520 arch = os.environ[
"SCRAM_ARCH"]
1521 elif os.environ.get(
"ENV_CMAKE_BUILD_TYPE",
"")
in (
1527 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 1537 of file BaseTest.py.
1539 Return True if the current platform is Windows.
1541 This function was needed because of the change in the CMTCONFIG format,
1542 from win32_vc71_dbg to i686-winxp-vc9-dbg.
1545 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 77 of file BaseTest.py.
79 Send a signal to a process and all its child processes (starting from the
82 log = logging.getLogger(
"kill_tree")
83 ps_cmd = [
"ps",
"--no-headers",
"-o",
"pid",
"--ppid", str(ppid)]
86 get_children = Popen(ps_cmd, stdout=PIPE, stderr=PIPE, env={})
87 children =
map(int, get_children.communicate()[0].split())
88 for child
in children:
91 log.debug(
"killing process %d", ppid)
93 except OSError
as err:
96 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 1418 of file BaseTest.py.
1420 Extract the histograms infos from the lines starting at pos.
1421 Returns the position of the first line after the summary block.
1424 h_table_head = re.compile(
1425 r'SUCCESS\s+(1D|2D|3D|1D profile|2D profile) histograms in directory\s+"(\w*)"'
1427 h_short_summ = re.compile(
r"ID=([^\"]+)\s+\"([^\"]+)\"\s+(.*)")
1432 m = h_count_re.search(lines[pos])
1433 name = m.group(1).strip()
1434 total = int(m.group(2))
1436 for k, v
in [x.split(
"=")
for x
in m.group(3).split()]:
1439 header[
"Total"] = total
1443 m = h_table_head.search(lines[pos])
1446 t = t.replace(
" profile",
"Prof")
1453 if l.startswith(
" | ID"):
1455 titles = [x.strip()
for x
in l.split(
"|")][1:]
1457 while pos < nlines
and lines[pos].startswith(
" |"):
1459 values = [x.strip()
for x
in l.split(
"|")][1:]
1461 for i
in range(len(titles)):
1462 hcont[titles[i]] = values[i]
1463 cont[hcont[
"ID"]] = hcont
1465 elif l.startswith(
" ID="):
1466 while pos < nlines
and lines[pos].startswith(
" ID="):
1468 x.strip()
for x
in h_short_summ.search(lines[pos]).groups()
1470 cont[values[0]] = values
1473 raise RuntimeError(
"Cannot understand line %d: '%s'" % (pos, l))
1477 summ[d][
"header"] = header
1482 summ[name] = {
"header": header}
◆ RationalizePath()
def GaudiTesting.BaseTest.RationalizePath |
( |
|
p | ) |
|
Function used to normalize the used path
Definition at line 777 of file BaseTest.py.
779 Function used to normalize the used path
781 newPath = os.path.normpath(os.path.expandvars(p))
782 if os.path.exists(newPath):
783 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 50 of file BaseTest.py.
52 Take a string with invalid ASCII/UTF characters and quote them so that the
53 string can be used in an XML text.
55 >>> sanitize_for_xml('this is \x1b')
56 'this is [NON-XML-CHAR-0x1B]'
58 bad_chars = re.compile(
"[\x00-\x08\x0b\x0c\x0e-\x1f\ud800-\udfff\ufffe\uffff]")
62 return "".join(
"[NON-XML-CHAR-0x%2X]" % ord(c)
for c
in match.group())
64 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 787 of file BaseTest.py.
787 def which(executable):
789 Locates an executable in the executables path ($PATH) and returns the full
790 path to it. An application is looked for with or without the '.exe' suffix.
791 If the executable cannot be found, None is returned
793 if os.path.isabs(executable):
794 if not os.path.isfile(executable):
795 if executable.endswith(
".exe"):
796 if os.path.isfile(executable[:-4]):
797 return executable[:-4]
799 executable = os.path.split(executable)[1]
802 for d
in os.environ.get(
"PATH").split(os.pathsep):
803 fullpath = os.path.join(d, executable)
804 if os.path.isfile(fullpath):
806 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 |
◆ normalizeTestSuite
GaudiTesting.BaseTest.normalizeTestSuite |
◆ OUTPUT_LIMIT
GaudiTesting.BaseTest.OUTPUT_LIMIT |
◆ 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.