Ë
    $>Ýjé!  ã                   óx  — d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	 ddl
mZmZ ddlmZ ddlmZmZmZmZmZ dd	lmZmZ g d
¢ZddddddddddeddgZddgZ G d„ dej6                  «      Z G d„ dej6                  «      Z G d„ de«      Z G d„ dej6                  «      Ze dk(  r ejB                  «        yy) zXBypass-Flag-Policy (tools nur im Kaefig) und M3-Quercheck (Exit UND JSONL UND last.txt).é    N)ÚPath)ÚResultStatus)ÚCodexAdapterÚvalidate_command_template)ÚConfigurationErrorÚparse_gateway_config)ÚISO_EXEC_PATH)ÚIsolatedRunnerÚ	RunResultÚUnsafeCommandErrorÚassert_safe_argvÚmock_codex_events)ÚAdapterHarnessÚconfig_dict)ú/usr/bin/codexÚexecú-súdanger-full-accessú-z/usr/bin/systemd-runz--userz--scopez--quietz--unitz{unit}z/usr/bin/envz-iz/usr/bin/python3z-Iz{cfg}z--c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚBypassPolicyc                 ó¾   — | j                  t        «      5 }t        g d¢«       d d d «       | j                  j                  j
                  d«       y # 1 sw Y   Œ0xY w)N©r   r   r   r   ÚFORBIDDEN_SANDBOX_FLAG)ÚassertRaisesr   r   ÚassertEqualÚ	exceptionÚcode©ÚselfÚcs     ú9/home/aria/aria-v3-dev/python/tests/test_codex_profile.pyÚ/test_assert_safe_argv_rejects_bypass_by_defaultz<BypassPolicy.test_assert_safe_argv_rejects_bypass_by_default   sP   € Ø×ÑÔ1Ó2ð 	U°aÜÒSÔT÷	Uà×Ñ˜Ÿ™×)Ñ)Ð+CÕD÷	Uð 	Uús   –AÁAc                 ó"   — t        g d¢d¬«       y )Nr   T©Úallow_bypass_sandbox)r   ©r    s    r"   Ú0test_assert_safe_argv_allows_bypass_when_flaggedz=BypassPolicy.test_assert_safe_argv_allows_bypass_when_flagged   s   € ÜÒOÐfjÖkó    c                 óv   — | j                  t        «      5  t        ddgd¬«       d d d «       y # 1 sw Y   y xY w)Nr   z--yoloTr%   )r   r   r   r'   s    r"   Útest_yolo_always_rejectedz&BypassPolicy.test_yolo_always_rejected   s;   € Ø×ÑÔ1Ó2ñ 	VÜÐ.°Ð9ÐPTÕU÷	V÷ 	Vñ 	Vús   –/¯8c                 ó€  — t        t        t        dd¬«       | j                  t        «      5 }t        t        t
        dd¬«       d d d «       | j                  j                  j                  d«       | j                  t        «      5  t        t        t        d¬«       d d d «       y # 1 sw Y   ŒdxY w# 1 sw Y   y xY w)NT)r&   Úrequire_cageÚTOOLS_PROFILE_REQUIRES_CAGEFr%   )	r   ÚDANGERÚCAGEr   r   ÚNONCAGEr   r   r   r   s     r"   Ú"test_template_bypass_requires_cagez/BypassPolicy.test_template_bypass_requires_cage!   sŸ   € ä!¤&¬$ÀTÐX\Õ]à×ÑÔ1Ó2ð 	e°aÜ%¤f¬gÈDÐ_cÕd÷	eà×Ñ˜Ÿ™×)Ñ)Ð+HÔIà×ÑÔ1Ó2ñ 	PÜ%¤f¬dÈÕO÷	Pð 	P÷		eð 	eú÷	Pð 	Pús   ­B(ÂB4Â(B1Â4B=N)Ú__name__Ú
