U
    ‘bÖeQÞ  ã                   @   sT  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dl	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mZmZmZ d dlmZ d dlmZ dd„ Ze
j d	d
ddedfdddedfdddedfdddedfg¡e
j  ¡ dd„ ƒƒZ!e
j  ¡ dd„ ƒZ"G dd„ dƒZ#G dd„ dƒZ$G dd„ dƒZ%G dd„ deƒZ&e
j  ¡ G dd„ dƒƒZ'G d d!„ d!e'ej(ƒZ)e
j  ¡ G d"d#„ d#ej(ƒƒZ*G d$d%„ d%e'ej(ƒZ+G d&d'„ d'e'ej(ƒZ,G d(d)„ d)e'ej(ƒZ-G d*d+„ d+e'ej(ƒZ.G d,d-„ d-e.ƒZ/e
j  ¡ G d.d/„ d/ej(ƒƒZ0e
j  ¡ G d0d1„ d1ej(ƒƒZ1e
j  ¡ G d2d3„ d3ej(ƒƒZ2dS )4é    N)Úmock)ÚPooledClientÚClientÚnormalize_server_specÚKeepaliveOptsÚcheck_key_helper)ÚMemcacheClientErrorÚMemcacheServerErrorÚMemcacheUnexpectedCloseErrorÚMemcacheUnknownCommandErrorÚMemcacheUnknownErrorÚMemcacheIllegalInputError)Úpool)ÚMockMemcacheClientc                 C   s.   zt  | ¡jdkW S  tk
r(   Y dS X d S )Né   F)Ú	ipaddressÚ
ip_addressÚversionÚ
ValueError)Úaddress© r   ú]/var/www/html/services/stratfitenv/lib/python3.8/site-packages/pymemcache/test/test_client.pyÚis_ipv60   s    r   z9key,allow_unicode_keys,key_prefix,ex_exception,ex_excinfoZûbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbTó    zKey is too longúfoo barzKey contains whitespaceú zKey contains nullc              	   C   s<   t  |¡}t| ||ƒ W 5 Q R X |r8|t|jƒks8t‚d S ©N)ÚpytestÚraisesr   ÚstrÚvalueÚAssertionError)ÚkeyÚallow_unicode_keysÚ
key_prefixZex_exceptionZ
ex_excinfoÚexcinfor   r   r   Ú(test_check_key_helper_failing_conditions8   s    r&   c                   C   sP   t dddƒdkst‚t ddƒdks&t‚tt ddƒtƒs:t‚t ddƒdksLt‚d S )Nó   keyTr   r"   Ú )r   r!   Ú
isinstanceÚbytesr   r   r   r   Útest_check_key_helperP   s    r+   c                   @   sR   e Zd Zddd„Zedd„ ƒZdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ ZdS )Ú
MockSocketNc                 C   s:   t  |¡| _g | _d| _g | _|| _|| _g | _g | _	d S )NF)
ÚcollectionsÚdequeÚ	recv_bufsÚ	send_bufsÚclosedÚtimeoutsÚconnect_failureÚclose_failureÚconnectionsÚsocket_options)Úselfr/   r3   r4   r   r   r   Ú__init__Y   s    zMockSocket.__init__c                 C   s$   t dd„ | jD ƒƒ}|rtjS tjS )Nc                 s   s   | ]}t |d  ƒV  qdS )r   N)r   )Ú.0Úcr   r   r   Ú	<genexpr>e   s     z$MockSocket.family.<locals>.<genexpr>)Úanyr5   ÚsocketÚAF_INET6ÚAF_INET)r7   Zany_ipv6r   r   r   Úfamilyc   s    zMockSocket.familyc                 C   s   | j  |¡ d S r   )r0   Úappend)r7   r    r   r   r   Úsendallh   s    zMockSocket.sendallc                 C   s   t | jtƒr| j‚d| _d S )NT)r)   r4   Ú	Exceptionr1   ©r7   r   r   r   Úclosek   s    zMockSocket.closec                 C   s   | j  ¡ }t|tƒr|‚|S r   )r/   Úpopleftr)   rC   )r7   Úsizer    r   r   r   Úrecvp   s    

zMockSocket.recvc                 C   s   | j  |¡ d S r   )r2   rA   )r7   Útimeoutr   r   r   Ú
settimeoutv   s    zMockSocket.settimeoutc                 C   s"   t | jtƒr| j‚| j |¡ d S r   )r)   r3   rC   r5   rA   )r7   Úserverr   r   r   Úconnecty   s    zMockSocket.connectc                 C   s   | j  |||f¡ d S r   )r6   rA   )r7   ÚlevelÚoptionr    r   r   r   Ú
setsockopt~   s    zMockSocket.setsockopt)NN)Ú__name__Ú
__module__Ú__qualname__r8   Úpropertyr@   rB   rE   rH   rJ   rL   rO   r   r   r   r   r,   X   s   


