[py-svn] r63160 - in py/trunk/py/test/dsession: . testing

hpk at codespeak.net hpk at codespeak.net
Fri Mar 20 22:19:04 CET 2009


Author: hpk
Date: Fri Mar 20 22:19:03 2009
New Revision: 63160

Added:
   py/trunk/py/test/dsession/testing/test_txnode.py
      - copied, changed from r63154, py/trunk/py/test/dsession/testing/test_masterslave.py
   py/trunk/py/test/dsession/txnode.py
      - copied, changed from r63153, py/trunk/py/test/dsession/masterslave.py
Removed:
   py/trunk/py/test/dsession/masterslave.py
   py/trunk/py/test/dsession/testing/test_masterslave.py
Modified:
   py/trunk/py/test/dsession/nodemanage.py
   py/trunk/py/test/dsession/testing/test_functional_dsession.py
Log:
rename masterslave -> txnode


Deleted: /py/trunk/py/test/dsession/masterslave.py
==============================================================================
--- /py/trunk/py/test/dsession/masterslave.py	Fri Mar 20 22:19:03 2009
+++ (empty file)
@@ -1,123 +0,0 @@
-"""
-    Manage setup, running and local representation of remote nodes/processes. 
-"""
-import py
-from py.__.test import event
-from py.__.test.dsession.mypickle import PickleChannel
-
-class MasterNode(object):
-    """ Install slave code, manage sending test tasks & receiving results """
-    ENDMARK = -1
-
-    def __init__(self, gateway, config, putevent):
-        self.config = config 
-        self.putevent = putevent 
-        self.gateway = gateway
-        self.channel = install_slave(gateway, config)
-        self.channel.setcallback(self.callback, endmarker=self.ENDMARK)
-        self._down = False
-
-    def notify(self, eventname, *args, **kwargs):
-        self.putevent((eventname, args, kwargs))
-      
-    def callback(self, eventcall):
-        """ this gets called for each object we receive from 
-            the other side and if the channel closes. 
-
-            Note that channel callbacks run in the receiver
-            thread of execnet gateways - we need to 
-            avoid raising exceptions or doing heavy work.
-        """
-        try:
-            if eventcall == self.ENDMARK:
-                err = self.channel._getremoteerror()
-                if not self._down:
-                    if not err:
-                        err = "Not properly terminated"
-                    self.notify("testnodedown", self, err)
-                    self._down = True
-                return
-            eventname, args, kwargs = eventcall 
-            if eventname == "slaveready":
-                self.notify("testnodeready", self)
-            elif eventname == "slavefinished":
-                self._down = True
-                self.notify("testnodedown", self, None)
-            else:
-                self.notify(eventname, *args, **kwargs)
-        except KeyboardInterrupt: 
-            # should not land in receiver-thread
-            raise 
-        except:
-            excinfo = py.code.ExceptionInfo()
-            print "!" * 20, excinfo
-            self.notify("internalerror", event.InternalException(excinfo))
-
-    def send(self, item):
-        assert item is not None
-        self.channel.send(item)
-
-    def sendlist(self, itemlist):
-        self.channel.send(itemlist)
-
-    def shutdown(self):
-        self.channel.send(None)
-
-# setting up slave code 
-def install_slave(gateway, config):
-    channel = gateway.remote_exec(source="""
-        from py.__.test.dsession.mypickle import PickleChannel
-        from py.__.test.dsession.masterslave import SlaveNode
-        channel = PickleChannel(channel)
-        slavenode = SlaveNode(channel)
-        slavenode.run()
-    """)
-    channel = PickleChannel(channel)
-    basetemp = None
-    if gateway.spec.popen:
-        popenbase = config.ensuretemp("popen")
-        basetemp = py.path.local.make_numbered_dir(prefix="slave-", 
-            keep=0, rootdir=popenbase)
-        basetemp = str(basetemp)
-    channel.send((config, basetemp))
-    return channel
-
-class SlaveNode(object):
-    def __init__(self, channel):
-        self.channel = channel
-
-    def __repr__(self):
-        return "<%s channel=%s>" %(self.__class__.__name__, self.channel)
-
-    def sendevent(self, eventname, *args, **kwargs):
-        self.channel.send((eventname, args, kwargs))
-
-    def run(self):
-        channel = self.channel
-        self.config, basetemp = channel.receive()
-        if basetemp:
-            self.config.basetemp = py.path.local(basetemp)
-        self.config.pytestplugins.do_configure(self.config)
-        self.sendevent("slaveready")
-        try:
-            while 1:
-                task = channel.receive()
-                if task is None: 
-                    self.sendevent("slavefinished")
-                    break
-                if isinstance(task, list):
-                    for item in task:
-                        self.runtest(item)
-                else:
-                    self.runtest(task)
-        except KeyboardInterrupt:
-            raise
-        except:
-            self.sendevent("internalerror", event.InternalException())
-            raise
-
-    def runtest(self, item):
-        runner = item._getrunner()
-        testrep = runner(item)
-        self.sendevent("itemtestreport", testrep)
-

