
    bj!                       d dl mZ d dlZd dlmc 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jB                  jE                  dg d      d        Z#ejB                  jE                  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    /home/cube/projects/richard/traning coach/.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(  }	|	st	        j
                  d|	fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }
t	        j                  |j                        dz   d	|
iz  }t        t	        j                  |            d x}x}	}|d
z  }t        j                  |dz  j!                               }|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}	||	u }|slt	        j
                  d|fd||	f      t	        j                  |      t	        j                  |	      dz  }dd|iz  }t        t	        j                  |            d x}x}}	d}||z  }	|	j                  } |       }||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      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}x}	x}x}}d}||z  }	|	j"                  } |       }| }|sdd t        j                         v st	        j                  |      rt	        j                  |      nd t	        j                  |      t	        j                  |      t	        j                  |      d!z  }t        t	        j                  |            d x}x}	x}x}}t        ||||d"d#t%        |            }|j                  }d}||k(  }	|	st	        j
                  d|	fd||f      d$t        j                         v st	        j                  |      rt	        j                  |      nd$t	        j                  |      t	        j                  |      dz  }
t	        j                  |j                        dz   d	|
iz  }t        t	        j                  |            d x}x}	}y )%N:data/onboarding/telegram-customer-bootstrap-v1/ledger.jsonexecuter   ==)z2%(py2)s
{%(py2)s = %(py0)s.returncode
} == %(py5)srpy0py2py5z
>assert %(py7)spy74data/post-lifecycle-cleanup-archives/fixture-cleanupzmanifest.jsonactive_lifecycle
session_idzsession-new-001)z%(py1)s == %(py4)s)py1py4zassert %(py6)spy6archive_committed_before_clearT)is)z%(py1)s is %(py4)szBpayload/data/onboarding/telegram-customer-bootstrap-v1/ledger.jsonzU%(py7)s
{%(py7)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).read_bytes
}()
} == %(py9)sarawr]   r^   r_   r`   py9assert %(py11)spy11	customersQassert not %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).exists
}()
}r   r]   r^   r_   r`   verifyz	--archiverC   )rD   r   rI   
returncode
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_saferepr_format_assertmsgstderrAssertionError_format_explanationr<   rP   rQ   existsrL   )tmp_pathr   r@   rM   rB   rk   r[   @py_assert1@py_assert4@py_assert3@py_format6@py_format8rj   m@py_assert0@py_assert2@py_format5@py_format7@py_assert6@py_assert8@py_format10@py_format12@py_format9rC   s                           r   =test_success_archives_active_ledger_before_clear_and_verifiesr   g   s   (OMAq!T	HHjl  	Aq!T9%A<<&1&<1&&&<1&&&&&&1&&&1&&&<&&&1&&&ahh&&&&&&&	BBA

A'2245A .C2CC.2CCCCC.2CCCC.CCC2CCCCCCCC-.6$6.$6666.$666.666$6666666P	PPPj        6  	
 	 	
 	 Q 	  	  6 c 	c       )K)'')')))))))))))))))))K)))')))))))))))Aq!T8[#a&9A<<&1&<1&&&<1&&&&&&1&&&1&&&<&&&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  }|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}}
d%}	||	z  }|j(                  }
 |
       }| }|sd&d't        j                         v st        j                   |      rt        j"                  |      nd't        j"                  |	      t        j"                  |
      t        j"                  |      d(z  }t%        t        j&                  |            d x}	x}x}
