Ë
    BÝjn$  ã                  óÖ  — d Z 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	Z	ddl
mZ ddlmZmZ ddlmZmZmZ ddlmZ ddlmZ dd	lmZmZmZ dd
lmZmZ ddlmZm Z  ddl!m"Z"m#Z#m$Z$ ddl%m&Z& dZ'dZ(dZ) e* ee+«      jY                  «       jZ                  dz  dz  «      Z.ej^                  Z0d(d)d„Z1 G d„ de2«      Z3 G d„ de$«      Z4 G d„ d«      Z5d*d+d„Z6d,d„Z7d-d.d„Z8d-d/d„Z9 G d„ d«      Z: G d „ d!e	jv                  «      Z< ejz                  ej|                  hej|                  ej~                  ej€                  ej‚                  hd"œ«      ZB G d#„ d$«      ZCd0d%„ZDd1d&„ZEg d'¢ZFy)2uQ   Gemeinsame Test-Hilfen. SchlÃ¼ssel werden pro Test frisch per os.urandom erzeugt.é    )ÚannotationsN)ÚPath)Ú
AdapterJobÚExecutionPolicy)ÚClearanceIssuerÚClearanceKeyringÚClearanceVerifier)ÚPrivacyClassifier)Úparse_gateway_config)Ú
AttachmentÚContextEnvelopeÚMemorySnippet)ÚPrivacyMatrixÚPrivacyTier)ÚGatewayÚGatewayRequest)Ú	RunResultÚRunSpecÚSubprocessRunner)Ú
NonceStoreÚ	100200300Ú	999888777z-1001234567Úfixtureszfake_codex.pyc                ó"   — t         dt        | g|¢S )Nz-I)ÚPYTHONÚ
FAKE_CODEX)ÚmodeÚextras     ú./home/aria/aria-v3-dev/python/tests/helpers.pyÚfake_codex_templater       s   € Ü�Dœ* dÐ3¨UÐ3Ð3ó    c                  ó   — e Zd Zy)ÚRealBinaryGuardErrorN)Ú__name__Ú
__module__Ú__qualname__© r!   r   r#   r#   "   s   „ Ør!   r#   c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚGuardedSubprocessRunnerué   Echter SubprocessRunner, der in Tests NUR den Test-Interpreter startet.

    Sicherung nach dem Vorfall vom 24.10.: Ein Test darf nie /usr/bin/codex
    (oder ein anderes Programm) ausfÃ¼hren. VerstÃ¶ÃŸe werfen, statt zu laufen.
    c                ó  •— |j                   rPt        j                  j                  |j                   d   «      t        j                  j                  t        «      k7  rt        d|j                   d d › �«      ‚t        ‰| �  |«      S )Nr   ztest tried to execute é   )ÚargvÚosÚpathÚrealpathr   r#   ÚsuperÚrun)ÚselfÚspecÚ	__class__s     €r   r1   zGuardedSubprocessRunner.run-   sc   ø€ Ø�yŠyœBŸG™G×,Ñ,¨T¯Y©Y°q©\Ó:¼b¿g¹g×>NÑ>NÌvÓ>VÒVÜ&Ð)?ÀÇ	Á	È"È1À¸Ð'OÓPÐPÜ‰w‰{˜4Ó Ð r!   )r3   r   Úreturnr   )r$   r%   r&   Ú__doc__r1   Ú__classcell__)r4   s   @r   r)   r)   &   s   ø„ ñ÷!ñ !r!   r)   c                  ó&   — e Zd Zddd„Zdd„Zdd„Zy)	Ú	FakeClockc                óD   — || _         t        j                  «       | _        y ©N)ÚnowÚ	threadingÚLockÚ_lock)r2   Ústarts     r   Ú__init__zFakeClock.__init__4   s   € ØˆŒÜ—^‘^Ó%ˆ�
r!   c                ó^   — | j                   5  | j                  cd d d «       S # 1 sw Y   y xY wr;   ©r?   r<   ©r2   s    r   Ú__call__zFakeClock.__call__8   s%   € Ø�Z‰Zñ 	Ø—8‘8÷	÷ 	ò 	ús   �#£,c                óp   — | j                   5  | xj                  |z  c_        d d d «       y # 1 sw Y   y xY wr;   rC   )r2   Úsecondss     r   ÚadvancezFakeClock.advance<   s,   € Ø�Z‰Zñ 	 Ø�HŠH˜Ñ�H÷	 ÷ 	 ñ 	 ús   �,¬5N)g   €tÒÚA)r@   Úfloat)r5   rI   )rG   rI   r5   ÚNone)r$   r%   r&   rA   rE   rH   r'   r!   r   r9   r9   3   s   „ ô&óô r!   r9   c                ó˜  — | j                   j                  dd¬«       t        j                  | t        j                  t        j
                  z  t        j                  z  d«      }t        j                  |d«      5 }|j                  t        j                  |«      «       d d d «       t        j                  | |«       | S # 1 sw Y   Œ!xY w)NT)ÚparentsÚexist_oké€  Úwb)ÚparentÚmkdirr-   ÚopenÚO_WRONLYÚO_CREATÚO_TRUNCÚfdopenÚwriteÚurandomÚchmod)r.   Úsizer   ÚfdÚhandles        r   Ú	write_keyr]   A   sŽ   € Ø‡K�K×Ñ˜d¨TÐÔ2Ü	�‰�”r—{‘{¤R§Z¡ZÑ/´"·*±*Ñ<¸eÓ	D€BÜ	�‰�2�tÓ	ð ' Ø�‰”R—Z‘Z Ó%Ô&÷'ä‡H�HˆT�4ÔØ€K÷'ð 'ús   Á;%C Ã C	c                ó  — t        j                  | «      }|j                  «       D ]_  \  }}t        |t        «      r2t        |j                  |«      t        «      rt        ||   |«      ||<   ŒHt        j                  |«      ||<   Œa |S r;   )ÚcopyÚdeepcopyÚitemsÚ
isinstanceÚdictÚgetÚ
deep_merge)ÚbaseÚ	overridesÚresultÚkeyÚvalues        r   re   re   J   sr   € Ü�]‰]˜4Ó €FØ—o‘oÓ'ò /‰
ˆˆUÜ�eœTÔ"¤z°&·*±*¸S³/Ä4Ô'HÜ$ V¨C¡[°%Ó8ˆF�3ŠKäŸ-™-¨Ó.ˆF�3ŠKð	/ð
 €Mr!   c                ó0  — dddgt        | dz  «      t        | dz  dz  «      ddœd	t        gid
gg d¢dœdddœddddœdddgg d¢dddœdg d¢g d¢dddœdœddiddidœddd œd!d"dd#œd$t        d%«      d&t        | d'z  «      d(d)d*œd+œd,œ}t        ||xs i «      S )-Nr+   ÚshadowÚexecuteÚstateÚkeysúclearance.keyéx   )Úkey_fileÚttl_secondsÚallowed_sender_idsÚpublic)ru   ÚinternalÚunknown©ÚcodexÚclaudeT)ÚmatrixÚclaude_status_quo_confidentialÚpublic_marker_enabledr   ÚblockÚanalysis)Úmin_qualityÚmanual_fallbackÚdefault_task_classÚtextÚcode)r   ÚcodingÚreviewÚwritingÚplanningéZ   i   )ÚenabledÚcapabilitiesÚtasksÚqualityÚmax_context_bytes)rƒ   r„   ÚvisionÚfiles)r   r…   r†   r‡   rˆ   r�   i   Ú
daily_jobséd   é   i,  )Úfailure_thresholdÚopen_secondsi   ià.  )Úmax_text_bytesÚmax_reply_charsÚmax_attachmentsFÚsuccessé   Úworkz/usr/bin:/binzC.UTF-8)ÚPATHÚLANG)Úreal_executionÚcommand_templateÚtimeout_secondsÚworkspace_rootÚenv)ÚversionÚallowed_modesÚ	state_dirÚ	clearanceÚauthÚprivacyÚroutingÚbackendsÚbudgetÚhealthÚlimitsry   )ÚstrÚOWNER_IDr    re   )Úrootrg   rf   s      r   Úconfig_dictr±   T   sù   € àØ" IÐ.Ü˜ ™Ó(Ü"% d¨V¡m°oÑ&EÓ"FÐWZÑ[Ø%¬ zÐ2à!) 
Ò6WÑXØ.2Ø%)ñ
ð
 $%¸ÐXbÑcà!%¸ÀÐ7GÚVØ!#¸&ñBð #'Ò8[Ú aØ"$¸7ñDñ	
