
    #xj`                        d Z ddlZddlmc mZ ddlZddlm	Z	 ddl
mZmZ ddlZddlZddlmZmZmZ ddlmZmZmZmZmZ ddlmZmZmZ ddlmZ dd	lm Z m!Z! dd
l"m#Z#m$Z$ ddl%m&Z&m'Z' ddl(m)Z) 	 	 d6de*de+e*   dz  defdZ,ejZ                  d        Z. G d d      Z/ G d d      Z0 G d d      Z1 G d d      Z2 G d d      Z3 G d d      Z4 G d d      Z5 G d  d!      Z6 G d" d#      Z7 G d$ d%      Z8 G d& d'      Z9 G d( d)      Z: G d* d+      Z; G d, d-      Z< G d. d/      Z= G d0 d1      Z> G d2 d3      Z? G d4 d5      Z@y)7u   Comprehensive E2E tests for PeerDrop after restructuring.

Tests the full pipeline: DaemonClient → IPC → DaemonServer → RequestHandler → ServiceInterface
with the new module organization.
    N)Path)	MagicMock	AsyncMock)DEFAULT_SOCK_PATHDEFAULT_PID_PATHDEFAULT_DOWNLOAD_DIR)ServiceInterfaceIdentityInfoPeerInfoTransferInfo
PingResult)PeerTransferTransferStatusDaemonServerRequestHandlerVALID_ACTIONS)make_requestunpack_responselength_prefix_packlength_prefix_unpackDaemonClientpeer_idaddrsreturnc                     t        t              }t        | |xs d|  g      |j                  _        g |j
                  _        g |j                  _        |S )z-Create a mock ServiceInterface for E2E tests.)specz/ip4/127.0.0.1/tcp/4001/p2p/r   r   )r   r	   r
   get_identityreturn_valuediscover_peerslist_transfers)r   r   mocks      =/Users/sumanjeet/code/PeerDrop/tests/test_e2e_restructured.py_make_mock_servicer)      s[    
 *+D%1A6wi@A&D" (*D$')D$K    c               #   ~   K   t        j                         5 } t        |       dz   ddd       y# 1 sw Y   yxY ww)z Provide a temporary socket path.z	test.sockN)tempfileTemporaryDirectoryr   )tmpdirs    r(   tmp_sockr/   '   s9      
	$	$	& )&6l[(() ) )s   =1	=:=c                   $    e Zd Zd Zd Zd Zd Zy)TestConstantsc                 \   t        t        t              }|sddt        j                         v st        j                  t               rt        j                  t               nddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d }y )N5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstancer   r   py0py1py2py4)
r4   r   r   @py_builtinslocals
@pytest_ar_should_repr_global_name	_safereprAssertionError_format_explanationself@py_assert3@py_format5s      r(   test_sock_path_is_pathz$TestConstants.test_sock_path_is_path1   s    +T22222222z222z222222+222+222222T222T2222222222r*   c                 \   t        t        t              }|sddt        j                         v st        j                  t               rt        j                  t               nddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d }y )Nr3   r4   r   r   r5   )
r4   r   r   r:   r;   r<   r=   r>   r?   r@   rA   s      r(   test_pid_path_is_pathz#TestConstants.test_pid_path_is_path4   s    *D11111111z111z111111*111*111111D111D1111111111r*   c                 \   t        t        t              }|sddt        j                         v st        j                  t               rt        j                  t               nddt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }t        t        j                  |            d }y )Nr3   r4   r   strr5   )
r4   r   rI   r:   r;   r<   r=   r>   r?   r@   rA   s      r(   test_download_dir_is_stringz)TestConstants.test_download_dir_is_string7   s    .44444444z444z444444.444.4444444444444444444r*   c                 Z   t         j                  }t        j                  }||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z  }dd|iz  }t        t        j                  |            d x}x}}y )N==)zJ%(py2)s
{%(py2)s = %(py0)s.parent
} == %(py6)s
{%(py6)s = %(py4)s.parent
}r   r   )r6   r8   r9   py6assert %(py8)spy8)r   parentr   r<   _call_reprcomparer:   r;   r=   r>   r?   r@   )rB   @py_assert1@py_assert5rC   @py_format7@py_format9s         r(   test_sock_and_pid_same_dirz(TestConstants.test_sock_and_pid_same_dir:   s    &&B*;*B*BB&*BBBBB&*BBBBBBBBBBBBB&BBBBBB*;BBB*;BBB*BBBBBBBBr*   N)__name__
__module____qualname__rE   rG   rJ   rW    r*   r(   r1   r1   0   s    325Cr*   r1   c                   N    e Zd ZdZej
                  j                  d        Zd Zy)TestFramingIntegrationz,Test framing works correctly in IPC context.c                   K   t               }t        ||      }t        j                         4 d {   }|j	                  |j
                         d {    t        j                  t        |             d {   }t        dd      }|j                  t        |             d {    |j                  d       d {   }t        |      }d }	||	u}
