@@ -189,9 +189,107 @@ defmodule Quantum.ExecutorTest do
189189
190190 assert :marked_running = TaskRegistry . mark_running ( task_registry , job . name , Node . self ( ) )
191191 end
192+
193+ test "logs error" , % {
194+ task_supervisor: task_supervisor ,
195+ task_registry: task_registry ,
196+ debug_logging: debug_logging
197+ } do
198+ job =
199+ TestScheduler . new_job ( )
200+ |> Job . set_task ( fn -> raise "failed" end )
201+ |> Job . set_overlap ( false )
202+
203+ logs =
204+ capture_log ( fn ->
205+ { :ok , task } =
206+ Executor . start_link (
207+ % StartOpts {
208+ task_supervisor_reference: task_supervisor ,
209+ task_registry_reference: task_registry ,
210+ debug_logging: debug_logging
211+ } ,
212+ % Event { job: job , node: Node . self ( ) }
213+ )
214+
215+ assert :ok == wait_for_termination ( task )
216+ end )
217+
218+ assert logs =~ ~r/ \( RuntimeError\) failed/
219+ end
220+
221+ test "logs exit" , % {
222+ task_supervisor: task_supervisor ,
223+ task_registry: task_registry ,
224+ debug_logging: debug_logging
225+ } do
226+ job =
227+ TestScheduler . new_job ( )
228+ |> Job . set_task ( fn -> exit ( :failure ) end )
229+ |> Job . set_overlap ( false )
230+
231+ logs =
232+ capture_log ( fn ->
233+ { :ok , task } =
234+ Executor . start_link (
235+ % StartOpts {
236+ task_supervisor_reference: task_supervisor ,
237+ task_registry_reference: task_registry ,
238+ debug_logging: debug_logging
239+ } ,
240+ % Event { job: job , node: Node . self ( ) }
241+ )
242+
243+ assert :ok == wait_for_termination ( task )
244+ end )
245+
246+ assert logs =~ ~r/ \( exit\) :failure/
247+ end
248+
249+ test "logs throw" , % {
250+ task_supervisor: task_supervisor ,
251+ task_registry: task_registry ,
252+ debug_logging: debug_logging
253+ } do
254+ ref = make_ref ( )
255+
256+ job =
257+ TestScheduler . new_job ( )
258+ |> Job . set_task ( fn -> throw ( ref ) end )
259+ |> Job . set_overlap ( false )
260+
261+ logs =
262+ capture_log ( fn ->
263+ { :ok , task } =
264+ Executor . start_link (
265+ % StartOpts {
266+ task_supervisor_reference: task_supervisor ,
267+ task_registry_reference: task_registry ,
268+ debug_logging: debug_logging
269+ } ,
270+ % Event { job: job , node: Node . self ( ) }
271+ )
272+
273+ assert :ok == wait_for_termination ( task )
274+ end )
275+
276+ assert logs =~ "(throw) #{ inspect ( ref ) } "
277+ end
192278 end
193279
194280 def send ( caller ) do
195281 send ( caller , :executed )
196282 end
283+
284+ def wait_for_termination ( pid , timeout \\ 5000 ) do
285+ ref = Process . monitor ( pid )
286+
287+ receive do
288+ { :DOWN , ^ ref , :process , _pid , _reason } ->
289+ :ok
290+ after
291+ timeout ->
292+ :error
293+ end
294+ end
197295end
0 commit comments