r,   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚMockUnixSocketServerc                 C   s2   t j |¡rt  |¡ || _t tjtj¡| _d S r   )ÚosÚpathÚexistsÚremoveÚsocket_pathr=   ÚAF_UNIXÚSOCK_STREAM)r7   rY   r   r   r   r8   ƒ   s    
zMockUnixSocketServer.__init__c                 C   s    | j  | j¡ | j  d¡ | j S ©Né   )r=   ÚbindrY   ÚlistenrD   r   r   r   Ú	__enter__‰   s    zMockUnixSocketServer.__enter__c                 G   s   | j  ¡  t | j¡ d S r   )r=   rE   rU   rX   rY   )r7   Úargsr   r   r   Ú__exit__Ž   s    
zMockUnixSocketServer.__exit__N)rP   rQ   rR   r8   r`   rb   r   r   r   r   rT   ‚   s   rT   c                   @   s2   e Zd Zddd„Zddd„Zddd„Zd	d
„ ZdS )ÚMockSocketModuleNc                 C   s   || _ || _g | _d S r   )r3   r4   Úsockets)r7   r3   r4   r   r   r   r8   ”   s    zMockSocketModule.__init__r   c                 C   s"   t g | j| jd}| j |¡ |S )N)r3   r4   )r,   r3   r4   rd   rA   )r7   r@   ÚtypeÚprotoÚfilenor=   r   r   r   r=   ™   s      ÿzMockSocketModule.socketc                 C   sN   |pt |ƒrtjntj}|p tj}|p*tj}|tjkr:dnd}|||d|fgS )N)ú::1éË+  r   r   ©ú	127.0.0.1ri   r(   )r   r=   r>   r?   r[   ÚIPPROTO_TCP)r7   ÚhostÚportr@   re   rf   ÚflagsÚsockaddrr   r   r   Úgetaddrinfo    s    

ÿzMockSocketModule.getaddrinfoc                 C   s
   t t|ƒS r   )Úgetattrr=   )r7   Únamer   r   r   Ú__getattr__©   s    zMockSocketModule.__getattr__)NN)r   N)r   r   r   r   )rP   rQ   rR   r8   r=   rq   rt   r   r   r   r   rc   “   s   


	rc   c                   @   s   e Zd Zdd„ ZdS )ÚCustomizedClientc                 C   s   dS )N)r'   ó   valueó   END
r   )r7   Z
expect_casÚlineÚbufZremapped_keysZprefixed_keysr   r   r   Ú_extract_value®   s    zCustomizedClient._extract_valueN)rP   rQ   rR   rz   r   r   r   r   ru   ­   s   ru   c                   @   s<  e Z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d-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMS )NÚClientTestMixinc                 K   s4   t d|Ž}tt|ƒƒ}tjt t|d|¡d|_|S ©NÚ	localhostÚsock)Zside_effect)r}   )	r   r,   Úlistr   ÚMockÚ	functoolsÚpartialÚsetattrÚ_connect©r7   Úmock_socket_valuesÚkwargsÚclientr~   r   r   r   Úmake_client´   s    
ÿzClientTestMixin.make_clientc                 K   s4   t d|Ž}tt|ƒƒ}tjt t|d|¡d|_|S r|   )	ru   r,   r   r   r€   r   r‚   rƒ   r„   r…   r   r   r   Úmake_customized_client¿   s    
ÿz&ClientTestMixin.make_customized_clientc                 C   s†   |   dg¡}|jdddd}|dks(t‚| j dgdd}|jdddd}|dksTt‚| j dgdd}|jdddd	d
}|dks‚t‚d S )Nó   STORED
r'   rv   F©ÚnoreplyTúutf-8©Úencodingé0   ©r   ro   ©r‰   Úsetr!   ©r7   rˆ   Úresultr   r   r   Útest_set_successÊ   s    z ClientTestMixin.test_set_successc              	      s8   |   dg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X d S )Nr   c                      s   ˆ j dddd d S )Nõ   à¿¿rv   FrŒ   ©r”   r   ©rˆ   r   r   Ú_setÜ   s    z2ClientTestMixin.test_set_unicode_key.<locals>._set©r‰   r   r   r   ©r7   r›   r   rš   r   Útest_set_unicode_keyÙ   s    z$ClientTestMixin.test_set_unicode_keyc                 C   s0   | j dgdd}|jdddd}|dks,t‚d S )Nr‹   T©r#   r˜   rv   FrŒ   r“   r•   r   r   r   Útest_set_unicode_key_okâ   s    z'ClientTestMixin.test_set_unicode_key_okc                 C   s0   | j dgdd}|jdddd}|dks,t‚d S )Nr‹   TrŸ   õ   myâ˜ƒrv   FrŒ   r“   r•   r   r   r   Útest_set_unicode_key_ok_snowmanè   s    z/ClientTestMixin.test_set_unicode_key_ok_snowmanc              	      s8   |   dg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X d S )Nr‹   c                      s   ˆ j dddd d S )Nõ   helloworld_Â±901520_%c3rv   FrŒ   r™   r   rš   r   r   r›   ñ   s    zDClientTestMixin.test_set_unicode_char_in_middle_of_key.<locals>._setrœ   r   r   rš   r   Ú&test_set_unicode_char_in_middle_of_keyî   s    z6ClientTestMixin.test_set_unicode_char_in_middle_of_keyc              	      s8   |   dg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X d S )Nr‹   c                      s   ˆ j dddd d S )Nr¡   rv   FrŒ   r™   r   rš   r   r   r›   ú   s    zLClientTestMixin.test_set_unicode_char_in_middle_of_key_snowman.<locals>._setrœ   r   r   rš   r   Ú.test_set_unicode_char_in_middle_of_key_snowman÷   s    z>ClientTestMixin.test_set_unicode_char_in_middle_of_key_snowmanc              	      s8   |   dg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X d S )Nr   c                      s   ˆ j dddd d S )Nr'   r˜   FrŒ   r™   r   rš   r   r   r›     s    z4ClientTestMixin.test_set_unicode_value.<locals>._setrœ   r   r   rš   r   Útest_set_unicode_value   s    z&ClientTestMixin.test_set_unicode_valuec                 C   s0   | j dgdd}|jdddd}|dks,t‚d S )Nr‹   TrŸ   r£   rv   FrŒ   r“   r•   r   r   r   Ú)test_set_unicode_char_in_middle_of_key_ok	  s    z9ClientTestMixin.test_set_unicode_char_in_middle_of_key_okc                 C   sT   |   g ¡}|jdddd}|dks&t‚| j g dd}|jdddd}|dksPt‚d S )Nr'   rv   TrŒ   rŽ   r   r“   r•   r   r   r   Útest_set_noreply  s    
z ClientTestMixin.test_set_noreplyc                 C   s\   |   dg¡}|jddidd}|g ks*t‚| j dgdd}|jddidd}|g ksXt‚d S ©Nr‹   r'   rv   FrŒ   rŽ   r   )r‰   Úset_manyr!   r•   r   r   r   Útest_set_many_success  s    z%ClientTestMixin.test_set_many_successc                 C   s\   |   dg¡}|jddidd}|g ks*t‚| j dgdd}|jddidd}|g ksXt‚d S r©   )r‰   Z	set_multir!   r•   r   r   r   Útest_set_multi_success#  s    z&ClientTestMixin.test_set_multi_successc                 C   s\   |   ddg¡}|jdddd}|dks*t‚| j ddgdd	}|jdddd}|dksXt‚d S )
Nó   STOREDó   
r'   rv   FrŒ   TrŽ   r   ©r‰   Úaddr!   r•   r   r   r   Útest_add_stored.  s    zClientTestMixin.test_add_storedc                 C   sŒ   |   ddddddg¡}|jddd	d
 |jddd	d
}|d	ksBt‚| j ddddddgdd}|jddd	d
 |jddd	d
}|d	ksˆt‚d S )Nr­   r®   s   NOT_s   STORs   EDó   
r'   rv   FrŒ   rŽ   r   r¯   r•   r   r   r   Útest_add_not_stored8  s    ÿ ÿz#ClientTestMixin.test_add_not_storedc                 C   sH   |   dg¡}| d¡}|d ks"t‚|  dg¡}| d¡}|d ksDt‚d S )Nrw   r'   ©r‰   Úgetr!   rŠ   r•   r   r   r   Útest_get_not_foundH  s    

z"ClientTestMixin.test_get_not_foundc              	   C   sR   |   dg¡}t t¡ | d¡ W 5 Q R X t t¡ | dd¡ W 5 Q R X d S )Nr   s	   space keyrv   )r‰   r   r   r   rµ   r”   ©r7   rˆ   r   r   r   Útest_space_keyR  s
    zClientTestMixin.test_space_keyc                 C   sP   |   dg¡}|jddd}|dks&t‚|  dg¡}|jddd}|dksLt‚d S )Nrw   r'   Úfoobar©Údefaultr´   r•   r   r   r   Útest_get_not_found_defaultZ  s    z*ClientTestMixin.test_get_not_found_defaultc                 C   sX   | j dgdd}|jddd}|dks*t‚| j dgdd}|jddd}|dksTt‚d S )Nó   INVALID DATA
T)Z
ignore_excr'   r¹   rº   ©r‰   rµ   r!   r•   r   r   r   Útest_get_ignore_exc_defaultd  s    z+ClientTestMixin.test_get_ignore_exc_defaultc                 C   sl   |   ddg¡}|jdddd | d¡}|dks4t‚|  ddg¡}|jdddd | d¡}|dksht‚d S ©Nr‹   ó   VALUE key 0 5
value
END
r'   rv   FrŒ   )r‰   r”   rµ   r!   rŠ   r•   r   r   r   Útest_get_foundn  s     þÿ
þÿ
zClientTestMixin.test_get_foundc                 C   s*   |   dg¡}| ddg¡}|i ks&t‚d S ©Nrw   ó   key1ó   key2©r‰   Úget_manyr!   r•   r   r   r   Útest_get_many_none_found„  s    z(ClientTestMixin.test_get_many_none_foundc                 C   s*   |   dg¡}| ddg¡}|i ks&t‚d S rÃ   )r‰   Z	get_multir!   r•   r   r   r   Útest_get_multi_none_found‰  s    z)ClientTestMixin.test_get_multi_none_foundc                 C   s@   |   ddg¡}|jdddd | ddg¡}|ddiks<t‚d S )Nr‹   s   VALUE key1 0 6
value1
END
rÄ   ó   value1FrŒ   rÅ   ©r‰   r”   rÇ   r!   r•   r   r   r   Útest_get_many_some_foundŽ  s    þÿz(ClientTestMixin.test_get_many_some_foundc                 C   sV   |   ddddg¡}|jdddd |jdd	dd | ddg¡}|dd	d
œksRt‚d S )Nr‹   s   VALUE key1 0 6
value1
s   VALUE key2 0 6
value2
END
rÄ   rÊ   FrŒ   rÅ   ó   value2©rÄ   rÅ   rË   r•   r   r   r   Útest_get_many_all_found™  s    üÿz'ClientTestMixin.test_get_many_all_foundc              	      s8   |   dg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X d S )Nr   c                      s   ˆ   d¡ d S )Nr˜   ©rµ   r   rš   r   r   Ú_getª  s    z2ClientTestMixin.test_get_unicode_key.<locals>._getrœ   ©r7   rÑ   r   rš   r   Útest_get_unicode_key§  s    z$ClientTestMixin.test_get_unicode_keyc                 C   s*   |   dg¡}|jddd}|dks&t‚d S ©Nó   NOT_FOUND
r'   FrŒ   ©r‰   Údeleter!   r•   r   r   r   Útest_delete_not_found°  s    z%ClientTestMixin.test_delete_not_foundc                 C   s>   |   dddg¡}|jdddd |jddd}|dks:t‚d S ©	Nr­   r®   ó	   DELETED
r'   rv   FrŒ   T)r‰   r°   r×   r!   r•   r   r   r   Útest_delete_foundµ  s    z!ClientTestMixin.test_delete_foundc                 C   s(   |   g ¡}|jddd}|dks$t‚d S )Nr'   TrŒ   rÖ   r•   r   r   r   Útest_delete_noreply»  s    
z#ClientTestMixin.test_delete_noreplyc                 C   s(   |   g ¡}|jg dd}|dks$t‚d S )NFrŒ   T©r‰   Údelete_manyr!   r•   r   r   r   Útest_delete_many_no_keysÀ  s    
z(ClientTestMixin.test_delete_many_no_keysc                 C   s,   |   dg¡}|jdgdd}|dks(t‚d S )NrÕ   r'   FrŒ   TrÝ   r•   r   r   r   Útest_delete_many_none_foundÅ  s    z+ClientTestMixin.test_delete_many_none_foundc                 C   s@   |   dddg¡}|jdddd |jdgdd}|dks<t‚d S rÙ   ©r‰   r°   rÞ   r!   r•   r   r   r   Útest_delete_many_foundÊ  s    z&ClientTestMixin.test_delete_many_foundc                 C   sB   |   dddg¡}|jdddd |jddgdd}|d	ks>t‚d S ©
Nr‹   rÚ   rÕ   r'   rv   FrŒ   rÅ   Trá   r•   r   r   r   Útest_delete_many_some_foundÐ  s    z+ClientTestMixin.test_delete_many_some_foundc                 C   sB   |   dddg¡}|jdddd |jddgdd}|d	ks>t‚d S rã   )r‰   r°   Zdelete_multir!   r•   r   r   r   Útest_delete_multi_some_foundÖ  s    z,ClientTestMixin.test_delete_multi_some_foundc                 C   s,   |   dg¡}|jdddd}|d ks(t‚d S ©NrÕ   r'   r]   FrŒ   )r‰   Úincrr!   r•   r   r   r   Útest_incr_not_foundÜ  s    z#ClientTestMixin.test_incr_not_foundc                 C   s>   |   ddg¡}|jdddd |jdddd}|dks:t‚d S )Nr‹   ó   1
r'   r   FrŒ   r]   ©r‰   r”   rç   r!   r•   r   r   r   Útest_incr_foundá  s    zClientTestMixin.test_incr_foundc                 C   sF   |   dg¡}|jdddd |   g ¡}|jdddd}|d ksBt‚d S )Nr‹   r'   r   FrŒ   r]   Trê   r•   r   r   r   Útest_incr_noreplyç  s
    
z!ClientTestMixin.test_incr_noreplyc                 C   s,   |   dg¡}|jdddd}|d ks(t‚d S ræ   )r‰   Údecrr!   r•   r   r   r   Útest_decr_not_foundï  s    z#ClientTestMixin.test_decr_not_foundc                 C   s>   |   ddg¡}|jdddd |jdddd}|dks:t‚d S )Nr‹   ré   r'   é   FrŒ   r]   )r‰   r”   rí   r!   r•   r   r   r   Útest_decr_foundô  s    zClientTestMixin.test_decr_foundN))rP   rQ   rR   r‰   rŠ   r—   rž   r    r¢   r¤   r¥   r¦   r§   r¨   r«   r¬   r±   r³   r¶   r¸   r¼   r¿   rÂ   rÈ   rÉ   rÌ   rÏ   rÓ   rØ   rÛ   rÜ   rß   rà   râ   rä   rå   rè   rë   rì   rî   rð   r   r   r   r   r{   ²   sL   				





	r{   c                   @   sp  e Zd Ze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d-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Z d;d<„ Z!d=d>„ Z"d?d@„ Z#dAdB„ Z$dCdD„ Z%dEdF„ Z&dGdH„ Z'dIdJ„ Z(dKdL„ Z)dMdN„ Z*dOdP„ Z+dQdR„ Z,dSdT„ Z-dUdV„ Z.dWdX„ Z/dYdZ„ Z0d[d\„ Z1d]d^„ Z2d_d`„ Z3dadb„ Z4dcdd„ Z5dedf„ Z6dgdh„ Z7didj„ Z8dkdl„ Z9dmdn„ Z:dodp„ Z;dqdr„ Z<dsdt„ Z=dudv„ Z>dwdx„ Z?dydz„ Z@d{d|„ ZAd}d~„ ZBdd€„ ZCdd‚„ ZDdƒd„„ ZEd…d†„ ZFd‡dˆ„ ZGd‰dŠ„ ZHd‹dŒ„ ZIddŽ„ ZJdd„ ZKd‘d’„ ZLd“d”„ ZMd•d–„ ZNd—d˜„ ZOd™S )šÚ
