test_dependency.py
136 lines
| 4.0 KiB
| text/x-python
|
PythonLexer
MinRK
|
r4018 | """Tests for dependency.py | ||
Authors: | ||||
* Min RK | ||||
""" | ||||
MinRK
|
r3664 | |||
__docformat__ = "restructuredtext en" | ||||
#------------------------------------------------------------------------------- | ||||
# 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 | ||||
#------------------------------------------------------------------------------- | ||||
# import | ||||
import os | ||||
from IPython.utils.pickleutil import can, uncan | ||||
MinRK
|
r3673 | import IPython.parallel as pmod | ||
MinRK
|
r3666 | from IPython.parallel.util import interactive | ||
MinRK
|
r3664 | |||
MinRK
|
r3666 | from IPython.parallel.tests import add_engines | ||
MinRK
|
r3664 | from .clienttest import ClusterTestCase | ||
def setup(): | ||||
MinRK
|
r6162 | add_engines(1, total=True) | ||
MinRK
|
r3664 | |||
MinRK
|
r3673 | @pmod.require('time') | ||
MinRK
|
r3664 | def wait(n): | ||
time.sleep(n) | ||||
return n | ||||
MinRK
|
r9966 | @pmod.interactive | ||
def func(x): | ||||
return x*x | ||||
Thomas Kluyver
|
r13383 | mixed = list(map(str, range(10))) | ||
completed = list(map(str, range(0,10,2))) | ||||
failed = list(map(str, range(1,10,2))) | ||||
MinRK
|
r3664 | |||
class DependencyTest(ClusterTestCase): | ||||
def setUp(self): | ||||
ClusterTestCase.setUp(self) | ||||
self.user_ns = {'__builtins__' : __builtins__} | ||||
self.view = self.client.load_balanced_view() | ||||
self.dview = self.client[-1] | ||||
self.succeeded = set(map(str, range(0,25,2))) | ||||
self.failed = set(map(str, range(1,25,2))) | ||||
def assertMet(self, dep): | ||||
self.assertTrue(dep.check(self.succeeded, self.failed), "Dependency should be met") | ||||
def assertUnmet(self, dep): | ||||
self.assertFalse(dep.check(self.succeeded, self.failed), "Dependency should not be met") | ||||
def assertUnreachable(self, dep): | ||||
self.assertTrue(dep.unreachable(self.succeeded, self.failed), "Dependency should be unreachable") | ||||
def assertReachable(self, dep): | ||||
self.assertFalse(dep.unreachable(self.succeeded, self.failed), "Dependency should be reachable") | ||||
def cancan(self, f): | ||||
"""decorator to pass through canning into self.user_ns""" | ||||
return uncan(can(f), self.user_ns) | ||||
def test_require_imports(self): | ||||
"""test that @require imports names""" | ||||
@self.cancan | ||||
Thomas Kluyver
|
r13383 | @pmod.require('base64') | ||
MinRK
|
r3664 | @interactive | ||
Thomas Kluyver
|
r13383 | def encode(arg): | ||
return base64.b64encode(arg) | ||||
MinRK
|
r3664 | # must pass through canning to properly connect namespaces | ||
Thomas Kluyver
|
r13383 | self.assertEqual(encode(b'foo'), b'Zm9v') | ||
MinRK
|
r3664 | |||
def test_success_only(self): | ||||
MinRK
|
r3673 | dep = pmod.Dependency(mixed, success=True, failure=False) | ||
MinRK
|
r3664 | self.assertUnmet(dep) | ||
self.assertUnreachable(dep) | ||||
dep.all=False | ||||
self.assertMet(dep) | ||||
self.assertReachable(dep) | ||||
MinRK
|
r3673 | dep = pmod.Dependency(completed, success=True, failure=False) | ||
MinRK
|
r3664 | self.assertMet(dep) | ||
self.assertReachable(dep) | ||||
dep.all=False | ||||
self.assertMet(dep) | ||||
self.assertReachable(dep) | ||||
def test_failure_only(self): | ||||
MinRK
|
r3673 | dep = pmod.Dependency(mixed, success=False, failure=True) | ||
MinRK
|
r3664 | self.assertUnmet(dep) | ||
self.assertUnreachable(dep) | ||||
dep.all=False | ||||
self.assertMet(dep) | ||||
self.assertReachable(dep) | ||||
MinRK
|
r3673 | dep = pmod.Dependency(completed, success=False, failure=True) | ||
MinRK
|
r3664 | self.assertUnmet(dep) | ||
self.assertUnreachable(dep) | ||||
dep.all=False | ||||
self.assertUnmet(dep) | ||||
self.assertUnreachable(dep) | ||||
MinRK
|
r9966 | |||
def test_require_function(self): | ||||
@pmod.interactive | ||||
def bar(a): | ||||
return func(a) | ||||
@pmod.require(func) | ||||
@pmod.interactive | ||||
def bar2(a): | ||||
return func(a) | ||||
self.client[:].clear() | ||||
self.assertRaisesRemote(NameError, self.view.apply_sync, bar, 5) | ||||
ar = self.view.apply_async(bar2, 5) | ||||
self.assertEqual(ar.get(5), func(5)) | ||||
def test_require_object(self): | ||||
@pmod.require(foo=func) | ||||
@pmod.interactive | ||||
def bar(a): | ||||
return foo(a) | ||||
ar = self.view.apply_async(bar, 5) | ||||
self.assertEqual(ar.get(5), func(5)) | ||||