test_backgroundjobs.py
85 lines
| 2.6 KiB
| text/x-python
|
PythonLexer
Fernando Perez
|
r4941 | """Tests for pylab tools module. | ||
""" | ||||
#----------------------------------------------------------------------------- | ||||
# Copyright (c) 2011, the IPython Development Team. | ||||
# | ||||
# Distributed under the terms of the Modified BSD License. | ||||
# | ||||
# The full license is in the file COPYING.txt, distributed with this software. | ||||
#----------------------------------------------------------------------------- | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
# Stdlib imports | ||||
import time | ||||
# Our own imports | ||||
from IPython.lib import backgroundjobs as bg | ||||
#----------------------------------------------------------------------------- | ||||
# Globals and constants | ||||
#----------------------------------------------------------------------------- | ||||
t_short = 0.0001 # very short interval to wait on jobs | ||||
#----------------------------------------------------------------------------- | ||||
# Local utilities | ||||
#----------------------------------------------------------------------------- | ||||
def sleeper(interval=t_short, *a, **kw): | ||||
args = dict(interval=interval, | ||||
other_args=a, | ||||
kw_args=kw) | ||||
time.sleep(interval) | ||||
return args | ||||
def crasher(interval=t_short, *a, **kw): | ||||
time.sleep(interval) | ||||
raise Exception("Dead job with interval %s" % interval) | ||||
#----------------------------------------------------------------------------- | ||||
# Classes and functions | ||||
#----------------------------------------------------------------------------- | ||||
def test_result(): | ||||
"""Test job submission and result retrieval""" | ||||
jobs = bg.BackgroundJobManager() | ||||
j = jobs.new(sleeper) | ||||
j.join() | ||||
Matthias Bussonnier
|
r26723 | assert j.result["interval"] == t_short | ||
Fernando Perez
|
r4941 | |||
def test_flush(): | ||||
"""Test job control""" | ||||
jobs = bg.BackgroundJobManager() | ||||
j = jobs.new(sleeper) | ||||
j.join() | ||||
Matthias Bussonnier
|
r26723 | assert len(jobs.completed) == 1 | ||
assert len(jobs.dead) == 0 | ||||
Fernando Perez
|
r4941 | jobs.flush() | ||
Matthias Bussonnier
|
r26723 | assert len(jobs.completed) == 0 | ||
Fernando Perez
|
r4941 | |||
def test_dead(): | ||||
"""Test control of dead jobs""" | ||||
jobs = bg.BackgroundJobManager() | ||||
j = jobs.new(crasher) | ||||
j.join() | ||||
Matthias Bussonnier
|
r26723 | assert len(jobs.completed) == 0 | ||
assert len(jobs.dead) == 1 | ||||
Fernando Perez
|
r4941 | jobs.flush() | ||
Matthias Bussonnier
|
r26723 | assert len(jobs.dead) == 0 | ||
Fernando Perez
|
r4941 | |||
def test_longer(): | ||||
"""Test control of longer-running jobs""" | ||||
jobs = bg.BackgroundJobManager() | ||||
# Sleep for long enough for the following two checks to still report the | ||||
# job as running, but not so long that it makes the test suite noticeably | ||||
# slower. | ||||
j = jobs.new(sleeper, 0.1) | ||||
Matthias Bussonnier
|
r26723 | assert len(jobs.running) == 1 | ||
assert len(jobs.completed) == 0 | ||||
Fernando Perez
|
r4941 | j.join() | ||
Matthias Bussonnier
|
r26723 | assert len(jobs.running) == 0 | ||
assert len(jobs.completed) == 1 | ||||