
    is6                       d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlZddlmZ ddlmZ ddlmZmZ ddlZ ee
j(                  j+                  dd            Z ee      ej0                  vr"ej0                  j3                  d ee             dd	Zdd
ZddZdddZddZ G d d      Z G d d      Z  G d d      Z!y)u  
tests/test_session_watchdog.py

session_watchdog.py 단위 테스트 (TDD)

테스트 항목:
  TestWatchdogCheck
    - test_check_returns_result: --check 실행 시 check_all_sessions() 결과 반환
    - test_check_prints_json_output: --check 실행 시 JSON 출력
    - test_check_with_no_running_sessions: 세션 없을 때 정상 동작
    - test_check_detects_warning: warning 세션 감지
    - test_check_detects_critical: critical 세션 감지

  TestWatchdogStatus
    - test_status_returns_session_list: --status 실행 시 세션 목록 반환
    - test_status_output_format: 출력 형식 확인 (JSON)

  TestWatchdogIntegration
    - test_main_function_check_mode: main() 함수 --check 모드 실행
    - test_main_function_status_mode: main() 함수 --status 모드 실행
    - test_exit_code_success: 정상 종료 시 exit code 0
    - test_exit_code_on_critical: critical 감지 시 exit code 1
    )annotationsN)StringIO)Path)	MagicMockpatchWORKSPACE_ROOTz/home/jay/workspacec                
    d| iS Ntasks r   s    2/home/jay/workspace/tests/test_session_watchdog.py_make_timersr   .       U    c                
    d| iS r
   r   r   s    r   _make_ledgerr   2   r   r   c                    | |ddS )Nrunning)task_idteam_idstatusr   )r   r   s     r   _make_running_taskr   6   s     r   c                    || | dz  | dz  dS )N   )r   total_tokensinput_tokensoutput_tokensr   )r   r   s     r   _make_ledger_entryr   >   s"    $$)%*	 r   c                    | dz  }|j                  dd       |dz  j                  t        j                  |      d       |dz  j                  t        j                  |      d       y)	u:   tmp_path 아래 memory 디렉토리와 JSON 파일 생성.memoryT)parentsexist_okztask-timers.jsonzutf-8)encodingztoken-ledger.jsonN)mkdir
write_textjsondumps)tmp_pathtimers_dataledger_data
memory_dirs       r   _setup_workspacer-   G   se    H$JTD1$$00K1HSZ0[%%11$**[2IT[1\r   c                  8    e Zd ZdZddZd	dZddZddZddZy)
TestWatchdogChecku   run_check() 함수 테스트c                $	   ddl m} t        |t        i       t	        i               |t        |            }t        |t              }|sddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d	}d
}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }	t        t        j                  |	            d	x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }	t        t        j                  |	            d	x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }	t        t        j                  |	            d	x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }	t        t        j                  |	            d	x}}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }	t        t        j                  |	            d	x}}y	)u;   --check 실행 시 check_all_sessions() 결과 dict 반환.r   	run_checkworkspace_root5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstanceresultdictpy0py1py2py4Ncheckedinz%(py1)s in %(py3)sr;   py3assert %(py5)spy5warnings	criticalsnormals	timestamp)scripts.session_watchdogr2   r-   r   r   strr6   r8   @py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanation_call_reprcompare)
selfr)   r2   r7   @py_assert3@py_format5@py_assert0@py_assert2@py_format4@py_format6s
             r   test_check_returns_resultz+TestWatchdogCheck.test_check_returns_resultW   sn   6<#3\"5EF#h-8&$''''''''z'''z''''''&'''&''''''$'''$''''''''''"yF""""yF"""y""""""F"""F"""""""#zV####zV###z######V###V#######${f$$$${f$$${$$$$$$f$$$f$$$$$$$"yF""""yF"""y""""""F"""F"""""""${f$$$${f$$${$$$$$$f$$$f$$$$$$$r   c                   ddl m} t        |t        i       t	        i               |t        |            }t        j                  |d      }t        j                  |      }|d   }d}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      d	z  }
