
    (<i                        d Z ddlZddlZddlmZmZ ddlmZ  ee      j                  j                  dz  dz  Z
ej                  j                  de
      Zej                  j                  e      Zej                   j#                  e       ej$                  Zded	ed
efdZded
efdZded
dfdZded
dfdZded
dfdZded
dfdZded
dfdZded
dfdZy)u"   orphan-watchdog.py 테스트 (TDD)    N)datetime	timedelta)Pathscriptszorphan-watchdog.pyorphan_watchdogtmp_pathtasksreturnc                 `    | dz  }|j                  t        j                  d|i      d       |S )u/   임시 task-timers.json 파일을 생성한다.ztask-timers.jsonr	   zutf-8)encoding)
write_textjsondumps)r   r	   
timer_files      K/home/jay/workspace/.worktrees/task-2057-dev2/tests/test_orphan_watchdog.py_make_timer_filer      s4    ..J$**gu%56I    dtc                 "    | j                         S )N)	isoformat)r   s    r   _isor      s    <<>r   c           	         t        j                         }ddt        |t        d      z
        ddddt        |t        d	      z
        ddd
}t	        | |      }t        |      }|d   g k(  sJ |d   dk(  sJ d|v sJ y)uM   모든 태스크가 completed 상태이면 zombies 리스트는 비어있다.task-1.1	dev1-teamZ   minutes	completedtask_idteam_id
start_timestatustask-1.2	dev2-teamx   )r   r$   r   zombiestotalr   
checked_atNr   nowr   r   r   detect_zombiesr   r,   r	   r   results        r   test_no_zombiesr0      s    
,,.C ""sYr%::;!	
 ""sYs%;;<!	
E "(E2Jz2F)"""'?a6!!!r   c                 &   t        j                         }|t        d      z
  }ddddt        |      ddi}t	        | |      }t        |      }|d	   d
k(  sJ |d   d   }|d   dk(  sJ |d   dk(  sJ |d   dk\  sJ |d   t        |      k(  sJ y)uL   'started' 상태이고 90분 경과한 태스크는 zombies에 포함된다.r   r   z
task-414.1r   u   좀비 태스크started)r    r!   descriptionr"   r#   r'   r)      r(   r   r    r!   elapsed_minutesr"   N)r   r,   r   r   r   r-   )r   r,   startr	   r   r/   zombies          r   test_detect_zombier8   5   s    
,,.C)B''E#"-u+
E "(E2Jz2F'?aIq!F),,,)+++#$***,4;...r   c           	          t        j                         }dddt        |t        d      z
        ddi}t	        | |      }t        |      }|d   d	k(  sJ |d
   d   d   dk(  sJ |d
   d   d   dk\  sJ y)uC   'running' 상태도 started와 동일하게 좀비로 감지된다.z
task-500.1z	dev3-teamK   r   runningr   r'   r)   r4   r(   r   r    r5   Nr+   r.   s        r   !test_running_status_also_detectedr<   M   s    
,,.C#"sYr%::;	
E "(E2Jz2F'?a)Q	*l:::)Q 12b888r   c           	          t        j                         }dddt        |t        d      z
        ddi}t	        | |      }t        |      }|d   g k(  sJ |d	   d
k(  sJ y)ug   started 상태이지만 30분밖에 경과하지 않은 태스크는 zombies에 포함되지 않는다.z
task-600.1r%      r   r2   r   r'   r(   r)   r   Nr+   r.   s        r    test_within_threshold_not_zombier?   `   st    
,,.C#"sYr%::;	
E "(E2Jz2F)"""'?ar   c                 Z    | dz  }t        |      }|d   g k(  sJ |d   dk(  sJ d|v sJ y)u@   task-timers.json 파일이 없으면 빈 결과를 반환한다.zno-such-file.jsonr'   r(   r)   r   r*   N)r-   )r   non_existentr/   s      r   test_file_not_existsrB   r   sJ    11L|4F)"""'?a6!!!r   c           	          t        j                         }dddt        |t        d      z
        ddi}t	        | |      }t        |d      }|d	   d
k(  sJ t        |d      }|d	   dk(  sJ |d   d
   d   dk(  sJ y)uD   threshold_minutes 파라미터로 임계값을 조정할 수 있다.z
task-700.1r   -   r   r2   r   <   )r   threshold_minutesr)   r   r>   r4   r(   r    Nr+   )r   r,   r	   r   result_defaultresult_customs         r   test_custom_thresholdrI   |   s    
,,.C#"sYr%::;	
E "(E2J $zRPN'"a''' #jBOM!Q&&&#A&y1\AAAr   )__doc__importlib.util	importlibr   r   r   pathlibr   __file__parent_SCRIPT_PATHutilspec_from_file_location_specmodule_from_spec_modloaderexec_moduler-   dictr   strr   r0   r8   r<   r?   rB   rI    r   r   <module>r[      s    (   (  H~$$++i7:NN../@,O~~&&u-    $$t D T X # "d "t "2/ /$ /09 9 9& t    $"4 "D "BD BT Br   