__module__Ú__qualname__r#   r(   r+   r2   © r)   r"   r   r      s   „ òEò
lòVó	Pr)   r   c                   óT   — 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y)ÚConfigProfilePolicyc                 ó~   — t        j                  «       | _        t        | j                  j                  «      | _        y ©N)ÚtempfileÚTemporaryDirectoryÚ_tmpr   ÚnameÚrootr'   s    r"   ÚsetUpzConfigProfilePolicy.setUp.   s&   € Ü×/Ñ/Ó1ˆŒ	Ü˜Ÿ™Ÿ™Ó(ˆ�	r)   c                 ó8   — | j                   j                  «        y r:   ©r=   Úcleanupr'   s    r"   ÚtearDownzConfigProfilePolicy.tearDown2   ó   € Ø�	‰	×ÑÕr)   c                 óD   — t        t        | j                  d|i«      «      S )NÚcodex)r   r   r?   )r    rG   s     r"   ÚparsezConfigProfilePolicy.parse5   s   € Ü#¤K°·	±	¸GÀUÐ;KÓ$LÓMÐMr)   c                 óŠ   — | j                  dt        t        dœ«      }| j                  |j                  j
                  d«       y ©NÚtools)ÚprofileÚcommand_templateÚisolation_wrapper)rH   r/   r0   r   rG   rL   ©r    Úcfgs     r"   Útest_tools_with_cage_acceptedz1ConfigProfilePolicy.test_tools_with_cage_accepted8   s2   € Ø�j‰j WÄ&Ô_cÑdÓeˆØ×Ñ˜Ÿ™×*Ñ*¨GÕ4r)   c                 ó’   — | j                  t        «      5  | j                  dt        t        dœ«       d d d «       y # 1 sw Y   y xY wrJ   )r   r   rH   r/   r1   r'   s    r"   Ú test_tools_without_cage_rejectedz4ConfigProfilePolicy.test_tools_without_cage_rejected<   s>   € Ø×ÑÔ1Ó2ñ 	gØ�J‰J 7ÄÔ]dÑeÔf÷	g÷ 	gñ 	gús	   –=½Ac                 óˆ   — | j                  t        «      5  | j                  dt        dœ«       d d d «       y # 1 sw Y   y xY w)NÚtext)rL   rM   )r   r   rH   r/   r'   s    r"   Útest_text_with_bypass_rejectedz2ConfigProfilePolicy.test_text_with_bypass_rejected@   s;   € Ø×ÑÔ1Ó2ñ 	HØ�J‰J 6¼vÑFÔG÷	H÷ 	Hñ 	Hús	   –8¸Ac           	      ó‚  — | j                  t        «      5 }| j                  dt        t        dddœdœ«       d d d «       | j                  dt        j                  «      «       | j                  dt        t        ddidœ«      }| j                  |j                  j                  j                  «       y # 1 sw Y   Œ~xY w)NrK   ì        i,  )Úaddress_space_bytesÚcpu_seconds)rL   rM   rN   Úresource_limitsrY   rZ   )r   r   rH   r/   r0   ÚassertInÚstrr   ÚassertIsNonerG   r[   rY   )r    r!   rP   s      r"   Ú,test_tools_with_address_space_limit_rejectedz@ConfigProfilePolicy.test_tools_with_address_space_limit_rejectedD   s«   € à×ÑÔ1Ó2ð 	h°aØ�J‰J 7ÄÔ]aØCPÐadÑ+eñgô h÷	hð 	�‰Ð+¬S°·±Ó-=Ô>Ø�j‰j WÄ&Ô_cØ.;¸SÐ-AñCó Dˆà×Ñ˜#Ÿ)™)×3Ñ3×GÑGÕH÷	hð 	hús   –"B5Â5B>c                 óŽ   — | j                  dddii«      }| j                  |j                  j                  j                  d«       y )Nr[   rY   rX   )rH   r   rG   r[   rY   rO   s     r"   Ú#test_text_keeps_address_space_limitz7ConfigProfilePolicy.test_text_keeps_address_space_limitN   s<   € Ø�j‰jÐ+Ð.CÀ]Ð-SÐTÓUˆØ×Ñ˜Ÿ™×2Ñ2×FÑFÈÕVr)   c                 ó~   — | j                  t        «      5  | j                  ddi«       d d d «       y # 1 sw Y   y xY w)NrL   Úfull)r   r   rH   r'   s    r"   Útest_unknown_profile_rejectedz1ConfigProfilePolicy.test_unknown_profile_rejectedR   s7   € Ø×ÑÔ1Ó2ñ 	,Ø�J‰J˜	 6Ð*Ô+÷	,÷ 	,ñ 	,ús   –3³<c                 óˆ   — | j                  dt        t        dœ«      }| j                  |j                  j
                  «       y rJ   )rH   r/   r0   Ú