d
d|
iz  }t        t        j                  |            dx}x}	}y)u)   --check 실행 시 stdout에 JSON 출력.r   r1   r3   Fensure_asciir>   ==z%(py1)s == %(py4)sr;   r=   assert %(py6)spy6N)rJ   r2   r-   r   r   rK   r'   r(   loadsrN   rS   rP   rQ   rR   )rT   r)   capsysr2   r7   
serializedparsedrW   rU   rX   rV   @py_format7s               r   test_check_prints_json_outputz/TestWatchdogCheck.test_check_prints_json_outputf   s    6<#3\"5EF #h-8ZZU;
J'i %A% A%%%% A%%% %%%A%%%%%%%r   c                   ddl m} t        di t        dd      ddii      }t	        ||t        i               |t        |            }|d   }d}||k(  }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}|d   }g }||k(  }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}|d   }g }||k(  }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}|d   }d}||k(  }|slt        j                  d	|fd
||f      t        j                  |      t        j                  |      dz  }dd|iz  }	t        t        j                  |	            dx}x}}y)u@   실행 중인 세션 없을 때 checked=0, 빈 리스트 반환.r   r1   z
task-100.1	dev2-teamr   	completedr3   r>   r_   ra   rb   rc   rd   NrF   rG   rH   )rJ   r2   r   r   r-   r   rK   rN   rS   rP   rQ   rR   )
rT   r)   r2   r*   r7   rW   rU   rX   rV   ri   s
             r   #test_check_with_no_running_sessionsz5TestWatchdogCheck.test_check_with_no_running_sessionss   s   6" ({Ck
 	;R0@A#h-8i %A% A%%%% A%%% %%%A%%%%%%%j!'R'!R''''!R'''!'''R'''''''k"(b("b(((("b((("(((b(((((((i %A% A%%%% A%%% %%%A%%%%%%%r   c                   ddl m} d}d}t        |t        ||      i      }t	        |t        d|      i      }t        |||        |t        |            }|d   }d}	||	k(  }
|
slt        j                  d	|
fd
||	f      t        j                  |      t        j                  |	      dz  }dd|iz  }t        t        j                  |            dx}x}
}	|d   }t        |      }	d}|	|k(  }|st        j                  d	|fd|	|f      dt        j                         v st        j                   t              rt        j                  t              ndt        j                  |      t        j                  |	      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}	x}}|d   }g }	||	k(  }
|
slt        j                  d	|
fd
||	f      t        j                  |      t        j                  |	      dz  }dd|iz  }t        t        j                  |            dx}x}
}	|d   d   d   }||k(  }
|
st        j                  d	|
fd||f      t        j                  |      dt        j                         v st        j                   |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            dx}}
y)u*   75% 사용 세션을 warning으로 감지.r   r1   z
task-200.1rl   I r3   r>      r_   ra   rb   rc   rd   NrF   z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)slenr:   r<   r=   py7assert %(py9)spy9rG   r   z%(py1)s == %(py3)srB   rD   rE   )rJ   r2   r   r   r   r   r-   rK   rN   rS   rP   rQ   rR   rs   rL   rM   rO   )rT   r)   r2   r   r   r*   r+   r7   rW   rU   rX   rV   ri   @py_assert1@py_assert6@py_assert5@py_format8@py_format10rY   rZ   s                       r   test_check_detects_warningz,TestWatchdogCheck.test_check_detects_warning   s   6"G-?-Q#RS"G-?-Q#RS;<#h-8i %A% A%%%% A%%% %%%A%%%%%%%*%+s%&+!+&!++++&!++++++s+++s+++%+++&+++!+++++++k"(b("b(((("b((("(((b(((((((j!!$Y/:/7::::/7:::/::::::7:::7:::::::r   c                H   ddl m} d}d}t        |t        ||      i      }t	        |t        d|      i      }t        |||       t        d      5 }t        d      |_	         |t        |            }d	d	d	       d
   }	d}
