@@ -267,11 +267,25 @@ def _create_test_dag_run(self, state, date):
267
267
def _verify_dag_run_state (self , dag , date , state ):
268
268
drs = models .DagRun .find (dag_id = dag .dag_id , execution_date = date )
269
269
dr = drs [0 ]
270
+
270
271
self .assertEqual (dr .get_state (), state )
271
272
273
+ def _verify_dag_run_dates (self , dag , date , state , middle_time ):
274
+ # When target state is RUNNING, we should set start_date,
275
+ # otherwise we should set end_date.
276
+ drs = models .DagRun .find (dag_id = dag .dag_id , execution_date = date )
277
+ dr = drs [0 ]
278
+ if state == State .RUNNING :
279
+ self .assertGreater (dr .start_date , middle_time )
280
+ self .assertIsNone (dr .end_date )
281
+ else :
282
+ self .assertLess (dr .start_date , middle_time )
283
+ self .assertGreater (dr .end_date , middle_time )
284
+
272
285
def test_set_running_dag_run_to_success (self ):
273
286
date = self .execution_dates [0 ]
274
287
dr = self ._create_test_dag_run (State .RUNNING , date )
288
+ middle_time = timezone .utcnow ()
275
289
self ._set_default_task_instance_states (dr )
276
290
277
291
altered = set_dag_run_state_to_success (self .dag1 , date , commit = True )
@@ -280,10 +294,12 @@ def test_set_running_dag_run_to_success(self):
280
294
self .assertEqual (len (altered ), 5 )
281
295
self ._verify_dag_run_state (self .dag1 , date , State .SUCCESS )
282
296
self ._verify_task_instance_states (self .dag1 , date , State .SUCCESS )
297
+ self ._verify_dag_run_dates (self .dag1 , date , State .SUCCESS , middle_time )
283
298
284
299
def test_set_running_dag_run_to_failed (self ):
285
300
date = self .execution_dates [0 ]
286
301
dr = self ._create_test_dag_run (State .RUNNING , date )
302
+ middle_time = timezone .utcnow ()
287
303
self ._set_default_task_instance_states (dr )
288
304
289
305
altered = set_dag_run_state_to_failed (self .dag1 , date , commit = True )
@@ -292,10 +308,12 @@ def test_set_running_dag_run_to_failed(self):
292
308
self .assertEqual (len (altered ), 1 )
293
309
self ._verify_dag_run_state (self .dag1 , date , State .FAILED )
294
310
self .assertEqual (dr .get_task_instance ('run_after_loop' ).state , State .FAILED )
311
+ self ._verify_dag_run_dates (self .dag1 , date , State .FAILED , middle_time )
295
312
296
313
def test_set_running_dag_run_to_running (self ):
297
314
date = self .execution_dates [0 ]
298
315
dr = self ._create_test_dag_run (State .RUNNING , date )
316
+ middle_time = timezone .utcnow ()
299
317
self ._set_default_task_instance_states (dr )
300
318
301
319
altered = set_dag_run_state_to_running (self .dag1 , date , commit = True )
@@ -304,10 +322,12 @@ def test_set_running_dag_run_to_running(self):
304
322
self .assertEqual (len (altered ), 0 )
305
323
self ._verify_dag_run_state (self .dag1 , date , State .RUNNING )
306
324
self ._verify_task_instance_states_remain_default (dr )
325
+ self ._verify_dag_run_dates (self .dag1 , date , State .RUNNING , middle_time )
307
326
308
327
def test_set_success_dag_run_to_success (self ):
309
328
date = self .execution_dates [0 ]
310
329
dr = self ._create_test_dag_run (State .SUCCESS , date )
330
+ middle_time = timezone .utcnow ()
311
331
self ._set_default_task_instance_states (dr )
312
332
313
333
altered = set_dag_run_state_to_success (self .dag1 , date , commit = True )
@@ -316,10 +336,12 @@ def test_set_success_dag_run_to_success(self):
316
336
self .assertEqual (len (altered ), 5 )
317
337
self ._verify_dag_run_state (self .dag1 , date , State .SUCCESS )
318
338
self ._verify_task_instance_states (self .dag1 , date , State .SUCCESS )
339
+ self ._verify_dag_run_dates (self .dag1 , date , State .SUCCESS , middle_time )
319
340
320
341
def test_set_success_dag_run_to_failed (self ):
321
342
date = self .execution_dates [0 ]
322
343
dr = self ._create_test_dag_run (State .SUCCESS , date )
344
+ middle_time = timezone .utcnow ()
323
345
self ._set_default_task_instance_states (dr )
324
346
325
347
altered = set_dag_run_state_to_failed (self .dag1 , date , commit = True )
@@ -328,10 +350,12 @@ def test_set_success_dag_run_to_failed(self):
328
350
self .assertEqual (len (altered ), 1 )
329
351
self ._verify_dag_run_state (self .dag1 , date , State .FAILED )
330
352
self .assertEqual (dr .get_task_instance ('run_after_loop' ).state , State .FAILED )
353
+ self ._verify_dag_run_dates (self .dag1 , date , State .FAILED , middle_time )
331
354
332
355
def test_set_success_dag_run_to_running (self ):
333
356
date = self .execution_dates [0 ]
334
357
dr = self ._create_test_dag_run (State .SUCCESS , date )
358
+ middle_time = timezone .utcnow ()
335
359
self ._set_default_task_instance_states (dr )
336
360
337
361
altered = set_dag_run_state_to_running (self .dag1 , date , commit = True )
@@ -340,10 +364,12 @@ def test_set_success_dag_run_to_running(self):
340
364
self .assertEqual (len (altered ), 0 )
341
365
self ._verify_dag_run_state (self .dag1 , date , State .RUNNING )
342
366
self ._verify_task_instance_states_remain_default (dr )
367
+ self ._verify_dag_run_dates (self .dag1 , date , State .RUNNING , middle_time )
343
368
344
369
def test_set_failed_dag_run_to_success (self ):
345
370
date = self .execution_dates [0 ]
346
371
dr = self ._create_test_dag_run (State .SUCCESS , date )
372
+ middle_time = timezone .utcnow ()
347
373
self ._set_default_task_instance_states (dr )
348
374
349
375
altered = set_dag_run_state_to_success (self .dag1 , date , commit = True )
@@ -352,10 +378,12 @@ def test_set_failed_dag_run_to_success(self):
352
378
self .assertEqual (len (altered ), 5 )
353
379
self ._verify_dag_run_state (self .dag1 , date , State .SUCCESS )
354
380
self ._verify_task_instance_states (self .dag1 , date , State .SUCCESS )
381
+ self ._verify_dag_run_dates (self .dag1 , date , State .SUCCESS , middle_time )
355
382
356
383
def test_set_failed_dag_run_to_failed (self ):
357
384
date = self .execution_dates [0 ]
358
385
dr = self ._create_test_dag_run (State .SUCCESS , date )
386
+ middle_time = timezone .utcnow ()
359
387
self ._set_default_task_instance_states (dr )
360
388
361
389
altered = set_dag_run_state_to_failed (self .dag1 , date , commit = True )
@@ -364,10 +392,12 @@ def test_set_failed_dag_run_to_failed(self):
364
392
self .assertEqual (len (altered ), 1 )
365
393
self ._verify_dag_run_state (self .dag1 , date , State .FAILED )
366
394
self .assertEqual (dr .get_task_instance ('run_after_loop' ).state , State .FAILED )
395
+ self ._verify_dag_run_dates (self .dag1 , date , State .FAILED , middle_time )
367
396
368
397
def test_set_failed_dag_run_to_running (self ):
369
398
date = self .execution_dates [0 ]
370
399
dr = self ._create_test_dag_run (State .SUCCESS , date )
400
+ middle_time = timezone .utcnow ()
371
401
self ._set_default_task_instance_states (dr )
372
402
373
403
altered = set_dag_run_state_to_running (self .dag1 , date , commit = True )
@@ -376,6 +406,7 @@ def test_set_failed_dag_run_to_running(self):
376
406
self .assertEqual (len (altered ), 0 )
377
407
self ._verify_dag_run_state (self .dag1 , date , State .RUNNING )
378
408
self ._verify_task_instance_states_remain_default (dr )
409
+ self ._verify_dag_run_dates (self .dag1 , date , State .RUNNING , middle_time )
379
410
380
411
def test_set_state_without_commit (self ):
381
412
date = self .execution_dates [0 ]
0 commit comments