
    $/i                        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
mZmZ d dlmZ d dlmZmZ ej$                  j                  d        Zej$                  j                  d        Zej$                  j                  d        Zej$                  j                  d        Zej$                  j                  d	        Zej$                  j                  d
        Zej$                  j                  d        Zej$                  j                  d        Zej$                  j                  d        Zedk(  r ej:                   e               ej:                   e               ej:                   e               ej:                   e               ej:                   e               ej:                   e               ej:                   e              yy)    N)	MagicMockpatch	AsyncMockGeminiLiveSession)BrowserControllerNavigationStatusc                  <  K   t               } d| _        d| _        t        dd      5  | j	                  ddi 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| _        t        j                  d       d{    | j	                  ddi 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dd       y7 # 1 sw Y   yxY ww)z1Verify VAD handles audio latency (500ms, 1000ms).FTaudioop.rms  return_value                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  r   ==)z5%(py2)s
{%(py2)s = %(py0)s.stop_playback
} == %(py5)ssessionpy0py2py5assert %(py7)spy7N      ?)r   stop_playback
is_runningr   _input_callback
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationasynciosleep)r   @py_assert1@py_assert4@py_assert3@py_format6@py_format8s         7/mnt/e/genesis-system/tests/chaos/test_network_chaos.pytest_audio_latency_vadr-   
   ss      !G!GG
 
}4	0 
-aQ7$$,,$,,,,$,,,,,,w,,,w,,,$,,,,,,,,,, % mmC   aQ7$$,,$,,,,$,,,,,,w,,,w,,,$,,,,,,,,,,
- 
- 	!
- 
-s0   &HC<H$H%C H	HHHHc                  b  K   t               } d| _        d| _        d}d}d}t        dd      5  t	        d      D ]6  }|d	z  dk(  r%| j                  d
di d       | j                  r|dz  }d| _        8 	 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}}y# 1 sw Y   xY ww)z1Verify VAD with 50% packet loss (dropped frames).FTr   r   r   r   r   
      r      N   r   )z%(py0)s == %(py3)svad_triggeredr   py3assert %(py5)sr   )r   r   r   r   ranger   r   r   r   r    r!   r"   r#   r$   )	r   	loss_rateframes_sentr3   i@py_assert2r'   @py_format4r*   s	            r,   test_audio_packet_lossr=   !   s       !G!GG IKM	}4	0 *r 	*A1uz''aQ?((!Q&M$)G!	** =A=A==A* *s   ,D/AD#4B/D/#D,(D/c                    K   t               } | j                          d{   st        j                  d       	 d }| j                  j                         dk(  r7| j                  j                  j                  d|       d{    t        j                         }| j                  d       d{   }t        j                         |z
  }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}}|j$                  }t&        j(                  }	||	k(  }
