[py-svn] r63162 - in py/trunk/py: . execnet execnet/testing test test/dsession test/dsession/testing test/plugin test/testing

hpk at codespeak.net hpk at codespeak.net
Sat Mar 21 02:31:29 CET 2009


Author: hpk
Date: Sat Mar 21 02:31:27 2009
New Revision: 63162

Added:
   py/trunk/py/execnet/testing/conftest.py
Modified:
   py/trunk/py/_com.py
   py/trunk/py/execnet/gateway.py
   py/trunk/py/execnet/gwmanage.py
   py/trunk/py/execnet/testing/test_gwmanage.py
   py/trunk/py/test/config.py
   py/trunk/py/test/dsession/dsession.py
   py/trunk/py/test/dsession/nodemanage.py
   py/trunk/py/test/dsession/testing/test_functional_dsession.py
   py/trunk/py/test/dsession/testing/test_nodemanage.py
   py/trunk/py/test/plugin/pytest_default.py
   py/trunk/py/test/plugin/pytest_terminal.py
   py/trunk/py/test/testing/acceptance_test.py
   py/trunk/py/test/testing/test_config.py
Log:
all tests pass again, output on test node setup and initialization is now much nicer. 


Modified: py/trunk/py/_com.py
==============================================================================
--- py/trunk/py/_com.py	(original)
+++ py/trunk/py/_com.py	Sat Mar 21 02:31:27 2009
@@ -36,22 +36,22 @@
 
     def execute(self, firstresult=False):
         while self.methods:
-            self.currentmethod = self.methods.pop()
+            self.currentmethod = currentmethod = self.methods.pop()
             # provide call introspection if "__call__" is the first positional argument 
-            if hasattr(self.currentmethod, 'im_self'):
-                varnames = self.currentmethod.im_func.func_code.co_varnames
+            if hasattr(currentmethod, 'im_self'):
+                varnames = currentmethod.im_func.func_code.co_varnames
                 needscall = varnames[1:2] == ('__call__',)
             else:
                 try:
-                    varnames = self.currentmethod.func_code.co_varnames
+                    varnames = currentmethod.func_code.co_varnames
                 except AttributeError:
                     # builtin function
                     varnames = ()
                 needscall = varnames[:1] == ('__call__',)
             if needscall:
-                res = self.currentmethod(self, *self.args, **self.kwargs)
+                res = currentmethod(self, *self.args, **self.kwargs)
             else:
-                res = self.currentmethod(*self.args, **self.kwargs)
+                res = currentmethod(*self.args, **self.kwargs)
             if hasattr(self, '_ex1'):
                 self.results = [res]
                 break