TestClientc                 C   sX   |   dg¡}|jdddd}|dks(t‚| j dgdd}|jdddd}|dksTt‚d S ©	Nr‹   r'   rv   FrŒ   TrŽ   r   )r‰   rA   r!   r•   r   r   r   Útest_append_storedÿ  s    zTestClient.test_append_storedc                 C   sX   |   dg¡}|jdddd}|dks(t‚| j dgdd}|jdddd}|dksTt‚d S rò   )r‰   Úprependr!   r•   r   r   r   Útest_prepend_stored	  s    zTestClient.test_prepend_storedc              	   C   s°   |   dg¡}t t¡ |jddd dd W 5 Q R X t t¡ |jddddd W 5 Q R X t t¡ |jddddd W 5 Q R X t t¡ |jddddd W 5 Q R X d S )	Nr‹   r'   rv   FrŒ   Znonintegerstringz123 u   â°)r‰   r   r   r   Úcasr·   r   r   r   Útest_cas_malformed  s    zTestClient.test_cas_malformedc                 C   s\   |   dg¡}|jddddd}|dks*t‚| j dgdd	}|jddddd}|dksXt‚d S )
Nr‹   r'   rv   ó   123FrŒ   TrŽ   r   ©r‰   rö   r!   r•   r   r   r   Útest_cas_stored#  s    zTestClient.test_cas_storedc                 C   s\   |   dg¡}|jddddd}|dks*t‚| j dgdd}|jddddd}|dksXt‚d S )	Ns   EXISTS
r'   rv   rø   FrŒ   rŽ   r   rù   r•   r   r   r   Útest_cas_exists-  s    zTestClient.test_cas_existsc                 C   s\   |   dg¡}|jddddd}|d ks*t‚| j dgdd}|jddddd}|d ksXt‚d S )	NrÕ   r'   rv   rø   FrŒ   rŽ   r   rù   r•   r   r   r   Útest_cas_not_found7  s    zTestClient.test_cas_not_foundc                 C   s@  |   dddg¡}| ddg¡}|dddœks0t‚|   d	d
dddg¡}| ddg¡}|dddœksdt‚|   d	ddddg¡}| ddg¡}|dddœks˜t‚|   d	ddddg¡}| ddg¡}|dddœksÌt‚|   d	dddddg¡}| ddg¡}|dddœkst‚|   ddddddg¡}| ddg¡}|dddœks<t‚d S )Ns   VALUE key1 0 6s   
value1
VALUE key2 0 6
s   value2
END
rÄ   rÅ   rÊ   rÍ   rÎ   s   VALUE key1 0 6
s   value1s   
VALUE key2 0 6
s   value2
rw   s   value1
s   VALUE key2 0 6s	   
value2
s   VALUE key2 0 6
s   value2s   
END
s   ENDr®   s   
value1s   
VALUE key2 0 6s   
value2s   
ENDrÆ   r•   r   r   r   Útest_cr_nl_boundariesA  sx    ýÿûÿ	ûÿ	ûÿ	úÿ
úÿ
z TestClient.test_cr_nl_boundariesc              	      sJ   |   tdƒg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X ˆ jd ksFt‚d S )NÚfailc                      s   ˆ j ddd d S )Nr'   FrŒ   )r×   r   rš   r   r   Ú_delete  s    z1TestClient.test_delete_exception.<locals>._delete©r‰   rC   r   r   r~   r!   )r7   rÿ   r   rš   r   Útest_delete_exceptionŠ  s
    z TestClient.test_delete_exceptionc                 C   s(   |   dg¡}|jdd}|dks$t‚d S )Nó   OK
