◆ _new_backslashreplace_errors()
def GaudiTesting.BaseTest._new_backslashreplace_errors |
( |
|
exc | ) |
|
|
private |
Definition at line 39 of file BaseTest.py.
40 if isinstance(exc, UnicodeDecodeError):
41 code =
hex(ord(exc.object[exc.start]))
42 return (
"\\" + code[1:], exc.start + 1)
44 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 1283 of file BaseTest.py.
1285 Parse the TTree summary table in lines, starting from pos.
1286 Returns a tuple with the dictionary with the digested informations and the
1287 position of the first line after the summary.
1294 return [f.strip()
for f
in l.strip(
"*\n").split(
":", 2)]
1298 cols = splitcols(ll[0])
1299 r[
"Name"], r[
"Title"] = cols[1:]
1301 cols = splitcols(ll[1])
1302 r[
"Entries"] = int(cols[1])
1304 sizes = cols[2].split()
1305 r[
"Total size"] = int(sizes[2])
1306 if sizes[-1] ==
"memory":
1309 r[
"File size"] = int(sizes[-1])
1311 cols = splitcols(ll[2])
1312 sizes = cols[2].split()
1313 if cols[0] ==
"Baskets":
1314 r[
"Baskets"] = int(cols[1])
1315 r[
"Basket size"] = int(sizes[2])
1316 r[
"Compression"] = float(sizes[-1])
1319 if i < (count - 3)
and lines[i].startswith(
"*Tree"):
1320 result = parseblock(lines[i : i + 3])
1321 result[
"Branches"] = {}
1323 while i < (count - 3)
and lines[i].startswith(
"*Br"):
1324 if i < (count - 2)
and lines[i].startswith(
"*Branch "):
1328 branch = parseblock(lines[i : i + 3])
1329 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 1235 of file BaseTest.py.
1237 Check that all the keys in reference are in to_check too, with the same value.
1238 If the value is a dict, the function is called recursively. to_check can
1239 contain more keys than reference, that will not be tested.
1240 The function returns at the first difference found.
1245 ignore_re = re.compile(ignore)
1246 keys = [key
for key
in reference
if not ignore_re.match(key)]
1248 keys = reference.keys()
1252 if (
type(reference[k])
is dict)
and (
type(to_check[k])
is dict):
1255 failed = fail_keys =
cmpTreesDicts(reference[k], to_check[k], ignore)
1258 failed = to_check[k] != reference[k]
1263 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
75 if "WORKSPACE" in os.environ:
76 p = Popen([
"ps",
"-fH",
"-U", getuser()], stdout=PIPE)
77 with open(os.path.join(os.environ[
"WORKSPACE"], name),
"wb")
as f:
78 f.write(p.communicate()[0])
◆ findHistosSummaries()
def GaudiTesting.BaseTest.findHistosSummaries |
( |
|
stdout | ) |
|
Scan stdout to find ROOT TTree summaries and digest them.
Definition at line 1403 of file BaseTest.py.
1405 Scan stdout to find ROOT TTree summaries and digest them.
1407 outlines = stdout.splitlines()
1408 nlines = len(outlines) - 1
1416 match = h_count_re.search(outlines[pos])
1417 while pos < nlines
and not match:
1419 match = h_count_re.search(outlines[pos])
1422 summaries.update(summ)
◆ findTTreeSummaries()
def GaudiTesting.BaseTest.findTTreeSummaries |
( |
|
stdout | ) |
|
Scan stdout to find ROOT TTree summaries and digest them.
Definition at line 1213 of file BaseTest.py.
1215 Scan stdout to find ROOT TTree summaries and digest them.
1217 stars = re.compile(
r"^\*+$")
1218 outlines = stdout.splitlines()
1219 nlines = len(outlines)
1225 while i < nlines
and not stars.match(outlines[i]):
1230 trees[tree[
"Name"]] = tree
◆ getCmpFailingValues()
def GaudiTesting.BaseTest.getCmpFailingValues |
( |
|
reference, |
|
|
|
to_check, |
|
|
|
fail_path |
|
) |
| |
Definition at line 1268 of file BaseTest.py.
1274 if c
is None or r
is None:
1276 return (fail_path, r, c)
◆ GetPlatform()
def GaudiTesting.BaseTest.GetPlatform |
( |
|
self | ) |
|
Return the platform Id defined in CMTCONFIG or SCRAM_ARCH.
Definition at line 1426 of file BaseTest.py.
1428 Return the platform Id defined in CMTCONFIG or SCRAM_ARCH.
1432 if "BINARY_TAG" in os.environ:
1433 arch = os.environ[
"BINARY_TAG"]
1434 elif "CMTCONFIG" in os.environ:
1435 arch = os.environ[
"CMTCONFIG"]
1436 elif "SCRAM_ARCH" in os.environ:
1437 arch = os.environ[
"SCRAM_ARCH"]
1438 elif os.environ.get(
"ENV_CMAKE_BUILD_TYPE",
"")
in (
1444 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 1454 of file BaseTest.py.
1456 Return True if the current platform is Windows.
1458 This function was needed because of the change in the CMTCONFIG format,
1459 from win32_vc71_dbg to i686-winxp-vc9-dbg.
1462 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 81 of file BaseTest.py.
83 Send a signal to a process and all its child processes (starting from the
86 log = logging.getLogger(
"kill_tree")
87 ps_cmd = [
"ps",
"--no-headers",
"-o",
"pid",
"--ppid", str(ppid)]
88 get_children = Popen(ps_cmd, stdout=PIPE, stderr=PIPE)
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 1335 of file BaseTest.py.
1337 Extract the histograms infos from the lines starting at pos.
1338 Returns the position of the first line after the summary block.
1341 h_table_head = re.compile(
1342 r'SUCCESS\s+(1D|2D|3D|1D profile|2D profile) histograms in directory\s+"(\w*)"'
1344 h_short_summ = re.compile(
r"ID=([^\"]+)\s+\"([^\"]+)\"\s+(.*)")
1349 m = h_count_re.search(lines[pos])
1350 name = m.group(1).strip()
1351 total = int(m.group(2))
1353 for k, v
in [x.split(
"=")
for x
in m.group(3).split()]:
1356 header[
"Total"] = total
1360 m = h_table_head.search(lines[pos])
1363 t = t.replace(
" profile",
"Prof")
1370 if l.startswith(
" | ID"):
1372 titles = [x.strip()
for x
in l.split(
"|")][1:]
1374 while pos < nlines
and lines[pos].startswith(
" |"):
1376 values = [x.strip()
for x
in l.split(
"|")][1:]
1378 for i
in range(len(titles)):
1379 hcont[titles[i]] = values[i]
1380 cont[hcont[
"ID"]] = hcont
1382 elif l.startswith(
" ID="):
1383 while pos < nlines
and lines[pos].startswith(
" ID="):
1385 x.strip()
for x
in h_short_summ.search(lines[pos]).groups()
1387 cont[values[0]] = values
1390 raise RuntimeError(
"Cannot understand line %d: '%s'" % (pos, l))
1394 summ[d][
"header"] = header
1399 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 54 of file BaseTest.py.
56 Take a string with invalid ASCII/UTF characters and quote them so that the
57 string can be used in an XML text.
59 >>> sanitize_for_xml('this is \x1b')
60 'this is [NON-XML-CHAR-0x1B]'
62 bad_chars = re.compile(
"[\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 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 = re.compile(r"^(.*)SUCCESS\s+Booked (\d+) Histogram\(s\) :\s+([\s\w=-]*)") |
◆ 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 968 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.