From fb61a005d4bdf2ed1e1a3d0ab31805534b4717b2 Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Mon, 6 Sep 2004 14:53:24 +0000 Subject: [PATCH] Added lots of new file operations to suchild. git-svn-id: https://rox.svn.sourceforge.net/svnroot/rox/trunk/ROX-Lib2@3650 66de3db3-b00d-0410-b41b-f4738ad19bea --- python/rox/suchild.py | 20 ++++++++++++ tests/python/testproxy.py | 79 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 98 insertions(+), 1 deletion(-) diff --git a/python/rox/suchild.py b/python/rox/suchild.py index 85272cf..c32d59f 100644 --- a/python/rox/suchild.py +++ b/python/rox/suchild.py @@ -8,6 +8,7 @@ import proxy read_watches = [] write_watches = [] +streams = {} class Watch: """Contains a file descriptor and a function to call when it's ready""" @@ -59,6 +60,25 @@ class Slave: def unlink(self, request, path): os.unlink(path) request.send(None) + + def open(self, request, path, mode = 'r'): + stream = file(path, mode) + streams[id(stream)] = stream + request.send(id(stream)) + + def close(self, request, stream): + streams[stream].close() + del streams[stream] + request.send(None) + + def read(self, request, stream, length = 0): + request.send(streams[stream].read(length)) + + def write(self, request, stream, data): + request.send(streams[stream].write(data)) + + def rename(self, request, old, new): + request.send(os.rename(old, new)) if __name__ == '__main__': from select import select diff --git a/tests/python/testproxy.py b/tests/python/testproxy.py index ae9618f..e903792 100755 --- a/tests/python/testproxy.py +++ b/tests/python/testproxy.py @@ -4,7 +4,7 @@ import unittest import sys import os from os.path import dirname, abspath, join -import tempfile +import tempfile, shutil rox_lib = dirname(dirname(dirname(abspath(sys.argv[0])))) sys.path.insert(0, join(rox_lib, 'python')) @@ -115,6 +115,83 @@ class TestProxy(unittest.TestCase): g.mainquit() tasks.Task(run()) g.mainloop() + + def testFileRead(self): + tmp_file = tempfile.NamedTemporaryFile(suffix = '-roxlib-test') + tmp_file.write('Hello\n') + tmp_file.flush() + root = self.master.root + def run(): + queue = root.open(tmp_file.name) + yield queue.blocker + stream = queue.dequeue_last() + + queue = root.read(stream, 5) + yield queue.blocker + data = queue.dequeue_last() + assert data == 'Hello' + + queue = root.close(stream) + yield queue.blocker + queue.dequeue_last() + + g.mainquit() + tasks.Task(run()) + g.mainloop() + + def testFileWrite(self): + tmp_dir = tempfile.mkdtemp('-roxlib-test') + root = self.master.root + tmp_file = join(tmp_dir, 'new') + def run(): + queue = root.open(tmp_file, 'w') + yield queue.blocker + stream = queue.dequeue_last() + + assert os.path.isfile(tmp_file) + + queue = root.write(stream, 'Hello\n') + yield queue.blocker + queue.dequeue_last() + + queue = root.close(stream) + yield queue.blocker + queue.dequeue_last() + + assert file(tmp_file).read() == 'Hello\n' + + queue = root.close(stream) + yield queue.blocker + try: + queue.dequeue_last() + assert 0, 'Expected an exception!' + except KeyError: + pass + + g.mainquit() + tasks.Task(run()) + g.mainloop() + shutil.rmtree(tmp_dir) + + def testRename(self): + tmp_dir = tempfile.mkdtemp('-roxlib-test') + root = self.master.root + f = file(join(tmp_dir, 'old'), 'w') + f.write('Hello\n') + f.close() + + def run(): + queue = root.rename(join(tmp_dir, 'old'), + join(tmp_dir, 'new')) + yield queue.blocker + queue.dequeue_last() + + assert file(join(tmp_dir, 'new')).read() == 'Hello\n' + + g.mainquit() + tasks.Task(run()) + g.mainloop() + shutil.rmtree(tmp_dir) sys.argv.append('-v') unittest.main() -- 2.11.4.GIT