a
    äzeÄ  ã                   @   s„   d dl Z d dlmZ d dlmZ d dlZd dlZe d¡Ze 	d¡ dd„ Z
G dd	„ d	e jƒZG d
d„ de jƒZedkr€e  ¡  dS )é    N)Úsupport)Úsocket_helperÚsslZnetworkc              	   C   s†   t  ¡ }t | |f¡\}z|j|| d}W n  tyJ   Y W d   ƒ dS 0 | ¡  W d   ƒ dS W d   ƒ n1 sx0    Y  d S )N)Zserver_hostnameFT)r   Úcreate_default_contextÚsocketÚcreate_connectionZwrap_socketÚ	ExceptionÚclose)ÚhostÚportÚcontextÚsock© r   ú'/usr/lib/python3.9/test/test_smtpnet.pyÚcheck_ssl_verifiy   s    r   c                   @   s   e Zd ZdZdZdd„ ZdS )ÚSmtpTestúsmtp.gmail.comiK  c                 C   sÐ   t  td¡ t tj¡}d|_tj|_t	 
| j¡Š t | j| j¡}z|j|d W nH tjyœ } z.|jd dkr†t |jd ¡ n‚ W Y d }~n
d }~0 0 | ¡  | ¡  W d   ƒ n1 sÂ0    Y  d S )NÚSMTP_SSLF©r   r   z+STARTTLS extension not supported by server.)r   Úget_attributeÚsmtplibr   Ú
SSLContextÚPROTOCOL_TLS_CLIENTÚcheck_hostnameÚ	CERT_NONEÚverify_moder   Útransient_internetÚ
testServerZSMTPÚ
remotePortZstarttlsZSMTPExceptionÚargsÚunittestÚskipÚehloÚquit)Úselfr   ÚserverÚer   r   r   Útest_connect_starttls   s    zSmtpTest.test_connect_starttlsN)Ú__name__Ú
__module__Ú__qualname__r   r   r'   r   r   r   r   r      s   r   c                   @   s4   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚSmtpSSLTestr   iÑ  c                 C   s\   t  td¡ t | j¡0 t | j| j¡}| ¡  | 	¡  W d   ƒ n1 sN0    Y  d S ©Nr   )
r   r   r   r   r   r   r   r   r"   r#   ©r$   r%   r   r   r   Útest_connect1   s
    zSmtpSSLTest.test_connectc                 C   sX   t  td¡ t | j¡, t | j¡}| ¡  | ¡  W d   ƒ n1 sJ0    Y  d S r,   )	r   r   r   r   r   r   r   r"   r#   r-   r   r   r   Útest_connect_default_port8   s
    z%SmtpSSLTest.test_connect_default_portc                 C   sz   t  t j¡}d|_t j|_t td¡ t	 
| j¡4 tj| j| j|d}| ¡  | ¡  W d   ƒ n1 sl0    Y  d S )NFr   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   r#   )r$   r   r%   r   r   r   Útest_connect_using_sslcontext?   s    z)SmtpSSLTest.test_connect_using_sslcontextc                 C   s°   t  | j¡, t| j| jƒ}|s*|  d¡ W d   ƒ n1 s>0    Y  t td¡ t	 
¡ }t  | j¡4 tj| j| j|d}| ¡  | ¡  W d   ƒ n1 s¢0    Y  d S )Nz!SSL certificate can't be verifiedr   r   )r   r   r   r   r   ZskipTestr   r   r   r   r   r   r"   r#   )r$   Z
can_verifyr   r%   r   r   r   Ú&test_connect_using_sslcontext_verifiedI   s    (z2SmtpSSLTest.test_connect_using_sslcontext_verifiedN)	r(   r)   r*   r   r   r.   r/   r0   r1   r   r   r   r   r+   -   s   
r+   Ú__main__)r    Útestr   Ztest.supportr   r   r   Úimport_moduler   Zrequiresr   ZTestCaser   r+   r(   Úmainr   r   r   r   Ú<module>   s   

*