
    Vh                         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y)z
Test cases for dirdbm module.
    N)	b64decode)dirdbm)rebuild)FilePath)unittestc                   T    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d
Zy)DirDbmTestsNc                     t        | j                               | _        t        j                  | j                  j                        | _        d| _        y )N)s   abcs   foos   /lalals    s    
s   baz)r   mktemppathr   opendbmitemsselfs    H/home/dcms/DCMS/lib/python3.12/site-packages/twisted/test/test_dirdbm.pysetUpzDirDbmTests.setUp   s6    T[[]+	;;tyy~~.X

    c                     t        d      }d| j                  |<   d| j                  |<   | j                  | j                  |   d       y )Nz//==   a)r   r   assertEqual)r   ks     r   test_allzDirDbmTests.test_all   s>    f!d+r   c                     | j                   j                  ddd       | j                  t        | j                   j	                               ddh       y)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   s    r   test_updatezDirDbmTests.test_update!   s>    
 	t401TXX^^-.|0LMr   c                 j    t        j                  d      }d|d<   t        j                  t                y )Ns   dirdbm.rebuild.test   values   key)r   Shelfr   )r   ss     r   test_rebuildInteractionz#DirDbmTests.test_rebuildInteraction)   s&    LL/0&	r   c           
      n   | j                   }g }t               }| j                  D ],  \  }}|||<   |j                  |       |j	                  |       . |j                          | j                  D ],  \  }}| j                  ||       | j                  ||   |       . 	 |d    J d       # t        $ r Y nw xY w|j                         }t        |j                               }t        |j                               }|j                          t        | j                        }	| j                  ||dt        |       dt        |              | j                  ||dj                  t        |      t        |                   | j                  |	|dt        |	       dt        |              | j                         }
|j                  |
      }|j                         }t        |j                               }t        |j                               }|j                          | j                  ||dj                  t        |      t        |                   | j                  ||d	t        |      dt        |             | j                  ||d
t        |      dt        |             |j                          | j!                  t#        |j                               t#        |j                               cxk(  xr5 t#        |j                               cxk(  xr t#        |      cxk(  xr dk(  nc d       | j%                  t#        |      t#        |             t'        j(                  |
       | j                  D ]  \  }}||= | j+                  ||d        | j                  t#        |j                               dd       | j                  t#        |j                               dd       | j                  t#        |j                               dd       | j                  t#        |      dd       y )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   r"   r   appendaddsortassertInr   KeyErrorkeysvaluesreprformatr   copyToclear
assertTruelenassertNotEqualshutilrmtreeassertNotIn)r   dr/   r0   r   vdbkeysdbvaluesdbitemsr   copyPathd2copykeys
copyvalues	copyitemss                  r   test_dbmzDirDbmTests.test_dbm.   s~   HH JJ 	DAqAaDKKNJJqM	 			 JJ 	&DAqMM!QQqT1%	&
	BfI BAA1  		 qxxz?aggi.DJJ+DJ<tDL>J	

 	5<<Vd8n	
 	$T%[Md7m_E	
 ;;=XXh668_
	N	5<<Vd8n	
 	H~tJ/1	
 	F|T)_.	
 	
	Nc"))+.Q#bhhj/QSWQPQQ	
 	CFCG,h JJ 	DAq!1K	
 	QVVX+>?QXXZ!-BCQWWY,@AQ$89s    B, ,	B87B8c                    dd l }d| j                  d<   | j                  t        |j                         | j                  j	                  d      z
        dk         | j                  t        | j                  j                  d       y )Nr      v   k   s   nokey)timer   r5   absgetModificationTimeassertRaisesr.   )r   rJ   s     r   test_modificationTimez!DirDbmTests.test_modificationTime   sa     DIIK$((*F*Ft*LLMQRRS(DHH$@$@(Kr   c                 X   | j                   j                  d      }| j                  j                  |dz         j	                  d      5 }|j                  d       ddd       | j                   j                  d      }| j                  j                  |      j	                  d      5 }|j                  d       ddd       | j                  j                  |dz         j	                  d      5 }|j                  d	       ddd       | j                  j                  d
      j	                  d      5 }|j                  d       ddd       t        j                  | j                  j                        }| j                  |d   d       | j                  |d   d       | j                  | j                  j                  d             | j                  | j                  j                  d             y# 1 sw Y   xY w# 1 sw Y   LxY w# 1 sw Y   xY w# 1 sw Y   xY w)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   s        r   test_recoveryzDirDbmTests.test_recovery   s    HHW%YY__Q[)..C.8 	AGGH	 XXg&YY__R %%3%/ 	 1GGJ	 YY__R'\*//S/9 	QGGH	 YY__X&+++5 	 GGJ	  mmDIINN+Wx0Wz2//89//89!	 		  	 	 		  	 s0   
G9*H2H7H 9HHH H)c                    | j                  t        | j                  j                  dd       	 | j                  t        | j                  j                  dd       | j                  t        | j                  j                  d       | j                  t        | j                  j                  d       | j                  t        | j                  j                  d       | j                  t        | j                  j                  d       | j                  t        | j                  j                  d       y# t        j
                  $ r. | j                  | j                  t        j                         Y w xY w)zx
        L{dirdbm.DirDBM} operations only support string keys: other types
        should raise a L{TypeError}.
           32rI   N)rM   	TypeErrorr   __setitem__r   FailTestassertIsInstancer   r&   __getitem____delitem__has_key__contains__rL   r   s    r   test_nonStringKeyszDirDbmTests.test_nonStringKeys   s   
 	)TXX%9%91cB	:i)=)=sAF 	)TXX%9%91=)TXX%9%91=)TXX%5%5q9)TXX%:%:A>)TXX%A%A1E    	:!!$((FLL9	:s   ,D2 2=E32E3c                     dt         t           dt        ddfd}d| j                  d<   | j	                  | j                  d|       | j                  t        | j                  j                  dd	       y)
z4
        Failure path when setting an item.
        r   datareturnNc                 :    | j                  |       t        d      )Nzfail to write)
setContentOSError)r   ri   s     r   
_writeFailz,DirDbmTests.test_failSet.<locals>._writeFail   s    OOD!/**r   s   tests   failkey
_writeFiles   test2)r   strbytesr   patchrM   IOErrorr`   )r   rn   s     r   test_failSetzDirDbmTests.test_failSet   sb    
	+Xc] 	+% 	+D 	+  '

488\:6'488#7#7XNr   rj   N)__name__
__module____qualname__r   r   r#   r(   rE   rN   rZ   rg   rt    r   r   r	   r	      s5    
,N 
^:@L :.F"Or   r	   c                       e Zd ZddZy)
ShelfTestsNc                     t        | j                               | _        t        j                  | j                  j                        | _        d| _        y )N)r   r   r   )s   int   )s   floatg      (@)s   tuple)Nr}   )r   r   r   r   r&   r   r   r   s    r   r   zShelfTests.setUp   s5    T[[]+	<<		/

r   ru   )rv   rw   rx   r   ry   r   r   r{   r{      s    

r   r{   )__doc__r8   base64r   twisted.persistedr   twisted.pythonr   twisted.python.filepathr   twisted.trialr   TestCaser	   r{   	testCasesry   r   r   <module>r      sM      $ " , "@O(## @OF
 
 *%	r   