
    M/e7                     
   d Z ddlZddlZddlZddlZddlm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 ddlmc mZ ej,                  j/                   ej0                  d	            Z G d
 dej4                        Z G d dej4                        Z G d dej4                        Z G d dej<                        Ze dk(  r4 ejB                   ejD                  ejF                  dd e$gz                yy)z$Tests for certbot._internal.account.    N)mock)messages)errors)
filesystem)misc)oszrsa512_key.pemc                   .    e Zd ZdZd Zd Zd Zd Zd Zy)AccountTestz,Tests for certbot._internal.account.Account.c                    ddl m} t        j                         | _        |j                  dt        j                  ddddddt        j                  	      
      | _	         || j                  t        | j                        | _        t        j                  d      | j                  _        t        j                  d      5 }d|j                  _        t        j                  d      5 }| j                  j                   |j                  j"                  _         || j                  t              | _        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   Accountztest.certbot.orgi           
   tzinfocreation_hostcreation_dti_am_a_regr)return_valuez certbot._internal.account.socketz"certbot._internal.account.datetime)certbot._internal.accountr   r   	MagicMockregrMetadatetimepytzUTCmetaKEYacc__repr__patchgetfqdnr   r   nowacc_no_meta)selfr   mock_socketmock_dts       F/usr/lib/python3/dist-packages/certbot/_internal/tests/account_test.pysetUpzAccountTest.setUp   s   5NN$	LL, ))aB2dhh8 ! 9	 499c4995!^^G		ZZ:; 	;{/AK,@A ;W48II4I4I  $$1#*499c#: ;	; 	;; ;	; 	;s%   'E(AE4EE	
EEc                     | j                   | j                  j                   k(  sJ t        | j                  j                  k(  sJ | j                  | j
                  j                  k(  sJ y N)r   r"   r!   keyr    r'   r(   s    r+   	test_initzAccountTest.test_init)   sP    yyDHHMM)))dhhll"""yyD,,11111    c                 :    | j                   j                  dk(  sJ y )N 7adac10320f585ddf118429c0c4af2cd)r"   idr0   s    r+   test_idzAccountTest.test_id.   s    xx{{@@@@r2   c                 :    | j                   j                  dk(  sJ y )Nz,test.certbot.org@2015-07-04T14:04:10Z (7ada))r"   slugr0   s    r+   	test_slugzAccountTest.test_slug1   s    xx}} NNNNr2   c                 P    t        | j                        j                  d      sJ y )Nz=<Account(i_am_a_regr, 7adac10320f585ddf118429c0c4af2cd, Meta()reprr"   
startswithr0   s    r+   	test_reprzAccountTest.test_repr4   s(    DHH~((
IK 	K Kr2   N)	__name__
__module____qualname____doc__r,   r1   r6   r9   r=    r2   r+   r
   r
      s!    6; 2
AOKr2   r
   c                       e Zd ZdZd Zd Zy)MetaTestz)Tests for certbot._internal.account.Meta.c                     ddl m} |j                  j                  d      }|j                  J |j
                  J |j                  J y )Nr   r   zU{   "creation_dt": "2020-06-13T07:46:45Z",   "creation_host": "hyperion.localdomain"}r   r   r   
json_loadsr   r   register_to_effr(   r   r    s      r+   test_deserialize_partialz!MetaTest.test_deserialize_partial;   sV    5||&&
 +++!!---##+++r2   c                     ddl m} |j                  j                  d      }|j                  J |j
                  J |j                  J y )Nr   r   zq{   "creation_dt": "2020-06-13T07:46:45Z",   "creation_host": "hyperion.localdomain",   "register_to_eff": "bar"}rF   rI   s      r+   test_deserialize_fullzMetaTest.test_deserialize_fullF   sV    5||&& +++!!---##///r2   N)r>   r?   r@   rA   rJ   rL   rB   r2   r+   rD   rD   9   s    3	,
