o
    þâfû5  ã                   @   sx   d dl Z d dlZd dlZd dlmZ d dlmZ G dd„ dejƒZG dd„ dejƒZG dd	„ d	e	ƒZ
G d
d„ de	ƒZdS )é    N)Úas_bytes)ÚStringIOc                   @   sL   e Z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S )ÚListenerTestsc                 C   ó   ddl m} |S )Nr   )ÚListener)Úsupervisor.http_clientr   )Úselfr   © r	   úT/var/www/html/venv/lib/python3.10/site-packages/supervisor/tests/test_http_client.pyÚ_getTargetClass	   ó   zListenerTests._getTargetClassc                 C   s
   |   ¡ ƒ S ©N)r   ©r   r	   r	   r
   Ú_makeOne   ó   
zListenerTests._makeOnec                 C   s    |   ¡ }|  | d d ¡d ¡ d S r   )r   ÚassertEqualÚstatus©r   Úinstr	   r	   r
   Útest_status   s   zListenerTests.test_statusc                 C   sT   |   ¡ }z!tj}tƒ }|t_|  | dd¡d ¡ |  | ¡ d¡ W |t_d S |t_w )NÚurlÚerrorz
url error
)r   ÚsysÚstderrr   r   r   Úgetvalue)r   r   Ú
old_stderrr   r	   r	   r
   Ú
test_error   s   zListenerTests.test_errorc                 C   s"   |   ¡ }|  | d d d ¡d ¡ d S r   )r   r   Úresponse_headerr   r	   r	   r
   Útest_response_header   s   z"ListenerTests.test_response_headerc                 C   ó   |   ¡ }|  | d ¡d ¡ d S r   )r   r   Údoner   r	   r	   r
   Ú	test_done#   ó   zListenerTests.test_donec                 C   sL   |   ¡ }ztj}tƒ }|t_| dd¡ |  | ¡ d¡ W |t_d S |t_w )Nr   Údata)r   r   Ústdoutr   Úfeedr   r   )r   r   Ú
old_stdoutr$   r	   r	   r
   Ú	test_feed'   s   zListenerTests.test_feedc                 C   r   r   )r   r   Úcloser   r	   r	   r
   Ú
test_close2   r"   zListenerTests.test_closeN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r!   r'   r)   r	   r	   r	   r
   r      s    r   c                   @   s6  e Zd Zdd„ ZdMd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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d-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Zd=d>„ Z d?d@„ Z!dAdB„ Z"dCdD„ Z#dEdF„ Z$dGdH„ Z%dIdJ„ Z&dKdL„ Z'dS )NÚHTTPHandlerTestsc                 C   r   )Nr   )ÚHTTPHandler)r   r.   )r   r.   r	   r	   r
   r   7   r   z HTTPHandlerTests._getTargetClassNÚ c                 C   s(   |d u r|   ¡ }i }|  ¡ ||||dS )N)Úmap)Ú_makeListenerr   )r   ÚlistenerÚusernameÚpasswordÚ
