
    #j                       d dl mZ d dl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 d dlZ ee      j                  Zej                  dz  ZddZ eded	z        Z ed
ed	z        ZddZddZddZej0                  j3                  dg d      	 	 	 	 	 	 	 	 dd       ZddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZddZddZddZ y)    )annotationsN)Path)SimpleNamespace)Mockz5task26-post-lifecycle-cleanup-v3-4a6c7ee5-st_01a00e50c                    t         j                  j                  | |      }|r|j                  sJ t         j                  j	                  |      }|j                  j                  |       |S N)	importlibutilspec_from_file_locationloadermodule_from_specexec_module)namepathspecmodules       e.omo/evidence/task26/task26-post-lifecycle-cleanup-v4-4a6c7ee5-st_01a00e68/test_cleanup_controller.pyloadr      sR    >>11$=DDKK^^,,T2FKKF#M    
cleanup_v4cleanup_controller.pycleanup_v3_regressionc                6    t        | j                  d            S )Nz.task26-cleanup-*)listglob)r   s    r   temp_entriesr      s    		-.//r   c                    t         j                  g dfd}|j                  t        j                   d|       | dz  }d}t        j	                  ||       |j                         |k(  sJ t              dk(  sJ t        |       g k(  sJ y )Nc                h    t        dt        |            }j                  |        | |d |       S )N   )minlenappend)fdrawsizecalls
real_writes      r   partialzHtest_atomic_repeated_partial_writes_publish_exact_bytes.<locals>.partial%   s2    1c#hT"c%4j))r   writepayloads   0123456789abcdef   r#   intr$   bytes | memoryviewreturnr-   )osr)   setattrMODULEatomic
read_bytesr!   r   )tmp_pathmonkeypatchr(   targetexpectedr&   r'   s        @@r   7test_atomic_repeated_partial_writes_publish_exact_bytesr9   !   s    JE*
 		7G4	!F"H
MM&(#(***u:??!R'''r   c                
   t         j                  ddfd}|j                  t        j                   d|       | dz  }t        j	                  |d       |j                         dk(  sJ dk(  sJ t        |       g k(  sJ y )Nr   c                6    dz  dk(  rt          | |      S )N   )InterruptedError)r#   r$   attemptsr'   s     r   interrupted_oncezMtest_atomic_retries_interrupted_write_then_succeeds.<locals>.interrupted_once7   s&    Aq="""c""r   r)   receipt.jsons   {"status":"PASS"}
r   r,   )r0   r)   r1   r2   r3   r4   r   )r5   r6   r?   r7   r>   r'   s       @@r   3test_atomic_retries_interrupted_write_then_succeedsrA   3   s    JH# 		7,<=&F
MM&01"8888q==!R'''r   	bad_count)r   c   Tc                d   | dz  }|j                  d       |j                  t        j                  dfd       t	        j
                  t        j                  d      5  t        j                  |d       d d d        |j                         dk(  sJ t        |       g k(  sJ y # 1 sw Y   /xY w)Narchives
   sealed-oldr)   c                    S r    )_fd_rawrB   s     r   <lambda>zItest_atomic_rejects_invalid_write_counts_without_rename.<locals>.<lambda>L   s    ir   zinvalid write countmatchs   new-archive)
