
    \d                         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	ej                  Z G d
 de          ZeegZdS )z
Test cases for dirdbm module.
    N)	b64decode)dirdbm)rebuild)FilePath)unittestc                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
DirDbmTestsc                     t          |                                           | _        t          j        | j        j                  | _        d| _        d S )N)s   abcs   foos   /lalals    s    
s   baz)r   mktemppathr   opendbmitemsselfs    8lib/python3.11/site-packages/twisted/test/test_dirdbm.pysetUpzDirDbmTests.setUp   s9    T[[]]++	;ty~..X


    c                     t          d          }d| j        |<   d| j        |<   |                     | j        |         d           d S )Nz//==   a)r   r   assertEqual)r   ks     r   test_allzDirDbmTests.test_all   sG    f!d+++++r   c                 j    t          j        d          }d|d<   t          j        t                      d S )Nzdirdbm.rebuild.test   values   key)r   Shelfr   )r   ss     r   test_rebuildInteractionz#DirDbmTests.test_rebuildInteraction   s1    L.//&	r   c           
      H
   | j         }g }t                      }| j        D ]4\  }}|||<   |                    |           |                    |           5|                                 | j        D ]7\  }}|                     ||           |                     ||         |           8	 |d          J d            # t          $ r Y nw xY w|	                                }t          |
                                          }t          |                                          }|                                 t          | j                  }	|                     ||dt          |           dt          |                      |                     ||d                    t          |          t          |                               |                     |	|dt          |	           dt          |                      |                                 }
|                    |
          }|	                                }t          |
                                          }t          |                                          }|                                 |                     ||d                    t          |          t          |                               |                     ||d	t          |          dt          |                     |                     ||d
t          |          dt          |                     |                                 |                     t#          |	                                          t#          |
                                          cxk    o?t#          |                                          cxk    ot#          |          cxk    odk    nc d           |                     t#          |          t#          |                     t'          j        |
           | j        D ]\  }}||= |                     ||d            |                     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: z .copyTo().items() didn't match: z.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	copyitemss                  r   test_dbmzDirDbmTests.test_dbm"   s   H J 	 	DAqAaDKKNNNJJqMMMM		 J 	& 	&DAqMM!QQqT1%%%%	BfII BAAAA  	 	 	D	 qxxzz??aggii..DJJDJJJJDLLJJ	
 	
 	

 	5<<Vd8nn 	
 	
 	
 	ET%[[EEd7mmEE	
 	
 	
 ;;==XXh6688__
		NN	5<<Vd8nn 	
 	
 	
 	JH~~~~tJ///1	
 	
 	
 	IF||||T)___.	
 	
 	
 	


		NNc"))++..QQQQ#bhhjj//QQQQSWWQQQQPQQQQQ	
 	
 	
 	CFFCGG,,,h J 	 	DAq!1K    	QVVXX+>???QXXZZ!-BCCCQWWYY,@AAAQ$899999s   (B: :
CCc                    dd l }d| j        d<   |                     t          |                                 | j                            d          z
            dk               |                     t          | j        j        d           d S )Nr      v   k   s   nokey)timer   r/   absgetModificationTimeassertRaisesr(   )r   rD   s     r   test_modificationTimez!DirDbmTests.test_modificationTime   sx     DIIKK$(*F*Ft*L*LLMMQRRSSS(DH$@(KKKKKr   c                    | j                             d          }| j                            |dz                                 d          5 }|                    d           ddd           n# 1 swxY w Y   | j                             d          }| j                            |                              d          5 }|                    d           ddd           n# 1 swxY w Y   | j                            |dz                                 d          5 }|                    d	           ddd           n# 1 swxY w Y   | j                            d
                              d          5 }|                    d           ddd           n# 1 swxY w Y   t          j        | 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   s        r   test_recoveryzDirDbmTests.test_recovery   s    HW%%Y__Q[))..D.99 	QGGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 Xg&&Y__R  %%4%00 	 AGGJ	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 Y__R'\**//T/:: 	aGGH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 Y__X&&+++66 	 !GGJ	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  mDIN++Wx000Wz222//88999//8899999sH   A..A25A2C##C'*C'EEE:FF #F c                    |                      t          | j        j        dd           	 |                      t          | j        j        dd           n:# t          j        $ r( |                     | j        t          j                   Y nw xY 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2rC   N)rG   	TypeErrorr   __setitem__r   FailTestassertIsInstancer   r   __getitem____delitem__has_key__contains__rF   r   s    r   test_nonStringKeyszDirDbmTests.test_nonStringKeys   s!   
 	)TX%91cBBB	:i)=sAFFFF  	: 	: 	:!!$(FL99999	: 	)TX%91===)TX%91===)TX%5q999)TX%:A>>>)TX%A1EEEEEs   'A 4BBc                     d }d| j         d<   |                     | j         d|           |                     t          | j         j        dd           dS )z4
        Failure path when setting an item.
        c                 J    |                      |           t          d          )Nzfail to write)
setContentOSError)r   datas     r   
_writeFailz,DirDbmTests.test_failSet.<locals>._writeFail   s"    OOD!!!/***r   s   tests   failkey
_writeFiles   test2N)r   patchrG   IOErrorrZ   )r   rg   s     r   test_failSetzDirDbmTests.test_failSet   s\    
	+ 	+ 	+  '

48\:666'48#7XNNNNNr   N)__name__
__module____qualname__r   r   r!   r?   rH   rT   ra   rk    r   r   r	   r	      s        Y Y Y
, , ,     
^: ^: ^:@L L L : : :.F F F"O O O O Or   r	   c                       e Zd Zd ZdS )
ShelfTestsc                     t          |                                           | _        t          j        | j        j                  | _        d| _        d S )N)r   r   r   )s   int   )s   floatg      (@)s   tuple)Nrs   )r   r   r   r   r   r   r   r   s    r   r   zShelfTests.setUp   s;    T[[]]++	<	//



r   N)rl   rm   rn   r   ro   r   r   rq   rq      s#        

 

 

 

 

r   rq   )__doc__r2   base64r   twisted.persistedr   twisted.pythonr   twisted.python.filepathr   twisted.trialr   TestCaser	   rq   	testCasesro   r   r   <module>r|      s            $ $ $ $ $ $ " " " " " " , , , , , , " " " " " "tO tO tO tO tO(# tO tO tOn
 
 
 
 
 
 
 
 *%			r   