ð *¨3Ð/¸LÈ#Ð;NÑOØ()¸3Ñ?Ø%*¸uÐYZÑ[à#ä 3°IÓ >Ø!Ü! $¨¡-Ó0Ø+°YÑ?ñ
ñ/€Dô@ �d˜IšO¨Ó,Ð,r!   c                ó,   — t        t        | |«      «      S r;   )r   r±   )r°   rg   s     r   Úmake_configr³   x   s   € Ü¤¨D°)Ó <Ó=Ð=r!   c                  ó"   — e Zd ZdZddd„Zdd„Zy)ÚRecordingSinkuB   Mock des Telegram-Plugins: fÃ¼hrt Weiterleitungsanweisungen 'aus'.c                ó    — g | _         || _        y r;   )Ú	deliveredÚfail)r2   r¸   s     r   rA   zRecordingSink.__init__   s   € Ø%'ˆŒØˆ�	r!   c                óh   — | j                   rt        d«      ‚| j                  j                  |«       y )Nzsimulated plugin failure)r¸   ÚConnectionErrorr·   Úappend)r2   Úinstructions     r   ÚdeliverzRecordingSink.deliverƒ   s'   € Ø�9Š9Ü!Ð"<Ó=Ð=Ø�‰×Ñ˜kÕ*r!   N)F)r¸   Úbool)r¼   rc   r5   rJ   )r$   r%   r&   r6   rA   r½   r'   r!   r   rµ   rµ   |   s   „ ÙLôô+r!   rµ   c                  ó`   — e Zd Zd„ Zd„ Zddd„Zedddddd	œ	 	 	 	 	 	 	 dd
„Zdd„Zdd„Z	dd„Z
y)ÚGatewayTestCasec                ó*  — t        j                  «       | _        t        | j                  j                  «      | _        t        | j
                  dz  dz  «       | j
                  dz  j                  «        t        «       | _	        t        «       | _        y )Nro   rp   r›   )ÚtempfileÚTemporaryDirectoryÚ_tmpr   Únamer°   r]   rQ   r9   Úclockrµ   ÚsinkrD   s    r   ÚsetUpzGatewayTestCase.setUpŠ   sc   € Ü×/Ñ/Ó1ˆŒ	Ü˜Ÿ™Ÿ™Ó(ˆŒ	Ü�$—)‘)˜fÑ$ Ñ6Ô7Ø	�‰�VÑ	×"Ñ"Ô$Ü“[ˆŒ
Ü!“Oˆ�	r!   c                ó8   — | j                   j                  «        y r;   )rÄ   ÚcleanuprD   s    r   ÚtearDownzGatewayTestCase.tearDown’   s   € Ø�	‰	×ÑÕr!   Nc                ó²   — |j                  d| j                  «       |j                  d| j                  «       t        t	        | j
                  |«      fi |¤ŽS )NÚforward_sinkrÆ   )Ú
