
    }wj_                        d Z 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mZ ddlZddl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 	 	 d*d	ed
ee   dz  defdZ ejB                  d        Z" G d d      Z# G d d      Z$ G d d      Z% G d d      Z& G d d      Z' G d d      Z( G d d      Z) G d d      Z* G d d      Z+ G d  d!      Z, G d" d#      Z- G d$ d%      Z. G d& d'      Z/ G d( d)      Z0y)+u   Comprehensive E2E tests for PeerDrop service layer.

Tests the full pipeline: DaemonClient → IPC → DaemonServer → RequestHandler → ServiceInterface
    N)Path)	MagicMock	AsyncMock)ServiceInterfaceIdentityInfoPeerInfoTransferInfo
PingResult)PeerTransferTransferStatus)DaemonServer)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      8/Users/sumanjeet/code/PeerDrop/tests/test_e2e_service.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                   H    e Zd ZdZej
                  j                  d        Zy)TestHealthPipelineuC   E2E: client.health() → IPC → handler → service.get_identity()c                   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   	sock_pathokTisz%(py1)s is %(py4)spy1py4assert %(py6)spy6datastatus==z%(py1)s == %(py4)sr   r   r   trioopen_nurserystartserver   connecthealth
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanationclosecancel_scopecancelselfr"   serviceservernurseryclientresult@py_assert0@py_assert3@py_assert2@py_format5@py_format7s               r   test_health_returns_okz)TestHealthPipeline.test_health_returns_ok/   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)__name__
__module____qualname____doc__pytestmarkr9   rS    r   r   r$   r$   ,   s!    M[[* *r   r$   c                   H    e Zd ZdZej
                  j                  d        Zy)TestIdentityPipelineuI   E2E: client.get_identity() → IPC → handler → service.get_identity()c                 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(   r*   Tr+   r-   r.   r1   r2   r3   r   r5   r7   r   )z%(py1)s == %(py3)s)r/   py3assert %(py5)spy5)r   r   r9   r:   r;   r<   r   r=   r   r?   r@   rA   rB   rC   @py_builtinslocals_should_repr_global_namerD   rE   rF   )rH   r"   r   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   @py_format4@py_format6s                  r   test_get_identityz&TestIdentityPipeline.test_get_identityF   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)rT   rU   rV   rW   rX   rY   r9   rh   rZ   r   r   r\   r\   C   s!    S[[* *r   r\   c                       e Zd ZdZej
                  j                  d        Zej
                  j                  d        Zy)TestDiscoverPeersPipelineuM   E2E: client.discover_peers() → IPC → handler → service.discover_peers()c                 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(   r5   z%(py0)s == %(py3)speerspy0r`   ra   rb   )r   r   r9   r:   r;   r<   r   r=   r   r?   r@   rc   rd   re   rA   rB   rC   rD   rE   rF   )rH   r"   rI   rJ   rK   rL   rm   rP   @py_assert1rf   rg   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(      r5   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slenrm   ro   r/   r`   r2   assert %(py8)spy8r   r   r7   r.   r1   r2   rw      )r   r   r   r   r   r9   r:   r;   r<   r   r=   r}   r?   r@   rc   rd   re   rA   rB   rC   rD   rE   rF   )rH   r"   rI   rJ   rK   rL   rm   rP   @py_assert5@py_assert4rR   @py_format9rN   rO   rQ   s                  r   test_discover_with_peersz2TestDiscoverPeersPipeline.test_discover_with_peerso   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)	rT   rU   rV   rW   rX   rY   r9   rq   r   rZ   r   r   rj   rj   [   s?    W[[* *  [[* *r   rj   c                       e Zd ZdZej
                  j                  d        Zej
                  j                  d        Zej
                  j                  d        Z	y)TestGetPeerPipelineuA   E2E: client.get_peer() → IPC → handler → service.get_peer()c                 H  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}	}|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QmTargetz/ip4/10.0.0.1/tcp/4001TargetTrv   r(   r*   r+   r-   r.   r1   r2   r3   r   r5   r7   rw   )r   r   get_peerr   r   r9   r:   r;   r<   r   r=   r?   r@   rA   rB   rC   rD   rE   rF   rG   s               r   test_get_peer_foundz'TestGetPeerPipeline.test_get_peer_found   s    $&(0'?&@x[_)
