o
    Óó·i¬  ã                   @   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                   @   sf   e Zd Zddd„Zddd„Zddd„Zdd	d
„Zddd„Zddd„Zddd„Z	ddd„Z
ddd„ZdS )ÚDirDbmTestsÚreturnNc                 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   ú^C:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-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   s0   | j  dddœ¡ |  t| j  ¡ ƒddh¡ dS )zb
        L{DirDBM.update} updates the DBM with values from a bytes:bytes
        mapping.
        ó   bó   d)r   ó   c)r   r   )r   r   N)r   Úupdater   Úsetr   r   r   r   r   Útest_update!   s   zDirDbmTests.test_updatec                 C   s    t  d¡}d|d< t t ¡ d S )Ns   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   r    r   ÚappendÚaddÚsortZassertInr   ÚKeyErrorÚkeysÚvaluesÚreprÚformatr   ZcopyToÚclearÚ
assertTrueÚlenZassertNotEqualÚshutilÚrmtreeZassertNotIn)r   Údr*   r+   r   ÚvZdbkeysZdbvaluesZdbitemsr   ZcopyPathZd2ZcopykeysZ
copyvaluesZ	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   r9   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Úw)Úmoder"   Ns   key2s   corrects   wrongzaa.news   deletedz*.newz*.rpl)r   Ú_encoder   Ú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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Ú2r8   N)r<   Ú	TypeErrorr   Ú__setitem__r   ZFailTestZassertIsInstancer   r#   Ú__getitem__Ú__delitem__Zhas_keyÚ__contains__r;   r   r   r   r   Útest_nonStringKeysµ   s   þzDirDbmTests.test_nonStringKeysc                 C   sL   dt t dtddfdd„}d| jd< |  | jd	|¡ |  t| jjdd
¡ dS )z4
        Failure path when setting an item.
        r   Údatar   Nc                 S   s   |   |¡ tdƒ‚)Nzfail to write)Z
setContentÚOSError)r   rN   r   r   r   Ú
_writeFailË   s   
z,DirDbmTests.test_failSet.<locals>._writeFails   tests   failkeyZ
_writeFiles   test2)r   ÚstrÚbytesr   Úpatchr<   ÚIOErrorrI   )r   rP   r   r   r   Útest_failSetÆ   s   
zDirDbmTests.test_failSet©r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r!   r%   r5   r=   rD   rM   rU   r   r   r   r   r      s    

	



`

r   c                   @   s   e Zd Zddd„ZdS )Ú
ShelfTestsr   Nc                 C   r	   )N)r
   r   r   )s   inté   )s   floatg      (@)s   tuple)Nr[   )r   r   r   r   r#   r   r   r   r   r   r   r   Õ   r   zShelfTests.setUprV   )rW   rX   rY   r   r   r   r   r   rZ   Ô   s    rZ   )Ú__doc__r1   Úbase64r   Ztwisted.persistedr   Ztwisted.pythonr   Ztwisted.python.filepathr   Ztwisted.trialr   ZTestCaser   rZ   Z	testCasesr   r   r   r   Ú<module>   s    D