Ë
    úÝjM  ã                   ó   — d 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 ddlmZ ddlmZ dd	lmZmZmZmZ dd
lmZmZ ddlmZ ddlmZ  G d„ dej8                  «      Zedk(  r ej>                  «        yy)uV   IntegritÃ¤t: Kontext nach der Freigabe verÃ¤ndert (Prompt, Memory, Anhang je einzeln).é    N)Úreplace)ÚPath)ÚResultStatus)ÚMockAdapter)ÚClaudeChannelAdapter)ÚCodexAdapter)Ú
AttachmentÚContextEnvelopeÚMemorySnippetÚcanonical_json)ÚPrivacyMatrixÚPrivacyTier)Ú
MockRunner)ÚAdapterHarnessc                   ór   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚContextIntegrityTestsc                 ó   — t        j                  «       | _        t        t	        | j                  j
                  «      «      | _        t        | j                  j                  d«      | _	        t        ddt        j                  «      f| _        t        ddddd¬	«      | _        | j                  j!                  d
| j                  | j                  g¬«      | _        | j                  j#                  | j                  | j                   «      | _        y )NÚclaudeúbrain/notiz.mdú
Notiz einsÚdocumentÚBQAC1úa.txtú
text/plainó   inhalt©ÚkindÚfile_idÚnameÚmimeÚdatau
   prÃ¼fe das©ÚmemoryÚattachments)ÚtempfileÚTemporaryDirectoryÚ_tmpr   r   r   Úhr   ÚverifierÚadapterr   r   ÚPUBLICr#   r	   Ú
attachmentÚjobÚclearÚ	clearance©Úselfs    ú=/home/aria/aria-v3-dev/python/tests/test_context_integrity.pyÚsetUpzContextIntegrityTests.setUp   s¶   € Ü×/Ñ/Ó1ˆŒ	Ü¤ T§Y¡Y§^¡^Ó 4Ó5ˆŒÜ" 4§6¡6§?¡?°HÓ=ˆŒÜ$Ð%5°|Ä[×EWÑEWÓXÐZˆŒÜ$¨*¸gÈGÐZfØ*3ô5ˆŒà—6‘6—:‘:˜l°4·;±;ÈTÏ_É_ÐL]�:Ó^ˆŒØŸ™Ÿ™ d§l¡l°D·H±HÓ=ˆ�ó    c                 ó8   — | j                   j                  «        y ©N)r'   Úcleanupr0   s    r2   ÚtearDownzContextIntegrityTests.tearDown   s   € Ø�	‰	×ÑÕr4   c                 ól   — t        | j                  t        | j                  j                  fi |¤Ž¬«      S )N©Úenvelope)r   r-   r;   )r1   Úchangess     r2   ÚtamperedzContextIntegrityTests.tampered!   s'   € Ü�t—x‘x¬'°$·(±(×2CÑ2CÑ*OÀwÑ*OÔPÐPr4   c                 ó(  — | j                   j                  | j                  |«      }| j                  |j                  t
        j                  «       | j                  |j                  d«       | j                  | j                   j                  d«       y )NÚCONTEXT_DIGEST_MISMATCHr   )	r*   Úexecuter/   ÚassertEqualÚstatusr   ÚBLOCKEDÚ
error_codeÚcalls)r1   r-   Úresults      r2   ÚassertMismatchz$ContextIntegrityTests.assertMismatch$   sg   € Ø—‘×%Ñ% d§n¡n°cÓ:ˆØ×Ñ˜Ÿ™¬×(<Ñ(<Ô=Ø×Ñ˜×*Ñ*Ð,EÔFØ×Ñ˜Ÿ™×+Ñ+¨QÕ/r4   c                 ó´   — | j                  | j                  j                  | j                  | j                  «      j
                  t        j                  «       y r6   )rA   r*   r@   r/   r-   rB   r   ÚSUCCESSr0   s    r2   Útest_unchanged_context_passesz3ContextIntegrityTests.test_unchanged_context_passes*   s8   € Ø×Ñ˜Ÿ™×-Ñ-¨d¯n©n¸d¿h¹hÓG×NÑNÔP\×PdÑPdÕer4   c                 óF   — | j                  | j                  d¬«      «       y )Nu   prÃ¼fe das bitte)Úprompt©rG   r=   r0   s    r2   Ú#test_prompt_changed_after_clearancez9ContextIntegrityTests.test_prompt_changed_after_clearance-   s   € Ø×Ñ˜DŸM™MÐ1C˜MÓDÕEr4   c           	      óz   — | j                  | j                  t        ddt        j                  «      f¬«      «       y )Nr   z
