U
    be2C                     @   s   d dl mZ d dlmZmZ d dlmZmZ d dlm	Z	 ddl
mZmZ d dlZd dlZd dlZd dlmZ d dlZG d	d
 d
eejZdS )    
HashClient)ClientPooledClient)MemcacheErrorMemcacheUnknownError)pool   )ClientTestMixin
MockSocketN)mockc                   @   s2  e Zd ZdGddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Ze d:d;d< Z!e d:d=d> Z"d?d@ Z#dAdB Z$dCdD Z%dEdF Z&dS )HTestHashClientNc                    sB   t |fd|i| t| _t||d}t fdd|_ S )N
serializer)r   c                      s    S N r   Zmock_clientr   b/var/www/html/services/stratfitenv/lib/python3.8/site-packages/pymemcache/test/test_client_hash.py<lambda>       z1TestHashClient.make_client_pool.<locals>.<lambda>)r   r   sockr   r   Z
ObjectPoolclient_pool)selfhostnamemock_socket_valuesr   kwargsclientr   r   r   make_client_pool   s
    
zTestHashClient.make_client_poolc           	      O   sb   d}t g f|}d}|D ]D}| d| }| j||f|f|}||j|< |j| |d7 }q|S )Ni+  	127.0.0.1:r	   )r   r   clientshasheradd_node)	r   r   r   Zcurrent_portr   ipvalsscr   r   r   make_client   s    

zTestHashClient.make_clientc                 O   sJ   t g f|}t||D ].\}}| j||f|}||j|< |j| q|S r   )r   zipr   r   r    r!   )r   socketsr   r   r   Zsocket_r#   r%   r   r   r   make_unix_client$   s    
zTestHashClient.make_unix_clientc              	   C   sv   d}t |}tg ddd}|d W 5 Q R X |jd d dksHt|jd }|d dksbt|d	 dksrtd S )
N.pymemcache.client.hash.HashClient.client_classi  Zfoo_bar_baz)timeout
key_prefix)r   Z11211r   r	   r+   r,   )r   patchr   
add_serverZ	call_argsAssertionError)r   client_classZinternal_clientr   r   r   r   r   !test_setup_client_without_pooling.   s    
z0TestHashClient.test_setup_client_without_poolingc                    s   t  d d g}| j|fddgddgg   fdd}| _ jdd	d
d} jddd
d} ddg}|d	ddkstd S )N/tmp/pymemcache.1.%d/tmp/pymemcache.2.%d   STORED
   VALUE key3 0 6
value2
END
   VALUE key1 0 6
value1
END
c                    s(   | dkr j d  S  j d  S d S )N   key3r2   r3   r   keyr   pidr   r   get_clientsM   s    z6TestHashClient.test_get_many_unix.<locals>.get_clients   key1   value1FZnoreplyr7      value2r>   r7   )osgetpidr)   _get_clientsetget_manyr/   )r   r(   r=   resultr   r;   r   test_get_many_unix9   s*    z!TestHashClient.test_get_many_unixc                    sl   | j ddgddgg   fdd}| _ jdddd	} jd
ddd	} dd
g}|dddkshtd S )Nr4   r5   r6   c                    s    | dkr j d S  j d S d S Nr7   z127.0.0.1:11012z127.0.0.1:11013r8   r9   r   r   r   r=   h   s    
z;TestHashClient.test_get_many_all_found.<locals>.get_clientsr>   r?   Fr@   r7   rA   rB   r&   rE   rF   rG   r/   r   r=   rH   r   rK   r   test_get_many_all_foundZ   s    z&TestHashClient.test_get_many_all_foundc                    sX   | j dgddgg   fdd}| _ jdddd	} dd
g}|ddiksTtd S )Ns   END
r4   r6   c                    s    | dkr j d S  j d S d S rJ   r8   r9   rK   r   r   r=      s    
z<TestHashClient.test_get_many_some_found.<locals>.get_clientsr>   r?   Fr@   r7   rL   rM   r   rK   r   test_get_many_some_foundu   s    z'TestHashClient.test_get_many_some_foundc              	      sp   | j ddgddgg   fdd}| _tt4  jdddd	  jd
ddd	  dd
g W 5 Q R X d S )Nr4      VAXLUE key3 0 6
value2
END
   VAXLUE key1 0 6