write_bytesr1   r2   r0   pytestraisesCleanupErrorr3   r4   r   )r5   r6   rB   r7   s     ` r   7test_atomic_rejects_invalid_write_counts_without_renamerR   F   s     	!F
}%		7,GH	v**2G	Hfn- 
I-///!R''' 
I	Hs   !B&&B/c                (   | dz  }dd}|j                  t        j                  d|       t        j                  t
        d      5  t        j                  |d       d d d        |j                         rJ t        |       g k(  sJ y # 1 sw Y   ,xY w)Nr@   c                    t        d      )Nzsimulated media failure)OSError)rI   rJ   s     r   failz>test_atomic_oserror_never_renames_or_leaves_temp.<locals>.failV   s    /00r   r)   zmedia failurerL   s   must-not-publish)rI   r-   rJ   r.   r/   r-   )	r1   r2   r0   rO   rP   rU   r3   existsr   )r5   r6   r7   rV   s       r   0test_atomic_oserror_never_renames_or_leaves_temprX   S   sv    &F1 		7D1	wo	6f12 
7}}!R''' 
7	6s   BBc           	        | dz  }|j                          |dz  j                  d       t        || dz  d      }t        t	        d            }|j                  t        j                  d|       |j                  t        j                  d	t        t        d
                   ddt        j                  d      ddg}t        j                  t        d
      5  t        j                  |i ddiddg|i i        d d d        |j                  dz  j                         rJ |j                  dz  j                         rJ |j                   dk(  sJ y # 1 sw Y   YxY w)Nprofilezauthority.jsons	   authorityarchivesrun)rZ   archive_rootrun_idmutation command must not runside_effectr)   zarchive write failed	   0600)r   r%   sha256moderL   r   unused)bindingsservicez.pending-runr   )mkdirrN   r   r   AssertionErrorr1   r2   
subprocessr0   rU   digestrO   rP   archive_prestater]   rW   
call_count)r5   r6   rZ   argsmutation_runnerrowss         r   Gtest_archive_write_failure_removes_pending_and_runs_no_mutation_commandrr   `   s7    "GMMO,,\:7J9NW\]D~6U'VWO))5/B		7DWE[=\,]^%qFMM,<WaghiD	w&<	=268BT&UXhWikoqsuwx 
>!!E)11333!!N2::<<<%%***	 
>	=s   !EEc                4   t         j                  dfd}| dz  }|j                  t        j                   d|       t        j	                  |d       |j                         dk(  sJ | dz  }t        j	                  |d       |j                         dk(  sJ y )Nc                     | |d d       S )N   rH   )r#   r$   r'   s     r   r(   zOtest_regression_v3_truncates_partial_write_while_v4_writes_all.<locals>.partialw   s    "c"1g&&r   v3r)   s   abcdefghs   abcv4r,   )r0   r)   r1   	V3_MODULEr3   r4   r2   )r5   r6   r(   
old_target
new_targetr'   s        @r   >test_regression_v3_truncates_partial_write_while_v4_writes_allr{   r   s     J' DJ	gw7Z-  "f,,,DJ
MM*k*  "k111r   c                J   t        t        d            }| j                  t        j                  d|       t        j                  t        j                  d      5  t        j                  t               dddii       d d d        |j                  d	k(  sJ y # 1 sw Y   xY w)
Nr_   r`   r\   zforbids mutation replayrL   completed_cleanupstatus%PASS_VERIFIED_DISABLED_ARCHIVED_CLEANr   )r   rj   r1   r2   rk   rO   rP   rQ   executer   rn   )r6   rp   s     r   9test_completed_cleanup_blocks_execute_before_any_mutationr      s    ~6U'VWO))5/B	v**2K	L(+>Kr@s*tu 
M%%*** 
M	Ls   #BB"c                 *   t        j                  t        dz  j                               } | d   }| d   d   dk(  sJ | d   d   dk(  sJ |d   d	k(  sJ t	        j
                  t        d
z  j                               j                         |d   k(  sJ t	        j
                  t        dz  j                               j                         |d   k(  sJ t	        j
                  t        dz  j                               j                         |d   k(  sJ y )Nzschema-contract-v4.jsonr}   rg   candidate_digest@4a6c7ee54cf9526a30de8bb576c1d71b411938beba33a04914738f6e1b6ed1cblifecycle_seal_sha256@50e7556e58a876d8136fbfb2023ede8bcb46ac816d97d4b85e1d0559f463d008archive_root_sha256@9f5d72840b4cc1fcb57720a61ebc53529fa00202d9201615e4ebdbb3e047a635z	SEAL.jsonv3_seal_sha256zinventory.jsonv3_inventory_sha256r   v3_controller_sha256)	jsonloadsHERE	read_texthashlibrd   V3r4   	hexdigest)contract	completeds     r   @test_successor_bindings_are_exact_and_predecessors_are_immutabler      s   zz4";;FFHIH,-IJ 237yyyyJ 78<~~~~*+/qqqq>>2+779:DDF)TdJeeee>>2 00<<>?IIKyYnOoooo>>2 77CCEFPPRV_`vVwwwwr   c                     t         dz  j                         } | | j                  d      d  }d|vsJ d|v sJ | j                  d      dk(  sJ y )Nr   zdef atomic(z	os.write(zwrite_all(fd, raw)r<   )r   r   indexcount)sourceoutside_helpers     r   :test_every_atomic_payload_and_receipt_write_uses_write_allr      s_    ,,779FFLL79:Nn,,,>111<<&!+++r   )r   strr   r   )r   r   r/   z
list[Path])r5   r   r6   pytest.MonkeyPatchr/   None)r5   r   r6   r   rB   r-   r/   r   )r6   r   r/   r   )r/   r   )!
__future__r   r   importlib.utilr	   r   r0   pathlibr   typesr   unittest.mockr   rO   __file__parentr   r   r   r2   rx   r   r9   rA   markparametrizerR   rX   rr   r{   r   r   r   rH   r   r   <module>r      s   "    	  !  H~	[[JJ 
lD#::	;("/F*FG	0($(& &78	(	(!3	(@C	(		( 9	(
(++!3+	+$22!32	2"+x,r   