Modified: py/trunk/py/test/dsession/nodemanage.py
==============================================================================
--- py/trunk/py/test/dsession/nodemanage.py	(original)
+++ py/trunk/py/test/dsession/nodemanage.py	Fri Mar 20 22:19:03 2009
@@ -1,8 +1,7 @@
 import py
 import sys, os
-from py.__.test.dsession.masterslave import MasterNode
+from py.__.test.dsession.txnode import MasterNode
 from py.__.execnet.gwmanage import GatewayManager
-from py.__.test import event
 
     
 class NodeManager(object):

Modified: py/trunk/py/test/dsession/testing/test_functional_dsession.py
==============================================================================
--- py/trunk/py/test/dsession/testing/test_functional_dsession.py	(original)
+++ py/trunk/py/test/dsession/testing/test_functional_dsession.py	Fri Mar 20 22:19:03 2009
@@ -1,6 +1,6 @@
 import py
 from py.__.test.dsession.dsession import DSession
-from test_masterslave import EventQueue
+from test_txnode import EventQueue
 
 class TestAsyncFunctional:
     def test_conftest_options(self, testdir):

Deleted: /py/trunk/py/test/dsession/testing/test_masterslave.py
==============================================================================
--- /py/trunk/py/test/dsession/testing/test_masterslave.py	Fri Mar 20 22:19:03 2009
+++ (empty file)
@@ -1,145 +0,0 @@
-
-import py
-from py.__.test.dsession.masterslave import MasterNode
-
-class EventQueue:
-    def __init__(self, bus, queue=None):
-        if queue is None:
-            queue = py.std.Queue.Queue()
-        self.queue = queue
-        bus.register(self)
-
-    def pyevent(self, eventname, *args, **kwargs):
-        self.queue.put((eventname, args, kwargs))
-
-    def geteventargs(self, eventname, timeout=2.0):
-        events = []
-        while 1:
-            try:
-                eventcall = self.queue.get(timeout=timeout)
-            except py.std.Queue.Empty:
-                #print "node channel", self.node.channel
-                #print "remoteerror", self.node.channel._getremoteerror()
-                print "seen events", events
-                raise IOError("did not see %r events" % (eventname))
-            else:
-                name, args, kwargs = eventcall 
-                assert isinstance(name, str)
-                if name == eventname:
-                    return args
-                events.append(name)
-
-class MySetup:
-    def __init__(self, pyfuncitem):
-        self.pyfuncitem = pyfuncitem
-
-    def geteventargs(self, eventname, timeout=2.0):
-        eq = EventQueue(self.config.bus, self.queue)
-        return eq.geteventargs(eventname, timeout=timeout)
-
-    def makenode(self, config=None):
-        if config is None:
-            config = py.test.config._reparse([])
-        self.config = config
-        self.queue = py.std.Queue.Queue()
-        self.xspec = py.execnet.XSpec("popen")
-        self.gateway = py.execnet.makegateway(self.xspec)
-        self.node = MasterNode(self.gateway, self.config, putevent=self.queue.put)
-        assert not self.node.channel.isclosed()
-        return self.node 
-
-    def finalize(self):
-        if hasattr(self, 'node'):
-            gw = self.node.gateway
-            print "exiting:", gw
-            gw.exit()
-
-def pytest_pyfuncarg_mysetup(pyfuncitem):
-    mysetup = MySetup(pyfuncitem)
-    pyfuncitem.addfinalizer(mysetup.finalize)
-    return mysetup
-
-def pytest_pyfuncarg_testdir(__call__, pyfuncitem):
-    # decorate to make us always change to testdir
-    testdir = __call__.execute(firstresult=True)
-    testdir.chdir()
-    return testdir 
-
-def test_node_hash_equality(mysetup):
-    node = mysetup.makenode()
-    node2 = mysetup.makenode()
-    assert node != node2
-    assert node == node
-    assert not (node != node)
-
-class TestMasterSlaveConnection:
-    def test_crash_invalid_item(self, mysetup):
-        node = mysetup.makenode()
-        node.send(123) # invalid item 
-        n, error = mysetup.geteventargs("testnodedown")
-        assert n is node 
-        assert str(error).find("AttributeError") != -1
-
-    def test_crash_killed(self, testdir, mysetup):
-        if not hasattr(py.std.os, 'kill'):
-            py.test.skip("no os.kill")
-        item = testdir.getitem("""
-            def test_func():
-                import os
-                os.kill(os.getpid(), 15)
-        """)
-        node = mysetup.makenode(item.config)
-        node.send(item) 
-        n, error = mysetup.geteventargs("testnodedown")
-        assert n is node 
-        assert str(error).find("Not properly terminated") != -1
-
-    def test_node_down(self, mysetup):
-        node = mysetup.makenode()
-        node.shutdown()
-        n, error = mysetup.geteventargs("testnodedown")
-        assert n is node 
-        assert not error
-        node.callback(node.ENDMARK)
-        excinfo = py.test.raises(IOError, 
-            "mysetup.geteventargs('testnodedown', timeout=0.01)")
-
-    def test_send_on_closed_channel(self, testdir, mysetup):
-        item = testdir.getitem("def test_func(): pass")
-        node = mysetup.makenode(item.config)
-        node.channel.close()
-        py.test.raises(IOError, "node.send(item)")
-        #ev = self.geteventargs(event.InternalException)
-        #assert ev.excinfo.errisinstance(IOError)
-
-    def test_send_one(self, testdir, mysetup):
-        item = testdir.getitem("def test_func(): pass")
-        node = mysetup.makenode(item.config)
-        node.send(item)
-        ev, = mysetup.geteventargs("itemtestreport")
-        assert ev.passed 
-        assert ev.colitem == item
-        #assert event.item == item 
-        #assert event.item is not item 
-
-    def test_send_some(self, testdir, mysetup):
-        items = testdir.getitems("""
-            def test_pass(): 
-                pass
-            def test_fail():
-                assert 0
-            def test_skip():
-                import py
-                py.test.skip("x")
-        """)
-        node = mysetup.makenode(items[0].config)
-        for item in items:
-            node.send(item)
-        for outcome in "passed failed skipped".split():
-            ev, = mysetup.geteventargs("itemtestreport")
-            assert getattr(ev, outcome) 
-
-        node.sendlist(items)
-        for outcome in "passed failed skipped".split():
-            ev, = mysetup.geteventargs("itemtestreport")
-            assert getattr(ev, outcome) 

