
    7Wiz                         d Z ddlZddlmc mZ ddlZddlZddl	m
Z
 ddlmZ ej                  j                  dd       ddlZde
dee   ddfd	Zde
d
eddfdZde
defdZd Zd Zd Zd Zd Zy)u  
test_dispatch_counter_sync.py

dispatch.py의 task-counter 정합성 개선에 대한 테스트:
  1. generate_task_id() — 카운터 < timers 최대값 → 보정
  2. generate_task_id() — 카운터 >= timers 최대값 → 보정 없음
  3. _sync_counter_if_needed() — 외부 ID가 카운터보다 큰 경우
  4. _sync_counter_if_needed() — 외부 ID가 카운터보다 작은 경우
  5. _sync_counter_if_needed() — 잘못된 task_id 형식 → 무시
    N)Path)patchz/home/jay/workspacetmp_pathtask_idsreturnc                     | dz  }|j                  dd       |D ci c]  }|ddi	 }}d|i}|dz  j                  t        j                  |dd	
      d       yc c}w )u0   task-timers.json을 tmp_path/memory/ 에 생성.memoryTparentsexist_okstatusdonetasksztask-timers.jsonF   )ensure_asciiindentutf-8encodingN)mkdir
write_textjsondumps)r   r   r	   tidr   datas         B/home/jay/workspace/teams/dev1/tests/test_dispatch_counter_sync.py_make_timersr      sp     F
LLL-089S8V$$9E9UD  ,,TZZ5YZ-[fm,n :s   Avaluec                 r    | dz  }|j                  dd       |dz  j                  t        |      d       y)u3   task-counter 파일을 tmp_path/memory/ 에 생성.r	   Tr
   .task-counterr   r   N)r   r   str)r   r   r	   s      r   _make_counterr"   $   s8     F
LLL-o))#e*w)G    c                 \    t        | dz  dz  j                         j                               S )Nr	   r    )int	read_textstrip)r   s    r   _read_counterr(   +   s)    8#o5@@BHHJKKr#   c                    t        | d       t        | dg       t        j                  t        d|       5  t	        j
                         }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  }t        j                  d
|       dz   d|iz  }t        t        j                  |            dx}}t        |       }d}||k(  }|st        j                  d|fd||f      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t        j                  |      t        j                  |      dz  }t        j                  dt        |              dz   d|iz  }	t        t        j                  |	            dx}x}}y# 1 sw Y   xY w)uj   카운터(100)가 timers 최대(200)보다 작으면 timers 최대+1(201)로 보정되어 task-201 생성.d   
task-200.1	WORKSPACENztask-201==z%(py0)s == %(py3)stask_idpy0py3zExpected task-201, got 
>assert %(py5)spy5   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr(   r   r2   py1r3   py6zExpected counter=202, got 
>assert %(py8)spy8r"   r   r   objectdispatchgenerate_task_id
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_saferepr_format_assertmsgAssertionError_format_explanationr(   
r   r0   @py_assert2@py_assert1@py_format4@py_format6@py_assert5@py_assert4@py_format7@py_format9s
             r   .test_generate_task_id_counter_less_than_timersrS   4   `   (C L>*	hX	6 .++-. !E7j EEE7jEEEEEE7EEE7EEEjEEE$;G9"EEEEEEE"aca"c)aaa"caaaaaa=aaa=aaaaaaaaaaaa"aaacaaa-GV^H_G`+aaaaaaaa. .   IIc                    t        | d       t        | dg       t        j                  t        d|       5  t	        j
                         }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  }t        j                  d
|       dz   d|iz  }t        t        j                  |            dx}}t        |       }d}||k(  }|st        j                  d|fd||f      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t        j                  |      t        j                  |      dz  }t        j                  dt        |              dz   d|iz  }	t        t        j                  |	            dx}x}}y# 1 sw Y   xY w)ui   카운터(300)가 timers 최대(200)보다 크면 카운터 값(300) 그대로 사용해 task-300 생성.i,  r+   r,   Nztask-300r-   r/   r0   r1   zExpected task-300, got r4   r5   i-  r7   r(   r   r8   zExpected counter=301, got r;   r<   r=   rJ   s
             r   1test_generate_task_id_counter_greater_than_timersrW   F   rT   rU   c                 :   | dz  j                  dd       t        | d       t        j                  t        d|       5  t	        j
                  d       ddd       t        |       }d}||k(  }|st        j                  d	|fd
||f      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t        j                  |      t        j                  |      dz  }t        j                  dt        |              dz   d|iz  }t        t        j                  |            dx}x}}y# 1 sw Y   >xY w)uX   카운터(100)보다 큰 task-1280.1 지정 시 카운터가 1281로 업데이트된다.r	   Tr
   r*   r,   ztask-1280.1Ni  r-   r7   r(   r   r8   zExpected counter=1281, got r;   r<   r   r"   r   r>   r?   _sync_counter_if_neededr(   rA   rB   rC   rD   rE   rF   rG   rH   rI   r   rK   rO   rP   rQ   rR   s         r   +test_sync_counter_if_needed_external_largerr\   X   s   t<(C 	hX	6 8((78 "cdc"d*ccc"dcccccc=ccc=cccccccccccc"cccdccc.I-X`JaIb,cccccccc8 8   FFc                 :   | dz  j                  dd       t        | d       t        j                  t        d|       5  t	        j
                  d       ddd       t        |       }d}||k(  }|st        j                  d|fd	||f      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t        j                  |      t        j                  |      dz  }t        j                  dt        |              dz   d|iz  }t        t        j                  |            dx}x}}y# 1 sw Y   >xY w)uU   카운터(1300)보다 작은 task-1200.1 지정 시 카운터는 변하지 않는다.r	   Tr
   i  r,   ztask-1200.1Nr-   r7   r(   r   r8   z'Expected counter=1300 (unchanged), got r;   r<   rY   r[   s         r   ,test_sync_counter_if_needed_external_smallerr_   g   s   t<(D!	hX	6 8((78 "odo"d*ooo"doooooo=ooo=oooooooooooo"ooodooo.UVcdlVmUn,oooooooo8 8r]   c                 :   | dz  j                  dd       t        | d       t        j                  t        d|       5  t	        j
                  d       ddd       t        |       }d}||k(  }|st        j                  d|fd	||f      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t        j                  |      t        j                  |      dz  }t        j                  dt        |              dz   d|iz  }t        t        j                  |            dx}x}}y# 1 sw Y   >xY w)ug   'invalid-id' 같은 잘못된 형식은 예외 없이 무시하며 카운터도 변경하지 않는다.r	   Tr
   i  r,   z
invalid-idNr-   r7   r(   r   r8   z&Expected counter=500 (unchanged), got r;   r<   rY   r[   s         r   *test_sync_counter_if_needed_invalid_formatra   w   s   t<(C 	hX	6 7((67 "mcm"c)mmm"cmmmmmm=mmm=mmmmmmmmmmmm"mmmcmmm-STabjTkSl+mmmmmmmm	7 7r]   )__doc__builtinsrC   _pytest.assertion.rewrite	assertionrewriterA   r   syspathlibr   unittest.mockr   pathinsertr?   listr!   r   r%   r"   r(   rS   rW   r\   r_   ra    r#   r   <module>rn      s   	   
   ( ) o4 o49 o oHD H H HLD LS L
b$
b$dp 	nr#   