FrŒ   T)r‰   Ú	flush_allr!   r•   r   r   r   Útest_flush_all•  s    zTestClient.test_flush_allc              	      sJ   |   tdƒg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X ˆ jd ksFt‚d S )Nrþ   c                      s   ˆ   dd¡ d S )Nr'   r]   )rç   r   rš   r   r   Ú_incr  s    z-TestClient.test_incr_exception.<locals>._incrr   )r7   r  r   rš   r   Útest_incr_exceptionš  s
    zTestClient.test_incr_exceptionc              	      s8   |   dg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X d S )Nó   ERROR
c                      s   ˆ   d¡ d S ©Nr'   rÐ   r   rš   r   r   rÑ   ¨  s    z'TestClient.test_get_error.<locals>._get©r‰   r   r   r   rÒ   r   rš   r   Útest_get_error¥  s    zTestClient.test_get_errorc              	   C   s2   |   dddddddg¡}| d¡}|d	ks.t‚d S )
Ns	   VALUE keys    0 5s   
valuer²   s   ENDó   r®   r'   rv   r¾   r•   r   r   r   Útest_get_recv_chunks®  s
    ÿ
zTestClient.test_get_recv_chunksc              	      s8   |   dg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X d S )Nó   foobarbaz
c                      s   ˆ   d¡ d S r  rÐ   r   rš   r   r   rÑ   ¸  s    z/TestClient.test_get_unknown_error.<locals>._get©r‰   r   r   r   rÒ   r   rš   r   Útest_get_unknown_errorµ  s    z!TestClient.test_get_unknown_errorc                 C   s&   |   dg¡}| d¡}|dks"t‚d S )Nrw   r'   )NN©r‰   Zgetsr!   r•   r   r   r   Útest_gets_not_found¾  s    
zTestClient.test_gets_not_foundc                 C   s,   |   dg¡}|jdddd}|dks(t‚d S )Nrw   r'   ÚfooÚbar)r»   Zcas_default)r  r  r  r•   r   r   r   Útest_gets_not_found_defaultsÃ  s    z'TestClient.test_gets_not_found_defaultsc                 C   s&   |   dg¡}| d¡}|dks"t‚d S )Ns   VALUE key 0 5 10
value
END
r'   )rv   s   10r  r•   r   r   r   Útest_gets_foundÈ  s    
zTestClient.test_gets_foundc                 C   s*   |   dg¡}| ddg¡}|i ks&t‚d S rÃ   ©r‰   Z	gets_manyr!   r•   r   r   r   Útest_gets_many_none_foundÍ  s    z$TestClient.test_gets_many_none_foundc                 C   s.   |   dg¡}| ddg¡}|ddiks*t‚d S )Ns    VALUE key1 0 6 11
value1
END
rÄ   rÅ   )rÊ   s   11r  r•   r   r   r   Útest_gets_many_some_foundÒ  s    z$TestClient.test_gets_many_some_foundc                 C   s*   |   dg¡}|jddd}|dks&t‚d S rÔ   ©r‰   Útouchr!   r•   r   r   r   Útest_touch_not_found×  s    zTestClient.test_touch_not_foundc                 C   s*   |   dg¡}|jddd}|dks&t‚d S )Ns	   TOUCHED
r'   FrŒ   Tr  r•   r   r   r   Útest_touch_foundÜ  s    zTestClient.test_touch_foundc                 C   s0   |   g ¡}| ¡ }|d kst‚|jd ks,t‚d S r   )r‰   Úquitr!   r~   r•   r   r   r   Ú	test_quitá  s    
zTestClient.test_quitc                 C   s(   |   tdƒg¡}| ¡ }|d ks$t‚d S )NÚshutdown)r‰   r
   r  r!   r•   r   r   r   Útest_shutdownç  s    zTestClient.test_shutdownc              	      s,   ‡ fdd„}t  t¡ |ƒ  W 5 Q R X d S )Nc                     s   ˆ   dg¡} |  ¡  d S )Ns   ERROR: shutdown not enabled
)r‰   r  rš   rD   r   r   Ú	_shutdowní  s    z4TestClient.test_shutdown_disabled.<locals>._shutdown)r   r   r   )r7   r!  r   rD   r   Útest_shutdown_disabledì  s    z!TestClient.test_shutdown_disabledc                 C   sX   |   dg¡}|jdddd}|dks(t‚| j dgdd}|jdddd}|dksTt‚d S rò   ©r‰   Úreplacer!   r•   r   r   r   Útest_replace_storedô  s    zTestClient.test_replace_storedc                 C   sX   |   dg¡}|jdddd}|dks(t‚| j dgdd}|jdddd}|dksTt‚d S )Nó   NOT_STORED
r'   rv   FrŒ   rŽ   r   r#  r•   r   r   r   Útest_replace_not_storedþ  s    z"TestClient.test_replace_not_storedc                 C   sF   G dd„ dƒ}| j dg|ƒ d}| dddi¡ |jjdgksBt‚d S )	Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z0TestClient.test_serialization.<locals>.JsonSerdec                 S   s   t  |¡ d¡dfS )NÚasciir   )ÚjsonÚdumpsÚencode©r7   r"   r    r   r   r   Ú	serialize
  s    z:TestClient.test_serialization.<locals>.JsonSerde.serializec                 S   s   t  | d¡¡S )Nr(  ©r)  ÚloadsÚdecode©r7   r"   r    ro   r   r   r   Údeserialize  s    z<TestClient.test_serialization.<locals>.JsonSerde.deserializeN©rP   rQ   rR   r-  r2  r   r   r   r   Ú	JsonSerde	  s   r4  r‹   ©Zserder"   r:   Úds$   set key 0 0 10 noreply
{"c": "d"}
)r‰   r”   r~   r0   r!   )r7   r4  rˆ   r   r   r   Útest_serialization  s    zTestClient.test_serializationc                 C   sH   dd„ }| j ddg|d}|jt ddg¡dd |jjd	gksDt‚d S )
Nc                 S   s   |t |tƒrdndfS ©Nr]   r   ©r)   Úint©r"   r    r   r   r   Ú_ser  s    z1TestClient.test_serialization_flags.<locals>._serr‹   ©Ú
serializer©ó   aó   s©ó   br   FrŒ   s    set a 0 0 1
s
set b 1 0 1
0
©r‰   rª   r-   ÚOrderedDictr~   r0   r!   ©r7   r<  rˆ   r   r   r   Útest_serialization_flags  s     ÿz#TestClient.test_serialization_flagsc                 C   sJ   dd„ }| j ddg|d}|jt ddg¡ddd	 |jjd
gksFt‚d S )Nc                 S   s   |t |tƒrdndfS r8  r9  r;  r   r   r   r<    s    z<TestClient.test_serialization_overridden_flags.<locals>._serr‹   r=  r?  rB  Fé   r’   ó    set a 5 0 1
s
set b 5 0 1
0
rD  rF  r   r   r   Ú#test_serialization_overridden_flags  s      ÿz.TestClient.test_serialization_overridden_flagsc                 C   s>   |   ddg¡}|jt ddg¡ddd |jjdgks:t‚d S )Nr‹   r?  rB  FrH  r’   rI  rD  r·   r   r   r   Útest_explicit_flags(  s      ÿzTestClient.test_explicit_flagsc                 C   sP   |   dg¡}|jdddd}|dks(t‚|jjdks8t‚t|jjƒdksLt‚d S )Nr‹   r'   rv   FrŒ   Tr]   )r‰   r”   r!   r~   r1   Úlenr0   r•   r   r   r   Útest_set_socket_handling/  s
    z#TestClient.test_set_socket_handlingc              	      s8   |   dg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X d S )Nr  c                      s   ˆ j dddd d S ©Nr'   rv   FrŒ   r™   r   rš   r   r   r›   9  s    z'TestClient.test_set_error.<locals>._setr	  r   r   rš   r   Útest_set_error6  s    zTestClient.test_set_errorc              	      sJ   |   tdƒg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X ˆ jd ksFt‚d S )Nrþ   c                      s   ˆ j dddd d S rN  r™   r   rš   r   r   r›   B  s    z+TestClient.test_set_exception.<locals>._setr   r   r   rš   r   Útest_set_exception?  s
    zTestClient.test_set_exceptionc              	      s8   |   dg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X d S )Ns   CLIENT_ERROR some message
