Ë
    oj–  ã                   ó”   — 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Ÿ[™[›]Ó+ˆŒ	Ü—;‘;˜tŸy™yŸ~™~Ó.ˆŒð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&   € Ü�L‰LÐ.Ó/ˆØˆˆ&‰	Ü�‰œÕ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~  € Ø�H‰Hˆð ˆÜ“ˆØ—J‘Jò 	‰DˆAˆqØˆAˆa‰DØ�K‰K˜ŒNØ�J‰J�q�Mð	ð 	�	‰	Œð —J‘Jò 	&‰DˆAˆqØ�M‰M˜!˜QÔØ×Ñ˜Q˜q™T 1Õ%ð	&ð
	BØˆfŠIð BÐAÓA�1øô ò 	Ùð	úð —‘“ˆÜ�q—x‘x“z“?ˆÜ�a—g‘g“i“.ˆØ�‰ŒÜ�D—J‘J“ˆØ×ÑØØØ+¬D°«J¨<°t¼DÀ»L¸>ÐJô	
ð
 	×ÑØØØ5×<Ñ<Ü�V“œd 8›nóô	
ð 	×ÑØØØ$¤T¨%£[ M°´d¸7³m°_ÐEô	
ð —;‘;“=ˆØ�X‰X�hÓˆà—6‘6“8ˆÜ˜Ÿ™›“_ˆ
Ü˜Ÿ™›	“Nˆ	Ø�‰Œà×ÑØØØ5×<Ñ<Ü�V“œd 8›nóô	
ð 	×ÑØÙä�H�~œt JÔ/ð1ô	
ð 	×ÑØÙä�F�|œT )œ_ð.ô	
ð 	�‰Œ
Ø�‰Ü�—‘“	‹Nœc "§)¡)£+Ó.ÖQ´#°b·h±h³j³/ÖQÄSÈÃWÖQÐPQÔQØô	
ð 	×ÑœC ›F¤C¨£GÔ,Ü�‰�hÔð —J‘Jò 	‰DˆAˆqØ�!�Ø×ÑØ�1ÐKõð	ð
 	×Ñœ˜QŸV™V›X›¨Ð+>Ô?Ø×Ñœ˜QŸX™X›Z›¨!Ð-BÔCØ×Ñœ˜QŸW™W›Y›¨Ð,@Ô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   € Ûð ˆ�‰�‰Ø�‰œ˜DŸI™I›K¨$¯(©(×*FÑ*FÀtÓ*LÑLÓMÐQRÑRÔSØ×Ñœ( D§H¡H×$@Ñ$@À(Õ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¶  € ð �H‰H×Ñ˜WÓ%ˆØ�Y‰Y�_‰_˜Q ™[Ó)×.Ñ.°CÐ.Ó8ð 	¸AØ�G‰G�HÔ÷	ð �X‰X×Ñ˜gÓ&ˆØ�Y‰Y�_‰_˜RÓ ×%Ñ%¨3Ð%Ó/ð 	 °1Ø�G‰G�JÔ÷	 à�Y‰Y�_‰_˜R '™\Ó*×/Ñ/°SÐ/Ó9ð 	¸QØ�G‰G�HÔ÷	ð �Y‰Y�_‰_˜XÓ&×+Ñ+°Ð+Ó5ð 	 ¸Ø�G‰G�JÔ÷	 ô �m‰m˜DŸI™IŸN™NÓ+ˆØ×Ñ˜˜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  € ð
 	×Ñœ) T§X¡X×%9Ñ%9¸1¸cÔBð	:Ø×Ñœi¨¯©×)=Ñ)=¸sÀAÔFð 	×Ñœ) T§X¡X×%9Ñ%9¸1Ô=Ø×Ñœ) T§X¡X×%9Ñ%9¸1Ô=Ø×Ñœ) T§X¡X×%5Ñ%5°qÔ9Ø×Ñœ) T§X¡X×%:Ñ%:¸AÔ>Ø×Ñœ) T§X¡X×%AÑ%AÀ1ÕEøô × Ñ ò 	:à×!Ñ! $§(¡(¬F¯L©L×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   € Ø�O‰O˜DÔ!Ü˜/Ó*Ð*r   s   tests   failkeyÚ
_writeFiles   test2)r   ÚstrÚbytesr   ÚpatchrG   ÚIOErrorrZ   )r   rh   s     r   Útest_failSetzDirDbmTests.test_failSet¾   sb   € ð
	+œX¤c™]ð 	+´%ð 	+¸Dó 	+ð  'ˆ�‰�ÑØ�
‰
�4—8‘8˜\¨:Ô6Ø×Ñœ' 4§8¡8×#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   