0r2   rD   c                       e Zd ZdZd Zd Zy)AccountMemoryStorageTestz9Tests for certbot._internal.account.AccountMemoryStorage.c                 (    ddl m}  |       | _        y )Nr   )AccountMemoryStorage)r   rP   storage)r(   rP   s     r+   r,   zAccountMemoryStorageTest.setUpV   s    B+-r2   c                 D   t        j                  d      }g | j                  j                         k(  sJ t	        j
                  t        j                        5  | j                  j                  d       d d d        | j                  j                  |d        |g| j                  j                         k(  sJ || j                  j                  d      k(  sJ | j                  j                  |d        |g| j                  j                         k(  sJ y # 1 sw Y   xY w)Nx)r5   )
r   MockrQ   find_allpytestraisesr   AccountNotFoundloadsave)r(   accounts     r+   test_itz AccountMemoryStorageTest.test_itZ   s    ))s#T\\**,,,,]]6112 	#LLc"	#'4(yDLL113333$,,++C0000'4(yDLL113333	# 	#s   DDN)r>   r?   r@   rA   r,   r\   rB   r2   r+   rN   rN   S   s    C.	4r2   rN   c                        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d Zd Zd Zd Zd Zd Zd Zd Z ej,                  d      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d  Z#d! Z$ xZ%S )"AccountFileStorageTestz7Tests for certbot._internal.account.AccountFileStorage.c                    t         |           ddlm}  || j                        | _        ddlm} |j                  dt        j                  ddddd	d
t        j                              } |t        j                  d t        j                               t        |      | _        t!        j"                         | _        y )Nr   AccountFileStorager   ztest.example.orgi        r   r   r   r   r   )uribody)r   r/   r    )superr,   r   ra   configrQ   r   r   r   r   r   r   RegistrationResourceRegistrationr!   r"   r   r   mock_client)r(   ra   r   r    	__class__s       r+   r,   zAccountFileStorageTest.setUpi   s    @)$++65||, ))aB2dhh8  9 ..x4468	
  >>+r2   c                     t         j                  j                  t        j                  | j
                  j                              sJ y r.   )r   pathisdirr   .underscores_for_unsupported_characters_in_pathrg   accounts_dirr0   s    r+   test_init_creates_dirz,AccountFileStorageTest.test_init_creates_dir{   s7    ww}}??@X@XY[ 	[ [r2   c                    | j                   j                  | j                  | j                         t        j
                  j                  | j                  j                  | j                  j                        }t        j
                  j                  |      sJ dD ]A  }t        j
                  j                  t        j
                  j                  ||            rAJ  t        j                  t        j
                  j                  |d      d      sJ | j                   j                  | j                  j                        }| j                  |k(  sJ y )N)	regr.json	meta.jsonprivate_key.jsonru      )rQ   rZ   r"   rj   r   rm   joinrg   rp   r5   existsr   