socket_mapr	   r	   r
   r   ;   s   üzHTTPHandlerTests._makeOnec                 C   s
   t ƒ }|S r   )ÚDummyListener)r   r2   r	   r	   r
   r1   F   s   zHTTPHandlerTests._makeListenerc                 C   s"   |   ¡ }d|_|  t|jd¡ d S )NÚabc)r   r   ÚassertRaisesÚAssertionErrorÚgetr   r	   r	   r
   Útest_get_url_not_NoneJ   ó   z&HTTPHandlerTests.test_get_url_not_Nonec                 C   s   |   ¡ }|  t|jdd¡ d S )Nznothttp://localhostz/abc)r   r8   ÚNotImplementedErrorr:   r   r	   r	   r
   Útest_get_bad_schemeO   s   üz$HTTPHandlerTests.test_get_bad_schemec                    ón   |   ¡ }g ‰g ‰ ‡fdd„|_‡ fdd„|_| dd¡ |  |jd¡ |  ˆtjtjfg¡ |  ˆ dg¡ d S )Nc                     ó
   ˆ   | ¡S r   ©Úappend©Úarg©Úsocketsr	   r
   Ú<lambda>\   ó   
 z;HTTPHandlerTests.test_get_implied_port_80.<locals>.<lambda>c                    r@   r   rA   ©Útup©Úconnectsr	   r
   rG   ]   rH   zhttp://localhostú/abc/deféP   )Ú	localhostrN   ©	r   Úcreate_socketÚconnectr:   r   ÚportÚsocketÚAF_INETÚSOCK_STREAMr   r	   ©rL   rF   r
   Útest_get_implied_port_80X   ó   z)HTTPHandlerTests.test_get_implied_port_80c                    r?   )Nc                     r@   r   rA   rC   rE   r	   r
   rG   g   rH   z9HTTPHandlerTests.test_get_explicit_port.<locals>.<lambda>c                    r@   r   rA   rI   rK   r	   r
   rG   h   rH   zhttp://localhost:8080rM   é  )rO   rZ   rP   r   r	   rW   r
   Útest_get_explicit_portc   rY   z'HTTPHandlerTests.test_get_explicit_portc                    s`   |   ¡ }g ‰g ‰ ‡fdd„|_‡ fdd„|_| dd¡ |  ˆtjtjfg¡ |  ˆ dg¡ d S )Nc                     r@   r   rA   rC   rE   r	   r
   rG   r   rH   zGHTTPHandlerTests.test_get_explicit_unix_domain_socket.<locals>.<lambda>c                    r@   r   rA   rI   rK   r	   r
   rG   s   rH   zunix:///a/b/cr/   z/a/b/c)r   rQ   rR   r:   r   rT   ÚAF_UNIXrV   r   r	   rW   r
   Ú$test_get_explicit_unix_domain_socketn   s   z5HTTPHandlerTests.test_get_explicit_unix_domain_socketc                    sv   |   ¡ }g ‰ ‡ fdd„|_tƒ |_| ¡  |  |jjd ¡ |  |jd¡ |  ˆ dg¡ |  	|jj¡ |  |j
