blob: 7cabc56ab4f8d459c67b5a8a0f5ca0a82e641e29 [file] [log] [blame]
"""Test module to collect test executable hashsum."""
from litsupport import testplan
import hashlib
import logging
import platform
def compute(context):
if hasattr(context, "executable_hash"):
return
executable = context.executable
try:
# Darwin's and Solaris' "strip" don't support these arguments.
if platform.system() != "Darwin" and platform.system() != "SunOS":
stripped_executable = executable + ".stripped"
testplan.check_call(
[
context.config.strip_tool,
"--remove-section=.comment",
"--remove-section='.note*'",
"-o",
stripped_executable,
executable,
]
)
executable = stripped_executable
h = hashlib.md5()
h.update(open(executable, "rb").read())
context.executable_hash = h.hexdigest()
except Exception:
logging.info("Could not calculate hash for %s" % executable)
context.executable_hash = ""
def same_as_previous(context):
"""Check whether hash has changed compared to the results in
config.previous_results."""
previous_results = context.config.previous_results
testname = context.test.getFullName()
executable_hash = context.executable_hash
if previous_results and "tests" in previous_results:
for test in previous_results["tests"]:
if "name" not in test or test["name"] != testname:
continue
if "metrics" not in test:
continue
metrics = test["metrics"]
return "hash" in metrics and metrics["hash"] == executable_hash
return False
def _getHash(context):
compute(context)
return {"hash": context.executable_hash}
def mutatePlan(context, plan):
plan.metric_collectors.append(_getHash)