test_dependency.py
101 lines
| 3.3 KiB
| text/x-python
|
PythonLexer
MinRK
|
r3664 | """Tests for dependency.py""" | ||
__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(): | ||||
add_engines(1) | ||||
MinRK
|
r3673 | @pmod.require('time') | ||
MinRK
|
r3664 | def wait(n): | ||
time.sleep(n) | ||||
return n | ||||
mixed = map(str, range(10)) | ||||
completed = map(str, range(0,10,2)) | ||||
failed = map(str, range(1,10,2)) | ||||
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 | ||||
MinRK
|
r3673 | @pmod.require('urllib') | ||
MinRK
|
r3664 | @interactive | ||
def encode(dikt): | ||||
return urllib.urlencode(dikt) | ||||
# must pass through canning to properly connect namespaces | ||||
self.assertEquals(encode(dict(a=5)), 'a=5') | ||||
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) | ||||