
    M/e                     $   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddlZddlm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  G d dej$                        Zedk(  r4 ej*                   e	j,                  ej.                  dd egz                yy)z/Tests for certbot.plugins.storage.PluginStorage    N)Iterable)List)Optional)mock)errors)
filesystem)os)utilc                   R     e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Z xZS )PluginStorageTestz.Test for certbot.plugins.storage.PluginStoragec                 6   t         |           t        j                  | _        t        j                  | j                  j                         t        j                  d      5  | j	                  | j                  d      | _        d d d        y # 1 sw Y   y xY w)Ncertbot.reverter.util
mockplugin)configname)supersetUp	test_utilDummyInstaller
plugin_clsr   mkdirr   
config_dirr   patchplugin)self	__class__s    N/usr/lib/python3/dist-packages/certbot/_internal/tests/plugins/storage_test.pyr   zPluginStorageTest.setUp   so    #22//0ZZ/0 	Q//</PDK	Q 	Q 	Qs   ##BBc           	      `   t        t        j                  j                  | j                  j
                  d      d      5 }|j                  d       d d d        t        j                         }t        |_
        t        j                  j                  | j                  j
                  d      | j                  j                  _        t        j                  d|      5  t        j                  dd      5  t        j                  d      5  t        j                   t"        j$                        5  | j                  j                  j'                          d d d        d d d        d d d        d d d        y # 1 sw Y   $xY w# 1 sw Y   /xY w# 1 sw Y   3xY w# 1 sw Y   7xY w# 1 sw Y   y xY w)	N.pluginstorage.jsonwdummyzbuiltins.openzcertbot.compat.os.path.isfileT)return_valuer   )openr	   pathjoinr   r   writer   	mock_openIOErrorside_effectr   storage_storagepathr   pytestraisesr   PluginStorageError_load)r   fhr'   s      r   test_load_errors_cant_readz,PluginStorageTest.test_load_errors_cant_read   s?   "'',,t{{55467:< 	?AHHW	 NN$	 '	+-77<<8N8N7L,N(ZZ3 	4;$O 4ZZ 78 4v'@'@A 4++113444	4 	4	 	4 44 44 4	4 	4s_   E3F$3F	$F-%F 	FF"F$3E= F	FFFF!	F$$F-c                    t        t        j                  j                  | j                  j
                  d      d      5 }|j                  d       d d d        t        j                  d      5 }t        j                  d      5  | j                  | j                  d      }d d d        t        j                  t              5  j                  j                  d       d d d        |j                  sJ d|j                   d	   d	   v sJ 	 d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   OxY w# 1 sw Y   y xY w)
Nr   r     z$certbot.plugins.storage.logger.debugr   r   valuezno values loadedr   )r#   r	   r$   r%   r   r   r&   r   r   r   r,   r-   KeyErrorr*   fetchcalled	call_args)r   r0   mock_log	nocontents       r   test_load_errors_emptyz(PluginStorageTest.test_load_errors_empty+   s   "'',,t{{557LMsS 	WYHHRL	ZZ>? 	B834 G OODKKF	Gx( 1!!''01??"?%););A)>q)AAAA	B 	B	 	G G1 1		B 	BsG   D.D8D !!D8D,,D8D D)	%D8,D5	1D88Ec                    t        t        j                  j                  | j                  j
                  d      d      5 }|j                  d       d d d        t        j                  d      5 }t        j                  d      5  | j                  | j                  d      }d d d        t        j                  t        j                        5  j                  j                  d       d d d        d|j                   d	   d	   v sJ 	 d d d        y # 1 sw Y   xY w# 1 sw Y   |xY w# 1 sw Y   AxY w# 1 sw Y   y xY w)
