[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