Source code for schrodinger.test.pytest.faulthandler_setup

"""
Set up faulthandler inside of pytest
"""

FAULTHANDLER_TIMEOUT_KEY = 'faulthandler_timeout'


[docs]def set_timeout(config): """ Modifies config to set a reasonable faulthandler_timeout. :param config: pytest configuration object :type config: pytest.config.Config """ # this is true when use specifies -p no:faulthandler if not config.pluginmanager.getplugin("faulthandler"): return if has_existing_faulthandler_timeout(config): return # remove cached value, since ini values are already # accessed at this point config._inicache.pop(FAULTHANDLER_TIMEOUT_KEY, None) faulthandler_timeout = get_faulthandler_timeout(config) if not faulthandler_timeout: return if not config._override_ini: config._override_ini = [] option = f"{FAULTHANDLER_TIMEOUT_KEY}={faulthandler_timeout}" config._override_ini.append(option)
[docs]def get_faulthandler_timeout(config): """ Return an appropriate timeout to trigger faulthandler. :param config: pytest configuration object :type config: pytest.config.Config :rtype: float or None """ cpp_timeout = config.getoption('timeout') if cpp_timeout: return cpp_timeout - 10 faulthandler_timeout = 1140 if config.option.memtest: faulthandler_timeout = faulthandler_timeout * 10 return faulthandler_timeout
[docs]def has_existing_faulthandler_timeout(config): """ Return whether a user has overriden the specification of faulthandler_timeout in ini or commandline. :param config: pytest configuration object :type config: pytest.config.Config """ if config.getini(FAULTHANDLER_TIMEOUT_KEY): return True for opt in config._override_ini: if opt.startswith(FAULTHANDLER_TIMEOUT_KEY): return True return False