
    M/e                     
   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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 ddlmZ dd	lmZ ej,                  d
k\  rddlmZ nddlZ G d dej4                        Zed        Zd Zd Zy)z#Common utilities for certbot_nginx.    N)contextmanager)mock)util)os)common)configurator)nginxparser)   	   c                   .     e Zd Z fdZd Z	 ddZ xZS )	NginxTestc                    t         |           | j                  | _        d | _        t	        j
                  dt              \  | _        | _        | _	        t        j                  d      | _        t        j                  j                  | j                  d      | _        t"        j$                  j'                  t)        j*                  d            | _        y )N	etc_nginxlogszrsa512_key.pem)supersetUpconfigconfigurationr   	dir_setup__package__temp_dir
config_dirwork_dirtempfilemkdtemplogs_dirr   pathjoinconfig_pathjoseJWKRSAload	test_utilload_vector	rsa512jwk)self	__class__s    I/usr/lib/python3/dist-packages/certbot_nginx/_internal/tests/test_util.pyr   zNginxTest.setUp   s    ![[8>8H8H9&5t ((077<<{C)))*?*?+     c                 $   t        j                          t        j                  | j                         t        j                  | j
                         t        j                  | j                         t        j                  | j                         y )N)r   _release_locksshutilrmtreer   r   r   r   )r&   s    r(   tearDownzNginxTest.tearDown(   sP    
 	dmm$doo&dmm$dmm$r)   c                 t   t         j                  j                  |d      }|| j                  _        d| j                  _        d| j                  _        || j                  _        || j                  _        || j                  _	        || j                  _
        t         j                  j                  |d      | j                  _        t         j                  j                  |d      | j                  _        d| j                  _        d| j                  _        d| j                  _        t!        j"                  d	      5  t!        j"                  d
      5 }d|_        t'        j(                  | j                  d||      }	|	j+                          ddd       ddd       	S # 1 sw Y   xY w# 1 sw Y   	S xY w)z8Create an Nginx Configurator with the specified options.backupsgSt$?z-le-ssl.conftemp_checkpointsIN_PROGRESSzhttps://acme-server.org:443/newP   i  zBcertbot_nginx._internal.configurator.NginxConfigurator.config_testz4certbot_nginx._internal.configurator.util.exe_existsTnginx)nameversionopenssl_versionN)r   r   r   r   nginx_server_rootnginx_sleep_secondsle_vhost_extr   r   r   
backup_dirtemp_checkpoint_dirin_progress_dirserverhttp01_port
https_portr   patchreturn_valuer   NginxConfiguratorprepare)
r&   r   r   r   r   r6   r7   r0   mock_exe_existsr   s
             r(   get_nginx_configuratorz NginxTest.get_nginx_configurator4   sm    '',,x3/:,17.*8'(2%&.#&.#(/%13hHZ1[.-/WW\\'=-Q*$E!)+&(,%ZZ & ' 
	! ) * !-</3,%77&& #$3	5
  !
	! ! !
	! s$   >F-;F!F-!F*	&F--F7))         z1.0.2g)__name__
__module____qualname__r   r.   rF   __classcell__)r'   s   @r(   r   r      s    
% 08r)   r   c              #      K   t        j                  t              dz  dz  | z  }t        j                  |      5 }| ddd       y# 1 sw Y   yxY ww)z&Gets the filename of a test data file.testdatar   N)importlib_resourcesfilesr   as_file)filenamerefr   s      r(   get_data_filenamerU   V   sP      
#
#K
0:
=
KX
UC		$	$S	) T
  s   8AA	AAAc                 *    d }t         ||             S )z0Filter comment nodes from parsed configurations.c              3   :  K   | D ]  }|D cg c]  }t        j                  |      r| }}|r|d   }t        |      dkD  r|d   nd}ndx}}t        |t              r(t        j                  |      }t        |      |d<   | |dk7  s|s|  yc c}w w)z Generator dropping comment nodesr   rG   N #)r	   spaceylen
isinstancelistcopydeepcopyfilter_comments)treeentrye	spacelesskeyvaluesnews          r(   traversez!filter_comments.<locals>.traversea   s      	$E$)Gq1C1CA1FGIGl),Y!);1!!f#t$mmE*(0A	#:)#O	$Gs!   
BBBA BBB)r]   )ra   rh   s     r(   r`   r`   ^   s    $$ r)   c                 z    t        | d      rt        | d      ry|dk(  r|| v S | D ]  }t        |||dz
        s y y)zIs the needle in haystack at depth n?

    Return true if the needle is present in one of the sub-iterables in haystack
    at depth n. Haystack must be an iterable.
    __iter__stripFr   rG   T)hasattrcontains_at_depth)haystackneedlenitems       r(   rm   rm   v   sS     8Z(GHg,FAv!! T61q51 r)   )__doc__r^   r,   r   sys
contextlibr   unittestr   josepyr    certbotr   certbot.compatr   certbot.pluginsr   certbot.testsr#   certbot_nginx._internalr   r	   version_infoimportlib.resources	resourcesrP   ConfigTestCaser   rU   r`   rm    r)   r(   <module>r      st    )    
 %     " + 0 /v5<	(( <~   0r)   