Ë
    $>Ýj2  ã                   ó6  — d 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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 ddlmZmZmZmZmZmZ ddlmZmZmZmZm Z  d	d
dœZ!dZ"de#de$fd„Z% G d„ dejL                  «      Z'e(dk(  r ejR                  «        yy)zLEchter Runner (SubprocessRunner): Isolationseigenschaften der Schnittstelle.é    N)ÚPath)ÚDEFAULT_COMMAND_TEMPLATEÚCodexAdapterÚvalidate_command_template)ÚConfigurationErrorÚparse_gateway_config)Údecode_events)Ú
MockRunnerÚResourceLimitsÚRunSpecÚUnsafeCommandErrorÚassert_safe_argvÚvalidate_env)ÚAdapterHarnessÚGuardedSubprocessRunnerÚRealBinaryGuardErrorÚconfig_dictÚfake_codex_templatez/usr/bin:/binzC.UTF-8)ÚPATHÚLANG))ú	--sandboxúdanger-full-access)z--sandbox=danger-full-access)z-szDANGER-FULL-ACCESS)ú-cz!sandbox_mode="danger-full-access"©z*--dangerously-bypass-approvals-and-sandbox)z--yoloÚpidÚreturnc                 óà   — 	 t        d| › d�dd¬«      5 }|j                  «       j                  dd«      d   j                  «       d   }d d d «       d	v S # 1 sw Y   ŒxY w# t        $ r Y y
w xY w)Nz/proc/z/statÚrzutf-8)Úencodingú)é   r   )ÚZÚXT)ÚopenÚreadÚrsplitÚsplitÚFileNotFoundError)r   ÚhandleÚstates      ú2/home/aria/aria-v3-dev/python/tests/test_runner.pyÚprocess_goner,   "   s|   € ðÜ�F˜3˜%˜uÐ% s°WÔ=ð 	?ÀØ—K‘K“M×(Ñ(¨¨aÓ0°Ñ3×9Ñ9Ó;¸AÑ>ˆE÷	?à˜
Ð"Ð"÷	?ð 	?ûô ò Ùðús(   ‚A! ”5AÁ	A! ÁAÁA! Á!	A-Á,A-c                   ó~  — e Zd Zd„ Zd„ Zddddddœ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d„ Zd„ Zd„ Z ej6                  ej:                  j=                  d«      d«      d „ «       Z ej6                  ej:                  j=                  d«      d«      d!„ «       Z d"„ Z!d#„ Z"d$„ Z#y)%ÚSubprocessRunnerTestsc                 ó  — t        j                  «       | _        t        | j                  j                  «      | _        | j
                  dz  | _        | j                  j                  «        t        | j                  «      | _	        y )NÚwork)
ÚtempfileÚTemporaryDirectoryÚ_tmpr   ÚnameÚrootr0   Úmkdirr   Úrunner©Úselfs    r+   ÚsetUpzSubprocessRunnerTests.setUp,   sT   € Ü×/Ñ/Ó1ˆŒ	Ü˜Ÿ™Ÿ™Ó(ˆŒ	Ø—I‘I Ñ&ˆŒ	Ø�	‰	�‰ÔÜ-¨d¯i©iÓ8ˆ�ó    c                 ó8   — | j                   j                  «        y ©N)r3   Úcleanupr8   s    r+   ÚtearDownzSubprocessRunnerTests.tearDown3   s   € Ø�	‰	×ÑÕr;   é   i    Nó   x© )ÚtimeoutÚ
max_outputÚenvÚstdinÚfilesc                ój   — t        t        t        |g|¢­Ž «      |t        |xs t        «      |||«      S r=   )r   Útupler   ÚdictÚBASE_ENV)r9   ÚmoderC   rD   rE   rF   rG   Úextras           r+   ÚspeczSubprocessRunnerTests.spec6   s7   € Ü”uÔ0°Ð>¸Ò>Ó?ÀÌÈSÊ_ÔT\ÓH]Ð_fØ! 5ó*ð 	*r;   c                 óF  — dt        j                  d«      z   }dD �ci c]"  }|t        j                  j	                  |«      “Œ$ }}|t        j                  d<   |t        j                  d<   	 | j
                  j                  | j                  d«      «      }|j                  «       D ];  \  }}|€!t        j                  j                  |d «       Œ)|t        j                  |<   Œ= 	 | j                  |j                  |«       t        j                  t        |j                  «      j                   «      }| j#                  d|«       | j#                  d|«       | j#                  |j%                  «       |j                  «       | j'                  t)        |«      t)        t*        «      dhz  «       | j-                  |d   t*        d   «       y c c}w # |j                  «       D ];  \  }}|€!t        j                  j                  |d «       Œ)|t        j                  |<   Œ= w xY w)	Nztest-é   )ÚTELEGRAM_BOT_TOKENÚARIA_SUPABASE_SERVICE_KEYrQ   rR   rE   ÚLC_CTYPEr   )ÚsecretsÚ	token_hexÚosÚenvironÚgetr7   ÚrunrN   ÚitemsÚpopÚ