setdefaultrÇ   rÆ   r   r³   r°   )r2   ÚconfigÚkwargss      r   ÚgatewayzGatewayTestCase.gateway•   sE   € Ø×Ñ˜.¨$¯)©)Ô4Ø×Ñ˜' 4§:¡:Ô.Ü”{ 4§9¡9¨fÓ5Ñ@¸Ñ@Ð@r!   Úprivater'   Ú	kais_testú2026-10-24T18:00:00.000Z)Ú	sender_idÚchat_idÚ	chat_typeÚattachmentsÚusernameÚtsc               óB   — t        ||�|n||||||t        |«      ¬«      S )N)rÕ   rÖ   r×   Ú
message_idrƒ   Úsender_usernamerÚ   rØ   )r   Útuple)	r2   rÜ   rƒ   rÕ   rÖ   r×   rØ   rÙ   rÚ   s	            r   ÚrequestzGatewayTestCase.requestš   s3   € ô ¨	ÀgÐFY¹7Ð_hØ(1¸jÈtØ.6¸2Ì5ÐQ\ÓK]ô_ð 	_r!   c                ó6   — |j                   j                  «       S r;   )Údecision_logÚread_all)r2   rÑ   s     r   Úlog_recordszGatewayTestCase.log_records¡   s   € Ø×#Ñ#×,Ñ,Ó.Ð.r!   c                ó†   — |j                   j                  «       D �cg c]  }|j                  d«      dk(  sŒ|‘Œ c}S c c}w )NÚphaseÚdecision)rá   râ   rd   )r2   rÑ   Úrs      r   Údecision_recordsz GatewayTestCase.decision_records¤   s5   € Ø"×/Ñ/×8Ñ8Ó:Ö[�a¸a¿e¹eÀG»nÐPZÓ>Z’Ò[Ð[ùÒ[s   �>·>c                óp   — | j                   dz  }|j                  t        j                  |«      d¬«       |S )Nzaccess.jsonzutf-8)Úencoding)r°   Ú
write_textÚjsonÚdumps)r2   Údatar.   s      r   Úwrite_access_filez!GatewayTestCase.write_access_file§   s.   € Ø�y‰y˜=Ñ(ˆØ�‰œŸ
™
 4Ó(°7ˆÔ;Øˆr!   r;   )rÏ   údict | Noner5   r   )rÜ   Úintrƒ   r®   rÕ   r®   rÖ   ú
str | Noner×   r®   rÙ   rò   rÚ   r®   r5   r   )rÑ   r   r5   z
list[dict])rî   rc   r5   r   )r$   r%   r&   rÈ   rË   rÑ   r¯   rß   rã   rè   rï   r'   r!   r   rÀ   rÀ   ‰   sa   „ ò$òôAð
 GOÐfjØ!*¸ÐS^Ø4ñ_Øð_ØFPð_àð_à9Gó_ó/ó\ôr!   rÀ   rx   c                  óP   — e Zd ZdZedddœdd„Zddddeedd	d
ddœ		 	 	 dd„Zdd„Zy)ÚAdapterHarnessuP   Issuer + Verifier + Nonce-Speicher ohne Gateway (fÃ¼r Adapter-/Clearance-Tests).Nrp   )r{   rÆ   Úkey_namec               óÀ  — || _         |xs
 t        «       | _        t        |dz  |z  «      | _        t        | j                  «      | _        || _        t        «       | _	        t        |dz  d|› d�z  «      | _        t        | j                  || j                  ¬«      | _        t        | j                  || j                  | j                  | j                  ¬«      | _        y )Nro   rn   znonces-z.json)rÆ   )r°   r9   rÆ   r]   rr   r   Úkeyringr{   r
   Ú
classifierr   Únoncesr   Úissuerr	   Úverifier)r2   r°   r{   rÆ   rõ   s        r   rA   zAdapterHarness.__init__¶   sª   € ØˆŒ	ØÒ)œi›kˆŒ
Ü! $¨¡-°(Ñ":Ó;ˆŒÜ'¨¯©Ó6ˆŒØˆŒÜ+Ó-ˆŒÜ  ¨¡°G¸H¸:ÀUÐ2KÑ!KÓLˆŒÜ% d§l¡l°FÀ$Ç*Á*ÔMˆŒÜ)¨$¯,©,¸ÀÇÁÈTÏ_É_Ðdh×dnÑdnÔoˆ�r!   r'   zjob-1é   rÓ   rÔ   rš   )	ÚmemoryrØ   Újob_idrÕ   rÖ   rÜ   rÙ   rÚ   Útimeoutc       	        ót   — t        |t        |t        |«      t        |«      «      |||||	t        |
¬«      «      S )N)r    )r   r   rÞ   r   )r2   Úpromptrý   rØ   rþ   rÕ   rÖ   rÜ   rÙ   rÚ   rÿ   s              r   ÚjobzAdapterHarness.jobÁ   s>   € ô ˜&¤/°&¼%À»-ÌÈ{ÓI[Ó"\Ð^gÐipØ$ h°´OÐT[Ô4\ó^ð 	^r!   c                óJ  — | j                   j                  |j                  «      j                  }t	        |j
                  |j                  ||j                  |«      |j                  |j                  ¬«      }|j                  |«        | j                  j                  di |¤ŽS )N)rþ   Úbackendr¨   Úcontext_digestrÕ   rÖ   r'   )rø   ÚclassifyÚenvelopeÚtierrc   rþ   rÅ   Úoutbound_digestrÕ   rÖ   Úupdaterú   Úissue)r2   Úadapterr  rg   r¨   Úargss         r   ÚclearzAdapterHarness.clearÇ   s|   € Ø—/‘/×*Ñ*¨3¯<©<Ó8×=Ñ=ˆÜ˜3Ÿ:™:¨w¯|©|ÀWØ#*×#:Ñ#:¸3Ó#?È3Ï=É=Ðbe×bmÑbmôoˆà�‰�IÔØ ˆt�{‰{× Ñ Ñ( 4Ñ(Ð(r!   )r°   r   r{   r   )z#public hallo)r  r®   rÿ   rñ   r5   r   )r  r   )	r$   r%   r&   r6   ÚDEFAULT_MATRIXrA   r¯   r  r  r'   r!   r   rô   rô   ³   sL   „ ÙZà>LÐTXÐcrõ 	pð^¸2È2ÐV]Ø¨¸QÈØ)¸"ñ^à47ð^àAKó^ô)r!   rô   c                ó"   — t        dddd| ¬«      S )NÚphotoÚ	AgACphotoiÒ  z