x}}|d)vr|j                  }	 |	       }||k(  }|st        j                  d*|fd+||f      d,t        j                         v st        j                   |      rt        j"                  |      nd,t        j"                  |	      t        j"                  |      d-t        j                         v st        j                   |      rt        j"                  |      nd-d.z  }d/d0|iz  }t%        t        j&                  |            d x}	x}}y y )1Nr   rW   r   customers/registry.jsonc                2    | d   d   j                  d      S )Nrp   r   T)r   updaterC   s    r   <lambda>z7test_strict_negatives_are_nonmutating.<locals>.<lambda>   s    anQ'..t.<r   r   z(data/owner-actions/draft-deliveries.jsonc                f    t        t        | j                                     j                  d      S )Npendingstatusnextitervaluesr   r   s    r   r   z7test_strict_negatives_are_nonmutating.<locals>.<lambda>   s"    d4
+,3393Er   r   z)data/owner-actions/draft-generations.jsonc                n    t        t        | j                                     d   j                  dd      S )Nclaimedclaim)stateclaim_idr   r   s    r   r   z7test_strict_negatives_are_nonmutating.<locals>.<lambda>   s.    d4
+,R077' 8 r   r   c                f    t        t        | j                                     j                  d      S )Nunknown_provider_outcomer   r   r   s    r   r   z7test_strict_negatives_are_nonmutating.<locals>.<lambda>   s#    d4
+,33;U3Vr   r   z{}
r   c                z    | j                  dt        t        t        | j	                                           i      S )Nsecond)r   dictr   r   r   r   s    r   r   z7test_strict_negatives_are_nonmutating.<locals>.<lambda>   s'    ahh$tD4D/E*FGHr   r   c                L    | d   j                  t        | d   d   d            S )Nsessionsr   zsecond-active)rc   appendr   r   s    r   r   z7test_strict_negatives_are_nonmutating.<locals>.<lambda>   s&    a
m**Qz]2&?Cr   r   c                >    | d   d   d   d   j                  d      S )Nr   r   role_claimsr   999)user_idr   r   s    r   r   z7test_strict_negatives_are_nonmutating.<locals>.<lambda>   s%    a
mB'6q9@@@Or   r   c                &    | j                  d      S )Nz	future-v9)r   r   r   s    r   r   z7test_strict_negatives_are_nonmutating.<locals>.<lambda>   s    ahhkh2r   r   r   aliasr   i  rX   r   !=z2%(py2)s
{%(py2)s = %(py0)s.returncode
} != %(py5)sr[   r\   assert %(py7)sr`   ra   rq   r   rr   >   r   r   r   r   rY   )zI%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.read_bytes
}()
} == %(py6)sledgerbefore)r]   r^   re   rf   zassert %(py8)spy8)rD   r   rU   r4   r0   
symlink_tooslink	with_namer3   rI   rt   ru   rv   rw   rx   ry   rz   r}   r~   r   )r   r   r   r@   rM   rB   r   r   r[   r   r   r   r   r   r   r   r   @py_assert5r   s                      r   %test_strict_negatives_are_nonmutatingr   z   s9   & (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<1<111<1JTJJTJRRTRTTTTTTTTTTTTTTTTTJTTTRTTTTTTTTTTTTT  , ","f,,,,"f,,,,,,v,,,v,,, ,,,",,,,,,f,,,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        d}t        |||||      }|j                  }	d}
|	|
k7  }|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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t        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |	      t        j                  |
      d	z  }dd |iz  }t        t        j                  |            d x}x}x}	x}}
y )!Nr   zcron/jobs.jsonc                0    | d   j                  ddd      S )NjobsfutureT)idr   )r   r   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   r   r   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   r   s    r   r   z7test_no_future_or_duplicate_authority.<locals>.<lambda>   s.    d4( 2 2 456==#, > r   r   r   c                L    | d   j                  t        | d   d   d            S )Nrp   r   r   )customer_keyr   r   s    r   r   z7test_no_future_or_duplicate_authority.<locals>.<lambda>  s&    an++Q{^A&X>r   rX   r   r   )zw%(py10)s
{%(py10)s = %(py8)s
{%(py8)s = %(py0)s(%(py1)s, %(py2)s, %(py3)s, %(py4)s, %(py6)s)
}.returncode
} != %(py13)srI   r   r@   rM   rB   )	r]   rd   r^   py3re   rf   r   py10py13zassert %(py15)spy15)rD   rU   r1   r3   touchrI   rt   ru   rv   rw   rx   ry   rz   r}   r~   )r   r   r   r@   rM   rB   rT   r   @py_assert7@py_assert9@py_assert12@py_assert11@py_format14@py_format16s                 r   %test_no_future_or_duplicate_authorityr      s    (OMAq!T|I	

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

 
$	$<	
 
%	%%	
 (83q!Qi(8(338q83q88883q88888838883888888q888q888888!888!888888Q888Q888888888888i888(8883888q88888888r   c                   t        |       \  }}}}|dz  j                         }t        ||||dd      }|j                  }d}||k7  }	|	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}	}d}||z  }	|	j                  } |       }||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      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}x}	x}x}}d}||z  }	|	j                  } |       }| }|sddt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      t	        j                  |      dz  }t        t	        j                  |            d x}x}	x}x}}y )Nr   rX   z!--test-fail-before-archive-commitr   r   r   r[   r\   r   r`   rY   ri   r   r   rl   rn   ro   ra   rq   rr   )rD   r   rI   rt   ru   rv   rw   rx   ry   rz   r}   r~   r   )r   r   r@   rM   rB   r   r[   r   r   r   r   r   r   r   r   r   r   s                    r   1test_injected_archive_commit_failure_never_clearsr     s   (OMAq!T++779FAq!T9&IJA<<1<1<111<1)AA))A)55A57A76AAAA76AAAAAAAAAAAAAA)AAA5AAA7AAAAAA6AAA6AAAAAAAAJTJJTJRRTRTTTTTTTTTTTTTTTTTJTTTRTTTTTTTTTTTr   )r   r   returnrL   )F)r>   r   )r   r   rR   rL   )&
__future__r   builtinsrw   _pytest.assertion.rewrite	assertionrewriteru   r   r<   r   r-   rH   rJ   pathlibr   pytest__file__parentHEREr:   r;   r/   r6   r7   r8   r5   r9   r   rD   rI   rU   r   markparametrizer   r   r    r   r   <module>r      s    "     	   
  H~++
++
#
#N	JI;6@"J'& 
$E-%$E-P 

&9
&9RUr   