Ë
   :º‚l•!Oã                   óò  — d Z ddlZddlmc mZ ddlZddlZddl	m
Z
mZmZ ddlmZmZmZ ddlmZmZmZmZmZmZmZmZ ej4                  defd„«       Zej4                  defd„«       Zej4                  defd	„«       Zej4                  defd
„«       Z G d„ d«      Z G d„ d«      Z  G d„ d«      Z! G d„ d«      Z" G d„ d«      Z# G d„ d«      Z$ G d„ d«      Z% G d„ d«      Z& G d„ d«      Z' G d„ d«      Z(y)u:   Tests for PolicyEngine â€” Default Deny policy evaluation.é    N)ÚAuditEventTypeÚAuditLogÚ
AuditQuery)ÚAgentIdentityÚPermissionScopeÚ
TrustLevel)ÚMAX_CONDITION_LENGTHÚMAX_CONDITION_NODESÚPolicyConditionErrorÚPolicyContextÚPolicyDecisionÚPolicyEngineÚ
PolicyModeÚ
PolicyRuleÚreturnc                  óx   — t        ddt        j                  t        j                  t        j
                  h¬«      S )Nzagent-1Úcoder)Úagent_idÚroleÚtrust_levelÚscopes)r   r   ÚTRUSTEDr   Ú	READ_FILEÚSHELL© ó    ú</home/oem/CyberBrain26-unified/tests/test_security_policy.pyÚtrusted_agentr      s2   € äØØÜ×&Ñ&Ü×)Ñ)¬?×+@Ñ+@ÐAô	ð r   c                  ó:   — t        ddt        j                  ¬«      S )Nzagent-2r   )r   r   r   )r   r   Ú	UNTRUSTEDr   r   r   Úuntrusted_agentr!   #   s   € äØØÜ×(Ñ(ôð r   c                  ó6   — t        t        j                  ¬«      S )N©Úmode)r   r   ÚSAFEr   r   r   Úenginer&   ,   s   € äœZŸ_™_Ô-Ð-r   c                  ó   — t        «       S ©N)r   r   r   r   Ú	audit_logr)   1   s
   € ä‹:Ðr   c                   ó,   — e Zd Zdd„Zdd„Zdeddfd„Zy)ÚTestPolicyEngineInitr   Nc                 óV  — t        «       }|j                  }t        j                  }||k(  }|söt	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}}y )N©ú==©zF%(py2)s
{%(py2)s = %(py0)s.mode
} == %(py6)s
{%(py6)s = %(py4)s.SAFE
}r&   r   ©Úpy0Úpy2Úpy4Úpy6úassert %(py8)sÚpy8)r   r$   r   r%   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation©Úselfr&   Ú@py_assert1Ú@py_assert5Ú@py_assert3Ú@py_format7Ú@py_format9s          r   Útest_default_mode_is_safez.TestPolicyEngineInit.test_default_mode_is_safe7   s™   € Ü“ˆØ�{‰{Ð-œjŸo™oÐ-ˆ{˜oÑ-×-×-Õ-ˆ{˜o×-×-×-×-×-Ñ-ˆv×-×-Ó-ˆv×-×-Ô-ˆ{×-×-×-×-×-Ð-œj×-×-Ó-œj×-×-Ô-˜o×-×-×-×-×-×-Ô-r   c                 óv  — t        t        j                  ¬«      }|j                  }t        j                  }||k(  }|söt	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}}y )	Nr#   r-   ©zF%(py2)s
{%(py2)s = %(py0)s.mode
} == %(py6)s
{%(py6)s = %(py4)s.FULL
}r&   r   r0   r5   r6   )r   r   ÚFULLr$   r7   r8   r9   r:   r;   r<   r=   r>   r?   s          r   Útest_custom_modez%TestPolicyEngineInit.test_custom_mode;   s    € Ü¤:§?¡?Ô3ˆØ�{‰{Ð-œjŸo™oÐ-ˆ{˜oÑ-×-×-Õ-ˆ{˜o×-×-×-×-×-Ñ-ˆv×-×-Ó-ˆv×-×-Ô-ˆ{×-×-×-×-×-Ð-œj×-×-Ó-œj×-×-Ô-˜o×-×-×-×-×-×-Ô-r   r&   c                 ó¢  — |j                  «       }t        |«      }d}||k\  }|söt        j                  d|fd||f«      dt	        j
                  «       v st        j                  t        «      rt        j                  t        «      nddt	        j
                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}d	„ |D «       }t        |«      }	|	s•d
dt	        j
                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      t        j                  |	«      dœz  }
t        t        j                  |
«      «      ‚d x}}	y )Né   )ú>=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sÚlenÚrules©r1   Úpy1Úpy3r4   r5   r6   c              3   ó:   K  — | ]  }|j                   d k(  –— Œ y­w)Údefault_denyN)Úname)Ú.0Úrs     r   ú	<genexpr>zATestPolicyEngineInit.test_default_rules_loaded.<locals>.<genexpr>B   s   è ø€ Ò;°�1—6‘6˜^Õ+Ñ;ùs   ‚z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úany©r1   r2   r3   )Ú
list_rulesrN   r7   r8   r9   r:   r;   r<   r=   r>   rY   )r@   r&   rO   Ú@py_assert2rB   Ú@py_assert4rD   rE   rA   rC   Ú@py_format5s              r   Útest_default_rules_loadedz.TestPolicyEngineInit.test_default_rules_loaded?   sú   € Ø×!Ñ!Ó#ˆÜ�5‹zÐ˜QÐˆz˜Q‰××Õˆz˜Q×××××ÑŒs××ÓŒs×××××Ò�5××Ó�5××Ôˆz××Ò˜Q××××××ÓÙ;°UÔ;Ð;ŒsÐ;Ó;Ð;Ñ;×;×;×;×;Õ;Œs×;×;Ó;Œs×;×;Ô;Ð;×;×;Ò;Ð;×;×;×;×;×;Ó;r   ©r   N)Ú__name__Ú
__module__Ú__qualname__rF   rJ   r   r_   r   r   r   r+   r+   6   s   „ ó.ó.ð<°ð <Àô <r   r+   c            	       ón  — e Zd Zdededdfd„Zej                  j                  dg d¢«      dedede	ddfd„«       Z
ej                  j                  d	 ee«      «      ded	eddfd
„«       Zej                  j                  dg d¢«      dedede	ddfd„«       Zdededdfd„Zdededdfd„Zdededdfd„Zy)ÚTestDefaultDenyr&   r   r   Nc                 óö  — |j                  |d«      }|j                  }t        j                  }||k(  }|söt	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}}|j                  }d	}	||	k(  }|s­t	        j
                  d|fd
||	f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      t	        j                  |	«      dœz  }
dd|
iz  }t        t	        j                  |«      «      ‚d x}x}}	y )NÚunknown_actionr-   ©zJ%(py2)s
{%(py2)s = %(py0)s.decision
} == %(py6)s
{%(py6)s = %(py4)s.DENY
}Úresultr   r0   r5   r6   Úunregistered_action©z,%(py2)s
{%(py2)s = %(py0)s.rule
} == %(py5)s©r1   r2   Úpy5úassert %(py7)sÚpy7©ÚevaluateÚdecisionr   ÚDENYr7   r8   r9   r:   r;   r<   r=   r>   Úrule©r@   r&   r   ri   rA   rB   rC   rD   rE   r]   Ú@py_format6Ú@py_format8s               r   Ú"test_unknown_action_denied_in_safez2TestDefaultDeny.test_unknown_action_denied_in_safeF   s  € ð —‘ Ð0@ÓAˆØ�‰Ð5¤.×"5Ñ"5Ð5ˆÐ"5Ñ5×5×5Õ5ˆÐ"5×5×5×5×5×5Ñ5ˆv×5×5Ó5ˆv×5×5Ô5ˆ×5×5×5×5×5Ð5¤.×5×5Ó5¤.×5×5Ô5Ð"5×5×5×5×5×5×5Ó5Ø�{‰{Ð3Ð3Ð3ˆ{Ð3Ñ3×3×3Õ3ˆ{Ð3×3×3×3×3×3Ñ3ˆv×3×3Ó3ˆv×3×3Ô3ˆ{×3×3Ò3Ð3×3×3×3×3×3×3Ô3r   Úvariant)z unknown_action ÚUNKNOWN_ACTIONz
unknown_actionc                 óö  — |j                  ||«      }|j                  }t        j                  }||k(  }|söt	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |«      dœz  }dd|iz  }	t        t	        j                  |	«      «      ‚d x}x}}|j                  }d}
||
k(  }|s­t	        j
                  d|fd	||
f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      t	        j                  |
«      d
œz  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}}
y )Nr-   rh   ri   r   r0   r5   r6   rj   rk   rl   rn   ro   rp   )r@   r&   r   ry   ri   rA   rB   rC   rD   rE   r]   rv   rw   s                r   Ú'test_unknown_action_variants_are_deniedz7TestDefaultDeny.test_unknown_action_variants_are_deniedP   s  € ð —‘ °Ó8ˆØ�‰Ð5¤.×"5Ñ"5Ð5ˆÐ"5Ñ5×5×5Õ5ˆÐ"5×5×5×5×5×5Ñ5ˆv×5×5Ó5ˆv×5×5Ô5ˆ×5×5×5×5×5Ð5¤.×5×5Ó5¤.×5×5Ô5Ð"5×5×5×5×5×5×5Ó5Ø�{‰{Ð3Ð3Ð3ˆ{Ð3Ñ3×3×3Õ3ˆ{Ð3×3×3×3×3×3Ñ3ˆv×3×3Ó3ˆv×3×3Ô3ˆ{×3×3Ò3Ð3×3×3×3×3×3×3Ô3r   r$   c                 ó  — t        |¬«      }|j                  |d«      }|j                  }t        j                  }||k(  }|söt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      dœz  }dd	|iz  }	t        t        j                  |	«      «      ‚d x}x}}|j                  }d
}
||
k(  }|s­t        j                  d|fd||
f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |
«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}
y )Nr#   rg   r-   rh   ri   r   r0   r5   r6   rj   rk   rl   rn   ro   )r   rq   rr   r   rs   r7   r8   r9   r:   r;   r<   r=   r>   rt   )r@   r   r$   r&   ri   rA   rB   rC   rD   rE   r]   rv   rw   s                r   Ú(test_unknown_action_denied_in_every_modez8TestDefaultDeny.test_unknown_action_denied_in_every_mode]   s%  € ô  4Ô(ˆØ—‘ Ð0@ÓAˆØ�‰Ð5¤.×"5Ñ"5Ð5ˆÐ"5Ñ5×5×5Õ5ˆÐ"5×5×5×5×5×5Ñ5ˆv×5×5Ó5ˆv×5×5Ô5ˆ×5×5×5×5×5Ð5¤.×5×5Ó5¤.×5×5Ô5Ð"5×5×5×5×5×5×5Ó5Ø�{‰{Ð3Ð3Ð3ˆ{Ð3Ñ3×3×3Õ3ˆ{Ð3×3×3×3×3×3Ñ3ˆv×3×3Ó3ˆv×3×3Ô3ˆ{×3×3Ò3Ð3×3×3×3×3×3×3Ô3r   )z read_file r   z

