
    j              	          d dl Zd dlmc mZ d dlZd dlZd dlZd dl	m
Z
 d dlmZ d dlZd dlZd dlZd dlmZmZmZ d Zd Zd Zej.                  j1                  d e ee                  ej.                  j1                  d	d
      d               Zd Zd Zd Zd Zej.                  j1                  d edd      df edej@                        df edej@                        dfg      d        Z!d Z"d Z#d Z$d Z%y)    N)Path)SimpleNamespace)
BOUNDARIESBlockedBoundaryModelc                  ^   t         j                  j                         D  ci c]&  \  } }| t        t         j                  |z        ddd( }} }t        t         j
                        t        t         j                  dz        t        t         j                  dz        t        t         j
                        t        t         j                  dz        t        t         j                        |t         j                  t         j                  t         j                  t         j                  dS c c}} w )N@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)originloaded_sha256wheel_sha256z.venvztelegram/__init__.py)
executableprefixtelegram_originexecstart_pythonservice_virtual_envworking_directorymoduleshermes_wheel_sha256profile_wheel_sha256v4_controller_seal_sha256v4_clean_run_seal_sha256)
controllerMODULE_MEMBERSitemsstrSITE_PACKAGESPYTHONHERMESPROFILE
HERMES_SHAPROFILE_SHAV4_CONTROLLER_SEAL_SHAV4_CLEAN_RUN_SEAL_SHA)namememberr   s      /home/cube/projects/richard/traning coach/.omo/evidence/task26/task26-strict-launch-controller-v5-st_01a00f53/test_launch_controller_v5.pyvalid_recordr'      s    R\  Rk  Rk  Rq  Rq  Rs  t  Rs  BN  BF  HNtJ$<$<v$E FYas{||  RsG  tj//0C
@Q@QT[@[<\qtu  vN  vN  Qg  vg  rh  ~A  BL  BS  BS  ~T  mp  q{  qB  qB  EL  qL  mM  dg  hr  hz  hz  d{  HO  hr  h}  h}  Wa  Wm  Wm  LV  Lm  Lm  KU  Kk  Kk  l  l ts   +D)c                  T   t               } t        D ]  }| j                  |        g }| j                  }d}||k(  }|}|r| j                  }|}|sLt        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  }	|j                  |	       |rlddt        j                         v st        j                  |       rt        j                  |       ndt        j                        d	z  }
|j                  |
       t        j                  |d
      i z  }dd|iz  }t        t        j                  |            d x}x}x}x}x}}y )N   ==)z,%(py4)s
{%(py4)s = %(py2)s.sent
} == %(py7)smodel)py2py4py7z%(py9)spy9z)%(py13)s
{%(py13)s = %(py11)s.attempted
})py11py13r   zassert %(py16)spy16)r   r   crosssent	attempted
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprappend_format_boolopAssertionError_format_explanation)r,   boundary@py_assert1@py_assert3@py_assert6@py_assert5@py_assert0@py_assert12@py_format8@py_format10@py_format14@py_format15@py_format17s                r&   test_happy_order_exactly_onerM      s    OEH .5::..:?.u....:......5...5...:.............u...u................    c                      t        t        t              dz
        D ]I  } t               }t	        j
                  t              5  |j                  t        | dz             d d d        K y # 1 sw Y   VxY w)Nr)   )rangelenr   r   pytestraisesr   r4   )indexr,   s     r&    test_every_order_violation_failsrU      sQ    s:*+]]7#KK
519-. $# ,##s   A))A2	whereside)beforeafterc                    t               }t        d |  D ]  }|j                  |        t        j                  t
              5   |j                  t        |    fi d| di d d d        |j                  }d}||k  }|st        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 # 1 sw Y   xY w)
