def test_forkserver(tmpdir): tmpdir = six.text_type(tmpdir) os.chdir(tmpdir) shutil.copytree(BENCHMARK_DIR, 'benchmark') d = {} d.update(ASV_CONF_JSON) d['env_dir'] = "env" d['benchmark_dir'] = 'benchmark' d['repo'] = 'None' conf = config.Config.from_json(d) env = environment.ExistingEnvironment(conf, sys.executable, {}) spawner = runner.ForkServer(env, os.path.abspath('benchmark')) result_file = os.path.join(tmpdir, 'run-result') try: out, errcode = spawner.run('time_examples.TimeWithRepeat.time_it', '{}', None, result_file, 60, os.getcwd()) finally: spawner.close() assert out.startswith("<1>") assert errcode == 0 with open(result_file, 'r') as f: data = json.load(f) assert len(data['samples']) >= 1
def test_forkserver(tmpdir): tmpdir = str(tmpdir) os.chdir(tmpdir) shutil.copytree(BENCHMARK_DIR, 'benchmark') d = {} d.update(ASV_CONF_JSON) d['env_dir'] = "env" d['benchmark_dir'] = 'benchmark' d['repo'] = 'None' conf = config.Config.from_json(d) with open(os.path.join('benchmark', '__init__.py'), 'w') as f: f.write("import sys; sys.stdout.write('import-time print')") with open(os.path.join('benchmark', 'unimportable.py'), 'w') as f: f.write("raise RuntimeError('not importable')") env = environment.ExistingEnvironment(conf, sys.executable, {}, {}) spawner = runner.ForkServer(env, os.path.abspath('benchmark')) result_file = os.path.join(tmpdir, 'run-result') try: out, errcode = spawner.run('time_examples.TimeWithRepeat.time_it', '{}', None, result_file, 60, os.getcwd()) finally: spawner.close() assert out.startswith("import-time print<1>") assert errcode == 0 with open(result_file, 'r') as f: data = json.load(f) assert len(data['samples']) >= 1
def test_forkserver_preimport(tmpdir): tmpdir = six.text_type(tmpdir) os.chdir(tmpdir) os.makedirs('benchmark') d = {} d.update(ASV_CONF_JSON) d['env_dir'] = "env" d['benchmark_dir'] = 'benchmark' d['repo'] = 'None' conf = config.Config.from_json(d) env = environment.ExistingEnvironment(conf, sys.executable, {}, {}) # # Normal benchmark suite # with open(os.path.join('benchmark', '__init__.py'), 'w') as f: f.write("print('message')") spawner = runner.ForkServer(env, os.path.abspath('benchmark')) try: success, out = spawner.preimport() finally: spawner.close() assert success == True assert out.rstrip() == "message" # # Benchmark suite that crashes the forkserver # # NOTE: the .pyc files need to be removed, as Python 2 pyc caching # has problems with overwriting files rapidly clear_pyc('benchmark') with open(os.path.join('benchmark', '__init__.py'), 'w') as f: f.write( "import os, sys; print('egassem'); sys.stdout.flush(); os._exit(0)" ) spawner = runner.ForkServer(env, os.path.abspath('benchmark')) try: success, out = spawner.preimport() finally: spawner.close() assert success == False assert out.startswith('asv: benchmark runner crashed') # # Benchmark suite that has an unimportable file # clear_pyc('benchmark') with open(os.path.join('benchmark', '__init__.py'), 'w') as f: pass with open(os.path.join('benchmark', 'bad.py'), 'w') as f: f.write("raise RuntimeError()") spawner = runner.ForkServer(env, os.path.abspath('benchmark')) try: success, out = spawner.preimport() finally: spawner.close() assert success == True assert out.startswith('Traceback')