assertTrueÚokÚjsonÚloadsr	   ÚstdoutÚoutputÚassertNotInÚencodeÚassertLessEqualÚsetrK   ÚassertEqual)r9   ÚtokenÚkÚsavedÚresultÚkeyÚvalueÚ	child_envs           r+   Útest_env_not_inheritedz,SubprocessRunnerTests.test_env_not_inherited:   s¤  € Øœ'×+Ñ+¨BÓ/Ñ/ˆØ/bÖc¨!�”B—J‘J—N‘N 1Ó%Ñ%ÐcˆÐcØ+0Œ�
‰
Ð'Ñ(Ø27Œ�
‰
Ð.Ñ/ð	,Ø—[‘[—_‘_ T§Y¡Y¨uÓ%5Ó6ˆFà#Ÿk™k›mò ,‘
��UØ�=Ü—J‘J—N‘N 3¨Õ-à&+”B—J‘J˜s’Oñ	,ð
 	�‰˜Ÿ	™	 6Ô*Ü—J‘Jœ}¨V¯]©]Ó;×BÑBÓCˆ	Ø×ÑÐ-¨yÔ9Ø×ÑÐ4°iÔ@Ø×Ñ˜Ÿ™›¨¯©Ô7Ø×ÑœS ›^¬S´«]¸j¸\Ñ-IÔJØ×Ñ˜ 6Ñ*¬H°VÑ,<Õ=ùò# døð $Ÿk™k›mò ,‘
��UØ�=Ü—J‘J—N‘N 3¨Õ-à&+”B—J‘J˜s’Oñ	,ús   �'GÁ-*G ÇAH c                 óJ  — dD ]¶  }| j                  |¬«      5  | j                  t        «      5 }t        |di«       d d d «       | j	                  j
                  j                  d«       | j	                  | j                  j                  | j                  d|di¬«      «      j                  d«       d d d «       Œ¸ | j                  t        «      5  t        t        | j                  ddd	diii«      «       d d d «       y # 1 sw Y   ŒÅxY w# 1 sw Y   �ŒxY w# 1 sw Y   y xY w)