read_filec                 óf  — |j                  ||«      }|j                  }t        j                  }||k(  }|söt	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |«      dœz  }dd|iz  }	t        t	        j                  |	«      «      ‚d x}x}}y )Nr-   ©zK%(py2)s
{%(py2)s = %(py0)s.decision
} == %(py6)s
{%(py6)s = %(py4)s.ALLOW
}ri   r   r0   r5   r6   ©rq   rr   r   ÚALLOWr7   r8   r9   r:   r;   r<   r=   r>   )
r@   r&   r   ry   ri   rA   rB   rC   rD   rE   s
             r   Ú1test_registered_action_variants_reach_one_verdictzATestDefaultDeny.test_registered_action_variants_reach_one_verdicth   s©   € ð —‘ °Ó8ˆØ�‰Ð6¤.×"6Ñ"6Ð6ˆÐ"6Ñ6×6×6Õ6ˆÐ"6×6×6×6×6×6Ñ6ˆv×6×6Ó6ˆv×6×6Ô6ˆ×6×6×6×6×6Ð6¤.×6×6Ó6¤.×6×6Ô6Ð"6×6×6×6×6×6×6Ô6r   c                 óf  — |j                  |d«      }|j                  }t        j                  }||k(  }|söt	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}}y )	Nz DELETE_FILE r-   ©zV%(py2)s
{%(py2)s = %(py0)s.decision
} == %(py6)s
{%(py6)s = %(py4)s.REQUIRE_APPROVAL
}ri   r   r0   r5   r6   )rq   rr   r   ÚREQUIRE_APPROVALr7   r8   r9   r:   r;   r<   r=   r>   ©	r@   r&   r   ri   rA   rB   rC   rD   rE   s	            r   Ú5test_sensitive_action_variant_still_requires_approvalzETestDefaultDeny.test_sensitive_action_variant_still_requires_approvalu   s©   € ð
 —‘ °Ó@ˆØ�‰ÐA¤.×"AÑ"AÐAˆÐ"AÑA×A×AÕAˆÐ"A×A×A×A×A×AÑAˆv×A×AÓAˆv×A×AÔAˆ×A×A×A×A×AÐA¤.×A×AÓA¤.×A×AÔAÐ"A×A×A×A×A×A×AÔAr   c                 óô  — |j                  |d«      }|j                  }t        j                  }||k(  }|söt	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}}|j                  }d	}	||	u }|s­t	        j
                  d
|fd||	f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      t	        j                  |	«      dœz  }
dd|
iz  }t        t	        j                  |«      «      ‚d x}x}}	y )NÚdelete_filer-   r…   ri   r   r0   r5   r6   T©Úis)z9%(py2)s
{%(py2)s = %(py0)s.requires_approval
} is %(py5)srl   rn   ro   )rq   rr   r   r†   r7   r8   r9   r:   r;   r<   r=   r>   Úrequires_approvalru   s               r   Ú/test_sensitive_action_requires_approval_in_safez?TestDefaultDeny.test_sensitive_action_requires_approval_in_safe}   s  € ð —‘ °Ó>ˆØ�‰ÐA¤.×"AÑ"AÐAˆÐ"AÑA×A×AÕAˆÐ"A×A×A×A×A×AÑAˆv×A×AÓAˆv×A×AÔAˆ×A×A×A×A×AÐA¤.×A×AÓA¤.×A×AÔAÐ"A×A×A×A×A×A×AÓAØ×'Ñ'Ð/¨4Ð/Ð'¨4Ð/×/×/Õ/Ð'¨4×/×/×/×/×/Ñ/ˆv×/×/Ó/ˆv×/×/Ô/Ð'×/×/Ò/¨4×/×/×/×/×/×/Ô/r   c                 óf  — |j                  |d«      }|j                  }t        j                  }||k(  }|söt	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}}y )	NÚ	read_filer-   r€   ri   r   r0   r5   r6   r�   r‡   s	            r   Ú!test_non_sensitive_action_allowedz1TestDefaultDeny.test_non_sensitive_action_allowed„   s©   € ð —‘ °Ó<ˆØ�‰Ð6¤.×"6Ñ"6Ð6ˆÐ"6Ñ6×6×6Õ6ˆÐ"6×6×6×6×6×6Ñ6ˆv×6×6Ó6ˆv×6×6Ô6ˆ×6×6×6×6×6Ð6¤.×6×6Ó6¤.×6×6Ô6Ð"6×6×6×6×6×6×6Ô6r   )ra   rb   rc   r   r   rx   ÚpytestÚmarkÚparametrizeÚstrr|   Úlistr   r~   rƒ   rˆ   rŽ   r‘   r   r   r   re   re   E   sZ  „ ð4Ø"ð4Ø3@ð4à	ó4ð ‡[�[×ÑØÒMóð4àð4ð %ð4ð ð	4ð
 
ò4óð4ð ‡[�[×Ñ˜V¡T¨*Ó%5Ó6ð4Ø*ð4Ø2<ð4à	ò4ó 7ð4ð ‡[�[×ÑØÒ>óð7àð7ð %ð7ð ð	7ð
 
ò7óð7ðBØ"ðBØ3@ðBà	óBð0Ø"ð0Ø3@ð0à	ó0ð7Ø"ð7Ø3@ð7à	ô7r   re   c                   ó4   — e Zd Zdededdfd„Zdededdfd„Zy)ÚTestUntrustedAgentsr&   r!   r   Nc                 óô  — |j                  |d«      }|j                  }t        j                  }||k(  }|söt	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}}d	}	|j                  }
|	|
v }|s­t	        j
                  d
|fd|	|
f«      t	        j                  |	«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |
«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}	x}}
y )Nr�   r-   rh   ri   r   r0   r5   r6   r    ©Úin)z.%(py1)s in %(py5)s
{%(py5)s = %(py3)s.reason
})rQ   rR   rm   rn   ro   )rq   rr   r   rs   r7   r8   r9   r:   r;   r<   r=   r>   Úreason)r@   r&   r!   ri   rA   rB   rC   rD   rE   Ú@py_assert0r]   r\   rv   rw   s                 r   Útest_untrusted_always_deniedz0TestUntrustedAgents.test_untrusted_always_denied�   s  € ð —‘ °+Ó>ˆØ�‰Ð5¤.×"5Ñ"5Ð5ˆÐ"5Ñ5×5×5Õ5ˆÐ"5×5×5×5×5×5Ñ5ˆv×5×5Ó5ˆv×5×5Ô5ˆ×5×5×5×5×5Ð5¤.×5×5Ó5¤.×5×5Ô5Ð"5×5×5×5×5×5×5Ó5ØÐ+˜fŸm™mÐ+ˆ{˜mÐ+×+×+Õ+ˆ{˜m×+×+Ó+ˆ{×+×+×+×+×+Ð+˜f×+×+Ó+˜f×+×+Ô+˜m×+×+×+×+×+×+Ô+r   c                 óf  — |j                  |d«      }|j                  }t        j                  }||k(  }|söt	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}}y )	NrŠ   r-   rh   ri   r   r0   r5   r6   )rq   rr   r   rs   r7   r8   r9   r:   r;   r<   r=   r>   )	r@   r&   r!   ri   rA   rB   rC   rD   rE   s	            r   Ú#test_untrusted_denied_for_sensitivez7TestUntrustedAgents.test_untrusted_denied_for_sensitive”   s©   € ð —‘ °-Ó@ˆØ�‰Ð5¤.×"5Ñ"5Ð5ˆÐ"5Ñ5×5×5Õ5ˆÐ"5×5×5×5×5×5Ñ5ˆv×5×5Ó5ˆv×5×5Ô5ˆ×5×5×5×5×5Ð5¤.×5×5Ó5¤.×5×5Ô5Ð"5×5×5×5×5×5×5Ô5r   )ra   rb   rc   r   r   rž   r    r   r   r   r˜   r˜   Œ   s<   „ ð,Ø"ð,Ø5Bð,à	ó,ð6Ø"ð6Ø5Bð6à	ô6r   r˜   c                   óX   — e Zd Zdededdfd„Zdededdfd„Zdeddfd„Zdededdfd„Zy)	ÚTestCustomRulesr&   r   r   Nc                 óL  — |j                  t        ddt        j                  ¬«      «       |j	                  |d«      }|j
                  }t        j                  }||k(  }|söt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      dœz  }d	d
|iz  }t        t        j                  |«      «      ‚d x}x}}|j                  }d}	||	k(  }|s­t        j                  d|fd||	f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |	«      dœz  }
dd|
iz  }t        t        j                  |«      «      ‚d x}x}}	y )NÚallow_deleterŠ   ©rU   Úaction_patternrr   r-   r€   ri   r   r0   r5   r6   rk   rl   rn   ro   )Úadd_ruler   r   r‚   rq   rr   r7   r8   r9   r:   r;   r<   r=   r>   rt   ru   s               r   Útest_add_rule_allows_actionz+TestCustomRules.test_add_rule_allows_actionœ   s;  € ð 	�‰ÜØ#Ø,Ü'×-Ñ-ôô	
ð —‘ °Ó>ˆØ�‰Ð6¤.×"6Ñ"6Ð6ˆÐ"6Ñ6×6×6Õ6ˆÐ"6×6×6×6×6×6Ñ6ˆv×6×6Ó6ˆv×6×6Ô6ˆ×6×6×6×6×6Ð6¤.×6×6Ó6¤.×6×6Ô6Ð"6×6×6×6×6×6×6Ó6Ø�{‰{Ð,˜nÐ,ˆ{˜nÑ,×,×,Õ,ˆ{˜n×,×,×,×,×,Ñ,ˆv×,×,Ó,ˆv×,×,Ô,ˆ{×,×,Ò,˜n×,×,×,×,×,×,Ô,r   c                 ó¼  — |j                  t        ddt        j                  ¬«      «       |j	                  |d«      }|j
                  }t        j                  }||k(  }|söt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      dœz  }d	d
|iz  }t        t        j                  |«      «      ‚d x}x}}y )NÚ	deny_readr�   r¥   r-   rh   ri   r   r0   r5   r6   )r§   r   r   rs   rq   rr   r7   r8   r9   r:   r;   r<   r=   r>   r‡   s	            r   Útest_add_rule_deny_overridesz,TestCustomRules.test_add_rule_deny_overridesª   sÎ   € ð 	�‰ÜØ Ø*Ü'×,Ñ,ôô	
ð —‘ °Ó<ˆØ�‰Ð5¤.×"5Ñ"5Ð5ˆÐ"5Ñ5×5×5Õ5ˆÐ"5×5×5×5×5×5Ñ5ˆv×5×5Ó5ˆv×5×5Ô5ˆ×5×5×5×5×5Ð5¤.×5×5Ó5¤.×5×5Ô5Ð"5×5×5×5×5×5×5Ô5r   c                 óN  — |j                  t        ddt        j                  ¬«      «       |j                  }d} ||«      }d}||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }d	d
|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}|j                  }d} ||«      }d}||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }d	d
|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )NÚ	temp_ruleÚ*r¥   Tr‹   )zQ%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.remove_rule
}(%(py4)s)
} is %(py9)sr&   ©r1   r2   r3   r4   Úpy9úassert %(py11)sÚpy11F)r§   r   r   rs   Úremove_ruler7   r8   r9   r:   r;   r<   r=   r>   ©	r@   r&   rA   rC   rB   Ú@py_assert8Ú@py_assert7Ú@py_format10Ú@py_format12s	            r   Útest_remove_rulez TestCustomRules.test_remove_rule·   s\  € Ø�‰ÜØ Ø"Ü'×,Ñ,ôô	
ð ×!Ñ!Ð6 +Ð6Ñ! +Ó.Ð6°$Ð6Ð.°$Ð6×6×6Õ6Ð.°$×6×6×6×6×6Ñ6ˆv×6×6Ó6ˆv×6×6Ô6Ð!×6×6Ò6 +×6×6Ò6Ð.×6×6Ò6°$×6×6×6×6×6×6×6Ø×!Ñ!Ð7 +Ð7Ñ! +Ó.Ð7°%Ð7Ð.°%Ð7×7×7Õ7Ð.°%×7×7×7×7×7Ñ7ˆv×7×7Ó7ˆv×7×7Ô7Ð!×7×7Ò7 +×7×7Ò7Ð.×7×7Ò7°%×7×7×7×7×7×7×7Ð7r   c                 ó>  — |j                  t        ddt        j                  ¬«      «       |j	                  |d«      }|j
                  }t        j                  }||k(  }|söt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      d	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}x}}|j                  }d}	||	k(  }|s­t        j                  d|fd||	f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |	«      dœz  }
dd|
iz  }t        t        j                  |«      «      ‚d x}x}}	|j	                  |d«      }|j
                  }t        j                  }||k(  }|söt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      d	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}x}}|j                  }d}	||	k(  }|s­t        j                  d|fd||	f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |	«      dœz  }