d¡ d S )Nc                      ó
   ˆ   d¡S ©NTrA   r	   ©Údelsr	   r
   rG   {   rH   z-HTTPHandlerTests.test_close.<locals>.<lambda>r   TÚCLOSED)r   Údel_channelÚDummySocketrT   r(   r   r2   ÚclosedÚ	connectedÚ
assertTruer   r   r	   r`   r
   r)   x   s   zHTTPHandlerTests.test_closec                    sF   ddl m} |  ¡ }g ‰ ‡ fdd„|_| dd¡ |  ˆ d|g¡ d S )Nr   ©ÚCRLFc                    r@   r   rA   ©Úval©Úpushesr	   r
   rG   ˆ   rH   z.HTTPHandlerTests.test_header.<locals>.<lambda>Únamerk   z	name: val)r   ri   r   ÚpushÚheaderr   ©r   ri   r   r	   rl   r
   Útest_header„   s   zHTTPHandlerTests.test_headerc                 C   ó"   |   ¡ }d|_|  | ¡ d ¡ d S r_   )r   Úerror_handledr   Úhandle_errorr   r	   r	   r
   Ú!test_handle_error_already_handledŒ   r<   z2HTTPHandlerTests.test_handle_error_already_handledc                    sn   |   ¡ }g ‰ ‡ fdd„|_d|_|  | ¡ d ¡ |  |jjd¡ |  |jjd¡ |  ˆ dg¡ |  |j	¡ d S )Nc                      r^   r_   rA   r	   ©re   r	   r
   rG   ”   rH   z4HTTPHandlerTests.test_handle_error.<locals>.<lambda>Úfooz"Cannot connect, error: None (None)T)
r   r(   r   r   ru   r2   Ú	error_urlÚ	error_msgrg   rt   r   r	   rw   r
   Útest_handle_error‘   s   þz"HTTPHandlerTests.test_handle_errorc                    sN   |   ¡ }g ‰ ‡ fdd„|_d|_d|_| ¡  |  |j¡ |  ˆ g d¢¡ d S )Nc                    ó   ˆ   t| ƒ¡S r   ©rB   r   rj   ©Úpushedr	   r
   rG   ¢   ó    zBHTTPHandlerTests.test_handle_connect_no_password.<locals>.<lambda>ú/rO   )ó   GET / HTTP/1.1ó   
ó   Host: localhostrƒ   ó   Accept-Encoding: chunkedrƒ   ó   Accept: */*rƒ   ó"   User-agent: Supervisor HTTP Clientrƒ   rƒ   rƒ   )r   ro   ÚpathÚhostÚhandle_connectrg   rf   r   r   r	   r~   r
   Útest_handle_connect_no_passwordŸ   s   þz0HTTPHandlerTests.test_handle_connect_no_passwordc                    sZ   |   ¡ }g ‰ ‡ fdd„|_d|_d|_d|_d|_| ¡  |  |j¡ |  	ˆ g d¢¡ d S )Nc                    r|   r   r}   rj   r~   r	   r
   rG   º   r€   zDHTTPHandlerTests.test_handle_connect_with_password.<locals>.<lambda>r   rO   r4   r3   )r‚   rƒ   r„   rƒ   r…   rƒ   r†   rƒ   r‡   rƒ   s-   Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=rƒ   rƒ   rƒ   )
r   ro   rˆ   r‰   r4   r3   rŠ   rg   rf   r   r   r	   r~   r
   Ú!test_handle_connect_with_password·   s   þz2HTTPHandlerTests.test_handle_connect_with_passwordc                 C   s(   |   ¡ }| d¡ |  |jjdg¡ d S )Nr#   )r   r%   r   r2   Úfed_datar   r	   r	   r
   r'   Ó   s   
zHTTPHandlerTests.test_feedc                 C   sD   |   ¡ }|j|_d|_| d¡ |  |jjdg¡ |  |jd¡ d S )Nr7   rx   Úabcfooó    )r   ÚbodyÚpartÚbufferÚcollect_incoming_datar   r2   r   r   r	   r	   r
   Ú'test_collect_incoming_data_part_is_bodyØ   s   
z8HTTPHandlerTests.test_collect_incoming_data_part_is_bodyc                 C   s@   |   ¡ }d |_d|_| d¡ |  |jjg ¡ |  |jd¡ d S )Nr7   rx   rŽ   )r   r‘   r’   r“   r   r2   r   r   r	   r	   r
   Ú+test_collect_incoming_data_part_is_not_bodyà   s   
z<HTTPHandlerTests.test_collect_incoming_data_part_is_not_bodyc                    sH   |   ¡ }g ‰ ‡ fdd„|_d |_| ¡  |  ˆ dg¡ |  |jd¡ d S )Nc                      r^   r_   rA   r	   ©Úpartedr	   r
   rG   ë   rH   z8HTTPHandlerTests.test_found_terminator.<locals>.<lambda>Tr   )r   r‘   r’   Úfound_terminatorr   r   r	   r–   r
   Útest_found_terminatorè   s   z&HTTPHandlerTests.test_found_terminatorc                 C   s(   |   ¡ }d |_| ¡  |  |jd¡ d S ©Nr   )r   r’   Úignorer   r   r	   r	   r
   Útest_ignoreñ   s   zHTTPHandlerTests.test_ignorec                 C   s    |   ¡ }d|_|  t|j¡ d S )Ns   NOTHTTP/1.0 200 OK)r   r’   r8   Ú
ValueErrorÚstatus_liner   r	   r	   r
   Ú$test_status_line_not_startswith_http÷   s   z5HTTPHandlerTests.test_status_line_not_startswith_httpc                 C   sT   |   ¡ }d|_| ¡ \}}}|  |d¡ |  |d¡ |  |d¡ |  |j|j¡ d S )Ns   HTTP/1.0 200 OKó   HTTP/1.0éÈ   ó   OK)r   r’   rž   r   r‘   Úheaders©r   r   Úversionr   Úreasonr	   r	   r
   Útest_status_line_200ü   s   z%HTTPHandlerTests.test_status_line_200c                    s„   |   ¡ }d|_g ‰ ‡ fdd„|_| ¡ \}}}|  |d¡ |  |d¡ |  |d¡ |  |j|j¡ |  |jjd¡ |  ˆ dg¡ d S )	Ns   HTTP/1.0 201 OKc                      r^   r_   rA   r	   rw   r	   r
   rG   	  rH   z;HTTPHandlerTests.test_status_line_not_200.<locals>.<lambda>r    éÉ   r¢   zCannot read, status code 201T)	r   r’   r(   rž   r   r‘   r›   r2   rz   r¤   r	   rw   r
   Útest_status_line_not_200  s   þz)HTTPHandlerTests.test_status_line_not_200c                    sV   |   ¡ }d|_d|_d|_g ‰ ‡ fdd„|_| ¡  |  |j|j¡ |  ˆ dg¡ d S )Nr   s   not chunkedé   c                    r@   r   rA   )ÚL©Útermsr	   r
   rG     rH   zEHTTPHandlerTests.test_headers_empty_line_nonchunked.<locals>.<lambda>)	r   r’   ÚencodingÚlengthÚset_terminatorr£   r   r‘   r   r   r	   r¬   r
   Ú"test_headers_empty_line_nonchunked  s   z3HTTPHandlerTests.test_headers_empty_line_nonchunkedc                 C   s0   |   ¡ }d|_d|_| ¡  |  |j|j¡ d S )Nr   ó   chunked)r   r’   r®   r£   r   r‘   Úchunked_sizer   r	   r	   r
   Útest_headers_empty_line_chunked   s
   z0HTTPHandlerTests.test_headers_empty_line_chunkedc                 C   rs   )Nó   :)r   r’   r   r£   r   r	   r	   r
   Ú+test_headers_nonempty_line_no_name_no_value'  r<   z<HTTPHandlerTests.test_headers_nonempty_line_no_name_no_valuec                    óH   |   ¡ }d|_g ‰ ‡ fdd„|_| ¡  |  |jd¡ |  ˆ dg¡ d S )Ns   Transfer-Encoding: chunkedc                    ó   ˆ   | |f¡S r   rA   ©ÚnÚv©Ú	responsesr	   r
   rG   0  r€   zOHTTPHandlerTests.test_headers_nonempty_line_transfer_encoding.<locals>.<lambda>r²   )s   transfer-encodingr²   )r   r’   r   r£   r   r®   r   r	   r¼   r
   Ú,test_headers_nonempty_line_transfer_encoding,  ó   z=HTTPHandlerTests.test_headers_nonempty_line_transfer_encodingc                    r·   )Ns   Content-Length: 3c                    r¸   r   rA   r¹   r¼   r	   r
   rG   9  r€   zLHTTPHandlerTests.test_headers_nonempty_line_content_length.<locals>.<lambda>rª   )s   content-lengthó   3)r   r’   r   r£   r   r¯   r   r	   r¼   r
   Ú)test_headers_nonempty_line_content_length5  r¿   z:HTTPHandlerTests.test_headers_nonempty_line_content_lengthc                    s:   |   ¡ }d|_g ‰ ‡ fdd„|_| ¡  |  ˆ dg¡ d S )Ns   X-Test: abcc                    r¸   r   rA   r¹   r¼   r	   r
   rG   B  r€   zGHTTPHandlerTests.test_headers_nonempty_line_arbitrary.<locals>.<lambda>)s   x-tests   abc)r   r’   r   r£   r   r   r	   r¼   r
   Ú$test_headers_nonempty_line_arbitrary>  s   z5HTTPHandlerTests.test_headers_nonempty_line_arbitraryc                 C   s8   |   ¡ }| dd¡ |  |jjd¡ |  |jjd¡ d S )Nó   aó   b)r   r   r   r2   Úresponse_header_nameÚresponse_header_valuer   r	   r	   r
   r   F  s   z%HTTPHandlerTests.test_response_headerc                    sB   |   ¡ }g ‰ ‡ fdd„|_| ¡  |  ˆ dg¡ |  |jj¡ d S )Nc                      r^   r_   rA   r	   rw   r	   r
   rG   O  rH   z,HTTPHandlerTests.test_body.<locals>.<lambda>T)r   r(   r   r   rg   r2   r    r   r	   rw   r
   Ú	test_bodyL  s   zHTTPHandlerTests.test_bodyc                 C   s"   |   ¡ }| ¡  |  |jj¡ d S r   )r   r    rg   r2   r   r	   r	   r
   r!   T  s   zHTTPHandlerTests.test_donec                 C   s6   |   ¡ }d|_d|_|  | ¡ d ¡ |  |jd¡ d S )Nr   é   )r   r’   r¯   r   r³   r   r	   r	   r
   Útest_chunked_size_empty_lineY  s
   z-HTTPHandlerTests.test_chunked_size_empty_linec                 C   sF   |   ¡ }d|_d|_|  | ¡ d ¡ |  |jd¡ |  |j|j¡ d S )Nó   0rÈ   )r   r’   r¯   r   r³   r‘   Útrailerr   r	   r	   r
   Útest_chunked_size_zero_size`  s   z,HTTPHandlerTests.test_chunked_size_zero_sizec                    sf   |   ¡ }d|_d|_g ‰ ‡ fdd„|_|  | ¡ d ¡ |  |j|j¡ |  |jd¡ |  ˆ dg¡ d S )Ns   10rÈ   c                    r@   r   rA   )Úszr¬   r	   r
   rG   m  rH   zAHTTPHandlerTests.test_chunked_size_nonzero_size.<locals>.<lambda>é   é   )r   r’   r¯   r°   r   r³   r‘   Úchunked_bodyr   r	   r¬   r
   Útest_chunked_size_nonzero_sizeh  s   z/HTTPHandlerTests.test_chunked_size_nonzero_sizec                    sv   ddl m} |  ¡ }d|_g ‰g ‰ ‡fdd„|_‡ fdd„|_| ¡  |  ˆ|g¡ |  ˆ dg¡ |  |j|j	¡ d S )Nr   rh   s   bufferc                    r@   r   rA   ©r»   r¬   r	   r
   rG   y  rH   z4HTTPHandlerTests.test_chunked_body.<locals>.<lambda>c                    r@   r   rA   rÒ   )Úlinesr	   r
   rG   z  rH   )
