
    uiX'                     B   d dl Zd dlmc m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mZ ej                   j                  d        Zej                   j                  d        Zej                   j                  d        Zej                   j                  d        Zy)	    N)Path)	MagicMock)EdgeProxyServerc           
        K   | dz  }|j                  dj                                t        dddddt        |            }|j                  j                          d {    t        j                  |j                  |j                  d|j                  	       d {   }	 |j                  d   j                         d
   }t        j                  d| d      4 d {   }t        j                  |j!                          d {         }t        j                  |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}
}	|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}
}	|j-                  t        j.                  ddddddd             d {    g }t1        j2                         j5                         dz   }t1        j2                         j5                         |k  rt        j                  |j!                          d {         }|j7                  d      dk(  rI|j7                  d      dk(  r5|j9                  |j7                  d             |j7                  d      dk(  rn&t1        j2                         j5                         |k  rd}||v }
|
st#        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 }
|
st#        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 d d       d {    |jA                          |jC                          d {    |j                  jE                          d {    y 7 7 r7 27 7 7 7 C7 d# 1 d {  7  sw Y   txY w7 S7 3# |jA                          |jC                          d {  7   |j                  jE                          d {  7   w xY ww)%Nwps.yaml;
waypoints:
  - name: lobby
    x: 0
    y: 0
    theta: 0
	127.0.0.1r   /edge/healthmockhostportws_pathhealth_pathbackendwaypoints_pathprocess_request   ws://127.0.0.1:typewaypoint_listrobot_stateinz%(py1)s in %(py4)spy1py4assert %(py6)spy6navigater1waypointlobbyr   namenormalr   
request_idgoalspeed      @
nav_statusr,   statusarrivedacceptedz%(py1)s in %(py3)sstatusesr    py3assert %(py5)spy5#
write_textlstripr   str_backendstart
websocketsserve_handlerr   _process_requestsocketsgetsocknameconnectjsonloadsrecv
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationsenddumpsasyncioget_event_looptimegetappend@py_builtinslocals_should_repr_global_nameclosewait_closedstoptmp_path	waypointsserver	ws_serverr   wsinit1init2@py_assert0@py_assert3@py_assert2@py_format5@py_format7r5   deadlinemsg@py_format4@py_format6s                     D/home/nelsen/Projects/kognitive/edge-proxy/tests/test_server_mock.pytest_server_mock_navigatern      s    :%I	 FH 9~F //


!!! &&vQX^XoXoppI#%  #//1!4%%vU&CD 	) 	)JJRWWY/EJJRWWY/E=D$DD=$DDDDD=$DDDD=DDD$DDDDDDDD=D$DD=$DDDDD=$DDDD=DDD$DDDDDDDD''

 *&*)3W E!)		 	 	 H--/446<H((*//1H<jjrwwy1776?l2sww|7LPT7TOOCGGH$56wwx(I5 ((*//1H< ):)))):))):))))))))))))))))(9((((9(((9((((((((((((((((;	) 	)> 	##%%%oo""$$$K "p	)..	 "1-	) 	) 	) 	)@ 	&$ 	##%%%oo""$$$s  AVT>VTV#=T<  T!T< $#T#T
*T#2T
3D5T#(T)A2T#T
B
T#'E
T#1T< <T!=T< #V$T8%!VT:VVT< T#T#T#T#!T< #T5)T,*T51T< 8V:V<$V
 U#!"V
VV

Vc           
      \
  K   | dz  }|j                  dj                                t        dddddt        |            }|j                  j                          d	{    t        j                  |j                               }t        j                  |j                  |j                  d|j                  
       d	{   }	 |j                  d   j                         d   }t        j                   d| d      4 d	{   }t#        j$                  t        j&                  |j)                         d       d	{         }t#        j$                  t        j&                  |j)                         d       d	{         }|d   }	d}
|	|
v }|slt+        j,                  d|fd|	|
f      t+        j.                  |	      t+        j.                  |
      dz  }dd|iz  }t1        t+        j2                  |            d	x}	x}}
|d   }	d}
|	|
v }|slt+        j,                  d|fd|	|
f      t+        j.                  |	      t+        j.                  |
      dz  }dd|iz  }t1        t+        j2                  |            d	x}	x}}