dd|
iz  }t        t        j                  |«      «      ‚d x}x}}	y )NÚ	allow_allr®   r¥   r�   r-   r€   ri   r   r0   r5   r6   rk   rl   rn   ro   Úanythingrh   Úunregisteredrj   )r§   r   r   r‚   rq   rr   r7   r8   r9   r:   r;   r<   r=   r>   rt   rs   )r@   r&   r   ri   rA   rB   rC   rD   rE   r]   rv   rw   r½   s                r   Útest_wildcard_patternz%TestCustomRules.test_wildcard_patternÂ   sY  € Ø�‰ÜØ Ø"Ü'×-Ñ-ôô	
ð —‘ °Ó<ˆØ�‰Ð6¤.×"6Ñ"6Ð6ˆÐ"6Ñ6×6×6Õ6ˆÐ"6×6×6×6×6×6Ñ6ˆv×6×6Ó6ˆv×6×6Ô6ˆ×6×6×6×6×6Ð6¤.×6×6Ó6¤.×6×6Ô6Ð"6×6×6×6×6×6×6Ó6Ø�{‰{Ð)˜kÐ)ˆ{˜kÑ)×)×)Õ)ˆ{˜k×)×)×)×)×)Ñ)ˆv×)×)Ó)ˆv×)×)Ô)ˆ{×)×)Ò)˜k×)×)×)×)×)×)Ó)à—‘ }°jÓAˆØ×$Ñ$Ð;¬×(;Ñ(;Ð;Ð$Ð(;Ñ;×;×;Õ;Ð$Ð(;×;×;×;×;×;Ñ;ˆ|×;×;Ó;ˆ|×;×;Ô;Ð$×;×;×;×;×;Ð;¬×;×;Ó;¬×;×;Ô;Ð(;×;×;×;×;×;×;Ó;Ø× Ñ Ð9Ð$9Ð9Ð Ð$9Ñ9×9×9Õ9Ð Ð$9×9×9×9×9×9Ñ9ˆ|×9×9Ó9ˆ|×9×9Ô9Ð ×9×9Ò9Ð$9×9×9×9×9×9×9Ô9r   )	ra   rb   rc   r   r   r¨   r«   r¹   r¾   r   r   r   r¢   r¢   ›   sj   „ ð-Ø"ð-Ø3@ð-à	ó-ð6Ø"ð6Ø3@ð6à	ó6ð	8 |ð 	8¸ó 	8ð:¨Lð :Èð :Ð[_ô :r   r¢   c                   ó   — e Zd Zdd„Zdd„Zy)ÚTestPolicyContextNc                 ó  — t        d¬«      }|j                  }d}||k(  }|s­t        j                  d|fd||f«      dt	        j
                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}|j                  }d }||u }|s­t        j                  d	|fd
