diff options
author | Sebastian Thiel <byronimo@gmail.com> | 2010-06-05 19:59:17 +0200 |
---|---|---|
committer | Sebastian Thiel <byronimo@gmail.com> | 2010-06-05 19:59:17 +0200 |
commit | 61138f2ece0cb864b933698174315c34a78835d1 (patch) | |
tree | bf764cc491c7f29bb4e9cb97b42d75b4b5c6458b /test/git/mp | |
parent | 50e469109eed3a752d9a1b0297f16466ad92f8d2 (diff) | |
download | gitpython-61138f2ece0cb864b933698174315c34a78835d1.tar.gz |
Moved multiprocessing modules into own package, as they in fact have nothing to do with the object db. If that really works the way I want, it will become an own project, called async
Diffstat (limited to 'test/git/mp')
-rw-r--r-- | test/git/mp/__init__.py | 0 | ||||
-rw-r--r-- | test/git/mp/test_channel.py | 61 | ||||
-rw-r--r-- | test/git/mp/test_pool.py | 10 | ||||
-rw-r--r-- | test/git/mp/test_thread.py | 47 |
4 files changed, 118 insertions, 0 deletions
diff --git a/test/git/mp/__init__.py b/test/git/mp/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/test/git/mp/__init__.py diff --git a/test/git/mp/test_channel.py b/test/git/mp/test_channel.py new file mode 100644 index 00000000..9b667372 --- /dev/null +++ b/test/git/mp/test_channel.py @@ -0,0 +1,61 @@ +"""Channel testing""" +from test.testlib import * +from git.mp.channel import * + +import time + +class TestChannels(TestBase): + + def test_base(self): + # creating channel yields a write and a read channal + wc, rc = Channel() + assert isinstance(wc, WChannel) + assert isinstance(rc, RChannel) + + # everything else fails + self.failUnlessRaises(ValueError, Channel, 1, "too many args") + + # TEST UNLIMITED SIZE CHANNEL - writing+reading is FIFO + item = 1 + item2 = 2 + wc.write(item) + wc.write(item2) + assert rc.read() == item + assert rc.read() == item2 + + # next read blocks, then raises - it waits a second + st = time.time() + self.failUnlessRaises(IOError, rc.read, True, 1) + assert time.time() - st >= 1.0 + + # writing to a closed channel raises + assert not wc.closed + wc.close() + assert wc.closed + wc.close() # fine + assert wc.closed + + self.failUnlessRaises(IOError, wc.write, 1) + + # reading from a closed channel never blocks + self.failUnlessRaises(IOError, rc.read) + + + + # TEST LIMITED SIZE CHANNEL + # channel with max-items set + wc, rc = Channel(1) + wc.write(item) # fine + + # blocks for a second, its full + st = time.time() + self.failUnlessRaises(IOError, wc.write, item, True, 1) + assert time.time() - st >= 1.0 + + # get one + assert rc.read() == item + + # its empty,can put one again + wc.write(item2) + assert rc.read() == item2 + wc.close() diff --git a/test/git/mp/test_pool.py b/test/git/mp/test_pool.py new file mode 100644 index 00000000..7c4a366f --- /dev/null +++ b/test/git/mp/test_pool.py @@ -0,0 +1,10 @@ +"""Channel testing""" +from test.testlib import * +from git.mp.pool import * + +import time + +class TestThreadPool(TestBase): + + def test_base(self): + pass diff --git a/test/git/mp/test_thread.py b/test/git/mp/test_thread.py new file mode 100644 index 00000000..9625aabb --- /dev/null +++ b/test/git/mp/test_thread.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +""" Test thead classes and functions""" +from test.testlib import * +from git.mp.thread import * +from Queue import Queue + +class TestWorker(WorkerThread): + def __init__(self, *args, **kwargs): + super(TestWorker, self).__init__(*args, **kwargs) + self.reset() + + def fun(self, *args, **kwargs): + self.called = True + self.args = args + self.kwargs = kwargs + return True + + def make_assertion(self): + assert self.called + assert self.args + assert self.kwargs + self.reset() + + def reset(self): + self.called = False + self.args = None + self.kwargs = None + + +class TestThreads( TestCase ): + + @terminate_threads + def test_worker_thread(self): + worker = TestWorker() + assert isinstance(worker.start(), WorkerThread) + + # test different method types + standalone_func = lambda *args, **kwargs: worker.fun(*args, **kwargs) + for function in ("fun", TestWorker.fun, worker.fun, standalone_func): + rval = worker.call(function, 1, this='that') + assert isinstance(rval, Queue) + assert rval.get() is True + worker.make_assertion() + # END for each function type + + worker.call('quit') + |