Copied: py/trunk/py/test/dsession/testing/test_txnode.py (from r63154, py/trunk/py/test/dsession/testing/test_masterslave.py)
==============================================================================
--- py/trunk/py/test/dsession/testing/test_masterslave.py	(original)
+++ py/trunk/py/test/dsession/testing/test_txnode.py	Fri Mar 20 22:19:03 2009
@@ -1,6 +1,6 @@
 
 import py
-from py.__.test.dsession.masterslave import MasterNode
+from py.__.test.dsession.txnode import MasterNode
 
 class EventQueue:
     def __init__(self, bus, queue=None):

Copied: py/trunk/py/test/dsession/txnode.py (from r63153, py/trunk/py/test/dsession/masterslave.py)
==============================================================================
--- py/trunk/py/test/dsession/masterslave.py	(original)
+++ py/trunk/py/test/dsession/txnode.py	Fri Mar 20 22:19:03 2009
@@ -67,7 +67,7 @@
 def install_slave(gateway, config):
     channel = gateway.remote_exec(source="""
         from py.__.test.dsession.mypickle import PickleChannel
-        from py.__.test.dsession.masterslave import SlaveNode
+        from py.__.test.dsession.txnode import SlaveNode
         channel = PickleChannel(channel)
         slavenode = SlaveNode(channel)
         slavenode.run()



More information about the pytest-commit mailing list