Ë
    ÛJêj}9  ã                   óš  — d Z ddlZddlmc mZ ddlZddlm	Z	m
Z
mZmZmZmZmZmZmZmZmZ ddlmZmZ ej.                  defd„«       Zej.                  defd„«       Zej.                  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)z+Tests for Security Gate (Quality Gate #19).é    N)Ú
AIFirewallÚArchitectureGateÚAuditLogÚ
GateStatusÚPermissionGatewayÚPolicyEngineÚ
PolicyModeÚPrivacyGateÚQualityGateRunnerÚSecurityGateÚ
TrustLevel)ÚAgentIdentityÚPermissionScopeÚreturnc                  ó€   — dt        ddt        j                  t        j                  t        j
                  h¬«      ddœS )Nzagent-1Úcoder)Úagent_idÚroleÚtrust_levelÚscopesÚtrusted©r   Úidentityr   )r   r   ÚTRUSTEDr   Ú	READ_FILEÚSHELL© ó    ú:/home/oem/CyberBrain26-unified/tests/test_security_gate.pyÚtrusted_agent_datar       sA   € ð Ü!ØØÜ"×*Ñ*Ü#×-Ñ-¬×/DÑ/DÐEô	
ð !ñ	ð 	r   c                  ó   — t        «       S )N)r   r   r   r   Úsecurity_gater"   #   s
   € ä‹>Ðr   c                  ó°   — t        t        t        j                  ¬«      «      } t        t        j                  ¬«      }t	        «       }t        «       }| |||fS )N©Úmode)r   r   r	   ÚSAFEr   r   )ÚgatewayÚengineÚauditÚfirewalls       r   Úfull_security_stackr+   (   s@   € ä¤´*·/±/Ô BÓC€GÜœzŸ™Ô/€FÜ‹J€EÜ‹|€HØ�F˜E 8Ð+Ð+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)ÚTestSecurityGateInitr"   r   Nc                 ó”  — |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 )Nzgate-19©ú==©z/%(py2)s
{%(py2)s = %(py0)s.GATE_ID
} == %(py5)sr"   ©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7)	ÚGATE_IDÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation©Úselfr"   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8s          r   Útest_gate_idz!TestSecurityGateInit.test_gate_id2   st   € Ø×$Ñ$Ð1¨	Ð1Ð$¨	Ñ1×1×1Õ1Ð$¨	×1×1×1×1×1Ñ1ˆ}×1×1Ó1ˆ}×1×1Ô1Ð$×1×1Ò1¨	×1×1×1×1×1×1Ô1r   c                 ó”  — |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úSecurity Gater/   ©z1%(py2)s
{%(py2)s = %(py0)s.GATE_NAME
} == %(py5)sr"   r2   r6   r7   )	Ú	GATE_NAMEr9   r:   r;   r<   r=   r>   r?   r@   rA   s          r   Útest_gate_namez#TestSecurityGateInit.test_gate_name5   st   € Ø×&Ñ&Ð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   c                 óØ  — |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 )NÚcriticalr/   ©zH%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.LEVEL
}.value
} == %(py7)sr"   ©r3   r4   Úpy4r7   úassert %(py9)sÚpy9)
ÚLEVELÚvaluer9   r:   r;   r<   r=   r>   r?   r@   )rB   r"   rC   rE   Ú@py_assert6Ú@py_assert5rG   Ú@py_format10s           r   Útest_gate_levelz$TestSecurityGateInit.test_gate_level8   sŒ   € Ø×"Ñ"Ð6Ð"×(Ñ(Ð6¨JÐ6Ð(¨JÑ6×6×6Õ6Ð(¨J×6×6×6×6×6Ñ6ˆ}×6×6Ó6ˆ}×6×6Ô6Ð"×6×6Ò6Ð(×6×6Ò6¨J×6×6×6×6×6×6Ö6r   )Ú__name__Ú
__module__Ú__qualname__r   rH   rM   rZ   r   r   r   r-   r-   1   s;   „ ð2¨,ð 2¸4ó 2ð:¨Lð :¸Tó :ð7¨\ð 7¸dô 7r   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)ÚTestSecurityGatePassesr"   r    r   Nc                 ó0  — t        t        t        j                  ¬«      «      }t        t        j                  ¬«      }t	        «       }t        «       }|j                  |g||||¬«      }|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}||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 ©Nr$   ©ÚagentsÚpermission_gatewayÚpolicy_engineÚ	audit_logr*   r/   ©zH%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.PASS
}Úresultr   ©r3   r4   rR   Úpy6úassert %(py8)sÚpy8r   ©z.%(py2)s
{%(py2)s = %(py0)s.failed
} == %(py5)sr2   r6   r7   T©Úis©z6%(py2)s
{%(py2)s = %(py0)s.overall_passed
} is %(py5)s©r   r   r	   r&   r   r   ÚevaluateÚstatusr   ÚPASSr9   r:   r;   r<   r=   r>   r?   r@   ÚfailedÚoverall_passed©rB   r"   r    r'   r(   r)   r*   rh   rC   rX   rE   Ú@py_format7Ú@py_format9rD   rF   rG   s                   r   Ú-test_security_gate_passes_with_all_componentszDTestSecurityGatePasses.test_security_gate_passes_with_all_components=   óË  € ô $¤L´j·o±oÔ$FÓGˆÜ¤:§?¡?Ô3ˆÜ“
ˆÜ“<ˆà×'Ñ'Ø&Ð'Ø&Ø ØØð (ó 
ˆð �}‰}Ð/¤
§¡Ð/ˆ} Ñ/×/×/Õ/ˆ} ×/×/×/×/×/Ñ/ˆv×/×/Ó/ˆv×/×/Ô/ˆ}×/×/×/×/×/Ð/¤
×/×/Ó/¤
×/×/Ô/ ×/×/×/×/×/×/Ó/Ø�}‰}Ð! Ð!ˆ} Ñ!×!×!Õ!ˆ} ×!×!×!×!×!Ñ!ˆv×!×!Ó!ˆv×!×!Ô!ˆ}×!×!Ò! ×!×!×!×!×!×!Ó!Ø×$Ñ$Ð,¨Ð,Ð$¨Ð,×,×,Õ,Ð$¨×,×,×,×,×,Ñ,ˆv×,×,Ó,ˆv×,×,Ô,Ð$×,×,Ò,¨×,×,×,×,×,×,Ô,r   c                 óB  — t        t        j                  ¬«      }t        «       }t	        «       }|j                  |g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}	}t#        d
„ |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$   rb   r/   ©zH%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.FAIL
}rh   r   ri   rk   rl   c              3   ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­w)Úpermission_gateway_activeN©Úname©Ú.0Úcs     r   ú	<genexpr>z]TestSecurityGatePasses.test_security_gate_fails_without_permission_gateway.<locals>.<genexpr>a   s   è ø€ Ò\ °a·f±fÐ@[Ó6[œ!Ñ\ùó   ‚—Ú
perm_check)r   r	   r&   r   r   rr   rs   r   ÚFAILr9   r:   r;   r<   r=   r>   r?   r@   ÚnextÚchecks)rB   r"   r    r(   r)   r*   rh   rC   rX   rE   rx   ry   r‡   s                r   Ú3test_security_gate_fails_without_permission_gatewayzJTestSecurityGatePasses.test_security_gate_fails_without_permission_gatewayQ   s‚  € ô ¤:§?¡?Ô3ˆÜ“
ˆÜ“<ˆà×'Ñ'Ø&Ð'Ø#Ø ØØð (ó 
ˆð �}‰}Ð/¤
§¡Ð/ˆ} Ñ/×/×/Õ/ˆ} ×/×/×/×/×/Ñ/ˆv×/×/Ó/ˆv×/×/Ô/ˆ}×/×/×/×/×/Ð/¤
×/×/Ó/¤
×/×/Ô/ ×/×/×/×/×/×/Ó/ÜÑ\ V§]¡]Ô\Ó\ˆ
Ø× Ñ Ð3¤J§O¡OÐ3Ð  OÑ3×3×3Õ3Ð  O×3×3×3×3×3Ñ3ˆz×3×3Ó3ˆz×3×3Ô3Ð ×3×3×3×3×3Ð3¤J×3×3Ó3¤J×3×3Ô3 O×3×3×3×3×3×3Ô3r   c                 óT  — t        t        t        j                  ¬«      «      }t	        «       }t        «       }|j                  |g|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}	}t%        d
„ |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$   rb   r/   r}   rh   r   ri   rk   rl   c              3   ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­w)Úpolicy_engine_configuredNr€   r‚   s     r   r…   zXTestSecurityGatePasses.test_security_gate_fails_without_policy_engine.<locals>.<genexpr>t   s   è ø€ Ò] !¸¿¹ÐB\Ó8\œAÑ]ùr†   Úpolicy_check)r   r   r	   r&   r   r   rr   rs   r   rˆ   r9   r:   r;   r<   r=   r>   r?   r@   r‰   rŠ   )rB   r"   r    r'   r)   r*   rh   rC   rX   rE   rx   ry   r�   s                r   Ú.test_security_gate_fails_without_policy_enginezETestSecurityGatePasses.test_security_gate_fails_without_policy_engined   s‡  € ô $¤L´j·o±oÔ$FÓGˆÜ“
ˆÜ“<ˆà×'Ñ'Ø&Ð'Ø&ØØØð (ó 
ˆð �}‰}Ð/¤
§¡Ð/ˆ} Ñ/×/×/Õ/ˆ} ×/×/×/×/×/Ñ/ˆv×/×/Ó/ˆv×/×/Ô/ˆ}×/×/×/×/×/Ð/¤
×/×/Ó/¤
×/×/Ô/ ×/×/×/×/×/×/Ó/ÜÑ] v§}¡}Ô]Ó]ˆØ×"Ñ"Ð5¤j§o¡oÐ5Ð" oÑ5×5×5Õ5Ð" o×5×5×5×5×5Ñ5ˆ|×5×5Ó5ˆ|×5×5Ô5Ð"×5×5×5×5×5Ð5¤j×5×5Ó5¤j×5×5Ô5 o×5×5×5×5×5×5Ô5r   )r[   r\   r]   r   Údictrz   r‹   r�   r   r   r   r_   r_   <   sY   „ ð-Ø)ð-Ø?Cð-à	ó-ð(4Ø)ð4Ø?Cð4à	ó4ð&6Ø)ð6Ø?Cð6à	ô6r   r_   c                   ó€   — 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dededdfd	„Z	dededdfd
„Z
y)ÚTestSecurityGateChecksr"   r    r   Nc                 óJ  — t        t        t        j                  ¬«      «      }t        t        j                  ¬«      }t	        «       }t        «       }|j                  |g||||¬«      }t        d„ |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$   rb   c              3   ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­w)Úall_agents_have_identityNr€   r‚   s     r   r…   zGTestSecurityGateChecks.test_all_agents_have_identity.<locals>.<genexpr>‰   s   è ø€ Ò_ A¸!¿&¹&ÐD^Ó:^œaÑ_ùr†   r/   rg   Úidentity_checkr   ri   rk   rl   ©r   r   r	   r&   r   r   rr   r‰   rŠ   rs   r   rt   r9   r:   r;   r<   r=   r>   r?   r@   )rB   r"   r    r'   r(   r)   r*   rh   r—   rC   rX   rE   rx   ry   s                 r   Útest_all_agents_have_identityz4TestSecurityGateChecks.test_all_agents_have_identityy   s  € ô $¤L´j·o±oÔ$FÓGˆÜ¤:§?¡?Ô3ˆÜ“
ˆÜ“<ˆà×'Ñ'Ø&Ð'Ø&Ø ØØð (ó 
ˆô Ñ_¨¯©Ô_Ó_ˆØ×$Ñ$Ð7¬
¯©Ð7Ð$¨Ñ7×7×7Õ7Ð$¨×7×7×7×7×7Ñ7ˆ~×7×7Ó7ˆ~×7×7Ô7Ð$×7×7×7×7×7Ð7¬
×7×7Ó7¬
×7×7Ô7¨×7×7×7×7×7×7Ô7r   c                 óJ  — t        t        t        j                  ¬«      «      }t        t        j                  ¬«      }t	        «       }t        «       }|j                  |g||||¬«      }t        d„ |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$   rb   c              3   ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­w©Úno_untrusted_agentsNr€   r‚   s     r   r…   zBTestSecurityGateChecks.test_no_untrusted_agents.<locals>.<genexpr>œ   ó   è ø€ Ò[ Q¸1¿6¹6ÐEZÓ;ZœqÑ[ùr†   r/   rg   Úuntrusted_checkr   ri   rk   rl   r˜   )rB   r"   r    r'   r(   r)   r*   rh   rŸ   rC   rX   rE   rx   ry   s                 r   Útest_no_untrusted_agentsz/TestSecurityGateChecks.test_no_untrusted_agentsŒ   s  € ô $¤L´j·o±oÔ$FÓGˆÜ¤:§?¡?Ô3ˆÜ“
ˆÜ“<ˆà×'Ñ'Ø&Ð'Ø&Ø ØØð (ó 
ˆô Ñ[¨&¯-©-Ô[Ó[ˆØ×%Ñ%Ð8¬¯©Ð8Ð%¨Ñ8×8×8Õ8Ð%¨×8×8×8×8×8Ñ8ˆ×8×8Ó8ˆ×8×8Ô8Ð%×8×8×8×8×8Ð8¬×8×8Ó8¬×8×8Ô8¨×8×8×8×8×8×8Ô8r   c                 óŠ  — dt        ddt        j                  ¬«      ddœ}t        t	        t
        j                  ¬«      «      }t	        t
        j                  ¬«      }t        «       }t        «       }|j                  |g||||¬«      }t        d„ |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	agent-badr   )r   r   r   Ú	untrustedr   r$   rb   c              3   ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­wrœ   r€   r‚   s     r   r…   zSTestSecurityGateChecks.test_untrusted_agent_fails_identity_check.<locals>.<genexpr>¸   rž   r†   r/   r}   rŸ   r   ri   rk   rl   )r   r   Ú	UNTRUSTEDr   r   r	   r&   r   r   rr   r‰   rŠ   rs   r   rˆ   r9   r:   r;   r<   r=   r>   r?   r@   )rB   r"   Úuntrusted_datar'   r(   r)   r*   rh   rŸ   rC   rX   rE   rx   ry   s                 r   Ú)test_untrusted_agent_fails_identity_checkz@TestSecurityGateChecks.test_untrusted_agent_fails_identity_checkŸ   s-  € ð $Ü%Ø$ØÜ&×0Ñ0ôð
 'ñ
