◆ _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 1284 of file BaseTest.py.
1286 Parse the TTree summary table in lines, starting from pos.
1287 Returns a tuple with the dictionary with the digested informations and the
1288 position of the first line after the summary.
1295 return [f.strip()
for f
in l.strip(
"*\n").split(
":", 2)]
1299 cols = splitcols(ll[0])
1300 r[
"Name"], r[
"Title"] = cols[1:]
1302 cols = splitcols(ll[1])
1303 r[
"Entries"] = int(cols[1])
1305 sizes = cols[2].split()
1306 r[
"Total size"] = int(sizes[2])
1307 if sizes[-1] ==
"memory":
1310 r[
"File size"] = int(sizes[-1])
1312 cols = splitcols(ll[2])
1313 sizes = cols[2].split()
1314 if cols[0] ==
"Baskets":
1315 r[
"Baskets"] = int(cols[1])
1316 r[
"Basket size"] = int(sizes[2])
1317 r[
"Compression"] = float(sizes[-1])
1320 if i < (count - 3)
and lines[i].startswith(
"*Tree"):
1321 result = parseblock(lines[i : i + 3])
1322 result[
"Branches"] = {}
1324 while i < (count - 3)
and lines[i].startswith(
"*Br"):
1325 if i < (count - 2)
and lines[i].startswith(
"*Branch "):
1329 branch = parseblock(lines[i : i + 3])
1330 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 1236 of file BaseTest.py.
1238 Check that all the keys in reference are in to_check too, with the same value.
1239 If the value is a dict, the function is called recursively. to_check can
1240 contain more keys than reference, that will not be tested.
1241 The function returns at the first difference found.
1246 ignore_re = re.compile(ignore)
1247 keys = [key
for key
in reference
if not ignore_re.match(key)]
1249 keys = reference.keys()
1253 if (
type(reference[k])
is dict)
and (
type(to_check[k])
is dict):
1256 failed = fail_keys =
cmpTreesDicts(reference[k], to_check[k], ignore)
1259 failed = to_check[k] != reference[k]
1264 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 1404 of file BaseTest.py.
1406 Scan stdout to find ROOT TTree summaries and digest them.
1408 outlines = stdout.splitlines()
1409 nlines = len(outlines) - 1
1417 match = h_count_re.search(outlines[pos])
1418 while pos < nlines
and not match:
1420 match = h_count_re.search(outlines[pos])
1423 summaries.update(summ)
◆ findTTreeSummaries()
def GaudiTesting.BaseTest.findTTreeSummaries |
( |
|
stdout | ) |
|
Scan stdout to find ROOT TTree summaries and digest them.
Definition at line 1214 of file BaseTest.py.
1216 Scan stdout to find ROOT TTree summaries and digest them.
1218 stars = re.compile(
r"^\*+$")
1219 outlines = stdout.splitlines()
1220 nlines = len(outlines)
1226 while i < nlines
and not stars.match(outlines[i]):
1231 trees[tree[
"Name"]] = tree
◆ getCmpFailingValues()
def GaudiTesting.BaseTest.getCmpFailingValues |
( |
|
reference, |
|
|
|
to_check, |
|
|
|
fail_path |
|
) |
| |
Definition at line 1269 of file BaseTest.py.
1275 if c
is None or r
is None:
1277 return (fail_path, r, c)
◆ GetPlatform()
def GaudiTesting.BaseTest.GetPlatform |
( |
|
self | ) |
|
Return the platform Id defined in CMTCONFIG or SCRAM_ARCH.
Definition at line 1427 of file BaseTest.py.
1429 Return the platform Id defined in CMTCONFIG or SCRAM_ARCH.
1433 if "BINARY_TAG" in os.environ:
1434 arch = os.environ[
"BINARY_TAG"]
1435 elif "CMTCONFIG" in os.environ:
1436 arch = os.environ[
"CMTCONFIG"]
1437 elif "SCRAM_ARCH" in os.environ:
1438 arch = os.environ[
"SCRAM_ARCH"]
1439 elif os.environ.get(
"ENV_CMAKE_BUILD_TYPE",
"")
in (
1445 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 1455 of file BaseTest.py.
1457 Return True if the current platform is Windows.
1459 This function was needed because of the change in the CMTCONFIG format,
1460 from win32_vc71_dbg to i686-winxp-vc9-dbg.
1463 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 1336 of file BaseTest.py.
1338 Extract the histograms infos from the lines starting at pos.
1339 Returns the position of the first line after the summary block.
1342 h_table_head = re.compile(
1343 r'SUCCESS\s+(1D|2D|3D|1D profile|2D profile) histograms in directory\s+"(\w*)"'
1345 h_short_summ = re.compile(
r"ID=([^\"]+)\s+\"([^\"]+)\"\s+(.*)")
1350 m = h_count_re.search(lines[pos])
1351 name = m.group(1).strip()
1352 total = int(m.group(2))
1354 for k, v
in [x.split(
"=")
for x
in m.group(3).split()]:
1357 header[
"Total"] = total
1361 m = h_table_head.search(lines[pos])
1364 t = t.replace(
" profile",
"Prof")
1371 if l.startswith(
" | ID"):
1373 titles = [x.strip()
for x
in l.split(
"|")][1:]
1375 while pos < nlines
and lines[pos].startswith(
" |"):
1377 values = [x.strip()
for x
in l.split(
"|")][1:]
1379 for i
in range(len(titles)):
1380 hcont[titles[i]] = values[i]
1381 cont[hcont[
"ID"]] = hcont
1383 elif l.startswith(
" ID="):
1384 while pos < nlines
and lines[pos].startswith(
" ID="):
1386 x.strip()
for x
in h_short_summ.search(lines[pos]).groups()
1388 cont[values[0]] = values
1391 raise RuntimeError(
"Cannot understand line %d: '%s'" % (pos, l))
1395 summ[d][
"header"] = header
1400 summ[name] = {
"header": header}
◆ RationalizePath()
def GaudiTesting.BaseTest.RationalizePath |
( |
|
p | ) |
|
Function used to normalize the used path
Definition at line 736 of file BaseTest.py.
738 Function used to normalize the used path
740 newPath = os.path.normpath(os.path.expandvars(p))
741 if os.path.exists(newPath):
742 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 746 of file BaseTest.py.
746 def which(executable):
748 Locates an executable in the executables path ($PATH) and returns the full
749 path to it. An application is looked for with or without the '.exe' suffix.
750 If the executable cannot be found, None is returned
752 if os.path.isabs(executable):
753 if not os.path.isfile(executable):
754 if executable.endswith(
".exe"):
755 if os.path.isfile(executable[:-4]):
756 return executable[:-4]
758 executable = os.path.split(executable)[1]
761 for d
in os.environ.get(
"PATH").split(os.pathsep):
762 fullpath = os.path.join(d, executable)
763 if os.path.isfile(fullpath):
765 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.