31 lines
1.9 KiB
Python
31 lines
1.9 KiB
Python
"""Independently count actual libtest outcomes in already byte-verified peer evidence."""
|
|
from pathlib import Path
|
|
import json
|
|
import re
|
|
import zipfile
|
|
|
|
ROOT = Path(__file__).resolve().parent.parent
|
|
PACKAGE = ROOT / '.local/state-multiselect-delivery-readback-20260923/checks'
|
|
manifest = json.loads((PACKAGE / 'manifest.json').read_bytes())
|
|
expected = {'core-2': (11, 0, 0, 0), 'desktop-2': (1286, 0, 6, 0),
|
|
'desktop-3': (122, 0, 0, 1170)}
|
|
results = {}
|
|
with zipfile.ZipFile(PACKAGE / 'evidence.zip') as archive:
|
|
for gate, counts in expected.items():
|
|
name = manifest['logicalFiles']['cargo/' + gate + '/stdout.log']
|
|
log = archive.read(name).decode('utf-8')
|
|
outcomes = re.findall(r'^test ([^\r\n]+) \.\.\. (ok|FAILED|ignored)(?:, [^\r\n]*)?\r?$', log, re.M)
|
|
names = [name for name, status in outcomes]
|
|
assert len(names) == len(set(names)), (gate, 'duplicate outcome')
|
|
actual = tuple(sum(status == value for _, status in outcomes) for value in ('ok', 'FAILED', 'ignored'))
|
|
summaries = re.findall(r'^test result: (ok|FAILED)\. (\d+) passed; (\d+) failed; (\d+) ignored; (\d+) measured; (\d+) filtered out;', log, re.M)
|
|
assert len(summaries) == 1, (gate, summaries)
|
|
state, passed, failed, ignored, measured, filtered = summaries[0]
|
|
assert state == 'ok' and int(measured) == 0
|
|
assert actual == tuple(map(int, (passed, failed, ignored))) == counts[:3]
|
|
assert int(filtered) == counts[3]
|
|
results[gate] = {'passed': actual[0], 'failed': actual[1], 'ignored': actual[2],
|
|
'filtered': int(filtered), 'actual_unique_outcomes': len(names),
|
|
'ignored_names': [name for name, status in outcomes if status == 'ignored']}
|
|
print(json.dumps({'result': 'PASS', 'scope': 'Recorded libtest output only; no new execution or complete listing admission.', 'gates': results}, indent=2))
|