ˆô $¤L´j·o±oÔ$FÓGˆÜ¤:§?¡?Ô3ˆÜ“
ˆÜ“<ˆà×'Ñ'Ø"Ð#Ø&Ø ØØð (ó 
ˆô Ñ[¨&¯-©-Ô[Ó[ˆØ×%Ñ%Ð8¬¯©Ð8Ð%¨Ñ8×8×8Õ8Ð%¨×8×8×8×8×8Ñ8ˆ×8×8Ó8ˆ×8×8Ô8Ð%×8×8×8×8×8Ð8¬×8×8Ó8¬×8×8Ô8¨×8×8×8×8×8×8Ô8r   c                 óJ  — t        t        t        j                  ¬«      «      }t        t        j                  ¬«      }t	        «       }t        «       }|j                  |g||||¬«      }t        d„ |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$   rb   c              3   ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­w©Úaudit_logging_enabledNr€   r‚   s     r   r…   zDTestSecurityGateChecks.test_audit_logging_enabled.<locals>.<genexpr>Ë   ó   è ø€ ÒY °q·v±vÐAXÓ7Xœ1ÑYùr†   r/   rg   Úaudit_checkr   ri   rk   rl   r˜   )rB   r"   r    r'   r(   r)   r*   rh   r¬   rC   rX   rE   rx   ry   s                 r   Útest_audit_logging_enabledz1TestSecurityGateChecks.test_audit_logging_enabled»   s  € ô $¤L´j·o±oÔ$FÓGˆÜ¤:§?¡?Ô3ˆÜ“
ˆÜ“<ˆà×'Ñ'Ø&Ð'Ø&Ø ØØð (ó 
ˆô ÑY f§m¡mÔYÓYˆØ×!Ñ!Ð4¤Z§_¡_Ð4Ð! _Ñ4×4×4Õ4Ð! _×4×4×4×4×4Ñ4ˆ{×4×4Ó4ˆ{×4×4Ô4Ð!×4×4×4×4×4Ð4¤Z×4×4Ó4¤Z×4×4Ô4 _×4×4×4×4×4×4Ô4r   c                 ó6  — t        t        t        j                  ¬«      «      }t        t        j                  ¬«      }t	        «       }|j                  |g||d |¬«      }t        d„ |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$   rb   c              3   ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­wr©   r€   r‚   s     r   r…   zETestSecurityGateChecks.test_audit_logging_disabled.<locals>.<genexpr>Ý   r«   r†   r/   r}   r¬   r   ri   rk   rl   )r   r   r	   r&   r   rr   r‰   rŠ   rs   r   rˆ   r9   r:   r;   r<   r=   r>   r?   r@   )rB   r"   r    r'   r(   r*   rh   r¬   rC   rX   rE   rx   ry   s                r   Útest_audit_logging_disabledz2TestSecurityGateChecks.test_audit_logging_disabledÎ   sþ   € ô $¤L´j·o±oÔ$FÓGˆÜ¤:§?¡?Ô3ˆÜ“<ˆà×'Ñ'Ø&Ð'Ø&Ø ØØð (ó 
ˆô ÑY f§m¡mÔYÓYˆØ×!Ñ!Ð4¤Z§_¡_Ð4Ð! _Ñ4×4×4Õ4Ð! _×4×4×4×4×4Ñ4ˆ{×4×4Ó4ˆ{×4×4Ô4Ð!×4×4×4×4×4Ð4¤Z×4×4Ó4¤Z×4×4Ô4 _×4×4×4×4×4×4Ô4r   c                 óJ  — t        t        t        j                  ¬«      «      }t        t        j                  ¬«      }t	        «       }t        «       }|j                  |g||||¬«      }t        d„ |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$   rb   c              3   ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­w)Ú"sensitive_actions_require_approvalNr€   r‚   s     r   r…   zYTestSecurityGateChecks.test_sensitive_actions_requirement_in_safe_mode.<locals>.<genexpr>ð   s!   è ø€ ò 
Ø¨¯©Ð2VÓ(VŒAñ
ùr†   r/   rg   Úapproval_checkr   ri   rk   rl   r˜   )rB   r"   r    r'   r(   r)   r*   rh   r´   rC   rX   rE   rx   ry   s                 r   Ú/test_sensitive_actions_requirement_in_safe_modezFTestSecurityGateChecks.test_sensitive_actions_requirement_in_safe_modeà   s  € ô $¤L´j·o±oÔ$FÓGˆÜ¤:§?¡?Ô3ˆÜ“
ˆÜ“<ˆà×'Ñ'Ø&Ð'Ø&Ø ØØð (ó 
ˆô ñ 
Ø—}‘}ô
ó 
ˆð ×$Ñ$Ð7¬
¯©Ð7Ð$¨Ñ7×7×7Õ7Ð$¨×7×7×7×7×7Ñ7ˆ~×7×7Ó7ˆ~×7×7Ô7Ð$×7×7×7×7×7Ð7¬
×7×7Ó7¬
×7×7Ô7¨×7×7×7×7×7×7Ô7r   )r[   r\   r]   r   r‘   r™   r    r¦   r­   r°   rµ   r   r   r   r“   r“   x   s¨   „ ð8Ø)ð8Ø?Cð8à	ó8ð&9Ø)ð9Ø?Cð9à	ó9ð&9Ø)ð9à	ó9ð85Ø)ð5Ø?Cð5à	ó5ð&5Ø)ð5Ø?Cð5à	ó5ð$8Ø)ð8Ø?Cð8à	ô8r   r“   c                   ó4   — e Zd Zdd„Zdeddfd„Zdeddfd„Zy)ÚTestQualityGateRunnerr   Nc                 ó²  — t        «       }|j                  D �cg c]  }|j                  ‘Œ }}d}||v }|s™t        j                  d|fd||f«      t        j
                  |«      dt        j                  «       v st        j                  |«      rt        j
                  |«      nddœz  }dd|iz  }t        t        j                  |«      «      ‚d x}}y c c}w )NrJ   ©Úin©z%(py1)s in %(py3)sÚ