t        j4                         j7                         dz   }d}t        j4                         j7                         |k  r~	 t#        j$                  t        j&                  |j)                         d       d	{         }|j;                  d      dk(  rd}n&t        j4                         j7                         |k  r~|s{t+        j<                  d      dz   ddt?        j@                         v st+        jB                  |      rt+        j.                  |      ndiz  }t1        t+        j2                  |            d	d	d	      d	{    |jE                          	 | d	{    |jI                          |jK                          d	{    |j                  jM                          d	{    y	7 7 7 F7 7 7 H# t        j8                  $ r Y w xY w7 # 1 d	{  7  sw Y   xY w7 # t        jF                  $ r Y w xY w7 7 e# |jE                          	 | d	{  7   n# t        jF                  $ r Y nw xY w|jI                          |jK                          d	{  7   |j                  jM                          d	{  7   w xY ww)zHPeriodic broadcast delivers robot_state to connected clients every ~2 s.r   r   r	   r   r
   r   r   r   Nr   r   r   g       @timeoutr   r   r   r   r   r"   r#   g      @Fg      @r   Tz+No periodic robot_state received within 4 s
>assert %(py0)spy0periodic_received)'r;   r<   r   r=   r>   r?   rQ   create_task_periodic_state_broadcastr@   rA   rB   r   rC   rD   rE   rF   rG   rH   wait_forrI   rJ   rK   rL   rM   rN   rR   rS   TimeoutErrorrT   _format_assertmsgrV   rW   rX   cancelCancelledErrorrY   rZ   r[   )r]   r^   r_   broadcast_taskr`   r   ra   rb   rc   rd   re   rf   rg   rh   ri   rt   rj   @py_format1s                     rm   test_periodic_state_broadcastr~   K   s     :%I	 FH 9~F //


!!! (()I)I)KLN &&vQX^XoXoppI%  #//1!4%%vU&CD 	T 	TJJW%5%5bggi%MMNEJJW%5%5bggi%MMNE=D$DD=$DDDDD=$DDDD=DDD$DDDDDDDD=D$DD=$DDDDD=$DDDD=DDD$DDDDDDDD --/446<H %((*//1H<**7+;+;BGGIs+S%STC 776?m3(,% ((*//1H< %SS&SSSSSSS$SSS$SSSSS'	T 	T* 		    	##%%%oo""$$$I "
 q	TMM &T++ 	T 	T 	T 	T. !%% 		 	&$ 		   %% 		##%%%oo""$$$s  AT,QA!T, QT,=R% Q	R% 8Q1?Q
 ?Q1?Q
 EQ17Q
Q
Q<Q1A=Q1R% Q/R% T,.R 3R4R 8#T,R!!T,=R#>T,T,	R% Q1Q1QQ,(Q1+Q,,Q1/R% 1R7Q:8R?R% R RT,RT,#T,%T)7S<R?=ST)ST)S&T)?T "T)"T%#T))T,c                    K   | dz  }|j                  dj                                t        dddddt        |            }|j                  j                          d {    t        j                  |j                  |j                  d|j                  	       d {   }	 |j                  d   j                         d
   }t        j                  d| d      4 d {   }t        j                  |j!                          d {         }t        j                  |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}
}	|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}
}	|j-                  t        j.                  dddddddd             d {    g }t1        j2                         j5                         dz   }t1        j2                         j5                         |k  rt        j                  |j!                          d {         }|j7                  d      dk(  rI|j7                  d      dk(  r5|j9                  |j7                  d             |j7                  d      dk(  rn&t1        j2                         j5                         |k  rd }||v }
|
st#        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 }
|
st#        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 d d       d {    |jA                          |jC                          d {    |j                  jE                          d {    y 7 7 s7 37 7 7 7 C7 d# 1 d {  7  sw Y   txY w7 S7 3# |jA                          |jC                          d {  7   |j                  jE                          d {  7   w xY ww)&Nr   r   r	   r   r
   r   r   r   r   r   r   r   r   r   r   r   r"   r#   r$   r%   relativeforward      ?)r   	directiondistanceslowr+   r/   r0   r,   r1   r2   r3   r4   r5   r6   r8   r9   r:   r\   s                     rm   "test_server_mock_navigate_relativer      s    :%I	 FH 9~F //


!!! &&vQX^XoXoppI#%  #//1!4%%vU&CD 	) 	)JJRWWY/EJJRWWY/E=D$DD=$DDDDD=$DDDD=DDD$DDDDDDDD=D$DD=$DDDDD=$DDDD=DDD$DDDDDDDD''

 *&*)3)Y\ ]!'		 	 	 H--/446<H((*//1H<jjrwwy1776?l2sww|7LPT7TOOCGGH$56wwx(I5 ((*//1H< ):)))):))):))))))))))))))))(9((((9(((9((((((((((((((((;	) 	)> 	##%%%oo""$$$K "p	)..	 "1-	) 	) 	) 	)@ 	&$ 	##%%%oo""$$$s  AVT>VTV#=T=  T!T= $#T$T
