
    jK$                       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
mZ ddlZddlmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZ  ee      j:                  dz  dz  Zdd	Zdd
Z ddZ!ddZ"ejF                  jI                  ddddddddedfdddddddedfdddddddedfg      	 	 	 	 	 	 	 	 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)uL   tests.test_dispatch_spawn_verifier_2645 — task-2645 spawn gate regression.    )annotationsN)Path)
HISTORY_ABSENT_AFTER_COMPLETIONHISTORY_ABSENT_IN_PROGRESSHISTORY_ABSENT_SILENT_DROPHISTORY_PRESENTSpawnSignalscollect_signalsdispatched_dict_is_unverifiedevaluate_signalsis_silent_drop_confirmedverify_spawn)DISPATCH_SILENT_DROP_HOLDDISPATCH_SUBMITTED_UNVERIFIEDDISPATCH_VERIFIED_SPAWNfixturesdispatch_gatec                 \    t        dddddd      }|j                  |        t        di |S )NTFworkspace_dir_existsworkspace_dir_has_activityexecutor_process_presentschedule_visible_in_cron_list schedule_accepted_marker_presentschedule_history_log_present )dictupdater	   )	overridesdefaultss     X/home/jay/workspace/.worktrees/task-2645-dev2/tests/test_dispatch_spawn_verifier_2645.py_signalsr"       s:    !#'!%&+)-%)H OOI#(##    c                    t               } | j                         }dD ]  }||v }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      nddt	        j
                         v st        j                  |      rt        j                  |      nddz  }dd|iz  }t        t        j                  |            d } y )	Nr   in)z%(py0)s in %(py2)skj)py0py2zassert %(py4)spy4)
r"   to_json
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation)sr(   r'   @py_assert1@py_format3@py_format5s         r!   &test_signals_dataclass_has_all_4_itemsr9   .   sr    
A			A  AvqAqqAAr#   c                 
   t        j                  t        dz  j                               } t	        di | d   d   }t        | d   d   |      }|j                  }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|j                  }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|j                   }| d   d   }||k(  }|t"        k(  }|r|st        j                  d||fd||t"        f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dt        j                         v st        j                  t"              rt        j                  t"              nddz  }dd|iz  }	t        t        j                  |	            d x}x}x}}|j$                  }| d   d   }||k(  }|t&        k(  }|r|st        j                  d||fd||t&        f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dt        j                         v st        j                  t&              rt        j                  t&              nddz  }dd|iz  }	t        t        j                  |	            d x}x}x}}t)        |      }
d}|
|u }|st        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  }dd|iz  }t        t        j                  |            d x}
x}}y )Nzspawn_success.jsoninputsignalscron_idTisz0%(py2)s
{%(py2)s = %(py0)s.verified
} is %(py5)srr)   r*   py5assert %(py7)spy7Fz3%(py2)s
{%(py2)s = %(py0)s.silent_drop
} is %(py5)sexpectedhistory_state==rJ   z5%(py2)s
{%(py2)s = %(py0)s.history_state
} == %(py6)s%(py6)s == %(py7)sr   r)   r*   py6rE   assert %(py9)spy9next_statusz3%(py2)s
{%(py2)s = %(py0)s.next_status
} == %(py6)srL   r   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} is %(py6)sr   r)   py1py3rN   assert %(py8)spy8r   )jsonloadsFIXTURE_DIR	read_textr	   r   verifiedr-   r.   r/   r0   r1   r2   r3   r4   silent_droprH   r   rQ   r   r   fixr5   rA   r6   @py_assert4@py_assert3@py_format6@py_format8@py_assert5@py_format10@py_assert2@py_format7@py_format9s                r!   (test_verified_spawn_from_fixture_successrj   =   s
   
**k$88CCE
FC/s7|I./AWi0!4A::::11:==!E!=E!!!!=E!!!!!!1!!!1!!!=!!!E!!!!!!!??Qc*oo>Q?>QQ>/QQQQQ?>/QQQQQQ1QQQ1QQQ?QQQ>QQQQQQ/QQQ/QQQQQQQ==UC
OM:U=:UU:>UUUUUU=:>UUUUUUU1UUU1UUU=UUU:UUUUUU>UUUU>UUUUUUUU#A&/%/&%////&%//////#///#//////A///A///&///%///////r#   c                 
   t        j                  t        dz  j                               } t	        di | d   d   }t        | d   d   |      }|j                  }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|j                  }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            d x}x}}|j                   }| d   d   }||k(  }|t"        k(  }|r|st        j                  d||fd||t"        f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dt        j                         v st        j                  t"              rt        j                  t"              nddz  }dd|iz  }	t        t        j                  |	            d x}x}x}}|j$                  }| d   d   }||k(  }|t&        k(  }|r|st        j                  d||fd||t&        f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dt        j                         v st        j                  t&              rt        j                  t&              nddz  }dd|iz  }	t        t        j                  |	            d x}x}x}}t)        |      }