assertTruerG   Útools_protect_startuprO   s     r"   Ú(test_tools_protect_startup_defaults_truez<ConfigProfilePolicy.test_tools_protect_startup_defaults_trueV   s.   € à�j‰j WÄ&Ô_cÑdÓeˆØ�‰˜Ÿ	™	×7Ñ7Õ8r)   c                 óŠ   — | j                  dt        t        ddœ«      }| j                  |j                  j
                  «       y )NrK   F©rL   rM   rN   rg   )rH   r/   r0   ÚassertFalserG   rg   rO   s     r"   Ú*test_tools_protect_startup_can_be_disabledz>ConfigProfilePolicy.test_tools_protect_startup_can_be_disabled[   s7   € Ø�j‰j WÄ&Ô_cØ38ñ:ó ;ˆà×Ñ˜Ÿ™×8Ñ8Õ9r)   c                 ó”   — | j                  t        «      5  | j                  dt        t        ddœ«       d d d «       y # 1 sw Y   y xY w)NrK   Úyesrj   )r   r   rH   r/   r0   r'   s    r"   Ú+test_tools_protect_startup_rejects_non_boolz?ConfigProfilePolicy.test_tools_protect_startup_rejects_non_bool`   sA   € Ø×ÑÔ1Ó2ñ 	9Ø�J‰J 7ÄÔ]aØ16ñ8ô 9÷	9÷ 	9ñ 	9ús	   –>¾AN)r3   r4   r5   r@   rD   rH   rQ   rS   rV   r_   ra   rd   rh   rl   ro   r6   r)   r"   r8   r8   -   sC   „ ò)òòNò5ògòHòIòWò,ò9ò
:ó
9r)   r8   c                   ó   — e Zd Zd„ Zd„ Zy)Ú
StubRunnerc                 ó   — || _         y r:   ©Ú_result)r    Úresults     r"   Ú__init__zStubRunner.__init__g   s	   € Øˆ�r)   c                 ó   — | j                   S r:   rs   )r    Úspecs     r"   ÚrunzStubRunner.runj   s   € Ø�|‰|Ðr)   N)r3   r4   r5   rv   ry   r6   r)   r"   rq   rq   f   s   „ òór)   rq   c                   ó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y)ÚOutputFileCrossCheckc                 ó�   — t        j                  «       | _        t        t	        | j                  j
                  «      «      | _        y r:   )r;   r<   r=   r   r   r>   Úharnessr'   s    r"   r@   zOutputFileCrossCheck.setUpo   s+   € Ü×/Ñ/Ó1ˆŒ	Ü%¤d¨4¯9©9¯>©>Ó&:Ó;ˆ�r)   c                 ó8   — | j                   j                  «        y r:   rB   r'   s    r"   rD   zOutputFileCrossCheck.tearDowns   rE   r)   c                ó  — t        t        dd||¬«      «      }t        | j                  j                  |d¬«      }| j                  j                  d«      }|j                  | j                  j                  ||«      |«      S )NTr   ©Ú	exit_codeÚstdoutÚartifact)ÚrunnerÚrequire_output_fileú#public hallo)rq   r   r   r}   ÚverifierÚjobÚexecuteÚclear©r    r‚   rƒ   r„   Úadapterrˆ   s         r"   Ú_runzOutputFileCrossCheck._runv   sg   € ÜœI d°aÀÐQYÔZÓ[ˆÜ˜tŸ|™|×4Ñ4¸VÐY]Ô^ˆØ�l‰l×Ñ˜Ó/ˆØ�‰˜tŸ|™|×1Ñ1°'¸3Ó?ÀÓEÐEr)   c                 ó¬   — | j                  t        d«      d¬«      }| j                  |j                  |j                  ft
        j                  df«       y )NÚOKó   OK©r‚   rƒ   )r�   r   r   ÚstatusÚoutputr   ÚSUCCESS©r    Úrs     r"   Ú*test_success_when_jsonl_and_last_txt_matchz?OutputFileCrossCheck.test_success_when_jsonl_and_last_txt_match|   sB   € Ø�I‰IÔ.¨tÓ4¸uˆIÓEˆØ×Ñ˜!Ÿ(™( A§H¡HÐ-´×0DÑ0DÀdÐ/KÕLr)   c                 ó¬   — | j                  t        d«      d¬«      }| j                  |j                  |j                  ft
        j                  df«       y )Nr�   r)   r‘   ÚOUTPUT_FILE_MISSING©r�   r   r   r’   Ú
error_coder   ÚFAILEDr•   s     r"   Ú"test_fail_when_output_file_missingz7OutputFileCrossCheck.test_fail_when_output_file_missing€   sC   € Ø�I‰IÔ.¨tÓ4¸sˆIÓCˆØ×Ñ˜!Ÿ(™( A§L¡LÐ1´L×4GÑ4GÐI^Ð3_Õ`r)   c                 ó¬   — | j                  t        d«      d¬«      }| j                  |j                  |j                  ft
        j                  df«       y )Nr�   s   SOMETHING ELSEr‘   ÚOUTPUT_MISMATCHrš   r•   s     r"   Ú+test_fail_when_output_file_mismatches_jsonlz@OutputFileCrossCheck.test_fail_when_output_file_mismatches_jsonl„   sD   € Ø�I‰IÔ.¨tÓ4Ð?PˆIÓQˆØ×Ñ˜!Ÿ(™( A§L¡LÐ1´L×4GÑ4GÐIZÐ3[Õ\r)   c                ó  — t        t        dd||¬«      «      }t        | j                  j                  |t
        t        dd¬«      }| j                  j                  d«      }|j                  | j                  j                  ||«      |«      S )NTr   r€   )r„   rM   rN   Úallow_sandbox_bypassr…   r†   )