gate_names©Úpy1Úpy3úassert %(py5)sr5   )r   ÚgatesrL   r9   r:   r>   r;   r<   r=   r?   r@   )rB   ÚrunnerÚgr¼   Ú@py_assert0Ú@py_assert2Ú@py_format4rF   s           r   Ú"test_runner_includes_security_gatez8TestQualityGateRunner.test_runner_includes_security_gate÷   sƒ   € Ü"Ó$ˆØ+1¯<©<Ö8 a�a—k“kÐ8ˆ
Ð8ØÐ,ˆ *Ð,×,×,Õ,ˆ *×,×,Ó,ˆ×,×,×,×,×,Ð, *×,×,Ó, *×,×,×,×,×,×,Ô,ùò 9s   ™Cr    c                 óÚ  — t        «       }t        t        t        j                  ¬«      «      }t        t        j                  ¬«      }t        «       }t        «       }|j                  |g||||d¬«      }t        d„ |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 )Nr$   éZ   ©rc   rd   re   rf   r*   Úretention_daysc              3   ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­w)rJ   N)Ú	gate_name)rƒ   Úrs     r   r…   zITestQualityGateRunner.test_runner_security_gate_passes.<locals>.<genexpr>  s   è ø€ ÒT Q°Q·[±[ÀOÓ5SœqÑTùr†   r/   rg   Úsecurity_resultr   ri   rk   rl   Trn   rp   r2   r6   r7   )r   r   r   r	   r&   r   r   Úrun_allr‰   rs   r   rt   r9   r:   r;   r<   r=   r>   r?   r@   rv   )rB   r    rÂ   r'   r(   r)   r*   ÚresultsrÏ   rC   rX   rE   rx   ry   rD   rF   rG   s                    r   Ú test_runner_security_gate_passesz6TestQualityGateRunner.test_runner_security_gate_passesü   s|  € ô #Ó$ˆÜ#¤L´j·o±oÔ$FÓGˆÜ¤:§?¡?Ô3ˆÜ“
ˆÜ“<ˆà—.‘.Ø&Ð'Ø&Ø ØØØð !ó 
ˆô ÑT¨'ÔTÓTˆØ×%Ñ%Ð8¬¯©Ð8Ð%¨Ñ8×8×8Õ8Ð%¨×8×8×8×8×8Ñ8ˆ×8×8Ó8ˆ×8×8Ô8Ð%×8×8×8×8×8Ð8¬×8×8Ó8¬×8×8Ô8¨×8×8×8×8×8×8Ó8Ø×-Ñ-Ð5°Ð5Ð-°Ð5×5×5Õ5Ð-°×5×5×5×5×5Ñ5ˆ×5×5Ó5ˆ×5×5Ô5Ð-×5×5Ò5°×5×5×5×5×5×5Ô5r   c                 óx  — t        «       }t        t        t        j                  ¬«      «      }t        t        j                  ¬«      }t        «       }t        «       }|j                  |g||||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}	}y )Nr$   rÉ   rÊ   Trn   ©z2%(py2)s
{%(py2)s = %(py0)s.all_passed
} is %(py5)srÂ   r2   r6   r7   )r   r   r   r	   r&   r   r   rÐ   Ú
all_passedr9   r:   r;   r<   r=   r>   r?   r@   )rB   r    rÂ   r'   r(   r)   r*   rC   rD   rE   rF   rG   s               r   Útest_runner_all_passed_propertyz5TestQualityGateRunner.test_runner_all_passed_property  sÕ   € ô #Ó$ˆÜ#¤L´j·o±oÔ$FÓGˆÜ¤:§?¡?Ô3ˆÜ“
ˆÜ“<ˆà�‰Ø&Ð'Ø&Ø ØØØð 	ô 	
ð × Ñ Ð( DÐ(Ð  DÐ(×(×(Õ(Ð  D×(×(×(×(×(Ñ(ˆv×(×(Ó(ˆv×(×(Ô(Ð ×(×(Ò( D×(×(×(×(×(×(Ô(r   ©r   N)r[   r\   r]   rÇ   r‘   rÒ   rÖ   r   r   r   r·   r·   ö   s1   „ ó-ð
6Ø"&ð6à	ó6ð,)Ø"&ð)à	ô)r   r·   c                   ó    — e Zd Zdededdfd„Zy)ÚTestPrivacyGater"   r    r   Nc                 ó0  — t        t        t        j                  ¬«      «      }t        t        j                  ¬«      }t	        «       }t        «       }|j                  |g||||¬«      }|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}||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 ra   rq   rw   s                   r   Ú/test_privacy_gate_passes_with_default_retentionz?TestPrivacyGate.test_privacy_gate_passes_with_default_retention(  r{   r   )r[   r\   r]   r   r‘   rÛ   r   r   r   rÙ   rÙ   '  s   „ ð-Ø)ð-Ø?Cð-à	ô-r   rÙ   c                   ó,   — e Zd Zdd„Zdd„Zdd„Zdd„Zy)ÚTestPrivacyGateDirectNc                 ó  — t        «       }|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                  }|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 )Nzgate-20r/   r1   Úgater2   r6   r7   úPrivacy GaterK   rO   rP   rQ   rS   rT   )r
   r8   r9   r:   r;   r<   r=   r>   r?   r@   rL   rU   rV   ©
rB   rß   rC   rD   rE   rF   rG   rW   rX   rY   s
             r   Útest_privacy_gate_idz*TestPrivacyGateDirect.test_privacy_gate_id>  si  € Ü‹}ˆØ�|‰|Ð(˜yÐ(ˆ|˜yÑ(×(×(Õ(ˆ|˜y×(×(×(×(×(Ñ(ˆt×(×(Ó(ˆt×(×(Ô(ˆ|×(×(Ò(˜y×(×(×(×(×(×(Ó(Ø�~‰~Ð/ Ð/ˆ~ Ñ/×/×/Õ/ˆ~ ×/×/×/×/×/Ñ/ˆt×/×/Ó/ˆt×/×/Ô/ˆ~×/×/Ò/ ×/×/×/×/×/×/Ó/Ø�z‰zÐ-ˆz×ÑÐ- :Ð-Ð :Ñ-×-×-Õ-Ð :×-×-×-×-×-Ñ-ˆt×-×-Ó-ˆt×-×-Ô-ˆz×-×-Ò-Ð×-×-Ò- :×-×-×-×-×-×-Ö-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}}t        d„ |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Ë   r/   rg   rh   r   ri   rk   rl   r   rm   r2   r6   r7   c              3   ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­w©Úretention_policy_setNr€   r‚   s     r   r…   zSTestPrivacyGateDirect.test_privacy_gate_passes_with_retention_90.<locals>.<genexpr>I  ó   è ø€ Ò\ Q¸1¿6¹6ÐE[Ó;[œqÑ\ùr†   Úretention_checkÚ90r¹   )z.%(py1)s in %(py5)s
{%(py5)s = %(py3)s.detail
})r¾   r¿   r5   )r
   rr   rs   r   rt   r9   r:   r;   r<   r=   r>   r?   r@   ru   r‰   rŠ   Údetail)rB   rß   rh   rC   rX   rE   rx   ry   rD   rF   rG   ré   rÄ   rÅ   s                 r   Ú*test_privacy_gate_passes_with_retention_90z@TestPrivacyGateDirect.test_privacy_gate_passes_with_retention_90D  s1  € Ü‹}ˆØ—‘¨b�Ó1ˆØ�}‰}Ð/¤
§¡Ð/ˆ} Ñ/×/×/Õ/ˆ} ×/×/×/×/×/Ñ/ˆv×/×/Ó/ˆv×/×/Ô/ˆ}×/×/×/×/×/Ð/¤
×/×/Ó/¤
×/×/Ô/ ×/×/×/×/×/×/Ó/Ø�}‰}Ð! Ð!ˆ} Ñ!×!×!Õ!ˆ} ×!×!×!×!×!Ñ!ˆv×!×!Ó!ˆv×!×!Ô!ˆ}×!×!Ò! ×!×!×!×!×!×!Ó!ÜÑ\¨&¯-©-Ô\Ó\ˆØ×%Ñ%Ð8¬¯©Ð8Ð%¨Ñ8×8×8Õ8Ð%¨×8×8×8×8×8Ñ8ˆ×8×8Ó8ˆ×8×8Ô8Ð%×8×8×8×8×8Ð8¬×8×8Ó8¬×8×8Ô8¨×8×8×8×8×8×8Ó8ØÐ-�×-Ñ-Ð-ˆtÐ-Ð-×-×-Õ-ˆtÐ-×-×-Ó-ˆt×-×-×-×-×-Ð-�×-×-Ó-�×-×-Ô-Ð-×-×-×-×-×-×-Ô-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}}t        d	„ |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   r   ri   rk   rl   c              3   ó@   K  — | ]  }|j                   d k(  sŒ|–— Œ y­wræ   r€   r‚   s     r   r…   zRTestPrivacyGateDirect.test_privacy_gate_fails_without_retention.<locals>.<genexpr>Q  rè   r†   ré   )r
   rr   rs   r   rˆ   r9   r:   r;   r<   r=   r>   r?   r@   r‰   rŠ   )	rB   rß   rh   rC   rX   rE   rx   ry   ré   s	            r   Ú)test_privacy_gate_fails_without_retentionz?TestPrivacyGateDirect.test_privacy_gate_fails_without_retentionM  sR  € Ü‹}ˆØ—‘¨d�Ó3ˆØ�}‰}Ð/¤
§¡Ð/ˆ} Ñ/×/×/Õ/ˆ} ×/×/×/×/×/Ñ/ˆv×/×/Ó/ˆv×/×/Ô/ˆ}×/×/×/×/×/Ð/¤
×/×/Ó/¤
×/×/Ô/ ×/×/×/×/×/×/Ó/ÜÑ\¨&¯-©-Ô\Ó\ˆØ×%Ñ%Ð8¬¯©Ð8Ð%¨Ñ8×8×8Õ8Ð%¨×8×8×8×8×8Ñ8ˆ×8×8Ó8ˆ×8×8Ô8Ð%×8×8×8×8×8Ð8¬×8×8Ó8¬×8×8Ô8¨×8×8×8×8×8×8Ô8r   c                 ó¢  — t        «       }|j                  ddddd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}||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 )NFTÚEUrÉ   )Útelemetry_enabledÚdata_minimizationÚpii_detectionÚdata_residencyrË   Úpseudonymous_idsr/   rg   rh   r   ri   rk   rl   r   rm   r2   r6   r7   rn   rp   )r
   rr   rs   r   rt   r9   r:   r;   r<   r=   r>   r?   r@   ru   rv   ©rB   rß   rh   rC   rX   rE   rx   ry   rD   rF   rG   s              r   Ú!test_privacy_gate_all_checks_passz7TestPrivacyGateDirect.test_privacy_gate_all_checks_passT  sŸ  € Ü‹}ˆØ—‘Ø#Ø"ØØØØ!ð ó 
ˆð �}‰}Ð/¤
§¡Ð/ˆ} Ñ/×/×/Õ/ˆ} ×/×/×/×/×/Ñ/ˆv×/×/Ó/ˆv×/×/Ô/ˆ}×/×/×/×/×/Ð/¤
×/×/Ó/¤
×/×/Ô/ ×/×/×/×/×/×/Ó/Ø�}‰}Ð! Ð!ˆ} Ñ!×!×!Õ!ˆ} ×!×!×!×!×!Ñ!ˆv×!×!Ó!ˆv×!×!Ô!ˆ}×!×!Ò! ×!×!×!×!×!×!Ó!Ø×$Ñ$Ð,¨Ð,Ð$¨Ð,×,×,Õ,Ð$¨×,×,×,×,×,Ñ,ˆv×,×,Ó,ˆv×,×,Ô,Ð$×,×,Ò,¨×,×,×,×,×,×,Ô,r   r×   )r[   r\   r]   râ   rì   rï   rø   r   r   r   rÝ   rÝ   =  s   „ ó.ó.ó9ô-r   rÝ   c                   ó   — e Zd Zdd„Zdd„Zy)ÚTestArchitectureGateDirectNc                 ó  — t        «       }|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                  }|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 )Nzgate-21r/   r1   rß   r2   r6   r7   úArchitecture GaterK   ÚhighrP   rQ   rS   rT   )r   r8   r9   r:   r;   r<   r=   r>   r?   r@   rL   rU   rV   rá   s
             r   Útest_architecture_gate_idz4TestArchitectureGateDirect.test_architecture_gate_idd  sn  € ÜÓ!ˆØ�|‰|Ð(˜yÐ(ˆ|˜yÑ(×(×(Õ(ˆ|˜y×(×(×(×(×(Ñ(ˆt×(×(Ó(ˆt×(×(Ô(ˆ|×(×(Ò(˜y×(×(×(×(×(×(Ó(Ø�~‰~Ð4Ð!4Ð4ˆ~Ð!4Ñ4×4×4Õ4ˆ~Ð!4×4×4×4×4×4Ñ4ˆt×4×4Ó4ˆt×4×4Ô4ˆ~×4×4Ò4Ð!4×4×4×4×4×4×4Ó4Ø�z‰zÐ)ˆz×ÑÐ) 6Ð)Ð 6Ñ)×)×)Õ)Ð 6×)×)×)×)×)Ñ)ˆt×)×)Ó)ˆt×)×)Ô)ˆz×)×)Ò)Ð×)×)Ò) 6×)×)×)×)×)×)Ö)r   c                 ó”  — 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}}|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}}y )Nr/   rg   rh   r   ri   rk   rl   r   rm   r2   r6   r7   Trn   rp   )r   rr   rs   r   rt   r9   r:   r;   r<   r=   r>   r?   r@   ru   rv   r÷   s              r   Ú+test_architecture_gate_passes_with_defaultszFTestArchitectureGateDirect.test_architecture_gate_passes_with_defaultsj  s„  € ÜÓ!ˆØ—‘“ˆØ�}‰}Ð/¤
