[py-svn] commit/pytest-xdist: 2 new changesets
Bitbucket
commits-noreply at bitbucket.org
Fri Dec 2 22:05:50 CET 2011
2 new commits in pytest-xdist:
https://bitbucket.org/hpk42/pytest-xdist/changeset/b92fb2f2a998/
changeset: b92fb2f2a998
user: hpk42
date: 2011-12-02 22:03:29
summary: fix issue 93 of pytest - avoid delayed teardowns
affected #: 9 files
diff -r 247b401a756ad6a0c5f73206b8bb5f0182057783 -r b92fb2f2a998db9de2a881dd7d6cd70e611b685a CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,9 @@
+1.8
+-------------------------
+
+- fix pytest-issue93 - use the refined pytest-2.2.1 runtestprotocol
+ interface to perform eager teardowns for test items.
+
1.7
-------------------------
diff -r 247b401a756ad6a0c5f73206b8bb5f0182057783 -r b92fb2f2a998db9de2a881dd7d6cd70e611b685a setup.py
--- a/setup.py
+++ b/setup.py
@@ -2,7 +2,7 @@
setup(
name="pytest-xdist",
- version='1.7',
+ version='1.8.dev1',
description='py.test xdist plugin for distributed testing and loop-on-failing modes',
long_description=open('README.txt').read(),
license='GPLv2 or later',
@@ -13,7 +13,7 @@
packages = ['xdist'],
entry_points = {'pytest11': ['xdist = xdist.plugin'],},
zip_safe=False,
- install_requires = ['execnet>=1.0.8', 'pytest>=2.2.0'],
+ install_requires = ['execnet>=1.0.8', 'pytest>=2.2.1.dev1'],
classifiers=[
'Development Status :: 5 - Production/Stable',
'Intended Audience :: Developers',
diff -r 247b401a756ad6a0c5f73206b8bb5f0182057783 -r b92fb2f2a998db9de2a881dd7d6cd70e611b685a testing/test_dsession.py
--- a/testing/test_dsession.py
+++ b/testing/test_dsession.py
@@ -48,11 +48,11 @@
assert sched.node2collection[node1] == collection
assert sched.node2collection[node2] == collection
sched.init_distribute()
- assert not sched.tests_finished()
+ assert sched.tests_finished()
assert node1.sent == ['ALL']
assert node2.sent == ['ALL']
sched.remove_item(node1, collection[0])
- assert not sched.tests_finished()
+ assert sched.tests_finished()
sched.remove_item(node2, collection[0])
assert sched.tests_finished()
@@ -66,7 +66,7 @@
assert sched.collection_is_completed
assert sched.node2collection[node1] == collection
sched.init_distribute()
- assert not sched.tests_finished()
+ assert sched.tests_finished()
crashitem = sched.remove_node(node1)
assert crashitem
assert sched.tests_finished()
@@ -88,7 +88,7 @@
assert sched.node2collection[node1] == collection
assert sched.node2collection[node2] == collection
sched.init_distribute()
- assert not sched.tests_finished()
+ assert sched.tests_finished()
assert len(node1.sent) == 1
assert len(node2.sent) == 1
x = sorted(node1.sent + node2.sent)
@@ -109,6 +109,7 @@
sched.addnode_collection(node1, col)
sched.addnode_collection(node2, col)
sched.init_distribute()
+ #assert not sched.tests_finished()
sent1 = node1.sent
sent2 = node2.sent
chunkitems = col[:sched.ITEM_CHUNKSIZE]
diff -r 247b401a756ad6a0c5f73206b8bb5f0182057783 -r b92fb2f2a998db9de2a881dd7d6cd70e611b685a testing/test_remote.py
--- a/testing/test_remote.py
+++ b/testing/test_remote.py
@@ -138,6 +138,7 @@
ids = ev.kwargs['ids']
assert len(ids) == 1
slave.sendcommand("runtests", ids=ids)
+ slave.sendcommand("shutdown")
ev = slave.popevent("testreport") # setup
ev = slave.popevent("testreport")
assert ev.name == "testreport"
@@ -145,7 +146,6 @@
assert rep.nodeid.endswith("::test_func")
assert rep.passed
assert rep.when == "call"
- slave.sendcommand("shutdown")
ev = slave.popevent("slavefinished")
assert 'slaveoutput' in ev.kwargs
diff -r 247b401a756ad6a0c5f73206b8bb5f0182057783 -r b92fb2f2a998db9de2a881dd7d6cd70e611b685a tox.ini
--- a/tox.ini
+++ b/tox.ini
@@ -21,3 +21,4 @@
[pytest]
addopts = -rsfxX
+;; hello
diff -r 247b401a756ad6a0c5f73206b8bb5f0182057783 -r b92fb2f2a998db9de2a881dd7d6cd70e611b685a xdist/__init__.py
--- a/xdist/__init__.py
+++ b/xdist/__init__.py
@@ -1,2 +1,2 @@
#
-__version__ = '1.7'
+__version__ = '1.8.dev1'
diff -r 247b401a756ad6a0c5f73206b8bb5f0182057783 -r b92fb2f2a998db9de2a881dd7d6cd70e611b685a xdist/dsession.py
--- a/xdist/dsession.py
+++ b/xdist/dsession.py
@@ -24,9 +24,6 @@
def tests_finished(self):
if not self.collection_is_completed:
return False
- for items in self.node2pending.values():
- if items:
- return False
return True
def addnode_collection(self, node, collection):
@@ -79,9 +76,9 @@
def tests_finished(self):
if not self.collection_is_completed or self.pending:
return False
- for items in self.node2pending.values():
- if items:
- return False
+ #for items in self.node2pending.values():
+ # if items:
+ # return False
return True
def addnode_collection(self, node, collection):
@@ -107,7 +104,7 @@
pending.append(item)
self.item2nodes.setdefault(item, []).append(node)
node.send_runtest(item)
- #self.log("items waiting for node: %d" %(len(self.pending)))
+ self.log("items waiting for node: %d" %(len(self.pending)))
#self.log("item2pending still executing: %s" %(self.item2nodes,))
#self.log("node2pending: %s" %(self.node2pending,))
diff -r 247b401a756ad6a0c5f73206b8bb5f0182057783 -r b92fb2f2a998db9de2a881dd7d6cd70e611b685a xdist/remote.py
--- a/xdist/remote.py
+++ b/xdist/remote.py
@@ -46,18 +46,26 @@
def pytest_runtestloop(self, session):
self.log("entering main loop")
+ torun = []
while 1:
name, kwargs = self.channel.receive()
self.log("received command %s(**%s)" % (name, kwargs))
if name == "runtests":
ids = kwargs['ids']
for nodeid in ids:
- item = self._id2item[nodeid]
- self.config.hook.pytest_runtest_protocol(item=item)
+ torun.append(self._id2item[nodeid])
elif name == "runtests_all":
- for item in session.items:
- self.config.hook.pytest_runtest_protocol(item=item)
- elif name == "shutdown":
+ torun.extend(session.items)
+ self.log("items to run: %s" %(len(torun)))
+ while len(torun) >= 2:
+ item = torun.pop(0)
+ nextitem = torun[0]
+ self.config.hook.pytest_runtest_protocol(item=item,
+ nextitem=nextitem)
+ if name == "shutdown":
+ while torun:
+ self.config.hook.pytest_runtest_protocol(
+ item=torun.pop(0), nextitem=None)
break
return True
@@ -118,7 +126,7 @@
config.option.numprocesses = None
config.args = args
return config
-
+
if __name__ == '__channelexec__':
slaveinput,args,option_dict = channel.receive()
diff -r 247b401a756ad6a0c5f73206b8bb5f0182057783 -r b92fb2f2a998db9de2a881dd7d6cd70e611b685a xdist/slavemanage.py
--- a/xdist/slavemanage.py
+++ b/xdist/slavemanage.py
@@ -183,7 +183,7 @@
raise ValueError("arg %s not relative to an rsync root" % (arg,))
l.append(splitcode.join(parts))
return l
-
+
class SlaveController(object):
ENDMARK = -1
@@ -237,8 +237,11 @@
self.sendcommand("runtests_all",)
def shutdown(self):
- if not self._down and not self.channel.isclosed():
- self.sendcommand("shutdown")
+ if not self._down:
+ try:
+ self.sendcommand("shutdown")
+ except IOError:
+ pass
def sendcommand(self, name, **kwargs):
""" send a named parametrized command to the other side. """
https://bitbucket.org/hpk42/pytest-xdist/changeset/6d23d5c1326f/
changeset: 6d23d5c1326f
user: hpk42
date: 2011-12-02 22:03:58
summary: remove usage of final_logerrors now that we have better teardown information
affected #: 6 files
diff -r b92fb2f2a998db9de2a881dd7d6cd70e611b685a -r 6d23d5c1326f88b97066e5b1e950cc6950d9ee05 setup.py
--- a/setup.py
+++ b/setup.py
@@ -2,7 +2,7 @@
setup(
name="pytest-xdist",
- version='1.8.dev1',
+ version='1.8.dev2',
description='py.test xdist plugin for distributed testing and loop-on-failing modes',
long_description=open('README.txt').read(),
license='GPLv2 or later',
@@ -13,7 +13,7 @@
packages = ['xdist'],
entry_points = {'pytest11': ['xdist = xdist.plugin'],},
zip_safe=False,
- install_requires = ['execnet>=1.0.8', 'pytest>=2.2.1.dev1'],
+ install_requires = ['execnet>=1.0.8', 'pytest>=2.2.1.dev2'],
classifiers=[
'Development Status :: 5 - Production/Stable',
'Intended Audience :: Developers',
@@ -27,4 +27,4 @@
'Programming Language :: Python',
'Programming Language :: Python :: 3',
],
-)
\ No newline at end of file
+)
diff -r b92fb2f2a998db9de2a881dd7d6cd70e611b685a -r 6d23d5c1326f88b97066e5b1e950cc6950d9ee05 testing/acceptance_test.py
--- a/testing/acceptance_test.py
+++ b/testing/acceptance_test.py
@@ -314,7 +314,7 @@
@py.test.mark.xfail
def test_terminate_on_hangingnode(testdir):
p = testdir.makeconftest("""
- def pytest__teardown_final(session):
+ def pytest_sessionfinishes(session):
if session.nodeid == "my": # running on slave
import time
time.sleep(3)
diff -r b92fb2f2a998db9de2a881dd7d6cd70e611b685a -r 6d23d5c1326f88b97066e5b1e950cc6950d9ee05 xdist/__init__.py
--- a/xdist/__init__.py
+++ b/xdist/__init__.py
@@ -1,2 +1,2 @@
#
-__version__ = '1.8.dev1'
+__version__ = '1.8.dev2'
diff -r b92fb2f2a998db9de2a881dd7d6cd70e611b685a -r 6d23d5c1326f88b97066e5b1e950cc6950d9ee05 xdist/dsession.py
--- a/xdist/dsession.py
+++ b/xdist/dsession.py
@@ -284,10 +284,6 @@
self.config.hook.pytest_runtest_logreport(report=rep)
self._handlefailures(rep)
- def slave_teardownreport(self, node, rep):
- rep.node = node
- self.config.hook.pytest__teardown_final_logerror(report=rep)
-
def slave_collectreport(self, node, rep):
#self.report_line("collectreport %s: %s" %(rep.id, rep.status))
#rep.node = node
diff -r b92fb2f2a998db9de2a881dd7d6cd70e611b685a -r 6d23d5c1326f88b97066e5b1e950cc6950d9ee05 xdist/remote.py
--- a/xdist/remote.py
+++ b/xdist/remote.py
@@ -26,10 +26,6 @@
for line in str(excrepr).split("\n"):
self.log("IERROR> " + line)
- def pytest__teardown_final_logerror(self, report):
- rep = serialize_report(report)
- self.sendevent("teardownreport", data=rep)
-
def pytest_sessionstart(self, session):
self.session = session
slaveinfo = getinfodict()
diff -r b92fb2f2a998db9de2a881dd7d6cd70e611b685a -r 6d23d5c1326f88b97066e5b1e950cc6950d9ee05 xdist/slavemanage.py
--- a/xdist/slavemanage.py
+++ b/xdist/slavemanage.py
@@ -301,5 +301,3 @@
return runner.TestReport(**d)
elif name == "collectreport":
return runner.CollectReport(**d)
- elif name == "teardownreport":
- return runner.TeardownErrorReport(**d)
Repository URL: https://bitbucket.org/hpk42/pytest-xdist/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
More information about the pytest-commit
mailing list