c                      s   ˆ j dddd d S )Nr"   r    FrŒ   r™   r   rš   r   r   r›   M  s    z.TestClient.test_set_client_error.<locals>._set)r‰   r   r   r   r   r   rš   r   Útest_set_client_errorJ  s    z TestClient.test_set_client_errorc              	      s8   |   dg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X d S )Ns   SERVER_ERROR some message
c                      s   ˆ j dddd d S rN  r™   r   rš   r   r   r›   V  s    z.TestClient.test_set_server_error.<locals>._set)r‰   r   r   r	   r   r   rš   r   Útest_set_server_errorS  s    z TestClient.test_set_server_errorc              	      sL   |   dtdƒg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X ˆ jd ksHt‚d S )Nó   VALUE r   c                      s   ˆ j dddd d S rN  r™   r   rš   r   r   r›   d  s    zGTestClient.test_closing_socket_on_unexpected_closed_error.<locals>._set)r‰   r
   r   r   r~   r!   r   r   rš   r   Ú.test_closing_socket_on_unexpected_closed_error\  s    þÿz9TestClient.test_closing_socket_on_unexpected_closed_errorc              	      s8   |   dg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X d S )Nr  c                      s   ˆ j dddd d S rN  r™   r   rš   r   r   r›   o  s    z/TestClient.test_set_unknown_error.<locals>._setr  r   r   rš   r   Útest_set_unknown_errorl  s    z!TestClient.test_set_unknown_errorc              	      s8   |   dg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X d S )Nr   c                      s   ˆ j dddd d S )Ns   key has spacerv   FrŒ   r™   r   rš   r   r   r›   x  s    z0TestClient.test_set_key_with_space.<locals>._setrœ   r   r   rš   r   Útest_set_key_with_spaceu  s    z"TestClient.test_set_key_with_spacec              	      s8   |   dg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X d S )Nr   c                      s   ˆ j dddd d S )Ns   key
rv   FrŒ   r™   r   rš   r   r   r›     s    z2TestClient.test_set_key_with_newline.<locals>._setrœ   r   r   rš   r   Útest_set_key_with_newline~  s    z$TestClient.test_set_key_with_newlinec              	      s8   |   dg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X d S )Nr   c                      s   ˆ j dddd d S )Ns   keyrv   FrŒ   r™   r   rš   r   r   r›   Š  s    z:TestClient.test_set_key_with_carriage_return.<locals>._setrœ   r   r   rš   r   Ú!test_set_key_with_carriage_return‡  s    z,TestClient.test_set_key_with_carriage_returnc              	      s8   |   dg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X d S )Nr   c                      s   ˆ j dddd d S )Ns   key rv   FrŒ   r™   r   rš   r   r   r›   “  s    z9TestClient.test_set_key_with_null_character.<locals>._setrœ   r   r   rš   r   Ú test_set_key_with_null_character  s    z+TestClient.test_set_key_with_null_characterc                    sf   |   dg¡‰ G dd„ dƒ}dD ]B‰d|ƒ dfD ]0‰‡ ‡‡fdd„}t t¡ |ƒ  W 5 Q R X q.qd S )	Nr   c                   @   s   e Zd ZdZdd„ ZdS )z@TestClient.test_set_key_with_noninteger_expire.<locals>._OneLikez&object that looks similar to the int 1c                 S   s   dS )NÚ1r   rD   r   r   r   Ú__str__Ÿ  s    zHTestClient.test_set_key_with_noninteger_expire.<locals>._OneLike.__str__N)rP   rQ   rR   Ú__doc__r[  r   r   r   r   Ú_OneLikeœ  s   r]  )TFg      ø?rZ  c                      s   ˆ j ddˆˆd d S )Ns   finekeys	   finevalue)r   Úexpirer™   r   ©rˆ   r^  r   r   r   r›   ¥  s    z<TestClient.test_set_key_with_noninteger_expire.<locals>._setrœ   )r7   r]  r›   r   r_  r   Ú#test_set_key_with_noninteger_expire™  s    z.TestClient.test_set_key_with_noninteger_expirec                 C   s¤   |   dg¡}|jddidd}|g ks*t‚|jjdks:t‚t|jjƒdksNt‚| j dgdd}|jddidd}|g ks|t‚|jjdksŒt‚t|jjƒdks t‚d S )	Nr‹   r'   rv   FrŒ   r]   rŽ   r   )r‰   rª   r!   r~   r1   rL  r0   r•   r   r   r   Útest_set_many_socket_handling«  s    z(TestClient.test_set_many_socket_handlingc              	      s˜   |   dtdƒg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X ˆ jd ksHt‚| j dtdƒgdd‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X ˆ jd ks”t‚d S )Nr‹   rþ   c                      s   ˆ j dddœdd d S ©Nrv   )r'   s   otherFrŒ   ©rª   r   rš   r   r   r›   ¼  s    z0TestClient.test_set_many_exception.<locals>._setrŽ   r   c                      s   ˆ j dddœdd d S rb  rc  r   rš   r   r   r›   Ç  s    r   r   r   rš   r   Útest_set_many_exception¹  s    z"TestClient.test_set_many_exceptionc                 C   s<   |   ddg¡}| ¡ }|jjdgks(t‚|ddiks8t‚d S )Nó   STAT fake_stats 1
rw   ó   stats
ó
   fake_statsr]   ©r‰   Ústatsr~   r0   r!   r•   r   r   r   Ú
test_statsÏ  s    zTestClient.test_statsc                 C   s>   |   ddg¡}| d¡}|jjdgks*t‚|ddiks:t‚d S )Nre  rw   Zsome_args   stats some_arg
rg  r]   rh  r•   r   r   r   Útest_stats_with_argsÕ  s    
zTestClient.test_stats_with_argsc                 C   s*   |   ddg¡}| ¡ }|ddiks&t‚d S )Ns   STAT fake_stats 
rw   rg  r   )r‰   ri  r!   r•   r   r   r   Útest_stats_with_blank_valueÛ  s    z&TestClient.test_stats_with_blank_valuec                 C   sh   |   ddddddddd	d
ddg¡}| ¡ }|jjdgks<t‚ddddddddddddœ}||ksdt‚d S )Ns   STAT cmd_get 2519
s   STAT cmd_set 3099
s   STAT evictions 939
s   STAT libevent 2.0.19-stable
s   STAT hash_is_expanding 0
s   STAT rusage_user 0.609165
s   STAT rusage_system 0.852791
s   STAT slab_reassign_running 1
s   STAT version 1.4.14
s   STAT umask 777
s   STAT auth_enabled_sasl yes
rw   rf  i×	  i  i«  s   2.0.19-stableFgXÅ™G~ã?g!WêYJë?Ts   1.4.14iÿ  )s   cmd_gets   cmd_sets	   evictionss   libevents   hash_is_expandings   rusage_users   rusage_systems   slab_reassign_runnings   versions   umasks   auth_enabled_saslrh  )r7   rˆ   r–   Úexpectedr   r   r   Útest_stats_conversionsà  s<    ñÿõz!TestClient.test_stats_conversionsc                 C   sB   |   ddg¡}| ddd¡}|jjdgks.t‚|ddiks>t‚d S )Ns   ITEM bob [7 b; 0 s]
rw   Z	cachedumprZ  s   stats cachedump 1 1
s   bobs
   [7 b; 0 s]rh  r•   r   r   r   Útest_stats_cachedump  s    zTestClient.test_stats_cachedumpc                 C   s8   |   dg¡}| d¡}|jjdgks(t‚|dks4t‚d S )Nr  é   s   cache_memlimit 8