|	|
k(  }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            d	x}	x}}
|d   }	g }
|	|
k(  }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }dd|iz  }t        t        j                  |            d	x}	x}}
|d   }t!        |      }
d}|
|k(  }|st        j                  d|fd|
|f      dt#        j$                         v st        j&                  t               rt        j                  t               ndt        j                  |      t        j                  |
      t        j                  |      dz  }dd|iz  }t        t        j                  |            d	x}x}
x}}|d   d   d   }	|	|k(  }|st        j                  d|fd|	|f      t        j                  |	      dt#        j$                         v st        j&                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d	x}	}y	# 1 sw Y   xY w)u(   90% 사용 세션을 critical로 감지.r   r1   z
task-300.1rl     subprocess.run
returncoder3   Nr>   rq   r_   ra   rb   rc   rd   rF   rG   rr   rs   rt   rv   rw   r   rx   rB   rD   rE   )rJ   r2   r   r   r   r   r-   r   r   return_valuerK   rN   rS   rP   rQ   rR   rs   rL   rM   rO   )rT   r)   r2   r   r   r*   r+   mock_runr7   rW   rU   rX   rV   ri   ry   rz   r{   r|   r}   rY   rZ   s                        r   test_check_detects_criticalz-TestWatchdogCheck.test_check_detects_critical   s   6"G-?-Q#RS"G-?-Q#RS;<#$ 	=$-$;H!c(m<F	= i %A% A%%%% A%%% %%%A%%%%%%%j!'R'!R''''!R'''!'''R'''''''+&,s&',1,'1,,,,'1,,,,,,s,,,s,,,&,,,',,,1,,,,,,,k"1%i0;0G;;;;0G;;;0;;;;;;G;;;G;;;;;;;	= 	=s   $LL!Nr)   r   returnNoner)   r   rf   zpytest.CaptureFixturer   r   )	__name__
__module____qualname____doc__r[   rj   rn   r~   r   r   r   r   r/   r/   T   s    &%&&*;$<r   r/   c                       e Zd ZdZddZddZy)TestWatchdogStatusu   run_status() 함수 테스트c                d	   ddl m} d}d}t        |t        ||      i      }t	        |t        d|      i      }t        |||        |t        |            }t        |t              }|sddt        j                         v st        j                  t              rt        j                  t              ndd	t        j                         v st        j                  |      rt        j                  |      nd	d
t        j                         v st        j                  t              rt        j                  t              nd
t        j                  |      dz  }	t        t        j                   |	            d}d}
|
|v }|st        j"                  d|fd|
|f      t        j                  |
      d	t        j                         v st        j                  |      rt        j                  |      nd	dz  }dd|iz  }t        t        j                   |            dx}
}|d   }t        |t$              }|sddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dt        j                         v st        j                  t$              rt        j                  t$              ndt        j                  |      dz  }t        t        j                   |            dx}}|d   }t'        |      }d}||k(  }|st        j"                  d|fd||f      dt        j                         v st        j                  t&              rt        j                  t&              ndt        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                   |            dx}x}x}}|d   d   }|d   }
|
|k(  }|st        j"                  d|fd|
|f      t        j                  |
      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                   |            dx}
}y)u9   --status 실행 시 'sessions' 키를 가진 dict 반환.r   
run_statusz
task-400.1rl   順 r3   r5   r6   r7   r8   r9   Nsessionsr?   rA   rB   rD   rE   z5assert %(py5)s
{%(py5)s = %(py0)s(%(py2)s, %(py3)s)
}list)r:   r<   rC   rE   rq   r_   rr   rs   rt   rv   rw   r   rx   )rJ   r   r   r   r   r   r-   rK   r6   r8   rL   rM   rN   rO   rP   rQ   rR   rS   r   rs   )rT   r)   r   r   r   r*   r+   r7   rU   rV   rW   rX   rY   rZ   ry   @py_assert4rz   r{   r|   r}   sessions                        r    test_status_returns_session_listz3TestWatchdogStatus.test_status_returns_session_list   s   7"G-?-Q#RS"G-?-Q#RS;<3x=9&$''''''''z'''z''''''&'''&''''''$'''$''''''''''#zV####zV###z######V###V####### ,3z,d33333333z333z333,333333d333d3333333333*%+s%&+!+&!++++&!++++++s+++s+++%+++&+++!+++++++$Q'y!,!W,,,,!W,,,!,,,,,,W,,,W,,,,,,,r   c                   ddl m} d}d}t        |t        ||      i      }t	        |t        d|      i      }t        |||        |t        |            }t        j                  |d      }t        j                  |      }	|	d	   d   }
d
}||
v }|st        j                  d|fd||
f      t        j                  |      dt        j                         v st        j                   |
      rt        j                  |
      nddz  }dd|iz  }t#        t        j$                  |            dx}}d}||
