
    &xj                     Z   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
mZ ddlmZmZmZmZ ddlmZmZmZ ddlmZmZ ddlmZmZ ddedz  d	ef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$y)z)Tests for PeerDrop Daemon handler module.    N)	MagicMock	AsyncMock)ServiceInterfaceIdentityInfoPeerInfoTransferInfo)PeerTransferTransferStatus)RequestHandlerVALID_ACTIONS)make_requestunpack_responseservicereturnc                     | qt        t              } t        ddg      | j                  _        g | j
                  _        d| j                  _        g | j                  _        d| j                  _        t        |       S )z,Create a RequestHandler with a mock service.NspecQmLocalPeer/ip4/127.0.0.1/tcp/4001)peer_idaddrs)
r   r   r   get_identityreturn_valuediscover_peersget_peerlist_transfersget_transferr   )r   s    ;/Users/sumanjeet/code/PeerDrop/tests/test_daemon_handler.py_make_handlerr       ss    !12,8!,--
) /1+(,%.0+,0)'""    c                       e Zd Zej                  j
                  d        Zej                  j
                  d        Zd Zy)TestHandlerValidationc                 j  K   t               }|j                  d       d {   }t        |      }|d   }d}||u }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}d	}|d
   }||v }|slt        j                  d|fd||f      t        j
                  |      t        j
                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y 7 w)Ns   not valid msgpackokFisz%(py1)s is %(py4)spy1py4assert %(py6)spy6zInvalid messageerrorinz%(py1)s in %(py4)s)r    handler   
@pytest_ar_call_reprcompare	_safereprAssertionError_format_explanation)	selfhandlerresponsemsg@py_assert0@py_assert3@py_assert2@py_format5@py_format7s	            r   test_invalid_jsonz'TestHandlerValidation.test_invalid_json   s     / (<==h'4y!E!yE!!!!yE!!!y!!!E!!!!!!! 0CL0 L0000 L000 000L0000000 >s   D3D0DD3c                   K   t               }t        dd      }|j                  |       d {   }t        |      }|d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }	t        t	        j                  |	            d x}x}}d}|d   }||v }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }	t        t	        j                  |	            d x}x}}y 7 w)Nnonexistent_actionr1
request_idr%   Fr&   r(   r)   r,   r-   zUnknown actionr.   r/   r1   	r    r   r2   r   r3   r4   r5   r6   r7   
r8   r9   requestr:   r;   r<   r=   r>   r?   r@   s
             r   test_unknown_actionz)TestHandlerValidation.test_unknown_action%   s     /3E 00h'4y!E!yE!!!!yE!!!y!!!E!!!!!!!/3w</<////<//////</////// 1s   ,E D=DE c                    d}|t         v }|st        j                  d|fd|t         f      t        j                  |      dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            d x}}d}|t         v }|st        j                  d|fd|t         f      t        j                  |      dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            d x}}d	}|t         v }|st        j                  d|fd|t         f      t        j                  |      dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            d x}}d
}|t         v }|st        j                  d|fd|t         f      t        j                  |      dt	        j
                         v st        j                  t               rt        j                  t               nddz  }dd|iz  }t        t        j                  |            d x}}t        t               }d}||k(  }|st        j                  d|fd||f      dt	        j
                         v st        j                  t              rt        j                  t              nddt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dz  }dd|iz  }t        t        j                  |            d x}x}}y )Nr   r/   )z%(py1)s in %(py3)sr   )r*   py3zassert %(py5)spy5	send_filehealthconnect_peer   ==)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)slen)py0r*   rL   r-   zassert %(py8)spy8)