T)r‰   Zcache_memlimitr~   r0   r!   r•   r   r   r   Útest_cache_memlimit  s    
zTestClient.test_cache_memlimitc                 C   s   |   dg¡}d|d< d S )Nr‹   rv   r'   ©r‰   r·   r   r   r   Ú!test_python_dict_set_is_supported  s    z,TestClient.test_python_dict_set_is_supportedc                 C   s    |   dg¡}|d dkst‚d S )NrÁ   r'   rv   ©r‰   r!   r·   r   r   r   Ú!test_python_dict_get_is_supported  s    z,TestClient.test_python_dict_get_is_supportedc              	      s8   |   dg¡‰ ‡ fdd„}t t¡ |ƒ  W 5 Q R X d S )Nrw   c                      s   ˆ d  d S r  r   r   rš   r   r   rÑ     s    zDTestClient.test_python_dict_get_not_found_is_supported.<locals>._get)r‰   r   r   ÚKeyErrorrÒ   r   rš   r   Ú+test_python_dict_get_not_found_is_supported  s    z6TestClient.test_python_dict_get_not_found_is_supportedc                 C   s   |   dg¡}|d= d S )NrÚ   r'   rr  r·   r   r   r   Ú!test_python_dict_del_is_supported"  s    z,TestClient.test_python_dict_del_is_supportedc              	   C   s0   |   dg¡}t t¡ | d¡ W 5 Q R X d S )Nrw   sû   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx©r‰   r   r   r   rµ   r·   r   r   r   Útest_too_long_key&  s    zTestClient.test_too_long_keyc              	   C   sT   | j dgdd}t t¡ | d¡ W 5 Q R X t t¡ | d¡ W 5 Q R X d S )Nr‹   TrŸ   uî  myâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒmyâ˜ƒuÂ  à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿à¿¿ry  r·   r   r   r   Útest_too_long_unicode_key,  s
    z$TestClient.test_too_long_unicode_keyc              	   C   s0   |   dg¡}t t¡ | d¡ W 5 Q R X d S )Nrw   s   abc xyzry  r·   r   r   r   Útest_key_contains_space5  s    z"TestClient.test_key_contains_spacec              	   C   s0   |   dg¡}t t¡ | d¡ W 5 Q R X d S )Nrw   u   ã“ã‚“ã«ã¡ã¯ry  r·   r   r   r   Útest_key_contains_nonascii:  s    z%TestClient.test_key_contains_nonasciic                 C   s,   | j |dd}t||ƒ|Ž }|dks(t‚d S ©NF©Zdefault_noreply©r‰   rr   r!   ©r7   Úcmdra   Úresponserˆ   r–   r   r   r   Ú_default_noreply_false@  s    z!TestClient._default_noreply_falsec                 C   s,   | j |dd}t||ƒ|Ž }|dks(t‚d S ©NTr  r€  r  r   r   r   Ú_default_noreply_trueE  s    z TestClient._default_noreply_truec                 C   s,   | j |dd}t||ƒ|Ž }|g ks(t‚d S r…  r€  r  r   r   r   Ú$_default_noreply_true_and_empty_listJ  s    z/TestClient._default_noreply_true_and_empty_listc              	   C   sJ   t  t¡ |  dddg¡ W 5 Q R X |  dddg¡ |  dddg¡ d S ©Nr”   ©r'   rv   ó	   UNKNOWN
r&  ©r   r   r   r„  r†  rD   r   r   r   Útest_default_noreply_setO  s    z#TestClient.test_default_noreply_setc              	   C   s\   t  t¡2 | jdgdd}| ddi¡}|dgks8t‚W 5 Q R X |  dddifdg¡ d S ©NrŠ  Fr  r'   rv   rª   r&  )r   r   r   r‰   rª   r!   r‡  r•   r   r   r   Útest_default_noreply_set_manyU  s      ÿz(TestClient.test_default_noreply_set_manyc                 C   s$   |   dddg¡ |  dddg¡ d S ©Nr°   r‰  r&  ©r„  r†  rD   r   r   r   Útest_default_noreply_add^  s    z#TestClient.test_default_noreply_addc                 C   s$   |   dddg¡ |  dddg¡ d S ©Nr$  r‰  r&  r  rD   r   r   r   Útest_default_noreply_replaceb  s    z'TestClient.test_default_noreply_replacec                 C   s$   |   dddg¡ |  dddg¡ d S ©NrA   r‰  r&  r  rD   r   r   r   Útest_default_noreply_appendf  s    z&TestClient.test_default_noreply_appendc                 C   s$   |   dddg¡ |  dddg¡ d S ©Nrô   r‰  r&  r  rD   r   r   r   Útest_default_noreply_prependj  s    z'TestClient.test_default_noreply_prependc                 C   s$   |   dddg¡ |  dddg¡ d S ©Nr  )r'   rÕ   r  rD   r   r   r   Útest_default_noreply_touchn  s    z%TestClient.test_default_noreply_touchc                 C   s$   |   dddg¡ |  dddg¡ d S ©Nr  r   s   __FAKE_RESPONSE__
r  rD   r   r   r   Útest_default_noreply_flush_allr  s    z)TestClient.test_default_noreply_flush_allc                 C   s(   | j dgdd}| ¡ }|dks$t‚d S )Ns   VERSION 1.2.3
Fr  s   1.2.3)r‰   r   r!   r•   r   r   r   Útest_version_successv  s    zTestClient.test_version_successc              	   C   s2   | j dgdd}t t¡ | ¡  W 5 Q R X d S )Nr½   Fr  )r‰   r   r   r   r   r·   r   r   r   Útest_version_exception{  s    z!TestClient.test_version_exceptionc                 C   s>   |   ddg¡}| d¡}|dks$t‚| d¡}|dks:t‚d S )Nó   REPLY
ó   REPLY
LEFTOVERó   miscó   REPLY©r‰   Úraw_commandr!   r•   r   r   r   Ú#test_raw_command_default_end_tokens€  s
    

z.TestClient.test_raw_command_default_end_tokensc                 C   sz   |   ddddg¡}d}| d|¡}|dks.t‚| d|¡}|dksFt‚| d|¡}|dks^t‚| dd	¡}|dksvt‚d S )
Ns   REPLY
END
s   REPLY
END
LEFTOVERs   REPLYEND
LEFTOVERs   REPLY
LEFTOVERrw   r   rž  r¡  r®   r¢  )r7   rˆ   Z
end_tokensr–   r   r   r   Ú"test_raw_command_custom_end_tokens‡  s     üÿz-TestClient.test_raw_command_custom_end_tokensc              	   C   sT   |   ddg¡}t t¡ | d¡ W 5 Q R X t t¡ | dd¡ W 5 Q R X d S )Nr¡  r   rw   ©r‰   r   r   Ú
IndexErrorr£  r·   r   r   r   Ú#test_raw_command_missing_end_tokensš  s
    z.TestClient.test_raw_command_missing_end_tokensc              	   C   s2   |   dg¡}t t¡ | dd¡ W 5 Q R X d S )Nr¡  r   r   r¦  r·   r   r   r   Ú!test_raw_command_empty_end_tokens¡  s    z,TestClient.test_raw_command_empty_end_tokensc                 C   s^   |   ddddg¡}| d¡dks$t‚| d¡dks6t‚| d¡dksHt‚| d¡dksZt‚d S )Nrž  rŸ  r"   r¡  r'   r¢  r·   r   r   r   Útest_raw_command_types§  s    
ÿz!TestClient.test_raw_command_typesc                 C   sf   |   ddddg¡}| dd¡dks&t‚| dd¡dks:t‚| dd¡dksNt‚| dd¡dksbt‚d S )Nrž  rŸ  r"   z
r¡  r'   r²   r¢  r·   r   r   r   Útest_send_end_token_types°  s    
ÿz$TestClient.test_send_end_token_typesN)PrP   rQ   rR   r   ró   rõ   r÷   rú   rû   rü   rý   r  r  r  r
  r  r  r  r  r  r  r  r  r  r  r   r"  r%  r'  r7  rG  rJ  rK  rM  rO  rP  rQ  rR  rT  rU  rV  rW  rX  rY  r`  ra  rd  rj  rk  rl  rn  ro  rq  rs  ru  rw  rx  rz  r{  r|  r}  r„  r†  r‡  rŒ  rŽ  r‘  r“  r•  r—  r™  r›  rœ  r  r¤  r¥  r¨  r©  rª  r«  r   r   r   r   rñ   û  sš   




I		



								%				rñ   c                   @   s|   e Zd Zdd„ Zdd„ Zdd„ Ze de 	¡ kd¡d	d
