o
    9Bi                     @   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   X/var/www/html/Trade-python/venv/lib/python3.10/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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   r1   absgetModificationTimeassertRaisesr*   )r   rE   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 sw   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   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2rD   N)rH   	TypeErrorr   __setitem__r   FailTestassertIsInstancer   r#   __getitem____delitem__has_key__contains__rG   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)
setContentOSError)r   ra   r   r   r   
_writeFail   s   
z,DirDbmTests.test_failSet.<locals>._writeFails   tests   failkey
_writeFiles   test2)r   strbytesr   patchrH   IOErrorrY   )r   rd   r   r   r   test_failSet   s   
zDirDbmTests.test_failSetr   N)__name__
__module____qualname__r   r   r!   r%   rA   rI   rT   r`   rj   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)Nrp   )r   r   r   r   r#   r   r   r   r   r   r   r      r   zShelfTests.setUprk   )rl   rm   rn   r   r   r   r   r   ro      s    ro   )__doc__r4   base64r   twisted.persistedr   twisted.pythonr   twisted.python.filepathr   twisted.trialr   TestCaser   ro   	testCasesr   r   r   r   <module>   s    D