Notiz zwei©r#   )rG   r=   r   r   r+   r0   s    r2   Ú#test_memory_changed_after_clearancez9ContextIntegrityTests.test_memory_changed_after_clearance0   s0   € Ø×Ñ˜DŸM™M´-Ð@PÐR^Ô`k×`rÑ`rÓ2sÐ1u˜MÓvÕwr4   c           	      óv   — | j                  | j                  | j                  t        dd«      fz   ¬«      «       y )Nz
brain/b.mdÚmehrrP   )rG   r=   r#   r   r0   s    r2   Ú!test_memory_added_after_clearancez7ContextIntegrityTests.test_memory_added_after_clearance3   s/   € Ø×Ñ˜DŸM™M°·±ÄÈlÐ\bÓ@cÐ?eÑ1e˜MÓfÕgr4   c                 ór   — | j                  | j                  t        | j                  d¬«      f¬«      «       y )Ns   anders©r!   ©r$   ©rG   r=   r   r,   r0   s    r2   Ú-test_attachment_bytes_changed_after_clearancezCContextIntegrityTests.test_attachment_bytes_changed_after_clearance6   s*   € Ø×Ñ˜DŸM™M´w¸t¿¹ÐU^Ô7_Ð6a˜MÓbÕcr4   c                 ór   — | j                  | j                  t        | j                  d¬«      f¬«      «       y )Nzb.txt)r   rW   rX   r0   s    r2   Ú0test_attachment_metadata_changed_after_clearancezFContextIntegrityTests.test_attachment_metadata_changed_after_clearance9   s*   € Ø×Ñ˜DŸM™M´w¸t¿¹ÐU\Ô7]Ð6_˜MÓ`Õar4   c                 óF   — | j                  | j                  d¬«      «       y )N© rW   rM   r0   s    r2   Ú'test_attachment_removed_after_clearancez=ContextIntegrityTests.test_attachment_removed_after_clearance<   s   € Ø×Ñ˜DŸM™M°b˜MÓ9Õ:r4   c                 ó&  — t        | j                  j                  «      }| j                  j                  d«      }| j                  j	                  ||«      }t        |d¬«      }|j                  ||«      }| j                  |j                  d«       y )NÚhalloÚjemand_anders)Úsender_usernamer?   )	r   r(   r)   r-   r.   r   r@   rA   rD   )r1   r*   r-   r/   ÚforgedrF   s         r2   Ú(test_claude_meta_changed_after_clearancez>ContextIntegrityTests.test_claude_meta_changed_after_clearance?   sm   € Ü& t§v¡v§¡Ó7ˆØ�f‰f�j‰j˜Ó!ˆØ—F‘F—L‘L ¨#Ó.ˆ	Ü˜¨oÔ>ˆØ—‘ ¨FÓ3ˆØ×Ñ˜×*Ñ*Ð,EÕFr4   c           
      óÔ  — t        j                  dt        j                  t        j                  hi«      }t        t        | j                  j                  «      dz  |¬«      }t        «       }t        |j                  |¬«      }|j                  d| j                  | j                  g¬«      }|j                  |j!                  ||«      |«      }| j#                  |j$                  t&        j(                  «       |j*                  d   }| j#                  |j,                  d«       | j#                  |j.                  j1                  «       d«       t3        |t3        |j4                  t3        | j                  d	¬
«      f¬«      ¬«      }|j                  |j!                  ||«      |«      }	| j#                  |	j6                  d«       | j#                  t9        |j*                  «      d«       y )NÚcodex)Úmatrix)Úrunneru   #public prÃ¼fer"   r   ))z01-a.txtr   u‰   #public prÃ¼fe

[Aria-Kontext: Memory-Ausschnitte]
- (brain/notiz.md) Notiz eins