§¡Ð/ˆ} Ñ/×/×/Õ/ˆ} ×/×/×/×/×/Ñ/ˆv×/×/Ó/ˆv×/×/Ô/ˆ}×/×/×/×/×/Ð/¤
×/×/Ó/¤
×/×/Ô/ ×/×/×/×/×/×/Ó/Ø�}‰}Ð! Ð!ˆ} Ñ!×!×!Õ!ˆ} ×!×!×!×!×!Ñ!ˆv×!×!Ó!ˆv×!×!Ô!ˆ}×!×!Ò! ×!×!×!×!×!×!Ó!Ø×$Ñ$Ð,¨Ð,Ð$¨Ð,×,×,Õ,Ð$¨×,×,×,×,×,Ñ,ˆv×,×,Ó,ˆv×,×,Ô,Ð$×,×,Ò,¨×,×,×,×,×,×,Ô,r   r×   )r[   r\   r]   rþ   r   r   r   r   rú   rú   c  s   „ ó*ô-r   rú   c                   ó,   — e Zd Zdeddfd„Zdeddfd„Zy)ÚTestAllGatesPassr    r   Nc                 óB	  — t        «       }t        t        t        j                  ¬«      «      }t        t        j                  ¬«      }t        «       }t        «       }|j                  |g||||¬«      }|D �cg c]  }|j                  ‘Œ }	}d}
|
|	v }|s™t        j                  d|fd|
|	f«      t        j                  |
«      dt        j                  «       v st        j                  |	«      rt        j                  |	«      nddœz  }dd	|iz  }t        t        j                   |«      «      ‚d x}
}d
}
|
|	v }|s™t        j                  d|fd|
|	f«      t        j                  |
«      dt        j                  «       v st        j                  |	«      rt        j                  |	«      nddœz  }dd	|iz  }t        t        j                   |«      «      ‚d x}
}d}
|
|	v }|s™t        j                  d|fd|
|	f«      t        j                  |
«      dt        j                  «       v st        j                  |	«      rt        j                  |	«      nddœz  }dd	|iz  }t        t        j                   |«      «      ‚d x}
}|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  }t        j(                  |j                  › d|j*                  › d�«      dz   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 c c}w )Nr$   rb   rJ   r¹   r»   r¼   r½   rÀ   r5   rà   rü   r/   rg   rh   r   ri   z	 failed: z	 failuresz
>assert %(py8)srl   Trn   rp   r2   r6   r7   )r   r   r   r	   r&   r   r   rÐ   rÍ   r9   r:   r>   r;   r<   r=   r?   r@   rs   r   rt   Ú_format_assertmsgru   rv   )rB   r    rÂ   r'   r(   r)   r*   rÑ   rÎ   r¼   rÄ   rÅ   rÆ   rF   rh   rC   rX   rE   rx   ry   rD   rG   s                         r   Ú!test_all_3_gates_pass_with_runnerz2TestAllGatesPass.test_all_3_gates_pass_with_runners  s   € ô #Ó$ˆÜ#¤L´j·o±oÔ$FÓGˆÜ¤:§?¡?Ô3ˆÜ“
ˆÜ“<ˆà—.‘.Ø&Ð'Ø&Ø ØØð !ó 
ˆð ,3Ö3 a�a—k“kÐ3ˆ
Ð3ØÐ,ˆ *Ð,×,×,Õ,ˆ *×,×,Ó,ˆ×,×,×,×,×,Ð, *×,×,Ó, *×,×,×,×,×,×,Ó,ØÐ+ˆ~ Ð+×+×+Õ+ˆ~ ×+×+Ó+ˆ~×+×+×+×+×+Ð+ ×+×+Ó+ ×+×+×+×+×+×+Ó+Ø"Ð0Ð" jÐ0×0×0Õ0Ð" j×0×0Ó0Ð"×0×0×0×0×0Ð0 j×0×0Ó0 j×0×0×0×0×0×0Ó0àó 	1ˆFØ—=‘=ð ¤J§O¡Oð �= OÑ3÷ ð ïé ó�= O÷ ò ç�v÷ò ïé ð ÷ ñ ç�Ið ÷ ò ç�Ið !÷ ñ ç�v÷ò ïé ô %/÷ ñ ç�Iô %/÷ ò ç�Ið %4÷ õ ïé ð ×#Ñ#Ð$ I¨f¯m©m¨_¸IÐF÷÷ ö ïé ÷÷ ð ×(Ñ(Ð0¨DÐ0Ð(¨DÐ0×0×0Õ0Ð(¨D×0×0×0×0×0Ñ0�6×0×0Ó0�6×0×0Ô0Ð(×0×0Ò0¨D×0×0×0×0×0×0Õ0ñ		1ùò 4s   Á7Rc                 óÜ  — t        «       }t        t        t        j                  ¬«      «      }t        t        j                  ¬«      }t        «       }t        «       }|j                  |g||||¬«       |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"                  }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                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                   |«      «      ‚d x}x}x}}y )Nr$   rb   Trn   rÔ   rÂ   r2   r6   r7   é   r/   )zK%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.gates
})
} == %(py8)sÚlen)r3   r¾   r¿   r5   rl   zassert %(py10)sÚpy10)r   r   r   r	   r&   r   r   rÐ   rÕ   r9   r:   r;   r<   r=   r>   r?   r@   rÁ   r  )rB   r    rÂ   r'   r(   r)   r*   rC   rD   rE   rF   rG   rÅ   Ú@py_assert7rW   ry   Ú@py_format11s                    r   Ú%test_runner_all_passed_with_all_gatesz6TestAllGatesPass.test_runner_all_passed_with_all_gates�  sv  € ô #Ó$ˆÜ#¤L´j·o±oÔ$FÓGˆÜ¤:§?¡?Ô3ˆÜ“
ˆÜ“<ˆà�‰Ø&Ð'Ø&Ø ØØð 	ô 	
ð × Ñ Ð( DÐ(Ð  DÐ(×(×(Õ(Ð  D×(×(×(×(×(Ñ(ˆv×(×(Ó(ˆv×(×(Ô(Ð ×(×(Ò( D×(×(×(×(×(×(Ó(Ø—<‘<Ð%Œs�<Ó Ð% AÐ%Ð  AÑ%×%×%Ö%Ð  A×%×%×%×%×%Ñ%Œs×%×%Ó%Œs×%×%×%×%×%Ò%�6×%×%Ó%�6×%×%Ô%�<×%×%Ò%Ð ×%×%Ò% A×%×%×%×%×%×%Ö%r   )r[   r\   r]   r‘   r  r  r   r   r   r  r  r  s,   „ ð1Ø"&ð1à	ó1ð8&Ø"&ð&à	ô&r   r  c                   ó$   — e Zd Zdd„Zdd„Zdd„Zy)ÚTestSecretLeakDetectionNc                 ó¾  — t        «       }|j                  d«      }|j                  }|syddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dœz  }t        t        j                  |«      «      ‚d }d„ |j                  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 )	Nz7Here is your data: sk-abc123def456ghi789jkl012mno345pqrú+assert %(py2)s
{%(py2)s = %(py0)s.blocked
}rh   ©r3   r4   c              3   óN   K  — | ]  }|j                   j                  d k(  –— Œ y­w)Úcredential_accessN)Úthreat_typerV   )rƒ   Úts     r   r…   zRTestSecretLeakDetection.test_inspect_tool_result_blocks_api_key.<locals>.<genexpr>«  s%   è ø€ ò 
Ø;<ˆA�M‰M×ÑÐ#6Õ6ñ
ùs   ‚#%z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úany)r3   r4   rR   )r   Úinspect_tool_resultÚblockedr;   r<   r9   r=   r>   r?   r@   Úthreatsr  )rB   r*   rh   rC   Ú@py_format3rE   Ú@py_format5s          r   Ú'test_inspect_tool_result_blocks_api_keyz?TestSecretLeakDetection.test_inspect_tool_result_blocks_api_key¥  s  € Ü“<ˆØ×-Ñ-ØEó
ˆð �~‰~Ð‰~××××Õˆv××Óˆv××Ôˆ~×××××Ðñ
Ø@FÇÁô
ð 	
Œsð 
ó 
ð 	
ñ 
ö 	
ç	�6÷	
ò 	
ïé ô ÷ 	
ñ 	
ç 	�	ô ÷ 	
ò 	
ç 	�	ð
÷ 	
ð 	
ç 	�	ð
÷ 	
÷ 	
ò 	
ïé ÷	
ö 	
r   c                 óL  — t        «       }|j                  d«      }|j                  }|syddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dœz  }t        t        j                  |«      «      ‚d }y )NzQ-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA...
-----END RSA PRIVATE KEY-----r  rh   r  )
r   Úinspect_model_outputr  r;   r<   r9   r=   r>   r?   r@   )rB   r*   rh   rC   r  s        r   Ú,test_inspect_model_output_blocks_private_keyzDTestSecretLeakDetection.test_inspect_model_output_blocks_private_key¯  sc   € Ü“<ˆØ×.Ñ.Øaó
ˆð �~‰~Ð‰~××××Õˆv××Óˆv××Ôˆ~×××××Ñr   c                 óV  — t        «       }|j                  d«      }|j                  }| }|syddt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dœz  }t        t        j                  |«      «      ‚d x}}y )NzResults computed successfully.z/assert not %(py2)s
{%(py2)s = %(py0)s.blocked
}rh   r  )
r   r  r  r;   r<   r9   r=   r>   r?   r@   )rB   r*   rh   rC   rE   rÆ   s         r   Ú,test_inspect_tool_result_allows_clean_outputzDTestSecretLeakDetection.test_inspect_tool_result_allows_clean_output¶  sh   € Ü“<ˆØ×-Ñ-Ð.NÓOˆØ—>‘>Ð!�>Ð!Ð!Ñ!×!×!×!×!Õ!�6×!×!Ó!�6×!×!Ô!�>×!×!×!×!×!Ó!r   r×   )r[   r\   r]   r  r  r!  r   r   r   r  r  ¤  s   „ ó
óô"r   r  )%Ú__doc__Úbuiltinsr;   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter9   ÚpytestÚcyberbrain26.security_planer   r   r   r   r   r   r	   r
   r   r   r   Ú$cyberbrain26.security_plane.identityr   r   Úfixturer‘   r    r"   r+   r-   r_   r“   r·   rÙ   rÝ   rú   r  r  r   r   r   ú<module>r+     sà   ðÙ 1ç  „ ƒ÷÷ ÷ ñ ÷ Pð ‡�ð
˜Dò 
ó ð
ð ‡�ð�|ò ó ðð ‡�ñ,ó ð,÷7ñ 7÷96ñ 96÷x{8ñ {8÷|.)ñ .)÷b-ñ -÷,#-ñ #-÷L-ñ -÷/&ñ /&÷d"ò "r   