
    kc5                         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ej                        Z G d dej                        Z G d d	e	      Z
 G d
 de	      Zy)    N)as_bytes)StringIOc                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
ListenerTestsc                     ddl m} |S )Nr   )Listener)supervisor.http_clientr   )selfr   s     C/usr/lib/python3/dist-packages/supervisor/tests/test_http_client.py_getTargetClasszListenerTests._getTargetClass	   s
    3    c                 ,     | j                                S N)r   r
   s    r   _makeOnezListenerTests._makeOne   s    %t##%''r   c                 h    | j                         }| j                  |j                  d d       d        y r   )r   assertEqualstatusr
   insts     r   test_statuszListenerTests.test_status   s(    }}T40$7r   c                 *   | j                         }	 t        j                  }t               }|t        _        | j	                  |j                  dd      d        | j	                  |j                         d       |t        _        y # t        _        w xY w)Nurlerrorz
url error
)r   sysstderrr   r   r   getvalue)r
   r   
old_stderrr   s       r   
test_errorzListenerTests.test_error   sj    }}	$JZFCJTZZw7>V__.>#CJCJs   A'B Bc                 j    | j                         }| j                  |j                  d d d       d        y r   )r   r   response_headerr   s     r   test_response_headerz"ListenerTests.test_response_header   s,    }}--dD$?Fr   c                 f    | j                         }| j                  |j                  d       d        y r   )r   r   doner   s     r   	test_donezListenerTests.test_done#   s%    }}4$/r   c                 
   | j                         }	 t        j                  }t               }|t        _        |j	                  dd       | j                  |j                         d       |t        _        y # t        _        w xY w)Nr   data)r   r   stdoutr   feedr   r   )r
   r   
old_stdoutr(   s       r   	test_feedzListenerTests.test_feed'   s]    }}	$JZFCJIIeV$V__.7#CJCJs   AA5 5Bc                 f    | j                         }| j                  |j                  d       d        y r   )r   r   closer   s     r   
test_closezListenerTests.test_close2   s&    }}D)40r   N)__name__
__module____qualname__r   r   r   r   r"   r%   r+   r.    r   r   r   r      s+    (8	$G0	$1r   r   c                       e Zd Zd Zd'dZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d  Z!d! Z"d" Z#d# Z$d$ Z%d% Z&d& Z'y)(HTTPHandlerTestsc                     ddl m} |S )Nr   )HTTPHandler)r	   r6   )r
   r6   s     r   r   z HTTPHandlerTests._getTargetClass7   s    6r   Nc                 ^    || j                         }i } | j                         ||||      S )N)map)_makeListenerr   )r
   listenerusernamepassword