N)rQ   ÚOPENAI_API_KEYrR   Ú
LD_PRELOADÚ
PYTHONPATHÚANTHROPIC_API_KEYÚGITHUB_TOKENÚDB_PASSWORD)r4   ÚxÚFORBIDDEN_ENVÚsuccess)rE   ÚcodexrE   rQ   )ÚsubTestÚassertRaisesr   r   rf   Ú	exceptionÚcoder7   rY   rN   Ú
error_coder   r   r   r5   )r9   r4   Úctxs      r+   Ú'test_env_allowlist_rejects_secret_namesz=SubprocessRunnerTests.test_env_allowlist_rejects_secret_namesO   s  € ðWò 	uˆDà—‘ 4�Ó(ñ uØ×&Ñ&Ô'9Ó:ð .¸cÜ  $¨ Ô-÷.à× Ñ  §¡×!3Ñ!3°_ÔEØ× Ñ  §¡§¡°·±¸9È4ÐQTÈ+°Ó1VÓ!W×!bÑ!bÐdsÔt÷	uð uð	uð ×ÑÔ1Ó2ñ 	jÜ ¤¨T¯Y©Y¸À5ÐK_ÐadÐJeÐBfÐ8gÓ!hÔi÷	jð 	j÷	.ð .ú÷uñ uú÷
	jð 	jús.   ˜D®D ¼A6DÃ&DÄ D	ÄDÄD	ÄD"c                 ó  — t        j                  «       }| j                  j                  | j	                  ddd¬«      «      }| j                  |j                  d«       | j                  t        j                  «       |z
  d«       y )NÚsleepÚ30r!   ©rC   ÚTIMEOUTé   )ÚtimeÚ	monotonicr7   rY   rN   rf   r~   Ú
assertLess©r9   Ústartedrj   s      r+   Útest_timeout_kills_processz0SubprocessRunnerTests.test_timeout_kills_processZ   s_   € Ü—.‘.Ó"ˆØ—‘—‘ §¡¨7°DÀ! Ó!DÓEˆØ×Ñ˜×*Ñ*¨IÔ6Ø�‰œŸ™Ó(¨7Ñ2°AÕ6r;   c                 óà   — | j                   j                  | j                  d«      «      }| j                  |j                  |j
                  |j                  fddt        j                  f«       y )NÚcrashFÚCRASHED)r7   rY   rN   rf   r]   r~   ÚsignalÚSIGKILL©r9   rj   s     r+   Útest_crash_reportedz)SubprocessRunnerTests.test_crash_reported`   sQ   € Ø—‘—‘ §¡¨7Ó!3Ó4ˆØ×Ñ˜&Ÿ)™) V×%6Ñ%6¸¿¹ÐFÈÐPYÔ[a×[iÑ[iÐHjÕkr;   c                 ó¨   — | j                   j                  | j                  d«      «      }| j                  |j                  |j
                  fd«       y )NÚexit2)ÚNONZERO_EXITé   )r7   rY   rN   rf   r~   Ú	exit_coder’   s     r+   Útest_nonzero_exitz'SubprocessRunnerTests.test_nonzero_exitd   s?   € Ø—‘—‘ §¡¨7Ó!3Ó4ˆØ×Ñ˜&×+Ñ+¨V×-=Ñ-=Ð>Ð@SÕTr;   c                 óF  — t        j                  «       }| j                  j                  | j	                  dddd¬«      «      }| j                  |j                  d«       | j                  |j                  d«       | j                  t        j                  «       |z
  d«       y )	NÚfloodÚ100000é   éè  ©rC   rD   ÚOUTPUT_LIMITr;   r@   )	r‡   rˆ   r7   rY   rN   rf   r~   r`   r‰   rŠ   s      r+   Ú%test_output_limit_enforced_during_runz;SubprocessRunnerTests.test_output_limit_enforced_during_runh   sv   € Ü—.‘.Ó"ˆØ—‘—‘ §¡¨7°HÀbÐUY Ó!ZÓ[ˆØ×Ñ˜×*Ñ*¨NÔ;Ø×Ñ˜Ÿ™¨Ô,Ø�‰œŸ™Ó(¨7Ñ2°AÕ6r;   c                 óâ   — | j                   j                  | j                  dddd¬«      «      }| j                  |j                  d«       | j                  t        |j                  «      d«       y )NÚ	flood_errrœ   r�   rž   rŸ   r    i @  )r7   rY   rN   rf   r~   rd   ÚlenÚstderr_tailr’   s     r+   Útest_stderr_limit_enforcedz0SubprocessRunnerTests.test_stderr_limit_enforcedo   sW   € Ø—‘—‘ §¡¨;¸È"ÐY] Ó!^Ó_ˆØ×Ñ˜×*Ñ*¨NÔ;Ø×ÑœS ×!3Ñ!3Ó4°iÕ@r;   c                 ó  — | j                   dz  }| j                  j                  | j                  dt	        |«      d¬«      «      }| j                  |j                  d«       t        |j                  «       «      }t        j                  «       dz   }t        |«      sOt        j                  «       |k  r8t        j                  d«       t        |«      st        j                  «       |k  rŒ8| j                  t        |«      d|› d	�«       y )