„ ƒZ
e d¡dd„ ƒZe d¡dd„ ƒZdd„ Zdd„ Zdd„ ZdS )ÚTestClientSocketConnectc                 C   sÒ   d}t |tƒ d}| ¡  |jj|gks,t‚|jjtjks>t‚d}d}t |||tƒ d}| ¡  |jj	||gkstt‚t |tƒ d}| ¡  |jj
g ksšt‚t |tƒ dd}| ¡  |jj
tjtjdfgksÎt‚d S )	Nrj   ©Úsocket_modulerï   é   ©Úconnect_timeoutrI   r®  T©r®  Zno_delayr]   )r   rc   r„   r~   r5   r!   r@   r=   r?   r2   r6   rl   ÚTCP_NODELAY©r7   rK   rˆ   rI   r±  r   r   r   Útest_socket_connect_ipv4¼  s.    üÿz0TestClientSocketConnect.test_socket_connect_ipv4c                 C   sÖ   d}t |tƒ d}| ¡  |jj|d gks0t‚|jjtjksBt‚d}d}t |||tƒ d}| ¡  |jj	||gksxt‚t |tƒ d}| ¡  |jj
g ksžt‚t |tƒ dd}| ¡  |jj
tjtjd	fgksÒt‚d S )
N©rh   ri   r­  )r   r   rï   r¯  r°  Tr²  r]   )r   rc   r„   r~   r5   r!   r@   r=   r>   r2   r6   rl   r³  r´  r   r   r   Útest_socket_connect_ipv6Ù  s.    üÿz0TestClientSocketConnect.test_socket_connect_ipv6c              	   C   sH   dt  ¡ › }t|ƒ( t|ƒ}| ¡  |jjtjks:t	‚W 5 Q R X d S )Nz/tmp/pymemcache.)
rU   ÚgetpidrT   r   r„   r~   r@   r=   rZ   r!   ©r7   rK   rˆ   r   r   r   Útest_socket_connect_unixö  s
    
z0TestClientSocketConnect.test_socket_connect_unixÚLinuxz.Socket keepalive only support Linux platforms.c              	   C   sl   d}zt |tƒ tƒ d}| ¡  W n tk
r@   |  d¡ Y nX |  t¡ t |tƒ dd W 5 Q R X d S )Nr¶  ©r®  Zsocket_keepalivezSystemError unexpectedly raisedT)r   rc   r   r„   ÚSystemErrorrþ   ÚassertRaisesr   r¹  r   r   r   Útest_linux_socket_keepaliveþ  s    ýz3TestClientSocketConnect.test_linux_socket_keepalivezplatform.systemc              	   C   s6   d|_ d}|  t¡ t|tƒ tƒ d W 5 Q R X d S )NÚDarwinr¶  r¼  ©Zreturn_valuer¾  r½  r   rc   r   ©r7   Zplatform_mockrK   r   r   r   Útest_osx_socket_keepalive  s    ýz1TestClientSocketConnect.test_osx_socket_keepalivec              	   C   s6   d|_ d}|  t¡ t|tƒ tƒ d W 5 Q R X d S )NÚWindowsr¶  r¼  rÁ  rÂ  r   r   r   Útest_windows_socket_keepalive  s    ýz5TestClientSocketConnect.test_windows_socket_keepalivec              	   C   st   d}t tƒ d}t||d}t t¡ | ¡  W 5 Q R X t|jƒdksLt‚|jd j	g ks`t‚|jd j
spt‚d S )N©zexample.comri   )r3   r­  r]   r   )rc   ÚOSErrorr   r   r   r„   rL  rd   r!   r5   r1   ©r7   rK   r®  rˆ   r   r   r   Ú%test_socket_connect_closes_on_failure(  s    z=TestClientSocketConnect.test_socket_connect_closes_on_failurec                 C   sB   d}t |tƒ d}| ¡  |jd k	s(t‚| ¡  |jd ks>t‚d S )NrÆ  r­  )r   rc   r„   r~   r!   rE   r¹  r   r   r   Útest_socket_close3  s    z)TestClientSocketConnect.test_socket_closec                 C   sL   d}t tƒ d}t||d}| ¡  |jd k	s2t‚| ¡  |jd ksHt‚d S )NrÆ  )r4   r­  )rc   rÇ  r   r„   r~   r!   rE   rÈ  r   r   r   Útest_socket_close_exception=  s    z3TestClientSocketConnect.test_socket_close_exceptionN)rP   rQ   rR   rµ  r·  rº  ÚunittestZskipIfÚplatformÚsystemr¿  r   ÚpatchrÃ  rÅ  rÉ  rÊ  rË  r   r   r   r   r¬  º  s   
 ÿ



r¬  c                   @   st   e Z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S )ÚTestPooledClientc                    s:   t d|Ž‰ tt|ƒƒˆ _td|Ž}t ‡ fdd„¡|_|S )Nr}   c                      s   ˆ S r   r   r   ©Zmock_clientr   r   Ú<lambda>N  r   z.TestPooledClient.make_client.<locals>.<lambda>)r}   )r}   ©r   r,   r   r~   r   r   Z
ObjectPoolÚclient_pool©r7   r†   r‡   rˆ   r   rÑ  r   r‰   J  s
    

zTestPooledClient.make_clientc                 C   s,   | j |dd}t||ƒ|Ž }|dks(t‚d S r~  r€  r  r   r   r   r„  Q  s    z'TestPooledClient._default_noreply_falsec                 C   s,   | j |dd}t||ƒ|Ž }|dks(t‚d S r…  r€  r  r   r   r   r†  V  s    z&TestPooledClient._default_noreply_truec                 C   s,   | j |dd}t||ƒ|Ž }|g ks(t‚d S r…  r€  r  r   r   r   r‡  [  s    z5TestPooledClient._default_noreply_true_and_empty_listc              	   C   sJ   t  t¡ |  dddg¡ W 5 Q R X |  dddg¡ |  dddg¡ d S rˆ  r‹  rD   r   r   r   rŒ  `  s    z)TestPooledClient.test_default_noreply_setc              	   C   sN   t  t¡$ | jdgdd}| ddi¡ W 5 Q R X |  dddifdg¡ d S r  )r   r   r   r‰   rª   r‡  r·   r   r   r   rŽ  f  s      ÿz.TestPooledClient.test_default_noreply_set_manyc                 C   s$   |   dddg¡ |  dddg¡ d S r  r  rD   r   r   r   r‘  n  s    z)TestPooledClient.test_default_noreply_addc                 C   s$   |   dddg¡ |  dddg¡ d S r’  r  rD   r   r   r   r“  r  s    z-TestPooledClient.test_default_noreply_replacec                 C   s$   |   dddg¡ |  dddg¡ d S r”  r  rD   r   r   r   r•  v  s    z,TestPooledClient.test_default_noreply_appendc                 C   s$   |   dddg¡ |  dddg¡ d S r–  r  rD   r   r   r   r—  z  s    z-TestPooledClient.test_default_noreply_prependc                 C   s$   |   dddg¡ |  dddg¡ d S r˜  r  rD   r   r   r   r™  ~  s    z+TestPooledClient.test_default_noreply_touchc                 C   s$   |   dddg¡ |  dddg¡ d S rš  r  rD   r   r   r   r›  ‚  s    z/TestPooledClient.test_default_noreply_flush_allc                 C   s6   G dd„ dt ƒ}tdƒ}||_t|j ¡ |ƒs2t‚d S )Nc                   @   s   e Zd ZdS )z5TestPooledClient.test_custom_client.<locals>.MyClientN)rP   rQ   rR   r   r   r   r   ÚMyClient‡  s   rÖ  )rm   ri   )r   r   Zclient_classr)   rÔ  rµ   r!   )r7   rÖ  rˆ   r   r   r   Útest_custom_client†  s    z#TestPooledClient.test_custom_clientN)rP   rQ   rR   r‰   r„  r†  r‡  rŒ  rŽ  r‘  r“  r•  r—  r™  r›  r×  r   r   r   r   rÐ  I  s   rÐ  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestPooledClientIdleTimeoutc                    sB   t d|Ž‰ tt|ƒƒˆ _tdddi|—Ž}t ‡ fdd„¡|_|S )Nr}   Zpool_idle_timeouté<   c                      s   ˆ S r   r   r   rÑ  r   r   rÒ  ”  r   z9TestPooledClientIdleTimeout.make_client.<locals>.<lambda>)r}   )r}   rÓ  rÕ  r   rÑ  r   r‰     s
    
