
    vxj                    N   d Z ddlmZ ddlZddlmc mZ ddl	Z	e	j                  j                  dd       ddlZddlZddlZddlmZ ddlmZmZ ddlZddlmZmZmZ ddlmZ  ee      j8                  d	z  Zd
Z eejA                  edz         D  cg c])  } | jB                  jE                  e      r| jB                  + c}       Z#ddZ$ddZ%ejL                  jO                  de#      dd       Z(ddZ)ddZ*ddZ+ddZ,ddZ-e.dk(  r ej^                  edg       yyc c} w )zIntegration tests for v3.6 layer-0 task md sha contract (fixture-driven).

chair_authorization_id=CHAIR-AUTH-TASK-2705PLUS1-V36-TASK-MD-SHA-BOOTSTRAP-260528
    )annotationsNz/home/jay/workspace)Path)AnyDict)DECISION_ALLOWclassifymeasure_sha_file)write_task_md_sha_markerfixturesv36_task_md_sha_z*.jsonc                2    | y t        j                  |       S )N)base64	b64decode)values    B/home/jay/workspace/tests/harness/test_v36_task_md_sha_contract.py_b64_to_bytesr   %   s    }E""    c                    t        t        | z  dd      5 }t        j                  |      cd d d        S # 1 sw Y   y xY w)Nrutf-8encoding)openFIXTURE_DIRjsonload)namefhs     r   _load_fixturer   +   s5    	kD #	8 Byy}  s   5>fixture_namec                   t        |       }|d   }|d   }t        |j                  d      |j                  d      |j                  d      t        |j                  d            t        |j                  d            t        |j                  d            	      }d
D ]  }||   }||   }||k(  }|st	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }	t	        j                  |  d| d||   d||         dz   d|	iz  }
t        t	        j                  |
            d x}x}} y )Ninputsexpected_decisiondispatch_pre_shadispatch_post_shaexecutor_observed_shapre_content_b64post_content_b64observed_content_b64pre_shapost_shaobserved_shapre_contentpost_contentobserved_content)
patch_typecontent_verbatim_matchcontinue_alloweddecision_classmismatch_location==z%(py1)s == %(py4)spy1py4 z mismatch: got z, expected z
>assert %(py6)spy6)
r   r   getr   
@pytest_ar_call_reprcompare	_saferepr_format_assertmsgAssertionError_format_explanation)r    fixturer"   expectedresultkey@py_assert0@py_assert3@py_assert2@py_format5@py_format7s              r   test_fixture_classifyrN   0   sc   L)GXF*+H

-./0ZZ 78!&**->"?@"6::.@#AB&vzz2H'IJF 	] 3K	]#C=	]=(	]K\K\	]=	] 	]S\S\ 	] 	]S\S\ )	] 	]K\K\l^1SE{8TW=J[\	] 	] 	]I\I\	] 	] 	]	]r   c                    t        d      } | d   }t        |j                  d      |j                  d      |j                  d      t        |j                  d            t        |j                  d            t        |j                  d            	      }|d
   }|t        k(  }|st        j                  d|fd|t        f      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}}|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   }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 )N1v36_task_md_sha_replay_task_2705_1byte_strip.jsonr"   r$   r%   r&   r'   r(   r)   r*   r4   r6   )z%(py1)s == %(py3)sr   )r:   py3assert %(py5)spy5r1   WHITESPACE_NORMALIZATIONr8   r9   assert %(py6)sr=   r2   truer3   )r   r   r>   r   r   r?   r@   rA   @py_builtinslocals_should_repr_global_namerC   rD   )
rE   r"   rG   rI   rK   @py_format4@py_format6rJ   rL   rM   s
             r   "test_task_2705_replay_yields_allowr\   K   s   OPGXF