Ncrash_Tr)   )<=)z,%(py2)s
{%(py2)s = %(py0)s.sent
} <= %(py5)sr,   py0r-   py5assert %(py7)sr/   )r   r   r4   rR   rS   RuntimeErrorr5   r7   r8   r9   r:   r;   r<   r?   r@   )	rV   rW   r,   rA   rB   @py_assert4rC   @py_format6rH   s	            r&   )test_crash_each_boundary_never_duplicatesrd   !   s     OEv&H '	|	$Ju%AF4&/4)@A 
%:::?:55: 
%	$s    D44D=c                  
   t               } t        d d D ]  }| j                  |        | j                  d       t        j                  t
              5  | j                  d       d d d        t        j                  t
              5  | j                  dd       d d d        | j                  }d}||k(  }|st        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 # 1 sw Y   xY w# 1 sw Y   xY w)Ninvite_intentinvite_resultT)unknownr   r*   )z,%(py2)s
{%(py2)s = %(py0)s.sent
} == %(py5)sr,   r]   r`   r/   )r   r   r4   rR   rS   r   r5   r7   r8   r9   r:   r;   r<   r?   r@   )r,   rA   rB   rb   rC   rc   rH   s          r&   *test_duplicate_and_unknown_are_fail_closedrj   ,   s    OEsOH $	KK 	w	O$ 
 	w	OT2 
 :::?:55:	 
 			s   E,E9,E69Fc            	         t        j                  t        j                  dz  j	                               } d}| d   d   }||v}|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}x}}t        d
      }t        dt        d      i      }t        j                  } |||      }	d}
|	|
k(  }|sKt        j                  d|fd|	|
f      dt        j                         v st        j                  t              rt        j                  t              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}}
y )Nzconfig.yamltoken	platformstelegram)not in)z%(py1)s not in %(py4)s)py1r.   zassert %(py6)spy6TELEGRAMzmemory-only-secret)rl   rm   r*   )zj%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.extract_telegram_credential
}(%(py3)s, %(py4)s)
} == %(py9)sr   configplatform)r^   r-   py3r.   rq   r0   zassert %(py11)sr1   )yaml	safe_loadr   r   	read_textr7   r8   r<   r?   r@   r   extract_telegram_credentialr9   r:   r;   )rawrF   rC   @py_assert2@py_format5@py_format7rv   ru   rB   rE   @py_assert8@py_assert7rI   @py_format12s                 r&   0test_no_config_token_supported_resolver_succeedsr   8   sg   
..*,,}<GGI
JC6#k*:6676666676666766666666666
3H
OJ^4_'`aF11[1&(C[G[[CG[[[[[CG[[[[[[[:[[[:[[[1[[[[[[&[[[&[[[[[[([[[([[[C[[[G[[[[[[[[rN   c                    ddd| j                  t        dfd       | j                  t        dfd       t        j                  t        d      5  t        j
                  t        i 	      t        d
             d d d        ddd}|k(  }|st        j                  d|fd|f      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}}d}||z  }|j                  } |       }| }	|	sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }
t        t        j                  |
            d x}x}x}x}}	y # 1 sw Y   ~xY w)Nr   preparestartr   c                  (    j                  dd      S Nr   r)   __setitem___counterss    r&   <lambda>z9test_missing_credential_is_pre_mutation.<locals>.<lambda>B       (:N:NyZ[:\rN   start_runtimec                  (    j                  dd      S Nr   r)   r   r   s    r&   r   z9test_missing_credential_is_pre_mutation.<locals>.<lambda>C       @T@TU\^_@`rN   zcredential unavailablematchrt   rn   rr   r*   z%(py0)s == %(py3)sr   r^   rw   assert %(py5)sr_   runQassert not %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).exists
}()
}tmp_pathr^   r-   r_   r/   )setattrr   rR   rS   r   r{   r   r7   r8   r9   r:   r;   r<   r?   r@   exists)monkeypatchr   r}   rB   @py_format4rc   rC   rb   rD   r   @py_format9r   s              @r&   'test_missing_credential_is_pre_mutationr   @   sS   q)H
I/\]
O5`a	w&>	?../LogqNrs 
@#$q11811111811111118111811111111111 *5 * ((*(*****************5***(*********** 
@	?s   +G==Hc                 f   t         j                  j                  ddd| j                  t         dfd       | j                  t         dfd       | j                  t         j                  dfd       t	        j
                  t        d	
      5  t        j                          d d d        ddd}|k(  }|st        j                  d|fd|f      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}}d}||z  }|j                   } |       }| }	|	sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }
t        t        j                  |
            d x}x}x}x}}	y # 1 sw Y   ~xY w)Nr   r   r   c                  (    j                  dd      S r   r   r   s    r&   r   z7test_missing_resolver_is_pre_mutation.<locals>.<lambda>M   r   rN   r   c                  (    j                  dd      S r   r   r   s    r&   r   z7test_missing_resolver_is_pre_mutation.<locals>.<lambda>N   r   rN   import_modulec                 >    | dk(  rt        t              S  |       S )Nzhermes_cli.env_loader)__file__)r   r   )r$   real_imports    r&   r   z7test_missing_resolver_is_pre_mutation.<locals>.<lambda>O   s?    rv  {R  sROemLn  Mi  Xc  dh  Xi  MirN   zresolver unavailabler   r*   r   r   r   r   r_   r   r   r   r   )r   	importlibr   r   rR   rS   r   resolver_contractr7   r8   r9   r:   r;   r<   r?   r@   r   )r   r   r}   rB   r   rc   rC   rb   rD   r   r   r   r   s              @@r&   %test_missing_resolver_is_pre_mutationr   J   ss   &&44Kq)H
I/\]
O5`a
,,o  @i  j	w&<	=$$& 
>#$q11811111811111118111811111111111 *5 * ((*(*****************5***(*********** 
>	=s   H&&H0zidentity,readinessr)   	wrong_botidusername   c                    ddd| j                  t        dfd       | j                  t        dfd       t        j                  t        d      5  t        j
                  ||       d d d        ddd}|k(  }|st        j                  d	|fd
|f      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}}d}||z  }|j                  }	 |	       }
|
 }|sddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |	      t        j                  |
      dz  }t        t        j                  |            d x}x}x}	x}
}y # 1 sw Y   ~xY w)Nr   r   r   c                  (    j                  dd      S r   r   r   s    r&   r   zHtest_wrong_identity_or_admin_readiness_is_pre_mutation.<locals>.<lambda>Y   r   rN   r   c                  (    j                  dd      S r   r   r   s    r&   r   zHtest_wrong_identity_or_admin_readiness_is_pre_mutation.<locals>.<lambda>Z   r   rN   zwrong Telegram bot identityr   r*   r   r   r   r   r_   r   r   r   r   )r   r   rR   rS   r   validate_network_identityr7   r8   r9   r:   r;   r<   r?   r@   r   )r   r   identity	readinessr}   rB   r   rc   rC   rb   rD   r   r   r   s                @r&   6test_wrong_identity_or_admin_readiness_is_pre_mutationr   V   sH   q)H
I/\]
O5`a	w&C	D,,XyA 
E#$q11811111811111118111811111111111 *5 * ((*(*****************5***(*********** 
E	Ds   G))G3c                  "   t         j                  } d}t         j                  }t        ||      }d} | ||      }dt         j                  f}||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  t               rt	        j                  t               ndt	        j                  |       dt        j                         v st	        j                  t              rt	        j                  t              ndt	        j                  |      dt        j                         v st	        j                  t               rt	        j                  t               ndt	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      t	        j                  |      d
z  }dd	|iz  }	t        t	        j                  |	            d x} x}x}x}x}x}x}}y )
N*   r   r*   )z%(py14)s
{%(py14)s = %(py2)s
{%(py2)s = %(py0)s.validate_network_identity
}(%(py10)s
{%(py10)s = %(py3)s(id=%(py5)s, username=%(py8)s
{%(py8)s = %(py6)s.BOT_USERNAME
})
}, %(py12)s)
} == %(py17)sr   r   )
r^   r-   rw   r_   rq   py8py10py12py14py17zassert %(py19)spy19)r   r   BOT_USERNAMEr   r7   r8   r9   r:   r;   r<   r?   r@   )
rB   rb   r   @py_assert9@py_assert11@py_assert13@py_assert16@py_assert15@py_format18@py_format20s
             r&   'test_valid_identity_and_admin_readinessr   a   s   //  O2  OPZPgPg  O2Pg0h  Ojl  O/0hjlm  Ort  wA  wN  wN  rO  Om  rO  O  O  O  Om  rO  O  O  O  O  O  O:  O  O  O:  O  O  O/  O  O  O  O  O  O  O  O  O  O  O  O2  O  O  O  O  O  OPZ  O  O  OPZ  O  O  OPg  O  O  O0h  O  O  Ojl  O  O  Om  O  O  O  rO  O  O  O  O  O  O  O  OrN   c                 j   d}| dz  j                  t        j                  ddd             | dz  j                  d       t        j                  | |       | dz  j                  d	|z          t        j                  t        d
      5  t        j                  | |       d d d        y # 1 sw Y   y xY w)Nz123456:strict-secret-valuezreceipt.jsonTF)credential_resolvedcredential_storedzjournal.txtzTelegram preflight passed
zbad.logzleak=zcredential leakedr   )
write_textjsondumpsr   assert_secret_absentrR   rS   r   )r   secrets     r&   -test_secret_never_appears_in_receipts_or_logsr   e   s    )F**4::din6o+pq))*GH##Hf5	%%g&67	w&9	:''&9 
;	:	:s   	B))B2c                      t        j                  t                     } d| d<   t        j                  t
        d      5  t        j                  |        d d d        y # 1 sw Y   y xY w)N/usr/bin/python3r   zwrong interpreterr   )copydeepcopyr'   rR   rS   r   r   validate_interpreter_record)rows    r&   test_interpreter_drift_rejectedr   o   sE    
--
'C*C	w&9	:..s3 
;	:	:s   AA&c                 H   | dz  }t        j                  dt        t        t        j
                        j                               ddt        |      dt        | dz        gddd	      }|j                  }d
}||k(  }|st        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}}d}|j                   }||v }	|	st        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}	}|j"                  } |       }| }
|
sd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 )Nzmust-not-existr   zdry-runz--rootz--permissionnoneTF)textcapture_outputcheckr   r*   )z2%(py2)s
{%(py2)s = %(py0)s.returncode
} == %(py5)sresultr]   r`   r/   z#wrong interpreter: /usr/bin/python3)in)z.%(py1)s in %(py5)s
{%(py5)s = %(py3)s.stderr
})rp   rw   r_   zEassert not %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.exists
}()
}root)r^   r-   r.   )
subprocessr   r   r   r   r   resolve
returncoder7   r8   r9   r:   r;   r<   r?   r@   stderrr   )r   r   r   rB   rb   rC   rc   rH   rF   r}   rE   s              r&   )test_usr_bin_python_rejected_without_rootr   v   s   &&D^^/T*:M:M5N5V5V5X1Y[dfnpstxpy  |J  LO  PX  [a  Pa  Lb  c  jn  C  KP  QF!!!!!!!!!!!!6!!!6!!!!!!!!!!!!!0AFMMA0MAAAA0MAAA0AAAAAAFAAAFAAAMAAAAAAA{{{}}tt{}rN   )&builtinsr9   _pytest.assertion.rewrite	assertionrewriter7   r   r   r   pathlibr   typesr   rR   rx   launch_controller_v5r   r   r   r   r'   rM   rU   markparametrizerP   rQ   rd   rj   r   r   r   r   r   r   r   r   r    rN   r&   <module>r      sO         !   ) C Cl
// %J"89!45 6 :	\+	+ -AP[1\^_0`crvw  CM  CZ  CZ  d[  ]^  c_  bq  uy  DN  D[  D[  b\  ^b  ac  0d  e+ e+O:4rN   