image/jpeg)ÚkindÚfile_idrZ   ÚmimeÚ
local_path)r   )r  s    r   r  r  Ï   s   € Ü˜7¨K¸dÈÐblÔmÐmr!   c                ó>   — t        dd|�t        |«      ndd| |¬«      S )NÚdocumentÚBQACdoci   zapplication/pdf)r  r  rZ   r  rÅ   rî   )r   Úlen)rÅ   rî   s     r   r  r  Ó   s*   € Ü˜:¨yÈDÐL\¼sÀ4¼yÐbfØ,°4¸dôDð Dr!   )r¯   ÚOTHER_IDÚGROUP_IDr   r   r    r9   r]   re   r±   r³   rµ   rÀ   rô   r)   r#   r  r  r  r   r   r   )r™   )r   r®   r   r®   r5   z	list[str])é    rN   )r.   r   rZ   rñ   r   rñ   r5   r   )rf   rc   rg   rc   r5   rc   r;   )r°   r   rg   rð   r5   rc   )r°   r   rg   rð   )z/tmp/inbox/1-abc.jpg)zbericht.pdfN)Gr6   Ú
__future__r   r_   rì   r-   ÚsysrÂ   r=   ÚunittestÚpathlibr   Úaria_router.adapter_contractr   r   Úaria_router.authorizationr   r   r	   Úaria_router.classifyr
   Úaria_router.configr   Úaria_router.contextr   r   r   Úaria_router.corer   r   Úaria_router.gatewayr   r   Úaria_router.runnerr   r   r   Úaria_router.stater   r¯   r  r  r®   Ú__file__ÚresolverP   r   Ú
executabler   r    ÚAssertionErrorr#   r)   r9   r]   re   r±   r³   rµ   ÚTestCaserÀ   Úfrom_mappingÚPUBLICÚINTERNALÚUNKNOWNÚCONFIDENTIALr  rô   r  r  Ú__all__r'   r!   r   ú<module>r6     sF  ðÙ WÝ "ã Û Û 	Û 
Û Û Û Ý ç Dß ZÑ ZÝ 2Ý 3ß JÑ Jß 7ß 7ß CÑ CÝ (à€Ø€Ø€Ù‘�h“×'Ñ'Ó)×0Ñ0°:Ñ=ÀÑOÓP€
Ø	�‰€ô4ô	˜>ô 	ô
!Ð.ô 
!÷ ñ  ôóô!-ôH>÷
+ñ 
+ô!�h×'Ñ'ô !ðH ,�×+Ñ+Ø× Ñ Ð!Ø×!Ñ! ;×#7Ñ#7¸×9LÑ9LÈk×NfÑNfÐgñ-ó €÷)ñ )ó8nóDò
�r!   