value1
END
c                    s    | dkr j d S  j d S d S rJ   r8   r9   rK   r   r   r=      s    
zATestHashClient.test_get_many_bad_server_data.<locals>.get_clientsr>   r?   Fr@   r7   rA   )r&   rE   pytestraisesr   rF   rG   )r   r=   r   rK   r   test_get_many_bad_server_data   s    z,TestHashClient.test_get_many_bad_server_datac                    sl   | j ddgddggddi  fdd}| _ jdd	d
d  jddd
d  ddg}|i kshtd S )Nr4   rP   rQ   
ignore_excTc                    s    | dkr j d S  j d S d S rJ   r8   r9   rK   r   r   r=      s    
zHTestHashClient.test_get_many_bad_server_data_ignore.<locals>.get_clientsr>   r?   Fr@   r7   rA   rL   rM   r   rK   r   $test_get_many_bad_server_data_ignore   s"    z3TestHashClient.test_get_many_bad_server_data_ignorec                    s|   | j ddgddgg   fdd}| _ jdddd	d
ks@t jdddd	d
ksXt ddg}|dddksxtd S )Nr4   s   VALUE key3 0 6 1
value2
END
s   VALUE key1 0 6 1
value1
END
c                    s    | dkr j d S  j d S d S rJ   r8   r9   rK   r   r   r=      s    
z2TestHashClient.test_gets_many.<locals>.get_clientsr>   r?   Fr@   Tr7   rA   )r?      1)rA   rW   rB   )r&   rE   rF   r/   Z	gets_manyrM   r   rK   r   test_gets_many   s    zTestHashClient.test_gets_manyc                 C   s*   |  dg}|jddd}|dks&td S )Ns   NOT_FOUND
   keyFr@   r&   touchr/   r   r   rH   r   r   r   test_touch_not_found   s    z#TestHashClient.test_touch_not_foundc                 C   s*   |  dg}|jddd}|dks&td S )N	   TOUCHED
rY   Fr@   TrZ   r\   r   r   r   test_touch_no_expiry_found   s    z)TestHashClient.test_touch_no_expiry_foundc                 C   s,   |  dg}|jdddd}|dks(td S )Nr^   rY   r	   Fr@   TrZ   r\   r   r   r   test_touch_with_expiry_found   s    z+TestHashClient.test_touch_with_expiry_foundc                 C   sZ   |  g }tdd |j D s&t| }|d ks:ttdd |j D sVtd S )Nc                 s   s   | ]}|j d k	V  qd S r   r   .0r%   r   r   r   	<genexpr>   s     z,TestHashClient.test_close.<locals>.<genexpr>c                 s   s   | ]}|j d kV  qd S r   ra   rb   r   r   r   rd      s     )r&   allr   valuesr/   closer\   r   r   r   
test_close   s
    
zTestHashClient.test_closec                 C   sZ   |  g }tdd |j D s&t| }|d ks:ttdd |j D sVtd S )Nc                 s   s   | ]}|j d k	V  qd S r   ra   rb   r   r   r   rd      s     z+TestHashClient.test_quit.<locals>.<genexpr>c                 s   s   | ]}|j d kV  qd S r   ra   rb   r   r   r   rd      s     )r&   re   r   rf   r/   quitr\   r   r   r   	test_quit   s
    