z'TestPooledClientIdleTimeout.make_clientc                 C   s”   G dd„ dƒ}|ƒ }|   dgd ¡}|j|j_dd„ |j_| dd¡ |jd	ksTt‚| d¡ |jd	kslt‚d
d„ |j_| d¡ |jdkst‚d S )Nc                   @   s   e Zd ZdZdd„ ZdS )z;TestPooledClientIdleTimeout.test_free_idle.<locals>.Counterr   c                 S   s   |  j d7  _ d S r\   )Úcount)r7   Úobjr   r   r   Ú	increment›  s    zETestPooledClientIdleTimeout.test_free_idle.<locals>.Counter.incrementN)rP   rQ   rR   rÚ  rÜ  r   r   r   r   ÚCounter˜  s   rÝ  rÁ   rï   c                   S   s   dS )Nr   r   r   r   r   r   rÒ  ¢  r   z<TestPooledClientIdleTimeout.test_free_idle.<locals>.<lambda>r'   rv   r   c                   S   s   dS )Né=   r   r   r   r   r   rÒ  ª  r   r]   )	r‰   rÜ  rÔ  Z_after_removeZ_idle_clockr”   rÚ  r!   rµ   )r7   rÝ  Úremovedrˆ   r   r   r   Útest_free_idle—  s    


z*TestPooledClientIdleTimeout.test_free_idleN)rP   rQ   rR   r‰   rà  r   r   r   r   rØ    s   rØ  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestMockClientc                 K   s   t d|Ž}tt|ƒƒ|_|S )Nr}   )r}   )r   r,   r   r~   rÕ  r   r   r   r‰   °  s    
zTestMockClient.make_clientc                 C   s8   |   ddg¡}|jdddd}| d¡}|dks4t‚d S rÀ   ©r‰   r”   rµ   r!   r•   r   r   r   rÂ   µ  s    þÿ
zTestMockClient.test_get_foundc                 C   s‚   G dd„ dƒ}| j ddddg|ƒ d}|jddd	d
}| d¡}|dksLt‚|jdtddd	d
}| d¡}|tddks~t‚d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z6TestMockClient.test_deserialization.<locals>.JsonSerdec                 S   s&   t |tƒrt |¡ d¡dfS |dfS )NúUTF-8r]   r   )r)   Údictr)  r*  r+  r,  r   r   r   r-  Â  s    
z@TestMockClient.test_deserialization.<locals>.JsonSerde.serializec                 S   s   |dkrt  | d¡¡S |S )Nr]   rã  r.  r1  r   r   r   r2  Ç  s    zBTestMockClient.test_deserialization.<locals>.JsonSerde.deserializeNr3  r   r   r   r   r4  Á  s   r4  r‹   s   VALUE key1 0 5
hello
END
s*   VALUE key2 0 18
{"hello": "world"}
END
r5  rÄ   s   helloFrŒ   rÅ   Zworld)Zhello)r‰   r”   rµ   r!   rä  )r7   r4  rˆ   r–   r   r   r   Útest_deserializationÀ  s    üù


z#TestMockClient.test_deserializationN)rP   rQ   rR   r‰   rÂ   rå  r   r   r   r   rá  ¯  s   rá  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestPrefixedClientc                 K   s$   t dddi|—Ž}tt|ƒƒ|_|S )Nr}   r$   ó   xyz:)r}   ©r   r,   r   r~   rÕ  r   r   r   r‰   à  s    zTestPrefixedClient.make_clientc                 C   s8   |   ddg¡}|jdddd}| d¡}|dks4t‚d S )Nr‹   ó   VALUE xyz:key 0 5
value
END
r'   rv   FrŒ   râ  r•   r   r   r   rÂ   å  s    þÿ
z!TestPrefixedClient.test_get_foundc                 C   s@   |   ddg¡}|jdddd}| ddg¡}|ddiks<t‚d S )Nr‹   s!   VALUE xyz:key1 0 6
value1
END
rÄ   rÊ   FrŒ   rÅ   rË   r•   r   r   r   rÌ   ð  s    þÿz+TestPrefixedClient.test_get_many_some_foundc                 C   sV   |   ddddg¡}|jdddd}|jdd	dd}| ddg¡}|dd	d
œksRt‚d S )Nr‹   s   VALUE xyz:key1 0 6
value1
s!   VALUE xyz:key2 0 6
value2
END
rÄ   rÊ   FrŒ   rÅ   rÍ   rÎ   rË   r•   r   r   r   rÏ   û  s    üÿz*TestPrefixedClient.test_get_many_all_foundc                 C   s    |   dg¡}|d dkst‚d S )Nré  r'   rv   rt  r·   r   r   r   ru  	  s    z4TestPrefixedClient.test_python_dict_get_is_supportedN)rP   rQ   rR   r‰   rÂ   rÌ   rÏ   ru  r   r   r   r   ræ  ß  s
   ræ  c                   @   s   e Zd Zdd„ ZdS )ÚTestPrefixedPooledClientc                    sJ   t dddi|—Ž‰ tt|ƒƒˆ _tdddi|—Ž}t ‡ fdd„¡|_|S )Nr}   r$   rç  c                      s   ˆ S r   r   r   rÑ  r   r   rÒ    r   z6TestPrefixedPooledClient.make_client.<locals>.<lambda>)r}   )r}   rÓ  rÕ  r   rÑ  r   r‰     s
    z$TestPrefixedPooledClient.make_clientN)rP   rQ   rR   r‰   r   r   r   r   rê    s   rê  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestRetryOnEINTRc                 C   s   t dƒ}tt|ƒƒ|_|S )Nr}   rè  )r7   Úvaluesrˆ   r   r   r   r‰     s    zTestRetryOnEINTR.make_clientc              	   C   s<   |   dt tjd¡dt tjd¡dg¡}|d dks8t‚d S )NrS  zInterrupted system calls   key1 0 6
vals
   ue1
END
rÄ   rÊ   )r‰   r=   ÚerrorÚerrnoZEINTRr!   r·   r   r   r   Ú	test_recv  s    ûÿ	zTestRetryOnEINTR.test_recvN)rP   rQ   rR   r‰   rï  r   r   r   r   rë    s   rë  c                   @   s   e Zd Zdd„ ZdS )ÚTestNormalizeServerSpecc              	   C   s  t }|dƒdkst‚|dƒdks$t‚|dƒdks4t‚|dƒdksDt‚|dƒdksTt‚|dƒd	ksdt‚|d
ƒdkstt‚|dƒdks„t‚|dƒdks”t‚tjtdd |d ƒ W 5 Q R X tjtdd |ddiƒ W 5 Q R X tjtdd |dƒ W 5 Q R X d S )N)rk   é90  zunix:/run/memcached/socketz/run/memcached/socketr}   )r}   ri   zlocalhost:12345)r}   rñ  z[::1]r¶  z[::1]:12345)rh   rñ  rk   rj   z127.0.0.1:12345z Unsupported server specification)Úmatchrm   rñ  )r   r!   r   r   r   )r7   Úfr   r   r   Útest_normalize_server_spec-  s     z2TestNormalizeServerSpec.test_normalize_server_specN)rP   rQ   rR   rô  r   r   r   r   rð  +  s   rð  c                   @   s   e Zd Zdd„ ZdS )ÚTestKeepaliveoptsc              	   C   sô   t ƒ }|jdkr$|jdkr$|jdks(t‚t dddd}|jdkrT|jdkrT|jdksXt‚t dd}|jdkr€|jdkr€|jdks„t‚t dd}|jdkr¬|jdkr¬|jdks°t‚|  t¡ t d	d W 5 Q R X |  t¡ t d
d W 5 Q R X d S )Nr]   rH  é   rï   )ÚidleÚintvlÚcntrp  )r÷  )rù  r   éÿÿÿÿ)r   r÷  rø  rù  r!   r¾  r   )r7   Zkaor   r   r   Útest_keepalive_optsE  s    ""
"
"z%TestKeepaliveopts.test_keepalive_optsN)rP   rQ   rR   rû  r   r   r   r   rõ  C  s   rõ  )3r-   rî  r   r   r)  rU   rÍ  rÌ  r   r=   r   Zpymemcache.client.baser   r   r   r   r   Zpymemcache.exceptionsr   r	   r
   r   r   r   Z
pymemcacher   Zpymemcache.test.utilsr   r   ÚmarkZparametrizeÚ	TypeErrorÚunitr&   r+   r,   rT   rc   ru   r{   ZTestCaserñ   r¬  rÐ  rØ  rá  ræ  rê  rë  rð  rõ  r   r   r   r   Ú<module>   sn    	üþ	
*  J     D F 0/	