||f«      dt	        j
                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}|j                  }d}||k(  }|s­t        j                  d|fd||f«      dt	        j
                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}|j                  }t        j                  }||k(  }|söt        j                  d|fd||f«      dt	        j
                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt	        j
                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      dœz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}}y )Nr�   ©Úactionr-   )z.%(py2)s
{%(py2)s = %(py0)s.action
} == %(py5)sÚctxrl   rn   ro   r‹   )z0%(py2)s
{%(py2)s = %(py0)s.resource
} is %(py5)sç        ©z2%(py2)s
{%(py2)s = %(py0)s.risk_score
} == %(py5)sr/   r   r0   r5   r6   )r   rÃ   r7   r8   r9   r:   r;   r<   r=   r>   ÚresourceÚ
risk_scorer$   r   r%   ©
r@   rÄ   rA   r]   rC   rv   rw   rB   rD   rE   s
             r   Útest_default_contextz&TestPolicyContext.test_default_contextÕ   sã  € Ü ;Ô/ˆØ�z‰zÐ(˜[Ð(ˆz˜[Ñ(×(×(Õ(ˆz˜[×(×(×(×(×(Ñ(ˆs×(×(Ó(ˆs×(×(Ô(ˆz×(×(Ò(˜[×(×(×(×(×(×(Ó(Ø�|‰|Ð#˜tÐ#ˆ|˜tÐ#×#×#Õ#ˆ|˜t×#×#×#×#×#Ñ#ˆs×#×#Ó#ˆs×#×#Ô#ˆ|×#×#Ò#˜t×#×#×#×#×#×#Ó#Ø�~‰~Ð$ Ð$ˆ~ Ñ$×$×$Õ$ˆ~ ×$×$×$×$×$Ñ$ˆs×$×$Ó$ˆs×$×$Ô$ˆ~×$×$Ò$ ×$×$×$×$×$×$Ó$Ø�x‰xÐ*œ:Ÿ?™?Ð*ˆx˜?Ñ*×*×*Õ*ˆx˜?×*×*×*×*×*Ñ*ˆs×*×*Ó*ˆs×*×*Ô*ˆx×*×*×*×*×*Ð*œ:×*×*Ó*œ:×*×*Ô*˜?×*×*×*×*×*×*Ô*r   c                 óœ  — t        dddt        j                  ¬«      }|j                  }d}||k(  }|s­t	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      t	        j                  |«      dœz  }d	d
|iz  }t        t	        j                  |«      «      ‚d x}x}}|j                  }d}||k(  }|s­t	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      t	        j                  |«      dœz  }d	d
|iz  }t        t	        j                  |«      «      ‚d x}x}}|j                  }t        j                  }||k(  }|söt	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |«      dœz  }dd|iz  }	t        t	        j                  |	«      «      ‚d x}x}}y )NrŠ   z/etc/passwdgš™™™™™é?)rÃ   rÇ   rÈ   r$   r-   )z0%(py2)s
{%(py2)s = %(py0)s.resource
} == %(py5)srÄ   rl   rn   ro   rÆ   rH   r   r0   r5   r6   )r   r   rI   rÇ   r7   r8   r9   r:   r;   r<   r=   r>   rÈ   r$   rÉ   s
             r   Útest_custom_contextz%TestPolicyContext.test_custom_contextÜ   sˆ  € ÜØ Ø"ØÜ—‘ô	
ˆð �|‰|Ð,˜}Ð,ˆ|˜}Ñ,×,×,Õ,ˆ|˜}×,×,×,×,×,Ñ,ˆs×,×,Ó,ˆs×,×,Ô,ˆ|×,×,Ò,˜}×,×,×,×,×,×,Ó,Ø�~‰~Ð$ Ð$ˆ~ Ñ$×$×$Õ$ˆ~ ×$×$×$×$×$Ñ$ˆs×$×$Ó$ˆs×$×$Ô$ˆ~×$×$Ò$ ×$×$×$×$×$×$Ó$Ø�x‰xÐ*œ:Ÿ?™?Ð*ˆx˜?Ñ*×*×*Õ*ˆx˜?×*×*×*×*×*Ñ*ˆs×*×*Ó*ˆs×*×*Ô*ˆx×*×*×*×*×*Ð*œ:×*×*Ó*œ:×*×*Ô*˜?×*×*×*×*×*×*Ô*r   r`   )ra   rb   rc   rÊ   rÌ   r   r   r   rÀ   rÀ   Ô   s   „ ó+ô	+r   rÀ   c                   ól   — e Zd Zdeddfd„Zdeddfd„Zdeddfd„Zdeddfd„Zdeddfd„Zdeddfd	„Z	y)
ÚTestSensitiveActionsr&   r   Nc                 óþ  — |j                   }d} ||«      }d}||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j
                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )	NrŠ   Tr‹   ©zR%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.is_sensitive
}(%(py4)s)
} is %(py9)sr&   r¯   r±   r²   ©	Úis_sensitiver7   r8   r9   r:   r;   r<   r=   r>   r´   s	            r   Útest_is_sensitive_deletez-TestSensitiveActions.test_is_sensitive_deleteé   sž   € Ø×"Ñ"Ð9 =Ð9Ñ" =Ó1Ð9°TÐ9Ð1°TÐ9×9×9Õ9Ð1°T×9×9×9×9×9Ñ9ˆv×9×9Ó9ˆv×9×9Ô9Ð"×9×9Ò9 =×9×9Ò9Ð1×9×9Ò9°T×9×9×9×9×9×9×9Ð9r   c                 óþ  — |j                   }d} ||«      }d}||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j
                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )	NÚ
write_fileTr‹   rÐ   r&   r¯   r±   r²   rÑ   r´   s	            r   Útest_is_sensitive_writez,TestSensitiveActions.test_is_sensitive_writeì   sž   € Ø×"Ñ"Ð8 <Ð8Ñ" <Ó0Ð8°DÐ8Ð0°DÐ8×8×8Õ8Ð0°D×8×8×8×8×8Ñ8ˆv×8×8Ó8ˆv×8×8Ô8Ð"×8×8Ò8 <×8×8Ò8Ð0×8×8Ò8°D×8×8×8×8×8×8×8Ð8r   c                 óþ  — |j                   }d} ||«      }d}||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j
                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )	NÚexecute_shellTr‹   rÐ   r&   r¯   r±   r²   rÑ   r´   s	            r   Útest_is_sensitive_shellz,TestSensitiveActions.test_is_sensitive_shellï   sž   € Ø×"Ñ"Ð; ?Ð;Ñ" ?Ó3Ð;°tÐ;Ð3°tÐ;×;×;Õ;Ð3°t×;×;×;×;×;Ñ;ˆv×;×;Ó;ˆv×;×;Ô;Ð"×;×;Ò; ?×;×;Ò;Ð3×;×;Ò;°t×;×;×;×;×;×;×;Ð;r   c                 óþ  — |j                   }d} ||«      }d}||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j
                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )	NÚaccess_secretsTr‹   rÐ   r&   r¯   r±   r²   rÑ   r´   s	            r   Útest_is_sensitive_secretsz.TestSensitiveActions.test_is_sensitive_secretsò   s¡   € Ø×"Ñ"Ð<Ð#3Ð<Ñ"Ð#3Ó4Ð<¸Ð<Ð4¸Ð<×<×<Õ<Ð4¸×<×<×<×<×<Ñ<ˆv×<×<Ó<ˆv×<×<Ô<Ð"×<×<Ò<Ð#3×<×<Ò<Ð4×<×<Ò<¸×<×<×<×<×<×<×<Ð<r   c                 óþ  — |j                   }d} ||«      }d}||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j
                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )	Nr�   Fr‹   rÐ   r&   r¯   r±   r²   rÑ   r´   s	            r   Útest_is_not_sensitive_readz/TestSensitiveActions.test_is_not_sensitive_readõ   sž   € Ø×"Ñ"Ð8 ;Ð8Ñ" ;Ó/Ð8°5Ð8Ð/°5Ð8×8×8Õ8Ð/°5×8×8×8×8×8Ñ8ˆv×8×8Ó8ˆv×8×8Ô8Ð"×8×8Ò8 ;×8×8Ò8Ð/×8×8Ò8°5×8×8×8×8×8×8×8Ð8r   c                 óþ  — |j                   }d} ||«      }d}||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j
                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )	Nrg   Fr‹   rÐ   r&   r¯   r±   r²   rÑ   r´   s	            r   Útest_is_not_sensitive_unknownz2TestSensitiveActions.test_is_not_sensitive_unknownø   s¡   € Ø×"Ñ"Ð=Ð#3Ð=Ñ"Ð#3Ó4Ð=¸Ð=Ð4¸Ð=×=×=Õ=Ð4¸×=×=×=×=×=Ñ=ˆv×=×=Ó=ˆv×=×=Ô=Ð"×=×=Ò=Ð#3×=×=Ò=Ð4×=×=Ò=¸×=×=×=×=×=×=×=Ð=r   )
ra   rb   rc   r   rÓ   rÖ   rÙ   rÜ   rÞ   rà   r   r   r   rÎ   rÎ   è   st   „ ð:¨|ð :Àó :ð9¨lð 9¸tó 9ð<¨lð <¸tó <ð=°ð =Àó =ð9°ð 9À$ó 9ð>°Lð >ÀTô >r   rÎ   c                   ó<   — e Zd Zdeddfd„Zdeddfd„Zdeddfd„Zy)ÚTestPolicyModesr   r   Nc                 óš  — t        t        j                  ¬«      }|j                  |d«      }|j                  }t
        j                  }||k(  }|söt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  t
        «      rt        j                  t
        «      ndt        j                  |«      dœz  }dd	|iz  }t        t        j                  |«      «      ‚d x}x}}y )
Nr#   rŠ   r-   rh   ri   r   r0   r5   r6   )r   r   rI   rq   rr   r   rs   r7   r8   r9   r:   r;   r<   r=   r>   ©	r@   r   r&   ri   rA   rB   rC   rD   rE   s	            r   Ú0test_full_mode_allows_sensitive_without_approvalz@TestPolicyModes.test_full_mode_allows_sensitive_without_approvalý   s·   € ô ¤:§?¡?Ô3ˆà—‘ °Ó>ˆØ�‰Ð5¤.×"5Ñ"5Ð5ˆÐ"5Ñ5×5×5Õ5ˆÐ"5×5×5×5×5×5Ñ5ˆv×5×5Ó5ˆv×5×5Ô5ˆ×5×5×5×5×5Ð5¤.×5×5Ó5¤.×5×5Ô5Ð"5×5×5×5×5×5×5Ô5r   c                 óš  — t        t        j                  ¬«      }|j                  |d«      }|j                  }t
        j                  }||k(  }|söt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  t
        «      rt        j                  t
        «      ndt        j                  |«      dœz  }dd	|iz  }t        t        j                  |«      «      ‚d x}x}}y ©
Nr#   r�   r-   rh   ri   r   r0   r5   r6   )r   r   ÚRESEARCHrq   rr   r   rs   r7   r8   r9   r:   r;   r<   r=   r>   rä   s	            r   Útest_research_modez"TestPolicyModes.test_research_mode  s·   € Ü¤:×#6Ñ#6Ô7ˆà—‘ °Ó<ˆØ�‰Ð5¤.×"5Ñ"5Ð5ˆÐ"5Ñ5×5×5Õ5ˆÐ"5×5×5×5×5×5Ñ5ˆv×5×5Ó5ˆv×5×5Ô5ˆ×5×5×5×5×5Ð5¤.×5×5Ó5¤.×5×5Ô5Ð"5×5×5×5×5×5×5Ô5r   c                 óš  — t        t        j                  ¬«      }|j                  |d«      }|j                  }t
        j                  }||k(  }|söt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  t
        «      rt        j                  t
        «      ndt        j                  |«      dœz  }dd	|iz  }t        t        j                  |«      «      ‚d x}x}}y rç   )r   r   ÚRED_TEAM_LABrq   rr   r   rs   r7   r8   r9   r:   r;   r<   r=   r>   rä   s	            r   Útest_red_team_lab_modez&TestPolicyModes.test_red_team_lab_mode  s·   € Ü¤:×#:Ñ#:Ô;ˆà—‘ °Ó<ˆØ�‰Ð5¤.×"5Ñ"5Ð5ˆÐ"5Ñ5×5×5Õ5ˆÐ"5×5×5×5×5×5Ñ5ˆv×5×5Ó5ˆv×5×5Ô5ˆ×5×5×5×5×5Ð5¤.×5×5Ó5¤.×5×5Ô5Ð"5×5×5×5×5×5×5Ô5r   )ra   rb   rc   r   rå   ré   rì   r   r   r   râ   râ   ü   s=   „ ð6Ø*ð6à	ó6ð6°ð 6À$ó 6ð6°Mð 6Àdô 6r   râ   c                   ó4   — e Zd Zdededdfd„Zdededdfd„Zy)ÚTestPolicyEvaluationr&   r   r   Nc                 óŠ  — |j                  |d«      }|j                  }d }||u}|s­t        j                  d|fd||f«      dt	        j
                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}|j                  }|j                  }d}	||	k(  }
|
sÁt        j                  d|
fd	||	f«      dt	        j
                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |	«      d
œz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}
}	y )Nr�   )úis not)z3%(py2)s
{%(py2)s = %(py0)s.context
} is not %(py5)sri   rl   rn   ro   r-   )zK%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.context
}.action
} == %(py7)s©r1   r2   r3   ro   úassert %(py9)sr°   )rq   Úcontextr7   r8   r9   r:   r;   r<   r=   r>   rÃ   )r@   r&   r   ri   rA   r]   rC   rv   rw   Ú@py_assert6rB   r·   s               r   Útest_evaluation_has_contextz0TestPolicyEvaluation.test_evaluation_has_context  s  € Ø—‘ °Ó<ˆØ�~‰~Ð) TÐ)ˆ~ TÐ)×)×)Õ)ˆ~ T×)×)×)×)×)Ñ)ˆv×)×)Ó)ˆv×)×)Ô)ˆ~×)×)Ò) T×)×)×)×)×)×)Ó)Ø�~‰~Ð3ˆ~×$Ñ$Ð3¨Ð3Ð$¨Ñ3×3×3Õ3Ð$¨×3×3×3×3×3Ñ3ˆv×3×3Ó3ˆv×3×3Ô3ˆ~×3×3Ò3Ð$×3×3Ò3¨×3×3×3×3×3×3Ö3r   c                 ó´  — |j                  |d«      }|j                  }|syddt        j                  «       v st	        j
                  |«      rt	        j                  |«      ndt	        j                  |«      dœz  }t        t	        j                  |«      «      ‚d }g }d}|j                  }|j                  } |«       }	||	v }
|
}|
s'd}|j                  }|j                  } |«       }||v }|}|�sÐt	        j                  d|
fd||	f«      t	        j                  |«      dt        j                  «       v st	        j
                  |«      rt	        j                  |«      ndt	        j                  |«      t	        j                  |«      t	        j                  |	«      d	œz  }d
d|iz  }|j                  |«       |
sÈt	        j                  dfdf«      t	        j                  |«      dt        j                  «       v st	        j
                  |«      rt	        j                  |«      ndt	        j                  «      t	        j                  «      t	        j                  |«      dœz  }dd|iz  }|j                  |«       t	        j                  |d«      i z  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}x}x}
x}x}x}	x}x}x}x}}y )NrŠ   z*assert %(py2)s
{%(py2)s = %(py0)s.reason
}ri   )r1   r2   ÚapprovalÚ	sensitiverš   )zb%(py3)s in %(py11)s
{%(py11)s = %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s.reason
}.lower
}()
})rR   rm   ro   r°   r²   z%(py13)sÚpy13)zh%(py16)s in %(py24)s
{%(py24)s = %(py22)s
{%(py22)s = %(py20)s
{%(py20)s = %(py18)s.reason
}.lower
}()
})Úpy16Úpy18Úpy20Úpy22Úpy24z%(py26)sÚpy26rL   zassert %(py29)sÚpy29)rq   rœ   r9   r:   r7   r;   r<   r=   r>   Úlowerr8   ÚappendÚ_format_boolop)r@   r&   r   ri   rA   Ú@py_format3r\   rô   rµ   Ú@py_assert10r]   r�   Ú@py_assert15Ú@py_assert19Ú@py_assert21Ú@py_assert23Ú@py_assert17r¸   Ú@py_format14Ú@py_format25Ú@py_format27Ú@py_format28Ú@py_format30s                          r   Útest_evaluation_reasonz+TestPolicyEvaluation.test_evaluation_reason  s£  € Ø—‘ °Ó>ˆØ�}‰}Ð‰}××××Õˆv××Óˆv××Ôˆ}×××××ÐÙZˆzÐZ˜VŸ]™]ÐZ˜]×0Ñ0ÐZÑ0Ó2ÐZˆzÐ2Ð2ÔZ°kÐZÀVÇ]Á]ÐZÀ]×EXÑEXÐZÑEXÓEZÐZ°kÐEZÐ6Z×Z×Z×ZÐZˆzÐ2×Z×ZÓZˆz×Z×Z×Z×Z×ZÐZ˜V×Z×ZÓZ˜V×Z×ZÔZ˜]×Z×ZÒZÐ0×Z×ZÒZÐ2×Z×Z×Z×Z×Z×ZÕZ°kÐEZ×Z×ZÓZ°k×Z×Z×Z×Z×ZÐZÀV×Z×ZÓZÀV×Z×ZÔZÀ]×Z×ZÒZÐEX×Z×ZÒZÐEZ×Z×Z×Z×Z×Z×Z×Z×Z×Z×Z×Z×Z×Z×Z×Zr   )ra   rb   rc   r   r   rõ   r  r   r   r   rî   rî     s<   „ ð4°,ð 4È}ð 4Ðaeó 4ð
[¨\ð [È-ð [Ð\`ô [r   rî   c                   óH   — e Zd Zdededdfd„Zdededdfd„Zdededdfd„Zy)	ÚTestAuditLoggingr   r)   r   Nc                 ó  — t        t        j                  |¬«      }|j                  |d«       |j                  |d«       |j                  |d«       |j	                  t        t        j                  ¬«      «      }t        |«      }d}||k(  }|söt        j                  d|fd||f«      d	t        j                  «       v st        j                  t        «      rt        j                  t        «      nd	d
t        j                  «       v st        j                  |«      rt        j                  |«      nd
t        j                  |«      t        j                  |«      dœz  }dd|iz  }	t        t        j                   |	«      «      ‚d x}x}}y )N©r$   r)   r�   rÕ   rØ   ©Ú
event_typeé   r-   ©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)srN   Úpolicy_decisionsrP   r5   r6   )r   r   rë   rq   Úqueryr   r   ÚPOLICY_DECISIONrN   r7   r8   r9   r:   r;   r<   r=   r>   )
r@   r   r)   r&   r  r\   rB   r]   rD   rE   s
             r   Ú$test_red_team_lab_logs_all_decisionsz5TestAuditLogging.test_red_team_lab_logs_all_decisions  sí   € ô ¤:×#:Ñ#:ÀiÔPˆØ�‰˜ {Ô3Ø�‰˜ |Ô4Ø�‰˜ Ô7Ø$Ÿ?™?¬:Ä×A_ÑA_Ô+`ÓaÐÜÐ#Ó$Ð)¨Ð)Ð$¨Ñ)×)×)Õ)Ð$¨×)×)×)×)×)Ñ)Œs×)×)Ó)Œs×)×)×)×)×)Ò)Ð#×)×)Ó)Ð#×)×)Ô)Ð$×)×)Ò)¨×)×)×)×)×)×)Ô)r   r!   c                 ó  — t        t        j                  |¬«      }|j                  |d«       |j	                  t        t        j                  ¬«      «      }t        |«      }d}||k(  }|söt        j                  d|fd||f«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      d	œz  }d
d|iz  }	t        t        j                   |	«      «      ‚d x}x}}|d   }
|
j"                  }t$        j&                  }|j(                  }||k(  }|sÝt        j                  d|fd||f«      t        j                  |
«      t        j                  |«      dt        j                  «       v st        j                  t$        «      rt        j                  t$        «      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                   |«      «      ‚d x}
x}x}x}}y )Nr  r�   r  rL   r-   r  rN   r  rP   r5   r6   r   )zl%(py3)s
{%(py3)s = %(py1)s.policy_decision
} == %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s.DENY
}.value
}r   ©rQ   rR   rm   ro   r°   r±   r²   )r   r   rë   rq   r  r   r   r  rN   r7   r8   r9   r:   r;   r<   r=   r>   Úpolicy_decisionr   rs   Úvalue)r@   r!   r)   r&   r  r\   rB   r]   rD   rE   r�   rô   rµ   r·   r¸   s                  r   Ú)test_red_team_lab_logs_deny_for_untrustedz:TestAuditLogging.test_red_team_lab_logs_deny_for_untrusted)  s~  € ô ¤:×#:Ñ#:ÀiÔPˆØ�‰˜¨Ô5Ø$Ÿ?™?¬:Ä×A_ÑA_Ô+`ÓaÐÜÐ#Ó$Ð)¨Ð)Ð$¨Ñ)×)×)Õ)Ð$¨×)×)×)×)×)Ñ)Œs×)×)Ó)Œs×)×)×)×)×)Ò)Ð#×)×)Ó)Ð#×)×)Ô)Ð$×)×)Ò)¨×)×)×)×)×)×)Ó)Ø Ñ"ÐOÐ"×2Ñ2ÐO´n×6IÑ6IÐOÐ6I×6OÑ6OÐOÐ2Ð6OÑO×O×OÕOÐ2Ð6O×O×OÓOÐ"×O×OÒOÐ2×O×O×O×O×OÐO´n×O×OÓO´n×O×OÔOÐ6I×O×OÒOÐ6O×O×O×O×O×O×O×OÐOr   c                 ó*  — t        t        j                  |¬«      }|j                  |d«       |j                  |d«       |j	                  t        t        j                  ¬«      «      }t        |«      }d}||k(  }|söt        j                  d|fd||f«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndd	t        j                  «       v st        j                  |«      rt        j                  |«      nd	t        j                  |«      t        j                  |«      d
œz  }dd|iz  }	t        t        j                   |	«      «      ‚d x}x}}|d   }
|
j"                  }t$        j&                  }|j(                  }||k(  }|sÝt        j                  d|fd||f«      t        j                  |
«      t        j                  |«      dt        j                  «       v st        j                  t$        «      rt        j                  t$        «      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                   |«      «      ‚d x}
x}x}x}}y )Nr  r�   rŠ   r  rL   r-   r  rN   r  rP   r5   r6   r   )zx%(py3)s
{%(py3)s = %(py1)s.policy_decision
} == %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s.REQUIRE_APPROVAL
}.value
}r   r  r±   r²   )r   r   r%   rq   r  r   r   r  rN   r7   r8   r9   r:   r;   r<   r=   r>   r  r   r†   r   )r@   r   r)   r&   r  r\   rB   r]   rD   rE   r�   rô   rµ   r·   r¸   s                  r   Útest_safe_mode_logs_deny_onlyz.TestAuditLogging.test_safe_mode_logs_deny_only2  sŠ  € ô ¤:§?¡?¸iÔHˆØ�‰˜ {Ô3Ø�‰˜ }Ô5Ø$Ÿ?™?¬:Ä×A_ÑA_Ô+`ÓaÐÜÐ#Ó$Ð)¨Ð)Ð$¨Ñ)×)×)Õ)Ð$¨×)×)×)×)×)Ñ)Œs×)×)Ó)Œs×)×)×)×)×)Ò)Ð#×)×)Ó)Ð#×)×)Ô)Ð$×)×)Ò)¨×)×)×)×)×)×)Ó)Ø Ñ"Ð[Ð"×2Ñ2Ð[´n×6UÑ6UÐ[Ð6U×6[Ñ6[Ð[Ð2Ð6[Ñ[×[×[Õ[Ð2Ð6[×[×[Ó[Ð"×[×[Ò[Ð2×[×[×[×[×[Ð[´n×[×[Ó[´n×[×[Ô[Ð6U×[×[Ò[Ð6[×[×[×[×[×[×[×[Ð[r   )ra   rb   rc   r   r   r  r!  r#  r   r   r   r  r    sa   „ ð*Ø*ð*Ø7?ð*à	ó*ðPØ,ðPØ9AðPà	óPð\Ø*ð\Ø7?ð\à	ô\r   r  c                   ób  — e Zd ZdZej
                  dedefd„«       Zej
                  d„ «       Z	d7d„Z
d7d	„Zd7d
„Zd7d„Zd7d„Zd7d„Zd7d„Zd7d„Zd7d„Zd7d„Zd7d„Zd7d„Zd7d„Zdededdfd„Zd7d„Zd7d„Zd7d„Z	 	 d7d„Zd7d„Zd7d„Zd7d„Zd7d„Zd7d„Z d7d„Z!d7d „Z"d7d!„Z#d7d"„Z$d7d#„Z%d7d$„Z&d7d%„Z'd7d&„Z(d7d'„Z)d7d(„Z*d7d)„Z+d7d*„Z,d7d+„Z-d7d,„Z.dededdfd-„Z/dededdfd.„Z0dededdfd/„Z1dededdfd0„Z2dededdfd1„Z3dededdfd2„Z4dededdfd3„Z5dededdfd4„Z6dededdfd5„Z7dededdfd6„Z8y)8ÚTestConditionSafetyuQ   BezpeÄ�nÃ½ AST evaluÃ¡tor policy podmÃ­nek â€” pozitivnÃ­ a negativnÃ­ pÅ™Ã­pady.r&   r   c                 óx   ‡‡— ddt         j                  fdt        dt        dt        dt         dt        f
ˆˆfd„}|S )	Nr�   rÅ   Ú	conditionrÃ   rÈ   r$   r   c                 óH   •— t        |||¬«      }‰j                  | |‰|«      S )N)rÃ   rÈ   r$   )r   Ú_eval_condition)r'  rÃ   rÈ   r$   ró   r&   r   s        €€r   Ú	_evaluatez/TestConditionSafety.evaluate.<locals>._evaluateB  s*   ø€ ô $¨6¸jÈtÔTˆGØ×)Ñ)¨)°V¸]ÈGÓTÐTr   )r   r%   r•   ÚfloatÚbool)r@   r&   r   r*  s    `` r   rq   zTestConditionSafety.evaluate@  sS   ù€ ð &Ø #Ü)Ÿ™ñ		UÜð	Uäð	Uô ð	Uô ð		Uô
 ö	Uð Ðr   c                 ó0   ‡— dt         dt        dd fˆfd„}|S )Nr'  Úkwargsr   c                 ót   •— t        j                  t        «      5   ‰| fi |¤Ž d d d «       y # 1 sw Y   y xY wr(   )r’   Úraisesr   )r'  r.  rq   s     €r   Ú_rejectz4TestConditionSafety.expect_rejected.<locals>._rejectO  s2   ø€ Ü—‘Ô3Ó4ñ .Ù˜Ñ- fÒ-÷.÷ .ñ .ús   ›
.®7)r•   Úobject)r@   rq   r1  s    ` r   Úexpect_rejectedz#TestConditionSafety.expect_rejectedM  s$   ø€ ð	.œsð 	.¬fð 	.¸õ 	.ð ˆr   r   Nc                 óî  — d}d} |||¬«      }d}||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j
                  |«      ndt        j
                  |«      t        j
                  |«      t        j
                  |«      t        j
                  |«      dœz  }d	d