zTestHashClient.test_quitc                 C   s8   ddl m} |g ddddd}|d}|d ks4td S )Nr   r   Tr	   use_poolingrU   r+   connect_timeoutfoo)pymemcache.client.hashr   rE   r/   )r   r   r   Zhashed_clientr   r   r   test_no_servers_left   s        
z#TestHashClient.test_no_servers_leftc              	   C   sT   ddl m} |g ddddd}tt}|d W 5 Q R X t|jdksPtd S )	Nr   r   TFr	   rk   rn   z%All servers seem to be down right now)	ro   r   rR   rS   r   rE   strvaluer/   )r   r   r   er   r   r   $test_no_servers_left_raise_exception  s        z3TestHashClient.test_no_servers_left_raise_exceptionc              	   C   sH   ddl m} |dgdddddd}ttj |d W 5 Q R X d S )	Nr   r   zexample.com+  TFr	   )rl   rU   retry_attemptsr+   rm   rn   )ro   r   rR   rS   socketerrorget)r   r   r   r   r   r   3test_unavailable_servers_zero_retry_raise_exception  s    	zBTestHashClient.test_unavailable_servers_zero_retry_raise_exceptionc                 C   sj   ddl m} |g ddddd}|d}|d ks4t|jddd}|dksNt|dd	}|d
ksftd S )Nr   r   Tr	   rk   rn   default)r|   barF)ro   r   rz   r/   rF   r   r   r   rH   r   r   r   7test_no_servers_left_with_commands_return_default_value"  s        
zFTestHashClient.test_no_servers_left_with_commands_return_default_valuec                 C   s:   ddl m} |g ddddd}|dd}|dks6td S )Nr   r   Tr	   rk   rn   r|   )ro   r   rz   r/   r~   r   r   r   .test_no_servers_left_return_positional_default0  s        z=TestHashClient.test_no_servers_left_return_positional_defaultc                 C   s>   ddl m} |g ddddd}|ddi}|dgks:td S Nr   r   Tr	   rk   rn   r}   )ro   r   set_manyr/   r~   r   r   r   "test_no_servers_left_with_set_many<  s        z1TestHashClient.test_no_servers_left_with_set_manyc                 C   s<   ddl m} |g ddddd}|ddg}|i ks8td S r   )ro   r   rG   r/   r~   r   r   r   "test_no_servers_left_with_get_manyF  s        z1TestHashClient.test_no_servers_left_with_get_manyc              	   C   s   dddd}t t. | jdddgdddgg }|j|dd W 5 Q R X | jdddggd	d
i}|j|dd}t|dkstd S )Nvalue1value2value3key1key2Zkey3r4   s	   UNKNOWN
Fr@   rU   Tr   )rR   rS   r   r&   r   lenr/   r   rf   r   rH   r   r   r   test_ignore_exec_set_manyP  s     z(TestHashClient.test_ignore_exec_set_manyc                 C   sl   dddd}| j dddgg }|j|dd}t|d	ks<t| j dddgg }|j|d
d}|g kshtd S )Nr   r   r   r   r4      NOT_STORED
Fr@   r	   T)r&   r   r   r/   r   r   r   r   test_noreply_set_manyf  s    z$TestHashClient.test_noreply_set_manyc                 C   s   |   }|jdd d S )NTr@   )r&   Z	flush_all)r   r   r   r   r   test_noreply_flushy  s    z!TestHashClient.test_noreply_flushc                 C   sX   dddd}t  }d| g}| j|fdddgg }|j|dd	}t|d
ksTtd S )Nr   r   r   r   z/tmp/pymemcache.%dr4   r   Fr@   r	   )rC   rD   r)   r   r   r/   )r   rf   r<   r(   r   rH   r   r   r   test_set_many_unix}  s    
z!TestHashClient.test_set_many_unixc                 C   sB   d}ddl m} |dgd|d}|j D ]}|j|ks*tq*dS )zI
        test passed encoding from hash client to pooled clients
        utf8r   r   ru   T)rl   encodingNro   r   r   rf   r   r/   r   r   r   Zhash_clientr   r   r   r   test_server_encoding_pooled  s      z*TestHashClient.test_server_encoding_pooledc                 C   s@   d}ddl m} |dg|d}|j D ]}|j|ks(tq(dS )zB
        test passed encoding from hash client to clients
        r   r   r   ru   )r   Nr   r   r   r   r   test_server_encoding_client  s
    z*TestHashClient.test_server_encoding_clientr*   c              	   C   s   t g ddd}|d |j}d|_t |j_t	tj |jddd W 5 Q R X d|j
