test_client.py
148 lines
| 5.2 KiB
| text/x-python
|
PythonLexer
MinRK
|
r3664 | """Tests for parallel client.py""" | ||
#------------------------------------------------------------------------------- | ||||
# Copyright (C) 2011 The IPython Development Team | ||||
# | ||||
# Distributed under the terms of the BSD License. The full license is in | ||||
# the file COPYING, distributed as part of this software. | ||||
#------------------------------------------------------------------------------- | ||||
#------------------------------------------------------------------------------- | ||||
# Imports | ||||
#------------------------------------------------------------------------------- | ||||
MinRK
|
r3595 | import time | ||
MinRK
|
r3650 | from tempfile import mktemp | ||
MinRK
|
r3595 | |||
MinRK
|
r3654 | import zmq | ||
MinRK
|
r3637 | |||
MinRK
|
r3673 | from IPython.parallel.client import client as clientmod | ||
MinRK
|
r3666 | from IPython.parallel import error | ||
MinRK
|
r3673 | from IPython.parallel import AsyncResult, AsyncHubResult | ||
from IPython.parallel import LoadBalancedView, DirectView | ||||
MinRK
|
r3595 | |||
MinRK
|
r3664 | from clienttest import ClusterTestCase, segfault, wait, add_engines | ||
def setup(): | ||||
add_engines(4) | ||||
MinRK
|
r3595 | |||
class TestClient(ClusterTestCase): | ||||
def test_ids(self): | ||||
MinRK
|
r3641 | n = len(self.client.ids) | ||
MinRK
|
r3595 | self.add_engines(3) | ||
MinRK
|
r3641 | self.assertEquals(len(self.client.ids), n+3) | ||
MinRK
|
r3595 | |||
def test_view_indexing(self): | ||||
MinRK
|
r3641 | """test index access for views""" | ||
self.add_engines(2) | ||||
MinRK
|
r3595 | targets = self.client._build_targets('all')[-1] | ||
v = self.client[:] | ||||
self.assertEquals(v.targets, targets) | ||||
MinRK
|
r3637 | t = self.client.ids[2] | ||
v = self.client[t] | ||||
self.assert_(isinstance(v, DirectView)) | ||||
self.assertEquals(v.targets, t) | ||||
t = self.client.ids[2:4] | ||||
v = self.client[t] | ||||
self.assert_(isinstance(v, DirectView)) | ||||
self.assertEquals(v.targets, t) | ||||
v = self.client[::2] | ||||
self.assert_(isinstance(v, DirectView)) | ||||
MinRK
|
r3595 | self.assertEquals(v.targets, targets[::2]) | ||
MinRK
|
r3637 | v = self.client[1::3] | ||
self.assert_(isinstance(v, DirectView)) | ||||
MinRK
|
r3595 | self.assertEquals(v.targets, targets[1::3]) | ||
MinRK
|
r3637 | v = self.client[:-3] | ||
self.assert_(isinstance(v, DirectView)) | ||||
MinRK
|
r3595 | self.assertEquals(v.targets, targets[:-3]) | ||
MinRK
|
r3638 | v = self.client[-1] | ||
self.assert_(isinstance(v, DirectView)) | ||||
self.assertEquals(v.targets, targets[-1]) | ||||
MinRK
|
r3661 | self.assertRaises(TypeError, lambda : self.client[None]) | ||
MinRK
|
r3637 | |||
MinRK
|
r3666 | def test_lbview_targets(self): | ||
"""test load_balanced_view targets""" | ||||
v = self.client.load_balanced_view() | ||||
self.assertEquals(v.targets, None) | ||||
v = self.client.load_balanced_view(-1) | ||||
self.assertEquals(v.targets, [self.client.ids[-1]]) | ||||
v = self.client.load_balanced_view('all') | ||||
self.assertEquals(v.targets, self.client.ids) | ||||
MinRK
|
r3637 | def test_targets(self): | ||
"""test various valid targets arguments""" | ||||
MinRK
|
r3641 | build = self.client._build_targets | ||
ids = self.client.ids | ||||
idents,targets = build(None) | ||||
self.assertEquals(ids, targets) | ||||
MinRK
|
r3637 | |||
def test_clear(self): | ||||
"""test clear behavior""" | ||||
MinRK
|
r3664 | # self.add_engines(2) | ||
v = self.client[:] | ||||
v.block=True | ||||
v.push(dict(a=5)) | ||||
v.pull('a') | ||||
MinRK
|
r3641 | id0 = self.client.ids[-1] | ||
self.client.clear(targets=id0) | ||||
MinRK
|
r3664 | self.client[:-1].pull('a') | ||
self.assertRaisesRemote(NameError, self.client[id0].get, 'a') | ||||
self.client.clear(block=True) | ||||
MinRK
|
r3641 | for i in self.client.ids: | ||
MinRK
|
r3664 | # print i | ||
self.assertRaisesRemote(NameError, self.client[i].get, 'a') | ||||
MinRK
|
r3637 | |||
MinRK
|
r3641 | def test_get_result(self): | ||
"""test getting results from the Hub.""" | ||||
c = clientmod.Client(profile='iptest') | ||||
MinRK
|
r3664 | # self.add_engines(1) | ||
MinRK
|
r3661 | t = c.ids[-1] | ||
MinRK
|
r3664 | ar = c[t].apply_async(wait, 1) | ||
MinRK
|
r3658 | # give the monitor time to notice the message | ||
MinRK
|
r3641 | time.sleep(.25) | ||
ahr = self.client.get_result(ar.msg_ids) | ||||
self.assertTrue(isinstance(ahr, AsyncHubResult)) | ||||
self.assertEquals(ahr.get(), ar.get()) | ||||
ar2 = self.client.get_result(ar.msg_ids) | ||||
self.assertFalse(isinstance(ar2, AsyncHubResult)) | ||||
MinRK
|
r3664 | c.close() | ||
MinRK
|
r3650 | |||
def test_ids_list(self): | ||||
"""test client.ids""" | ||||
MinRK
|
r3664 | # self.add_engines(2) | ||
MinRK
|
r3650 | ids = self.client.ids | ||
self.assertEquals(ids, self.client._ids) | ||||
self.assertFalse(ids is self.client._ids) | ||||
ids.remove(ids[-1]) | ||||
self.assertNotEquals(ids, self.client._ids) | ||||
MinRK
|
r3664 | def test_queue_status(self): | ||
# self.addEngine(4) | ||||
ids = self.client.ids | ||||
id0 = ids[0] | ||||
qs = self.client.queue_status(targets=id0) | ||||
self.assertTrue(isinstance(qs, dict)) | ||||
self.assertEquals(sorted(qs.keys()), ['completed', 'queue', 'tasks']) | ||||
allqs = self.client.queue_status() | ||||
self.assertTrue(isinstance(allqs, dict)) | ||||
MinRK
|
r3701 | self.assertEquals(sorted(allqs.keys()), sorted(self.client.ids + ['unassigned'])) | ||
unassigned = allqs.pop('unassigned') | ||||
MinRK
|
r3664 | for eid,qs in allqs.items(): | ||
self.assertTrue(isinstance(qs, dict)) | ||||
self.assertEquals(sorted(qs.keys()), ['completed', 'queue', 'tasks']) | ||||
MinRK
|
r3650 | |||
MinRK
|
r3664 | def test_shutdown(self): | ||
# self.addEngine(4) | ||||
ids = self.client.ids | ||||
id0 = ids[0] | ||||
self.client.shutdown(id0, block=True) | ||||
while id0 in self.client.ids: | ||||
time.sleep(0.1) | ||||
self.client.spin() | ||||
MinRK
|
r3654 | |||
MinRK
|
r3664 | self.assertRaises(IndexError, lambda : self.client[id0]) | ||
MinRK
|
r3654 | |||
MinRK
|
r3664 | def test_result_status(self): | ||
pass | ||||
# to be written | ||||