|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )Núis_sensitive(action)rØ   rÂ   Tr‹   ©z@%(py6)s
{%(py6)s = %(py0)s(%(py2)s, action=%(py4)s)
} is %(py9)srq   r¯   r±   r²   ©r7   r8   r9   r:   r;   r<   r=   r>   ©	r@   rq   rA   rC   rB   rµ   r¶   r·   r¸   s	            r   Útest_is_sensitive_truez*TestConditionSafety.test_is_sensitive_trueU  sš   € Ø.ÐO°ÐO‰xÐ.°ÔGÐOÈ4ÐOÐGÈ4ÐO×O×OÕOÐGÈ4×O×O×O×O×OÑOˆx×O×OÓOˆx×O×OÔOÐ.×O×OÒO°×O×OÒOÐG×O×OÒOÈ4×O×O×O×O×O×O×OÐOr   c                 óî  — d}d} |||¬«      }d}||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j
                  |«      ndt        j
                  |«      t        j
                  |«      t        j
                  |«      t        j
                  |«      dœz  }d	d
|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )Nr5  r�   rÂ   Fr‹   r6  rq   r¯   r±   r²   r7  r8  s	            r   Útest_is_sensitive_falsez+TestConditionSafety.test_is_sensitive_falseX  sš   € Ø.ÐL°{ÐL‰xÐ.°{ÔCÐLÀuÐLÐCÀuÐL×L×LÕLÐCÀu×L×L×L×L×LÑLˆx×L×LÓLˆx×L×LÔLÐ.×L×LÒL°{×L×LÒLÐC×L×LÒLÀu×L×L×L×L×L×L×LÐLr   c                 óî  — d}d} |||¬«      }d}||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j
                  |«      ndt        j
                  |«      t        j
                  |«      t        j
                  |«      t        j
                  |«      dœz  }d	d
|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )Nznot is_sensitive(action)r�   rÂ   Tr‹   r6  rq   r¯   r±   r²   r7  r8  s	            r   Útest_not_is_sensitivez)TestConditionSafety.test_not_is_sensitive[  sš   € Ø2ÐO¸;ÐO‰xÐ2¸;ÔGÐOÈ4ÐOÐGÈ4ÐO×O×OÕOÐGÈ4×O×O×O×O×OÑOˆx×O×OÓOˆx×O×OÔOÐ2×O×OÒO¸;×O×OÒOÐG×O×OÒOÈ4×O×O×O×O×O×O×OÐOr   c                 óî  — d}d} |||¬«      }d}||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j
                  |«      ndt        j
                  |«      t        j
                  |«      t        j
                  |«      t        j
                  |«      dœz  }d	d
|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )Nzaction == "execute_python"Úexecute_pythonrÂ   Tr‹   r6  rq   r¯   r±   r²   r7  r8  s	            r   Útest_equality_matchz'TestConditionSafety.test_equality_match^  s¡   € Ø4ÐVÐ=MÐV‰xÐ4Ð=MÔNÐVÐRVÐVÐNÐRVÐV×V×VÕVÐNÐRV×V×V×V×V×VÑVˆx×V×VÓVˆx×V×VÔVÐ4×V×VÒVÐ=M×V×VÒVÐN×V×VÒVÐRV×V×V×V×V×V×V×VÐVr   c                 óî  — d}d} |||¬«      }d}||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j
                  |«      ndt        j
                  |«      t        j
                  |«      t        j
                  |«      t        j
                  |«      dœz  }d	d
|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )Nzaction != "read_file"r�   rÂ   Fr‹   r6  rq   r¯   r±   r²   r7  r8  s	            r   Útest_inequality_matchz)TestConditionSafety.test_inequality_matcha  sš   € Ø/ÐM¸ÐM‰xÐ/¸ÔDÐMÈÐMÐDÈÐM×M×MÕMÐDÈ×M×M×M×M×MÑMˆx×M×MÓMˆx×M×MÔMÐ/×M×MÒM¸×M×MÒMÐD×M×MÒMÈ×M×M×M×M×M×M×MÐMr   c                 óî  — d}d} |||¬«      }d}||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j
                  |«      ndt        j
                  |«      t        j
                  |«      t        j
                  |«      t        j
                  |«      dœz  }d	d
|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )Nzrisk_score < 0.5gš™™™™™¹?©rÈ   Tr‹   ©zD%(py6)s
{%(py6)s = %(py0)s(%(py2)s, risk_score=%(py4)s)
} is %(py9)srq   r¯   r±   r²   r7  r8  s	            r   Útest_risk_score_below_thresholdz3TestConditionSafety.test_risk_score_below_thresholdd  sš   € Ø*ÐC°sÐC‰xÐ*°sÔ;ÐC¸tÐCÐ;¸tÐC×C×CÕCÐ;¸t×C×C×C×C×CÑCˆx×C×CÓCˆx×C×CÔCÐ*×C×CÒC°s×C×CÒCÐ;×C×CÒC¸t×C×C×C×C×C×C×CÐCr   c                 óî  — d}d} |||¬«      }d}||u }|sÕt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j
                  |«      ndt        j
                  |«      t        j
                  |«      t        j
                  |«      t        j
                  |«      dœz  }d	d
|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )Nzrisk_score >= 0.5gÍÌÌÌÌÌì?rD  Tr‹   rE  rq   r¯   r±   r²   r7  r8  s	            r   Útest_risk_score_above_thresholdz3TestConditionSafety.test_risk_score_above_thresholdg  sš   € Ø+ÐD¸ÐD‰xÐ+¸Ô<ÐDÀÐDÐ<ÀÐD×D×DÕDÐ<À×D×D×D×D×DÑDˆx×D×DÓDˆx×D×DÔDÐ+×D×DÒD¸×D×DÒDÐ<×D×DÒDÀ×D×D×D×D×D×D×DÐDr   c           	      óž  — d}t         j                  } |||¬«      }d}||u }|�st        j                  d|fd||f«      dt	        j
                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt	        j
                  «       v st        j                  t         «      rt        j                  t         «      ndt        j                  |«      t        j                  |«      t        j                  |«      dœz  }d	d
