
    Si                        d Z ddlZddlZddlZddlmZ ddlZej                  j                  d e	 ee
      j                  j                  j                               ddlmZmZmZ  G d d      Z G d d      Z G d	 d
      Zy)u&   utils/interrupt.py 테스트 스위트    N)Path)	INTERRUPTInterruptFlagregister_signal_handlerc                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	TestInterruptFlagu(   InterruptFlag 클래스 단위 테스트c                 @    t               }|j                         du sJ y)u   생성 직후 is_set()은 FalseFN)r   is_setselfflags     K/home/jay/workspace/.worktrees/task-2117-dev1/utils/tests/test_interrupt.pytest_initial_state_is_not_setz/TestInterruptFlag.test_initial_state_is_not_set   s    {{}%%%    c                 `    t               }|j                          |j                         du sJ y)u!   set() 호출 후 is_set()은 TrueTNr   setr
   r   s     r   test_set_makes_is_set_truez,TestInterruptFlag.test_set_makes_is_set_true   s&    
{{}$$$r   c                     t               }|j                          |j                          |j                         du sJ y)u$   reset() 호출 후 is_set()은 FalseFN)r   r   resetr
   r   s     r   test_reset_clears_flagz(TestInterruptFlag.test_reset_clears_flag   s/    


{{}%%%r   c                     t               }|j                          |j                          |j                         du sJ y)u,   set()을 여러 번 호출해도 True 유지TNr   r   s     r   test_set_is_idempotentz(TestInterruptFlag.test_set_is_idempotent%   s/    

{{}$$$r   c                 `    t               }|j                          |j                         du sJ y)u)   set() 없이 reset() 해도 오류 없음FN)r   r   r
   r   s     r   test_reset_without_setz(TestInterruptFlag.test_reset_without_set,   s&    

{{}%%%r   c                 
   t               g fd}t        d      D cg c]  }t        j                  |       }}|D ]  }|j	                           |D ]  }|j                           t              dk(  sJ yc c}w )u'   멀티 스레드에서 set/reset 안전c                      	 t        d      D ]2  } j                          j                          j                          4 y # t        $ r}j                  |       Y d }~y d }~ww xY w)Nd   )ranger   r
   r   	Exceptionappend)_eerrorsr   s     r   workerz4TestInterruptFlag.test_thread_safety.<locals>.worker7   sW    !s !AHHJKKMJJL!  !a  !s   A A 	A(A##A(   )targetr   N)r   r   	threadingThreadstartjoinlen)r   r%   r"   threadstr$   r   s        @@r   test_thread_safetyz$TestInterruptFlag.test_thread_safety2   s    "$	! =B!HEq9##62EE 	AGGI	 	AFFH	 6{a Fs   B N)
__name__
__module____qualname____doc__r   r   r   r   r   r/    r   r   r   r      s#    2&
%&%& r   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)TestGlobalInterruptu*   글로벌 INTERRUPT 인스턴스 테스트c                 ,    t        j                          y Nr   r   r   s    r   setup_methodz TestGlobalInterrupt.setup_methodL       r   c                 0    t        t        t              sJ y)u8   INTERRUPT 글로벌 인스턴스가 InterruptFlag 타입N)
isinstancer   r   r:   s    r   test_global_instance_existsz/TestGlobalInterrupt.test_global_instance_existsO   s    )]333r   c                 4    t        j                         du sJ y)u   초기 상태는 미설정FN)r   r
   r:   s    r   &test_global_instance_initially_not_setz:TestGlobalInterrupt.test_global_instance_initially_not_setS   s    !U***r   c                     t        j                          t        j                         du sJ t        j                          t        j                         du sJ y)u'   글로벌 인스턴스 set/reset 동작TFN)r   r   r
   r   r:   s    r   test_global_set_and_resetz-TestGlobalInterrupt.test_global_set_and_resetW   sC    !T)))!U***r   N)r0   r1   r2   r3   r;   r?   rA   rC   r4   r   r   r6   r6   I   s    44++r   r6   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestRegisterSignalHandleru#   register_signal_handler() 테스트c                 ,    t        j                          y r8   r9   r:   s    r   r;   z&TestRegisterSignalHandler.setup_methodb   r<   r   c                     t        j                   t         j                  t         j                         t        j                   t         j                  t         j                         t	        j
                          y)u,   시그널 핸들러 복원 (기본값으로)N)signalSIGINTSIG_DFLSIGTERMr   r   r:   s    r   teardown_methodz)TestRegisterSignalHandler.teardown_methode   s8    fmmV^^4fnnfnn5r   c                     t                y)u2   register_signal_handler() 호출 시 예외 없음N)r   r:   s    r   test_register_does_not_raisez6TestRegisterSignalHandler.test_register_does_not_raisek   s    !r   c                     t                t        j                  t        j                         t	        j
                         du sJ y)u,   SIGINT 수신 시 INTERRUPT.is_set() == TrueTN)r   rH   raise_signalrI   r   r
   r:   s    r   test_sigint_sets_interruptz4TestRegisterSignalHandler.test_sigint_sets_interrupto   s1    !FMM*!T)))r   c                     t                t        j                  t        j                         t	        j
                         du sJ y)u-   SIGTERM 수신 시 INTERRUPT.is_set() == TrueTN)r   rH   rP   rK   r   r
   r:   s    r   test_sigterm_sets_interruptz5TestRegisterSignalHandler.test_sigterm_sets_interruptv   s1    !FNN+!T)))r   N)	r0   r1   r2   r3   r;   rL   rN   rQ   rS   r4   r   r   rE   rE   _   s    -"**r   rE   )r3   rH   sysr(   pathlibr   pytestpathinsertstr__file__parentutils.interruptr   r   r   r   r6   rE   r4   r   r   <module>r]      si    ,  
    3tH~,,33::; < M M6  6 r+ +,* *r   