
    Hǂj                     T   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Zd dlmZ d dlmZ d dlmZ d dlmZmZ d dlmZ d dlZd dlZ ee      j9                         j:                  ZdddZ G d	 d
ej@                        Z!e"dk(  r ejF                          yy)    )annotationsN)BytesIO)Path)mock)Anycast)Imagec                    t               }t        j                  ||d      j                  ||        |j	                         S )N   )format)r   r	   newsavegetvalue)fmtmodesizeouts       /home/cube/projects/richard/traning coach/.omo/evidence/task26/task26-strict-rerun-customer-surface-capture-st_01a00ed6/test_capture.pyimage_bytesr      s5    
)C	IIdD!!!#c!2<<>    c                       e Zd Zdd fdZddZddZdddZddZddZddZ	ddZ
dd	Zdd
ZddZddZddZddZddZddZddZddZ xZS )CaptureTestsc                    t         |   |       t        t        j                  t
           t        t        d             | _        t               | _	        t               | _
        g | _        y N)super__init__r   tempfileTemporaryDirectorystrobjecttempr   rootcontractpatches)self
methodName	__class__s     r   r   zCaptureTests.__init__   sI    $44S94;MN	F	"$r   c           	        t        j                         | _        t        | j                  j                        | _        | j
                  dz  | _        | j                  j                  t        dz  j                                | j                  j                  d       t        j                  j                  t        d| j
                        t        j                  j                  t        d| j                        t        j                  j                  t        d| j
                  dz        t        j                  j                  t        d| j
                  dz        g| _        | j                  D ]  }|j!                           y )	Ncapture-contract.json  ROOTCONTRACTVAULTvaultRECEIPTcapture-receipt.redacted.json)r   r   r!   r   namer"   r#   write_bytesHERE
read_byteschmodr   patchr    capturer$   startr%   r6   s     r   setUpzCaptureTests.setUp%   s    //1	(			$;;!!4*A#A"M"M"OPE"JJgvtyy9JJgz4==AJJgw		G0CDJJgy$))>]2]^	
 \\EKKM "r   c                    t        | j                        D ]  }|j                           | j                  j	                          y r   )reversedr$   stopr!   cleanupr9   s     r   tearDownzCaptureTests.tearDown4   s.    dll+EJJL ,		r   c                h    | j                   |z  }|j                  |       |j                  |       |S r   )r"   r2   r5   )r%   datar1   r   paths        r   sourcezCaptureTests.source9   s/    yy4

4r   c                b   t               }t        j                  | j                  |      t        j                        }| j                  |d   d   z  }| j                  |j                         |       | j                  t        j                  |j                         j                        d       | j                  |d   d   d       | j                  |d   d   d       t        j                  |      }| j                  d|       | j                  d	|       | j                  |d
   d          y )Nr7   
vault_pathr*   image_width   image_height   body_weightu   체크인 감사합니다privacyocr_performed)r   r7   rC   ATTESTATIONr"   assertEqualr4   statS_IMODEst_modejsondumpsassertNotInassertFalse)r%   rawreceipttarget
serializeds        r   5test_png_capture_exact_bytes_mode_receipt_and_privacyzBCaptureTests.test_png_capture_exact_bytes_mode_receipt_and_privacy?   s    m//$++c"2G4G4GHWY/==**,c2fkkm&;&;<eD+M:A>+N;Q?ZZ(

34jA+O<=r   c                    t        j                   | j                  t        d      d      t         j                        }| j	                  |d   d   d       | j	                  |d   d   d       y )NJPEGz	input.jpgr7   image_format
image_modeRGB)r7   rC   r   rM   rN   )r%   rW   s     r   test_jpeg_capturezCaptureTests.test_jpeg_captureL   s]    //$++k&.A;"OQXQdQde+N;VD+L95Ar   c                   | j                  t        j                        5  t        j                  | j                  d      t        j                         d d d        | j                  t               dz   d       | j                  t        j                  d      5  t        j                  | j                  dz  t        j                         d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Ns   not an images   PKzpolyglot.pngpolyglot)assertRaisesr7   CaptureErrorrC   rM   r   assertRaisesRegexr"   r%   s    r   "test_invalid_and_polyglot_rejectedz/CaptureTests.test_invalid_and_polyglot_rejectedQ   s    w334OODKK8':M:MN 5KMM1>B##G$8$8*EOODII68K8KL FE 54 FEs   4C2C C C)c                $   | j                  t               d      }| j                  dz  }|j                  |       | j	                  t
        j                        5  t        j
                  |t
        j                         d d d        | j                  dz  }t        j                  ||       | j                  t
        j                  d      5  t        j
                  |t
        j                         d d d        y # 1 sw Y   |xY w# 1 sw Y   y xY w)Nzreal.pngzlink.pngzhard.pngzsingle-link)rC   r   r"   