r   r3   r4   r5   @py_builtinslocals_should_repr_global_namer6   r7   rT   )	r8   r<   r>   @py_format4@py_format6@py_assert5@py_assert4r@   @py_format9s	            r   test_valid_actions_existz.TestHandlerValidation.test_valid_actions_exist.   s   0=0000=000000000=000=0000000+{m++++{m+++{++++++m+++m+++++++(x=((((x=(((x((((((=(((=(((((((.~....~...~................=!'R'!R''''!R''''''s'''s''''''='''='''!'''R'''''''r!   N)	__name__
__module____qualname__pytestmarktriorA   rJ   r_    r!   r   r#   r#      sA    [[1 1 [[0 0(r!   r#   c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestDiscoverPeersc                   K   t               }t        dd      }|j                  |       d {   }t        |      }|d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }	t        t	        j                  |	            d x}x}}|d   d   }g }||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }	t        t	        j                  |	            d x}x}}y 7 w)Nr   rD   rE   r%   Tr&   r(   r)   r,   r-   datapeersrR   z%(py1)s == %(py4)srG   rH   s
             r   test_empty_peersz"TestDiscoverPeers.test_empty_peers7   s     //DA 00h'4y D yD    yD   y   D       6{7#)r)#r))))#r)))#)))r))))))) 1   ,EEDEc                   K   t        t              }t        ddgdd      t        ddgd	d      g|j                  _        t        |      }t        d
d      }|j                  |       d {   }t        |      }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}}|d   d   }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   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}}y 7 w)Nr   QmPeer1z/ip4/1.2.3.4/tcp/4001Device1Tr   r   name	is_onlineQmPeer2z/ip4/5.6.7.8/tcp/4002Device2r   r2rE   r%   r&   r(   r)   r,   r-   rj   rk      rR   )z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py7)srT   )rU   py2r+   py7zassert %(py9)spy9r   r   rl   )r   r   r   r   r   r    r   r2   r   r3   r4   r5   r6   r7   rT   rW   rX   rY   )r8   r   r9   rI   r:   r;   r<   r=   r>   r?   r@   @py_assert1@py_assert6r\   @py_format8@py_format10s                   r   test_with_peersz!TestDiscoverPeers.test_with_peers@   s    !12Y/F.GicghY/F.Gicgh/
+  (/DA 00h'4y D yD    yD   y   D       v;w'-s'(-A-(A----(A------s---s---'---(---A-------6{7#A&y1>Y>1Y>>>>1Y>>>1>>>Y>>>>>>>	 1s   A,I7.I4/HI7N)r`   ra   rb   rc   rd   re   rm   r   rf   r!   r   rh   rh   6   s<    [[* * [[? ?r!   rh   c                       e Zd Zej                  j
                  d        Zej                  j
                  d        Zej                  j
                  d        Zy)TestGetPeerc                   K   t               }t        di d      }|j                  |       d {   }t        |      }|d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }	t        t	        j                  |	            d x}x}}d}|d   }||v }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }	t        t	        j                  |	            d x}x}}y 7 w)Nr   rD   paramsrF   r%   Fr&   r(   r)   r,   r-   Missingr.   r/   r1   rG   rH   s
             r   test_missing_peer_idz TestGetPeer.test_missing_peer_idQ   s     /z"F 00h'4y!E!yE!!!!yE!!!y!!!E!!!!!!!(CL(yL((((yL(((y(((L((((((( 1   -ED>DEc                   K   t               }t        dddid      }|j                  |       d {   }t        |      }|d   }d}||u }|slt	        j
                  d|fd	||f      t	        j                  |      t	        j                  |      d
z  }dd|iz  }	t        t	        j                  |	            d x}x}}d}|d   }||v }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      d
z  }dd|iz  }	t        t	        j                  |	            d x}x}}y 7 w)Nr   r   QmNonexistentrD   r   r%   Fr&   r(   r)   r,   r-   	not foundr.   r/   r1   rG   rH   s
             r   test_peer_not_foundzTestGetPeer.test_peer_not_foundZ   s     /z9o2N[_` 00h'4y!E!yE!!!!yE!!!y!!!E!!!!!!!*c'l*{l****{l***{***l******* 1   /EE DEc                   K   t        t              }t        ddgdd      |j                  _        t        |      }t        dddid	
      }|j                  |       d {   }t        |      }|d   }d}||u }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}}|d   d   }d}||k(  }|slt        j                  d|fd||f      t        j                  |      t        j                  |      dz  }	dd|	iz  }
t        t        j                  |
            d x}x}}y 7 w)Nr   QmFoundz/ip4/1.1.1.1/tcp/4001zFound DeviceTrr   r   r   rD   r   r%   r&   r(   r)   r,   r-   rj   rR   rl   )r   r   r   r   r   r    r   r2   r   r3   r4   r5   r6   r7   )r8   r   r9   rI   r:   r;   r<   r=   r>   r?   r@   s              r   test_peer_foundzTestGetPeer.test_peer_foundc   s    !12(0&=%>^_c)
%  (z9i2HUYZ 00h'4y D yD    yD   y   D       6{9%22%2222%222%2222222222 1s   AE7!E4"DE7N)	r`   ra   rb   rc   rd   re   r   r   r   rf   r!   r   r   r   P   sZ    [[) ) [[+ + [[
3 
3r!   r   c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestSendFilec                   K   t               }t        dddid      }|j                  |       d {   }t        |      }|d   }d}||u }|slt	        j
                  d|fd	||f      t	        j                  |      t	        j                  |      d
z  }dd|iz  }	t        t	        j                  |	            d x}x}}d}|d   }||v }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      d
z  }dd|iz  }	t        t	        j                  |	            d x}x}}y 7 w)NrN   targetQm123rD   r   r%   Fr&   r(   r)   r,   r-   zMissing 'file'r.   r/   r1   rG   rH   s
             r   test_missing_filezTestSendFile.test_missing_filer   s     /{Hg3FSWX 00h'4y!E!yE!!!!yE!!!y!!!E!!!!!!!/3w</<////<//////</////// 1r   c                   K   t               }t        dddid      }|j                  |       d {   }t        |      }|d   }d}||u }|slt	        j
                  d|fd	||f      t	        j                  |      t	        j                  |      d
z  }dd|iz  }	t        t	        j                  |	            d x}x}}d}|d   }||v }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      d
z  }dd|iz  }	t        t	        j                  |	            d x}x}}y 7 w)NrN   fileztest.txtrD   r   r%   Fr&   r(   r)   r,   r-   zMissing 'target'r.   r/   r1   rG   rH   s
             r   test_missing_targetz TestSendFile.test_missing_target{   s     /{FJ3GTXY 00h'4y!E!yE!!!!yE!!!y!!!E!!!!!!!!1S\1!\1111!\111!111\1111111 1r   N)r`   ra   rb   rc   rd   re   r   r   rf   r!   r   r   r   q   s<    [[0 0 [[2 2r!   r   c                   D    e Zd Zej                  j
                  d        Zy)TestListTransfersc                   K   t               }t        dd      }|j                  |       d {   }t        |      }|d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }	t        t	        j                  |	            d x}x}}|d   d   }g }||k(  }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }	t        t	        j                  |	            d x}x}}y 7 w)Nr   rD   rE   r%   Tr&   r(   r)   r,   r-   rj   	transfersrR   rl   rG   rH   s
             r   test_empty_listz!TestListTransfers.test_empty_list   s     //DA 00h'4y D yD    yD   y   D       6{;'-2-'2----'2---'---2------- 1rn   N)r`   ra   rb   rc   rd   re   r   rf   r!   r   r   r      s    [[. .r!   r   c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestGetTransferc                   K   t               }t        di d      }|j                  |       d {   }t        |      }|d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }	t        t	        j                  |	            d x}x}}d}|d   }||v }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }	t        t	        j                  |	            d x}x}}y 7 w)Nr   rD   r   r%   Fr&   r(   r)   r,   r-   r   r.   r/   r1   rG   rH   s
             r   test_missing_transfer_idz(TestGetTransfer.test_missing_transfer_id        /~bTJ 00h'4y!E!yE!!!!yE!!!y!!!E!!!!!!!(CL(yL((((yL(((y(((L((((((( 1r   c                   K   t               }t        dddid      }|j                  |       d {   }t        |      }|d   }d}||u }|slt	        j
                  d|fd	||f      t	        j                  |      t	        j                  |      d
z  }dd|iz  }	t        t	        j                  |	            d x}x}}d}|d   }||v }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      d
z  }dd|iz  }	t        t	        j                  |	            d x}x}}y 7 w)Nr   transfer_idxyzrD   r   r%   Fr&   r(   r)   r,   r-   r   r.   r/   r1   rG   rH   s
             r   test_transfer_not_foundz'TestGetTransfer.test_transfer_not_found   s     /~}e6LY]^ 00h'4y!E!yE!!!!yE!!!y!!!E!!!!!!!*c'l*{l****{l***{***l******* 1r   N)r`   ra   rb   rc   rd   re   r   r   rf   r!   r   r   r      s<    [[) ) [[+ +r!   r   c                   D    e Zd Zej                  j
                  d        Zy)TestGetIdentityc                   K   t               }t        dd      }|j                  |       d {   }t        |      }|d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }	t        t	        j                  |	            d x}x}}|d   d   }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   }||v }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }	t        t	        j                  |	            d x}x}}y 7 w)Nr   rD   rE   r%   Tr&   r(   r)   r,   r-   rj   r   r   rR   rl   r   r   r/   r1   rG   rH   s
             r   test_identityzTestGetIdentity.test_identity   s6    /~$? 00h'4y D yD    yD   y   D       6{9%66%6666%666%6666666666(@CK,@@(,@@@@@(,@@@@(@@@,@@@@@@@@	 1s   ,GGFGN)r`   ra   rb   rc   rd   re   r   rf   r!   r   r   r      s     [[A Ar!   r   c                   D    e Zd Zej                  j
                  d        Zy)
TestHealthc                   K   t               }t        dd      }|j                  |       d {   }t        |      }|d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }	t        t	        j                  |	            d x}x}}|d   d   }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}}y 7 w)NrO   rD   rE   r%   Tr&   r(   r)   r,   r-   rj   statusrR   rl   r   r   rG   rH   s
             r   test_health_checkzTestHealth.test_health_check   s3    /xD9 00h'4y D yD    yD   y   D       6{8$,,$,,,,$,,,$,,,,,,,,,,6{9%66%6666%666%6666666666	 1s   ,GGFGN)r`   ra   rb   rc   rd   re   r   rf   r!   r   r   r      s    [[7 7r!   r   c                   |    e Zd Zej                  j
                  d        Zej                  j
                  d        Zy)TestConnectPeerc                   K   t               }t        di d      }|j                  |       d {   }t        |      }|d   }d}||u }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }	t        t	        j                  |	            d x}x}}d}|d   }||v }|slt	        j
                  d|fd||f      t	        j                  |      t	        j                  |      dz  }d	d
|iz  }	t        t	        j                  |	            d x}x}}y 7 w)NrP   rD   r   r%   Fr&   r(   r)   r,   r-   r   r.   r/   r1   rG   rH   s
             r   test_missing_addrz!TestConnectPeer.test_missing_addr   r   r   c                   K   t        t              }d }||_        t        |      }t	        dddid      }|j                  |       d {   }t        |      }|d   }d	}||u }	|	slt        j                  d
|	fd||f      t        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                  |            d x}x}	}|d   d   }d}||k(  }	|	slt        j                  d|	fd||f      t        j                  |      t        j                  |      dz  }
dd|
iz  }t        t        j                  |            d x}x}	}y 7 w)Nr   c                 *   K   t        d| gdd      S w)NQmNew Trr   )r   )addrs    r   fake_connectz:TestConnectPeer.test_connect_success.<locals>.fake_connect   s     GD6dSSs   rP   r   z/ip4/1.2.3.4/tcp/4001/p2p/QmNewrD   r   r%   Tr&   r(   r)   r,   r-   rj   r   r   rR   rl   )r   r   rP   r    r   r2   r   r3   r4   r5   r6   r7   )r8   r   r   r9   rI   r:   r;   r<   r=   r>   r?   r@   s               r   test_connect_successz$TestConnectPeer.test_connect_success   s    !12	T  ,(~v?`6anrs 00h'4y D yD    yD   y   D       6{9%00%0000%000%0000000000 1s   A
E"EDE"N)r`   ra   rb   rc   rd   re   r   r   rf   r!   r   r   r      s<    [[) ) [[1 1r!   r   )N)%__doc__builtinsrW   _pytest.assertion.rewrite	assertionrewriter3   rc   re   unittest.mockr   r   peerdrop.core.servicer   r   r   r   peerdrop.core.modelsr	   r
   r   peerdrop.daemon.handlerr   r   peerdrop.daemon.protocolr   r   r    r#   rh   r   r   r   r   r   r   r   rf   r!   r   <module>r      s    /     . X X ? ? A B#+d2 #n #( (4? ?43 3B2 2(. .+ +(	A 	A	7 	71 1r!   