*T$2T
3D6T$)T*A2T$T
B
T$(E
T$2T= =T">T= #V%T9&!VT;VVT= T$T$T$T$"T= $T6*T-+T62T= 9V;V=$V!U$""VVVVc                 d  K   | dz  }|j                  dj                                | dz  }| dz  }|j                  dt        |             |j                  dt        |             t	        ddd	d
dt        |            }t        d      |j                  _        |j                  j                          d {    t        j                  |j                  |j                  d|j                         d {   }	 |j                  d   j!                         d   }t        j"                  d| d	      4 d {   }|j%                          d {    |j%                          d {    |j'                  t)        j*                  ddddddd             d {    d d d       d {    t-        j.                  d       d {    g }	t        j"                  d| d	      4 d {   }
|
j%                          d {    |
j%                          d {    t-        j0                         j3                         dz   }t-        j0                         j3                         |k  rt)        j4                  t-        j6                  |
j%                         d       d {         }|j9                  d      dk7  rz|	j;                  |       t=        d |	D              }t=        d  |	D              }|r|rn&t-        j0                         j3                         |k  rd d d       d {    |	s{t?        j@                  d!      d"z   d#d$tC        jD                         v st?        jF                  |	      rt?        jH                  |	      nd$iz  }tK        t?        jL                  |            d% |	D        }tO        |      }|sd&d'tC        jD                         v st?        jF                  tN              rt?        jH                  tN              nd't?        jH                  |      t?        jH                  |      d(z  }tK        t?        jL                  |            d x}}|	D cg c],  }|j9                  d)      d*k(  r|j9                  d+      d,k(  r|. }}|sed-d#d.tC        jD                         v st?        jF                  |      rt?        jH                  |      nd.iz  }tK        t?        jL                  |            |	D cg c],  }|j9                  d)      d/k(  r|j9                  d+      d0k(  r|. }}|sed-d#d1tC        jD                         v st?        jF                  |      rt?        jH                  |      nd1iz  }tK        t?        jL                  |            |d2   d3   d4   }|sed-d#d5tC        jD                         v st?        jF                  |      rt?        jH                  |      nd5iz  }tK        t?        jL                  |            d}| |z  }|jP                  } |       }|sd6d7tC        jD                         v st?        jF                  |       rt?        jH                  |       nd7t?        jH                  |      t?        jH                  |      t?        jH                  |      d8z  }tK        t?        jL                  |            d x}x}x}}d}| |z  }tS        |      }|jT                  }||z  }|jP                  } |       }|sSd9d7tC        jD                         v st?        jF                  |       rt?        jH                  |       nd7t?        jH                  |      d:tC        jD                         v st?        jF                  tR              rt?        jH                  tR              nd:d5tC        jD                         v st?        jF                  |      rt?        jH                  |      nd5t?        jH                  |      t?        jH                  |      t?        jH                  |      t?        jH                  |      d;z  }tK        t?        jL                  |            d x}x}x}x}x}x}}|jW                  d<=      jY                         }d>} || k(  }|st?        jZ                  d?|fd@|| f      dAtC        jD                         v st?        jF                  |      rt?        jH                  |      ndAt?        jH                  |       dBz  }!dCdD|!iz  }"tK        t?        jL                  |"            d x}} |j]                          |j_                          d {    |j                  ja                          d {    y 7 7 7 I7 47 7 7 # 1 d {  7  sw Y   xY w7 7 7 7 7 7 # 1 d {  7  sw Y   xY wc c}w c c}w 7 7 d# |j]                          |j_                          d {  7   |j                  ja                          d {  7   w xY ww)ENr   zB
waypoints:
  - name: office_scene
    x: 1
    y: 1
    theta: 0
zedge-events.jsonl	artifactsEDGE_PROXY_EVENT_JOURNAL_PATHEDGE_PROXY_ARTIFACT_DIRr	   r   r
   r   r   r   s   )return_valuer   r   r   r$   offline_navr&   office_scener(   r*   r+   g	@g      @r   rp   r   	event_logc              3   p   K   | ].  }|j                  d       dk(  xr |j                  d      dk(   0 yw)
event_typer0   r1   r2   NrT   .0evs     rm   	<genexpr>zAtest_offline_event_replay_and_arrival_artifact.<locals>.<genexpr>  sC      #  FF<(L8 6x(I56#   46c              3   p   K   | ].  }|j                  d       dk(  xr |j                  d      dk(   0 yw)r   scan_area_capturer1   savedNr   r   s     rm   r   zAtest_offline_event_replay_and_arrival_artifact.<locals>.<genexpr>  sD      $  FF<(,?? 4x(G34$r   z4Expected replayed event_log messages after reconnectrr   rs   replay_eventsc              3   B   K   | ]  }|j                  d       du   yw)replayTNr   r   s     rm   r   zAtest_offline_event_replay_and_arrival_artifact.<locals>.<genexpr>  s     D266(#t+Ds   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}all)rs   py2r!   r   r0   r1   r2   zassert %(py0)sarrived_eventsr   r   artifact_eventspayloadpathartifact_pathzMassert %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = (%(py0)s / %(py2)s).exists
}()
}r]   )rs   r   r9   py7zassert %(py14)s
{%(py14)s = %(py12)s
{%(py12)s = ((%(py0)s / %(py2)s) / %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py4)s(%(py5)s)
}.name
}).exists
}()
}r   )rs   r   r!   r9   r   py9py12py14zutf-8)encoding )==)z%(py0)s == %(py3)slines)rs   r7   r8   r9   )1r;   r<   setenvr=   r   r   _frame_capturecapturer>   r?   r@   rA   rB   r   rC   rD   rE   rF   rI   rO   rG   rP   rQ   sleeprR   rS   rH   rw   rT   rU   anyrJ   ry   rV   rW   rX   rL   rM   rN   r   existsr   r)   	read_textstriprK   rY   rZ   r[   )#r]   monkeypatchr^   journal_pathartifact_dirr_   r`   r   ra   r   ws2ri   rj   have_arrivedhave_artifactr}   @py_assert1re   rg   r   r   r   r   @py_assert4@py_assert6@py_format8@py_assert8@py_assert10@py_assert11@py_assert13@py_format15r   rf   rk   rl   s#                                      rm   .test_offline_event_replay_and_arrival_artifactr      sF    :%I	 FH 11Lk)L6L8IJ0#l2CD9~F %.;N$OF!
//