socket_maps        r   r   zHTTPHandlerTests._makeOne;   s?    ))+H
%t##%	 	r   c                     t               }|S r   )DummyListener)r
   r:   s     r   r9   zHTTPHandlerTests._makeListenerF   s     ?r   c                 t    | j                         }d|_        | j                  t        |j                  d       y )Nabc)r   r   assertRaisesAssertionErrorgetr   s     r   test_get_url_not_Nonez&HTTPHandlerTests.test_get_url_not_NoneJ   s*    }}.$((E:r   c                 h    | j                         }| j                  t        |j                  dd       y )Nznothttp://localhostz/abc)r   rB   NotImplementedErrorrD   r   s     r   test_get_bad_schemez$HTTPHandlerTests.test_get_bad_schemeO   s+    }}HH!		r   c                 <   | j                         }g g fd|_        fd|_        |j                  dd       | j	                  |j
                  d       | j	                  t        j                  t        j                  fg       | j	                  dg       y )Nc                  &    j                  |       S r   appendargsocketss    r   <lambda>z;HTTPHandlerTests.test_get_implied_port_80.<locals>.<lambda>\       '..*= r   c                 &    j                  |       S r   rK   tupconnectss    r   rP   z;HTTPHandlerTests.test_get_implied_port_80.<locals>.<lambda>]       8??3#7 r   zhttp://localhost/abc/defP   )	localhostrX   	r   create_socketconnectrD   r   portsocketAF_INETSOCK_STREAMr
   r   rU   rO   s     @@r   test_get_implied_port_80z)HTTPHandlerTests.test_get_implied_port_80X   s    }}=7#Z0B'FNNF4F4F#G"HI$5#67r   c                 <   | j                         }g g fd|_        fd|_        |j                  dd       | j	                  |j
                  d       | j	                  t        j                  t        j                  fg       | j	                  dg       y )Nc                  &    j                  |       S r   rK   rM   s    r   rP   z9HTTPHandlerTests.test_get_explicit_port.<locals>.<lambda>g   rQ   r   c                 &    j                  |       S r   rK   rS   s    r   rP   z9HTTPHandlerTests.test_get_explicit_port.<locals>.<lambda>h   rV   r   zhttp://localhost:8080rW     )rY   rf   rZ   ra   s     @@r   test_get_explicit_portz'HTTPHandlerTests.test_get_explicit_portc   s    }}=7(*5D)FNNF4F4F#G"HI$7#89r   c                    | j                         }g g fd|_        fd|_        |j                  dd       | j	                  t
        j                  t
        j                  fg       | j	                  dg       y )Nc                  &    j                  |       S r   rK   rM   s    r   rP   zGHTTPHandlerTests.test_get_explicit_unix_domain_socket.<locals>.<lambda>r   rQ   r   c                 &    j                  |       S r   rK   rS   s    r   rP   zGHTTPHandlerTests.test_get_explicit_unix_domain_socket.<locals>.<lambda>s   rV   r   zunix:///a/b/c z/a/b/c)r   r[   r\   rD   r   r^   AF_UNIXr`   ra   s     @@r   $test_get_explicit_unix_domain_socketz5HTTPHandlerTests.test_get_explicit_unix_domain_socketn   si    }}=7"%FNNF4F4F#G"HIH:.r   c                    | j                         }g fd|_        t               |_        |j	                          | j                  |j                  j                  d        | j                  |j                  d       | j                  dg       | j                  |j                  j                         | j                  |j                  d       y )Nc                  &     j                  d      S NTrK   )delss   r   rP   z-HTTPHandlerTests.test_close.<locals>.<lambda>{   s    4;;t#4 r   r   TCLOSED)r   del_channelDummySocketr^   r-   r   r:   closed	connected
assertTruer   )r
   r   rq   s     @r   r.   zHTTPHandlerTests.test_closex   s    }}4!m

--t4+v&**+8,r   c                     ddl m} | j                         }g fd|_        |j	                  dd       | j                  d|g       y )Nr   CRLFc                 &    j                  |       S r   rK   )valpushess    r   rP   z.HTTPHandlerTests.test_header.<locals>.<lambda>   s    c 2 r   namer|   z	name: val)r	   rz   r   pushheaderr   )r
   rz   r   r}   s      @r   test_headerzHTTPHandlerTests.test_header   s@    /}}2	FE"+t!45r   c                 r    | j                         }d|_        | j                  |j                         d        y rp   )r   error_handledr   handle_errorr   s     r   !test_handle_error_already_handledz2HTTPHandlerTests.test_handle_error_already_handled   s.    }}!**,d3r   c                    | j                         }g fd|_        d|_        | j                  |j	                         d        | j                  |j
                  j                  d       | j                  |j
                  j                  d       | j                  dg       | j                  |j                         y )Nc                  &     j                  d      S rp   rK   ru   s   r   rP   z4HTTPHandlerTests.test_handle_error.<locals>.<lambda>       V]]40 r   fooz"Cannot connect, error: None (None)T)
r   r-   r   r   r   r:   	error_url	error_msgrw   r   r
   r   ru   s     @r   test_handle_errorz"HTTPHandlerTests.test_handle_error   s    }}0