rq   r   r   r}   r‡   r/   r0   rˆ   r‰   rŠ   r‹   s         r"   Ú
_run_toolszOutputFileCrossCheck._run_toolsˆ   sr   € ÜœI d°aÀÐQYÔZÓ[ˆÜ˜tŸ|™|×4Ñ4¸VÔV\Ü15ÈDÐfjôlˆà�l‰l×Ñ˜Ó/ˆØ�‰˜tŸ|™|×1Ñ1°'¸3Ó?ÀÓEÐEr)   sÅ   {"type":"turn.started"}
{"type":"item.completed","item":{"type":"command_execution","command":"id"}}
{"type":"item.completed","item":{"type":"agent_message","text":"OK"}}
{"type":"turn.completed"}
c                 ó®   — | j                  | j                  d¬«      }| j                  |j                  |j                  ft
        j                  df«       y )Nr�   r‘   r�   )r£   ÚTOOL_RUNr   r’   r“   r   r”   r•   s     r"   Ú&test_tools_profile_accepts_tool_eventsz;OutputFileCrossCheck.test_tools_profile_accepts_tool_events”   s@   € Ø�O‰O 4§=¡=¸5ˆOÓAˆØ×Ñ˜!Ÿ(™( A§H¡HÐ-´×0DÑ0DÀdÐ/KÕLr)   c                 ó®   — | j                  | j                  d¬«      }| j                  |j                  |j                  ft
        j                  df«       y )Nr�   r‘   ÚTOOL_EVENT_SEEN)r�   r¥   r   r’   r›   r   rœ   r•   s     r"   Ú%test_text_profile_rejects_tool_eventsz:OutputFileCrossCheck.test_text_profile_rejects_tool_events˜   sA   € Ø�I‰I˜TŸ]™]°UˆIÓ;ˆØ×Ñ˜!Ÿ(™( A§L¡LÐ1´L×4GÑ4GÐIZÐ3[Õ\r)   c                 ó~   — | j                  dd¬«      }| j                  |j                  t        j                  «       y )Ns   {"type":"turn.started"}
r�   r‘   )r�   r   r’   r   rœ   r•   s     r"   Útest_fail_when_jsonl_incompletez4OutputFileCrossCheck.test_fail_when_jsonl_incompleteœ   s/   € Ø�I‰IÐ9ÀEˆIÓJˆØ×Ñ˜Ÿ™¤<×#6Ñ#6Õ7r)   c                 óü  — | j                  t        d«      d¬«      }| j                  |j                  |j                  ft
        j                  df«       | j                  t        d«      d¬«      }| j                  |j                  |j                  ft
        j                  df«       | j                  t        d«      d¬«      }| j                  |j                  |j                  ft
        j                  df«       y )NzNICHT OKr�   r‘   rŸ   r�   s   OK, alles bestenss     NICHT OK
)	r�   r   r   r’   r›   r   rœ   r“   r”   )r    r–   Úr2Úr3s       r"   Ú test_substring_last_txt_rejectedz5OutputFileCrossCheck.test_substring_last_txt_rejected    sÅ   € à�I‰IÔ.¨zÓ:ÀUˆIÓKˆØ×Ñ˜!Ÿ(™( A§L¡LÐ1´L×4GÑ4GÐIZÐ3[Ô\à�Y‰YÔ/°Ó5Ð@TˆYÓUˆØ×Ñ˜"Ÿ)™) R§]¡]Ð3´l×6IÑ6IÐK\Ð5]Ô^à�Y‰YÔ/°
Ó;ÀoˆYÓVˆØ×Ñ˜"Ÿ)™) R§Y¡YÐ/´,×2FÑ2FÈ
Ð1SÕTr)   N)r3   r4   r5   r@   rD   r�   r—   r�   r    r£   r¥   r¦   r©   r«   r¯   r6   r)   r"   r{   r{   n   sH   „ ò<òòFòMòaò]òFð/€Hò
Mò]ò8ó	Ur)   r{   Ú__main__)"Ú__doc__r;   ÚunittestÚpathlibr   Úaria_router.adapter_contractr   Úaria_router.codex_adapterr   r   Úaria_router.configr   r   Úaria_router.isolationr	   Úaria_router.runnerr
   r   r   r   r   Útests.helpersr   r   r/   r0   r1   ÚTestCaser   r8   rq   r{   r3   Úmainr6   r)   r"   ú<module>r¼      s½   ðÙ ^Û Û Ý å 5ß Mß GÝ /ß qÕ qç 5â	D€Ø ¨)°YÀÈ(Ø˜Ð0°$¸ÀwÐPTðV€à˜4Ð
 €ôP�8×$Ñ$ô Pô269˜(×+Ñ+ô 69ôr�ô ô;U˜8×,Ñ,ô ;Uð| ˆzÒØ€H‡M�M…Oð r)   