153 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			5.3 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([
 | 
						|
            "*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
 |