153 lines
5.4 KiB
Python
153 lines
5.4 KiB
Python
|
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([
|
||
|
"*1*popen*Python*",
|
||
|
"*2*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([
|
||
|
"*1*popen*Python*",
|
||
|
"*2*popen*Python*",
|
||
|
"*3*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([
|
||
|
"*1* *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)
|
||
|
result.stdout.fnmatch_lines(["2...4"])
|
||
|
result.stdout.fnmatch_lines(["2...5"])
|
||
|
|