[svn r63201] allow to specify "3*" for host specs.

--HG--
branch : trunk
This commit is contained in:
hpk 2009-03-22 02:19:57 +01:00
parent 887a837600
commit bda844b544
7 changed files with 63 additions and 48 deletions

View File

@ -27,7 +27,11 @@ To send tests to a python2.4 process, you may type::
This will start a subprocess which is run with the "python2.4" This will start a subprocess which is run with the "python2.4"
Python interpreter, found in your system binary lookup path. Python interpreter, found in your system binary lookup path.
.. For convenience you may prepend ``3*`` to create three sub processes. If you prefix the --tx option like this::
py.test --tx 3*popen//python=python2.4
then three subprocesses would be created.
Sending tests to remote SSH accounts Sending tests to remote SSH accounts

View File

@ -255,15 +255,20 @@ class Config(object):
def getxspecs(self): def getxspecs(self):
config = self config = self
if config.option.numprocesses: if config.option.numprocesses:
xspec = ['popen'] * config.option.numprocesses xspeclist = ['popen'] * config.option.numprocesses
else: else:
xspec = config.option.xspec xspeclist = []
if not xspec: for xspec in config.getvalue("tx"):
xspec = config.getvalue("xspec") i = xspec.find("*")
if xspec is None: try:
num = int(xspec[:i])
except ValueError:
xspeclist.append(xspec)
else:
xspeclist.extend([xspec[i+1:]] * num)
if not xspeclist:
raise config.Error("MISSING test execution (tx) nodes: please specify --tx") raise config.Error("MISSING test execution (tx) nodes: please specify --tx")
#print "option value for xspecs", xspec return [py.execnet.XSpec(x) for x in xspeclist]
return [py.execnet.XSpec(x) for x in xspec]
def getrsyncdirs(self): def getrsyncdirs(self):
config = self config = self

View File

@ -26,7 +26,7 @@ class TestAsyncFunctional:
print "test_1: conftest.option.someopt", conftest.option.someopt print "test_1: conftest.option.someopt", conftest.option.someopt
assert conftest.option.someopt assert conftest.option.someopt
""")) """))
result = testdir.runpytest('-n1', p1, '--someopt') result = testdir.runpytest('-d', '--tx=popen', p1, '--someopt')
assert result.ret == 0 assert result.ret == 0
extra = result.stdout.fnmatch_lines([ extra = result.stdout.fnmatch_lines([
"*1 passed*", "*1 passed*",

View File

@ -117,39 +117,3 @@ class TestNodeManager:
ev = sorter.getfirstnamed("itemtestreport") ev = sorter.getfirstnamed("itemtestreport")
assert ev.passed assert ev.passed
class TestOptionsAndConfiguration:
def test_getxspecs_numprocesses(self, testdir):
config = testdir.parseconfig("-n3")
xspecs = config.getxspecs()
assert len(xspecs) == 3
def test_getxspecs(self, testdir):
testdir.chdir()
config = testdir.parseconfig("--tx=popen", "--tx", "ssh=xyz")
xspecs = config.getxspecs()
assert len(xspecs) == 2
print xspecs
assert xspecs[0].popen
assert xspecs[1].ssh == "xyz"
def test_getconfigroots(self, testdir):
config = testdir.parseconfig('--rsyncdir=' + str(testdir.tmpdir))
roots = config.getrsyncdirs()
assert len(roots) == 1 + 1
assert testdir.tmpdir in roots
def test_getconfigroots_with_conftest(self, testdir):
testdir.chdir()
p = py.path.local()
for bn in 'x y z'.split():
p.mkdir(bn)
testdir.makeconftest("""
rsyncdirs= 'x',
""")
config = testdir.parseconfig(testdir.tmpdir, '--rsyncdir=y', '--rsyncdir=z')
roots = config.getrsyncdirs()
assert len(roots) == 3 + 1
assert py.path.local('y') in roots
assert py.path.local('z') in roots
assert testdir.tmpdir.join('x') in roots

View File

@ -103,7 +103,7 @@ class DefaultPlugin:
help="number of local test processes. conflicts with --dist.") help="number of local test processes. conflicts with --dist.")
group.addoption('--rsyncdir', action="append", default=[], metavar="dir1", group.addoption('--rsyncdir', action="append", default=[], metavar="dir1",
help="add local directory for rsync to remote test nodes.") help="add local directory for rsync to remote test nodes.")
group._addoption('--tx', dest="xspec", action="append", group._addoption('--tx', dest="tx", action="append", default=[],
help=("add a test environment, specified in XSpec syntax. examples: " help=("add a test environment, specified in XSpec syntax. examples: "
"--tx popen//python=python2.5 --tx socket=192.168.1.102")) "--tx popen//python=python2.5 --tx socket=192.168.1.102"))
#group._addoption('--rest', #group._addoption('--rest',

View File

@ -287,7 +287,7 @@ class TestPyTest:
""", """,
) )
testdir.makeconftest(""" testdir.makeconftest("""
pytest_option_xspec = 'popen popen popen'.split() pytest_option_tx = 'popen popen popen'.split()
""") """)
result = testdir.runpytest(p1, '-d') result = testdir.runpytest(p1, '-d')
result.stdout.fnmatch_lines([ result.stdout.fnmatch_lines([
@ -319,7 +319,7 @@ class TestPyTest:
os.kill(os.getpid(), 15) os.kill(os.getpid(), 15)
""" """
) )
result = testdir.runpytest(p1, '-d', '-n 3') result = testdir.runpytest(p1, '-d', '--tx=3*popen')
result.stdout.fnmatch_lines([ result.stdout.fnmatch_lines([
"*popen*Python*", "*popen*Python*",
"*popen*Python*", "*popen*Python*",

View File

@ -218,6 +218,48 @@ class TestConfigApi_getcolitems:
assert col.config is config assert col.config is config
class TestOptionsAndConfiguration:
def test_getxspecs_numprocesses(self, testdir):
config = testdir.parseconfig("-n3")
xspecs = config.getxspecs()
assert len(xspecs) == 3
def test_getxspecs(self, testdir):
testdir.chdir()
config = testdir.parseconfig("--tx=popen", "--tx", "ssh=xyz")
xspecs = config.getxspecs()
assert len(xspecs) == 2
print xspecs
assert xspecs[0].popen
assert xspecs[1].ssh == "xyz"
def test_xspecs_multiplied(self, testdir):
testdir.chdir()
xspecs = testdir.parseconfig("--tx=3*popen",).getxspecs()
assert len(xspecs) == 3
assert xspecs[1].popen
def test_getrsyncdirs(self, testdir):
config = testdir.parseconfig('--rsyncdir=' + str(testdir.tmpdir))
roots = config.getrsyncdirs()
assert len(roots) == 1 + 1
assert testdir.tmpdir in roots
def test_getrsyncdirs_with_conftest(self, testdir):
testdir.chdir()
p = py.path.local()
for bn in 'x y z'.split():
p.mkdir(bn)
testdir.makeconftest("""
rsyncdirs= 'x',
""")
config = testdir.parseconfig(testdir.tmpdir, '--rsyncdir=y', '--rsyncdir=z')
roots = config.getrsyncdirs()
assert len(roots) == 3 + 1
assert py.path.local('y') in roots
assert py.path.local('z') in roots
assert testdir.tmpdir.join('x') in roots
class TestOptionEffects: class TestOptionEffects: