
    Ϫf                         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                   L    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
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    :/usr/lib/python3/dist-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    t        j                  d      }d|d<   t        j                  t                y )Nzdirdbm.rebuild.test   values   key)r   Shelfr   )r   ss     r   test_rebuildInteractionz#DirDbmTests.test_rebuildInteraction!   s&    LL./&	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   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~   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   r/   absgetModificationTimeassertRaisesr(   )r   rD   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2rC   N)rG   	TypeErrorr   __setitem__r   FailTestassertIsInstancer   r   __getitem____delitem__has_key__contains__rF   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   rc   s     r   
_writeFailz,DirDbmTests.test_failSet.<locals>._writeFail   s    OOD!/**r   s   tests   failkey
_writeFiles   test2)r   strbytesr   patchrG   IOErrorrZ   )r   rh   s     r   test_failSetzDirDbmTests.test_failSet   sb    
	+Xc] 	+% 	+D 	+  '

488\:6'488#7#7XNr   rd   N)__name__
__module____qualname__r   r   r!   r?   rH   rT   ra   rn    r   r   r	   r	      s/    
, 
^:@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)Nrw   )r   r   r   r   r   r   r   r   s    r   r   zShelfTests.setUp   s5    T[[]+	<<		/

r   ro   )rp   rq   rr   r   rs   r   r   ru   ru      s    

r   ru   )__doc__r2   base64r   twisted.persistedr   twisted.pythonr   twisted.python.filepathr   twisted.trialr   TestCaser	   ru   	testCasesrs   r   r   <module>r      sM      $ " , "xO(## xOv
 
 *%	r   