U
    
W['  ã                   @   sv   d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ G dd	„ d	ejƒZG d
d„ deƒZeegZdS )z
Test cases for dirdbm module.
é    N)Ú	b64decode)Úunittest)Údirdbm)Úrebuild)ÚFilePathc                   @   sL   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S )ÚDirDbmTestsc                 C   s(   t |  ¡ ƒ| _t | jj¡| _d| _d S )N)©s   abcs   foo©s   /lalals    ©s    
s   baz)r   ÚmktempÚpathr   ÚopenÚdbmÚitems©Úself© r   ú:/usr/lib/python3/dist-packages/twisted/test/test_dirdbm.pyÚsetUp   s    zDirDbmTests.setUpc                 C   s2   t dƒ}d| j|< d| j|< |  | j| d¡ d S )Nz//==ó   a)r   r   ÚassertEqual)r   Úkr   r   r   Útest_all   s    

zDirDbmTests.test_allc                 C   s    t  d¡}d|d< t t ¡ d S )Nzdirdbm.rebuild.testó   values   key)r   ÚShelfr   )r   Úsr   r   r   Útest_rebuildInteraction!   s    
z#DirDbmTests.test_rebuildInteractionc                 C   s¸  | j }g }tƒ }| jD ]$\}}|||< | |¡ | |¡ q| ¡  | jD ]$\}}|  ||¡ |  || |¡ qJz|d  W n tk
r   Y nX dsžt	dƒ‚| 
¡ }t| ¡ ƒ}t| ¡ ƒ}| ¡  t| jƒ}	|  ||dt|ƒt|ƒf ¡ |  ||dt|ƒt|ƒf ¡ |  |	|dt|	ƒt|ƒf ¡ |  ¡ }
| |
¡}| 
¡ }t| ¡ ƒ}t| ¡ ƒ}| ¡  |  ||dt|ƒt|ƒf ¡ |  ||dt|ƒt|ƒf ¡ |  ||d	t|ƒt|ƒf ¡ | ¡  |  t| 
¡ ƒt| ¡ ƒ  kot| ¡ ƒ  kot|ƒ  kodkn  d
¡ |  t|ƒt|ƒ¡ t |
¡ | jD ]\}}||= |  ||d¡ q@|  t| 
¡ ƒdd¡ |  t| ¡ ƒdd¡ |  t| ¡ ƒdd¡ |  t|ƒdd¡ d S )Ns   XXXr   z)didn't raise KeyError on non-existent keyz%.keys() output didn't match: %s != %sz'.values() output didn't match: %s != %szitems() didn't match: %s != %sz'.copyTo().keys() didn't match: %s != %sz).copyTo().values() didn't match: %s != %sz(.copyTo().items() didn't match: %s != %sz.clear() failedz3key is still in database, even though we deleted itzdatabase has keyszdatabase has valueszdatabase has items)r   Úsetr   ÚappendÚaddÚsortZassertInr   ÚKeyErrorÚAssertionErrorÚkeysÚvaluesÚreprr   ZcopyToÚclearÚ
assertTrueÚlenZassertNotEqualÚshutilZrmtreeZassertNotIn)r   Údr#   r$   r   ÚvZdbkeysZdbvaluesZdbitemsr   ZcopyPathZd2ZcopykeysZ
copyvaluesZ	copyitemsr   r   r   Útest_dbm'   s˜    

ÿÿÿÿÿÿ
ÿÿÿÿÿÿ"
ÿ
ÿ
ÿÿ
zDirDbmTests.test_dbmc                 C   sJ   dd l }d| jd< |  t|  ¡ | j d¡ ƒdk¡ |  t| jjd¡ d S )Nr   ó   vó   ké   s   nokey)Útimer   r'   ÚabsÚgetModificationTimeÚassertRaisesr!   )r   r0   r   r   r   Útest_modificationTimer   s    

"z!DirDbmTests.test_modificationTimec              	   C   s  | j  d¡}| j |d ¡jdd}| d¡ W 5 Q R X | j  d¡}| j |¡jdd}| d¡ W 5 Q R X | j |d ¡jdd}| d¡ W 5 Q R X | j d	¡jdd}| d
¡ W 5 Q R X t | jj¡}|  |d d¡ |  |d d¡ |  	| j 
d¡¡ |  	| j 
d¡¡ dS )zJ
        DirDBM: test recovery from directory after a faked crash
        s   key1s   .rplÚwb)Úmoder   s   key2s   corrects   wrongzaa.news   deletedz*.newz*.rplN)r   Z_encoder   Zchildr   Úwriter   ZDirDBMr   ZassertFalseZglobChildren)r   r   ÚfZk2r   r   r   r   Útest_recovery‚   s    zDirDbmTests.test_recoveryc                 C   s²   |   t| jjdd¡ z|   t| jjdd¡ W n& tjk
rR   |  | jtj¡ Y nX |   t| jj	d¡ |   t| jj
d¡ |   t| jjd¡ |   t| jjd¡ |   t| jjd¡ dS )zx
        L{dirdbm.DirDBM} operations only support string keys: other types
        should raise a L{TypeError}.
        é   Ú3Ú2r/   N)r3   Ú	TypeErrorr   Ú__setitem__r   ZFailTestZassertIsInstancer   r   Ú__getitem__Ú__delitem__Zhas_keyÚ__contains__r2   r   r   r   r   Útest_nonStringKeysš   s    zDirDbmTests.test_nonStringKeysc                 C   s:   dd„ }d| j d< |  | j d|¡ |  t| j jdd¡ dS )z4
        Failure path when setting an item.
        c                 S   s   |   |¡ tdƒ‚d S )Nzfail to write)Z
setContentÚIOError)r   Údatar   r   r   Ú
_writeFail°   s    
z,DirDbmTests.test_failSet.<locals>._writeFails   tests   failkeyZ
_writeFiles   test2N)r   Zpatchr3   rC   r>   )r   rE   r   r   r   Útest_failSet¬   s    
zDirDbmTests.test_failSetN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r,   r4   r9   rB   rF   r   r   r   r   r      s   Kr   c                   @   s   e Zd Zdd„ ZdS )Ú
ShelfTestsc                 C   s(   t |  ¡ ƒ| _t | jj¡| _d| _d S )N)r   r	   r
   )s   inté   )s   floatg      (@)s   tuple)NrK   )r   r   r   r   r   r   r   r   r   r   r   r   »   s    zShelfTests.setUpN)rG   rH   rI   r   r   r   r   r   rJ   ¹   s   rJ   )Ú__doc__r)   Úbase64r   Ztwisted.trialr   Ztwisted.persistedr   Ztwisted.pythonr   Ztwisted.python.filepathr   ZTestCaser   rJ   Z	testCasesr   r   r   r   Ú<module>   s    (	