o
    ¯bÃ  ã                   @   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)Údirdbm)Úrebuild)ÚFilePath)Úunittestc                   @   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   ó(   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   ó   
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 ]\}}|  ||¡ |  || |¡ q%z|d  W n	 tyG   Y nw J dƒ‚| 	¡ }t| 
¡ ƒ}t| ¡ ƒ}| ¡  t| jƒ}	|  ||dt|ƒ› dt|ƒ› ¡ |  ||d t|ƒt|ƒ¡¡ |  |	|dt|	ƒ› dt|ƒ› ¡ |  ¡ }
| |
¡}| 	¡ }t| 
¡ ƒ}t| ¡ ƒ}| ¡  |  ||d t|ƒt|ƒ¡¡ |  ||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: z != z'.values() output didn't match: {} != {}zitems() didn't match: z'.copyTo().keys() didn't match: {} != {}z).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ÚsortÚassertInr   ÚKeyErrorÚkeysÚvaluesÚreprÚformatr   ÚcopyToÚclearÚ
assertTrueÚlenÚassertNotEqualÚshutilÚrmtreeÚassertNotIn)r   Údr%   r&   r   ÚvÚdbkeysÚdbvaluesÚdbitemsr   ÚcopyPathÚd2ÚcopykeysÚ
copyvaluesÚ	copyitemsr   r   r   Útest_dbm"   s¤   
ÿ
ýÿýý
ÿýÿýÿýLþ
ÿ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   r?   r   r   r   Útest_modificationTime‚   s   
"z!DirDbmTests.test_modificationTimec                 C   sn  | j  d¡}| j |d ¡jdd}| d¡ W d  ƒ n1 s"w   Y  | j  d¡}| j |¡jdd}| d¡ W d  ƒ n1 sGw   Y  | j |d ¡jdd}| d	¡ W d  ƒ n1 shw   Y  | j d
¡jdd}| d¡ W d  ƒ n1 s‡w   Y  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   Ns   key2s   corrects   wrongzaa.news   deletedz*.newz*.rpl)r   Ú_encoder   Úchildr   Úwriter   ÚDirDBMr   ÚassertFalseÚglobChildren)r   r   ÚfÚ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y(   |  | jtj¡ Y nw |   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)rB   Ú	TypeErrorr   Ú__setitem__r   ÚFailTestÚassertIsInstancer   r   Ú__getitem__Ú__delitem__Úhas_keyÚ__contains__rA   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ƒ‚)Nzfail to write)Ú
setContentÚOSError)r   Údatar   r   r   Ú
_writeFail¿   s   
z,DirDbmTests.test_failSet.<locals>._writeFails   tests   failkeyÚ
_writeFiles   test2N)r   ÚpatchrB   ÚIOErrorrS   )r   r^   r   r   r   Útest_failSetº   s   
zDirDbmTests.test_failSetN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r;   rC   rN   rZ   rb   r   r   r   r   r      s    `r   c                   @   s   e Zd Zdd„ ZdS )Ú
ShelfTestsc                 C   r   )N)r	   r
   r   )s   inté   )s   floatg      (@)s   tuple)Nrg   )r   r   r   r   r   r   r   r   r   r   r   r   É   r   zShelfTests.setUpN)rc   rd   re   r   r   r   r   r   rf   È   s    rf   )Ú__doc__r.   Úbase64r   Útwisted.persistedr   Útwisted.pythonr   Útwisted.python.filepathr   Útwisted.trialr   ÚTestCaser   rf   Ú	testCasesr   r   r   r   Ú<module>   s    8