d}|
|u }|st        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  }dd|iz  }t        t        j                  |            d x}
x}}y )Nzspawn_silent_drop.jsonr;   r<   r=   Fr>   r@   rA   rB   rD   rE   TrF   rG   rH   rI   rK   r   rM   rO   rP   rQ   rR   r   rS   r   rT   rW   rX   r   )rY   rZ   r[   r\   r	   r   r]   r-   r.   r/   r0   r1   r2   r3   r4   r^   rH   r   rQ   r   r   r_   s                r!   0test_silent_drop_confirmed_from_673aa5a6_fixturerl   I   s   
**k$<<GGI
JC/s7|I./AWi0!4A::::11:== D =D    =D      1   1   =   D       ??\c*oo>\?>\\>B\\\\\\?>B\\\\\\\1\\\1\\\?\\\>\\\\\\B\\\\B\\\\\\\\==WC
OM:W=:WW:>WWWWWW=:>WWWWWWW1WWW1WWW=WWW:WWWWWW>WWWW>WWWWWWWW#A&.$.&$....&$......#...#......A...A...&...$.......r#   z-override,expected_status,expected_silent_dropTF)r   r   r   r   r   r   c                   t        di | }t        d|      }|j                  }||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      nd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}}|j                  }||u }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      nd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 )NzCRON-PARTIALrJ   z3%(py2)s
{%(py2)s = %(py0)s.next_status
} == %(py4)srA   expected_statusr)   r*   r+   assert %(py6)srN   r>   )z3%(py2)s
{%(py2)s = %(py0)s.silent_drop
} is %(py4)sexpected_silent_dropr   )r	   r   rQ   r-   r.   r/   r0   r1   r2   r3   r4   r^   )	overriderp   rs   r5   rA   r6   rb   r8   rh   s	            r!   7test_partial_signals_do_not_falsely_confirm_silent_dropru   U   s   . 	 x A+A==+=O++++=O++++++1+++1+++=++++++O+++O+++++++==0=00000=000000010001000=000000000000000000r#   c                    t        dddddd      } t        d|       }|j                  }|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              ndd	z  }d
d|iz  }t        t	        j                  |            d x}}t        dddddd      }t        d|      }|j                  }|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              ndd	z  }d
d|iz  }t        t	        j                  |            d x}}t        dddddd      }t        d|      }	|	j                  }|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |	      rt	        j                  |	      ndt	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              ndd	z  }d
d|iz  }t        t	        j                  |            d x}}t        dt                     }
|
j                  }|t        k(  }|st	        j
                  d|fd|t        f      dt        j                         v st	        j                  |
      rt	        j                  |
      ndt	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              ndd	z  }d
d|iz  }t        t	        j                  |            d x}}y )NTFr   zC-INPrn   )z5%(py2)s
{%(py2)s = %(py0)s.history_state
} == %(py4)sr1r   rq   rr   rN   zC-DONEr2r   zC-DROPr3r   zC-OKr4r   )r	   r   rH   r   r-   r.   r/   r0   r1   r2   r3   r4   r   r   r"   r   )s_inprw   r6   rb   r8   rh   s_donerx   s_dropry   rz   s              r!   'test_history_absent_3_states_separationr~   s   s   !d!%U).UE
 
'5	)B999999999999929992999999999999999999999 !d!&e)-EF
 
(F	+B>>>>>>>>>>>>>2>>>2>>>>>>>>>>>>>>>>>>>>> "u!&e).UF
 
(F	+B999999999999929992999999999999999999999 
&(*	-B...........2...2...................r#   c                   | dz  }| dz  }|dz  j                  d       |dz  dz  j                  d       |j                          |dz  j                  d	       t        dt        |      t        |      d
d
d      }|j                  }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                   }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )NwshistABCDEF12T)parentsmarkerxzABCDEF12.logz
run record)r   r   workspace_rootschedule_history_rootcron_list_idsexecutor_process_idsaccepted_marker_idsr>   )z<%(py2)s
{%(py2)s = %(py0)s.workspace_dir_exists
} is %(py5)sr5   rB   rD   rE   )zB%(py2)s
{%(py2)s = %(py0)s.workspace_dir_has_activity
} is %(py5)s)zD%(py2)s
{%(py2)s = %(py0)s.schedule_history_log_present
} is %(py5)s)z@%(py2)s
{%(py2)s = %(py0)s.executor_process_present
} is %(py5)s)zE%(py2)s
{%(py2)s = %(py0)s.schedule_visible_in_cron_list
} is %(py5)s)mkdir
write_textr
   strr   r-   r.   r/   r0   r1   r2   r3   r4   r   r   r   r   )	tmp_pathws_root	hist_rootr5   r6   ra   rb   rc   rd   s	            r!   %test_collect_signals_reads_filesystemr      s   oG6!Iz   .zH$005++L97|!)n#*	A !!)T)!T))))!T))))))1)))1)))!)))T)))))))''/4/'4////'4//////1///1///'///4///////))1T1)T1111)T11111111111111)111T1111111%%--%----%------1---1---%----------**2d2*d2222*d22222212221222*222d2222222r#   c                   t        dt        | dz        t        | dz        ddd      }t        d|      }|j                  }d}||u }|st	        j
                  d|fd||f      d	t        j                         v st	        j                  |      rt	        j                  |      nd	t	        j                  |      t	        j                  |      d