check_moderY   )r(   account_path	file_nameloadeds       r+   test_save_and_restorez,AccountFileStorageTest.test_save_and_restore   s    $((D$4$45ww||DKK$<$<dhhkkJww~~l+++E 	7I77>>\957 7 7	7 $$RWW\\,@R%SUZ[[[ ""488;;/xx6!!!r2   c                    | j                   j                  | j                         t        j                  j                  | j                  j                  | j                  j                        }t        j                  j                  |      sJ t        j                  j                  t        j                  j                  |d            sJ t        j                  j                  t        j                  j                  |d            rJ t        j                  j                  t        j                  j                  |d            rJ y )Nrs   rt   ru   )
rQ   update_regrr"   r   rm   rw   rg   rp   r5   rx   r(   rz   s     r+   test_update_regrz'AccountFileStorageTest.test_update_regr         *ww||DKK$<$<dhhkkJww~~l+++ww~~bggll<EFFF77>>"'',,|["IJJJ77>>"'',,|=O"PQQQQr2   c                    | j                   j                  | j                         t        j                  j                  | j                  j                  | j                  j                        }t        j                  j                  |      sJ t        j                  j                  t        j                  j                  |d            sJ t        j                  j                  t        j                  j                  |d            rJ t        j                  j                  t        j                  j                  |d            rJ y )Nrt   rs   ru   )
rQ   update_metar"   r   rm   rw   rg   rp   r5   rx   r   s     r+   test_update_metaz'AccountFileStorageTest.test_update_meta   r   r2   c                     | j                   j                  | j                  | j                         | j                  g| j                   j	                         k(  sJ y r.   )rQ   rZ   r"   rj   rU   r0   s    r+   test_find_allz$AccountFileStorageTest.test_find_all   sA    $((D$4$45zT\\224444r2   c                 B    g | j                   j                         k(  sJ y r.   )rQ   rU   r0   s    r+   test_find_all_none_empty_listz4AccountFileStorageTest.test_find_all_none_empty_list   s    T\\**,,,,r2   c                     t        j                  | j                  j                         g | j                  j                         k(  sJ y r.   )r   rmdirrg   rp   rQ   rU   r0   s    r+   !test_find_all_accounts_dir_absentz8AccountFileStorageTest.test_find_all_accounts_dir_absent   s3    
))*T\\**,,,,r2   c                    t        j                  dt        j                  dg      | j                  _        t        j                  d      5 }g d|_        ddg| j                  j                         k(  sJ 	 d d d        y # 1 sw Y   y xY w)NrS   zside_effectz$certbot._internal.account.os.listdir)rS   yr   )	r   r   r   AccountStorageErrorrQ   _load_for_server_pathr$   r   rU   )r(   mock_listdirs     r+   test_find_all_load_skipsz/AccountFileStorageTest.test_find_all_load_skips   ss    -1^^f88#>.@*ZZ>? 	9<(7L%:!6!6!8888	9 	9 	9s   +BB
c                     t        j                  t        j                        5  | j                  j                  d       d d d        y # 1 sw Y   y xY w)Nmissing)rV   rW   r   rX   rQ   rY   r0   s    r+   #test_load_non_existent_raises_errorz:AccountFileStorageTest.test_load_non_existent_raises_error   s;    ]]6112 	)LLi(	) 	) 	)s   A		Ac                 `    || j                   _        ddlm}  || j                         | _        y )Nr   r`   )rg   serverr   ra   rQ   )r(   r   ra   s      r+   _set_serverz"AccountFileStorageTest._set_server   s!    #@)$++6r2   c                    | j                  d       g | j                  j                         k(  sJ g | j                  j                         k(  sJ t        j                  j                  | j                  j                        rJ y N6https://acme-staging-v02.api.letsencrypt.org/directory)r   rQ   rU   r   rm   islinkrg   rp   r0   s    r+   test_find_all_neither_existsz3AccountFileStorageTest.test_find_all_neither_exists   sj    QRT\\**,,,,T\\**,,,,77>>$++":":;;;;r2   c                 N   | j                  d       g | j                  j                         k(  sJ | j                  j                  | j                  | j
                         | j                  g| j                  j                         k(  sJ | j                  g| j                  j                         k(  sJ t        j                  j                  | j                  j                        rJ d}t        j                  j                  | j                  j                  |            rJ y Nr   2https://acme-staging.api.letsencrypt.org/directory)r   rQ   rU   rZ   r"   rj   r   rm   r   rg   rp   rn   accounts_dir_for_server_pathr(   prev_server_paths     r+   test_find_all_find_before_savez5AccountFileStorageTest.test_find_all_find_before_save   s    QRT\\**,,,,$((D$4$45zT\\224444zT\\22444477>>$++":":;;;O77==!I!IJZ![\\\\r2   c                 z   | j                  d       | j                  j                  | j                  | j                         | j                  g| j                  j                         k(  sJ | j                  g| j                  j                         k(  sJ t        j                  j                  | j                  j                        rJ t        j                  j                  | j                  j                        sJ d}t        j                  j                  | j                  j                  |            rJ y r   )r   rQ   rZ   r"   rj   rU   r   rm   r   rg   rp   rn   r   r   s     r+   test_find_all_save_before_findz5AccountFileStorageTest.test_find_all_save_before_find   s    QR$((D$4$45zT\\224444zT\\22444477>>$++":":;;;ww}}T[[55666O77==!I!IJZ![\\\\r2   c                 x   | j                  d       g | j                  j                         k(  sJ | j                  j                  | j                  | j
                         | j                  g| j                  j                         k(  sJ | j                  d       g | j                  j                         k(  sJ y r   )r   rQ   rU   rZ   r"   rj   r0   s    r+   test_find_all_server_downgradez5AccountFileStorageTest.test_find_all_server_downgrade   s    QRT\\**,,,,$((D$4$45zT\\224444MNT\\**,,,,r2   c                     | j                  d       | j                  j                  | j                  | j                         | j                  d       | j                  g| j                  j                         k(  sJ y Nr   r   r   rQ   rZ   r"   rj   rU   r0   s    r+   test_upgrade_version_stagingz3AccountFileStorageTest.test_upgrade_version_staging   s_    MN$((D$4$45QRzT\\224444r2   c                     | j                  d       | j                  j                  | j                  | j                         | j                  d       | j                  g| j                  j                         k(  sJ y )Nz.https://acme-v01.api.letsencrypt.org/directoryz.https://acme-v02.api.letsencrypt.org/directoryr   r0   s    r+   test_upgrade_version_productionz6AccountFileStorageTest.test_upgrade_version_production   s_    IJ$((D$4$45IJzT\\224444r2   zcertbot.compat.os.rmdirc                 b   | j                  d       | j                  j                  | j                  | j                         t
        |_        t        j                  t        j                        | j                  _        | j                  d       g | j                  j                         k(  sJ y )Nr   r   r   )r   rQ   rZ   r"   rj   OSErrorr   r   r   r   r   r   rU   )r(   
mock_rmdirs     r+   test_corrupted_accountz-AccountFileStorageTest.test_corrupted_account   s     	MN$((D$4$45!(
-1^^22.4*QRT\\**,,,,r2   c                 r   | j                  d       | j                  j                  | j                  | j                         | j                  j                  | j                  j                        }| j                  d       | j                  j                  | j                  j                        }||k(  sJ y r   )r   rQ   rZ   r"   rj   rY   r5   r(   prev_accountr[   s      r+   test_upgrade_loadz(AccountFileStorageTest.test_upgrade_load   s    MN$((D$4$45||((5QR,,##DHHKK0w&&&r2   c                 r   | j                  d       | j                  j                  | j                  | j                         | j                  j                  | j                  j                        }| j                  d       | j                  j                  | j                  j                        }||k(  sJ y r   )r   rQ   rZ   r"   rj   rY   r5   _set_server_and_stop_symlinkr   s      r+    test_upgrade_load_single_accountz7AccountFileStorageTest.test_upgrade_load_single_account   s    MN$((D$4$45||((5))*bc,,##DHHKK0w&&&r2   c                    | j                   j                  | j                  | j                         t	        j
                         }t        |_        t	        j                  d|      5  t        j                  t        j                        5  | j                   j                  | j                  j                         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wNzbuiltins.open)rQ   rZ   r"   rj   r   	mock_openIOErrorr   r$   rV   rW   r   r   rY   r5   r(   r   s     r+   test_load_ioerrorz(AccountFileStorageTest.test_load_ioerror  s    $((D$4$45NN$	 '	ZZ3 	/v99: /!!$((++./	/ 	// /	/ 	/s$   &$C
0C:CC	CC c                 h   t        j                         }t        |_        t        j                  d|      5  t        j                  t        j                        5  | j                  j                  | j                  | j                         d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr   )r   r   r   r   r$   rV   rW   r   r   rQ   rZ   r"   rj   r   s     r+   test_save_ioerrorsz)AccountFileStorageTest.test_save_ioerrors  s    NN$	 '	ZZ3 	>v99: >!!$((D,<,<=>	> 	>> >	> 	>s#   $B(1BB(B%	!B((B1c                    | j                   j                  | j                  | j                         | j                   j	                  | j                  j
                         t        j                  t        j                        5  | j                   j                  | j                  j
                         d d d        y # 1 sw Y   y xY wr.   )rQ   rZ   r"   rj   deleter5   rV   rW   r   rX   rY   r0   s    r+   test_deletez"AccountFileStorageTest.test_delete  s{    $((D$4$45DHHKK(]]6112 	+LLdhhkk*	+ 	+ 	+s   0B<<Cc                     t        j                  t        j                        5  | j                  j                  | j                  j                         d d d        y # 1 sw Y   y xY wr.   )rV   rW   r   rX   rQ   r   r"   r5   r0   s    r+   test_delete_no_accountz-AccountFileStorageTest.test_delete_no_account  sC    ]]6112 	-LL,	- 	- 	-s   0AA&c                    | j                  d       | j                  j                  | j                  | j                         t        j                  di       5  | j                  d       t        j                  t        j                        5  | j                  j                  | 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   z,certbot._internal.constants.LE_REUSE_SERVERSr   )r   rQ   rZ   r"   rj   r   r$   rV   rW   r   rX   rY   r5   r0   s    r+   !_assert_symlinked_account_removedz8AccountFileStorageTest._assert_symlinked_account_removed  s    MN$((D$4$45ZZFK 	/UVv556 /!!$((++./	/ 	// /	/ 	/s$   5C0C=CC	CC#c                 f   | j                  d       | j                  j                  | j                  | j                         | j                  d       | j                  j                  | j                  j                         | j                  |       | j                  j                  | j                  j                         | j                  d       t        j                  t        j                        5  | j                  j                  | j                  j                         d d d        | j                  d       t        j                  t        j                        5  | j                  j                  | j                  j                         d d d        y # 1 sw Y   vxY w# 1 sw Y   y xY wr   )r   rQ   rZ   r"   rj   rY   r5   r   rV   rW   r   rX   )r(   
server_urls     r+   _test_delete_foldersz+AccountFileStorageTest._test_delete_folders(  s)   MN$((D$4$45QR$((++& 	$DHHKK( 	MN]]6112 	+LLdhhkk*	+QR]]6112 	+LLdhhkk*	+ 	+	+ 	+	+ 	+s   60F"0F'F$'F0c                 F    | j                  d       | j                          y )Nr   r   r   r0   s    r+   test_delete_folders_upz-AccountFileStorageTest.test_delete_folders_up;  s    !!"VW..0r2   c                 F    | j                  d       | j                          y r   r   r0   s    r+   test_delete_folders_downz/AccountFileStorageTest.test_delete_folders_down?  s    !!"Z[..0r2   c                     | j                  |       t        t        j                  j	                  | j
                  j                  d      d      5 }|j                  d       d d d        y # 1 sw Y   y xY w)Nfoowbar)r   openr   rm   rw   rg   rp   write)r(   server_pathfs      r+   r   z3AccountFileStorageTest._set_server_and_stop_symlinkC  sU    %"'',,t{{77?E 	GGEN	 	 	s   A++A4c                 H    | j                  d       | j                  d       y r   r   r   r0   s    r+   test_delete_shared_account_upz4AccountFileStorageTest.test_delete_shared_account_upH  s     ))*bc!!"VWr2   c                 H    | j                  d       | j                  d       y r   r   r0   s    r+   test_delete_shared_account_downz6AccountFileStorageTest.test_delete_shared_account_downL  s     ))*bc!!"Z[r2   )&r>   r?   r@   rA   r,   rq   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)rk   s   @r+   r^   r^   f   s    A,$["RR5--9)7
<	]]-55 TZZ)*- +-''/>+-/+&11
X\r2   r^   __main__rb   )%rA   r   jsonsysunittestr   josepyjoserV   r   acmer   certbotr   certbot.compatr   r   r   certbot.tests.utiltestsutil	test_utilJWKRSArY   load_vectorr!   TestCaser
   rD   rN   ConfigTestCaser^   r>   exitmainargv__file__rB   r2   r+   <module>r      s    *   
        %   & &
kk,y,,-=>? K(##  KF0x   044x00 4&h\Y55 h\V zCHH[V[[!"
234 r2   