##// END OF EJS Templates
mark 0.13.1.rc1
mark 0.13.1.rc1

File last commit:

r7509:56c97fc4
r8561:acc1ee13
Show More
__init__.py
122 lines | 4.1 KiB | text/x-python | PythonLexer
MinRK
some initial tests for newparallel
r3637 """toplevel setup/teardown for parallel tests."""
MinRK
update API after sagedays29...
r3664 #-------------------------------------------------------------------------------
# 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
better, more forceful wait for controller to start
r3678 import os
MinRK
add message tracking to client, add/improve tests
r3654 import tempfile
MinRK
added preliminary tests for zmq.parallel
r3595 import time
MinRK
improve process cleanup on Windows...
r3778 from subprocess import Popen
MinRK
added preliminary tests for zmq.parallel
r3595
MinRK
better, more forceful wait for controller to start
r3678 from IPython.utils.path import get_ipython_dir
MinRK
organize IPython.parallel into subpackages
r3673 from IPython.parallel import Client
MinRK
improve process cleanup on Windows...
r3778 from IPython.parallel.apps.launcher import (LocalProcessLauncher,
ipengine_cmd_argv,
ipcontroller_cmd_argv,
MinRK
small changes in response to pyflakes pass...
r6270 SIGKILL,
ProcessStateError,
)
MinRK
added preliminary tests for zmq.parallel
r3595
MinRK
improve process cleanup on Windows...
r3778 # globals
launchers = []
blackhole = open(os.devnull, 'w')
# Launcher class
class TestProcessLauncher(LocalProcessLauncher):
"""subclass LocalProcessLauncher, to prevent extra sockets and threads being created on Windows"""
def start(self):
if self.state == 'before':
self.process = Popen(self.args,
stdout=blackhole, stderr=blackhole,
env=os.environ,
cwd=self.work_dir
)
self.notify_start(self.process.pid)
self.poll = self.process.poll
else:
s = 'The process was already started and has state: %r' % self.state
raise ProcessStateError(s)
MinRK
some initial tests for newparallel
r3637
# nose setup/teardown
MinRK
added preliminary tests for zmq.parallel
r3595
def setup():
MinRK
don't reuse connection files in parallel tests
r4116 cluster_dir = os.path.join(get_ipython_dir(), 'profile_iptest')
engine_json = os.path.join(cluster_dir, 'security', 'ipcontroller-engine.json')
client_json = os.path.join(cluster_dir, 'security', 'ipcontroller-client.json')
for json in (engine_json, client_json):
if os.path.exists(json):
os.remove(json)
MinRK
improve process cleanup on Windows...
r3778 cp = TestProcessLauncher()
cp.cmd_and_args = ipcontroller_cmd_argv + \
MinRK
Use NoDB by default...
r7509 ['--profile=iptest', '--log-level=50', '--ping=250', '--dictdb']
MinRK
improve process cleanup on Windows...
r3778 cp.start()
launchers.append(cp)
MinRK
better handle controller/engines never starting in tests
r3680 tic = time.time()
while not os.path.exists(engine_json) or not os.path.exists(client_json):
if cp.poll() is not None:
print cp.poll()
raise RuntimeError("The test controller failed to start.")
MinRK
relax some timing constraints in parallel tests
r6890 elif time.time()-tic > 15:
MinRK
better handle controller/engines never starting in tests
r3680 raise RuntimeError("Timeout waiting for the test controller to start.")
MinRK
better, more forceful wait for controller to start
r3678 time.sleep(0.1)
MinRK
update API after sagedays29...
r3664 add_engines(1)
MinRK
added preliminary tests for zmq.parallel
r3595
MinRK
expedite IPython.parallel tests...
r6162 def add_engines(n=1, profile='iptest', total=False):
"""add a number of engines to a given profile.
If total is True, then already running engines are counted, and only
the additional engines necessary (if any) are started.
"""
MinRK
organize IPython.parallel into subpackages
r3673 rc = Client(profile=profile)
MinRK
update API after sagedays29...
r3664 base = len(rc)
MinRK
expedite IPython.parallel tests...
r6162
if total:
n = max(n - base, 0)
MinRK
update API after sagedays29...
r3664 eps = []
for i in range(n):
MinRK
improve process cleanup on Windows...
r3778 ep = TestProcessLauncher()
MinRK
aliases match flag pattern ('-' as wordsep, not '_')...
r4214 ep.cmd_and_args = ipengine_cmd_argv + ['--profile=%s'%profile, '--log-level=50']
MinRK
improve process cleanup on Windows...
r3778 ep.start()
launchers.append(ep)
MinRK
update API after sagedays29...
r3664 eps.append(ep)
MinRK
better handle controller/engines never starting in tests
r3680 tic = time.time()
MinRK
update API after sagedays29...
r3664 while len(rc) < base+n:
MinRK
better handle controller/engines never starting in tests
r3680 if any([ ep.poll() is not None for ep in eps ]):
raise RuntimeError("A test engine failed to start.")
MinRK
relax some timing constraints in parallel tests
r6890 elif time.time()-tic > 15:
MinRK
better handle controller/engines never starting in tests
r3680 raise RuntimeError("Timeout waiting for engines to connect.")
MinRK
update API after sagedays29...
r3664 time.sleep(.1)
rc.spin()
rc.close()
return eps
MinRK
added preliminary tests for zmq.parallel
r3595
def teardown():
time.sleep(1)
MinRK
improve process cleanup on Windows...
r3778 while launchers:
p = launchers.pop()
MinRK
added preliminary tests for zmq.parallel
r3595 if p.poll() is None:
try:
MinRK
improve process cleanup on Windows...
r3778 p.stop()
MinRK
added preliminary tests for zmq.parallel
r3595 except Exception, e:
print e
pass
if p.poll() is None:
time.sleep(.25)
if p.poll() is None:
try:
MinRK
improve process cleanup on Windows...
r3778 print 'cleaning up test process...'
p.signal(SIGKILL)
MinRK
added preliminary tests for zmq.parallel
r3595 except:
MinRK
reflect revised apply_bound pattern
r3655 print "couldn't shutdown process: ", p
MinRK
improve process cleanup on Windows...
r3778 blackhole.close()
MinRK
added preliminary tests for zmq.parallel
r3595