**,d300%8MM##0	 	$(**+r   c                     | j                         }g fd|_        d|_        d|_        |j	                          | j                  |j                         | j                  g d       y )Nc                 8    j                  t        |             S r   rL   r   r|   pusheds    r   rP   zBHTTPHandlerTests.test_handle_connect_no_password.<locals>.<lambda>       hsm < r   /rY   )   GET / HTTP/1.1   
   Host: localhostr      Accept-Encoding: chunkedr      Accept: */*r   "   User-agent: Supervisor HTTP Clientr   r   r   )r   r   pathhosthandle_connectrw   rv   r   r
   r   r   s     @r   test_handle_connect_no_passwordz0HTTPHandlerTests.test_handle_connect_no_password   sZ    }}<			'	r   c                     | j                         }g fd|_        d|_        d|_        d|_        d|_        |j                          | j                  |j                         | j                  g d       y )Nc                 8    j                  t        |             S r   r   r   s    r   rP   zDHTTPHandlerTests.test_handle_connect_with_password.<locals>.<lambda>   r   r   r   rY   r<   r;   )r   r   r   r   r   r   r   r   r   r   s-   Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=r   r   r   )
r   r   r   r   r<   r;   r   rw   rv   r   r   s     @r   !test_handle_connect_with_passwordz2HTTPHandlerTests.test_handle_connect_with_password   sh    }}<			""'	r   c                     | j                         }|j                  d       | j                  |j                  j                  dg       y )Nr'   )r   r)   r   r:   fed_datar   s     r   r+   zHTTPHandlerTests.test_feed   s5    }}		&//&:r   c                     | j                         }|j                  |_        d|_        |j	                  d       | j                  |j                  j                  dg       | j                  |j                  d       y )NrA   r   abcfoor   )r   bodypartbuffercollect_incoming_datar   r:   r   r   s     r   'test_collect_incoming_data_part_is_bodyz8HTTPHandlerTests.test_collect_incoming_data_part_is_body   s]    }}II	""5)//(<c*r   c                     | j                         }d |_        d|_        |j                  d       | j	                  |j
                  j                  g        | j	                  |j                  d       y )NrA   r   r   )r   r   r   r   r   r:   r   r   s     r   +test_collect_incoming_data_part_is_not_bodyz<HTTPHandlerTests.test_collect_incoming_data_part_is_not_body   sW    }}	""5)//4h/r   c                     | j                         }g fd|_        d |_        |j                          | j	                  dg       | j	                  |j                  d       y )Nc                  &     j                  d      S rp   rK   )parteds   r   rP   z8HTTPHandlerTests.test_found_terminator.<locals>.<lambda>   s    FMM$/ r   Tr   )r   r   r   found_terminatorr   )r
   r   r   s     @r   test_found_terminatorz&HTTPHandlerTests.test_found_terminator   sS    }}/	$(c*r   c                     | j                         }d |_        |j                          | j                  |j                  d       y Nr   )r   r   ignorer   r   s     r   test_ignorezHTTPHandlerTests.test_ignore   s1    }}c*r   c                 r    | j                         }d|_        | j                  t        |j                         y )Ns   NOTHTTP/1.0 200 OK)r   r   rB   
ValueErrorstatus_liner   s     r   $test_status_line_not_startswith_httpz5HTTPHandlerTests.test_status_line_not_startswith_http   s*    }}+*d&6&67r   c                    | j                         }d|_        |j                         \  }}}| j                  |d       | j                  |d       | j                  |d       | j                  |j                  |j
                         y )Ns   HTTP/1.0 200 OK   HTTP/1.0      OK)r   r   r   r   r   headers)r
   r   versionr   reasons        r   test_status_line_200z%HTTPHandlerTests.test_status_line_200   sq    }}("&"2"2"4+.%'DLL1r   c                    | j                         }d|_        g fd|_        |j                         \  }}}| j	                  |d       | j	                  |d       | j	                  |d       | j	                  |j
                  |j                         | j	                  |j                  j                  d       | j	                  dg       y )Ns   HTTP/1.0 201 OKc                  &     j                  d      S rp   rK   r   s   r   rP   z;HTTPHandlerTests.test_status_line_not_200.<locals>.<lambda>	  r   r   r      r   zCannot read, status code 201T)	r   r   r-   r   r   r   r   r:   r   )r
   r   r   r   r   ru   s        @r   test_status_line_not_200z)HTTPHandlerTests.test_status_line_not_200  s    }}(0
"&"2"2"4+.%'DKK0MM##*	 	$(r   c                     | j                         }d|_        d|_        d|_        g fd|_        |j                          | j                  |j                  |j                         | j                  dg       y )Nr   s   not chunked   c                 &    j                  |       S r   rK   )Ltermss    r   rP   zEHTTPHandlerTests.test_headers_empty_line_nonchunked.<locals>.<lambda>      Q r   )	r   r   encodinglengthset_terminatorr   r   r   r   r
   r   r   s     @r   "test_headers_empty_line_nonchunkedz3HTTPHandlerTests.test_headers_empty_line_nonchunked  sc    }}&7DII.$r   c                     | j                         }d|_        d|_        |j                          | j	                  |j
                  |j                         y )Nr      chunked)r   r   r   r   r   r   chunked_sizer   s     r   test_headers_empty_line_chunkedz0HTTPHandlerTests.test_headers_empty_line_chunked   s>    }}"D$5$56r   c                 r    | j                         }d|_        | j                  |j                         d        y )N   :)r   r   r   r   r   s     r   +test_headers_nonempty_line_no_name_no_valuez<HTTPHandlerTests.test_headers_nonempty_line_no_name_no_value'  s*    }}.r   c                     | j                         }d|_        g fd|_        |j                          | j	                  |j
                  d       | j	                  dg       y )Ns   Transfer-Encoding: chunkedc                 *    j                  | |f      S r   rK   nv	responsess     r   rP   zOHTTPHandlerTests.test_headers_nonempty_line_transfer_encoding.<locals>.<lambda>0      I,<,<aV,D r   r   )s   transfer-encodingr   )r   r   r!   r   r   r   r
   r   r   s     @r   ,test_headers_nonempty_line_transfer_encodingz=HTTPHandlerTests.test_headers_nonempty_line_transfer_encoding,  sS    }}3	D
3%G$HIr   c                     | j                         }d|_        g fd|_        |j                          | j	                  |j
                  d       | j	                  dg       y )Ns   Content-Length: 3c                 *    j                  | |f      S r   rK   r   s     r   rP   zLHTTPHandlerTests.test_headers_nonempty_line_content_length.<locals>.<lambda>9  r   r   r   )s   content-length   3)r   r   r!   r   r   r   r   s     @r   )test_headers_nonempty_line_content_lengthz:HTTPHandlerTests.test_headers_nonempty_line_content_length5  sS    }}*	Da(%>$?@r   c                     | j                         }d|_        g fd|_        |j                          | j	                  dg       y )Ns   X-Test: abcc                 *    j                  | |f      S r   rK   r   s     r   rP   zGHTTPHandlerTests.test_headers_nonempty_line_arbitrary.<locals>.<lambda>B  r   r   )s   x-tests   abc)r   r   r!   r   r   r   s     @r   $test_headers_nonempty_line_arbitraryz5HTTPHandlerTests.test_headers_nonempty_line_arbitrary>  s?    }}$	D%8$9:r   c                     | j                         }|j                  dd       | j                  |j                  j                  d       | j                  |j                  j
                  d       y )N   a   b)r   r!   r   r:   response_header_nameresponse_header_valuer   s     r   r"   z%HTTPHandlerTests.test_response_headerF  sQ    }}T4(;;TB<<dCr   c                     | j                         }g fd|_        |j                          | j                  dg       | j	                  |j
                  j                         y )Nc                  &     j                  d      S rp   rK   r   s   r   rP   z,HTTPHandlerTests.test_body.<locals>.<lambda>O  r   r   T)r   r-   r   r   rw   r:   r$   r   s     @r   	test_bodyzHTTPHandlerTests.test_bodyL  sK    }}0
		$(**+r   c                     | j                         }|j                          | j                  |j                  j                         y r   )r   r$   rw   r:   r   s     r   r%   zHTTPHandlerTests.test_doneT  s,    }}		**+r   c                     | j                         }d|_        d|_        | j                  |j	                         d        | j                  |j                  d       y )Nr      )r   r   r   r   r   r   s     r   test_chunked_size_empty_linez-HTTPHandlerTests.test_chunked_size_empty_lineY  sH    }}**,d3a(r   c                    | j                         }d|_        d|_        | j                  |j	                         d        | j                  |j                  d       | j                  |j
                  |j                         y )N   0r   )r   r   r   r   r   r   trailerr   s     r   test_chunked_size_zero_sizez,HTTPHandlerTests.test_chunked_size_zero_size`  s`    }}**,d3a(DLL1r   c                 D   | j                         }d|_        d|_        g fd|_        | j	                  |j                         d        | j	                  |j                  |j                         | j	                  |j                  d       | j	                  dg       y )Ns   10r   c                 &    j                  |       S r   rK   )szr   s    r   rP   zAHTTPHandlerTests.test_chunked_size_nonzero_size.<locals>.<lambda>m  s    b)9 r         )r   r   r   r   r   r   r   chunked_bodyr   s     @r   test_chunked_size_nonzero_sizez/HTTPHandlerTests.test_chunked_size_nonzero_sizeh  s    }}9**,d3D$5$56b)%r   c                 *   ddl m} | j                         }d|_        g g fd|_        fd|_        |j                          | j                  |g       | j                  dg       | j                  |j                  |j                         y )Nr   ry   s   bufferc                 &    j                  |       S r   rK   )r   r   s    r   rP   z4HTTPHandlerTests.test_chunked_body.<locals>.<lambda>y  r   r   c                 &    j                  |       S r   rK   )r   liness    r   rP   z4HTTPHandlerTests.test_chunked_body.<locals>.<lambda>z  s    ell1o r   )
r	   rz   r   r   r   r)   r   r   r   r   )r
   rz   r   r  r   s      @@r   test_chunked_bodyz"HTTPHandlerTests.test_chunked_bodys  s{    /}}7-	',D$5$56r   c                 r    | j                         }d|_        | j                  |j                         d        y r   )r   r   r   r   r   s     r   test_trailer_line_not_crlfz+HTTPHandlerTests.test_trailer_line_not_crlf  s*    }}.r   c                     ddl m} | j                         }||_        g g fd|_        fd|_        | j                  |j                         d        | j                  dg       | j                  dg       y )Nr   ry   c                  &     j                  d      S rp   rK   )doness   r   rP   z9HTTPHandlerTests.test_trailer_line_crlf.<locals>.<lambda>  s    ELL. r   c                  &     j                  d      S rp   rK   )closess   r   rP   z9HTTPHandlerTests.test_trailer_line_crlf.<locals>.<lambda>  r   r   T)r	   rz   r   r   r$   r-   r   r   )r
   rz   r   r  r
  s      @@r   test_trailer_line_crlfz'HTTPHandlerTests.test_trailer_line_crlf  sj    /}}.	0
.'$(r   )Nrk   N)(r/   r0   r1   r   r   r9   rE   rH   rb   rg   rm   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  r2   r   r   r4   r4   6   s    	;
	8	:/
-64
,08;
+0++8
2) 	%7/
JA;D,,
)2	&7/

)r   r4   c                   F    e Zd ZdZdZdZdZd Zd Zd Z	d Z
d Zd Zd	 Zy)
r?   NFc                     g | _         y r   )r   r   s    r   __init__zDummyListener.__init__  s	    r   c                     || _         y r   r   r
   r   s     r   r-   zDummyListener.close  s	    r   c                      || _         || _        y r   )r   r   )r
   r   msgs      r   r   zDummyListener.error  s    r   c                 :    | j                   j                  |       y r   )r   rL   )r
   r   r'   s      r   r)   zDummyListener.feed  s    T"r   c                      || _         || _        y r   )
status_url
status_int)r
   r   ints      r   r   zDummyListener.status  s    r   c                      || _         || _        y r   )r   r   )r
   r   r~   values       r   r!   zDummyListener.response_header  s    $(!%*"r   c                     d| _         y rp   )r$   r  s     r   r$   zDummyListener.done  s	    	r   )r/   r0   r1   ru   r   r   r$   r  r-   r   r)   r   r!   r2   r   r   r?   r?     s9    FIID#+r   r?   c                       e Zd ZdZd Zy)rt   Fc                     d| _         y rp   r   r   s    r   r-   zDummySocket.close  s	    r   N)r/   r0   r1   ru   r-   r2   r   r   rt   rt     s    Fr   rt   )r^   r   unittestsupervisor.compatr   r   TestCaser   r4   objectr?   rt   r2   r   r   <module>r#     sT     
  & &,1H%% ,1\Y)x(( Y)v
F :& r   