U
    ] &                     @   s   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	 ddl
mZ d	d
 ZG dd dejZedkr~e  dS )z;Test for certbot_apache.configurator for CentOS 6 overrides    N)os)MisconfigurationError)obj)override_centos)parser)utilc              	   C   s   t j| |d}d| }tt j|dt j|dttjdgdddtt j|d	t j|d
ttjdgdddg}|S )z4Return the ground truth for the specified directory.zhttpd/conf.dz/filesztest.example.com.confz!test.example.com.conf/VirtualHostz*:80FTtest.example.comssl.confzssl.conf/VirtualHostz_default_:443N)r   pathjoinr   ZVirtualHostsetZAddrZ
fromstring)temp_dirZconfig_nameprefixZaug_prevh_truth r   C/usr/lib/python3/dist-packages/certbot_apache/tests/centos6_test.pyget_vh_truth   s0          r   c                       sh   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dd Z  ZS )CentOS6TestszTests for CentOS 6c                    sT   d}d}d}t t| j|||d tj| j| j| j| jddd| _	t
| jd| _d S )Nzcentos6_apache/apachezcentos6_apache/apache/httpdz"centos6_apache/apache/httpd/conf.d)test_dirconfig_root
vhost_root)   r      Zcentos)versionZos_info)superr   setUpr   Zget_apache_configuratorZconfig_pathZ
vhost_pathZ
config_dirZwork_dirconfigr   r   r   )selfr   r   r   	__class__r   r   r   $   s&         zCentOS6Tests.setUpc                 C   s   |  t| jjtj d S )N)
assertTrue
isinstancer   r   r   ZCentOSParserr   r   r   r   test_get_parser2   s    zCentOS6Tests.test_get_parserc                 C   sd   | j  }| t|d d}|D ]0}| jD ]}||kr,|d7 } q"q,td| q"| |d dS )z.Make sure all vhosts are being properly found.r   r      z
Missed: %sN)r   Zget_virtual_hostsassertEquallenr   	Exception)r   ZvhsfoundZvhostZcentos_truthr   r   r   test_get_virtual_hosts6   s    

z#CentOS6Tests.test_get_virtual_hostsc                 C   s   | j jjdddd}| t|d | d|d k | d|d k | jd | j jd	< | j 	d
dddd | j 
  | j jjdddd}| t|d |D ]N}| j j|d d }| |ddg | j j|d d }| d|k qd S )N
LoadModule
ssl_moduleFexcluder$   r	   r   ZIfModuler   random.demoexample/cert.pemexample/key.pemexample/cert_chain.pemexample/fullchain.pemr   modules/mod_ssl.soi
!mod_ssl.c)r   r   find_dirr%   r&   r    assertFalser   assocdeploy_certsaveget_all_args)r   Zssl_loadmodspost_loadmodslmZ	argumentsZ
ifmod_argsr   r   r   test_loadmod_defaultE   s8         
  z!CentOS6Tests.test_loadmod_defaultc                 C   s   ddg}| j j| j jjd d| | j   | j jjdddd}| tdd |D  | jd	 | j j	d
< | j 
ddddd | j jjdddd}|D ]}| | j j| qd S )Nr+   r4   defaultr*   Fr,   c                 S   s   g | ]}d |  kqS )Zifmodule)lower).0mr   r   r   
<listcomp>l   s     z6CentOS6Tests.test_loadmod_multiple.<locals>.<listcomp>r   r   r.   r/   r0   r1   r2   )r   r   add_dirlocr:   r6   r7   anyr   r8   r9   r    not_modssl_ifmodule)r   sslmod_argspre_loadmodsr<   modr   r   r   test_loadmod_multiplec   s4    
       z"CentOS6Tests.test_loadmod_multiplec                    s   ddg} j jjt j jjd ddd} j j|d d d|  j    jd	  j jd
<  j 	ddddd  j    j jj
ddt j jjd dd} fdd|D } t|d   j j|d	 d d | d S )Nr+   r4   r?   r5   TZ	beginningr*   r   r   r.   r/   r0   r1   r2   Fstartr-   c                    s"   g | ]} j jjd  |kr|qS )r?   )r   r   rE   )rA   r=   r"   r   r   rC      s      z=CentOS6Tests.test_loadmod_rootconf_exists.<locals>.<listcomp>r$   r3   )r   r   	get_ifmodget_aug_pathrE   rD   r:   r   r8   r9   r6   r%   r&   r;   )r   rH   rootconf_ifmodZroot_loadmodsZmodsr   r"   r   test_loadmod_rootconf_existsw   s:     
   
 z)CentOS6Tests.test_loadmod_rootconf_existsc                 C   s   ddg}| j jj| jd jddd}| j j|d d d| | j j| jd jd| | j   | j jjdd| jd jd	d
}| t	|d | jd | j j
d< | j ddddd | j   | j jjdd| jd jd	d
}| t	|d d S )Nr+   r4   r$   r5   TrL   rM   r*   FrN   r   r   r   r.   r/   r0   r1   r2   )r   r   rP   r   r
   rD   r:   r6   r%   r&   r8   r9   )r   Zloadmod_argsZifmodrI   r<   r   r   r    test_neg_loadmod_already_on_path   s@    
  
  
    
  
 z-CentOS6Tests.test_neg_loadmod_already_on_pathc              	   C   s   ddg}| j jjt| j jjd ddd}| j j|d d d| | j   | jd	 | j jd
< | j jj	dddd}| 
t| j jddddd | j jj	dddd}| || d S )Nr+   zmodules/mod_somethingelse.sor?   r5   TrL   rM   r*   r   r   Fr,   r.   r/   r0   r1   r2   )r   r   rP   rQ   rE   rD   r:   r   r8   r6   ZassertRaisesr   r9   r%   )r   rH   rR   Zpre_matchesZpost_matchesr   r   r   test_loadmod_non_duplicate   s2     

    
 z'CentOS6Tests.test_loadmod_non_duplicatec                 C   s|   | j jjdddd}|D ]"}|dd }| j jj| q| j   | j ddd	d
d | j jjdddd}| | d S )Nr*   r+   Fr,   /r   r.   r/   r0   r1   r2   )	r   r   r6   
rpartitionZaugremover:   r9   r7   )r   Zorig_loadmodsrJ   Z
noarg_pathr<   r   r   r   test_loadmod_not_found   s(    

   
z#CentOS6Tests.test_loadmod_not_foundc                 C   s@   |  | jjd |  | jjd |  | jjd d S )Nz/path/does/not/include/ifmod z(/path/includes/IfModule/but/no/arguments)r7   r   r   rG   r"   r   r   r   test_no_ifmod_search_false   s    z'CentOS6Tests.test_no_ifmod_search_false)__name__
__module____qualname____doc__r   r#   r)   r>   rK   rS   rT   rU   rY   r[   __classcell__r   r   r   r   r   !   s   r   __main__)r_   ZunittestZcertbot.compatr   Zcertbot.errorsr   Zcertbot_apacher   r   r   Zcertbot_apache.testsr   r   Z
ApacheTestr   r\   mainr   r   r   r   <module>   s    =