Nzgrandchild.pidÚ
grandchildr—   r„   r…   r@   gš™™™™™©?zEnkelprozess u    lÃ¤uft noch)r5   r7   rY   rN   Ústrrf   r~   ÚintÚ	read_textr‡   rˆ   r,   r‚   r\   )r9   Úpidfilerj   r   Údeadlines        r+   Útest_process_group_killedz/SubprocessRunnerTests.test_process_group_killedt   sÆ   € Ø—)‘)Ð.Ñ.ˆØ—‘—‘ §¡¨<¼¸W»Èq Ó!QÓRˆØ×Ñ˜×*Ñ*¨IÔ6Ü�'×#Ñ#Ó%Ó&ˆÜ—>‘>Ó# aÑ'ˆÜ˜sÔ#¬¯©Ó(8¸8Ò(CÜ�J‰J�tÔô ˜sÔ#¬¯©Ó(8¸8Ó(Cà�‰œ SÓ)¨]¸3¸%¸|Ð+LÕMr;   c                 ó„  — t         D �]l  }| j                  |¬«      5  d|z   }| j                  t        «      5 }t	        |«       d d d «       | j                  j                  j                  d«       | j                  t        «      5  t        t        |«      «       d d d «       | j                  t        «      5  t        t        t        «      dg|¢«       d d d «       | j                  t        «      5  t        t        | j                  ddt        |«      ii«      «       d d d «       | j                  t        «      5  t        t        | j                  dddg|¢ii«      «       d d d «       d d d «       �Œo y # 1 sw Y   �Œ6xY w# 1 sw Y   ŒêxY w# 1 sw Y   Œ¼xY w# 1 sw Y   Œ~xY w# 1 sw Y   ŒFxY w# 1 sw Y   �Œ¸xY w)N)Úvariant)ú/usr/bin/codexÚexecÚFORBIDDEN_SANDBOX_FLAGz/usr/bin/envry   Úcommand_templateÚisolation_wrapper)ÚFORBIDDEN_VARIANTSrz   r{   r   r   rf   r|   r}   r   Úlistr   r   r   r   r5   )r9   r°   Úargvr   s       r+   Útest_forbidden_flags_rejectedz3SubprocessRunnerTests.test_forbidden_flags_rejected~   s·  € Ü)ó 	oˆGØ—‘ g�Ó.ñ oØ1°GÑ;�Ø×&Ñ&Ô'9Ó:ð +¸cÜ$ TÔ*÷+à× Ñ  §¡×!3Ñ!3Ð5MÔNØ×&Ñ&Ô'9Ó:ñ :Ü-¬d°4«jÔ9÷:à×&Ñ&Ô'9Ó:ñ jÜ-¬dÔ3KÓ.LÈ~ÐNhÐ`gÐNhÔi÷jà×&Ñ&Ô'9Ó:ñ nÜ(¬°T·Y±YÀÐK]Ô_cÐdhÓ_iÐJjÐ@kÓ)lÔm÷nà×&Ñ&Ô'9Ó:ñ oÜ(¬°T·Y±YÀÐK^Ðaoð akØbiðakð Klð Amó *nô o÷o÷oñ oñ	o÷+ñ +ú÷:ð :ú÷jð jú÷nð nú÷oð oú÷oñ oúsƒ   �F5¸E8ÁAF5ÂFÂF5Â9FÃF5Ã3-FÄ F5Ä='F)Å$F5Å8FÅ=F5ÆFÆ
F5ÆFÆF5ÆF&Æ"F5Æ)F2Æ.F5Æ5F?	c                 óÌ   — t        | j                  dz  «      }| j                  t        «      5  t	        |j
                  t        «       g d¢¬«       d d d «       y # 1 sw Y   y xY w)NÚh©r±   r²   r   r   ú-©r7   r´   )r   r5   r{   r   r   Úverifierr
   )r9   Úharnesss     r+   Ú'test_adapter_refuses_forbidden_templatez=SubprocessRunnerTests.test_adapter_refuses_forbidden_template�   sT   € Ü  §¡¨S¡Ó1ˆØ×ÑÔ1Ó2ñ 	nÜ˜×)Ñ)´*³,Ú*lõn÷	n÷ 	nñ 	nús   ®#AÁA#c                 ó¨  — ddl m} t        | j                  dz  «      }t	        «       }t        |j                  |t        «       ¬«      }d|_        |j                  d«      }|j                  |j                  ||«      |«      }| j                  |j                  |j                  f|j                  df«       | j                  |j                   g «       y )Nr   )ÚResultStatusÚrecheckr¾   r¼   z	#public xr³   )Úaria_router.adapter_contractrÃ   r   r5   r
   r   r¿   r   Ú_argvÚjobÚexecuteÚclearrf   Ústatusr~   ÚBLOCKEDÚcalls)r9   rÃ   rÀ   r7   ÚadapterrÇ   rj   s          r+   Ú)test_adapter_rechecks_template_before_runz?SubprocessRunnerTests.test_adapter_rechecks_template_before_run•   s¨   € õ 	>Ü  §¡¨YÑ!6Ó7ˆÜ“ˆÜ˜w×/Ñ/¸ÔQdÓQfÔgˆØZˆŒØ�k‰k˜+Ó&ˆØ—‘ §¡¨w¸Ó!<¸cÓBˆØ×Ñ˜&Ÿ-™-¨×):Ñ):Ð;¸l×>RÑ>RÐTlÐ=mÔnØ×Ñ˜Ÿ™ rÕ*r;   c                 ót  — t        t        d«      «      dz   }t        |dt        t        «      d«      }| j                  | j                  j                  |«      j                  d«       t        «       }| j                  |j                  |«      j                  d«       | j                  |j                  g «       y )Nrx   r   rA   r@   r³   )rI   r   r   rJ   rK   rf   r7   rY   r~   r
   rÌ   )r9   r¸   rN   Úmocks       r+   Ú.test_runners_refuse_forbidden_argv_at_run_timezDSubprocessRunnerTests.test_runners_refuse_forbidden_argv_at_run_time¢   sŠ   € äÔ(¨Ó3Ó4Ð7fÑfˆÜ�t˜T¤4¬£>°1Ó5ˆØ×Ñ˜Ÿ™Ÿ™¨Ó.×9Ñ9Ð;SÔTÜ‹|ˆØ×Ñ˜Ÿ™ $›×2Ñ2Ð4LÔMØ×Ñ˜Ÿ™ RÕ(r;   c                 ó¾   — | j                  t        «      5 }t        g d¢«       d d d «       | j                  j                  j
                  d«       y # 1 sw Y   Œ0xY w)N)ry   r²   r½   ÚCOMMAND_NOT_ABSOLUTE©r{   r   r   rf   r|   r}   ©r9   r   s     r+   Útest_relative_command_rejectedz4SubprocessRunnerTests.test_relative_command_rejected«   sL   € Ø×ÑÔ1Ó2ð 	>°cÜ%Ò&<Ô=÷	>à×Ñ˜Ÿ™×+Ñ+Ð-CÕD÷	>ð 	>úó   –AÁAc                 ó¾   — | j                  t        «      5 }t        g d¢«       d d d «       | j                  j                  j
                  d«       y # 1 sw Y   Œ0xY w)N)r±   r²   z{prompt}ÚUNKNOWN_PLACEHOLDERrÔ   rÕ   s     r+   Ú!test_unknown_placeholder_rejectedz7SubprocessRunnerTests.test_unknown_placeholder_rejected°   sP   € Ø×ÑÔ1Ó2ð 	N°cÜ%Ò&LÔM÷	Nà×Ñ˜Ÿ™×+Ñ+Ð-BÕC÷	Nð 	Núr×   c                 óö   — dj                  «       }| j                  j                  | j                  d|¬«      «      }| j	                  t        |j                  «      j                  |j                  «       «       y )Nz$(id) `whoami` ; echo pwnedÚecho)rF   )	rc   r7   rY   rN   rf   r	   r`   ra   Údecode©r9   Úpayloadrj   s      r+   Útest_no_shell_interpretationz2SubprocessRunnerTests.test_no_shell_interpretationµ   sU   € Ø/×6Ñ6Ó8ˆØ—‘—‘ §¡¨6¸ Ó!AÓBˆØ×Ñœ v§}¡}Ó5×<Ñ<¸g¿n¹nÓ>NÕOr;   c                 ó¨   — t        | j                  dz  «      j                  | j                  d«      «      }| j	                  |j
                  d«       y )NÚmissingrx   ÚWORKSPACE_UNAVAILABLE)r   r5   rY   rN   rf   r~   r’   s     r+   Útest_workspace_missingz,SubprocessRunnerTests.test_workspace_missingº   s@   € Ü(¨¯©°YÑ)>Ó?×CÑCÀDÇIÁIÈiÓDXÓYˆØ×Ñ˜×*Ñ*Ð,CÕDr;   c                 ó2  — | j                   j                  | j                  d«      «      }t        t	        |j
                  «      j                  «      }| j                  |j                  | j                  «       | j                  |j                  «       «       y )NÚcwd)r7   rY   rN   r   r	   r`   ra   rf   Úparentr0   ÚassertFalseÚexists)r9   rj   Úworkdirs      r+   Ú test_workdir_private_and_removedz6SubprocessRunnerTests.test_workdir_private_and_removed¾   sc   € Ø—‘—‘ §¡¨5Ó!1Ó2ˆÜ”} V§]¡]Ó3×:Ñ:Ó;ˆØ×Ñ˜Ÿ™¨¯©Ô3Ø×Ñ˜Ÿ™Ó)Õ*r;   c                 óŽ  — | j                   j                  | j                  dd¬«      «      }t        |j                  «      j
                  j                  «       }| j                  dt        j                  d«      j                  «       z   |«       | j                  dt        j                  d«      j                  «       z   |«       y )NrG   ))z01-a.txtó   abc)z
02-../../xó   def)rG   z	01-a.txt:rí   zx:rî   )r7   rY   rN   r	   r`   ra   Ú
splitlinesÚassertInÚhashlibÚsha256Ú	hexdigest)r9   rj   Úlistings      r+   Útest_files_stagedz'SubprocessRunnerTests.test_files_stagedÄ   s‰   € Ø—‘—‘ §¡¨7Ð:h Ó!iÓjˆÜ §¡Ó.×5Ñ5×@Ñ@ÓBˆØ�‰�k¤G§N¡N°6Ó$:×$DÑ$DÓ$FÑFÈÔPØ�‰�dœWŸ^™^¨FÓ3×=Ñ=Ó?Ñ?ÀÕIr;   c                 óf  — t        j                  d«      j                  «       j                  «       }| j                  j                  | j                  d|d¬«      «      }| j                  t        |j                  «      j                  dt        j                  |«      j                  «       z   «       y )Ni X Ú	stdin_shar�   ©rF   rC   zSTDIN_SHA256=)rV   ÚurandomÚhexrc   r7   rY   rN   rf   r	   r`   ra   rñ   rò   ró   rÞ   s      r+   Útest_large_stdin_deliveredz0SubprocessRunnerTests.test_large_stdin_deliveredÊ   s}   € Ü—*‘*˜ZÓ(×,Ñ,Ó.×5Ñ5Ó7ˆØ—‘—‘ §¡¨;¸gÈr Ó!RÓSˆØ×Ñœ v§}¡}Ó5×<Ñ<¸oÔPW×P^ÑP^Ð_fÓPg×PqÑPqÓPsÑ>sÕtr;   c                 ó.  — t        j                  d«      j                  «       j                  «       }| j                  j                  | j                  d|d¬«      «      }| j                  |j                  «       | j                  |j                  d«       y )Ni @ Únoreadr�   rø   ÚSTDIN_FAILED)rV   rù   rú   rc   r7   rY   rN   rè   r]   rf   r~   rÞ   s      r+   Ú!test_stdin_write_failure_is_errorz7SubprocessRunnerTests.test_stdin_write_failure_is_errorÏ   sm   € ô —*‘*˜ZÓ(×,Ñ,Ó.×5Ñ5Ó7ˆØ—‘—‘ §¡¨8¸7ÈB Ó!OÓPˆØ×Ñ˜Ÿ™Ô#Ø×Ñ˜×*Ñ*¨NÕ;r;   ú/usr/bin/prlimitzprlimit fehltc                 ó¬  — t        | j                  t        d¬«      ¬«      }t        j                  «       }|j                  | j                  dd¬«      «      }| j                  |j                  d«       | j                  |j                  t        j                  t        j                  f«       | j                  t        j                  «       |z
  d«       y )	Nr!   )Úcpu_seconds©Úresource_limitsÚcpué   r„   r�   é   )r   r0   r   r‡   rˆ   rY   rN   rf   r~   rð   r�   r‘   ÚSIGXCPUr‰   )r9   r7   r‹   rj   s       r+   Útest_cpu_limit_via_prlimitz0SubprocessRunnerTests.test_cpu_limit_via_prlimit×   sŽ   € ä(¨¯©ÄNÐ_`ÔDaÔbˆÜ—.‘.Ó"ˆØ—‘˜DŸI™I e°R˜IÓ8Ó9ˆØ×Ñ˜×*Ñ*¨IÔ6Ø�‰�f—m‘m¤f§n¡n´f·n±nÐ%EÔFØ�‰œŸ™Ó(¨7Ñ2°BÕ7r;   c                 óx  — t        | j                  t        d¬«      ¬«      }|j                  | j	                  dt        d«      d¬«      «      }| j                  |j                  d«       | j                  j                  | j	                  dt        d	«      d¬«      «      }| j                  |j                  «       y )
Ni    )Úaddress_space_bytesr  Úmemi   @r  r„   r–   i   )r   r0   r   rY   rN   r©   rf   r~   r7   r\   r]   )r9   r7   rj   Ú	unlimiteds       r+   Útest_memory_limit_via_prlimitz3SubprocessRunnerTests.test_memory_limit_via_prlimità   s‰   € ä(¨¯©ÄNÐgxÔDyÔzˆØ—‘˜DŸI™I e¬SÐ1CÓ-DÈb˜IÓQÓRˆØ×Ñ˜×*Ñ*¨NÔ;Ø—K‘K—O‘O D§I¡I¨e´SÐ9IÓ5JÐTV IÓ$WÓXˆ	Ø�‰˜	Ÿ™Õ%r;   c                 ó  — dD ]o  }| j                  |¬«      5  | j                  t        «      5  | j                  j	                  t        |dt        t        «      d«      «       d d d «       d d d «       Œq y # 1 sw Y   ŒxY w# 1 sw Y   ŒˆxY w)N))r±   r²   r½   )z/bin/shr   Útrue)r¸   rA   r@   )rz   r{   r   r7   rY   r   rJ   rK   )r9   r¸   s     r+   Ú test_guard_refuses_real_binariesz6SubprocessRunnerTests.test_guard_refuses_real_binariesè   s†   € àPò 	HˆDØ—‘ 4�Ó(ñ H¨$×*;Ñ*;Ô<PÓ*Qñ HØ—‘—‘¤¨¨d´D¼³NÀAÓ FÔG÷H÷ Hð Hñ	H÷Hð Hú÷ Hð Hús"   ˜B®5A6Á#BÁ6A?Á;BÂB	c                 óæ   — dd l }ddlm} dD ]J  }| j                  |¬«      5  | j	                  |«      5  |j                  |dg«       d d d «       d d d «       ŒL y # 1 sw Y   ŒxY w# 1 sw Y   ŒcxY w)Nr   )ÚModelCliGuardError)z/nonexistent/codexz/nonexistent/claudez#/nonexistent/@openai/codex/bin/x.js)Úprogramz	--version)Ú
subprocessÚtestsr  rz   r{   ÚPopen)r9   r  r  r  s       r+   Ú!test_process_wide_model_cli_guardz7SubprocessRunnerTests.test_process_wide_model_cli_guardî   su   € ÛÝ,àkò 	9ˆGØ—‘ g�Ó.ñ 9°×0AÑ0AÐBTÓ0Uñ 9Ø× Ñ  '¨;Ð!7Ô8÷9÷ 9ð 9ñ	9÷9ð 9ú÷ 9ð 9ús"   ¢A'´AÁA'ÁA$Á A'Á'A0	c                 ód   — t        dddd¬«      }| j                  |j                  d«      d«       y )Ni   r—   é   é   )r  r  Úmax_file_bytesÚmax_open_filesr   )r   z	--as=1024z--cpu=2z	--fsize=3z
--nofile=4z--)r   rf   Úprefix)r9   Úlimitss     r+   Útest_resource_limit_prefixz0SubprocessRunnerTests.test_resource_limit_prefixö   s2   € Ü°DÀaÐXYÐjkÔlˆØ×Ñ˜Ÿ™Ð'9Ó:Øfõ	hr;   )$Ú__name__Ú
__module__Ú__qualname__r:   r?   rN   rn   r€   rŒ   r“   r™   r¡   r¦   r®   r¹   rÁ   rÎ   rÑ   rÖ   rÚ   rà   rä   rë   rõ   rû   rÿ   ÚunittestÚ
skipUnlessrV   Úpathré   r	  r  r  r  r   rB   r;   r+   r.   r.   +   s  „ ò9òð *+°ÈDÐX\Ðdfô *ò>ò*	jò7òlòUò7òAò
Nòoò"nò+ò)òEò
Dò
Pò
Eò+òJòuò
<ð €X×Ñ˜Ÿ™Ÿ™Ð(:Ó;¸_ÓMñ8ó Nð8ð €X×Ñ˜Ÿ™Ÿ™Ð(:Ó;¸_ÓMñ&ó Nð&òHò9óhr;   r.   Ú__main__)*Ú__doc__rñ   r^   rV   rT   r�   r1   r‡   r$  Úpathlibr   Úaria_router.codex_adapterr   r   r   Úaria_router.configr   r   Úaria_router.hardened_codexr	   Úaria_router.runnerr
   r   r   r   r   r   Útests.helpersr   r   r   r   r   rK   r¶   rª   Úboolr,   ÚTestCaser.   r!  ÚmainrB   r;   r+   ú<module>r2     s›   ðÙ RÛ Û Û 	Û Û Û Û Û Ý ç gÑ gß GÝ 4÷÷ ÷õ ð $¨YÑ7€ðÐ ð�cð ˜dó ôNh˜H×-Ñ-ô Nhðb ˆzÒØ€H‡M�M…Oð r;   