!!! &&a9P9P ID%  #//1!4%%vU&CD 	 	'')OO'')OO''

 *&3)3^ L!)		 	 		 	 mmC   %%vU&CD 	 	((*((*--/446<H((*//1H<jjw'7'7
C'P!PQ776?k1$$S)" # ,#  
 !$ $ ,$ !
  M! ((*//1H<		 	, TTTTTTTTT}TTT}TTTTTDmDDsDDDDDDDDDsDDDsDDDDDDDDDDDDDD '
vvl#|3x8HI8U 
 
 ~~ '
vvl#'::rvvh?OSZ?Z 
 
 '+I6v>}}&0;&0&..0.00000000000000;000.0000000000&K;&Km)<K)<)A)AK&)AAKAIIKIKKKKKKKKKKKKKK;KKKKKKKKKKKKKKKmKKKmKKK)<KKK)AKKKIKKKKKKKKKKK &&&8>>@u{uuu##%%%oo""$$$Q "			 	 	 	 	!	 "Q	 	 	 	2

 	&$ 	##%%%oo""$$$s  B7h09e>:>h08f9h0>=g ;f<g ?fff+f
,3ff f$g /f0g f)#g 0f,1g 4f;f/	f; f2!Bf;&f5
'A<f;$g /f80D4g $1gA-g 1g3P g 3#h0g!h08g9h0h0g f
ffg f&ff&!	g ,g /f;2f;5f;8g ;ggg	g h0h0$h-h"h-&h)'h--h0)builtinsrV   _pytest.assertion.rewrite	assertionrewriterJ   rQ   rG   pathlibr   unittest.mockr   pytestr@   edge_proxy.serverr   markrn   r~   r   r        rm   <module>r      s         #   - ;% ;%| :% :%z ;% ;%| c% c%r   