Modified: py/trunk/py/execnet/gateway.py
==============================================================================
--- py/trunk/py/execnet/gateway.py	(original)
+++ py/trunk/py/execnet/gateway.py	Sat Mar 21 02:31:27 2009
@@ -249,6 +249,7 @@
                 channel.send(dict(
                     executable = sys.executable, 
                     version_info = sys.version_info, 
+                    platform = sys.platform,
                     cwd = os.getcwd(),
                 ))
             """).receive())

Modified: py/trunk/py/execnet/gwmanage.py
==============================================================================
--- py/trunk/py/execnet/gwmanage.py	(original)
+++ py/trunk/py/execnet/gwmanage.py	Sat Mar 21 02:31:27 2009
@@ -34,7 +34,7 @@
             gw = py.execnet.makegateway(spec)
             self.gateways.append(gw)
             gw.id = "[%s]" % len(self.gateways)
-            self.notify("gwmanage_newgateway", gw)
+            self.notify("gwmanage_newgateway", gw, gw._rinfo())
 
     def getgateways(self, remote=True, inplacelocal=True):
         if not self.gateways and self.specs:

Added: py/trunk/py/execnet/testing/conftest.py
==============================================================================
--- (empty file)
+++ py/trunk/py/execnet/testing/conftest.py	Sat Mar 21 02:31:27 2009
@@ -0,0 +1,3 @@
+
+pytest_plugins = "pytest_pytester"
+

Modified: py/trunk/py/execnet/testing/test_gwmanage.py
==============================================================================
--- py/trunk/py/execnet/testing/test_gwmanage.py	(original)
+++ py/trunk/py/execnet/testing/test_gwmanage.py	Sat Mar 21 02:31:27 2009
@@ -8,8 +8,6 @@
 import py
 from py.__.execnet.gwmanage import GatewayManager, HostRSync
 
-pytest_plugins = "pytest_pytester"
-
 class TestGatewayManagerPopen:
     def test_popen_no_default_chdir(self):
         gm = GatewayManager(["popen"])
@@ -22,20 +20,21 @@
         for spec in GatewayManager(l, defaultchdir="abc").specs:
             assert spec.chdir == "abc"
         
-    def test_hostmanager_popen_makegateway(self, eventrecorder):
+    def test_popen_makegateway_events(self, eventrecorder):
         hm = GatewayManager(["popen"] * 2)
         hm.makegateways()
         event = eventrecorder.popevent("gwmanage_newgateway")
-        gw = event.args[0]
+        gw, platinfo = event.args[:2]
         assert gw.id == "[1]" 
+        platinfo.executable = gw._rinfo().executable
         event = eventrecorder.popevent("gwmanage_newgateway")
-        gw = event.args[0]
+        gw, platinfo = event.args[:2]
         assert gw.id == "[2]" 
         assert len(hm.gateways) == 2
         hm.exit()
         assert not len(hm.gateways) 
 
-    def test_hostmanager_popens_rsync(self, source):
+    def test_popens_rsync(self, source):
         hm = GatewayManager(["popen"] * 2)
         hm.makegateways()
         assert len(hm.gateways) == 2
@@ -47,7 +46,7 @@
         hm.exit()
         assert not len(hm.gateways) 
 
-    def test_hostmanager_rsync_popen_with_path(self, source, dest):
+    def test_rsync_popen_with_path(self, source, dest):
         hm = GatewayManager(["popen//chdir=%s" %dest] * 1)
         hm.makegateways()
         source.ensure("dir1", "dir2", "hello")

Modified: py/trunk/py/test/config.py
==============================================================================
--- py/trunk/py/test/config.py	(original)
+++ py/trunk/py/test/config.py	Sat Mar 21 02:31:27 2009
@@ -250,6 +250,45 @@
         else:
             raise ValueError("unknown io capturing: " + iocapture)
 
+    def getxspecs(self):
+        config = self 
+        if config.option.numprocesses:
+            if config.option.executable:
+                s = 'popen//python=%s' % config.option.executable
+            else:
+                s = 'popen'
+            xspec = [s] * config.option.numprocesses
+        else:
+            xspec = config.option.xspec
+            if not xspec:
+                xspec = config.getvalue("xspec")
+        if xspec is None:
+            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 xspec]
+
+    def getrsyncdirs(self):
+        config = self 
+        roots = config.option.rsyncdirs
+        if roots:
+            roots = [py.path.local(x) for x in roots.split(',')]
+        else:
+            roots = []
+        conftestroots = config.getconftest_pathlist("rsyncdirs")
+        if conftestroots:
+            roots.extend(conftestroots)
+        pydir = py.path.local(py.__file__).dirpath()
+        for root in roots:
+            if not root.check():
+                raise ValueError("rsyncdir doesn't exist: %r" %(root,))
+            if pydir is not None and root.basename == "py":
+                if root != pydir:
+                    raise ValueError("root %r conflicts with current %r" %(root, pydir))
+                pydir = None
+        if pydir is not None:
+            roots.append(pydir)
+        return roots 
+
     
 #
 # helpers

Modified: py/trunk/py/test/dsession/dsession.py
==============================================================================
--- py/trunk/py/test/dsession/dsession.py	(original)
+++ py/trunk/py/test/dsession/dsession.py	Sat Mar 21 02:31:27 2009
@@ -9,7 +9,7 @@
 from py.__.test.runner import basic_run_report, basic_collect_report
 from py.__.test.session import Session
 from py.__.test import outcome 
-from py.__.test.dsession.nodemanage import NodeManager, getxspecs
+from py.__.test.dsession.nodemanage import NodeManager
 
 import Queue 
 
@@ -82,7 +82,7 @@
         if option.executable and not option.dist and not option.numprocesses:
             option.numprocesses = 1
         try:
-            getxspecs(self.config)
+            self.config.getxspecs()
         except self.config.Error:
             print "Please specify test environments for distribution of tests:"
             print "py.test --tx ssh=user at somehost --tx popen//python=python2.5"

Modified: py/trunk/py/test/dsession/nodemanage.py
==============================================================================
--- py/trunk/py/test/dsession/nodemanage.py	(original)
+++ py/trunk/py/test/dsession/nodemanage.py	Sat Mar 21 02:31:27 2009
@@ -8,8 +8,8 @@
     def __init__(self, config, specs=None):
         self.config = config 
         if specs is None:
-            specs = getxspecs(self.config)
-        self.roots = getconfigroots(config)
+            specs = self.config.getxspecs()
+        self.roots = self.config.getrsyncdirs()
         self.gwmanager = GatewayManager(specs)
         self.nodes = []
 
@@ -88,39 +88,3 @@
         # XXX teardown nodes? 
         self.gwmanager.exit()
 
-def getxspecs(config):
-    if config.option.numprocesses:
-        if config.option.executable:
-            s = 'popen//python=%s' % config.option.executable
-        else:
-            s = 'popen'
-        xspecs = [s] * config.option.numprocesses
-    else:
-        xspecs = config.option.xspecs
-        if not xspecs:
-            xspecs = config.getvalue("xspecs")
-    if xspecs is None:
-        raise config.Error("MISSING test execution (tx) nodes: please specify --tx")
-    #print "option value for xspecs", xspecs
-    return [py.execnet.XSpec(x) for x in xspecs]
-
-def getconfigroots(config):
-    roots = config.option.rsyncdirs
-    if roots:
-        roots = [py.path.local(x) for x in roots.split(',')]
-    else:
-        roots = []
-    conftestroots = config.getconftest_pathlist("rsyncdirs")
-    if conftestroots:
-        roots.extend(conftestroots)
-    pydir = py.path.local(py.__file__).dirpath()
-    for root in roots:
-        if not root.check():
-            raise ValueError("rsyncdir doesn't exist: %r" %(root,))
-        if pydir is not None and root.basename == "py":
-            if root != pydir:
-                raise ValueError("root %r conflicts with current %r" %(root, pydir))
-            pydir = None
-    if pydir is not None:
-        roots.append(pydir)
-    return roots 

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	Sat Mar 21 02:31:27 2009
@@ -68,7 +68,7 @@
             "--tx=popen//chdir=%(dest)s" % locals(), p)
         assert result.ret == 0
         result.stdout.fnmatch_lines([
-            "*1* instantiated gateway *popen*",
+            "*1* new *popen*platform*",
             #"RSyncStart: [G1]",
             #"RSyncFinished: [G1]",
             "*1 passed*"

Modified: py/trunk/py/test/dsession/testing/test_nodemanage.py
==============================================================================
--- py/trunk/py/test/dsession/testing/test_nodemanage.py	(original)
+++ py/trunk/py/test/dsession/testing/test_nodemanage.py	Sat Mar 21 02:31:27 2009
@@ -3,7 +3,7 @@
 """
 
 import py
