
    i                    r    d Z ddlmZ ddlZddlZddlZddlmZ ddlZ ed      Z	d
ddZ
ddZddZdd	Zy)u  tests/start_guard/test_lock.py
lock 파일 관련 테스트:
- test_lock_json_format: --update-heartbeat 동작 + heartbeat_timestamp 갱신 확인
- test_lock_missing: lock 없을 때 --update-heartbeat exit 1
- test_atomic_write: sequential 연속 write에서 corruption 없음
    )annotationsN)PathzI/home/jay/workspace/.worktrees/task-2454-dev4/scripts/start_task_guard.pyc           
         t        j                  dt        t              g| z   t        |      dddi t        j
                  |xs i       S )u   스크립트 실행 헬퍼.python3T   )cwdcapture_outputtexttimeoutenv)
subprocessrunstrSCRIPTosenviron)argsr   r   s      2/home/jay/workspace/tests/start_guard/test_lock.py_runr      sI    >>	CK 4'H)rzz)ciR)     c           	     <   d}| dz  dz  }|j                  dd       || dz  }d}|dd	||t        |       d
| dd}|j                  t        j                  |dd      d       |j                         sJ t        d|dg|       }|j                  dk(  s!J d|j                   d|j                          t        j                  |j                  d            }d|v sJ d       |d   |k7  sJ d|d           |d   |k(  sJ |d   dk(  sJ |d   d	k(  sJ y)uU   lock 파일 mock 후 --update-heartbeat 실행 시 heartbeat_timestamp 갱신 확인.ztask-lock-test.taskslocksTparentsexist_ok.lock2026-01-01T00:00:00Zdev4i90  task/-dev4task_idbotpidheartbeat_timestamp
started_atworktreebranchF   ensure_asciiindentutf-8encoding--task--update-heartbeatr   r   u"   --update-heartbeat 실패
stdout: 	
stderr: r&   u!   heartbeat_timestamp 필드 없음u,   heartbeat_timestamp가 갱신되지 않음: r#   r$   r%   N)mkdirr   
write_textjsondumpsexistsr   
returncodestdoutstderrloads	read_text)tmp_pathr#   	locks_dir	lock_pathold_tsinitial_dataresultupdated_datas           r   test_lock_json_formatrF   #   s   G8#g-IOOD4O0wiu--I $F%M'%(L LuQOZab 	701F ! 
-fmm_Jv}}oV!
 ::i1171CDL L0U2UU0-.&8 
6|DY7Z6[\8 	"g---&(((%'''r   c                *   d}| dz  dz  }|| dz  j                         rJ t        d|dg|       }|j                  dk7  s!J d	|j                   d
|j                          d|j                  v s#d|j                  v sJ d|j                          yy)uF   lock 파일이 없을 때 --update-heartbeat 실행 시 exit 1 확인.ztask-no-lockr   r   r   r1   r2   r3   r   u1   lock 파일 없는데 exit 0 (비정상)
stdout: r4   z[GUARD ERROR]u   update-heartbeat 실패u    에러 메시지 없음
stderr: N)r9   r   r:   r;   r<   )r?   r#   r@   rD   s       r   test_lock_missingrH   Q   s    G8#g-Iwiu--55777	701F ! 
<V]]O:V\VcVcUde! fmm+/HFMM/Y 
+FMM?;Y/Y+r   c           	         d}| dz  dz  }|j                  dd       || dz  }d}|dt        j                         ||t        |       d	| d
d}|j	                  t        j                  |dd      d       t        d      D ]q  }t        d|dg|       }|j                  dk(  sJ d|dz    d|j                          	 t        j                  |j                  d            }dv sJ |d   |k(  rqJ  t        j                  |j                  d            }
|
d   |k7  sJ d       |
d   |k(  sJ |
d   dk(  sJ y# t
        j                  $ r(}	t        j                  d|dz    d|	        Y d}	~	d}	~	ww xY w)uG   sequential 연속 heartbeat 갱신에서 JSON corruption 없음 확인.ztask-atomicr   r   Tr   r   r   r   r    r!   r"   Fr*   r+   r.   r/      r1   r2   r3   r   u   갱신    u   회차 실패: u   회차 후 JSON corruption: Nr&   r#   u'   최종 heartbeat가 초기값과 동일r$   )r5   r   getpidr   r6   r7   r8   ranger   r:   r<   r=   r>   JSONDecodeErrorpytestfail)r?   r#   r@   rA   init_tsrC   irD   datae
final_datas              r   test_atomic_writerV   h   s   G8#g-IOOD4O0wiu--I %Gyy{&M'%(L LuQOZab 1X *w 45
   A%T1_V]]O'TT%	H::i1171CDD %,,,I')))* I///ABJ+,7b9bb7i G+++e&&& ## 	HKK'!A#&B1#FGG	Hs   %EE=E88E=)N)r   z	list[str]r   r   r   zdict | Nonereturnzsubprocess.CompletedProcess)r?   r   )__doc__
__future__r   r7   r   r   pathlibr   rO   r   r   rF   rH   rV    r   r   <module>r\      s>    #  	   	Y	Z	 '(\.''r   