|iz  }t        t        j                  |«      «      ‚d x}x}x}x}}y )Nzmode == moder#   Tr‹   )zY%(py7)s
{%(py7)s = %(py0)s(%(py2)s, mode=%(py5)s
{%(py5)s = %(py3)s.FULL
})
} is %(py10)srq   r   )r1   r2   rR   rm   ro   Úpy10zassert %(py12)sÚpy12)
r   rI   r7   r8   r9   r:   r;   r<   r=   r>   )	r@   rq   rA   r]   rô   Ú@py_assert9rµ   Ú@py_format11Ú@py_format13s	            r   Útest_mode_equal_to_itselfz-TestConditionSafety.test_mode_equal_to_itselfj  s»   € Ø&ÐE¬Z¯_©_ÐE‰x˜¨_Ô=ÐEÀÐEÐ=ÀÐE×E×EÖEÐ=À×E×E×E×E×EÑEˆx×E×EÓEˆx×E×EÔE˜×E×E×E×E×EÐE¬Z×E×EÓE¬Z×E×EÔE¨_×E×EÒEÐ=×E×EÒEÀ×E×E×E×E×E×E×EÐEr   c                 óº  — d} ||«      }d}||u }|sÁt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j
                  |«      ndt        j
                  |«      t        j
                  |«      t        j
                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}}y )	NÚTrueTr‹   ©z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} is %(py7)srq   rñ   rò   r°   r7  ©r@   rq   rA   rC   rô   rB   rw   r·   s           r   Útest_true_literalz%TestConditionSafety.test_true_literalm  sƒ   € ØÐ'‰x˜ÓÐ' 4Ð'Ð 4Ð'×'×'Õ'Ð 4×'×'×'×'×'Ñ'ˆx×'×'Ó'ˆx×'×'Ô'˜×'×'Ò'Ð×'×'Ò' 4×'×'×'×'×'×'Ö'r   c                 óº  — d} ||«      }d}||u }|sÁt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j
                  |«      ndt        j
                  |«      t        j
                  |«      t        j
                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}}y )	NÚFalseFr‹   rR  rq   rñ   rò   r°   r7  rS  s           r   Útest_false_literalz&TestConditionSafety.test_false_literalp  sƒ   € ØÐ)‰x˜Ó Ð) EÐ)Ð  EÐ)×)×)Õ)Ð  E×)×)×)×)×)Ñ)ˆx×)×)Ó)ˆx×)×)Ô)˜×)×)Ò)Ð ×)×)Ò) E×)×)×)×)×)×)Ö)r   c                 ó„  — d}d} |||¬«      }d}||u }|�st        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j
                  |«      nddt        j                  «       v st        j                  |«      rt        j
                  |«      ndt        j
                  |«      t        j
                  |«      t        j
                  |«      d	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}x}x}}d} |||¬«      }d}||u }|�st        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j
                  |«      nddt        j                  «       v st        j                  |«      rt        j
                  |«      ndt        j
                  |«      t        j
                  |«      t        j
                  |«      d	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}x}x}}y )Nz-is_sensitive(action) or action == 'read_file'r�   rÂ   Tr‹   ©z@%(py5)s
{%(py5)s = %(py0)s(%(py1)s, action=%(py3)s)
} is %(py8)srq   r'  ©r1   rQ   rR   rm   r6   úassert %(py10)srJ  rÕ   r7  ©	r@   rq   r'  r\   r]   r¶   rô   rE   rM  s	            r   Útest_or_combinationz'TestConditionSafety.test_or_combinations  sK  € ØCˆ	Ø*5Ð>‰x˜	¨+Ô6Ð>¸$Ð>Ð6¸$Ð>×>×>Ö>Ð6¸$×>×>×>×>×>Ñ>ˆx×>×>Ó>ˆx×>×>×>×>×>Ò>˜	×>×>Ó>˜	×>×>Ô>¨+×>×>Ò>Ð6×>×>Ò>¸$×>×>×>×>×>×>Õ>Ø*6Ð?‰x˜	¨,Ô7Ð?¸4Ð?Ð7¸4Ð?×?×?Ö?Ð7¸4×?×?×?×?×?Ñ?ˆx×?×?Ó?ˆx×?×?×?×?×?Ò?˜	×?×?Ó?˜	×?×?Ô?¨,×?×?Ò?Ð7×?×?Ò?¸4×?×?×?×?×?×?Ö?r   c                 ó„  — d}d} |||¬«      }d}||u }|�st        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j
                  |«      nddt        j                  «       v st        j                  |«      rt        j
                  |«      ndt        j
                  |«      t        j
                  |«      t        j
                  |«      d	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}x}x}}d} |||¬«      }d}||u }|�st        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j
                  |«      nddt        j                  «       v st        j                  |«      rt        j
                  |«      ndt        j
                  |«      t        j
                  |«      t        j
                  |«      d	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}x}x}}y )Nz/is_sensitive(action) and action == 'write_file'rÕ   rÂ   Tr‹   rY  rq   r'  rZ  r[  rJ  rŠ   Fr7  r\  s	            r   Útest_and_combinationz(TestConditionSafety.test_and_combinationx  sK  € ØEˆ	Ø*6Ð?‰x˜	¨,Ô7Ð?¸4Ð?Ð7¸4Ð?×?×?Ö?Ð7¸4×?×?×?×?×?Ñ?ˆx×?×?Ó?ˆx×?×?×?×?×?Ò?˜	×?×?Ó?˜	×?×?Ô?¨,×?×?Ò?Ð7×?×?Ò?¸4×?×?×?×?×?×?Õ?Ø*7ÐA‰x˜	¨-Ô8ÐA¸EÐAÐ8¸EÐA×A×AÖAÐ8¸E×A×A×A×A×AÑAˆx×A×AÓAˆx×A×A×A×A×AÒA˜	×A×AÓA˜	×A×AÔA¨-×A×AÒAÐ8×A×AÒA¸E×A×A×A×A×A×AÖAr   c                 ó>  — dj                  dgdz  «      }t        |«      }|t        k  }|�s/t        j                  d|fd|t        f«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}}d} |||¬«      }d}||u }|�st        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      dœz  }	dd|	iz  }
t        t        j                  |
«      «      ‚d x}x}x}}d} |||¬«      }d}||u }|�st        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      t        j                  |«      dœz  }	dd|	iz  }
t        t        j                  |
«      «      ‚d x}x}x}}y )Nú or zaction == 'read_file'é   ©ú<©z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} < %(py5)srN   r'  r	   ©r1   rQ   rR   rm   rn   ro   r�   rÂ   Tr‹   rY  rq   rZ  r[  rJ  rÕ   F©ÚjoinrN   r	   r7   r8   r9   r:   r;   r<   r=   r>   )r@   rq   r'  r\   r]   rv   rw   r¶   rô   rE   rM  s              r   Útest_long_but_valid_conditionz1TestConditionSafety.test_long_but_valid_condition}  sü  € Ø—K‘KÐ!8Ð 9¸AÑ =Ó>ˆ	Ü�9‹~Ð4ˆ~Ô 4Ñ4×4×4Ö4ˆ~Ô 4×4×4×4×4×4Ñ4Œs×4×4Ó4Œs×4×4×4×4×4Ò4�9×4×4Ó4�9×4×4Ô4ˆ~×4×4×4×4×4Ð4Ô 4×4×4Ó4Ô 4×4×4×4×4×4×4Ó4Ø*5Ð>‰x˜	¨+Ô6Ð>¸$Ð>Ð6¸$Ð>×>×>Ö>Ð6¸$×>×>×>×>×>Ñ>ˆx×>×>Ó>ˆx×>×>×>×>×>Ò>˜	×>×>Ó>˜	×>×>Ô>¨+×>×>Ò>Ð6×>×>Ò>¸$×>×>×>×>×>×>Õ>Ø*6Ð@‰x˜	¨,Ô7Ð@¸5Ð@Ð7¸5Ð@×@×@Ö@Ð7¸5×@×@×@×@×@Ñ@ˆx×@×@Ó@ˆx×@×@×@×@×@Ò@˜	×@×@Ó@˜	×@×@Ô@¨,×@×@Ò@Ð7×@×@Ò@¸5×@×@×@×@×@×@Ö@r   c                 óX  — |j                  |d«      }|j                  }t        j                  }||k(  }|söt	        j
                  d|fd||f«      dt        j                  «       v st	        j                  |«      rt	        j                  |«      ndt	        j                  |«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}}|j                  |d	«      }	|	j                  }t        j                  }||k(  }|söt	        j
                  d|fd
||f«      dt        j                  «       v st	        j                  |	«      rt	        j                  |	«      ndt	        j                  |«      dt        j                  «       v st	        j                  t        «      rt	        j                  t        «      ndt	        j                  |«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}}|	j                  }d}
||
k(  }|s­t	        j
                  d|fd||
f«      dt        j                  «       v st	        j                  |	«      rt	        j                  |	«      ndt	        j                  |«      t	        j                  |
«      dœz  }dd|iz  }t        t	        j                  |«      «      ‚d x}x}}
y )Nr�   r-   r€   Úallowedr   r0   r5   r6   rØ   r…   ÚblockedÚ%safe_mode_sensitive_requires_approvalrk   rl   rn   ro   )rq   rr   r   r‚   r7   r8   r9   r:   r;   r<   r=   r>   r†   rt   )r@   r&   r   rk  rA   rB   rC   rD   rE   rl  r]   rv   rw   s                r   Ú0test_safe_mode_conditions_still_apply_end_to_endzDTestConditionSafety.test_safe_mode_conditions_still_apply_end_to_endƒ  sÉ  € ð —/‘/ -°Ó=ˆØ×ÑÐ7¤>×#7Ñ#7Ð7ÐÐ#7Ñ7×7×7Õ7ÐÐ#7×7×7×7×7×7Ñ7ˆw×7×7Ó7ˆw×7×7Ô7Ð×7×7×7×7×7Ð7¤>×7×7Ó7¤>×7×7Ô7Ð#7×7×7×7×7×7×7Ó7Ø—/‘/ -°ÓAˆØ×ÑÐB¤>×#BÑ#BÐBÐÐ#BÑB×B×BÕBÐÐ#B×B×B×B×B×BÑBˆw×B×BÓBˆw×B×BÔBÐ×B×B×B×B×BÐB¤>×B×BÓB¤>×B×BÔBÐ#B×B×B×B×B×B×BÓBØ�|‰|ÐFÐFÐFˆ|ÐFÑF×F×FÕFˆ|ÐF×F×F×F×F×FÑFˆw×F×FÓFˆw×F×FÔFˆ|×F×FÒFÐF×F×F×F×F×F×FÔFr   c                 ó   —  |d«       y )Nú__import__('os').system('id')r   ©r@   r3  s     r   Útest_import_os_system_rejectedz2TestConditionSafety.test_import_os_system_rejectedŒ  s   € ÙÐ7Õ8r   c                 ó   —  |d«       y )Nz.identity.__class__.__mro__[1].__subclasses__()r   rq  s     r   Ú!test_class_mro_traversal_rejectedz5TestConditionSafety.test_class_mro_traversal_rejected�  s   € ÙÐHÕIr   c                 ó   —  |d«       y )Nz*().__class__.__bases__[0].__subclasses__()r   rq  s     r   Ú#test_tuple_class_traversal_rejectedz7TestConditionSafety.test_tuple_class_traversal_rejected’  s   € ÙÐDÕEr   c                 ó’  — |dz  }dt        |«      ›d�} ||«       |j                  } |«       }| }|s�ddt        j                  «       v st	        j
                  |«      rt	        j                  |«      ndt	        j                  |«      t	        j                  |«      dœz  }t        t	        j                  |«      «      ‚d x}x}}y )NÚcb26_policy_should_not_existúopen(ú, 'w')úEassert not %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}ÚtargetrZ   )	r•   Úexistsr9   r:   r7   r;   r<   r=   r>   )	r@   r3  Útmp_pathr|  r'  rA   rC   rB   rv   s	            r   Ú-test_open_call_rejected_without_creating_filezATestConditionSafety.test_open_call_rejected_without_creating_file•  s‰   € ð Ð:Ñ:ˆØœC ›K˜?¨&Ð1ˆ	Ù˜	Ô"Ø—=‘=Ð"‘=“?Ð"�?Ð"Ð"Ñ"×"×"×"×"Õ"�6×"×"Ó"�6×"×"Ô"�=×"×"Ò"�?×"×"×"×"×"Õ"r   c                 ó   —  |d«       y )NzSENSITIVE_ACTIONS.union({'x'})r   rq  s     r   Útest_frozenset_union_rejectedz1TestConditionSafety.test_frozenset_union_rejected�  s   € ÙÐ8Õ9r   c                 ó   —  |d«       y )Nz	globals()r   rq  s     r   Útest_globals_rejectedz)TestConditionSafety.test_globals_rejected   ó
   € Ù˜Õ$r   c                 ó   —  |d«       y )Nz	eval('1')r   rq  s     r   Útest_eval_rejectedz&TestConditionSafety.test_eval_rejected£  r„  r   c                 ó   —  |d«       y )Nz	exec('1')r   rq  s     r   Útest_exec_rejectedz&TestConditionSafety.test_exec_rejected¦  r„  r   c                 ó   —  |d«       y )Nz	lambda: 1r   rq  s     r   Útest_lambda_rejectedz(TestConditionSafety.test_lambda_rejected©  r„  r   c                 ó   —  |d«       y )Nz[i for i in range(10)]r   rq  s     r   Ú test_list_comprehension_rejectedz4TestConditionSafety.test_list_comprehension_rejected¬  ó   € ÙÐ0Õ1r   c                 ó   —  |d«       y )Nz{k: k for k in range(3)}r   rq  s     r   Ú test_dict_comprehension_rejectedz4TestConditionSafety.test_dict_comprehension_rejected¯  s   € ÙÐ2Õ3r   c                 ó   —  |d«       y )Nz1 + 1 if action else 0r   rq  s     r   Útest_binop_and_ifexp_rejectedz1TestConditionSafety.test_binop_and_ifexp_rejected²  r�  r   c                 ó   —  |d«       y )Nz
