@@ -70,3 +70,71 @@ def test_archive_archived_wf(mocker, wf_state):
70
70
f"in state { wf_state } ."
71
71
)
72
72
)
73
+
74
+
75
+ @pytest .mark .parametrize ("job_state" , ["FAILED" , "SUBMIT_FAIL" ])
76
+ def test_handle_state_change_failed_task (mocker , job_state ):
77
+ """Regression test task failure."""
78
+ state_update = mocker .MagicMock ()
79
+ state_update .job_state = job_state
80
+ task = mocker .MagicMock ()
81
+ task .name = "TestTask"
82
+ wfi = mocker .MagicMock ()
83
+ wfi .workflow_completed .return_value = False
84
+ wfi .cancelled_workflow_completed .return_value = False
85
+ mock_archive_workflow = mocker .patch (
86
+ "beeflow.wf_manager.resources.wf_update.archive_workflow"
87
+ )
88
+ db = mocker .MagicMock ()
89
+ mock_log_info = mocker .patch ("logging.Logger.info" )
90
+ mock_set_dependent_tasks_dep_fail = mocker .patch (
91
+ "beeflow.wf_manager.resources.wf_update.set_dependent_tasks_dep_fail"
92
+ )
93
+ workflow_update = wf_update .WFUpdate ()
94
+ workflow_update .handle_state_change (state_update , task , wfi , db )
95
+ mock_log_info .assert_any_call ("Task TestTask failed" )
96
+ mock_set_dependent_tasks_dep_fail .assert_called_once ()
97
+ mock_archive_workflow .assert_not_called ()
98
+
99
+
100
+ @pytest .mark .parametrize (
101
+ "completed, cancelled_completed, wf_state" ,
102
+ [
103
+ (True , False , "" ),
104
+ (False , True , "Cancelled" ),
105
+ (False , False , "Cancelled" ),
106
+ (False , True , "" ),
107
+ ],
108
+ )
109
+ def test_handle_state_change_completed_wf (
110
+ mocker , completed , cancelled_completed , wf_state
111
+ ):
112
+ """Regression test when workflow is complete."""
113
+ state_update = mocker .MagicMock ()
114
+ task = mocker .MagicMock ()
115
+ wfi = mocker .MagicMock ()
116
+ wfi .workflow_completed .return_value = completed
117
+ wfi .cancelled_workflow_completed .return_value = cancelled_completed
118
+ wfi .get_workflow_state .return_value = wf_state
119
+ wfi .workflow_id = "TESTID"
120
+ mock_archive_workflow = mocker .patch (
121
+ "beeflow.wf_manager.resources.wf_update.archive_workflow"
122
+ )
123
+ db = mocker .MagicMock ()
124
+ mock_log_info = mocker .patch ("logging.Logger.info" )
125
+ workflow_update = wf_update .WFUpdate ()
126
+ workflow_update .handle_state_change (state_update , task , wfi , db )
127
+ print (mock_log_info .mock_calls )
128
+ if completed :
129
+ mock_log_info .assert_any_call ("Workflow TESTID Completed" )
130
+ mock_log_info .assert_any_call ("Workflow Archived" )
131
+ mock_archive_workflow .assert_called_once ()
132
+ elif cancelled_completed and wf_state == "Cancelled" :
133
+ mock_log_info .assert_any_call (
134
+ "Scheduled tasks for cancelled workflow TESTID completed"
135
+ )
136
+ mock_log_info .assert_any_call ("Workflow Archived" )
137
+ mock_archive_workflow .assert_called_once ()
138
+ else :
139
+ mock_log_info .assert_not_called ()
140
+ mock_archive_workflow .assert_not_called ()
0 commit comments