aboutsummaryrefslogtreecommitdiff
path: root/test/git/async/test_pool.py
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2010-06-08 13:24:44 +0200
committerSebastian Thiel <byronimo@gmail.com>2010-06-08 13:24:44 +0200
commit3776f7a766851058f6435b9f606b16766425d7ca (patch)
tree8096d6d84090f4abc5aad374c1fe6f64088572a6 /test/git/async/test_pool.py
parent09c3f39ceb545e1198ad7a3f470d4ec896ce1add (diff)
downloadGitPython-3776f7a766851058f6435b9f606b16766425d7ca.tar.gz
GitPython-3776f7a766851058f6435b9f606b16766425d7ca.zip
The new channeldesign actually works, but it also shows that its located at the wrong spot. The channel is nothing more than an adapter allowing to read multiple items from a thread-safe queue, the queue itself though must be 'closable' for writing, or needs something like a writable flag.
Diffstat (limited to 'test/git/async/test_pool.py')
-rw-r--r--test/git/async/test_pool.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/test/git/async/test_pool.py b/test/git/async/test_pool.py
index 4c20a9b2..7f5a5811 100644
--- a/test/git/async/test_pool.py
+++ b/test/git/async/test_pool.py
@@ -92,6 +92,7 @@ class TestThreadPool(TestBase):
# pull the result completely - we should get one task, which calls its
# function once. In sync mode, the order matches
+ print "read(0)"
items = rc.read()
assert len(items) == ni
task._assert(1, ni).reset(make_iter())
@@ -105,6 +106,7 @@ class TestThreadPool(TestBase):
rc = p.add_task(task)
assert p.num_tasks() == 1 + null_tasks
st = time.time()
+ print "read(1) * %i" % ni
for i in range(ni):
items = rc.read(1)
assert len(items) == 1
@@ -129,20 +131,24 @@ class TestThreadPool(TestBase):
# if we query 1 item, it will prepare ni / 2
task.min_count = ni / 2
rc = p.add_task(task)
+ print "read(1)"
items = rc.read(1)
assert len(items) == 1 and items[0] == 0 # processes ni / 2
+ print "read(1)"
items = rc.read(1)
assert len(items) == 1 and items[0] == 1 # processes nothing
# rest - it has ni/2 - 2 on the queue, and pulls ni-2
# It wants too much, so the task realizes its done. The task
# doesn't care about the items in its output channel
nri = ni-2
+ print "read(%i)" % nri
items = rc.read(nri)
assert len(items) == nri
assert p.num_tasks() == null_tasks
task._assert(2, ni) # two chunks, ni calls
# its already done, gives us no more
+ print "read(0) on closed"
assert len(rc.read()) == 0
# test chunking
@@ -154,11 +160,13 @@ class TestThreadPool(TestBase):
# count is still at ni / 2 - here we want more than that
# 2 steps with n / 4 items, + 1 step with n/4 items to get + 2
nri = ni / 2 + 2
+ print "read(%i)" % nri
items = rc.read(nri)
assert len(items) == nri
# have n / 4 - 2 items on queue, want n / 4 in first chunk, cause 1 processing
# ( 4 in total ). Still want n / 4 - 2 in second chunk, causing another processing
nri = ni / 2 - 2
+ print "read(%i)" % nri
items = rc.read(nri)
assert len(items) == nri
@@ -172,6 +180,7 @@ class TestThreadPool(TestBase):
task.min_count = None
rc = p.add_task(task)
st = time.time()
+ print "read(1) * %i, chunksize set" % ni
for i in range(ni):
if async:
assert len(rc.read(1)) == 1
@@ -192,6 +201,7 @@ class TestThreadPool(TestBase):
task.reset(make_iter())
task.min_count = ni / 4
rc = p.add_task(task)
+ print "read(1) * %i, min_count%i + chunksize" % (ni, task.min_count)
for i in range(ni):
if async:
assert len(rc.read(1)) == 1
@@ -208,10 +218,13 @@ class TestThreadPool(TestBase):
task.reset(make_iter())
task.should_fail = True
rc = p.add_task(task)
+ print "read(0) with failure"
assert len(rc.read()) == 0 # failure on first item
+ print "done with everything"
assert isinstance(task.error(), AssertionError)
assert p.num_tasks() == null_tasks
+
def _assert_async_dependent_tasks(self, p):
# includes failure in center task, 'recursive' orphan cleanup
# This will also verify that the channel-close mechanism works