10**10**10r   rq  s     r   Útest_power_bomb_rejectedz,TestConditionSafety.test_power_bomb_rejectedµ  s
   € Ù˜Õ%r   c                 ó   —  |d«       y )Nz'a' * 10**9r   rq  s     r   Ú(test_string_multiplication_bomb_rejectedz<TestConditionSafety.test_string_multiplication_bomb_rejected¸  ó
   € Ù˜Õ&r   c                 ó   —  |d«       y )Nz[0] * 10**9r   rq  s     r   Ú&test_list_multiplication_bomb_rejectedz:TestConditionSafety.test_list_multiplication_bomb_rejected»  r–  r   c                 ó   —  |d«       y )Nzidentity.trust_levelr   rq  s     r   Útest_attribute_access_rejectedz2TestConditionSafety.test_attribute_access_rejected¾  ó   € ÙÐ.Õ/r   c                 ó   —  |d«       y )NzSENSITIVE_ACTIONS[0]r   rq  s     r   Útest_subscript_rejectedz+TestConditionSafety.test_subscript_rejectedÁ  r›  r   c                 ó   —  |d«       y )Nzunknown_name == actionr   rq  s     r   Útest_unknown_name_rejectedz.TestConditionSafety.test_unknown_name_rejectedÄ  r�  r   c                 ó   —  |d«       y )NrÃ   r   rq  s     r   Útest_non_bool_result_rejectedz1TestConditionSafety.test_non_bool_result_rejectedÇ  s
   € Ù˜Õ!r   c                 óœ  — d}d} |||¬«      }d}||u }|�s/t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j
                  |«      nddt        j                  «       v st        j                  |«      rt        j
                  |«      ndd	t        j                  «       v st        j                  |«      rt        j
                  |«      nd	t        j
                  |«      t        j
                  |«      d