r   ri   r   r’   r°   r%   rÐ   r   r‘   r³   rq   r	   )rÓ   r­   r
   Útest_chunked_bodys  s   z"HTTPHandlerTests.test_chunked_bodyc                 C   rs   rš   )r   r’   r   rË   r   r	   r	   r
   Útest_trailer_line_not_crlf€  r<   z+HTTPHandlerTests.test_trailer_line_not_crlfc                    sn   ddl m} |  ¡ }||_g ‰g ‰ ‡fdd„|_‡ fdd„|_|  | ¡ d ¡ |  ˆdg¡ |  ˆ dg¡ d S )Nr   rh   c                      r^   r_   rA   r	   )Údonesr	   r
   rG   ‹  rH   z9HTTPHandlerTests.test_trailer_line_crlf.<locals>.<lambda>c                      r^   r_   rA   r	   )Úclosesr	   r
   rG   Œ  rH   T)r   ri   r   r’   r    r(   r   rË   rq   r	   )r×   rÖ   r
   Útest_trailer_line_crlf…  s   z'HTTPHandlerTests.test_trailer_line_crlf)Nr/   N)(r*   r+   r,   r   r   r1   r;   r>   rX   r[   r]   r)   rr   rv   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-   6   sL    
	
				r-   c                   @   sT   e Zd ZdZdZdZdZdd„ Zdd„ Zdd„ Z	d	d