symlink_torc   r7   rd   rM   oslinkre   )r%   realrk   hards       r   5test_symlink_and_hardlink_rejected_by_nofollow_policyzBCaptureTests.test_symlink_and_hardlink_rejected_by_nofollow_policyX   s    {{;=*5yy:%w334OOD'"5"56 5yy:%
d##G$8$8-HOOD'"5"56 IH	 54 IHs   %C:%D:DDc                   | j                   dz  }|j                  d      5 }|j                  t        j                  dz          d d d        |j                  d       | j                  t        j                  d      5  t        j                  |t        j                         d d d        y # 1 sw Y   hxY w# 1 sw Y   y xY w)Nzhuge.pngwbr   r*   z
image size)	r"   opentruncater7   	MAX_BYTESr5   re   rd   rM   )r%   rB   streams      r   &test_oversize_rejected_without_readingz3CaptureTests.test_oversize_rejected_without_readingc   s    yy:%YYt_OOG--12 

5##G$8$8,GOOD'"5"56 HG _ HGs   #B+=%B7+B47C c                   | j                  t        j                  d      5  t        j                  | j                  t	               d      t        j
                         d d d        | j                  t        j                  d      5  t        j                  | j                  t	               dd      t        j
                         d d d        y # 1 sw Y   pxY w# 1 sw Y   y xY w)Nzgroup/world-writablei  )r   
executablezexec.pngi  re   r7   rd   rC   r   rM   rf   s    r    test_unsafe_source_mode_rejectedz-CaptureTests.test_unsafe_source_mode_rejectedk   s    ##G$8$8:PQOODKKEKBGDWDWX R##G$8$8,GOODKKz5I7K^K^_ HG RQGGs   >C>CCC#c           	         | j                  t        j                  d      5  t        j                  | j                  t	        dd      d      t        j
                         d d d        y # 1 sw Y   y xY w)Nzmode is not allowedr\   CMYKzcmyk.jpgrx   rf   s    r   %test_disallowed_decoded_mode_rejectedz2CaptureTests.test_disallowed_decoded_mode_rejectedq   sM    ##G$8$8:OPOODKKFF(CZPRYReRef QPPs   ?A))A2c                    | j                  t        j                  d      5  t        j                  | j                  t	                     d       d d d        | j                  | j                  dz  j                                y # 1 sw Y   6xY w)Nzexact operator attestationyesr.   )re   r7   rd   rC   r   rU   r"   existsrf   s    r   "test_attestation_mismatch_rejectedz/CaptureTests.test_attestation_mismatch_rejectedu   sb    ##G$8$8:VWOODKK6> X$))g-5578 XWs   .BBc                d   t        j                   | j                  t                     t         j                         | j                  t        d      d      }| j	                  t         j
                  d      5  t        j                   |t         j                         d d d        y # 1 sw Y   y xY w)N)   r   )r   z
second.pngzone-use)r7   rC   r   rM   re   rd   )r%   seconds     r   test_one_use_capturez!CaptureTests.test_one_use_capturez   sm    KM2G4G4GH[f5|D##G$8$8)DOOFG$7$78 EDDs   8%B&&B/c                   t               dfd}t        j                  dd|       | j                  d       | j	                  t        j
                  d      5  t        j                  ddd        d d d        y # 1 sw Y   y xY w)Nc                Z    t        dt        |            }j                  |d |        |S )NrI   )minlenextend)_fdrA   countwrittens      r   shortzUCaptureTests.test_complete_write_handles_short_writes_and_rejects_zero.<locals>.short   s(    3t9%Ew~~d6El'CE\r   	   s   abcdefzincomplete write   xc                     y)Nr    )r   _datas     r   <lambda>zXCaptureTests.test_complete_write_handles_short_writes_and_rejects_zero.<locals>.<lambda>   s    1r   )r   intrA   bytesreturnr   )	bytearrayr7   
_write_allrN   re   rd   )r%   r   r   s     @r   9test_complete_write_handles_short_writes_and_rejects_zerozFCaptureTests.test_complete_write_handles_short_writes_and_rejects_zero   si    +	R1i/),##G$8$8:LMq$(<= NMMs   A==Bc                   g t         j                  dfd}t        j                  j	                  t
        j                   d|      5  t        j                  | j                  dz  d       d d d        | j                  t        j                         | j                  t        j                         | j                  | j                  dz  j                         d       y # 1 sw Y   wxY w)Nc                    j                  t        j                  t        j                  |       j
                                |        y r   )appendrO   S_IFMTrj   fstatrQ   )fdcalls
