
    bj!                    f   d dl mZ d dlZd dl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
Z
 e	e      j                  Zedz  Zedz  Zedz  ZdZdZd	Zd
ZdZddZdddZd ZddZd Ze
j6                  j9                  dg d      d        Ze
j6                  j9                  dg d      d        Zd Zy)    )annotationsN)Pathzcleanup_controller.pyzschema-contract-v2.jsonzfixtures/success@2e0894eac92bc396cc4723bf1f18ebc653b95018dd41574df435941c235da925@af4a9d0a1ffffb6eb7551c1d6dc2b32853ca6d024332a4f8f5702bbf992f141b@7ace03c6dad33d2fc3ef223621cbca68a150fde8429932138e252fb8498ac582.TASK26_POST_LIFECYCLE_ARCHIVE_CLEANUP_APPROVED
8527916639c                d    t        j                  | j                               j                         S )N)hashlibsha256
read_bytes	hexdigest)ps    f.omo/evidence/task26/reset-controller-st_01a0054d/post-lifecycle-cleanup-v2/test_cleanup_controller.pyshar      s     >>!,,.)3355    c                |   | dz  }| dz  }t        j                  t        |       |dz  j                          |j	                  d       |dz  j                  d       |dz  j                  d       | d	z  }|j                  d
       |j                  d       |r"|j                  d       |j                  d       | dz  }dt        t        t        t        t        t        t              t        t              ddd
}|j                  t!        j"                  |dd      dz          |j                  d       ||||fS )Nprofileotherzfixture-ids.json  )modemarkers   other  	systemctlz'#!/bin/sh
printf "inactive\ndead\n0\n"
z*#!/bin/sh
printf "active\nrunning\n123\n"
zpermission.jsonz+task26-post-lifecycle-cleanup-permission-v2T(derive_unique_active_and_seal_in_archive)
schemaapprovalcandidate_digestwheel_sha256plan_sha256actor_idcontroller_sha256contract_sha256execute_allowedlifecycle_binding,:	sort_keys
separators
)shutilcopytreeFIXTUREunlinkmkdirwrite_byteschmod
write_textAPPROVAL	CANDIDATEWHEELPLANACTORr   
CONTROLLERCONTRACTjsondumps)tmpactiver   osystempermvs          r   setuprD      s   iAgA
OOGQ	##%GGG\x(\;F
DE
LLKLU""D?% _x=G	A 	OODJJqDZH4OPJJuar   c                D   t        j                  t        j                  t	        t
              |dt	        |       dt	        |      dt	        | dz        dt	        t              dt	        |      dt        dt        d	t        d
t        dt        dddt	        |      g|dd      S )Nz	--profilez--other-profilez--archive-rootz$data/post-lifecycle-cleanup-archivesz
--contractz--permissionz--candidatez--wheel-sha256z--plan-sha256z
--approvalz
--actor-idz--run-idzfixture-cleanupz--systemctlT)textcapture_output)
subprocessrunsys
executablestrr:   r;   r6   r7   r8   r5   r9   )r   r@   srB   r   extras         r   rI   rI   :   s    >>NN
OFF::;MIF7	
8 9	
< A! !r   c                    | |z  }t        j                  |j                               } ||       |j                  t        j                  |dd      dz          |j                  d       y )NTr&   r)   r,   r   )r<   loads	read_textr4   r=   r3   )r   relfnxrC   s        r   	edit_jsonrU   _   sO    	CA