[AnhÃ¤nge im Arbeitsverzeichnis]
- attachments/01-a.txtó   xrV   rW   r:   r?   é   )r   Úfrom_mappingr   ÚUNKNOWNr+   r   r   r'   r   r   r   r)   r-   r#   r,   r@   r.   rA   rB   r   rI   rE   ÚfilesÚstdinÚdecoder   r;   rD   Úlen)
r1   rg   Úharnessrh   r*   r-   rF   Úspecr=   Úseconds
             r2   Ú*test_codex_outbound_covers_stdin_and_filesz@ContextIntegrityTests.test_codex_outbound_covers_stdin_and_filesG   sp  € Ü×+Ñ+¨W´{×7JÑ7JÌK×L^ÑL^Ð6_Ð,`ÓaˆÜ ¤ d§i¡i§n¡nÓ!5¸Ñ!?ÈÔOˆÜ“ˆÜ˜w×/Ñ/¸Ô?ˆØ�k‰kÐ*°4·;±;ÈTÏ_É_ÐL]ˆkÓ^ˆØ—‘ §¡¨w¸Ó!<¸cÓBˆØ×Ñ˜Ÿ™¬×(<Ñ(<Ô=Ø�|‰|˜A‰ˆØ×Ñ˜Ÿ™Ð%?Ô@Ø×Ñ˜Ÿ™×*Ñ*Ó,ð /Gô 	Hô ˜3¬°·±ÌGÐTX×TcÑTcÐjnÔLoÐKqÔ)rÔsˆØ—‘ §¡¨w¸Ó!<¸hÓGˆØ×Ñ˜×*Ñ*Ð,EÔFØ×Ñœ˜VŸ\™\Ó*¨AÕ.r4   c                 óÂ  — t        d| j                  | j                  f«      }t        dt        ddt        j
                  «      ft        ddddd¬	«      f«      }| j                  |j                  «       |j                  «       «       | j                  dj                  d
«      |j                  «       «       | j                  t        dddœ«      t        dddœ«      «       y )Nu   prÃ¼fer   r   r   r   r   r   r   r   zutf-8rj   é   )ÚbÚa)rx   rw   )r
   r#   r,   r   r   r+   r	   rA   ÚdigestÚassertInÚencodeÚ	canonicalr   )r1   rx   rw   s      r2   Ú#test_canonical_serialization_stablez9ContextIntegrityTests.test_canonical_serialization_stableY   s·   € Ü˜H d§k¡k°D·O±OÐ3EÓFˆÜ˜H¤}Ð5EÀ|ÔU`×UgÑUgÓ'hÐ&jÜ'¨ZÀÈwÐ]iØ-6ô8ð :ó;ˆð 	×Ñ˜Ÿ™› Q§X¡X£ZÔ0Ø�‰�h—o‘o gÓ.°·±³Ô>Ø×Ñœ¨a°aÑ(8Ó9¼>ÐPQÐXYÑJZÓ;[Õ\r4   c           	      ó˜  — | j                  | j                  j                  «       t        j                  d«      j                  «       «       | j                  t        «      5 }t        dddt        j                  d«      j                  «       ¬«       d d d «       | j                  t        j                  «      d«       y # 1 sw Y   Œ/xY w)Nr   r   Úxri   )r   r   r!   Úsha256ÚATTACHMENT_HASH_MISMATCH)rA   r,   Úcontent_sha256Úhashlibr€   Ú	hexdigestÚassertRaisesÚ
ValueErrorr	   ÚstrÚ	exception)r1   Úctxs     r2   Útest_attachment_hash_from_bytesz5ContextIntegrityTests.test_attachment_hash_from_bytesb   s•   € Ø×Ñ˜Ÿ™×7Ñ7Ó9¼7¿>¹>È)Ó;T×;^Ñ;^Ó;`ÔaØ×ÑœzÓ*ð 	n¨cÜ˜J°¸)ÌGÏNÉNÐ[_ÓL`×LjÑLjÓLlÕm÷	nà×Ñœ˜SŸ]™]Ó+Ð-GÕH÷	nð 	nús   Á!1C Ã C	c                 ó†   — | j                  t        «      5  t        ddt        d«      ¬«       d d d «       y # 1 sw Y   y xY w)Nr   r   r   )r   r   r!   )r…   r†   r	   Ú	bytearrayr0   s    r2   Útest_mutable_bytes_rejectedz1ContextIntegrityTests.test_mutable_bytes_rejectedh   s:   € Ø×ÑœzÓ*ñ 	PÜ˜J°¼)ÀIÓ:NÕO÷	P÷ 	Pñ 	Pús	   –7·A c                 ó  — t        | j                  d¬«      }| j                  j                  || j                  «      }| j                  |j                  d«       | j                  | j                  j                  d«       y )NÚ@0000000000000000000000000000000000000000000000000000000000000000)ÚmacÚINVALID_SIGNATUREr   )r   r/   r*   r@   r-   rA   rD   rE   )r1   rc   rF   s      r2   Ú*test_digest_is_integrity_not_authorizationz@ContextIntegrityTests.test_digest_is_integrity_not_authorizationl   s]   € ä˜Ÿ™¨XÔ6ˆØ—‘×%Ñ% f¨d¯h©hÓ7ˆØ×Ñ˜×*Ñ*Ð,?Ô@Ø×Ñ˜Ÿ™×+Ñ+¨QÕ/r4   N)Ú__name__Ú
__module__Ú__qualname__r3   r8   r=   rG   rJ   rN   rQ   rT   rY   r[   r^   rd   rt   r}   rŠ   r�   r’   r]   r4   r2   r   r      sb   „ ò>òòQò0òfòFòxòhòdòbò;òGò/ò$]òIòPó0r4   r   Ú__main__) Ú__doc__rƒ   r%   ÚunittestÚdataclassesr   Úpathlibr   Úaria_router.adapter_contractr   Úaria_router.adaptersr   Úaria_router.claude_channelr   Úaria_router.codex_adapterr   Úaria_router.contextr	   r
   r   r   Úaria_router.corer   r   Úaria_router.runnerr   Útests.helpersr   ÚTestCaser   r“   Úmainr]   r4   r2   ú<module>r¥      sa   ðÙ \Û Û Û Ý Ý å 5Ý ,Ý ;Ý 2ß ZÓ Zß 7Ý )å (ô^0˜H×-Ñ-ô ^0ðB ˆzÒØ€H‡M�M…Oð r4   