|
st        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{    y7 7 *7  7 # | j+                          d{  7   w xY ww)zGVerify browser behavior with 2000ms network delay via Playwright route.NBrowser init failedc                 ~   K   t        j                  d       d {    | j                          d {    y 7 7 w)N       @)r%   r&   	continue_routes    r,   delay_handlerz1test_browser_network_delay.<locals>.delay_handlerB   s1     --$$$//### %#s   =9=;==
Playwright**/*zhttps://example.comrA   )>=)z%(py0)s >= %(py3)sdurationr4   r6   r   r   )zK%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.SUCCESS
}resultr	   )r   r   py4py6zassert %(py8)spy8)r   
initializepytestskip_active_backendname_pagerD   timenavigater   r   r   r    r!   r"   r#   r$   statusr	   SUCCESSclose)
controllerrE   startrJ   rI   r;   r'   r<   r*   @py_assert5r)   @py_format7@py_format9s                r,   test_browser_network_delayr^   9   s     #$J&&((()*!	$
 %%**,<,,2288OOOIIKE%../DEEFyy{U*H  #"8s?"""8s""""""8"""8"""s"""""""==<$4$<$<<=$<<<<<=$<<<<<<<6<<<6<<<=<<<<<<$4<<<$4<<<$<<<<<<<<   + ) P F 	!j   sj   KJ,KA
J7 J/,J7 2J23G J7 K&J5'K/J7 2J7 5K7KKKKc                  H  K   t               } t               }| |_        d|_        t	        d      | j
                  _        |j                  d       d{    |j                  }d}||u }|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7 ̭w)z)Verify vision worker handles disconnects.TzConnection closed (1006)s
   frame_dataN)is)z0%(py2)s
{%(py2)s = %(py0)s._session
} is %(py5)sr   r   r   r   )r   r   _sessionr   	Exceptionsend_realtime_inputside_effect_on_vision_framer   r   r   r    r!   r"   r#   r$   )mock_sessionr   r'   r(   r)   r*   r+   s          r,   test_vision_recovery_disconnectrg   U   s      ;L!G#GG 4==W3XL$$0

"
"=
111 #t#t####t######7###7######t####### 2s   AD"D CD"c                      K   t               } yw)zVerify heartbeat logging.Nr   )r   s    r,   test_session_heartbeatri   g   s       !Gs   c                     K   yw)z Verify backoff logic in looping.N rk       r,   test_websocket_reconnect_jitterrm   n   s      	s   c                    K   t               } t        d      | j                  _        | j	                          d{   st        j                  d       	 | j                  j                         dk(  r/d }| j                  j                  j                  d|       d{    | j                  d       d{   }|j                  }t        j                  t        j                  g}||v }|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}}| j1                          d{    y7 7 7 	7 # | j1                          d{  7   w xY ww)z1Verify failure handling when GHL endpoint is 404.z	/bad/pathr   Nr?   rF   c                 F   K   | j                  dd       d {    y 7 w)Ni  z	Not FoundrV   bodyfulfillrC   s    r,   failure_handlerz5test_informed_navigation_404.<locals>.failure_handler   s     mm3[mAAA   !!z**/bad/pathtest_resourceinz.%(py2)s
{%(py2)s = %(py0)s.status
} in %(py5)srJ   r   r   r   )r   r   
ghl_bridgeget_api_endpointrN   rO   rP   rQ   rR   rS   rD   navigate_to_ghl_resourcerV   r	   rW   	NOT_FOUNDr   r   r   r    r!   r"   r#   r$   rX   )rY   rt   rJ   r'   r(   r)   r*   r+   s           r,   test_informed_navigation_404r~   t   sZ     #$J-6K-PJ*&&((()*!%%**,<B ,,2288XXX%>>OOF ==Z%5%=%=?O?Y?Y$ZZ=$ZZZZZ=$ZZZZZZZ6ZZZ6ZZZ=ZZZ$ZZZZZZZZ   ! ) YO 	!j   sk   9G%F<G%A
G  F?!G 9G:C)G #G%6G7G%?G G G%G"GG""G%c                    K   t               } | j                          d{   st        j                  d       	 | j	                  d       d{   }|j
                  }t        j                  t        j                  g}||v }|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}}| j#                          d{    y7 27 7 # | j#                          d{  7   w xY ww)
z%Verify graceful failure on DNS error.Nr?   z"https://invalid-domain-xyz-123.comrw   ry   rJ   r   r   r   )r   rN   rO   rP   rU   rV   r	   ERRORr}   r   r   r   r    r!   r"   r#   r$   rX   )rY   rJ   r'   r(   r)   r*   r+   s          r,   test_dns_errorr      s     #$J&&((()*!!**+OPP}}T!1!7!79I9S9S TT} TTTTT} TTTTTTTvTTTvTTT}TTT TTTTTTTT    )
 Q 	!j   sW   E8EE8E EC)E 9E8EE8E E8E5.E1/E55E8c                  \  K   t               } | j                          d{   st        j                  d       	 d }| j                  j
                  j                  d|       d{    | j                  d       d{   }|j                  }t        j                  t        j                  g}||v }|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}}| j)                          d{    y7 c7 7 	7 # | j)                          d{  7   w xY ww)zVerify handling of 429.Nr?   c                 F   K   | j                  dd       d {    y 7 w)Ni  zToo Many Requestsrp   rr   rC   s    r,   ratelimit_handlerz.test_rate_limit_429.<locals>.ratelimit_handler   s     --s1D-EEEru   rG   zhttps://example.com/apirw   ry   rJ   r   r   r   )r   rN   rO   rP   rQ   rS   rD   rU   rV   r	   rW   r}   r   r   r   r    r!   r"   r#   r$   rX   )rY   r   rJ   r'   r(   r)   r*   r+   s           r,   test_rate_limit_429r      s0     #$J&&((()*	!	F ((..44V=NOOO!**+DEE}}V!1!9!9;K;U;U VV} VVVVV} VVVVVVVvVVVvVVV}VVV VVVVVVVV    ) 	PE 	!j   si   F,FF,,F 'F(F  F	C)F *F,=F>F,F 	F F,F)"F%#F))F,__main__)builtinsr   _pytest.assertion.rewrite	assertionrewriter   rO   r%   rT   unittest.mockr   r   r   core.voice.gemini_live_sessionr   core.browser_controllerr   r	   markr-   r=   r^   rg   ri   rm   r~   r   r   __name__runrk   rl   r,   <module>r      s        5 5 < G - -,  . ! !6 $ $" 	 	 	 	
 ! !0 ! ! ! !  zGKK&()GKK&()GKK*,-GKK/12GKK,./GKK !GKK#%& rl   