
    }wj:                        d Z ddlZddlmc m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 Z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y)z7Comprehensive unit tests for PeerDrop ServiceInterface.    N)	MagicMock	AsyncMockpatch)ServiceInterfaceIdentityInfoPeerInfoTransferInfo
PingResult)PeerTransferTransferStatusc                     t               } d| _        d| j                  _        dg| j                  _        d| j
                  _        g | j                  _        g | j                  _        d| j                  _        d| j                  _        | S )zCreate a mock PeerEngine.FQmLocalPeer/ip4/127.0.0.1/tcp/4001/tmp/downloadsN)
r   _startedget_peer_idreturn_value	get_addrsget_download_dirdiscover_peerslist_transfersget_transferget_peer)engines    4/Users/sumanjeet/code/PeerDrop/tests/test_service.py_make_enginer      sx    [FFO&3F#%>$?F!+;F()+F&)+F&'+F$#'FOO M    c                  v    t               }| j                         D ]  \  }}t        |||        t        |      S )z-Create a ServiceInterface with a mock engine.)r   itemssetattrr   )engine_overridesr   kvs       r   _make_servicer%       s<    ^F &&( 11F##r   c                       e Zd Zd Zd Zy)TestIdentityc                 Z   t               }|j                         }|j                  }d}||k(  }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }dg}||k(  }|st        j                  d|fd	||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )
Nr   ==z/%(py2)s
{%(py2)s = %(py0)s.peer_id
} == %(py5)sidentitypy0py2py5assert %(py7)spy7r   )z-%(py2)s
{%(py2)s = %(py0)s.addrs
} == %(py5)s)r%   get_identitypeer_id
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationaddrs)selfservicer,   @py_assert1@py_assert4@py_assert3@py_format6@py_format8s           r   test_get_identityzTestIdentity.test_get_identity+   s    /'')0=0=0000=000000x000x000000=0000000~~<";!<<~!<<<<<~!<<<<<<<x<<<x<<<~<<<!<<<<<<<<r   c                    ddg}t               }||j                  j                  _        |j	                         }|j	                         }|j
                  }t        |      }d}||k(  }|s
t        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                  |      t        j                  |      dz  }d	d
|iz  }	t        t        j                  |	            d x}x}x}}y )Nr   z/ip4/192.168.1.1/tcp/4001   r)   zK%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.addrs
})
} == %(py8)slenr,   r.   py1py3r0   py8assert %(py10)spy10)r%   _enginer   r   r3   r=   rI   r5   r6   r7   r8   r9   r:   r;   r<   )
r>   r=   r?   r,   @py_assert2rA   @py_assert7@py_assert6@py_format9@py_format11s
             r    test_get_identity_multiple_addrsz-TestIdentity.test_get_identity_multiple_addrs1   s    *,GH/16!!.'')'')>>'s>"'a'"a''''"a''''''s'''s''''''8'''8'''>'''"'''a'''''''r   N)__name__
