r2 = resource.getrusage(resource.RUSAGE_SELF)
utime = r2.ru_utime - r1.ru_utime
stime = r2.ru_stime - r1.ru_stime
+
+ # This check is reliably unreliable on Travis, presumably because of CPU
+ # resources being quite restricted by the build environment. The workaround
+ # is to apply an arbitrary factor that should be enough to make it work nicely.
+ if os.environ.get('TRAVIS') == 'true':
+ allowed_part *= 1.2
+
assert utime + stime < duration * allowed_part, \
"CPU usage over limit: user %.0f%% sys %.0f%% allowed %.0f%%" % (
utime / duration * 100, stime / duration * 100,
return retval
-def run_python(path):
- if not path.endswith('.py'):
- path += '.py'
- path = os.path.abspath(path)
- src_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+def run_python(path, env=None, args=None):
+ new_argv = [sys.executable]
new_env = os.environ.copy()
- new_env['PYTHONPATH'] = os.pathsep.join(sys.path + [src_dir])
+ if path:
+ if not path.endswith('.py'):
+ path += '.py'
+ path = os.path.abspath(path)
+ new_argv.append(path)
+ src_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+ new_env['PYTHONPATH'] = os.pathsep.join(sys.path + [src_dir])
+ if env:
+ new_env.update(env)
+ if args:
+ new_argv.extend(args)
p = subprocess.Popen(
- [sys.executable, path],
+ new_argv,
env=new_env,
stderr=subprocess.STDOUT,
stdin=subprocess.PIPE,
return output
-def run_isolated(path, prefix='tests/isolated/'):
- output = run_python(prefix + path).rstrip()
+def run_isolated(path, prefix='tests/isolated/', env=None, args=None):
+ output = run_python(prefix + path, env=env, args=args).rstrip()
if output.startswith(b'skip'):
parts = output.split(b':', 1)
skip_args = []
if len(parts) > 1:
skip_args.append(parts[1])
raise SkipTest(*skip_args)
- assert output == b'pass', output
+ ok = output == b'pass'
+ if not ok:
+ sys.stderr.write('Isolated test {0} output:\n---\n{1}\n---\n'.format(path, output.decode()))
+ assert ok, 'Expected single line "pass" in stdout'
certificate_file = os.path.join(os.path.dirname(__file__), 'test_server.crt')