U
    ÝÁ]ã  ã                   @   s~   d Z ddl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	m
Z
 ddlmZ G dd	„ d	ejƒZed
krze ¡  dS )z/Tests for certbot.plugins.storage.PluginStorageé    N)Úerrors)Úos)Ú
filesystem)Úcommon)Úutilc                       s`   e Zd ZdZ‡ f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‡  ZS )ÚPluginStorageTestz.Test for certbot.plugins.storage.PluginStoragec              	      sP   t t| ƒ ¡  tj| _t | jj	¡ t
 d¡ | j| jdd| _W 5 Q R X d S )Núcertbot.reverter.utilÚ
mockplugin)ÚconfigÚname)Úsuperr   ÚsetUpr   Z	InstallerÚ
plugin_clsr   Úmkdirr
   Ú
config_dirÚmockÚpatchÚplugin©Úself©Ú	__class__© ú>/usr/lib/python3/dist-packages/certbot/plugins/storage_test.pyr      s
    zPluginStorageTest.setUpc                 C   s´   t tj | jjd¡dƒ}| d¡ W 5 Q R X t ¡ }t	|_
tj | jjd¡| jj_t d|¡J tjddd0 t d¡ |  tj| jjj¡ W 5 Q R X W 5 Q R X W 5 Q R X d S )	Nú.pluginstorage.jsonÚwZdummyzsix.moves.builtins.openzcertbot.compat.os.path.isfileT)Zreturn_valuer   )Úopenr   ÚpathÚjoinr
   r   Úwriter   Ú	mock_openÚIOErrorÚside_effectr   ÚstorageÚstoragepathr   ÚassertRaisesr   ÚPluginStorageErrorÚ_load)r   Úfhr    r   r   r   Útest_load_errors_cant_read   s$    ÿÿÿ
ÿz,PluginStorageTest.test_load_errors_cant_readc              
   C   s¢   t tj | jjd¡dƒ}| d¡ W 5 Q R X t d¡`}t d¡ |  	| jd¡}W 5 Q R X |  
t|jjd¡ |  |j¡ |  d|jd	 d	 k¡ W 5 Q R X d S )
Nr   r   Ú z$certbot.plugins.storage.logger.debugr   r	   Úvaluezno values loadedr   )r   r   r   r   r
   r   r   r   r   r   r%   ÚKeyErrorr#   ÚfetchÚ
assertTrueZcalledÚ	call_args)r   r(   Úmock_logZ	nocontentr   r   r   Útest_load_errors_empty'   s     ÿz(PluginStorageTest.test_load_errors_emptyc              
   C   s˜   t tj | jjd¡dƒ}| d¡ W 5 Q R X t d¡V}t d¡ |  	| jd¡}W 5 Q R X |  
tj|jjd¡ |  d|jd	 d	 k¡ W 5 Q R X d S )
Nr   r   zinvalid jsonú$certbot.plugins.storage.logger.errorr   r	   r+   zis corruptedr   )r   r   r   r   r
   r   r   r   r   r   r%   r   ZPluginErrorr#   r-   r.   r/   )r   r(   r0   Z	corruptedr   r   r   Útest_load_errors_corrupted3   s    ÿÿþz,PluginStorageTest.test_load_errors_corruptedc              	   C   sf   t  d¡R}d| jj_d| jj_| j| jj_|  t	j
| jjj¡ |  d|jd d k¡ W 5 Q R X d S )Nr2   Tz/tmp/whateverzCould not serializer   )r   r   r   r#   Ú_initializedr$   r   Ú_datar%   r   r&   Úsaver.   r/   )r   r0   r   r   r   Útest_save_errors_cant_serialize?   s    

ÿz1PluginStorageTest.test_save_errors_cant_serializec              
   C   s„   t  ¡ }t|_t  d|¡` t  d¡J}ddi| jj_d| jj_|  	t
j| jjj¡ |  d|jd d k¡ W 5 Q R X W 5 Q R X d S )Nzcertbot.compat.filesystem.openr2   ZvalidÚdataTzCould not writer   )r   r    r!   r"   r   r   r#   r5   r4   r%   r   r&   r6   r.   r/   )r   r    r0   r   r   r   Ú%test_save_errors_unable_to_write_fileI   s    
ÿz7PluginStorageTest.test_save_errors_unable_to_write_filec              	   C   s6   t  d¡" |  tj|  | jd¡jj¡ W 5 Q R X d S )Nr   Úx)	r   r   r%   r   r&   r   r
   r#   r6   r   r   r   r   Útest_save_uninitializedT   s    ÿz)PluginStorageTest.test_save_uninitializedc              	   C   s|   t  d¡" |  | jd¡}|  | jd¡}W 5 Q R X |j dd¡ |  t|jjd¡ |  t|jjd¡ |  	|j d¡d¡ d S )Nr   ÚfirstÚsecondZ	first_keyZfirst_value)
r   r   r   r
   r#   Úputr%   r,   r-   ÚassertEqual)r   Zplugin1Zplugin2r   r   r   Útest_namespace_isolationY   s     ÿ ÿz*PluginStorageTest.test_namespace_isolationc              	   C   sÄ   | j j dd¡ | j j ¡  t d¡ |  | jd¡}W 5 Q R X |  |j 	d¡d¡ t
tj | jjd¡dƒ}| ¡ }W 5 Q R X t |¡}|  d| ¡ k¡ |  t|ƒd¡ |  |d d d¡ d S )NZtestkeyZ	testvaluer   r	   r   Úré   )r   r#   r>   r6   r   r   r   r
   r?   r-   r   r   r   r   r   ÚreadÚjsonÚloadsr.   ÚkeysÚlen)r   Zanotherr(   ZpsdataZpsjsonr   r   r   Útest_saved_statee   s     ÿÿ
z"PluginStorageTest.test_saved_state)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r)   r1   r3   r7   r9   r;   r@   rH   Ú__classcell__r   r   r   r   r      s   
r   Ú__main__)rL   rD   Zunittestr   Zcertbotr   Zcertbot.compatr   r   Zcertbot.pluginsr   Zcertbot.testsr   Z	test_utilZConfigTestCaser   rI   Úmainr   r   r   r   Ú<module>   s   h