o
    S۷i5                     @   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	   W/home/ubuntu/vllm_env/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/defP   )	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    .  ]