import py class TestDistribution: def test_dist_conftest_options(self, testdir): p1 = testdir.tmpdir.ensure("dir", 'p1.py') p1.dirpath("__init__.py").write("") p1.dirpath("conftest.py").write(py.code.Source(""" import py from py.builtin import print_ print_("importing conftest", __file__) Option = py.test.config.Option option = py.test.config.addoptions("someopt", Option('--someopt', action="store_true", dest="someopt", default=False)) dist_rsync_roots = ['../dir'] print_("added options", option) print_("config file seen from conftest", py.test.config) """)) p1.write(py.code.Source(""" import py from %s import conftest from py.builtin import print_ def test_1(): print_("config from test_1", py.test.config) print_("conftest from test_1", conftest.__file__) print_("test_1: py.test.config.option.someopt", py.test.config.option.someopt) print_("test_1: conftest", conftest) print_("test_1: conftest.option.someopt", conftest.option.someopt) assert conftest.option.someopt """ % p1.dirpath().purebasename )) result = testdir.runpytest('-d', '--tx=popen', p1, '--someopt') assert result.ret == 0 extra = result.stdout.fnmatch_lines([ "*1 passed*", ]) def test_manytests_to_one_popen(self, testdir): p1 = testdir.makepyfile(""" import py def test_fail0(): assert 0 def test_fail1(): raise ValueError() def test_ok(): pass def test_skip(): py.test.skip("hello") """, ) result = testdir.runpytest(p1, '-d', '--tx=popen', '--tx=popen') result.stdout.fnmatch_lines([ "*0*popen*Python*", "*1*popen*Python*", "*2 failed, 1 passed, 1 skipped*", ]) assert result.ret == 1 def test_dist_conftest_specified(self, testdir): p1 = testdir.makepyfile(""" import py def test_fail0(): assert 0 def test_fail1(): raise ValueError() def test_ok(): pass def test_skip(): py.test.skip("hello") """, ) testdir.makeconftest(""" option_tx = 'popen popen popen'.split() """) result = testdir.runpytest(p1, '-d') result.stdout.fnmatch_lines([ "*0*popen*Python*", "*1*popen*Python*", "*2*popen*Python*", "*2 failed, 1 passed, 1 skipped*", ]) assert result.ret == 1 def test_dist_tests_with_crash(self, testdir): if not hasattr(py.std.os, 'kill'): py.test.skip("no os.kill") p1 = testdir.makepyfile(""" import py def test_fail0(): assert 0 def test_fail1(): raise ValueError() def test_ok(): pass def test_skip(): py.test.skip("hello") def test_crash(): import time import os time.sleep(0.5) os.kill(os.getpid(), 15) """ ) result = testdir.runpytest(p1, '-d', '--tx=3*popen') result.stdout.fnmatch_lines([ "*popen*Python*", "*popen*Python*", "*popen*Python*", "*node down*", "*3 failed, 1 passed, 1 skipped*" ]) assert result.ret == 1 def test_distribution_rsyncdirs_example(self, testdir): source = testdir.mkdir("source") dest = testdir.mkdir("dest") subdir = source.mkdir("example_pkg") subdir.ensure("__init__.py") p = subdir.join("test_one.py") p.write("def test_5(): assert not __file__.startswith(%r)" % str(p)) result = testdir.runpytest("-d", "--rsyncdir=%(subdir)s" % locals(), "--tx=popen//chdir=%(dest)s" % locals(), p) assert result.ret == 0 result.stdout.fnmatch_lines([ "*0* *popen*platform*", #"RSyncStart: [G1]", #"RSyncFinished: [G1]", "*1 passed*" ]) assert dest.join(subdir.basename).check(dir=1) def test_dist_each(self, testdir): interpreters = [] for name in ("python2.4", "python2.5"): interp = py.path.local.sysfind(name) if interp is None: py.test.skip("%s not found" % name) interpreters.append(interp) testdir.makepyfile(__init__="", test_one=""" import sys def test_hello(): print("%s...%s" % sys.version_info[:2]) assert 0 """) args = ["--dist=each"] args += ["--tx", "popen//python=%s" % interpreters[0]] args += ["--tx", "popen//python=%s" % interpreters[1]] result = testdir.runpytest(*args) s = result.stdout.str() assert "2.4" in s assert "2.5" in s