-from py.__.test.dsession.nodemanage import NodeManager, getxspecs, getconfigroots
+from py.__.test.dsession.nodemanage import NodeManager
 
 from py.__.test import event
 
@@ -120,12 +120,12 @@
 class TestOptionsAndConfiguration:
     def test_getxspecs_numprocesses(self, testdir):
         config = testdir.parseconfig("-n3")
-        xspecs = getxspecs(config)
+        xspecs = config.getxspecs()
         assert len(xspecs) == 3
 
     def test_getxspecs(self, testdir):
         config = testdir.parseconfig("--tx=popen", "--tx", "ssh=xyz")
-        xspecs = getxspecs(config)
+        xspecs = config.getxspecs()
         assert len(xspecs) == 2
         print xspecs
         assert xspecs[0].popen 
@@ -133,7 +133,7 @@
 
     def test_getconfigroots(self, testdir):
         config = testdir.parseconfig('--rsyncdirs=' + str(testdir.tmpdir))
-        roots = getconfigroots(config)
+        roots = config.getrsyncdirs()
         assert len(roots) == 1 + 1 
         assert testdir.tmpdir in roots
 
@@ -146,7 +146,7 @@
             rsyncdirs= 'x', 
         """)
         config = testdir.parseconfig(testdir.tmpdir, '--rsyncdirs=y,z')
-        roots = getconfigroots(config)
+        roots = config.getrsyncdirs()
         assert len(roots) == 3 + 1 
         assert py.path.local('y') in roots 
         assert py.path.local('z') in roots 

Modified: py/trunk/py/test/plugin/pytest_default.py
==============================================================================
--- py/trunk/py/test/plugin/pytest_default.py	(original)
+++ py/trunk/py/test/plugin/pytest_default.py	Sat Mar 21 02:31:27 2009
@@ -97,7 +97,7 @@
         group.addoption('--rsyncdirs', dest="rsyncdirs", default=None, metavar="dir1,dir2,...", 
                    help="comma-separated list of directories to rsync. All those roots will be rsynced "
                         "into a corresponding subdir on the remote sides. ")
-        group.addoption('--tx', dest="xspecs", action="append", 
+        group._addoption('--xspec', '--tx', '-t', dest="xspec", action="append", 
                    help=("add a test environment, specified in XSpec syntax. examples: "
                          "--tx popen//python=python2.5 --tx socket=192.168.1.102"))
         group._addoption('--exec',

Modified: py/trunk/py/test/plugin/pytest_terminal.py
==============================================================================
--- py/trunk/py/test/plugin/pytest_terminal.py	(original)
+++ py/trunk/py/test/plugin/pytest_terminal.py	Sat Mar 21 02:31:27 2009
@@ -84,8 +84,22 @@
         for line in str(event.repr).split("\n"):
             self.write_line("InternalException: " + line)
 
-    def pyevent_gwmanage_newgateway(self, gateway):
-        self.write_line("%s instantiated gateway from spec %r" %(gateway.id, gateway.spec._spec))
+    def pyevent_gwmanage_newgateway(self, gateway, rinfo):
+        #self.write_line("%s instantiated gateway from spec %r" %(gateway.id, gateway.spec._spec))
+        d = {}
+        d['version'] = repr_pythonversion(rinfo.version_info)
+        d['id'] = gateway.id
+        d['spec'] = gateway.spec._spec 
+        d['platform'] = rinfo.platform 
+        if self.config.option.verbose:
+            d['extra'] = "- " + rinfo.executable
+        else:
+            d['extra'] = ""
+        d['cwd'] = rinfo.cwd
+        self.write_line("%(id)s new %(spec)r -- platform %(platform)s, "
+                        "Python %(version)s "
+                        "cwd: %(cwd)s"
+                        "%(extra)s" % d)
 
     def pyevent_gwmanage_rsyncstart(self, source, gateways):
         targets = ", ".join([gw.id for gw in gateways])
@@ -107,19 +121,12 @@
             self.write_line(msg)
 
     def pyevent_testnodeready(self, node):
-        # XXX 
-        self.write_line("Node Ready: %r, spec %r" % (node,node.gateway.spec))
+        self.write_line("%s node ready to receive tests" %(node.gateway.id,))
         
-        #d = event.platinfo.copy()
-        #d['host'] = getattr(event.host, 'address', event.host)
-        #d['version'] = repr_pythonversion(d['sys.version_info'])
-        #self.write_line("HOSTUP: %(host)s %(sys.platform)s "
-        #              "%(sys.executable)s - Python %(version)s" %
-        #              d)
 
     def pyevent_testnodedown(self, node, error):
         if error:
-            self.write_line("Node Down: %r: %r" %(node, error))
+            self.write_line("%s node down, error: %s" %(node.gateway.id, error))
 
     def pyevent_trace(self, category, msg):
         if self.config.option.debug or \
@@ -175,6 +182,13 @@
     def pyevent_testrunstart(self, event):
         self.write_sep("=", "test session starts", bold=True)
         self._sessionstarttime = py.std.time.time()
+
+        verinfo = ".".join(map(str, sys.version_info[:3]))
+        msg = "python: platform %s -- Python %s" % (sys.platform, verinfo)
+        if self.config.option.verbose or self.config.option.debug:
+            msg += " -- " + str(sys.executable)
+        self.write_line(msg)
+
         rev = py.__pkg__.getrev()
         self.write_line("using py lib: %s <rev %s>" % (
                        py.path.local(py.__file__).dirpath(), rev))
@@ -431,9 +445,15 @@
         class gw2:
             id = "X2"
             spec = py.execnet.XSpec("popen")
-        rep.pyevent_gwmanage_newgateway(gateway=gw1)
+        class rinfo:
+            version_info = (2, 5, 1, 'final', 0)
+            executable = "hello"
+            platform = "xyz"
+            cwd = "qwe"
+
+        rep.pyevent_gwmanage_newgateway(gw1, rinfo)
         linecomp.assert_contains_lines([
-            "X1 instantiated gateway from spec*", 
+            "X1 new 'popen' *xyz*2.5*"
         ])
 
         rep.pyevent_gwmanage_rsyncstart(source="hello", gateways=[gw1, gw2])

Modified: py/trunk/py/test/testing/acceptance_test.py
==============================================================================
--- py/trunk/py/test/testing/acceptance_test.py	(original)
+++ py/trunk/py/test/testing/acceptance_test.py	Sat Mar 21 02:31:27 2009
@@ -179,8 +179,8 @@
         verinfo = ".".join(map(str, py.std.sys.version_info[:3]))
         extra = result.stdout.fnmatch_lines([
             "*===== test session starts ====*",
-            "HOSTUP*INPROCESS* %s %s - Python %s*" %(
-                    py.std.sys.platform, py.std.sys.executable, verinfo),
+            "python: platform %s -- Python %s*" %(
+                    py.std.sys.platform, verinfo), # , py.std.sys.executable),
             "*test_header_trailer_info.py .",
             "=* 1 passed in *.[0-9][0-9] seconds *=", 
         ])
@@ -265,11 +265,10 @@
                     py.test.skip("hello")
             """, 
         )