„ Z
dd„ Zdd„ Zdd„ ZdS )r6   NFc                 C   s
   g | _ d S r   )r   r   r	   r	   r
   Ú__init__–  r   zDummyListener.__init__c                 C   s
   || _ d S r   rw   ©r   r   r	   r	   r
   r(   ™  r   zDummyListener.closec                 C   ó   || _ || _d S r   )ry   rz   )r   r   Úmsgr	   r	   r
   r   œ  ó   
zDummyListener.errorc                 C   s   | j  |¡ d S r   )r   rB   )r   r   r#   r	   r	   r
   r%      s   zDummyListener.feedc                 C   rÛ   r   )Ú
status_urlÚ
status_int)r   r   Úintr	   r	   r
   r   £  rÝ   zDummyListener.statusc                 C   s   || _ || _d S r   )rÅ   rÆ   )r   r   rn   Úvaluer	   r	   r
   r   §  rÝ   zDummyListener.response_headerc                 C   ó
   d| _ d S r_   )r    rÚ   r	   r	   r
   r    «  r   zDummyListener.done)r*   r+   r,   re   ry   rz   r    rÙ   r(   r   r%   r   r   r	   r	   r	   r
   r6   ‘  s    r6   c                   @   s   e Zd ZdZdd„ ZdS )rd   Fc                 C   râ   r_   rw   r   r	   r	   r
   r(   °  r   zDummySocket.closeN)r*   r+   r,   re   r(   r	   r	   r	   r
   rd   ®  s    rd   )rT   r   ÚunittestÚsupervisor.compatr   r   ÚTestCaser   r-   Úobjectr6   rd   r	   r	   r	   r
   Ú<module>   s    .  ]