v }|st        j                  d|fd||
f      t        j                  |      dt        j                         v st        j                   |
      rt        j                  |
      nddz  }dd|iz  }t#        t        j$                  |            dx}}d}||
v }|st        j                  d|fd||
f      t        j                  |      dt        j                         v st        j                   |
      rt        j                  |
      nddz  }dd|iz  }t#        t        j$                  |            dx}}d}||
v }|st        j                  d|fd||
f      t        j                  |      dt        j                         v st        j                   |
      rt        j                  |
      nddz  }dd|iz  }t#        t        j$                  |            dx}}d}||
v }|st        j                  d|fd||
f      t        j                  |      dt        j                         v st        j                   |
      rt        j                  |
      nddz  }dd|iz  }t#        t        j$                  |            dx}}y)uE   status 결과가 JSON 직렬화 가능하고 필수 필드를 포함.r   r   z
task-500.1	dev3-teamiP  r3   Fr]   r   r   r?   rA   r   rB   rD   rE   Nr   r   	usage_pctlevel)rJ   r   r   r   r   r   r-   rK   r'   r(   re   rN   rS   rP   rL   rM   rO   rQ   rR   )rT   r)   r   r   r   r*   r+   r7   rg   rh   r   rW   rX   rY   rZ   s                  r   test_status_output_formatz,TestWatchdogStatus.test_status_output_format   sC   7"G-?-Q#RS"G-?-P#QR;<3x=9 ZZU;
J'$Q'#yG####yG###y######G###G########yG####yG###y######G###G#######(~((((~(((~((((((((((((((((%{g%%%%{g%%%{%%%%%%g%%%g%%%%%%%!w'!!!!w'!!!w!!!!!!'!!!'!!!!!!!r   Nr   )r   r   r   r   r   r   r   r   r   r   r      s    '-&"r   r   c                  X    e Zd ZdZddZddZddZddZddZddZ	ddZ
dd	Zdd
Zy)TestWatchdogIntegrationu   main() 함수 통합 테스트c                   ddl m} t        |t        i       t	        i               |ddt        |      g      }|j                         }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }d	d
|iz  }	t        t        j                  |	            dx}}t        j                   |j"                        }
d}||
v }|st        j                  d|fd||
f      t        j                  |      dt        j                         v st        j                  |
      rt        j                  |
      nddz  }d	d
|iz  }	t        t        j                  |	            dx}}d}||
v }|st        j                  d|fd||
f      t        j                  |      dt        j                         v st        j                  |
      rt        j                  |
      nddz  }d	d
|iz  }	t        t        j                  |	            dx}}d}||
v }|st        j                  d|fd||
f      t        j                  |      dt        j                         v st        j                  |
      rt        j                  |
      nddz  }d	d