-        result = testdir.runpytest(p1, '-d', '--tx popen --tx popen')
+        result = testdir.runpytest(p1, '-d', '--tx=popen', '--tx=popen')
         result.stdout.fnmatch_lines([
-            "HOSTUP: popen*Python*",
-            #"HOSTUP: localhost*Python*",
-            #"HOSTUP: localhost*Python*",
+            "*1*popen*Python*",
+            "*2*popen*Python*",
             "*2 failed, 1 passed, 1 skipped*",
         ])
         assert result.ret == 1
@@ -288,13 +287,13 @@
             """, 
         )
         testdir.makeconftest("""
-            pytest_option_tx = 'popen popen popen'.split()
+            pytest_option_xspec = 'popen popen popen'.split()
         """)
         result = testdir.runpytest(p1, '-d')
         result.stdout.fnmatch_lines([
-            "HOSTUP: popen*Python*",
-            #"HOSTUP: localhost*Python*",
-            #"HOSTUP: localhost*Python*",
+            "*1*popen*Python*",
+            "*2*popen*Python*",
+            "*3*popen*Python*",
             "*2 failed, 1 passed, 1 skipped*",
         ])
         assert result.ret == 1
@@ -325,7 +324,7 @@
             "*popen*Python*",
             "*popen*Python*",
             "*popen*Python*",
-            "HostDown*TERMINATED*",
+            "*node down*",
             "*3 failed, 1 passed, 1 skipped*"
         ])
         assert result.ret == 1

Modified: py/trunk/py/test/testing/test_config.py
==============================================================================
--- py/trunk/py/test/testing/test_config.py	(original)
+++ py/trunk/py/test/testing/test_config.py	Sat Mar 21 02:31:27 2009
@@ -111,8 +111,6 @@
         assert config2.basetemp != config3.basetemp
 
 class TestConfigAPI: 
-
-
     def test_config_getvalue_honours_conftest(self, testdir):
         testdir.makepyfile(conftest="x=1")
         testdir.mkdir("sub").join("conftest.py").write("x=2 ; y = 3")



More information about the pytest-commit mailing list