1;;=!AqELLA*ELMGGENr   c                   t        |       \  }}}}|dz  j                         }t        ||||d      }|j                  dk(  sJ |j                         |dz  }t        j                  |dz  j                               }|d   d   dk(  sJ |d	   d
u sJ |dz  j                         |k(  sJ |dz  j                         rJ t        ||||ddt        |            }	|	j                  dk(  sJ |	j                         y )N:data/onboarding/telegram-customer-bootstrap-v1/ledger.jsonexecuter   4data/post-lifecycle-cleanup-archives/fixture-cleanupzmanifest.jsonactive_lifecycle
session_idzsession-new-001archive_committed_before_clearTzBpayload/data/onboarding/telegram-customer-bootstrap-v1/ledger.json	customersverifyz	--archive)
rD   r   rI   
returncodestderrr<   rP   rQ   existsrL   )
tmp_pathr   r@   rM   rB   rawramrC   s
             r   =test_success_archives_active_ledger_before_clear_and_verifiesrg   g   s   (OMAq!T	HHjl  	Aq!T9%A<<1&ahh&	BBA

A'2245A .2CCCC-.$666	PPjlc   K'')))Aq!T8[#a&9A<<1&ahh&r   case)enabledpending_deliverypending_providerunknownmissing_deliveryduplicate_deliveryduplicate_sessionactive_serviceid_mismatchunknown_schemasymlinkhardlinkr   c                @   t        | |dk(        \  }}}}|dz  }|j                         }|dk(  rt        |dd        n|dk(  rt        |dd        n|d	k(  rt        |d
d        n|dk(  rt        |dd        n|dk(  r|dz  j                  d       n|dk(  rt        |dd        n|dk(  rt        |dd        n|dk(  rt        |dd        n|dk(  rt        |dd        nk|dk(  r%|j	                          |j                  |dz         nA|dk(  r&t        j                  ||j                  d             n|dk(  r|j                  d       t        ||||d      }|j                  dk7  sJ |dz  j                         rJ |d vr|j                         |k(  sJ y y )!Nrp   rW   ri   customers/registry.jsonc                2    | d   d   j                  d      S )Nr]   r   T)ri   updaterC   s    r   <lambda>z7test_strict_negatives_are_nonmutating.<locals>.<lambda>   s    anQ'..t.<r   rj   z(data/owner-actions/draft-deliveries.jsonc                f    t        t        | j                                     j                  d      S )Npendingstatusnextitervaluesry   rz   s    r   r{   z7test_strict_negatives_are_nonmutating.<locals>.<lambda>   s"    d4
+,3393Er   rk   z)data/owner-actions/draft-generations.jsonc                n    t        t        | j                                     d   j                  dd      S )Nclaimedclaim)stateclaim_idr   rz   s    r   r{   z7test_strict_negatives_are_nonmutating.<locals>.<lambda>   s.    d4
+,R077' 8 r   rl   c                f    t        t        | j                                     j                  d      S )Nunknown_provider_outcomer~   r   rz   s    r   r{   z7test_strict_negatives_are_nonmutating.<locals>.<lambda>   s#    d4
+,33;U3Vr   rm   z{}
rn   c                z    | j                  dt        t        t        | j	                                           i      S )Nsecond)ry   dictr   r   r   rz   s    r   r{   z7test_strict_negatives_are_nonmutating.<locals>.<lambda>   s'    ahh$tD4D/E*FGHr   ro   c                L    | d   j                  t        | d   d   d            S )Nsessionsr   zsecond-active)r[   appendr   rz   s    r   r{   z7test_strict_negatives_are_nonmutating.<locals>.<lambda>   s&    a
m**Qz]2&?Cr   rq   c                >    | d   d   d   d   j                  d      S )Nr   r   role_claimsr   999)user_idrx   rz   s    r   r{   z7test_strict_negatives_are_nonmutating.<locals>.<lambda>   s%    a
mB'6q9@@@Or   rr   c                &    | j                  d      S )Nz	future-v9)r   rx   rz   s    r   r{   z7test_strict_negatives_are_nonmutating.<locals>.<lambda>   s    ahhkh2r   rs   rt   aliasr   i  rX   r   rY   >   rs   rq   rr   ro   )rD   r   rU   r4   r0   
symlink_tooslink	with_namer3   rI   r_   ra   )	rb   rh   r   r@   rM   rB   ledgerbeforerd   s	            r   %test_strict_negatives_are_nonmutatingr   z   s   & (D,<$<=MAq!TMMF Fy%<	

 
#	#6E	

 
#	#7	
 
	6V	

 
#	#	
7	7CCFK	%	%6H	

 
$	$H	
 
	HO	

 
!	!H2	

 
	!778		
((12	UAq!T9%A<<1JJRRTTTTT  "f,,, Ur   )
future_jobr   attempt_lockpending_outboxowner_nonterminalduplicate_customerc                   t        |       \  }}}}|dk(  rt        |dd        n|dk(  r)|dz  }|j                  d       |j                  d       ng|d	k(  r'|d
z  }|j	                          |j                  d       n;|dk(  rt        |dd        n'|dk(  rt        |dd        n|dk(  rt        |dd        t        ||||d      j                  dk7  sJ y )Nr   zcron/jobs.jsonc                0    | d   j                  ddd      S )NjobsfutureT)idri   )r   rz   s    r   r{   z7test_no_future_or_duplicate_authority.<locals>.<lambda>   s    ai&&h4'HIr   r   z.data/customer-schedule-claims/customer-new-001T)parentsr   r   z'data/.scheduled-delivery-attempt-x.lockr   r   z:data/onboarding/telegram-publication-outbox-v1/ledger.jsonc                2    | d   d   j                  d      S )Nrecordsr   r}   )r   rx   rz   s    r   r{   z7test_no_future_or_duplicate_authority.<locals>.<lambda>   s    a	l1o,,9,=r   r   z.data/owner-actions/customer-service-state.jsonc                l    t        t        | d   j                                     j                  d      S )Nstatesr}   )owner_action_stater   rz   s    r   r{   z7test_no_future_or_duplicate_authority.<locals>.<lambda>   s.    d4( 2 2 456==#, > r   r   rv   c                L    | d   j                  t        | d   d   d            S )Nr]   r   r   )customer_keyr   rz   s    r   r{   z7test_no_future_or_duplicate_authority.<locals>.<lambda>  s&    an++Q{^A&X>r   rX   r   )rD   rU   r1   r3   touchrI   r_   )rb   rh   r   r@   rM   rB   rT   s          r   %test_no_future_or_duplicate_authorityr      s     (OMAq!T|I	

 
@@				99				!	!H=	

 
$	$<	
 
%	%%	
 q!Qi(33q888r   c                    t        |       \  }}}}|dz  j                         }t        ||||dd      }|j                  dk7  sJ |dz  j                         |k(  sJ |dz  j	                         rJ y )Nrv   rX   z!--test-fail-before-archive-commitr   rY   )rD   r   rI   r_   ra   )rb   r   r@   rM   rB   r   rd   s          r   1test_injected_archive_commit_failure_never_clearsr     s    (OMAq!T++779FAq!T9&IJA<<1))5576AAAJJRRTTTTr   )r   r   returnrL   )F)r>   r   )r   r   rR   rL   ) 
__future__r   r   r<   r   r-   rH   rJ   pathlibr   pytest__file__parentHEREr:   r;   r/   r6   r7   r8   r5   r9   r   rD   rI   rU   rg   markparametrizer   r   r    r   r   <module>r      s    "   	   
  H~++
++
#
#N	JI;6@"J'& 
$E-%$E-P 

&9
&9RUr   