
    2Ƃj	                        d dl mZ d dlZd dlZd dlZd dlmZ d dlZd dlm	Z	m
Z
mZ d dlmZ  ee      j                  Zedz  e	d   z  dz  Zdd	Zdd
ZddZddZddZy)    )annotationsN)Path)EXPECTEDRetentionErrorverify)retention_gatedzretention-store/objectsarchive_root_sha256retention-proof.jsonc                 n   t        t              } t        j                  t        j                  dz  j                               }| d   dk(  sJ |d   t        d   k(  sJ |d   t        d   k(  sJ |d   t        d   k(  sJ |d   t        d   k(  sJ |d   d	k(  sJ t        |d
         t        d   k(  sJ y )Nzretention-metadata.jsonstatusPASScandidate_digestlifecycle_root_sha256lifecycle_seal_sha256run_idretain_until_utcz2033-08-17T00:00:00Zarchive_objectsarchive_entry_count)r   PROOFjsonloadsparent
read_bytesr   len)resultmetadatas     test_retention_control.pyGtest_retention_metadata_binds_candidate_lifecycle_and_every_object_hashr      s    E]Fzz5<<*CCOOQRH(v%%%&'84F+GGGG+,9P0QQQQ+,9P0QQQQH(!3333&'+AAAAx)*+x8M/NNNN    c                 |   t         j                  dz  } | j                         }t        j                  t
              5 }| j                  d       d d d        j                  j                  t        j                  t        j                  hv sJ t        j                  t
              5 }| j                          d d d        j                  j                  t        j                  t        j                  hv sJ | j                         |k(  sJ t        t               d   dk(  sJ y # 1 sw Y   xY w# 1 sw Y   zxY w)Nzarchive/manifest.jsons   tamperr   r   )r   r   r   pytestraisesOSErrorwrite_bytesvalueerrnoEPERMEACCESunlinkr   )targetoriginalmodifydeletes       r   @test_modification_deletion_denied_but_verification_reads_succeedr.      s    \\33F  "H	w	69% 
 <<%++u||!<<<<	w	6 
 <<%++u||!<<<<(***%="f,,, 
 	 
 	s   D&(D2&D/2D;c                    | dz  t        j                  t        d      5  t        d fd       d d d        j	                         rJ y # 1 sw Y   xY w)Ncleanup-ranzretention proof is required)matchc                 &     j                  d      S Nran
write_textmarkers   r   <lambda>zWtest_cleanup_controller_refuses_before_action_without_retention_proof.<locals>.<lambda>-       f&7&7&>r   )r!   r"   r   r   exists)tmp_pathr8   s    @r   Etest_cleanup_controller_refuses_before_action_without_retention_proofr=   *   sH    %F	~-J	K>? 
L}} 
L	Ks   AAc                    | dz  | dz  }|j                  d       t        j                  t              5  t	        |fd       d d d        j                         rJ y # 1 sw Y   xY w)Nr0   r
   z{}c                 &     j                  d      S r3   r5   r7   s   r   r9   zZtest_cleanup_controller_refuses_tampered_or_unsealed_proof_before_action.<locals>.<lambda>6   r:   r   )r6   r!   r"   r   r   r;   )r<   faker8   s     @r   Htest_cleanup_controller_refuses_tampered_or_unsealed_proof_before_actionrA   1   sZ    %F,,DOOD	~	&>? 
'}} 
'	&s   A!!A*c                    | dz  t        t        fd      }|t        d      k(  sJ j                         dk(  sJ y )Nr0   c                 &     j                  d      S )N
authorizedr5   r7   s   r   r9   zStest_cleanup_controller_proceeds_only_after_real_prevention_proof.<locals>.<lambda><   s    6+<+<\+Jr   rD   )r   r   r   	read_text)r<   r%   r8   s     @r   Atest_cleanup_controller_proceeds_only_after_real_prevention_proofrF   :   sD    %FE#JKEC%%%%---r   )returnNone)r<   r   rG   rH   )
__future__r   r&   r   ospathlibr   r!   retention_controlr   r   r   strict_rerun_controllerr   __file__r   HEREr   r   r.   r=   rA   rF    r   r   <module>rQ      se    "   	   > > 3H~((84I+JJMcc	O
-.r   