6
6
7
7
from builtins import object
8
8
9
+ from time import sleep
9
10
import pytest
10
- import sys
11
11
import nipype .interfaces .utility as niu
12
12
import nipype .pipeline .engine as pe
13
13
@@ -25,10 +25,11 @@ def __init__(self):
25
25
self .statuses = []
26
26
27
27
def callback (self , node , status , result = None ):
28
- self .statuses .append ((node , status ))
28
+ self .statuses .append ((node . name , status ))
29
29
30
30
31
- def test_callback_normal (tmpdir ):
31
+ @pytest .mark .parametrize ("plugin" , ['Linear' , 'MultiProc' , 'LegacyMultiProc' ])
32
+ def test_callback_normal (tmpdir , plugin ):
32
33
tmpdir .chdir ()
33
34
34
35
so = Status ()
@@ -37,16 +38,17 @@ def test_callback_normal(tmpdir):
37
38
niu .Function (function = func , input_names = [], output_names = []),
38
39
name = 'f_node' )
39
40
wf .add_nodes ([f_node ])
40
- wf .config ['execution' ] = {'crashdump_dir' : wf .base_dir }
41
- wf .run (plugin = "Linear" , plugin_args = {'status_callback' : so .callback })
42
- assert len (so .statuses ) == 2
43
- for (n , s ) in so .statuses :
44
- assert n .name == 'f_node'
45
- assert so .statuses [0 ][1 ] == 'start'
46
- assert so .statuses [1 ][1 ] == 'end'
41
+ wf .config ['execution' ] = {
42
+ 'crashdump_dir' : wf .base_dir ,
43
+ 'poll_sleep_duration' : 2
44
+ }
45
+ wf .run (plugin = plugin , plugin_args = {'status_callback' : so .callback })
46
+ assert so .statuses == [('f_node' , 'start' ), ('f_node' , 'end' )]
47
47
48
48
49
- def test_callback_exception (tmpdir ):
49
+ @pytest .mark .parametrize ("plugin" , ['Linear' , 'MultiProc' , 'LegacyMultiProc' ])
50
+ @pytest .mark .parametrize ("stop_on_first_crash" , [False , True ])
51
+ def test_callback_exception (tmpdir , plugin , stop_on_first_crash ):
50
52
tmpdir .chdir ()
51
53
52
54
so = Status ()
@@ -55,57 +57,13 @@ def test_callback_exception(tmpdir):
55
57
niu .Function (function = bad_func , input_names = [], output_names = []),
56
58
name = 'f_node' )
57
59
wf .add_nodes ([f_node ])
58
- wf .config ['execution' ] = {'crashdump_dir' : wf .base_dir }
59
- try :
60
- wf .run (plugin = "Linear" , plugin_args = {'status_callback' : so .callback })
61
- except :
62
- pass
63
- assert len (so .statuses ) == 2
64
- for (n , s ) in so .statuses :
65
- assert n .name == 'f_node'
66
- assert so .statuses [0 ][1 ] == 'start'
67
- assert so .statuses [1 ][1 ] == 'exception'
68
-
69
-
70
- def test_callback_multiproc_normal (tmpdir ):
71
- tmpdir .chdir ()
72
-
73
- so = Status ()
74
- wf = pe .Workflow (name = 'test' , base_dir = tmpdir .strpath )
75
- f_node = pe .Node (
76
- niu .Function (function = func , input_names = [], output_names = []),
77
- name = 'f_node' )
78
- wf .add_nodes ([f_node ])
79
- wf .config ['execution' ]['crashdump_dir' ] = wf .base_dir
80
- wf .config ['execution' ]['poll_sleep_duration' ] = 2
81
- wf .run (plugin = 'MultiProc' , plugin_args = {'status_callback' : so .callback })
82
- assert len (so .statuses ) == 2
83
- for (n , s ) in so .statuses :
84
- assert n .name == 'f_node'
85
- assert so .statuses [0 ][1 ] == 'start'
86
- assert so .statuses [1 ][1 ] == 'end'
87
-
88
-
89
- def test_callback_multiproc_exception (tmpdir ):
90
- tmpdir .chdir ()
91
-
92
- so = Status ()
93
- wf = pe .Workflow (name = 'test' , base_dir = tmpdir .strpath )
94
- f_node = pe .Node (
95
- niu .Function (function = bad_func , input_names = [], output_names = []),
96
- name = 'f_node' )
97
- wf .add_nodes ([f_node ])
98
- wf .config ['execution' ] = {'crashdump_dir' : wf .base_dir }
99
-
100
- try :
101
- wf .run (
102
- plugin = 'MultiProc' , plugin_args = {
103
- 'status_callback' : so .callback
104
- })
105
- except :
106
- pass
107
- assert len (so .statuses ) == 2
108
- for (n , s ) in so .statuses :
109
- assert n .name == 'f_node'
110
- assert so .statuses [0 ][1 ] == 'start'
111
- assert so .statuses [1 ][1 ] == 'exception'
60
+ wf .config ['execution' ] = {
61
+ 'crashdump_dir' : wf .base_dir ,
62
+ 'stop_on_first_crash' : stop_on_first_crash ,
63
+ 'poll_sleep_duration' : 2
64
+ }
65
+ with pytest .raises (Exception ):
66
+ wf .run (plugin = plugin , plugin_args = {'status_callback' : so .callback })
67
+
68
+ sleep (0.5 ) # Wait for callback to be called (python 2.7)
69
+ assert so .statuses == [('f_node' , 'start' ), ('f_node' , 'exception' )]
0 commit comments