Nr   r    zinvalid json$certbot.plugins.storage.logger.errorr   r   r4   zis corruptedr   )r#   r	   r$   r%   r   r   r&   r   r   r   r,   r-   r   PluginErrorr*   r6   r8   )r   r0   r9   	corrupteds       r   test_load_errors_corruptedz,PluginStorageTest.test_load_errors_corrupted7   s   "'',,t{{55467:< 	%?AHH^$	% ZZ>? 	>834 G OODKKF	Gv112 1!!''01!X%7%7%:1%====	> 	>	% 	%G G1 1	> 	>sG   D.D4D!+D4D((D4DD%	!D4(D1	-D44D=c                    t        j                  d      5 }d| j                  j                  _        d| j                  j                  _        | j                  | j                  j                  _        t        j                  t        j                        5  | j                  j                  j                          d d d        d|j                  d   d   v sJ 	 d d d        y # 1 sw Y   )xY w# 1 sw Y   y xY w)Nr=   T/tmp/whateverzCould not serializer   )r   r   r   r*   _initializedr+   r   _datar,   r-   r   r.   saver8   )r   r9   s     r   test_save_errors_cant_serializez1PluginStorageTest.test_save_errors_cant_serializeB   s    ZZ>? 	E8/3DKK,/>DKK,(,DKK%v889 +##((*+(H,>,>q,A!,DDDD	E 	E
+ +	E 	Es$   A?C.%C":C."C+	'C..C7c                 x   t        j                         }t        |_        t        j                  d|      5  t        j                  d      5 }ddi| j
                  j                  _        d| j
                  j                  _        d| j
                  j                  _	        t        j                  t        j                        5  | j
                  j                  j                          d d d        d|j                  d   d   v sJ 	 d d d        d d d        y # 1 sw Y   1xY w# 1 sw Y   xY w# 1 sw Y   y xY w)	Nzcertbot.compat.filesystem.openr=   validdataTrB   zCould not writer   )r   r'   r(   r)   r   r   r*   rD   rC   r+   r,   r-   r   r.   rE   r8   )r   r'   r9   s      r   %test_save_errors_unable_to_write_filez7PluginStorageTest.test_save_errors_unable_to_write_fileL   s   NN$	 '	ZZ8)D 	EBC Ex-4f,=##)37##03B##0]]6#<#<= /KK'',,./(H,>,>q,A!,DDDDE	E 	E
/ /	E E	E 	Es<   D0A7D$%D(D$D0D!D$$D-	)D00D9c                 0   t        j                  d      5  t        j                  t        j
                        5  | j                  | j                  d      j                  j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   x)
r   r   r,   r-   r   r.   r   r   r*   rE   )r   s    r   test_save_uninitializedz)PluginStorageTest.test_save_uninitializedX   sz    ZZ/0 	Av889 AS199>>@A	A 	AA A	A 	As"   $B5B /B B		BBc                 d   t        j                  d      5  | j                  | j                  d      }| j                  | j                  d      }d d d        j                  j                  dd       t        j                  t              5  j                  j                  d       d d d        t        j                  t              5  j                  j                  d       d d d        |j                  j                  d      dk(  sJ y # 1 sw Y   xY w# 1 sw Y   sxY w# 1 sw Y   BxY w)Nr   firstsecond	first_keyfirst_value)
r   r   r   r   r*   putr,   r-   r5   r6   )r   plugin1plugin2s      r   test_namespace_isolationz*PluginStorageTest.test_namespace_isolation]   s    ZZ/0 	=oodkk7;Goodkk8<G	= 	K7]]8$ 	/OO!!+.	/]]8$ 	+OO!!'*	+$$[1]BBB	= 	=	/ 	/	+ 	+s#   9DD	D&DD#&D/c                    | j                   j                  j                  dd       | j                   j                  j                          t	        j
                  d      5  | j                  | j                  d      }d d d        j                  j                  d      dk(  sJ t        t        j                  j                  | j                  j                  d      d      5 }|j                         }d d d        t        j                         }d|j#                         v sJ t%        |      dk(  sJ |d   d   dk(  sJ y # 1 sw Y   xY w# 1 sw Y   \xY w)Ntestkey	testvaluer   r   r   r   )r   r*   rS   rE   r   r   r   r   r6   r#   r	   r$   r%   r   readjsonloadskeyslen)r   anotherr0   psdatapsjsons        r   test_saved_statez"PluginStorageTest.test_saved_stateh   s#   	;7  "ZZ/0 	Aoodkk<@G	A$$Y/;>>>"'',,t{{55467:< 	?AWWYF	 F#v{{},,,6{al#I.+===	A 	A	 	s    E#EEE)__name__
__module____qualname____doc__r   r1   r;   r@   rF   rJ   rM   rV   rd   __classcell__)r   s   @r   r   r      s9    8Q4
B	>E
EA
	C>    r   __main__r[   )rh   r]   systypingr   r   r   unittestr   r,   certbotr   certbot.compatr   r	   certbot.testsr
   r   ConfigTestCaser   re   exitmainargv__file__ rj   r   <module>rx      sz    5  
        %  +d>	00 d>N zCHH[V[[!"
234 rj   