__module____qualname__rE   rV    r   r   r'   r'   *   s    =(r   r'   c                       e Zd Zd Zd Zej                  j                  d        Zej                  j                  d        Z	y)TestLifecyclec                    t               }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )NFisz2%(py2)s
{%(py2)s = %(py0)s.is_started
} is %(py5)sr?   r-   r1   r2   )
r%   
is_startedr5   r6   r7   r8   r9   r:   r;   r<   )r>   r?   r@   rA   rB   rC   rD   s          r   test_is_started_falsez#TestLifecycle.test_is_started_false=   s{    /!!*U*!U****!U******w***w***!***U*******r   c                    t               }d|_        t        |      }|j                  }d}||u }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      t	        j                  |      dz  }dd|iz  }t        t	        j                  |            d x}x}}y )NTr^   r`   r?   r-   r1   r2   )r   r   r   ra   r5   r6   r7   r8   r9   r:   r;   r<   )r>   r   r?   r@   rA   rB   rC   rD   s           r   test_is_started_truez"TestLifecycle.test_is_started_trueA   s    "6*!!)T)!T))))!T))))))w)))w)))!)))T)))))))r   c                    K   t               }t               |_        t        |      }|j                          d {    |j                  j	                          y 7 wN)r   r   startr   assert_called_oncer>   r   r?   s      r   
test_startzTestLifecycle.test_startG   sD      {"6*mmo'') 	   8AA Ac                    K   t               }t               |_        t        |      }|j                          d {    |j                  j	                          y 7 wrf   )r   r   stopr   rh   ri   s      r   	test_stopzTestLifecycle.test_stopO   sD     k"6*lln&&( 	rk   N)
rW   rX   rY   rb   rd   pytestmarktriorj   rn   rZ   r   r   r\   r\   <   sH    +* [[* * [[) )r   r\   c                       e Zd Zd Zd Zd Zd Zej                  j                  d        Z
ej                  j                  d        Zej                  j                  d        Zy)	TestDiscoveryc                    t               }|j                         }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}}y )Nr)   z%(py0)s == %(py3)speersr.   rL   assert %(py5)sr0   )
r%   r   r5   r6   r7   r8   r9   r:   r;   r<   )r>   r?   rv   rQ   r@   @py_format4rC   s          r   test_discover_peers_emptyz'TestDiscovery.test_discover_peers_empty[   so    /&&(u{uuur   c                 	   t        ddgdd      t        ddgdd	      g}t               }||j                  j                  _        |j                         }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   }	|	j                  }d}||k(  }|st        j                  d|fd||f      t        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}	x}x}}|d   }	|	j                  }d}||k(  }|st        j                  d|fd||f      t        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}	x}x}}|d   }	|	j                   }d}||u }|st        j                  d|fd||f      t        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}	x}x}}|d   }	|	j                  }d}||k(  }|st        j                  d|fd||f      t        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}	x}x}}|d   }	|	j                   }d	}||u }|st        j                  d|fd||f      t        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}	x}x}}y )NQmPeer1/ip4/1.2.3.4/tcp/4001Device1Tr4   r=   name	is_onlineQmPeer2z/ip4/5.6.7.8/tcp/4002Device2FrG   r)   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)srI   resultr.   rK   rL   py6assert %(py8)srM   r   )z/%(py3)s
{%(py3)s = %(py1)s.peer_id
} == %(py6)srK   rL   r   )z,%(py3)s
{%(py3)s = %(py1)s.name
} == %(py6)sr^   )z1%(py3)s
{%(py3)s = %(py1)s.is_online
} is %(py6)s   )r   r%   rP   r   r   rI   r5   r6   r7   r8   r9   r:   r;   r<   r4   r   r   )
r>   
peers_datar?   r   rQ   @py_assert5rA   @py_format7rT   @py_assert0s
             r   test_discover_peersz!TestDiscovery.test_discover_peers`   s   +B*C)_cd+B*C)_de

  /6@&&3'')6{a{a{ass66{aay-y  -I- I---- I---y--- ---I-------ay*y~~**~****~***y***~**********ay*y""*d*"d****"d***y***"***d*******ay-y  -I- I---- I---y--- ---I-------ay+y""+e+"e++++"e+++y+++"+++e+++++++r   c                    t               }|j                  d      }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 )NQmNonexistentr^   z%(py0)s is %(py3)speerrw   rx   r0   )
r%   r   r5   r6   r7   r8   r9   r:   r;   r<   )r>   r?   r   rQ   r@   ry   rC   s          r   test_get_peer_not_foundz%TestDiscovery.test_get_peer_not_foundo   sq    /0tt|tttttr   c                    t        ddgdd      }t               }||j                  j                  _        |j                  d      }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}}|j                  }d}||k(  }	|	st        j                  d|	fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }
t        t        j                  |
            d x}x}	}|j                  }d}||k(  }	|	st        j                  d|	fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }
t        t        j                  |
            d x}x}	}y )NQmFound/ip4/1.1.1.1/tcp/4001FoundTr   is notz%(py0)s is not %(py3)sr   rw   rx   r0   r)   r+   r-   r1   r2   )z,%(py2)s
{%(py2)s = %(py0)s.name
} == %(py5)s)r   r%   rP   r   r   r5   r6   r7   r8   r9   r:   r;   r<   r4   r   )r>   	peer_datar?   r   rQ   r@   ry   rC   rA   rB   rD   s              r   test_get_peer_foundz!TestDiscovery.test_get_peer_foundt   st   3J2KRYeij	/09  -!!),!!vT!!!!vT!!!!!!v!!!v!!!T!!!!!!!~~**~****~******v***v***~**********{{%g%{g%%%%{g%%%%%%v%%%v%%%{%%%g%%%%%%%r   c                   	K   t        ddgd      		fd}t               }||j                  _        |j                  d       d {   }|j                  }d}||k(  }|st        j                  d|fd||f      d	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      t        j                  |      d
z  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d}||u }|st        j                  d|fd||f      d	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      t        j                  |      d
z  }dd|iz  }t        t        j                  |            d x}x}}y 7 w)NQmNewr}   New)r4   r=   r   c                    K   S wrf   rZ   )addrr   s    r   fake_connectz5TestDiscovery.test_connect_peer.<locals>.fake_connect   s        z/ip4/1.2.3.4/tcp/4001/p2p/QmNewr)   r+   r   r-   r1   r2   Tr^   z1%(py2)s
{%(py2)s = %(py0)s.is_online
} is %(py5)s)r   r%   rP   connect_peerr4   r5   r6   r7   r8   r9   r:   r;   r<   r   )
r>   r   r?   r   r@   rA   rB   rC   rD   r   s
            @r   test_connect_peerzTestDiscovery.test_connect_peer}   s-    1H0IPUV		  /'3$++,MNN~~((~((((~((((((v(((v(((~(((((((((('4'4''''4''''''v'''v''''''4''''''' Os   AGGFGc                 L	  K   ddg dddd}t               }t        |      |j                  _        |j	                  dd       d {   }|j
                  }d}||k(  }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d}||k(  }|st        j                  d	|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }	t!        |	      }d}
||
k(  }|s
t        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                  |      t        j                  |
      dz  }dd|iz  }t        t        j                  |            d x}	x}x}}
|j"                  }d}||k(  }|st        j                  d	|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j$                  }d}||k(  }|st        j                  d	|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y 7 Yw)NQmTarget   )g      %@g(@g333333&@g&@        r4   countlatencies_msavg_msloss_pctr   r   r)   r+   r   r-   r1   r2   z-%(py2)s
{%(py2)s = %(py0)s.count
} == %(py5)s)zR%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.latencies_ms
})
} == %(py8)srI   rJ   rN   rO   )z.%(py2)s
{%(py2)s = %(py0)s.avg_ms
} == %(py5)sz0%(py2)s
{%(py2)s = %(py0)s.loss_pct
} == %(py5)s)r%   r   rP   ping	ping_peerr4   r5   r6   r7   r8   r9   r:   r;   r<   r   r   rI   r   r   )r>   ping_resultr?   r   r@   rA   rB   rC   rD   rQ   rR   rS   rT   rU   s                 r   test_ping_peerzTestDiscovery.test_ping_peer   s     ".
  /(kB((1(==~~++~++++~++++++v+++v+++~++++++++++|| q |q    |q      v   v   |   q       &&,s&',1,'1,,,,'1,,,,,,s,,,s,,,,,,6,,,6,,,&,,,',,,1,,,,,,,}}$$}$$$$}$$$$$$v$$$v$$$}$$$$$$$$$$%#%#%%%%#%%%%%%v%%%v%%%%%%#%%%%%%% >s   AR$R!	QR$c                 4  K   ddg dddd}t               }t        |      |j                  _        |j	                  dd       d {   }|j
                  }d}||k(  }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y 7 ͭw)Nr   r   )      $@      (@      &@gfffff@@r   r   r   r)   r   r   r-   r1   r2   )r%   r   rP   r   r   r   r5   r6   r7   r8   r9   r:   r;   r<   )	r>   r   r?   r   r@   rA   rB   rC   rD   s	            r   test_ping_peer_with_lossz&TestDiscovery.test_ping_peer_with_loss   s      ",
  /(kB((1(==&$&$&&&&$&&&&&&v&&&v&&&&&&$&&&&&&& >s   ADD	CDN)rW   rX   rY   rz   r   r   r   ro   rp   rq   r   r   r   rZ   r   r   rs   rs   Z   sp    
,
& [[
( 
( [[& &" [[' 'r   rs   c                   z    e Zd Zd Zd Zd Zd Zej                  j                  d        Z
d Zd Zd Zd	 Zd
 Zy)TestTransfersc                    t               }|j                         }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}}y )Nr)   ru   	transfersrw   rx   r0   )
r%   r   r5   r6   r7   r8   r9   r:   r;   r<   )r>   r?   r   rQ   r@   ry   rC   s          r   test_list_transfers_emptyz'TestTransfers.test_list_transfers_empty   so    /**,	yByByyBr   c           	      
   t        dddt        j                  ddd      t        dd	d
t        j                  d      g}t	               }||j
                  j                  _        |j                         }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   }	|	j"                  }d}||k(  }|st        j                  d|fd||f      t        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                   |            d x}	x}x}}|d   }	|	j$                  }d}||k(  }|st        j                  d|fd||f      t        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                   |            d x}	x}x}}|d   }	|	j&                  }d}||k(  }|st        j                  d|fd||f      t        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                   |            d x}	x}x}}|d   }	|	j"                  }d}||k(  }|st        j                  d|fd||f      t        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                   |            d x}	x}x}}|d   }	|	j$                  }d}||k(  }|st        j                  d|fd||f      t        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                   |            d x}	x}x}}|d   }	|	j&                  }d}||k(  }|st        j                  d|fd||f      t        j                  |	      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                   |            d x}	x}x}}y )Nabc123test.txt   g      ?QmSender
QmReceiver)transfer_id	file_name	file_sizestatusprogresssender_peer_idreceiver_peer_iddef456zdata.bini   g      ?r   r   r   r   r   rG   r)   r   rI   r   r   r   rM   r   )z3%(py3)s
{%(py3)s = %(py1)s.transfer_id
} == %(py6)sr   	completed)z.%(py3)s
{%(py3)s = %(py1)s.status
} == %(py6)s)z0%(py3)s
{%(py3)s = %(py1)s.progress
} == %(py6)sr   transferring)r   r   	COMPLETEDTRANSFERRINGr%   rP   r   r   rI   r5   r6   r7   r8   r9   r:   r;   r<   r   r   r   )
r>   transfers_datar?   r   rQ   r   rA   r   rT   r   s
             r   test_list_transfersz!TestTransfers.test_list_transfers   sj   $$%//)!- $$%22
$  /6D&&3'')6{a{a{ass66{aay0y$$00$0000$000y000$0000000000ay.y.;.;....;...y......;.......ay(y!!(S(!S((((!S(((y(((!(((S(((((((ay0y$$00$0000$000y000$0000000000ay1y1>1>1111>111y111111>1111111ay(y!!(S(!S((((!S(((y(((!(((S(((((((r   c                    t               }|j                  d      }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 )Nnonexistentr^   r   transferrw   rx   r0   )
r%   r   r5   r6   r7   r8   r9   r:   r;   r<   )r>   r?   r   rQ   r@   ry   rC   s          r   test_get_transfer_not_foundz)TestTransfers.test_get_transfer_not_found   sr    /''6x4x4xx4r   c                    t        dddt        j                  dd      }t               }||j                  j
                  _        |j                  d      }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}}|j                  }d}||k(  }	|	st        j                  d|	fd||f      d	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      t        j                  |      dz  }dd|iz  }
t        t        j                  |
            d x}x}	}|j                   }d}||k(  }	|	st        j                  d|	fd||f      d	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      t        j                  |      dz  }dd|iz  }
t        t        j                  |
            d x}x}	}|j"                  }d}||k(  }	|	st        j                  d|	fd||f      d	t        j                         v st        j                  |      rt        j                  |      nd	t        j                  |      t        j                  |      dz  }dd|iz  }
t        t        j                  |
            d x}x}	}y )Nr   r   r   r   QmRoot)r   r   r   r   r   root_cidr   r   r   rw   rx   r0   r)   z3%(py2)s
{%(py2)s = %(py0)s.transfer_id
} == %(py5)sr-   r1   r2   z1%(py2)s
{%(py2)s = %(py0)s.file_name
} == %(py5)s)z0%(py2)s
{%(py2)s = %(py0)s.root_cid
} == %(py5)s)r   r   PENDINGr%   rP   r   r   r5   r6   r7   r8   r9   r:   r;   r<   r   r   r   )r>   transfer_datar?   r   rQ   r@   ry   rC   rA   rB   rD   s              r   test_get_transfer_foundz%TestTransfers.test_get_transfer_found   s      !))
  /4A$$1%%h/!!vT!!!!vT!!!!!!v!!!v!!!T!!!!!!!!!-X-!X----!X------v---v---!---X--------:-:----:------v---v------:-------*(*(****(******v***v******(*******r   c                   	K   t        dddt        j                  d      		fd}t               }||j                  _        |j                  dd       d {   }|j                  }d}||k(  }|st        j                  d	|fd
||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}|j                  }d}||k(  }|st        j                  d	|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y 7 w)Nxyz789zsent.txti   QmSent)r   r   r   r   r   c                    K   S wrf   rZ   )pathtargetr   s     r   	fake_sendz/TestTransfers.test_send_file.<locals>.fake_send   s       r   z/path/to/sent.txtr   r)   r   r   r-   r1   r2   r   )r   r   r   r%   rP   	send_filer   r5   r6   r7   r8   r9   r:   r;   r<   r   )
r>   r   r?   r   r@   rA   rB   rC   rD   r   s
            @r   test_send_filezTestTransfers.test_send_file   s@       !))
	!  /$-!(()<jII!!-X-!X----!X------v---v---!---X--------:-:----:------v---v------:------- Js   AG0G-FG0c                    t               }|j                  }d} ||      }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}x}}y )	Nr   Fr^   zU%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.cancel_transfer
}(%(py4)s)
} is %(py9)sr?   r.   r/   py4r   py9assert %(py11)spy11)
r%   cancel_transferr5   r6   r7   r8   r9   r:   r;   r<   )	r>   r?   r@   rB   r   @py_assert8rR   @py_format10@py_format12s	            r   test_cancel_transfer_not_foundz,TestTransfers.test_cancel_transfer_not_found   s    /&&>}>&}5>>5>>>>5>>>>>>w>>>w>>>&>>>}>>>5>>>>>>>>>>>r   c                 ~   t        dt        j                        }t               }||j                  j
                  _        |j                  }d} ||      }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }	t        t        j                  |	            d x}x}x}x}}y 
Nabcr   r   Fr^   r   r?   r   r   r   )r   r   r   r%   rP   r   r   r   r5   r6   r7   r8   r9   r:   r;   r<   
r>   r   r?   r@   rB   r   r   rR   r   r   s
             r   &test_cancel_transfer_already_completedz4TestTransfers.test_cancel_transfer_already_completed       !++
  /4<$$1&&6u6&u-66-6666-666666w666w666&666u666-66666666666r   c                 ~   t        dt        j                        }t               }||j                  j
                  _        |j                  }d} ||      }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }	t        t        j                  |	            d x}x}x}x}}y r   )r   r   	CANCELLEDr%   rP   r   r   r   r5   r6   r7   r8   r9   r:   r;   r<   r   s
             r   &test_cancel_transfer_already_cancelledz4TestTransfers.test_cancel_transfer_already_cancelled  r   r   c                    t        dt        j                        }t               }||j                  j
                  _        |j                  }d} ||      }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }	t        t        j                  |	            d x}x}x}x}}|j                   }t        j"                  }||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }
dd|
iz  }t        t        j                  |            d x}x}}y Nr   r   Tr^   r   r?   r   r   r   r)   )zM%(py2)s
{%(py2)s = %(py0)s.status
} == %(py6)s
{%(py6)s = %(py4)s.CANCELLED
}r   r   )r.   r/   r   r   r   rM   )r   r   r   r%   rP   r   r   r   r5   r6   r7   r8   r9   r:   r;   r<   r   r  r>   r   r?   r@   rB   r   r   rR   r   r   r   rT   s               r   test_cancel_transfer_pendingz*TestTransfers.test_cancel_transfer_pending  sa   !))
  /4<$$1&&5u5&u-55-5555-555555w555w555&555u555-5555555555:.":"::":::::":::::::x:::x:::::::::.:::.:::"::::::::r   c                    t        dt        j                        }t               }||j                  j
                  _        |j                  }d} ||      }d}||u }|st        j                  d|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      dz  }dd	|iz  }	t        t        j                  |	            d x}x}x}x}}|j                   }t        j"                  }||k(  }|st        j                  d
|fd||f      dt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndt        j                  |      dz  }
dd|
iz  }t        t        j                  |            d x}x}}y r  )r   r   r   r%   rP   r   r   r   r5   r6   r7   r8   r9   r:   r;   r<   r   r  r  s               r   !test_cancel_transfer_transferringz/TestTransfers.test_cancel_transfer_transferring  sa   !..
  /4<$$1&&5u5&u-55-5555-555555w555w555&555u555-5555555555:.":"::":::::":::::::x:::x:::::::::.:::.:::"::::::::r   N)rW   rX   rY   r   r   r   r   ro   rp   rq   r   r   r   r  r  r	  rZ   r   r   r   r      sM    
)< 
+" [[. .$?77;;r   r   c                       e Zd Zd Zd Zy)TestDownloadDirc                    t               }|j                  } |       }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}x}}y )Nr   r)   )zO%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.get_download_dir
}()
} == %(py7)sr?   )r.   r/   r   r2   zassert %(py9)sr   )
r%   r   r5   r6   r7   r8   r9   r:   r;   r<   )r>   r?   r@   rB   rS   r   rD   r   s           r   test_get_download_dirz%TestDownloadDir.test_get_download_dir(  s    /''=')=-==)-=====)-=======w===w==='===)===-========r   c                    t               }d|j                  _        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}}|j                  j                  d       y )Nz	/new/pathr)   ru   r   rw   rx   r0   )r   set_download_dirr   r   r5   r6   r7   r8   r9   r:   r;   r<   assert_called_once_with)r>   r   r?   r   rQ   r@   ry   rC   s           r   test_set_download_dirz%TestDownloadDir.test_set_download_dir,  s    /:,"6*))+6$$v$$$$v$$$$$$v$$$v$$$$$$$$$$77Dr   N)rW   rX   rY   r  r  rZ   r   r   r  r  '  s    >Er   r  c                   $    e Zd Zd Zd Zd Zd Zy)TestDataclassesc                    t        ddg      }|j                  }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }dd	|iz  }t        t        j                  |            d x}x}}|j                  }t        |      }d
}||k(  }	|	s
t        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                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                  |            d x}x}x}	}y )NQm123r   r4   r=   r)   r+   infor-   r1   r2   r   rH   rI   rJ   rN   rO   )r   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   rI   )r>   r  r@   rA   rB   rC   rD   rQ   rR   rS   rT   rU   s               r   test_identity_infoz"TestDataclasses.test_identity_info8  s   G4K3LM||&w&|w&&&&|w&&&&&&t&&&t&&&|&&&w&&&&&&&::#s:#!#!####!######s###s######4###4###:######!#######r   c                    t        dg dd      }|j                  }d}||u }|st        j                  d|fd||f      dt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      dz  }d	d
|iz  }t        t        j                  |            d x}x}}y )NQm456TestTr   r^   r   r  r-   r1   r2   )
r   r   r5   r6   r7   r8   r9   r:   r;   r<   r>   r  r@   rA   rB   rC   rD   s          r   test_peer_infozTestDataclasses.test_peer_info=  s    r$O~~%%~%%%%~%%%%%%t%%%t%%%~%%%%%%%%%%r   c                    t        ddddd      }|j                  }d}||k(  }|st        j                  d|fd||f      d	t	        j
                         v st        j                  |      rt        j                  |      nd	t        j                  |      t        j                  |      d
z  }dd|iz  }t        t        j                  |            d x}x}}y )Nr   r   r   pendingr   r   r)   r   r  r-   r1   r2   )
r	   r   r5   r6   r7   r8   r9   r:   r;   r<   r  s          r   test_transfer_infoz"TestDataclasses.test_transfer_infoA  s     
 (5(5((((5((((((t(((t((((((5(((((((r   c                    t        ddddgdd      }|j                  }d}||k(  }|st        j                  d|fd	||f      d
t	        j
                         v st        j                  |      rt        j                  |      nd
t        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )NQm789   r   r   r   r   r   r)   r   r   r-   r1   r2   )
r
   r   r5   r6   r7   r8   r9   r:   r;   r<   )r>   r   r@   rA   rB   rC   rD   s          r   test_ping_resultz TestDataclasses.test_ping_resultK  s    
 || q |q    |q      v   v   |   q       r   N)rW   rX   rY   r  r  r   r$  rZ   r   r   r  r  7  s    $
&)!r   r  c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
ej                  j                  d	        Zej                  j                  d
        Zej                  j                  d        Zy)TestServiceDispatchz8Verify all service methods correctly delegate to engine.c                     t               }t        |      }|j                          |j                  j	                          |j
                  j	                          y rf   )r   r   r3   r   rh   r   ri   s      r   test_get_identity_calls_enginez2TestServiceDispatch.test_get_identity_calls_engine[  sC    "6*--/++-r   c                     t               }t        |      }|j                          |j                  j                          y rf   )r   r   r   rh   ri   s      r    test_discover_peers_calls_enginez4TestServiceDispatch.test_discover_peers_calls_engineb  1    "6* 002r   c                     t               }t        |      }|j                  d       |j                  j                  d       y )Nr  )r   r   r   r  ri   s      r   test_get_peer_calls_enginez.TestServiceDispatch.test_get_peer_calls_engineh  s3    "6*!//8r   c                     t               }t        |      }|j                          |j                  j                          y rf   )r   r   r   rh   ri   s      r    test_list_transfers_calls_enginez4TestServiceDispatch.test_list_transfers_calls_enginen  r+  r   c                     t               }t        |      }|j                  d       |j                  j                  d       y )Nr   )r   r   r   r  ri   s      r   test_get_transfer_calls_enginez2TestServiceDispatch.test_get_transfer_calls_enginet  s5    "6*U#33E:r   c                     t               }t        |      }|j                          |j                  j                          y rf   )r   r   r   rh   ri   s      r   "test_get_download_dir_calls_enginez6TestServiceDispatch.test_get_download_dir_calls_enginez  s1    "6*  "224r   c                     t               }t        |      }|j                  d       |j                  j                  d       y )Nz/new)r   r   r  r  ri   s      r   "test_set_download_dir_calls_enginez6TestServiceDispatch.test_set_download_dir_calls_engine  s5    "6*  (77?r   c                    K   t               }d }||_        t        |      }|j                  d       d {    y 7 w)Nc                 &   K   t        d| g      S w)Nr   r  )r   )r   s    r   r   zHTestServiceDispatch.test_connect_peer_calls_engine.<locals>.fake_connect  s     v66s   z/ip4/1.1.1.1/tcp/4001/p2p/QmNew)r   r   r   )r>   r   r   r?   s       r   test_connect_peer_calls_enginez2TestServiceDispatch.test_connect_peer_calls_engine  s;     	7 +"6*""#DEEEs   4><>c                    K   t               }t        dddgddd      |_        t        |      }|j	                  dd       d {    |j                  j                  dd       y 7 "w)Nr  r   r   r   r   r   r   )r   r   r   r   r   r  ri   s      r   test_ping_calls_enginez*TestServiceDispatch.test_ping_calls_engine  sm     TF.
  #6*q111++G1+= 	2s   AA+A)#A+c                    K   t               }d }||_        t        |      }|j                  dd       d {    y 7 w)Nc                 "   K   t        d      S w)Nr   )r   )r   )r   r   s     r   r   zBTestServiceDispatch.test_send_file_calls_engine.<locals>.fake_send  s     j11s   z/path/test.txtr   )r   r   r   )r>   r   r   r?   s       r   test_send_file_calls_enginez/TestServiceDispatch.test_send_file_calls_engine  s=     	2 %"6* 0*===s   5?=?N)rW   rX   rY   __doc__r(  r*  r-  r/  r1  r3  r5  ro   rp   rq   r8  r:  r=  rZ   r   r   r&  r&  X  s    B.393;5@ [[F F [[> > [[> >r   r&  )r>  builtinsr7   _pytest.assertion.rewrite	assertionrewriter5   ro   unittest.mockr   r   r   peerdrop.core.servicer   r   r   r	   r
   peerdrop.core.modelsr   r   r   r   r%   r'   r\   rs   r   r  r  r&  rZ   r   r   <module>rF     s    =    5 5  @ ?
$( ($) )<N' N'fu; u;tE E ! !BN> N>r   