real_fsyncs    r   	recordingzKCaptureTests.test_atomic_write_fsyncs_file_and_directory.<locals>.recording   s,    LLRXXb\%9%9:;Z^r   fsync)side_effectatomics   bytes)r   r   r   None)rj   r   r   r6   r    r7   atomic_writer"   assertInrO   S_IFREGS_IFDIRrN   r4   )r%   r   r   r   s     @@r   +test_atomic_write_fsyncs_file_and_directoryz8CaptureTests.test_atomic_write_fsyncs_file_and_directory   s    XX
	LZZwzz7	J  X!5x@ KdllE*dllE*$))h.::<hG	 KJs   $C&&C/c                |   t        j                   | j                  t                     t         j                         | j                  j                         }t        |      ddt        j                  |      d}|gdd}t        j                  |      }| j                  dz  j                  |       | j                  dz  j                  d       t        j                  |      t        j                  |      dd	}| j                  d
z  j                  t        j                  |             | j                  d
z  j                  d       | j                  dz  }t        j                  |j                               }d|d   d<   |j                  t        j                  |             |j                  d       t        j                   j#                  t$        d| j                        5  | j'                  t(        d      5  t%        j*                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)N0600r)   )r   r   rB   sha256z,task26-customer-surface-capture-inventory-v1)entriesschemazinventory.jsonr*   z'task26-customer-surface-capture-seal-v1)contract_sha256inventory_sha256r   z	SEAL.jsonr0   999bindingexpected_provider_message_idr+   zreceipt binding mismatch)r7   rC   r   rM   r#   r4   r   digest	canonicalr"   r2   r5   rR   loads	read_textr   r6   r    independent_verifyre   RuntimeErrorverify)r%   contract_rawentry	inventoryinventory_rawsealreceipt_pathrW   s           r   7test_receipt_binding_mismatch_is_rejected_independentlyzDCaptureTests.test_receipt_binding_mismatch_is_rejected_independently   s   KM2G4G4GH}}//1l+VE\hohvhv  xD  iE  F!&3ab	)))4	%	%22=A	%	%,,U3#*>>,#?U\UcUcdqUr  h  i	[	 --g.?.?.EF	[	 ''.yy#BB**\3356=B	9:  !2!27!;<l>P>PQV>WZZ16499E''6PQ"))+ R FEQQ FEs$   )H2 H&H2&H/	+H22H;c                    t        j                         }| j                  |d   d       | j                  |d   d       | j                  | j                  dz  j                                y )NstatusPASS_AWAITING_FINAL_RUN_IMAGElive_actionsr   r.   )r7   dry_runrN   rU   r"   r   r%   results     r   test_dry_run_has_no_mutationz)CaptureTests.test_dry_run_has_no_mutation   sY    ")+JK/3$))g-5578r   c                   t        j                  t        j                  t	        t
        dz        ddt        j                  gddd      }| j                  |j                  d       | j                  d|j                         y )	Nz
capture.pyzrelative.pngz--attestTF)textcapture_outputcheckrI   zabsolute Linux)
subprocessrunsysrw   r   r3   r7   rM   rN   
returncoder   stderrr   s     r   test_cli_rejects_relative_pathz+CaptureTests.test_cli_rejects_relative_path   se    ^^S!45~zSZSfSfgd%
 	**A.&6r   )runTest)r&   r   r   r   )r   r   )z	input.pngr*   )rA   r   r1   r   r   r   r   r   )__name__
__module____qualname__r   r:   r?   rC   rZ   r`   rg   rn   ru   ry   r|   r   r   r   r   r   r   r   __classcell__)r'   s   @r   r   r      sb    %
>B
M	77`g9
9>	H,&97r   r   __main__)PNGr_   )rG   rI   )r   r   r   r   r   ztuple[int, int]r   r   )$
__future__r   builtins@py_builtins_pytest.assertion.rewrite	assertionrewrite
@pytest_arrR   rj   rO   r   r   r   unittestior   pathlibr   r   typingr   r   PILr	   r7   r   __file__resolveparentr3   r   TestCaser   r   mainr   r   r   <module>r      s    "    	   
         H~&&V78$$ V7r zHMMO r   