% g:$$& 	* 	*'-----!(+F.."""!??:66F$<'4'<4''''<4'''<'''4'''''''&>),:
:,
::::,
:::,:::
:::::::&>&)5X5)X5555)X555)555X5555555,,.    '')	* 	* 	*- #6
 !	* 	* 	* 	*s   AJ"I=J"J4J 5"JJJ0J1FJJ	J,J"7J8J" JJJ	JJ"JJJJ"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(   QmNonexistentr*   Fr+   r-   r.   r1   r2   	not founderrorinz%(py1)s in %(py4)s)r   r   r   r   r9   r:   r;   r<   r   r=   r?   r@   rA   rB   rC   rD   rE   rF   rG   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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   paramsr*   Fr+   r-   r.   r1   r2   Missingr   r   r   r   r   r9   r:   r;   r<   r   r=   requestr?   r@   rA   rB   rC   rD   rE   rF   rG   s               r   test_get_peer_missing_idz,TestGetPeerPipeline.test_get_peer_missing_id   sm    $&g:$$& 	* 	*'-----!(+F.."""!>>*R>@@F$<(5(<5((((<5(((<(((5(((((((/w/9////9///9//////////,,.    '')	* 	* 	*- #@ !	* 	* 	* 	*   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)
rT   rU   rV   rW   rX   rY   r9   r   r   r   rZ   r   r   r   r      s]    K[[* ** [[* *$ [[* *r   r   c                       e Zd ZdZej
                  j                  d        Zej
                  j                  d        Zy)TestConnectPeerPipelineuI   E2E: client.connect_peer() → IPC → handler → service.connect_peer()c                   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NewPeerTrv   )r   )addrs    r   fake_connectzGTestConnectPeerPipeline.test_connect_peer_success.<locals>.fake_connect   s     M$i[_``s   r(   z%/ip4/1.2.3.4/tcp/4001/p2p/QmConnectedr*   Tr+   r-   r.   r1   r2   r3   r   r   r5   r7   )r   connect_peerr   r9   r:   r;   r<   r   r=   r?   r@   rA   rB   rC   rD   rE   rF   )rH   r"   rI   r   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   s                r   test_connect_peer_successz1TestConnectPeerPipeline.test_connect_peer_success   s    $&	a  ,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   r   r*   Fr+   r-   r.   r1   r2   r   r   r   r   r   rG   s               r   test_connect_peer_missing_addrz6TestConnectPeerPipeline.test_connect_peer_missing_addr   m    $&g:$$& 	* 	*'-----!(+F.."""!>>.>DDF$<(5(<5((((<5(((<(((5(((((((/w/9////9///9//////////,,.    '')	* 	* 	*- #D !	* 	* 	* 	*r   N)	rT   rU   rV   rW   rX   rY   r9   r   r   rZ   r   r   r   r      s?    S[[* *, [[* *r   r   c                       e Zd ZdZej
                  j                  d        Zej
                  j                  d        Zej
                  j                  d        Z	y)TestPingPipelineu>   E2E: client.ping() → IPC → handler → service.ping_peer()c           	      *  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   r*   Tr+   r-   r.   r1   r2   r3   r   r5   r7   r   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)sr}   )ro   py2r0   py7zassert %(py9)spy9r   )r   r   r
   	ping_peerr   r9   r:   r;   r<   r   r=   pingr?   r@   rA   rB   rC   r}   rc   rd   re   rD   rE   rF   )rH   r"   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rp   @py_assert6r   @py_format8@py_format10s                    r   test_ping_successz"TestPingPipeline.test_ping_success   s|    $&%:+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           	      J  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}	}|j#                          d {    |j$                  j'                          d d d       d {    y 7 7 7 k7 S7 ;7 # 1 d {  7  sw Y   y xY ww)NQmFlakyr   )g      $@g      (@g      &@gfffff@@r   r   r(   r   r*   Tr+   r-   r.   r1   r2   r3   r   r5   r7   )r   r   r
   r   r   r9   r:   r;   r<   r   r=   r   r?   r@   rA   rB   rC   rD   rE   rF   rG   s               r   test_ping_with_lossz$TestPingPipeline.test_ping_with_loss  s    $&%:)4
  g:$$& 	* 	*'-----!(+F.."""!;;y;::F$<'4'<4''''<4'''<'''4'''''''&>*-55-5555-555-5555555555,,.    '')	* 	* 	*- #: !	* 	* 	* 	*s   AH#G>H#H6H7"HHH4H5DHH
H-H#8H9H#HHH
HH#H HH H#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   r*   Fr+   r-   r.   r1   r2   r   r   r   r   r   rG   s               r   test_ping_missing_peer_idz*TestPingPipeline.test_ping_missing_peer_id+  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)
rT   rU   rV   rW   rX   rY   r9   r   r   r   rZ   r   r   r   r      s]    H[[* *4 [[* *0 [[* *r   r   c                       e Zd ZdZej
                  j                  d        Zej
                  j                  d        Zej
                  j                  d        Z	y)TestSendFilePipelineuC   E2E: client.send_file() → IPC → handler → service.send_file()c           
      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abc123test.txti   pendingr   QmRoottransfer_id	file_name	file_sizer4   progressroot_cidr   r(   z/path/to/test.txtr   r*   Tr+   r-   r.   r1   r2   r3   r   r5   r7   r   )r   r   r	   	send_filer   r9   r:   r;   r<   r   r=   r?   r@   rA   rB   rC   rD   rE   rF   rG   s               r   test_send_file_successz+TestSendFilePipeline.test_send_file_successA  s    $&%<  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   r*   Fr+   r-   r.   r1   r2   zMissing 'file'r   r   r   r   rG   s               r   test_send_file_missing_filez0TestSendFilePipeline.test_send_file_missing_file\  su    $&g:$$& 	* 	*'-----!(+F.."""!>>+x>Q>RRF$<(5(<5((((<5(((<(((5(((((((#6vg6#6666#666#6666666666,,.    '')	* 	* 	*- #R !	* 	* 	* 	*r   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   filer   r   r*   Fr+   r-   r.   r1   r2   r   r   r   r   r   rG   s               r   test_send_file_missing_targetz2TestSendFilePipeline.test_send_file_missing_targetn  sr    $&g:$$& 	* 	*'-----!(+F.."""!>>+vz>R>SSF$<(5(<5((((<5(((<(((5(((((((/w/9////9///9//////////,,.    '')	* 	* 	*- #S !	* 	* 	* 	*r   N)
rT   rU   rV   rW   rX   rY   r9   r   r   r   rZ   r   r   r   r   >  s]    M[[* *4 [[* *" [[* *r   r   c                       e Zd ZdZej
                  j                  d        Zej
                  j                  d        Zy)TestListTransfersPipelineuM   E2E: client.list_transfers() → IPC → handler → service.list_transfers()c                 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(   r5   rl   	transfersrn   ra   rb   )r   r   r9   r:   r;   r<   r   r=   r   r?   r@   rc   rd   re   rA   rB   rC   rD   rE   rF   )rH   r"   rI   rJ   rK   rL   r   rP   rp   rf   rg   s              r   test_list_emptyz)TestListTransfersPipeline.test_list_empty  s%    $&g:$$& 
	* 
	*'-----!(+F.."""$3355I ""9?"""9""""""9"""9"""""""""",,.    '')
	* 
	* 
	*- #5 !
	* 
	* 
	* 
	*rr   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}}|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 m7 ;7 # 1 d {  7  sw Y   y xY ww)Nt1za.txtd   	completedg      ?)r   r   r   r4   r   t2zb.bin   transferringg      ?r(   r{   r5   r|   r}   r   r~   r   r   r   r   r7   r.   r1   r2   r4   r   r   )r   r	   r   r   r   r9   r:   r;   r<   r   r=   r}   r?   r@   rc   rd   re   rA   rB   rC   rD   rE   rF   )rH   r"   rI   rJ   rK   rL   r   rP   r   r   rR   r   rN   rO   rQ   s                  r   test_list_with_transfersz2TestListTransfersPipeline.test_list_with_transfers  s    $& Gs"S  Gs%	/
+ 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<)8[8)[8888)[888)888[8888888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Q!P#"Q%P3P&"P3'P)(P3?P, L3P33P/4P3QP1Q&P3)P3,P3/P31Q3Q9P<:QQN)	rT   rU   rV   rW   rX   rY   r9   r   r   rZ   r   r   r   r     s?    W[[* *  [[* *r   r   c                       e Zd ZdZej
                  j                  d        Zej
                  j                  d        Zej
                  j                  d        Z	y)TestGetTransferPipelineuI   E2E: client.get_transfer() → IPC → handler → service.get_transfer()c                 J  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}	}|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abczdoc.pdfi   r   r   QmDocr   r(   r*   Tr+   r-   r.   r1   r2   r3   r   r5   r7   r   )r   r	   get_transferr   r   r9   r:   r;   r<   r   r=   r?   r@   rA   rB   rC   rD   rE   rF   rG   s               r   test_get_transfer_foundz/TestGetTransferPipeline.test_get_transfer_found  s    $&,8dsW-
) g:$$& 	* 	*'-----!(+F.."""!..u55F$<'4'<4''''<4'''<'''4'''''''&>+.;);.);;;;.);;;.;;;);;;;;;;&>*-88-8888-888-8888888888,,.    '')	* 	* 	*- #5
 !	* 	* 	* 	*s   AJ#I>J#J5J6"JJJ1J2FJJ
J-J#8J9J#JJJ
JJ#J JJ J#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(   nonexistentr*   Fr+   r-   r.   r1   r2   r   r   r   r   )r   r   r   r   r9   r:   r;   r<   r   r=   r?   r@   rA   rB   rC   rD   rE   rF   rG   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   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   r   r*   Fr+   r-   r.   r1   r2   r   r   r   r   r   rG   s               r   test_get_transfer_missing_idz4TestGetTransferPipeline.test_get_transfer_missing_id  r   r   N)
rT   rU   rV   rW   rX   rY   r9   r   r   r   rZ   r   r   r   r     s]    S[[* *, [[* *$ [[* *r   r   c                       e Zd ZdZej
                  j                  d        Zej
                  j                  d        Zy)TestCancelTransferPipelineuO   E2E: client.cancel_transfer() → IPC → handler → service.cancel_transfer()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   }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   r*   r+   r-   r.   r1   r2   r3   r   r5   r7   r   cancel_transferr   r   r9   r:   r;   r<   r   r=   r?   r@   rA   rB   rC   rD   rE   rF   rG   s               r   test_cancel_transfer_successz7TestCancelTransferPipeline.test_cancel_transfer_success  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   r*   r+   r-   r.   r1   r2   r   rG   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)	rT   rU   rV   rW   rX   rY   r9   r   r   rZ   r   r   r   r     s?    Y[[* *$ [[* *r   r   c                       e Zd ZdZej
                  j                  d        Zej
                  j                  d        Zej
                  j                  d        Z	y)TestDownloadDirPipelinez0E2E: get/set download dir through full pipeline.c                 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(   r5   rl   rM   rn   ra   rb   )r   get_download_dirr   r   r9   r:   r;   r<   r   r=   r?   r@   rc   rd   re   rA   rB   rC   rD   rE   rF   rH   r"   rI   rJ   rK   rL   rM   rP   rp   rf   rg   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                   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                  j%                  d       |j'                          d {    |j(                  j+                          d d d       d {    y 7 h7 H7 (7 7 ;7 # 1 d {  7  sw Y   y xY ww)	Nz/new/downloadsr(   r5   rl   rM   rn   ra   rb   )r   set_download_dirr   r   r9   r:   r;   r<   r   r=   r?   r@   rc   rd   re   rA   rB   rC   assert_called_once_withrD   rE   rF   r  s              r   test_set_download_dirz-TestDownloadDirPipeline.test_set_download_dir3  sO    $&0@  -g:$$& 	* 	*'-----!(+F.."""!223CDDF--6-----6-------6---6-----------$$<<=MN,,.    '')	* 	* 	*- #D !	* 	* 	* 	*s   AGF+GF;&F.'"F;	F1
F;"F4#CF;;F7<F;G%F9&G.F;1F;4F;7F;9G;GGG	G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  r   r*   Fr+   r-   r.   r1   r2   r   r   r   r   r   rG   s               r   test_set_download_dir_missingz5TestDownloadDirPipeline.test_set_download_dir_missingF  sn    $&g:$$& 	* 	*'-----!(+F.."""!>>*<R>HHF$<(5(<5((((<5(((<(((5(((((((/w/9////9///9//////////,,.    '')	* 	* 	*- #H !	* 	* 	* 	*r   N)
rT   rU   rV   rW   rX   rY   r9   r  r  r	  rZ   r   r   r   r     s]    :[[* *" [[* *$ [[* *r   r   c                       e Zd ZdZej
                  j                  d        Zej
                  j                  d        Zy)TestMultipleClientsz0E2E: Multiple clients connecting simultaneously.c                   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}}
|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 7 7 7 7 7 s7 Y7 C7 # 1 d {  7  sw Y   y xY ww)NQmSharedr'   r(   r*   Tr+   r-   r.   r1   r2   r3   r   r5   r7   r8   )rH   r"   rI   rJ   rK   c1c2r1r2rN   rO   rP   rQ   rR   s                 r   test_two_clients_independentz0TestMultipleClients.test_two_clients_independent^  sU    $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f:i(6J6(J6666(J666(666J6666666((*((*  '')#	* 	* 	*- "" !	* 	* 	* 	*s   2ML1MM	L4-M	L7M	L:M	5L=6M	M HM	)M*M	MM	 M+M,M4M	7M	:M	=M	 M	M	M	M	MMMM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(   r*   Tr+   r-   r.   r1   r2   z5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}
isinstancer3list)ro   r/   r   r0   r4r5str)r   r   r9   r:   r;   r<   r   r=   r>   r?   r@   rA   rB   rC   r   r   r  r  rc   rd   re   r   r  r  rD   rE   rF   )rH   r"   rI   rJ   rK   rL   r  rN   rO   rP   rQ   rR   r  r  r  r  s                   r   *test_sequential_requests_on_one_connectionz>TestMultipleClients.test_sequential_requests_on_one_connectionv  sd    $,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)	rT   rU   rV   rW   rX   rY   r9   r  r  rZ   r   r   r  r  [  s?    :[[* *. [[* *r   r  c                       e Zd ZdZej
                  j                  d        Zej
                  j                  d        Zy)TestErrorHandlingz*E2E: Error handling through full pipeline.c                   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_actionr*   Fr+   r-   r.   r1   r2   zUnknown actionr   r   r   r   rG   s               r   test_unknown_actionz%TestErrorHandling.test_unknown_action  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                 f  K   t               }t        d      |j                  _        t	        ||      }t        j                         4 d {   }|j                  |j                         d {    t        |      }|j                          d {    |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 }7 h7 R7 >7 # 1 d {  7  sw Y   y xY ww)NzEngine explodedr(   r   r*   Fr+   r-   r.   r1   r2   r   r   r   )r   RuntimeErrorr   side_effectr   r9   r:   r;   r<   r   r=   r   r?   r@   rA   rB   rC   rD   rE   rF   )rH   r"   rI   rJ   rK   rL   rM   rawrN   rO   rP   rQ   rR   s                r   test_service_error_propagatesz/TestErrorHandling.test_service_error_propagates  s    $&-9:K-L*g:$$& 	* 	*'-----!(+F.."""!0022F '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,,.    '')	* 	* 	*- #2 9 !	* 	* 	* 	*s   A
H1H	H1H/H0"HHH*H+HHDHHH8H1HH1HHHHHH1H."H%#H.*H1N)	rT   rU   rV   rW   rX   rY   r9   r  r$  rZ   r   r   r  r    s?    4[[* *" [[* *r   r  c                       e Zd ZdZej
                  j                  d        Zej
                  j                  d        Zy)TestClientConnectionErrorsz&E2E: Client connection error handling.c                    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   rX   raisesConnectionErrorr>   rH   rL   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 runningr(  )r   rX   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)	rT   rU   rV   rW   rX   rY   r9   r-  r/  rZ   r   r   r&  r&    s?    0[[" "
 [[# #r   r&  )
QmTestNodeN)1rW   builtinsrc   _pytest.assertion.rewrite	assertionrewriter?   r   ospathlibr   unittest.mockr   r   rX   r9   peerdrop.core.servicer   r   r   r	   r
   peerdrop.core.modelsr   r   r   peerdrop.daemon.serverr   peerdrop.interfaces.cli.clientr   r  r  r   fixturer"   r$   r\   rj   r   r   r   r   r   r   r   r   r  r  r&  rZ   r   r   <module>r=     s  
   	  .   d d ? ? / 7  "9t  ) )* *.* *0** **Z<* <*~** **ZG* G*T@* @*F1* 1*h=* =*@&* &*R8* 8*z7* 7*x** **^# #r   