-./0ZZ 78!&**->"?@"6::.@#AB&vzz2H'IJF "#5#~5555#~555#555555~555~5555555,=#==#=====#=======#========*+5v5+v5555+v555+555v5555555$%//%////%///%//////////r   c                   | dz  }|j                  d       t        t        |            \  }}}g }d }||u}|}|rt        |      }	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  }|j                  |       |rt	        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  }|j                  |       t	        j                  |d      i z  }dd|iz  }t        t	        j                  |            d x}x}x}x}x}	x}}
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}}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 )Nzx.mds   hello world
@   is not)z%(py2)s is not %(py5)sshapy2rS   %(py7)spy7r6   )z4%(py12)s
{%(py12)s = %(py9)s(%(py10)s)
} == %(py15)slen)py9py10py12py15z%(py17)spy17r   zassert %(py20)spy20   )z%(py0)s == %(py3)ssizepy0rQ   rR   rS   content)write_bytesr	   strrf   r?   r@   rW   rX   rY   rA   append_format_booloprC   rD   )tmp_pathpra   rn   rq   @py_assert1@py_assert4rJ   rI   @py_assert11@py_assert14@py_assert13r[   @py_format8@py_format16@py_format18@py_format19@py_format21rK   rZ   s                       r   test_measure_sha_file_existingr   \   s   6AMM"#)#a&1Cw-d-3d?-s3x-2-x2~----3d------3---3---d-------x2------s---s------3---3---x---2--------------42:42442&&7&&&&&7&&&&&&&7&&&7&&&&&&&&&&&r   c                 R   t        d      \  } }}g }d }| |u }|}|rd }||u }|}|rd }	||	u }
|
}|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  }|j                  |       |rt        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  }|j                  |       |rt        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  }|j                  |       t        j                  |d      i z  }dd|iz  }t        t        j                  |            d x}x}x}x}x}x}x}
}	y )Nz/nonexistent/path.md)is)z%(py2)s is %(py5)sra   rb   rd   re   )z%(py9)s is %(py12)srn   )rg   ri   z%(py14)spy14)z%(py16)s is %(py19)srq   )py16py19z%(py21)spy21r   zassert %(py24)spy24)r	   r?   r@   rW   rX   rY   rA   rt   ru   rC   rD   )ra   rn   rq   rx   ry   rJ   rI   rz   @py_assert10@py_assert18@py_assert17r[   r}   @py_format13@py_format15@py_format20@py_format22@py_format23@py_format25s                      r   test_measure_sha_file_missingr   e   s(   )*@ACw;$;3$;;4;44<;t;GtO;;;;3$;;;;;;3;;;3;;;$;;;;;;;44;;;;;;4;;;4;;;4;;;;;;;Gt;;;;;;G;;;G;;;t;;;;;;;;;;;;;;r   c                8   t        ddddddddddd	d
t        |             }d}||u}|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                  } ||      }|sddt	        j
                         v st        j                  t              rt        j                  t              ndt        j                  |      t        j                  |      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dz  }t        t        j                  |            dx}x}}t        |dd      5 }	t        j                  |	      }
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    }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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#   }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# 1 sw Y   xY w)$z=Writer must produce a 14-field JSON file matching the schema.ztask-test-1abcdefNO_PATCHrV   ALLOWpost_observed_match_allowUNKNOWN)r1   r2   r3   r4   reason_coder5   z
CHAIR-TEST)task_idr$   r%   r&   classificationchair_authorization_id
events_dirNr_   )z%(py0)s is not %(py3)smarker_pathro   rR   rS   zbassert %(py7)s
{%(py7)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.path
}.exists
}(%(py5)s)
}os)rp   rc   r;   rS   re   r   r   r   schema_versionzv36.task_md_sha_decision.v1r6   r8   r9   rU   r=   r   shas)r$   r%   r&   r   )r
   rs   r?   r@   rW   rX   rY   rA   rC   rD   r   pathexistsr   r   r   )rv   r   rK   rx   rZ   r[   rJ   @py_assert6r}   r   markerrI   rL   rM   s                 r   test_marker_writer_safe_failr   j   s   *#$&, &%6!*
  ,x=K  #";d"""";d"""""";""";"""d"""""""77&7>>&>+&&&&&&&&2&&&2&&&7&&&>&&&&&&+&&&+&&&&&&&&&&	k3	1 R2"#D'DD#'DDDDD#'DDDD#DDD'DDDDDDDD)-------------------&> !"!& >    	>    	    	     	 
 *+;|;+|;;;;+|;;;+;;;|;;;;;;; s   ,PPc                 D   g d} | D ]  }t         |z  }|j                  } |       }|st        j                  d|       dz   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        t        j                  |            dx}x}} y)z,Make sure all required fixtures are present.)	z-v36_task_md_sha_fixture_1_allow_no_patch.jsonz,v36_task_md_sha_fixture_2_allow_sidecar.jsonz1v36_task_md_sha_fixture_3_allow_retry_header.jsonz/v36_task_md_sha_fixture_4_allow_whitespace.jsonz0v36_task_md_sha_fixture_5_hold_unverifiable.jsonz3v36_task_md_sha_fixture_6_deny_semantic_change.jsonz4v36_task_md_sha_fixture_7_deny_forbidden_change.jsonz.v36_task_md_sha_fixture_8_e2e_integration.jsonrP   zMissing fixture: zO
>assert %(py6)s
{%(py6)s = %(py4)s
{%(py4)s = (%(py0)s / %(py1)s).exists
}()
}r   r   )rp   r:   r;   r=   N)
r   r   r?   rB   rW   rX   rY   rA   rC   rD   )requiredr   rK   rJ   @py_assert5rM   s         r   test_fixture_files_existr      s    
H  Id"H"**H*,H,HH0A$.HHHHHHHHHHHHHHHHdHHHdHHH*HHH,HHHHHHIr   __main__z-v)r   r   returnr   )r   rs   r   zDict[str, Any])r    rs   r   None)r   r   )rv   r   r   r   )0__doc__
__future__r   builtinsrW   _pytest.assertion.rewrite	assertionrewriter?   sysr   insertr   r   r   pathlibr   typingr   r   pytest(scripts.harness.v36.task_md_sha_contractr   r   r	   -scripts.harness.v36.task_md_sha_marker_writerr
   __file__parentr   FIXTURE_PREFIXsortedglobr   
startswith_FIXTURE_FILESr   r   markparametrizerN   r\   r   r   r   r   __name__main)rw   s   0r   <module>r      s    #   
 ( )   	    
 S8n##j0# !!.8";<66^, 	
#
 8] 9]40"'<
<@I" zFKK4 ! }s   .D"