ksdtdd |j_|dd	kstd|j
kstd S )
Nr   )Zdead_timeoutrw   r   rv   rY   Fr@   c                  _   s   dS N
Some valuer   _Z_kwr   r   r   r     r   z<TestHashClient.test_dead_server_comes_back.<locals>.<lambda>r   )r   r.   return_valueserverrx   r+   rz   side_effectrR   rS   _dead_clientsr/   r   Zclient_patchr   test_clientr   r   r   test_dead_server_comes_back  s    
z*TestHashClient.test_dead_server_comes_backc              	   C   s   t g ddd}|d |jdks&t|j}d|_t |j_	t
tj |jddd W 5 Q R X dd	 |j_	|dd
kst|jdkstd S )Nr	   r   )rw   Zretry_timeoutr   rY   Fr@   c                  _   s   dS r   r   r   r   r   r   r     r   z7TestHashClient.test_failed_is_retried.<locals>.<lambda>r   )r   r.   Z
call_countr/   r   r   rx   r+   rz   r   rR   rS   r   r   r   r   test_failed_is_retried  s    
z%TestHashClient.test_failed_is_retriedc                 C   s@   G dd dt }tg }||_|d t|jd |s<td S )Nc                   @   s   e Zd ZdS )z3TestHashClient.test_custom_client.<locals>.MyClientN__name__
__module____qualname__r   r   r   r   MyClient  s   r   hostrv   
host:11211)r   r   r0   r.   
isinstancer   r/   )r   r   r   r   r   r   test_custom_client  s
    
z!TestHashClient.test_custom_clientc              	   C   sv   G dd dt }tg dd}||_|d t|jd ts@t|jd j}|j	dd}t||shtW 5 Q R X d S )Nc                   @   s   e Zd ZdS )z@TestHashClient.test_custom_client_with_pooling.<locals>.MyClientNr   r   r   r   r   r     s   r   T)rl   r   r   )Zdestroy_on_fail)
r   r   r0   r.   r   r   r   r/   r   Zget_and_release)r   r   r   r   r%   r   r   r   test_custom_client_with_pooling  s    
z.TestHashClient.test_custom_client_with_poolingc                 C   sT   dt   ddh}tdt   ddddddg}|dd	 |j D ksPtd S )
Nz/tmp/pymemcache.r   )z::1rv   r   z127.0.0.1:11211z[::1]z[::1]:11211c                 S   s   h | ]
}|j qS r   )r   rb   r   r   r   	<setcomp>  s     zBTestHashClient.test_mixed_inet_and_unix_sockets.<locals>.<setcomp>)rC   rD   r   r   rf   r/   )r   expectedr   r   r   r    test_mixed_inet_and_unix_sockets  s    z/TestHashClient.test_mixed_inet_and_unix_socketsc              	   C   s   d}t g }|ji kst|j|  d| |jks6t|| ||jksNt|j|  ||jksft||jksttt	t
 |||d  W 5 Q R X t	t
 |||d  W 5 Q R X d S )Nr   z%s:%s)r   r   r/   r.   Z_mark_failed_serverZ_failed_clientsZremove_serverr   rR   rS   	TypeError)r   r   r   r   r   r   'test_legacy_add_remove_server_signature  s    


z6TestHashClient.test_legacy_add_remove_server_signature)N)'r   r   r   r   r&   r)   r1   rI   rN   rO   rT   rV   rX   r]   r_   r`   rh   rj   rp   rt   r{   r   r   r   r   r   r   r   r   r   r   r   r-   r   r   r   r   r   r   r   r   r   r   r      sH   

!




	r   )ro   r   Zpymemcache.client.baser   r   Zpymemcache.exceptionsr   r   Z
pymemcacher   r   r
   r   ZunittestrC   rR   r   rx   ZTestCaser   r   r   r   r   <module>   s   