z  }dd|iz  }t        t	        j                  |            d x}x}}|j                  }|t        k(  }|st	        j
                  d|fd|t        f      d	t        j                         v st	        j                  |      rt	        j                  |      nd	t	        j                  |      dt        j                         v st	        j                  t              rt	        j                  t              nddz  }dd|iz  }	t        t	        j                  |	            d x}}y )N
MISSING123r   r   r   r   Tr>   rF   rA   rB   rD   rE   rn   ro   r   rq   rr   rN   )r
   r   r   r^   r-   r.   r/   r0   r1   r2   r3   r4   rQ   r   )
r   r5   rA   r6   ra   rb   rc   rd   r8   rh   s
             r!   5test_collect_signals_silent_drop_when_nothing_presentr      s,   8d?+!(V"34	A 	q)A== D =D    =D      1   1   =   D       ==5=55555=555555515551555=555555555555555555r#   c                t   t        dt        | dz        t        | dz        ddd      }t        |      }d}||u }|st        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  }dd|iz  }t        t        j                  |            d x}x}}y )NDEAD1234r   r   r   r   Tr>   rS   r   rA   rT   rW   rX   )r   r   r   r-   r.   r/   r0   r1   r2   r3   r4   )r   rA   rg   re   ra   rh   ri   s          r!   'test_verify_spawn_composite_silent_dropr      s    8d?+!(V"34	A $A&.$.&$....&$......#...#......A...A...&...$.......r#   c                    ddddd} t        |       }d}||u }|st        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  }dd|iz  }t        t        j                  |            d x}x}}dt        i}t        |      }d}||u }|st        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  }dd|iz  }t        t        j                  |            d x}x}}ddt        dd}t        |      }d}||u }|st        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  }dd|iz  }t        t        j                  |            d x}x}}y )N
dispatchedok673AA5A6)statusid)r   cron_responseTr>   rS   r   drT   rW   rX   r   d2)r]   rQ   )r   spawn_verificationFd3)r   r-   r.   r/   r0   r1   r2   r3   r4   r   r   )r   rg   re   ra   rh   ri   r   r   s           r!   4test_dispatched_dict_legacy_is_treated_as_unverifiedr      s   T2TUA(+3t3+t3333+t333333(333(333333333333+333t3333333
1	2B(,44,4444,444444(444(444444444444,4444444444 +/@WX
B ),55,5555,555555(555(555555555555,5555555555r#   c                 j   d } t        |       }d}||u }|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} t        |       }d}||u }|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} t        |       }d}||u }|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}}y )	NFr>   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} is %(py7)sr   )r)   r*   r+   rE   rO   rP   r   )	r   r-   r.   r/   r0   r1   r2   r3   r4   )r6   rb   @py_assert6re   rd   rf   s         r!   %test_dispatched_dict_handles_non_dictr      s   )-7(.7%7.%7777.%777777(777(777777.777%7777777)-7(.7%7.%7777.%777777(777(777777.777%7777777*.9(09E90E99990E999999(999(9999990999E9999999r#   c                    t               } t        d|       }|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}}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 )NXschemaz%dispatch.spawn_verification_result.v1rn   )z%(py1)s == %(py4)s)rU   r+   rr   rN   r<   r%   )z%(py1)s in %(py3)sr(   )rU   rV   zassert %(py5)srC   rQ   )r"   r   r,   r-   r.   r2   r3   r4   r/   r0   r1   )
r5   rA   r(   @py_assert0rb   rg   r8   rh   @py_format4rc   s
             r!   test_result_json_schema_idr      s#   
Aa A			AX;AAA;AAAAA;AAAA;AAAAAAAAAAA9>99=A=A=AAr#   )r   boolreturnr	   )r   None)rt   r   rp   r   rs   r   r   r   )r   r   r   r   )-__doc__
__future__r   builtinsr/   _pytest.assertion.rewrite	assertionrewriter-   rY   pathlibr   pytestutils.dispatch_spawn_verifierr   r   r   r   r	   r
   r   r   r   r   utils.dispatch_status_enumr   r   r   __file__parentr[   r"   r9   rj   rl   markparametrizeru   r~   r   r   r   r   r   r   r   r#   r!   <module>r      s;   R "         8n##j0?B
$0/ 3 #'d&+U.3V[
] 
!%	)
 #(u&*E.3V[
] 
!%	)
 #(u&+U.3VZ
\ 
'	/(11%(1@D1	1)(1/F3.6	/
6:r#   