|iz  }	t        t        j                  |	            dx}}y)u<   main() --check 모드에서 JSON 출력하고 정상 종료.r   main--check--workspacer_   z%(py0)s == %(py3)s	exit_coder:   rC   rD   rE   Nr>   r?   rA   outputrB   rF   rG   rJ   r   r-   r   r   rK   
readouterrrN   rS   rL   rM   rO   rP   rQ   rR   r'   re   outrT   r)   rf   r   r   capturedrX   ry   rY   rZ   r   rW   s               r   test_main_function_check_modez5TestWatchdogIntegration.test_main_function_check_mode   s   1<#3\"5EF)]CMBC	$$&yA~yAyyAHLL)"yF""""yF"""y""""""F"""F"""""""#zV####zV###z######V###V#######${f$$$${f$$${$$$$$$f$$$f$$$$$$$r   c                j   ddl m} t        |t        i       t	        i               |ddt        |      g      }|j                         }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }d	d
|iz  }	t        t        j                  |	            dx}}t        j                   |j"                        }
d}||
v }|st        j                  d|fd||
f      t        j                  |      dt        j                         v st        j                  |
      rt        j                  |
      nddz  }d	d
|iz  }	t        t        j                  |	            dx}}y)u7   main() --status 모드에서 세션 목록 JSON 출력.r   r   --statusr   r_   r   r   r   rD   rE   Nr   r?   rA   r   rB   r   r   s               r   test_main_function_status_modez6TestWatchdogIntegration.test_main_function_status_mode   s   1<#3\"5EF*mS]CD	$$&yA~yAyyAHLL)#zV####zV###z######V###V#######r   c                   ddl m} d}d}t        |t        ||      i      }t	        |t        d|      i      }t        |||        |ddt        |      g      }d}||k(  }	|	st        j                  d|	fd	||f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      dz  }
dd|
iz  }t        t        j                  |            dx}	}y)u)   normal/warning만 있을 때 exit code 0.r   r   z
task-600.1rl   r   r   r   r_   r   r   r   rD   rE   NrJ   r   r   r   r   r   r-   rK   rN   rS   rL   rM   rO   rP   rQ   rR   rT   r)   r   r   r   r*   r+   r   rX   ry   rY   rZ   s               r   test_exit_code_successz.TestWatchdogIntegration.test_exit_code_success      1"G-?-Q#RS"G-?-Q#RS;<)]CMBC	yA~yAyyAr   c                d   ddl m} d}d}t        |t        ||      i      }t	        |t        d|      i      }t        |||       t        d      5 }t        d      |_	         |dd	t        |      g      }d
d
d
       d}	|	k(  }
