[py-svn] r38192 - in py/trunk/py/test/rsession: . testing

hpk at codespeak.net hpk at codespeak.net
Thu Feb 8 19:35:26 CET 2007


Author: hpk
Date: Thu Feb  8 19:35:18 2007
New Revision: 38192

Modified:
   py/trunk/py/test/rsession/hostmanage.py
   py/trunk/py/test/rsession/testing/test_hostmanage.py
Log:
streamlining localhost optimization handling,
and simplifying the test a bit. 


Modified: py/trunk/py/test/rsession/hostmanage.py
==============================================================================
--- py/trunk/py/test/rsession/hostmanage.py	(original)
+++ py/trunk/py/test/rsession/hostmanage.py	Thu Feb  8 19:35:18 2007
@@ -17,14 +17,10 @@
     def __init__(self, spec):
         parts = spec.split(':', 1)
         self.hostname = parts.pop(0)
-        if parts and parts[0]:
-            self.relpath = parts[0]
-        else:
-            self.relpath = "pytestcache-" + self.hostname
-        if spec.find(':') == -1 and self.hostname == 'localhost':
-            self.rsync_flag = False
-        else:
-            self.rsync_flag = True
+        self.relpath = parts and parts.pop(0) or ""
+        if not self.relpath and self.hostname != "localhost":
+            self.relpath = "pytestcache-%s" % self.hostname
+        assert not parts
         self.hostid = self._getuniqueid(self.hostname) 
 
     def _getuniqueid(self, hostname):
@@ -33,23 +29,24 @@
         l.append(hostid)
         return hostid
 
-    def initgateway(self, python="python"):
-        assert not hasattr(self, 'gw')
+    def initgateway(self, python="python", topdir=None):
         if self.hostname == "localhost":
-            gw = py.execnet.PopenGateway(python=python)
+            self.gw = py.execnet.PopenGateway(python=python)
         else:
-            gw = py.execnet.SshGateway(self.hostname, 
-                                       remotepython=python)
-        self.gw = gw
-        channel = gw.remote_exec(py.code.Source(
+            self.gw = py.execnet.SshGateway(self.hostname, 
+                                            remotepython=python)
+        relpath = self.relpath or topdir 
+        assert relpath 
+        channel = self.gw.remote_exec(py.code.Source(
             gethomedir, 
             getpath_relto_home, """
             import os
             os.chdir(gethomedir())
-            newdir = getpath_relto_home(%r)
-            # we intentionally don't ensure that 'newdir' exists 
-            channel.send(newdir)
-            """ % str(self.relpath)
+            path = %r
+            if path:
+                path = getpath_relto_home(path)
+            channel.send(path)
+            """ % str(relpath)
         ))
         self.gw_remotepath = channel.receive()
 
@@ -71,13 +68,13 @@
 class HostRSync(py.execnet.RSync):
     """ RSyncer that filters out common files 
     """
-    def __init__(self, source, *args, **kwargs):
+    def __init__(self, sourcedir, *args, **kwargs):
         self._synced = {}
         ignores= None
         if 'ignores' in kwargs:
             ignores = kwargs.pop('ignores')
         self._ignores = ignores or []
-        super(HostRSync, self).__init__(source, **kwargs)
+        super(HostRSync, self).__init__(sourcedir=sourcedir, **kwargs)
 
     def filter(self, path):
         path = py.path.local(path)
@@ -91,20 +88,22 @@
                         return True
 
     def add_target_host(self, host, reporter=lambda x: None,
-                        destrelpath=None, finishedcallback=None):
-        key = host.hostname, host.relpath 
-        if not host.rsync_flag or key in self._synced:
+                        destrelpath="", finishedcallback=None):
+        remotepath = host.relpath
+        key = host.hostname, remotepath
+        if host.hostname == "localhost" and not remotepath: 
+            p = py.path.local(host.gw_remotepath)
+            assert p.join(destrelpath) == self._sourcedir
+            self._synced[key] = True
+        if key in self._synced:
             if finishedcallback:
                 finishedcallback()
             return False
         self._synced[key] = True
         # the follow attributes are set from host.initgateway()
-        gw = host.gw
-        remotepath = host.gw_remotepath
-        if destrelpath is not None:
+        if destrelpath:
             remotepath = os.path.join(remotepath, destrelpath)
-        super(HostRSync, self).add_target(gw, 
-                                          remotepath, 
+        super(HostRSync, self).add_target(host.gw, remotepath, 
                                           finishedcallback,
                                           delete=True,
                                           )
@@ -123,9 +122,9 @@
         self.roots = roots
 
     def prepare_gateways(self, reporter):
-        dist_remotepython = self.config.getvalue("dist_remotepython")
+        python = self.config.getvalue("dist_remotepython")
         for host in self.hosts:
-            host.initgateway(python=dist_remotepython)
+            host.initgateway(python=python, topdir=self.config.topdir)
             reporter(repevent.HostGatewayReady(host, self.roots))
             host.gw.host = host
 

Modified: py/trunk/py/test/rsession/testing/test_hostmanage.py
==============================================================================
--- py/trunk/py/test/rsession/testing/test_hostmanage.py	(original)
+++ py/trunk/py/test/rsession/testing/test_hostmanage.py	Thu Feb  8 19:35:18 2007
@@ -26,7 +26,7 @@
     def test_defaultpath(self):
         x = HostInfo("localhost:")
         assert x.hostname == "localhost"
-        assert x.relpath == "pytestcache-" + x.hostname 
+        assert not x.relpath
 
     def test_path(self):
         x = HostInfo("localhost:/tmp")
@@ -193,18 +193,15 @@
         assert not self.dest.join("dir6").check()
 
     def test_hostmanage_optimise_localhost(self):
-        def add_target(self, a, b, c):
-            assert 0, "Should not rsync here"
-        try:
-            config = py.test.config._reparse([self.source])
-            old_add_target = HostRSync.add_target
-            HostRSync.add_target = add_target
-            hm = HostManager(config, hosts=[HostInfo('localhost') for i in
-                                            range(3)])
-            events = []
-            hm.init_rsync(reporter=events.append)
-        finally:
-            HostRSync.add_target = old_add_target
+        hosts = [HostInfo("localhost") for i in range(3)]
+        config = py.test.config._reparse([self.source])
+        hm = HostManager(config, hosts=hosts)
+        events = []
+        hm.init_rsync(events.append)
+        for host in hosts:
+            assert host.gw_remotepath == str(self.source)
+            assert not host.relpath 
+        assert events
 
 def test_getpath_relto_home():
     x = getpath_relto_home("hello")



More information about the pytest-commit mailing list