|
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}
}	|\  }}t+        |      }|d   }d}||u }	|	slt        j                  d|	fd||f      t        j$                  |      t        j$                  |      dz  }dd|iz  }t'        t        j(                  |            d x}x}	}|j-                          d {    |j.                  j1                          d d d       d {    y 7 7 7 7 7 7 >7 # 1 d {  7  sw Y   y xY ww)N	sock_pathhealthztest-1
request_id   is notz%(py0)s is not %(py3)sresultr6   py3assert %(py5)spy5okTisz%(py1)s is %(py4)sr7   r9   assert %(py6)srN   )r)   r   trioopen_nurserystartserveopen_unix_socketrI   r   send_allr   receive_somer   r<   rR   r:   r;   r=   r>   r?   r@   r   aclosecancel_scopecancel)rB   r/   serviceservernurserystreamrequestresponse_datarh   @py_assert2rS   @py_format4@py_format6msg_response@py_assert0rC   rD   rU   s                       r(   test_framing_through_socketz2TestFramingIntegration.test_framing_through_socketC   s    $&g:$$& 	* 	*'-----00X??F #8AG//"4W"=>>> #)"5"5d";;M)-8F!%%6%%%%6%%%%%%6%%%6%%%%%%%%%%FC&s+HD>)T)>T))))>T)))>)))T)))))))--/!!  '')%	* 	* 	*-? ? < "#	* 	* 	* 	*s   0I2I
I2II%I;I<.I*I+IIEIII9I2II2IIIIII2I/#I&$I/+I2c                    t        d      t        d      t        d      g}dj                  |      }dD ]  }t        |      }d}||u}|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}}|\  }	}|	|k(  }|st        j                  d|fd|	|f      dt        j                         v st        j                  |	      rt        j                  |	      nddt        j                         v st        j                  |      rt        j                  |      nddz  }
dd|
iz  }t        t        j                  |            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)z/Test multiple messages can be framed correctly.   msg1   msg2   msg3r*   )r   r   r   Nre   rg   rh   ri   rk   rl   rL   )z%(py0)s == %(py2)sr   expected)r6   r8   zassert %(py4)sr9   z%(py0)s == %(py3)sbuffer)r   joinr   r<   rR   r:   r;   r=   r>   r?   r@   )rB   msgsr   r   rh   r   rS   r   r   r   @py_format3rD   s               r(   test_framing_multiple_messagesz5TestFramingIntegration.test_framing_multiple_messages\   sn    w'w'w'

 $3 	#H)&1F!%%6%%%%6%%%%%%6%%%6%%%%%%%%%% KC(?"""3(""""""3"""3""""""("""("""""""		#
 v}vvvr*   N)	rX   rY   rZ   __doc__pytestmarkrs   r   r   r[   r*   r(   r]   r]   @   s&    6[[* *0r*   r]   c                       e Zd Zej                  j
                  d        Zej                  j
                  d        Zej                  j
                  d        Zy)TestHandlerValidationc                 n  K   t               }t        |      }t        t              }d}||k(  }|st	        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                  t              rt	        j                  t              ndt	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}}y w)	N   rL   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenr   r6   r7   rj   rN   rO   rP   )r)   r   r   r   r<   rR   r:   r;   r=   r>   r?   r@   )rB   r}   handlerr   rT   @py_assert4rU   rV   s           r(   !test_all_valid_actions_registeredz7TestHandlerValidation.test_all_valid_actions_registeredp   s     $& )=!'R'!R''''!R''''''s'''s''''''='''='''!'''R'''''''s   D3D5c                   K   t               }t        |      }t        dd      }|j                  |       d {   }t	        |      }|d   }d}||u }|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}}y 7 w)Nnonexistentr1rb   rm   Frn   rp   rq   rr   rN   Unknown actionerrorinz%(py1)s in %(py4)s)
r)   r   r   handler   r<   rR   r>   r?   r@   )rB   r}   r   r   r   r   r   rC   r   rD   rU   s              r(   test_invalid_actionz)TestHandlerValidation.test_invalid_actionv   s     $& )}> 00h'4y!E!yE!!!!yE!!!y!!!E!!!!!!!/3w</<////<//////</////// 1s   7EEDEc                   K   t               }t        |      }|j                  d       d {   }t        |      }|d   }d}||u }|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}}y 7 w)Ns   not valid msgpackrm   Frn   rp   rq   rr   rN   zInvalid messager   r   r   )	r)   r   r   r   r<   rR   r>   r?   r@   )
rB   r}   r   r   r   r   rC   r   rD   rU   s
             r(   test_invalid_msgpackz*TestHandlerValidation.test_invalid_msgpack   s     $& ) (<==h'4y!E!yE!!!!yE!!!y!!!E!!!!!!! 0CL0 L0000 L000 000L0000000 >s   *D>D;DD>N)	rX   rY   rZ   r   r   rs   r   r   r   r[   r*   r(   r   r   o   sZ    [[( (
 [[0 0 [[1 1r*   r   c                   D    e Zd Zej                  j
                  d        Zy)TestHealthPipelinec                   K   t        d      }t        ||      }t        j                         4 d {   }|j	                  |j
                         d {    t        |      }|j                          d {    |j                          d {   }|d   }d}||u }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
d	d
|
iz  }t        t        j                  |            d x}x}	}|d   d   }d}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
d	d
|
iz  }t        t        j                  |            d x}x}	}|d   d   }d}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
d	d
|
iz  }t        t        j                  |            d x}x}	}|j                          d {    |j                  j!                          d d d       d {    y 7 +7 7 7 7 ;7 # 1 d {  7  sw Y   y xY ww)NQmHealthTestr   r_   rm   Trn   rp   rq   rr   rN   datastatusrL   z%(py1)s == %(py4)sr   r)   r   rs   rt   ru   rv   r   connectra   r<   rR   r>   r?   r@   closer{   r|   rB   r/   r}   r~   r   clientrh   r   rC   r   rD   rU   s               r(   test_healthzTestHealthPipeline.test_health   s    $^<g:$$& 	* 	*'-----!(+F.."""!==?*F$<'4'<4''''<4'''<'''4'''''''&>(+3t3+t3333+t333+333t3333333&>),>>,>>>>,>>>,>>>>>>>>>>,,.    '')	* 	* 	*- #*
 !	* 	* 	* 	*s   2JIJI/I""I/:I%;I/I(FI//I+0I/JI-J"I/%I/(I/+I/-J/J5I86J=JN)rX   rY   rZ   r   r   rs   r   r[   r*   r(   r   r      s    [[* *r*   r   c                   D    e Zd Zej                  j
                  d        Zy)TestIdentityPipelinec                 h  K   ddg}t        d|      }t        ||      }t        j                         4 d {   }|j	                  |j
                         d {    t        |      }|j                          d {    |j                          d {   }|d   }d}	||	u }
|
slt        j                  d|
fd	||	f      t        j                  |      t        j                  |	      d
z  }dd|iz  }t        t        j                  |            d x}x}
}	|d   d   }d}	||	k(  }
|
slt        j                  d|
fd||	f      t        j                  |      t        j                  |	      d
z  }dd|iz  }t        t        j                  |            d x}x}
}	|d   d   }||k(  }
|
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}}
|j#                          d {    |j$                  j'                          d d d       d {    y 7 T7 47 7 7 ;7 # 1 d {  7  sw Y   y xY ww)N/ip4/127.0.0.1/tcp/4001z/ip4/192.168.1.100/tcp/4001QmIdentityTestr"   r_   rm   Trn   rp   rq   rr   rN   r   r   rL   r   r   )z%(py1)s == %(py3)s)r7   rj   rk   rl   )r)   r   rs   rt   ru   rv   r   r   r#   r<   rR   r>   r?   r@   r:   r;   r=   r   r{   r|   )rB   r/   r   r}   r~   r   r   rh   r   rC   r   rD   rU   r   r   s                  r(   test_get_identityz&TestIdentityPipeline.test_get_identity   s    *,IJ$-=UKg:$$& 	* 	*'-----!(+F.."""!..00F$<'4'<4''''<4'''<'''4'''''''&>),@0@@,0@@@@@,0@@@@,@@@0@@@@@@@@&>'*3*e3333*e333*333333e333e3333333,,.    '')	* 	* 	*- #0
 !	* 	* 	* 	*s   7J2JJ2JJ"J?J JJGJJJ<J2JJ2JJJJJ2J/#J&$J/+J2N)rX   rY   rZ   r   r   rs   r   r[   r*   r(   r   r      s    [[* *r*   r   c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestDiscoverPeersPipelinec                 H  K   t               }t        ||      }t        j                         4 d {   }|j	                  |j
                         d {    t        |      }|j                          d {    |j                          d {   }g }||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#                          d {    |j$                  j'                          d d d       d {    y 7 L7 ,7 7 7 :7 # 1 d {  7  sw Y   y xY ww)Nr_   rL   r   peersri   rk   rl   )r)   r   rs   rt   ru   rv   r   r   r%   r<   rR   r:   r;   r=   r>   r?   r@   r   r{   r|   )rB   r/   r}   r~   r   r   r   r   rS   r   r   s              r(   test_discover_emptyz-TestDiscoverPeersPipeline.test_discover_empty   s%    $&g:$$& 
	* 
	*'-----!(+F..""" //11E5B;5B55B,,.    '')
	* 
	* 
	*- #1 !
	* 
	* 
	* 
	*   0F"E>F"FF"F8F9FFB=FF	F-F"8F9F"FFF	FF"FFFF"c                   K   t               }t        ddgdd      t        ddgdd      g|j                  _        t	        ||	      }t        j                         4 d {   }|j                  |j                         d {    t        |      }|j                          d {    |j                          d {   }t        |      }d
}||k(  }	|	st        j                  d|	fd||f      dt        j                         v st        j                   t              rt        j"                  t              nddt        j                         v st        j                   |      rt        j"                  |      ndt        j"                  |      t        j"                  |      dz  }
dd|
iz  }t%        t        j&                  |            d x}x}	}|d   d   }d}||k(  }|slt        j                  d|fd||f      t        j"                  |      t        j"                  |      dz  }dd|iz  }
t%        t        j&                  |
            d x}x}}|d   d   }d}||k(  }|slt        j                  d|fd||f      t        j"                  |      t        j"                  |      dz  }dd|iz  }
t%        t        j&                  |
            d x}x}}|d   d   }d}||k(  }|slt        j                  d|fd||f      t        j"                  |      t        j"                  |      dz  }dd|iz  }
t%        t        j&                  |
            d x}x}}|j)                          d {    |j*                  j-                          d d d       d {    y 7 ?7 7 7 7 ;7 # 1 d {  7  sw Y   y xY ww)NQmPeer1z/ip4/1.2.3.4/tcp/4001PhoneTr   r   name	is_onlineQmPeer2z/ip4/5.6.7.8/tcp/4002Laptopr_      rL   r   r   r   r   rO   rP   r   r   r   rq   rr   rN   r      )r)   r   r%   r$   r   rs   rt   ru   rv   r   r   r   r<   rR   r:   r;   r=   r>   r?   r@   r   r{   r|   )rB   r/   r}   r~   r   r   r   r   rT   r   rU   rV   r   rC   rD   s                  r(   test_discover_with_peersz2TestDiscoverPeersPipeline.test_discover_with_peers   s    $&Y/F.GgaefY/F.Ghbfg/
+ g:$$& 	* 	*'-----!(+F..""" //11Eu:"":?""":""""""3"""3""""""u"""u""":""""""""""8I&3)3&)3333&)333&333)33333338F#.w.#w....#w...#...w.......8I&3)3&)3333&)333&333)3333333,,.    '')	* 	* 	*- #1 !	* 	* 	* 	*s   AO!N "O%N0N#"N0'N&(N0?N) J0N00N,1N0ON.O#N0&N0)N0,N0.O0O6N97O>ON)rX   rY   rZ   r   r   rs   r   r   r[   r*   r(   r   r      s<    [[* *  [[* *r*   r   c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestGetPeerPipelinec                 B  K   t               }t        ddgdd      |j                  _        t	        ||      }t        j                         4 d {   }|j                  |j                         d {    t        |      }|j                          d {    |j                  d       d {   }|d   }d}||u }	|	slt        j                  d|	fd	||f      t        j                  |      t        j                  |      d
z  }
dd|
iz  }t        t        j                  |            d x}x}	}|d   d   }d}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      d
z  }
dd|
iz  }t        t        j                  |            d x}x}	}|j!                          d {    |j"                  j%                          d d d       d {    y 7 7 7 i7 S7 ;7 # 1 d {  7  sw Y   y xY ww)NQmTargetz/ip4/10.0.0.1/tcp/4001TargetTr   r_   rm   rn   rp   rq   rr   rN   r   r   rL   r   )r)   r   get_peerr$   r   rs   rt   ru   rv   r   r   r<   rR   r>   r?   r@   r   r{   r|   r   s               r(   test_get_peer_foundz'TestGetPeerPipeline.test_get_peer_found   s    $&(0'?&@x[_)
% g:$$& 	* 	*'-----!(+F.."""!??:66F$<'4'<4''''<4'''<'''4'''''''&>),:
:,
::::,
:::,:::
:::::::,,.    '')	* 	* 	*- #6 !	* 	* 	* 	*s   AHG:HH
4G=5"H
H H
0H1DH

HH
)H4H5H=H
 H
H
H
H
HHHHc                   K   t               }d |j                  _        t        ||      }t	        j
                         4 d {   }|j                  |j                         d {    t        |      }|j                          d {    |j                  d       d {   }|d   }d}||u }	|	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                          d {    |j                   j#                          d d d       d {    y 7 7 7 e7 O7 ;7 # 1 d {  7  sw Y   y xY ww)Nr_   QmNonexistentrm   Frn   rp   rq   rr   rN   	not foundr   r   r   )r)   r   r$   r   rs   rt   ru   rv   r   r   r<   rR   r>   r?   r@   r   r{   r|   r   s               r(   test_get_peer_not_foundz+TestGetPeerPipeline.test_get_peer_not_found   sw    $&(,%g:$$& 	* 	*'-----!(+F.."""!???;;F$<(5(<5((((<5(((<(((5(((((((1&/1;/1111;/111;111/1111111,,.    '')	* 	* 	*- #; !	* 	* 	* 	*   AHG(HG8&G+'"G8	G.
G8"G1#DG88G49G8H"G6#H+G8.G81G84G86H8H
>H?H
HN)rX   rY   rZ   r   r   rs   r   r   r[   r*   r(   r   r      s<    [[* *( [[* *r*   r   c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestConnectPeerPipelinec                   K   t               }d }||_        t        ||      }t        j                         4 d {   }|j                  |j                         d {    t        |      }|j                          d {    |j                  d       d {   }|d   }d}	||	u }
|
slt        j                  d|
fd||	f      t        j                  |      t        j                  |	      dz  }d	d
|iz  }t        t        j                  |            d x}x}
}	|d   d   }d}	||	k(  }
|
slt        j                  d|
fd||	f      t        j                  |      t        j                  |	      dz  }d	d
|iz  }t        t        j                  |            d x}x}
}	|j                          d {    |j                  j!                          d d d       d {    y 7 7 7 i7 S7 ;7 # 1 d {  7  sw Y   y xY ww)Nc                 *   K   t        d| gdd      S w)NQmConnectedNewTr   )r   )addrs    r(   fake_connectz?TestConnectPeerPipeline.test_connect_peer.<locals>.fake_connect  s     M$eW[\\s   r_   z%/ip4/1.2.3.4/tcp/4001/p2p/QmConnectedrm   Trn   rp   rq   rr   rN   r   r   r   rL   r   )r)   connect_peerr   rs   rt   ru   rv   r   r   r<   rR   r>   r?   r@   r   r{   r|   )rB   r/   r}   r   r~   r   r   rh   r   rC   r   rD   rU   s                r(   test_connect_peerz)TestConnectPeerPipeline.test_connect_peer  s    $&	]  ,g:$$& 	* 	*'-----!(+F.."""!../VWWF$<'4'<4''''<4'''<'''4'''''''&>),==,====,===,==========,,.    '')	* 	* 	*- #W !	* 	* 	* 	*s   :H
G%H
 G5G( "G5G+G5G.DG55G16G5H
G3 H
(G5+G5.G51G53H
5H;G><HH
c                    K   t               }t        ||      }t        j                         4 d {   }|j	                  |j
                         d {    t        |      }|j                          d {    |j                  di        d {   }|d   }d}||u }	|	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                          d {    |j                  j!                          d d d       d {    y 7 7 7 g7 O7 ;7 # 1 d {  7  sw Y   y xY ww)Nr_   r   paramsrm   Frn   rp   rq   rr   rN   Missingr   r   r   r)   r   rs   rt   ru   rv   r   r   r   r<   rR   r>   r?   r@   r   r{   r|   r   s               r(   test_connect_peer_missing_addrz6TestConnectPeerPipeline.test_connect_peer_missing_addr$  sm    $&g:$$& 	* 	*'-----!(+F.."""!>>.>DDF$<(5(<5((((<5(((<(((5(((((((/w/9////9///9//////////,,.    '')	* 	* 	*- #D !	* 	* 	* 	*s   0G>GG>G)G"G)8G9G)G"DG))G%*G)G>G'G>G)G)"G)%G)'G>)G;/G20G;7G>N)rX   rY   rZ   r   r   rs   r   r   r[   r*   r(   r   r     <    [[* *, [[* *r*   r   c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestPingPipelinec           	      *  K   t               }t        t        ddg ddd            |_        t	        ||      }t        j                         4 d {   }|j                  |j                         d {    t        |      }|j                          d {    |j                  dd	       d {   }|d
   }d}||u }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                   |            d x}x}	}|d   d   }d}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                   |            d x}x}	}|d   d   }t#        |      }d}||k(  }|st        j                  d|fd||f      dt%        j&                         v st        j(                  t"              rt        j                  t"              ndt        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                   |            d x}x}x}}|d   d   }d}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                   |            d x}x}	}|j+                          d {    |j,                  j/                          d d d       d {    y 7 7 7 7 7 ;7 # 1 d {  7  sw Y   y xY ww)Nr      )g      %@g(@g333333&@g&@        )r   countlatencies_msavg_msloss_pctr$   r_   )r   rm   Trn   rp   rq   rr   rN   r   r   rL   r   r   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sr   )r6   r8   r9   py7zassert %(py9)spy9r   )r)   r   r   	ping_peerr   rs   rt   ru   rv   r   r   pingr<   rR   r>   r?   r@   r   r:   r;   r=   r   r{   r|   )rB   r/   r}   r~   r   r   rh   r   rC   r   rD   rU   rS   @py_assert6rT   @py_format8@py_format10s                    r(   	test_pingzTestPingPipeline.test_ping8  sy    $&%:a+D34
  g:$$& 	* 	*'-----!(+F.."""!;;z;;;F$<'4'<4''''<4'''<'''4'''''''&>),:
:,
::::,
:::,:::
:::::::f~n5;356;!;6!;;;;6!;;;;;;3;;;3;;;5;;;6;;;!;;;;;;;&>(+3t3+t3333+t333+333t3333333,,.    '')	* 	* 	*- #; !	* 	* 	* 	*s   ANM.NM>6M17"M>M4M>4M75J	M>>M:?M>N(M<)N1M>4M>7M>:M><N>NNNNc                   K   t               }t        ||      }t        j                         4 d {   }|j	                  |j
                         d {    t        |      }|j                          d {    |j                  dddi       d {   }|d   }d}||u }	|	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                          d {    |j                  j!                          d d d       d {    y 7 7 7 i7 O7 ;7 # 1 d {  7  sw Y   y xY ww)Nr_   r   r   r   r   rm   Frn   rp   rq   rr   rN   r   r   r   r   r   r   s               r(   test_ping_missing_peer_idz*TestPingPipeline.test_ping_missing_peer_idP  sq    $&g:$$& 	* 	*'-----!(+F.."""!>>&'1>FFF$<(5(<5((((<5(((<(((5(((((((/w/9////9///9//////////,,.    '')	* 	* 	*- #F !	* 	* 	* 	*   0H GH G+G"G+8G!9G+G$DG++G',G+
H G)H G+!G+$G+'G+)H +G=1G42G=9H N)rX   rY   rZ   r   r   rs   r  r  r[   r*   r(   r   r   7  s<    [[* *. [[* *r*   r   c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestSendFilePipelinec           
      L  K   t               }t        t        dddddd            |_        t	        ||	      }t        j                         4 d {   }|j                  |j                         d {    t        |      }|j                          d {    |j                  d
d       d {   }|d   }d}||u }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                  |            d x}x}	}|d   d   }d}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                  |            d x}x}	}|d   d   }d}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                  |            d x}x}	}|j!                          d {    |j"                  j%                          d d d       d {    y 7 -7 7 7 7 ;7 # 1 d {  7  sw Y   y xY ww)Nabc123ztest.txti   pendingr   QmRoottransfer_id	file_name	file_sizer   progressroot_cidr   r_   z/path/to/test.txtr   rm   Trn   rp   rq   rr   rN   r   r  rL   r   r  )r)   r   r   	send_filer   rs   rt   ru   rv   r   r   r<   rR   r>   r?   r@   r   r{   r|   r   s               r(   test_send_filez#TestSendFilePipeline.test_send_filed  s    $&%< J$sX4
  g:$$& 	* 	*'-----!(+F.."""!++,?LLF$<'4'<4''''<4'''<'''4'''''''&>-0<H<0H<<<<0H<<<0<<<H<<<<<<<&>+.<*<.*<<<<.*<<<.<<<*<<<<<<<,,.    '')	* 	* 	*- #L
 !	* 	* 	* 	*s   AJ$I?J$J5J6"JJJ2J3FJJJ.J$9J:J$JJJJJ$J!JJ!J$c                   K   t               }t        ||      }t        j                         4 d {   }|j	                  |j
                         d {    t        |      }|j                          d {    |j                  dddi       d {   }|d   }d}||u }	|	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                          d {    |j                  j!                          d d d       d {    y 7 7 7 i7 O7 ;7 # 1 d {  7  sw Y   y xY ww)Nr_   r  targetQm123r   rm   Frn   rp   rq   rr   rN   r   r   r   r   r   r   s               r(   test_send_file_missing_filez0TestSendFilePipeline.test_send_file_missing_file{  sr    $&g:$$& 	* 	*'-----!(+F.."""!>>+x>Q>RRF$<(5(<5((((<5(((<(((5(((((((/w/9////9///9//////////,,.    '')	* 	* 	*- #R !	* 	* 	* 	*r  N)rX   rY   rZ   r   r   rs   r  r  r[   r*   r(   r  r  c  r   r*   r  c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestListTransfersPipelinec                 H  K   t               }t        ||      }t        j                         4 d {   }|j	                  |j
                         d {    t        |      }|j                          d {    |j                          d {   }g }||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#                          d {    |j$                  j'                          d d d       d {    y 7 L7 ,7 7 7 :7 # 1 d {  7  sw Y   y xY ww)Nr_   rL   r   	transfersri   rk   rl   )r)   r   rs   rt   ru   rv   r   r   r&   r<   rR   r:   r;   r=   r>   r?   r@   r   r{   r|   )rB   r/   r}   r~   r   r   r  r   rS   r   r   s              r(   test_list_emptyz)TestListTransfersPipeline.test_list_empty  s%    $&g:$$& 
	* 
	*'-----!(+F.."""$3355I ""9?"""9""""""9"""9"""""""""",,.    '')
	* 
	* 
	*- #5 !
	* 
	* 
	* 
	*r   c                   K   t               }t        ddddd      t        ddd	d
d      g|j                  _        t	        ||      }t        j                         4 d {   }|j                  |j                         d {    t        |      }|j                          d {    |j                          d {   }t        |      }d}||k(  }	|	st        j                  d|	fd||f      dt        j                         v st        j                   t              rt        j"                  t              nddt        j                         v st        j                   |      rt        j"                  |      ndt        j"                  |      t        j"                  |      dz  }
dd|
iz  }t%        t        j&                  |            d x}x}	}|d   d   }d}||k(  }|slt        j                  d|fd||f      t        j"                  |      t        j"                  |      dz  }dd|iz  }
t%        t        j&                  |
            d x}x}}|d   d   }d}||k(  }|slt        j                  d|fd||f      t        j"                  |      t        j"                  |      dz  }dd|iz  }
t%        t        j&                  |
            d x}x}}|j)                          d {    |j*                  j-                          d d d       d {    y 7 7 7 |7 g7 ;7 # 1 d {  7  sw Y   y xY ww)Nt1za.txtd   	completedg      ?)r  r  r  r   r  t2zb.bin   transferringg      ?r_   r   rL   r   r   r  r   rO   rP   r   r  r   rq   rr   rN   r   r  )r)   r   r&   r$   r   rs   rt   ru   rv   r   r   r   r<   rR   r:   r;   r=   r>   r?   r@   r   r{   r|   )rB   r/   r}   r~   r   r   r  r   rT   r   rU   rV   r   rC   rD   s                  r(   test_list_with_transfersz2TestListTransfersPipeline.test_list_with_transfers  s;    $&TWT_jmnTWTbmpq/
+ g:$$& 	* 	*'-----!(+F.."""$3355Iy>&Q&>Q&&&&>Q&&&&&&3&&&3&&&&&&y&&&y&&&>&&&Q&&&&&&&Q<.6$6.$6666.$666.666$6666666Q<
+2s2+s2222+s222+222s2222222,,.    '')	* 	* 	*- #5
 !	* 	* 	* 	*s   AM!L"M%L-L "L-'L#(L-?L& H-L--L).L-ML+M L-#L-&L-)L-+M-L?3L64L?;MN)rX   rY   rZ   r   r   rs   r  r$  r[   r*   r(   r  r    s<    [[* *  [[* *r*   r  c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestGetTransferPipelinec                 D  K   t               }t        dddddd      |j                  _        t	        ||      }t        j                         4 d {   }|j                  |j                         d {    t        |      }|j                          d {    |j                  d       d {   }|d	   }d
}||u }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                  |            d x}x}	}|d   d   }d}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                  |            d x}x}	}|j!                          d {    |j"                  j%                          d d d       d {    y 7 7 7 i7 S7 ;7 # 1 d {  7  sw Y   y xY ww)Nabczdoc.pdfrd   r
  r   QmDocr  r_   rm   Trn   rp   rq   rr   rN   r   r  rL   r   )r)   r   get_transferr$   r   rs   rt   ru   rv   r   r   r<   rR   r>   r?   r@   r   r{   r|   r   s               r(   test_get_transfer_foundz/TestGetTransferPipeline.test_get_transfer_found  s    $&,8dsW-
) g:$$& 	* 	*'-----!(+F.."""!..u55F$<'4'<4''''<4'''<'''4'''''''&>+.;);.);;;;.);;;.;;;);;;;;;;,,.    '')	* 	* 	*- #5 !	* 	* 	* 	*s   AH G;H H5G>6"HHH1H2DHHH*H 5H	6H >HHHH	H HHHH c                   K   t               }d |j                  _        t        ||      }t	        j
                         4 d {   }|j                  |j                         d {    t        |      }|j                          d {    |j                  d       d {   }|d   }d}||u }	|	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                          d {    |j                   j#                          d d d       d {    y 7 7 7 e7 O7 ;7 # 1 d {  7  sw Y   y xY ww)Nr_   r   rm   Frn   rp   rq   rr   rN   r   r   r   r   )r)   r*  r$   r   rs   rt   ru   rv   r   r   r<   rR   r>   r?   r@   r   r{   r|   r   s               r(   test_get_transfer_not_foundz3TestGetTransferPipeline.test_get_transfer_not_found  sy    $&,0)g:$$& 	* 	*'-----!(+F.."""!..}==F$<(5(<5((((<5(((<(((5(((((((1&/1;/1111;/111;111/1111111,,.    '')	* 	* 	*- #= !	* 	* 	* 	*r   N)rX   rY   rZ   r   r   rs   r+  r-  r[   r*   r(   r&  r&    s<    [[* ** [[* *r*   r&  c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestCancelTransferPipelinec                 &  K   t               }d|j                  _        t        ||      }t	        j
                         4 d {   }|j                  |j                         d {    t        |      }|j                          d {    |j                  d       d {   }|d   }d}||u }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
dd	|
iz  }t        t        j                  |            d x}x}	}|d
   d   }d}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
dd	|
iz  }t        t        j                  |            d x}x}	}|j                          d {    |j                   j#                          d d d       d {    y 7 7 7 i7 S7 ;7 # 1 d {  7  sw Y   y xY ww)NTr_   r(  rm   rn   rp   rq   rr   rN   r   r  rL   r   r)   cancel_transferr$   r   rs   rt   ru   rv   r   r   r<   rR   r>   r?   r@   r   r{   r|   r   s               r(   test_cancel_transferz/TestCancelTransferPipeline.test_cancel_transfer  s    $&/3,g:$$& 	* 	*'-----!(+F.."""!11%88F$<'4'<4''''<4'''<'''4'''''''&>-09E90E99990E9990999E9999999,,.    '')	* 	* 	*- #8 !	* 	* 	* 	*s   AHG,HG<&G/'"G<	G2
G<"G5#DG<<G8=G<H&G:'H/G<2G<5G<8G<:H<HHH
Hc                   K   t               }d|j                  _        t        ||      }t	        j
                         4 d {   }|j                  |j                         d {    t        |      }|j                          d {    |j                  d       d {   }|d   }d}||u }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
dd	|
iz  }t        t        j                  |            d x}x}	}|j                          d {    |j                   j#                          d d d       d {    y 7 &7 7 7 7 97 # 1 d {  7  sw Y   y xY ww)
NFr_   r   rm   rn   rp   rq   rr   rN   r1  r   s               r(   test_cancel_transfer_not_foundz9TestCancelTransferPipeline.test_cancel_transfer_not_found  s+    $&/4,g:$$& 
	* 
	*'-----!(+F.."""!11-@@F$<(5(<5((((<5(((<(((5(((((((,,.    '')
	* 
	* 
	*- #@ !
	* 
	* 
	* 
	*s   AFE)FE7&E,'"E7	E/
E7"E1#BE79E3:E7F#E5$F,E7/E71E73E75F7F	=F >F	FN)rX   rY   rZ   r   r   rs   r3  r5  r[   r*   r(   r/  r/    s<    [[* *$ [[* *r*   r/  c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestDownloadDirPipelinec                 j  K   t               }d|j                  _        t        ||      }t	        j
                         4 d {   }|j                  |j                         d {    t        |      }|j                          d {    |j                          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}}|j%                          d {    |j&                  j)                          d d d       d {    y 7 L7 ,7 7 7 :7 # 1 d {  7  sw Y   y xY ww)	Nz/home/user/downloadsr_   rL   r   rh   ri   rk   rl   )r)   get_download_dirr$   r   rs   rt   ru   rv   r   r   r<   rR   r:   r;   r=   r>   r?   r@   r   r{   r|   rB   r/   r}   r~   r   r   rh   r   rS   r   r   s              r(   test_get_download_dirz-TestDownloadDirPipeline.test_get_download_dir  s7    $&0F  -g:$$& 
	* 
	*'-----!(+F.."""!2244F33633333633333336333633333333333,,.    '')
	* 
	* 
	*- #4 !
	* 
	* 
	* 
	*s   AF3FF3F&F'"F	F
F!F"B=FF F>F3	F
F3FFFFF3F0$F'%F0,F3c                 l  K   t               }d|j                  _        t        ||      }t	        j
                         4 d {   }|j                  |j                         d {    t        |      }|j                          d {    |j                  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}}|j%                          d {    |j&                  j)                          d d d       d {    y 7 M7 -7 7 7 :7 # 1 d {  7  sw Y   y xY ww)	Nz/new/downloadsr_   rL   r   rh   ri   rk   rl   )r)   set_download_dirr$   r   rs   rt   ru   rv   r   r   r<   rR   r:   r;   r=   r>   r?   r@   r   r{   r|   r:  s              r(   test_set_download_dirz-TestDownloadDirPipeline.test_set_download_dir  s:    $&0@  -g:$$& 
	* 
	*'-----!(+F.."""!223CDDF--6-----6-------6---6-----------,,.    '')
	* 
	* 
	*- #D !
	* 
	* 
	* 
	*s   AF4FF4F&F'"F	F
F"F#B=F F!F?F4
FF4FFFFF4F1%F(&F1-F4N)rX   rY   rZ   r   r   rs   r;  r>  r[   r*   r(   r7  r7  
  s<    [[* *" [[* *r*   r7  c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestMultipleClientsc                   K   t        d      }t        ||      }t        j                         4 d {   }|j	                  |j
                         d {    t        |      }t        |      }|j                          d {    |j                          d {    |j                          d {   }|j                          d {   }|d   }	d}
|	|
u }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }d	d
|iz  }t        t        j                  |            d x}	x}}
|d   }	d}
|	|
u }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }d	d
|iz  }t        t        j                  |            d x}	x}}
|d   d   }	d}
|	|
k(  }|slt        j                  d|fd|	|
f      t        j                  |	      t        j                  |
      dz  }d	d
|iz  }t        t        j                  |            d x}	x}}
|j                          d {    |j                          d {    |j                  j!                          d d d       d {    y 7 z7 Z7 /7 7 7 7 Y7 C7 # 1 d {  7  sw Y   y xY ww)NQmSharedr   r_   rm   Trn   rp   rq   rr   rN   r   r   rL   r   r   )rB   r/   r}   r~   r   c1c2r   r2r   rC   r   rD   rU   s                 r(   test_two_clientsz$TestMultipleClients.test_two_clients3  s    $Z8g:$$& 	* 	*'-----h'Bh'B**,**,yy{"Byy{"Bd8#t#8t####8t###8###t#######d8#t#8t####8t###8###t#######f:i(6J6(J6666(J666(666J6666666((*((*  '')!	* 	* 	*- ""
 	* 	* 	* 	*s   2KJ.KKJ1-KJ4KJ7K5J:6KJ=FK&K 'K>K?KK(K)K1K4K7K:K=K KKKKKKKc                   K   t        dg      }t        ||      }t        j                         4 d {   }|j	                  |j
                         d {    t        |      }|j                          d {    |j                          d {   }|d   }d}||u }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
d	d
|
iz  }t        t        j                  |            d x}x}	}|j                          d {   }|d   }d}||u }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
d	d
|
iz  }t        t        j                  |            d x}x}	}|j                          d {   }t!        |t"              }|sd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dt%        j&                         v st        j(                  t"              rt        j                  t"              ndt        j                  |      dz  }
t        t        j                  |
            d }|j+                          d {   }t!        |t"              }|sd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dt%        j&                         v st        j(                  t"              rt        j                  t"              ndt        j                  |      dz  }
t        t        j                  |
            d }|j-                          d {   }t!        |t.              }|sd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dt%        j&                         v st        j(                  t.              rt        j                  t.              ndt        j                  |      dz  }
t        t        j                  |
            d }|j1                          d {    |j2                  j5                          d d d       d {    y 7 d7 D7 $7 7 {7 7 7 }7 G7 # 1 d {  7  sw Y   y xY ww)Nr   )r   r_   rm   Trn   rp   rq   rr   rN   r3   r4   r3listr5   r4r5rI   )r)   r   rs   rt   ru   rv   r   r   ra   r<   rR   r>   r?   r@   r#   r%   r4   rI  r:   r;   r=   r&   r9  rI   r   r{   r|   )rB   r/   r}   r~   r   r   r   r   rC   r   rD   rU   rE  rH  rJ  rK  s                   r(   test_sequential_requestsz,TestMultipleClients.test_sequential_requestsJ  s`    $,E+FGg:$$& 	* 	*'-----!(+F.."""}}&Bd8#t#8t####8t###8###t#######**,,Bd8#t#8t####8t###8###t#######,,..Bb$'''''''':''':''''''b'''b''''''$'''$'''''''''',,..Bb$'''''''':''':''''''b'''b''''''$'''$''''''''''..00Bb#&&&&&&&&:&&&:&&&&&&b&&&b&&&&&&#&&&#&&&&&&&&&&,,.    '')-	* 	* 	*- #& - / / 1 !+	* 	* 	* 	*s   3W
VW
V5V"V5;V<V5V"BV5*V%+BV5V(D7V59V+:D7V51V.2D7V5)V1*V5W
V3W
V5V5"V5%V5(V5+V5.V51V53W
5W;V><WW
N)rX   rY   rZ   r   r   rs   rF  rL  r[   r*   r(   r@  r@  2  s<    [[* *, [[* *r*   r@  c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestErrorHandlingc                   K   t               }t        ||      }t        j                         4 d {   }|j	                  |j
                         d {    t        |      }|j                          d {    |j                  d       d {   }|d   }d}||u }	|	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                          d {    |j                  j!                          d d d       d {    y 7 7 7 e7 O7 ;7 # 1 d {  7  sw Y   y xY ww)Nr_   nonexistent_actionrm   Frn   rp   rq   rr   rN   r   r   r   r   r   r   s               r(   test_unknown_actionz%TestErrorHandling.test_unknown_actionk  sm    $&g:$$& 	* 	*'-----!(+F.."""!>>*>??F$<(5(<5((((<5(((<(((5(((((((#6vg6#6666#666#6666666666,,.    '')	* 	* 	*- #? !	* 	* 	* 	*s   0G<GG<G'G"G'8G9G'G DG''G#(G'G<G%G<G'G' G'#G'%G<'G9-G0.G95G<c                 0  K   t               }t        d      |j                  _        t	        ||      }t        j                         4 d {   }|j                  |j                         d {    t        |      }|j                          d {    |j                  d       d {   }|d   }d}||u }	|	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#                          d {    |j$                  j'                          d d d       d {    y 7 7 7 e7 O7 ;7 # 1 d {  7  sw Y   y xY ww)NzEngine explodedr_   r%   rm   Frn   rp   rq   rr   rN   r   r   r   )r)   RuntimeErrorr%   side_effectr   rs   rt   ru   rv   r   r   r   r<   rR   r>   r?   r@   r   r{   r|   )rB   r/   r}   r~   r   r   rawr   rC   r   rD   rU   s               r(   test_service_error_propagatesz/TestErrorHandling.test_service_error_propagates}  s    $&-9:K-L*g:$$& 	* 	*'-----!(+F.."""'788Ct9%%9%%%%9%%%9%%%%%%%%%%$4G4$4444$444$4444444444,,.    '')	* 	* 	*- #8 !	* 	* 	* 	*s   A
HG1HH/G40"HG7H+G:,DHG=H H+G?,H4H7H:H=H?HHH
HHN)rX   rY   rZ   r   r   rs   rQ  rV  r[   r*   r(   rN  rN  j  s<    [[* *" [[* *r*   rN  c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestClientConnectionErrorsc                    K   t               }t        j                  t        d      5  |j	                          d {    d d d        y 7 # 1 sw Y   y xY ww)NzNot connectedmatch)r   r   raisesConnectionErrorra   rB   r   s     r(   test_not_connected_errorz3TestClientConnectionErrors.test_not_connected_error  sG     ]]?/B 	"--/!!	" 	"!	" 	"s,   &AAA
A	A
AAAc                    K   t        d      }t        j                  t        d      5  |j	                          d {    d d d        y 7 # 1 sw Y   y xY ww)Nz#/tmp/nonexistent_peerdrop_test.sockzDaemon not runningrZ  )r   r   r\  r]  r   r^  s     r(   test_daemon_not_running_errorz8TestClientConnectionErrors.test_daemon_not_running_error  sM     CD]]?2FG 	#.."""	# 	#"	# 	#s,   'AAAA	AAAAN)rX   rY   rZ   r   r   rs   r_  ra  r[   r*   r(   rX  rX    s<    [[" "
 [[# #r*   rX  c                   L    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zy)TestImportsz8Verify all modules import correctly after restructuring.c                 ^   ddl m}m} d }||u}|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 )	Nr   )r   r   re   rg   r   ri   rk   rl   )peerdrop.constantsr   r   r<   rR   r:   r;   r=   r>   r?   r@   )rB   r   r   r   rS   r   r   s          r(   test_import_constantsz!TestImports.test_import_constants  sb    J(,, ,,,, ,,,,,, ,,, ,,,,,,,,,,r*   c                 ^   ddl m}m} d }||u}|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 )	Nr   r   re   rg   r   ri   rk   rl   )peerdrop.utils.framingr   r   r<   rR   r:   r;   r=   r>   r?   r@   )rB   r   r   r   rS   r   r   s          r(   test_import_framingzTestImports.test_import_framing  sb    S)--!----!------!---!----------r*   c                 Z   ddl m} d }||u}|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 )	Nr   )r	   re   rg   r	   ri   rk   rl   )
peerdrop.core.servicer	   r<   rR   r:   r;   r=   r>   r?   r@   )rB   r	   r   rS   r   r   s         r(   test_import_servicezTestImports.test_import_service  sb    :'++t++++t++++++++++++t+++++++r*   c                 4   ddl m}m} t        |      }d}||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  t              rt	        j                  t              nddt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }d	d
|iz  }t        t	        j                  |            d x}x}}y )Nr   r   r   rL   r   r   r   r   rO   rP   )peerdrop.daemon.handlerr   r   r   r<   rR   r:   r;   r=   r>   r?   r@   )rB   r   r   r   rT   r   rU   rV   s           r(   test_import_handlerzTestImports.test_import_handler  s    I=!'R'!R''''!R''''''s'''s''''''='''='''!'''R'''''''r*   c                 Z   ddl m} d }||u}|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 )	Nr   r   re   rg   r   ri   rk   rl   )
peerdrop.daemon.serverr   r<   rR   r:   r;   r=   r>   r?   r@   )rB   r   r   rS   r   r   s         r(   test_import_serverzTestImports.test_import_server  s^    7#''|4''''|4''''''|'''|'''4'''''''r*   c                 Z   ddl m} d }||u}|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 )	Nr   r   re   rg   r   ri   rk   rl   )
peerdrop.interfaces.cli.clientr   r<   rR   r:   r;   r=   r>   r?   r@   )rB   r   r   rS   r   r   s         r(   test_import_clientzTestImports.test_import_client  s^    ?#''|4''''|4''''''|'''|'''4'''''''r*   c                 Z   ddl m} d }||u}|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 )	Nr   )
RestServerre   rg   rw  ri   rk   rl   )
peerdrop.interfaces.rest.apprw  r<   rR   r:   r;   r=   r>   r?   r@   )rB   rw  r   rS   r   r   s         r(   test_import_restzTestImports.test_import_rest  s^    ;!%%z%%%%z%%%%%%z%%%z%%%%%%%%%%r*   c                 Z   ddl m} d }||u}|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 )	Nr   )runre   rg   r{  ri   rk   rl   )
peerdrop.interfaces.mcp.serverr{  r<   rR   r:   r;   r=   r>   r?   r@   )rB   r{  r   rS   r   r   s         r(   test_import_mcpzTestImports.test_import_mcp  s]    6s$s$ss$r*   c                     ddl }t        j                  t              5  |j	                  d       ddd       y# 1 sw Y   yxY w)z'Verify daemon/rest.py no longer exists.r   Nzpeerdrop.daemon.rest	importlibr   r\  ModuleNotFoundErrorimport_modulerB   r  s     r(    test_no_stale_daemon_rest_importz,TestImports.test_no_stale_daemon_rest_import  s6    ]]./ 	<##$:;	< 	< 	<	   9Ac                     ddl }t        j                  t              5  |j	                  d       ddd       y# 1 sw Y   yxY w)z&Verify peerdrop/mcp/ no longer exists.r   Nzpeerdrop.mcp.serverr  r  s     r(   test_no_stale_mcp_importz$TestImports.test_no_stale_mcp_import  s6    ]]./ 	;##$9:	; 	; 	;r  N)rX   rY   rZ   r   rf  ri  rl  ro  rr  ru  ry  r}  r  r  r[   r*   r(   rc  rc    s7    B-.,(((&<;r*   rc  )
QmTestNodeN)Ar   builtinsr:   _pytest.assertion.rewrite	assertionrewriter<   r,   pathlibr   unittest.mockr   r   r   rs   re  r   r   r   rk  r	   r
   r   r   r   peerdrop.core.modelsr   r   r   rq  r   rn  r   r   peerdrop.daemon.protocolr   r   rh  r   r   rt  r   rI   rI  r)   fixturer/   r1   r]   r   r   r   r   r   r   r   r  r  r&  r/  r7  r@  rN  rX  rc  r[   r*   r(   <module>r     sJ      .   X X d d ? ? / A B K 7  "9t  ) )C C * *^1 1:* *** *,(* (*V'* '*T(* (*V)* )*X(* (*V'* '*T(* (*V$* $*N#* #*P3* 3*p$* $*R# # -; -;r*   