[py-svn] r37960 - in py/trunk/py/execnet: . testing
hpk at codespeak.net
hpk at codespeak.net
Mon Feb 5 13:55:33 CET 2007
Author: hpk
Date: Mon Feb 5 13:55:31 2007
New Revision: 37960
Modified:
py/trunk/py/execnet/rsync.py
py/trunk/py/execnet/testing/test_rsync.py
Log:
refactored the tests and added tests and code
for disallowing to send() twice without
adding new targets.
Modified: py/trunk/py/execnet/rsync.py
==============================================================================
--- py/trunk/py/execnet/rsync.py (original)
+++ py/trunk/py/execnet/rsync.py Mon Feb 5 13:55:31 2007
@@ -28,18 +28,6 @@
def filter(self, path):
return True
- def add_target(self, gateway, destdir, finishedcallback=None):
- """ Adds a remote target specified via a 'gateway'
- and a remote destination directory.
- """
- assert finishedcallback is None or callable(finishedcallback)
- def itemcallback(req):
- self._receivequeue.put((channel, req))
- channel = gateway.remote_exec(REMOTE_SOURCE)
- channel.setcallback(itemcallback, endmarker = None)
- channel.send((str(destdir), self._options))
- self._channels[channel] = finishedcallback
-
def _end_of_channel(self, channel):
if channel in self._channels:
# too early! we must have got an error
@@ -104,6 +92,9 @@
def send(self, sourcedir):
""" Sends a sourcedir to all added targets.
"""
+ if not self._channels:
+ raise IOError("no targets available, maybing you "
+ "are trying call send() twice?")
self._sourcedir = str(sourcedir)
# normalize a trailing '/' away
self._sourcedir = os.path.dirname(os.path.join(self._sourcedir, 'x'))
@@ -137,6 +128,19 @@
else:
assert "Unknown command %s" % command
+ def add_target(self, gateway, destdir, finishedcallback=None):
+ """ Adds a remote target specified via a 'gateway'
+ and a remote destination directory.
+ """
+ assert finishedcallback is None or callable(finishedcallback)
+ def itemcallback(req):
+ self._receivequeue.put((channel, req))
+ channel = gateway.remote_exec(REMOTE_SOURCE)
+ channel.setcallback(itemcallback, endmarker = None)
+ channel.send((str(destdir), self._options))
+ self._channels[channel] = finishedcallback
+
+
def _broadcast(self, msg):
for channel in self._channels:
channel.send(msg)
Modified: py/trunk/py/execnet/testing/test_rsync.py
==============================================================================
--- py/trunk/py/execnet/testing/test_rsync.py (original)
+++ py/trunk/py/execnet/testing/test_rsync.py Mon Feb 5 13:55:31 2007
@@ -11,92 +11,114 @@
mod.gw2.exit()
-def test_dirsync():
- base = py.test.ensuretemp('dirsync')
- dest = base.join('dest')
- dest2 = base.join('dest2')
- source = base.mkdir('source')
+class DirSetup:
+ def setup_method(self, method):
+ name = "%s.%s" %(self.__class__.__name__, method.func_name)
+ self.tmpdir = t = py.test.ensuretemp(name)
+ self.source = t.join("source")
+ self.dest1 = t.join("dest1")
+ self.dest2 = t.join("dest2")
- for s in ('content1', 'content2-a-bit-longer'):
- source.ensure('subdir', 'file1').write(s)
+class TestRSync(DirSetup):
+ def test_notargets(self):
+ rsync = RSync()
+ py.test.raises(IOError, "rsync.send(self.source)")
+
+ def test_dirsync(self):
+ dest = self.dest1
+ dest2 = self.dest2
+ source = self.source
+
+ for s in ('content1', 'content2-a-bit-longer'):
+ source.ensure('subdir', 'file1').write(s)
+ rsync = RSync()
+ rsync.add_target(gw, dest)
+ rsync.add_target(gw2, dest2)
+ rsync.send(source)
+ assert dest.join('subdir').check(dir=1)
+ assert dest.join('subdir', 'file1').check(file=1)
+ assert dest.join('subdir', 'file1').read() == s
+ assert dest2.join('subdir').check(dir=1)
+ assert dest2.join('subdir', 'file1').check(file=1)
+ assert dest2.join('subdir', 'file1').read() == s
+
+ source.join('subdir').remove('file1')
rsync = RSync()
- rsync.add_target(gw, dest)
rsync.add_target(gw2, dest2)
+ rsync.add_target(gw, dest)
rsync.send(source)
- assert dest.join('subdir').check(dir=1)
assert dest.join('subdir', 'file1').check(file=1)
- assert dest.join('subdir', 'file1').read() == s
- assert dest2.join('subdir').check(dir=1)
assert dest2.join('subdir', 'file1').check(file=1)
- assert dest2.join('subdir', 'file1').read() == s
-
- source.join('subdir').remove('file1')
- rsync = RSync()
- rsync.add_target(gw2, dest2)
- rsync.add_target(gw, dest)
- rsync.send(source)
- assert dest.join('subdir', 'file1').check(file=1)
- assert dest2.join('subdir', 'file1').check(file=1)
- rsync = RSync(delete=True)
- rsync.add_target(gw2, dest2)
- rsync.add_target(gw, dest)
- rsync.send(source)
- assert not dest.join('subdir', 'file1').check()
- assert not dest2.join('subdir', 'file1').check()
-
-def test_symlink_rsync():
- if py.std.sys.platform == 'win32':
- py.test.skip("symlinks are unsupported on Windows.")
- base = py.test.ensuretemp('symlinkrsync')
- dest = base.join('dest')
- source = base.join('source')
- source.ensure("existant")
- source.join("rellink").mksymlinkto(source.join("existant"), absolute=0)
- source.join('abslink').mksymlinkto(source.join("existant"))
-
- rsync = RSync()
- rsync.add_target(gw, dest)
- rsync.send(source)
-
- assert dest.join('rellink').readlink() == dest.join("existant")
- assert dest.join('abslink').readlink() == dest.join("existant")
-
-def test_callback():
- base = py.test.ensuretemp('callback')
- dest = base.join("dest")
- source = base.join("source")
- source.ensure("existant").write("a" * 100)
- source.ensure("existant2").write("a" * 10)
- total = {}
- def callback(cmd, lgt, channel):
- total[(cmd, lgt)] = True
-
- rsync = RSync(callback=callback)
- #rsync = RSync()
- rsync.add_target(gw, dest)
- rsync.send(source)
-
- assert total == {("list", 110):True, ("ack", 100):True, ("ack", 10):True}
-
-def test_file_disappearing():
- base = py.test.ensuretemp("file_disappearing")
- dest = base.join("dest")
- source = base.join("source")
- source.ensure("ex").write("a" * 100)
- source.ensure("ex2").write("a" * 100)
-
- class DRsync(RSync):
- def filter(self, x):
- assert x != source
- if x.endswith("ex2"):
- self.x = 1
- source.join("ex2").remove()
- return True
-
- rsync = DRsync()
- rsync.add_target(gw, dest)
- rsync.send(source)
- assert rsync.x == 1
- assert len(dest.listdir()) == 1
- assert len(source.listdir()) == 1
-
+ rsync = RSync(delete=True)
+ rsync.add_target(gw2, dest2)
+ rsync.add_target(gw, dest)
+ rsync.send(source)
+ assert not dest.join('subdir', 'file1').check()
+ assert not dest2.join('subdir', 'file1').check()
+
+ def test_dirsync_twice(self):
+ source = self.source
+ source.ensure("hello")
+ rsync = RSync()
+ rsync.add_target(gw, self.dest1)
+ rsync.send(self.source)
+ assert self.dest1.join('hello').check()
+ py.test.raises(IOError, "rsync.send(self.source)")
+ rsync.add_target(gw, self.dest2)
+ rsync.send(self.source)
+ assert self.dest2.join('hello').check()
+ py.test.raises(IOError, "rsync.send(self.source)")
+
+ def test_symlink_rsync(self):
+ if py.std.sys.platform == 'win32':
+ py.test.skip("symlinks are unsupported on Windows.")
+ source = self.source
+ dest = self.dest1
+ self.source.ensure("existant")
+ source.join("rellink").mksymlinkto(source.join("existant"), absolute=0)
+ source.join('abslink').mksymlinkto(source.join("existant"))
+
+ rsync = RSync()
+ rsync.add_target(gw, dest)
+ rsync.send(source)
+
+ assert dest.join('rellink').readlink() == dest.join("existant")
+ assert dest.join('abslink').readlink() == dest.join("existant")
+
+ def test_callback(self):
+ dest = self.dest1
+ source = self.source
+ source.ensure("existant").write("a" * 100)
+ source.ensure("existant2").write("a" * 10)
+ total = {}
+ def callback(cmd, lgt, channel):
+ total[(cmd, lgt)] = True
+
+ rsync = RSync(callback=callback)
+ #rsync = RSync()
+ rsync.add_target(gw, dest)
+ rsync.send(source)
+
+ assert total == {("list", 110):True, ("ack", 100):True, ("ack", 10):True}
+
+ def test_file_disappearing(self):
+ dest = self.dest1
+ source = self.source
+ source.ensure("ex").write("a" * 100)
+ source.ensure("ex2").write("a" * 100)
+
+ class DRsync(RSync):
+ def filter(self, x):
+ assert x != source
+ if x.endswith("ex2"):
+ self.x = 1
+ source.join("ex2").remove()
+ return True
+
+ rsync = DRsync()
+ rsync.add_target(gw, dest)
+ rsync.send(source)
+ assert rsync.x == 1
+ assert len(dest.listdir()) == 1
+ assert len(source.listdir()) == 1
+
More information about the pytest-commit
mailing list