œz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}y )Nzaction == "x' or '1'=='1"zx' or '1'=='1 or TruerÂ   Fr‹   )z@%(py4)s
{%(py4)s = %(py0)s(%(py1)s, action=%(py2)s)
} is %(py7)srq   r'  Úpayload)r1   rQ   r2   r3   ro   rò   r°   r7  )	r@   rq   r'  r£  rC   rô   rB   rw   r·   s	            r   Ú"test_string_injection_not_executedz6TestConditionSafety.test_string_injection_not_executedÊ  s½   € Ø4ˆ	Ø)ˆÙ˜	¨'Ô2Ð;°eÐ;Ð2°eÐ;×;×;Ö;Ð2°e×;×;×;×;×;Ñ;ˆx×;×;Ó;ˆx×;×;×;×;×;Ò;˜	×;×;Ó;˜	×;×;×;×;×;Ò;¨'×;×;Ó;¨'×;×;Ô;Ð2×;×;Ò;°e×;×;×;×;×;×;Ô;r   c                 óÒ  — dj                  dgdz  «      }t        |«      }|t        kD  }|�s/t        j                  d|fd|t        f«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}} ||«       y )Nra  zaction == 'x'é(   ©ú>)z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py5)srN   r'  r	   rf  rn   ro   rg  )r@   r3  r'  r\   r]   rv   rw   s          r   Ú test_condition_too_long_rejectedz4TestConditionSafety.test_condition_too_long_rejectedÏ  s¿   € Ø—K‘K Ð 1°BÑ 6Ó7ˆ	Ü�9‹~Ð4ˆ~Ô 4Ñ4×4×4Ö4ˆ~Ô 4×4×4×4×4×4Ñ4Œs×4×4Ó4Œs×4×4×4×4×4Ò4�9×4×4Ó4�9×4×4Ô4ˆ~×4×4×4×4×4Ð4Ô 4×4×4Ó4Ô 4×4×4×4×4×4×4Ó4Ù˜	Õ"r   c                 ór  — dj                  dgdz  «      }t        |«      }|t        k  }|�s/t        j                  d|fd|t        f«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}}d„ t        j                  t        j                  |d¬«      «      D «       }t        |«      }|t        kD  }	|	�st        j                  d|	fd|t        f«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      t        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      nddœz  }
dd|
iz  }t        t        j                  |«      «      ‚d x}x}}	 ||«       y )Nz and z1<1é   rc  re  rN   r'  r	   rf  rn   ro   c              3   ó    K  — | ]  }d –— Œ y­w)rL   Nr   )rV   Ú_s     r   rX   zCTestConditionSafety.test_too_many_nodes_rejected.<locals>.<genexpr>×  s   è ø€ ÒJ˜”1ÑJùs   ‚Úevalr#   r§  )z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py6)sÚsumr
   r0   r5   r6   )rh  rN   r	   r7   r8   r9   r:   r;   r<   r=   r>   ÚastÚwalkÚparser¯  r
   )r@   r3  r'  r\   r]   rv   rw   rA   rC   rB   rD   rE   s               r   Útest_too_many_nodes_rejectedz0TestConditionSafety.test_too_many_nodes_rejectedÔ  sl  € Ø—L‘L % ¨2¡Ó.ˆ	Ü�9‹~Ð4ˆ~Ô 4Ñ4×4×4Ö4ˆ~Ô 4×4×4×4×4×4Ñ4Œs×4×4Ó4Œs×4×4×4×4×4Ò4�9×4×4Ó4�9×4×4Ô4ˆ~×4×4×4×4×4Ð4Ô 4×4×4Ó4Ô 4×4×4×4×4×4×4Ó4ÙJœcŸh™h¤s§y¡y°ÀÔ'HÓIÔJÐ`ŒsÐJÓJÐ`ÐJÔM`Ñ`×`×`Ö`ÐJÔM`×`×`×`×`×`Ñ`Œs×`×`Ó`Œs×`×`Ô`ÐJ×`×`Ò`ÐJ×`×`×`×`×`Ð`ÔM`×`×`Ó`ÔM`×`×`×`×`×`×`Õ`Ù˜	Õ"r   c                 ó   —  |d«       y )Nz	action ==r   rq  s     r   Útest_invalid_syntax_rejectedz0TestConditionSafety.test_invalid_syntax_rejectedÚ  r„  r   c                 ó   — t        ddt        j                  d¬«      }|j                  |«       t	        d¬«      }|j
                  }d} |||||«      }d}||u }	|	�s˜t        j                  d|	fd	||f«      d
t        j                  «       v st        j                  |«      rt        j                  |«      nd
t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }
dd|
iz  }t        t        j                  |«      «      ‚d x}x}x}x}	}y )NÚbad_callr®   zis_sensitive()©rU   r¦   rr   r'  r�   rÂ   Fr‹   ©zo%(py9)s
{%(py9)s = %(py2)s
{%(py2)s = %(py0)s._rule_matches
}(%(py3)s, %(py5)s, %(py6)s, %(py7)s)
} is %(py12)sr&   rt   r   ró   ©r1   r2   rR   rm   r4   ro   r°   rK  úassert %(py14)sÚpy14©r   r   r‚   r§   r   Ú_rule_matchesr7   r8   r9   r:   r;   r<   r=   r>   ©r@   r&   r   rt   ró   rA   r]   rµ   Ú@py_assert11r  rN  Ú@py_format15s               r   Ú(test_call_without_arguments_fails_closedz<TestConditionSafety.test_call_without_arguments_fails_closedÝ  s;  € ô ØØÜ#×)Ñ)Ø&ô	
ˆð 	�‰˜ÔÜ {Ô3ˆØ×#Ñ#ÐW¨+ÐWÑ# D¨+°}ÀgÓNÐWÐRWÐWÐNÐRWÐW×W×WÖWÐNÐRW×W×W×W×W×WÑWˆv×W×WÓWˆv×W×WÔWÐ#×W×W×W×W×WÐW D×W×WÓW D×W×WÔW¨+×W×W×W×W×WÐW°}×W×WÓW°}×W×W×W×W×WÒWÀg×W×WÓWÀg×W×WÔWÐN×W×WÒWÐRW×W×W×W×W×W×W×WÐWr   c                 ó   — t        ddt        j                  d¬«      }|j                  |«       t	        d¬«      }|j
                  }d} |||||«      }d}||u }	|	�s˜t        j                  d|	fd	||f«      d
t        j                  «       v st        j                  |«      rt        j                  |«      nd
t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }
dd|
iz  }t        t        j                  |«      «      ‚d x}x}x}x}	}y )NÚbad_call_argsr®   zis_sensitive(action, 1)r¸  r�   rÂ   Fr‹   r¹  r&   rt   r   ró   rº  r»  r¼  r½  r¿  s               r   Ú+test_call_with_extra_arguments_fails_closedz?TestConditionSafety.test_call_with_extra_arguments_fails_closedê  s;  € ô Ø ØÜ#×)Ñ)Ø/ô	
ˆð 	�‰˜ÔÜ {Ô3ˆØ×#Ñ#ÐW¨+ÐWÑ# D¨+°}ÀgÓNÐWÐRWÐWÐNÐRWÐW×W×WÖWÐNÐRW×W×W×W×W×WÑWˆv×W×WÓWˆv×W×WÔWÐ#×W×W×W×W×WÐW D×W×WÓW D×W×WÔW¨+×W×W×W×W×WÐW°}×W×WÓW°}×W×W×W×W×WÒWÀg×W×WÓWÀg×W×WÔWÐN×W×WÒWÐRW×W×W×W×W×W×W×WÐWr   c                 ó   — t        ddt        j                  d¬«      }|j                  |«       t	        d¬«      }|j
                  }d} |||||«      }d}||u }	|	�s˜t        j                  d|	fd	||f«      d
t        j                  «       v st        j                  |«      rt        j                  |«      nd
t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }
dd|
iz  }t        t        j                  |«      «      ‚d x}x}x}x}	}y )NÚin_operator_sensitiver®   úaction in SENSITIVE_ACTIONSr¸  rØ   rÂ   Tr‹   r¹  r&   rt   r   ró   rº  r»  r¼  r½  r¿  s               r   Ú-test_in_operator_condition_true_for_sensitivezATestConditionSafety.test_in_operator_condition_true_for_sensitive÷  s;  € ô Ø(ØÜ#×)Ñ)Ø3ô	
ˆð 	�‰˜ÔÜ Ô7ˆØ×#Ñ#ÐZ¨/ÐZÑ# D¨/¸=È'ÓRÐZÐVZÐZÐRÐVZÐZ×Z×ZÖZÐRÐVZ×Z×Z×Z×Z×ZÑZˆv×Z×ZÓZˆv×Z×ZÔZÐ#×Z×Z×Z×Z×ZÐZ D×Z×ZÓZ D×Z×ZÔZ¨/×Z×Z×Z×Z×ZÐZ¸=×Z×ZÓZ¸=×Z×Z×Z×Z×ZÒZÈ'×Z×ZÓZÈ'×Z×ZÔZÐR×Z×ZÒZÐVZ×Z×Z×Z×Z×Z×Z×ZÐZr   c                 ó   — t        ddt        j                  d¬«      }|j                  |«       t	        d¬«      }|j
                  }d} |||||«      }d}||u }	|	�s˜t        j                  d|	fd	||f«      d
t        j                  «       v st        j                  |«      rt        j                  |«      nd
t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }
dd|
iz  }t        t        j                  |«      «      ‚d x}x}x}x}	}y )NÚin_operator_non_sensitiver®   rÈ  r¸  r�   rÂ   Fr‹   r¹  r&   rt   r   ró   rº  r»  r¼  r½  r¿  s               r   Ú2test_in_operator_condition_false_for_non_sensitivezFTestConditionSafety.test_in_operator_condition_false_for_non_sensitive  s;  € ô Ø,ØÜ#×)Ñ)Ø3ô	
ˆð 	�‰˜ÔÜ {Ô3ˆØ×#Ñ#ÐW¨+ÐWÑ# D¨+°}ÀgÓNÐWÐRWÐWÐNÐRWÐW×W×WÖWÐNÐRW×W×W×W×W×WÑWˆv×W×WÓWˆv×W×WÔWÐ#×W×W×W×W×WÐW D×W×WÓW D×W×WÔW¨+×W×W×W×W×WÐW°}×W×WÓW°}×W×W×W×W×WÒWÀg×W×WÓWÀg×W×WÔWÐN×W×WÒWÐRW×W×W×W×W×W×W×WÐWr   c                 ó  — d}t        ddt        j                  |¬«      }|j                  |«       t	        d¬«      }|j
                  }d} |||||«      }d}	||	u }
|
�s˜t        j                  d|
fd	||	f«      d
t        j                  «       v st        j                  |«      rt        j                  |«      nd
t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |	«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}
}	y )Nzaction not in SENSITIVE_ACTIONSÚnot_in_operatorr®   r¸  r�   rÂ   Tr‹   r¹  r&   rt   r   ró   rº  r»  r¼  r½  ©r@   r&   r   r'  rt   ró   rA   r]   rµ   rÀ  r  rN  rÁ  s                r   Ú5test_not_in_operator_condition_true_for_non_sensitivezITestConditionSafety.test_not_in_operator_condition_true_for_non_sensitive  s@  € ð 6ˆ	ÜØ"ØÜ#×)Ñ)Øô	
ˆð 	�‰˜ÔÜ {Ô3ˆØ×#Ñ#ÐV¨+ÐVÑ# D¨+°}ÀgÓNÐVÐRVÐVÐNÐRVÐV×V×VÖVÐNÐRV×V×V×V×V×VÑVˆv×V×VÓVˆv×V×VÔVÐ#×V×V×V×V×VÐV D×V×VÓV D×V×VÔV¨+×V×V×V×V×VÐV°}×V×VÓV°}×V×V×V×V×VÒVÀg×V×VÓVÀg×V×VÔVÐN×V×VÒVÐRV×V×V×V×V×V×V×VÐVr   c                 ó  — d}t        ddt        j                  |¬«      }|j                  |«       t	        d¬«      }|j
                  }d} |||||«      }d}	||	u }
|
�s˜t        j                  d|
fd	||	f«      d
t        j                  «       v st        j                  |«      rt        j                  |«      nd
t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |	«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}x}
}	y )Nz!not (action in SENSITIVE_ACTIONS)Únot_in_parenthesesr®   r¸  r�   rÂ   Tr‹   r¹  r&   rt   r   ró   rº  r»  r¼  r½  rÏ  s                r   Ú.test_not_in_parentheses_true_for_non_sensitivezBTestConditionSafety.test_not_in_parentheses_true_for_non_sensitive  s@  € ð 8ˆ	ÜØ%ØÜ#×)Ñ)Øô	
ˆð 	�‰˜ÔÜ {Ô3ˆØ×#Ñ#ÐV¨+ÐVÑ# D¨+°}ÀgÓNÐVÐRVÐVÐNÐRVÐV×V×VÖVÐNÐRV×V×V×V×V×VÑVˆv×V×VÓVˆv×V×VÔVÐ#×V×V×V×V×VÐV D×V×VÓV D×V×VÔV¨+×V×V×V×V×VÐV°}×V×VÓV°}×V×V×V×V×VÒVÀg×V×VÓVÀg×V×VÔVÐN×V×VÒVÐRV×V×V×V×V×V×V×VÐVr   c                 ó  — |j                  t        ddt        j                  d¬«      «       |j	                  |d«      }|j
                  }d}||k7  }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      d	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}x}}|j	                  |d«      }	|	j
                  }d}||k7  }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |	«      rt        j                  |	«      ndt        j                  |«      t        j                  |«      d	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}x}}|	j                  }t        j                  }
||
k(  }|söt        j                  d|fd||
f«      dt        j                  «       v st        j                  |	«      rt        j                  |	«      ndt        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |
«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}
y )NÚinjr®   rp  r¸  r�   ©ú!=©z,%(py2)s
{%(py2)s = %(py0)s.rule
} != %(py5)sri   rl   rn   ro   rŠ   Úresult_sensitiver-   r…   r   r0   r5   r6   )r§   r   r   r‚   rq   rt   r7   r8   r9   r:   r;   r<   r=   r>   rr   r†   )r@   r&   r   ri   rA   r]   rC   rv   rw   rÙ  rB   rD   rE   s                r   Ú*test_injection_rule_not_applied_end_to_endz>TestConditionSafety.test_injection_rule_not_applied_end_to_end-  sÊ  € ð 	�‰ÜØØ"Ü'×-Ñ-Ø9ô	ô	
ð —‘ °Ó<ˆØ�{‰{Ð#˜eÐ#ˆ{˜eÑ#×#×#Õ#ˆ{˜e×#×#×#×#×#Ñ#ˆv×#×#Ó#ˆv×#×#Ô#ˆ{×#×#Ò#˜e×#×#×#×#×#×#Ó#Ø!Ÿ?™?¨=¸-ÓHÐØ×$Ñ$Ð-¨Ð-Ð$¨Ñ-×-×-Õ-Ð$¨×-×-×-×-×-Ñ-Ð×-×-Ó-Ð×-×-Ô-Ð$×-×-Ò-¨×-×-×-×-×-×-Ó-Ø×(Ñ(ÐK¬N×,KÑ,KÐKÐ(Ð,KÑK×K×KÕKÐ(Ð,K×K×K×K×K×KÑKÐ×K×KÓKÐ×K×KÔKÐ(×K×K×K×K×KÐK¬N×K×KÓK¬N×K×KÔKÐ,K×K×K×K×K×K×KÔKr   c                 ó  — |j                  t        ddt        j                  d¬«      «       |j	                  |d«      }|j
                  }d}||k7  }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      d	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}x}}y )NÚinj_attrr®   zidentity.__class__r¸  r�   rÖ  rØ  ri   rl   rn   ro   ©r§   r   r   r‚   rq   rt   r7   r8   r9   r:   r;   r<   r=   r>   ©	r@   r&   r   ri   rA   r]   rC   rv   rw   s	            r   Ú*test_attribute_rule_not_applied_end_to_endz>TestConditionSafety.test_attribute_rule_not_applied_end_to_end>  s©   € ð 	�‰ÜØØ"Ü'×-Ñ-Ø.ô	ô	
ð —‘ °Ó<ˆØ�{‰{Ð(˜jÐ(ˆ{˜jÑ(×(×(Õ(ˆ{˜j×(×(×(×(×(Ñ(ˆv×(×(Ó(ˆv×(×(Ô(ˆ{×(×(Ò(˜j×(×(×(×(×(×(Ô(r   c                 ó  — |j                  t        ddt        j                  d¬«      «       |j	                  |d«      }|j
                  }d}||k7  }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      d	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}x}}y )NÚ	inj_binopr®   z1 + 1r¸  r�   rÖ  rØ  ri   rl   rn   ro   rÝ  rÞ  s	            r   Ú&test_binop_rule_not_applied_end_to_endz:TestConditionSafety.test_binop_rule_not_applied_end_to_endL  s©   € ð 	�‰ÜØ Ø"Ü'×-Ñ-Ø!ô	ô	
ð —‘ °Ó<ˆØ�{‰{Ð)˜kÐ)ˆ{˜kÑ)×)×)Õ)ˆ{˜k×)×)×)×)×)Ñ)ˆv×)×)Ó)ˆv×)×)Ô)ˆ{×)×)Ò)˜k×)×)×)×)×)×)Ô)r   c                 óú  — |dz  }|j                  t        ddt        j                  dt	        |«      ›d�¬«      «       |j                  |d«       |j                  } |«       }| }|s�dd	t        j                  «       v st        j                  |«      rt        j                  |«      nd	t        j                  |«      t        j                  |«      d
œz  }t        t        j                  |«      «      ‚d x}x}}y )NÚcb26_e2e_should_not_existÚinj_openr®   ry  rz  r¸  r�   r{  r|  rZ   )r§   r   r   r‚   r•   rq   r}  r9   r:   r7   r;   r<   r=   r>   )	r@   r&   r   r~  r|  rA   rC   rB   rv   s	            r   Ú&test_injection_rule_has_no_side_effectz:TestConditionSafety.test_injection_rule_has_no_side_effectZ  s²   € ð Ð7Ñ7ˆØ�‰ÜØØ"Ü'×-Ñ-Ø!¤# f£+ °Ð7ô	ô	
ð 	�‰˜ {Ô3Ø—=‘=Ð"‘=“?Ð"�?Ð"Ð"Ñ"×"×"×"×"Õ"�6×"×"Ó"�6×"×"Ô"�=×"×"Ò"�?×"×"×"×"×"Õ"r   r`   )9ra   rb   rc   Ú__doc__r’   Úfixturer   r   rq   r3  r9  r;  r=  r@  rB  rF  rH  rO  rT  rW  r]  r_  ri  rn  rr  rt  rv  r  r�  rƒ  r†  rˆ  rŠ  rŒ  r�  r‘  r“  r•  r˜  rš  r�  rŸ  r¡  r¤  r©  r³  rµ  rÂ  rÅ  rÉ  rÌ  rÐ  rÓ  rÚ  rß  râ  ræ  r   r   r   r%  r%  =  si  „ Ù[à‡^�^ð
˜|ð 
¸Mò 
ó ð
ð ‡^�^ñó ðóPóMóPóWóNóDóEóFó(ó*ó@ó
Bó
AðGØ"ðGØ3@ðGà	óGó9óJóFð#à	ó#ó:ó%ó%ó%ó%ó2ó4ó2ó&ó'ó'ó0ó0ó2ó"ó<ó
#ó
#ó%ðXØ"ðXØ3@ðXà	óXðXØ"ðXØ3@ðXà	óXð[Ø"ð[Ø3@ð[à	ó[ðXØ"ðXØ3@ðXà	óXðWØ"ðWØ3@ðWà	óWðWØ"ðWØ3@ðWà	óWðLØ"ðLØ3@ðLà	óLð")Ø"ð)Ø3@ð)à	ó)ð*Ø"ð*Ø3@ð*à	ó*ð#Ø"ð#Ø3@ð#à	ô#r   r%  ))rç  Úbuiltinsr9   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter7   r°  r’   Ú!cyberbrain26.security_plane.auditr   r   r   Ú$cyberbrain26.security_plane.identityr   r   r   Ú"cyberbrain26.security_plane.policyr	   r
   r   r   r   r   r   r   rè  r   r!   r&   r)   r+   re   r˜   r¢   rÀ   rÎ   râ   rî   r  r%  r   r   r   ú<module>rð     s  ðÙ @ç  „ ƒ
ã ç RÑ R÷ñ ÷
	÷ 	ó 	ð ‡�ð�}ò ó ðð ‡�ð˜ò ó ðð ‡�ð.�ò .ó ð.ð ‡�ð�8ò ó ð÷<ñ <÷D7ñ D7÷N6ñ 6÷6:ñ 6:÷r+ñ +÷(>ñ >÷(6ñ 6÷,	[ñ 	[÷\ñ \÷>j#ò j#r   