|
st        j                  d|
fd||	f      dt        j                         v st        j                  |      rt        j                   |      ndt        j                   |	      dz  }dd|iz  }t#        t        j$                  |            d
x}
}	y
# 1 sw Y   xY w)u'   critical 세션 감지 시 exit code 1.r   r   z
task-700.1rl   r   r   r   r   r   Nrq   r_   r   r   r   rD   rE   )rJ   r   r   r   r   r   r-   r   r   r   rK   rN   rS   rL   rM   rO   rP   rQ   rR   )rT   r)   r   r   r   r*   r+   r   r   rX   ry   rY   rZ   s                r   test_exit_code_on_criticalz2TestWatchdogIntegration.test_exit_code_on_critical  s    1"G-?-Q#RS"G-?-Q#RS;<#$ 	H$-$;H!iHFGI	H yA~yAyyA		H 	Hs   &D&&D/c                   ddl m} d}d}t        |t        ||      i      }t	        |t        d|      i      }t        |||        |ddt        |      g      }d}||k(  }	|	st        j                  d|	fd	||f      d
t        j                         v st        j                  |      rt        j                  |      nd
t        j                  |      dz  }
dd|
iz  }t        t        j                  |            dx}	}y)u1   warning만 있고 critical 없으면 exit code 0.r   r   z
task-800.1rl   rp   r   r   r_   r   r   r   rD   rE   Nr   r   s               r   #test_exit_code_warning_only_is_zeroz;TestWatchdogIntegration.test_exit_code_warning_only_is_zero'  r   r   c                    ddl m} t        |t        i       t	        i               |ddt        |      g      }|j                         }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }d	d
|iz  }	t        t        j                  |	            dx}}t        j                   |j"                        }
|
d   }g }||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            dx}x}}y)u0   세션 없을 때 --status 모드 정상 동작.r   r   r   r   r_   r   r   r   rD   rE   Nr   ra   rb   rc   rd   r   )rT   r)   rf   r   r   r   rX   ry   rY   rZ   r   rW   rU   rV   ri   s                  r   $test_status_mode_no_running_sessionsz<TestWatchdogIntegration.test_status_mode_no_running_sessions6  s    1<#3\"5EF*mS]CD	$$&yA~yAyyAHLL)j!'R'!R''''!R'''!'''R'''''''r   c                   ddl m} t        |t        i       t	        i               |t        |            }d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }d	d
|iz  }t        t        j                  |            dx}}|d   }d}||k7  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            dx}x}}y)u(   check 결과에 timestamp 필드 포함.r   r1   r3   rI   r?   rA   r7   rB   rD   rE   N )!=)z%(py1)s != %(py4)srb   rc   rd   )rJ   r2   r-   r   r   rK   rN   rS   rP   rL   rM   rO   rQ   rR   )rT   r)   r2   r7   rW   rX   rY   rZ   rU   rV   ri   s              r   test_check_result_has_timestampz7TestWatchdogIntegration.test_check_result_has_timestampC  s    6<#3\"5EF#h-8${f$$$${f$$${$$$$$$f$$$f$$$$$$$k"(b("b(((("b((("(((b(((((((r   c                   ddl m} t        t        dd      t        dd      t        dd      d	      }t	        t        d
d      t        d
d      t        d
d      d	      }t        |||        |t        |            }|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            dx}x}}|d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            dx}x}}|d   }g }||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            dx}x}}|d   }g }||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            dx}x}}y)u)   normal 세션 수가 정확히 반환됨.r   r1   	task-n1.1z	dev1-team	task-n2.1rl   	task-n3.1r   )r   r   r   r   r3   r>      r_   ra   rb   rc   rd   NrH   rF   rG   )rJ   r2   r   r   r   r   r-   rK   rN   rS   rP   rQ   rR   )rT   r)   r2   r*   r+   r7   rW   rU   rX   rV   ri   s              r   test_run_check_normals_countz4TestWatchdogIntegration.test_run_check_normals_countN  s   6 #/[I/[I/[I
 #/E/E/E
 	;<#h-8i %A% A%%%% A%%% %%%A%%%%%%%i %A% A%%%% A%%% %%%A%%%%%%%j!'R'!R''''!R'''!'''R'''''''k"(b("b(((("b((("(((b(((((((r   c                   ddl m}  |t        |            }t        |t              }|sddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d	}d
}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }	t        t        j                  |	            d	x}}|d
   }g }||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd|iz  }
t        t        j                  |
            d	x}x}}y	)uB   timers/ledger 파일 없을 때 run_status가 빈 sessions 반환.r   r   r3   r5   r6   r7   r8   r9   Nr   r?   rA   rB   rD   rE   r_   ra   rb   rc   rd   )rJ   r   rK   r6   r8   rL   rM   rN   rO   rP   rQ   rR   rS   )rT   r)   r   r7   rU   rV   rW   rX   rY   rZ   ri   s              r   +test_run_status_returns_empty_when_no_fileszCTestWatchdogIntegration.test_run_status_returns_empty_when_no_filesj  sH   7 3x=9&$''''''''z'''z''''''&'''&''''''$'''$''''''''''#zV####zV###z######V###V#######j!'R'!R''''!R'''!'''R'''''''r   Nr   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s2    (% $"(	))8	(r   r   )r   r8   r   r8   )r   rK   r   rK   r   r8   )rl   )r   intr   rK   r   r8   )r)   r   r*   r8   r+   r8   r   r   )"r   
__future__r   builtinsrL   _pytest.assertion.rewrite	assertionrewriterN   r'   ossysior   pathlibr   unittest.mockr   r   pytestenvironget
_WORKSPACErK   pathinsertr   r   r   r   r-   r/   r   r   r   r   r   <module>r      s   0 #    	 
   * "**..!13HIJ
z?#(("HHOOAs:']X< X<@+" +"fL( L(r   