a
    Zg@                  
   @   s  d dl mZmZmZmZ d dlZddlmZmZm	Z	m
Z
mZmZmZ ddlmZmZ ddlmZmZmZmZmZ ddlmZ ddlmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# dd	l$m%Z% dd
l&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/ eefeddddgddfe"e!feddgdddfe"e!fedg dddfe"e!feddgdddfe"e!fedg dddfgZ0ed ee1ddd Z2eeedd!d"d#Z3e1ed$d%d&Z4ee1edd'd(d)Z5dd*d+d,Z6dd*d-d.Z7dd*d/d0Z8dd*d1d2Z9dd*d3d4Z:ee1e;eeddf d5d6d7Z<eee
 d8d9d:Z=dWee1ee;dd<d=d>Z>dd*d?d@Z?dd*dAdBZ@dd*dCdDZAdd*dEdFZBdd*dGdHZCdd*dIdJZDdd*dKdLZEdd*dMdNZFdd*dOdPZGdd*dQdRZHdd*dSdTZIdd*dUdVZJdS )X    )AnyCallable	GeneratorListN   )ConnectionClosedDataEndOfMessageEventInformationalResponseRequestResponse)Headersnormalize_and_validate)_obsolete_line_foldChunkedReaderContentLengthReaderHttp10ReaderREADERSReceiveBuffer)
CLIENTCLOSEDDONEIDLEMIGHT_SWITCH_PROTOCOL
MUST_CLOSE	SEND_BODYSEND_RESPONSESERVERSWITCHED_PROTOCOL)LocalProtocolError)ChunkedWriterContentLengthWriterHttp10Writerwrite_any_responsewrite_headerswrite_requestWRITERS   )normalize_data_eventsGETz/aHostfoo
Connectionclosemethodtargetheaderss1   GET /a HTTP/1.1
Host: foo
Connection: close

      OK)status_coder5   reasons&   HTTP/1.1 200 OK
Connection: close

s   HTTP/1.1 200 OK

e   )ZUpgradeZ	websockets   Upgrades,   HTTP/1.1 101 Upgrade
Upgrade: websocket

s   HTTP/1.1 101 Upgrade

).N)writerobjreturnc                 C   s   g }| ||j  d|S )N    )appendjoin)r;   r<   Zgot_list rA   _/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/h11/tests/test_io.pydowriteR   s    rC   )r;   r<   expectedr=   c                 C   s   t | |}||ksJ d S N)rC   )r;   r<   rD   gotrA   rA   rB   twX   s    
rG   )datar=   c                 C   s   t  }|| 7 }|S rE   r   )rH   bufrA   rA   rB   makebuf]   s    rJ   )readerrH   rD   r=   c                    s   t d d fdd}t|}|| | |r0J t }tt|D ](}| |d u sVJ ||||d  7 }qB|| | t|}|d7 }|| | t|dksJ d S )N)rF   r=   c                    sF   |  ksJ t | dg D ](\}}t|tu s0J t|tu sJ qd S )Nr5   )getattrtypebytes)rF   namevaluerD   rA   rB   checkd   s    ztr.<locals>.checkr)      trailing)r   rJ   r   rangelenrN   )rK   rH   rD   rR   rI   irA   rQ   rB   trc   s    	rW   )r=   c                  C   s,   t D ]"\\} }}}tt| |f || qd S rE   )SIMPLE_CASESrG   r(   ZrolestateeventbinaryrA   rA   rB   test_writers_simple   s    r]   c                  C   s,   t D ]"\\} }}}tt| |f || qd S rE   )rX   rW   r   rY   rA   rA   rB   test_readers_simple   s    r^   c                	   C   s   t ttddgd t ttg d tt, t ttddddgd	d
d  W d    n1 s`0    Y  tt( t t	t
ddgd	dd  W d    n1 s0    Y  d S )Nr.   bar)ZbazZquuxs   foo: bar
baz: quux

s   
r+   /r,   r/   1.0r3   r4   r5   http_versionr6   )r8   r5   rd   )rG   r&   r   r   pytestraisesr!   r'   r   r%   r   rA   rA   rA   rB   test_writers_unusual   s2    
"
rg   c                	   C   s  t tttf dtdddgdd t tttf dtddg dd t tttf dtd	dgdd
d t tttf dtd	dgdd
d t tttf dtd	dgdd
d t tttf dtd	dgdd
d t tttf dtd	dgddd t tttf dtd	dgddd t tttf dtd	ddgddd t tttf dtd	ddgddd t tttf dtddg dd t	t
$ t tttf dd  W d    n1 s0    Y  t	t
$ t tttf d d  W d    n1 s0    Y  t	t
$ t tttf d!d  W d    n1 s.0    Y  t	t
$ t tttf d!d  W d    n1 sn0    Y  t	t
$ t tttf d"d  W d    n1 s0    Y  d S )#Ns$   HEAD /foo HTTP/1.0
Some: header

HEAD/fooSomeheaderrb   rc   s   HEAD /foo HTTP/1.0

s!   HTTP/1.0 200 OK
Some: header

r6   r7   )r8   r5   rd   r9   s$   HTTP/1.0 200 OK
Foo: a a a a a 

)Fooz	a a a a as   HTTP/1.0 200 OK
Foo:

)rm    s   HTTP/1.0 200 OK
Foo: 	 	 

s   HTTP/1.0 200
Foo: bar

)rm   r`   r>   s#   HTTP/1.1 200 OK
SomeHeader: val

)Z
SomeHeadervalz1.1OKs5   HTTP/1.1 200 OK
SomeHeader1: val1
SomeHeader2: val2

)ZSomeHeader1Zval1)ZSomeHeader2Zval2s7   HTTP/1.1 200 OK
SomeHeader1: val1
SomeHeader2: val2

s   HEAD /foo HTTP/1.1
Host: example.com
Some: multi-line
 header
	nonsense
    	   		I guess
Connection: close
More-nonsense: in the
    last header  

)r-   zexample.com)rk   z"multi-line header nonsense I guessr/   )zMore-nonsensezin the last headerr2   s&   HEAD /foo HTTP/1.1
  folded: line

s#   HEAD /foo HTTP/1.1
foo  : line

s"   HEAD /foo HTTP/1.1
foo	: line

s   HEAD /foo HTTP/1.1
: line

)rW   r   r   r   r   r   r   r   re   rf   r!   rA   rA   rA   rB   test_readers_unusual   s    







	






	
$
$
$
$rr   c                   C   s&   t tg ddtddgks"J d S )N)   aaas   bbbs     ccc   dddrs   s   bbb cccrt   )listr   	bytearrayrA   rA   rA   rB   test__obsolete_line_fold_bytesH  s
    rw   )rK   rI   do_eofr=   c                 c   sB   | |}|d u rq(|V  t |tu r q(q |r>|r4J |  V  d S rE   )rM   r	   Zread_eof)rK   rI   rx   r[   rA   rA   rB   _run_reader_iterU  s    ry   )argsr=   c                  G   s   t t|  }t|S rE   )ru   ry   r*   )rz   eventsrA   rA   rB   _run_readerf  s    r|   F)thunkrH   rD   rx   r=   c           	      C   s   t d t|}t|  |||ks&J t d |  }t }g }tt|D ](}|t||d7 }||||d  7 }qJ|t|||7 }t||ksJ tdd |D }|r|st|d }t|  |d|ksJ d S )NzTest 1zTest 2Fr)   c                 s   s   | ]}t |tu V  qd S rE   )rM   r	   ).0r[   rA   rA   rB   	<genexpr>|  r>   z t_body_reader.<locals>.<genexpr>rS   )printrJ   r|   r   rT   rU   r*   any)	r}   rH   rD   rx   rI   rK   r{   rV   Zis_completerA   rA   rB   t_body_readerk  s     r   c                   C   s4   t dd dt g t dd dtddt g d S )Nc                   S   s   t dS )Nr   r   rA   rA   rA   rB   <lambda>  r>   z*test_ContentLengthReader.<locals>.<lambda>r>   c                   S   s   t dS )N
   r   rA   rA   rA   rB   r     r>   s
   0123456789rH   )r   r	   r   rA   rA   rA   rB   test_ContentLengthReader  s    r   c                   C   sL   t tdt gdd t tdtddgdd t tdtddt gdd d S )Nr>   T)rx   s   asdfr   F)r   r   r	   r   rA   rA   rA   rB   test_Http10Reader  s
    r   c                   C   s  t tdt g t tdtdgdg t tdtddtdgdg t tdtddt g t td	td
dt g tt$ t tdtddg W d    n1 s0    Y  tt t tdd  W d    n1 s0    Y  t tdtddt g t tdtddt g d S )N   0

s   0
Some: header

rj   r5   s3   5
01234
10
0123456789abcdef
0
Some: header

s   012340123456789abcdefr   s%   5
01234
10
0123456789abcdef
0

s   aA
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
0

s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsi   9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
xxxs   xxxs   10 
xxxsG   5; hello=there
xxxxx
0; random="junk"; some=more; canbe=lonnnnngg

s   xxxxxs   5   	 
01234
0

s   01234)r   r   r	   r   re   rf   r!   rA   rA   rA   rB   test_ChunkedReader  sJ    
2*	r   c                  C   s  t d} t| tdddks J t| tdddks8J t| t dksLJ t d} tt  t| tdd W d    n1 s0    Y  t d} t| tdd tt  t| tdd W d    n1 s0    Y  t d} t| tdd tt t| t  W d    n1 s&0    Y  t d} t| tdddk t| tdddk tt" t| tdgd	 W d    n1 s0    Y  d S )
N   s   123r   s   45r>   s   123456s   456ZEtagZasdfr   )r#   rC   r   r	   re   rf   r!   wrA   rA   rB   test_ContentLengthWriter  s(    ..,r   c                  C   s   t  } t| tdddksJ t| tdddks6J t| tdddksNJ t| t dksbJ t| tdd	gd
dks~J d S )Nrs   r   s   3
aaa
s   aaaaaaaaaaaaaaaaaaaas   14
aaaaaaaaaaaaaaaaaaaa
r>   r   r   )abr   s   0
Etag: asdf
a: b

)r"   rC   r   r	   r   rA   rA   rB   test_ChunkedWriter  s    r   c                  C   sr   t  } t| tdddksJ t| t dks2J tt" t| tdgd W d    n1 sd0    Y  d S )Ns   1234r   r>   r   r   )r$   rC   r   r	   re   rf   r!   r   rA   rA   rB   test_Http10Writer  s
    r   c                   C   sB   t t$ ttttf dd  W d    n1 s40    Y  d S )Ns   HTTP/1.0 200 OK xxxx

)re   rf   r!   rW   r   r   r   rA   rA   rA   rB   &test_reject_garbage_after_request_line  s    r   c                   C   sB   t t$ ttttf dd  W d    n1 s40    Y  d S )Ns&   HEAD /foo HTTP/1.1 xxxxxx
Host: a

re   rf   r!   rW   r   r   r   rA   rA   rA   rB   'test_reject_garbage_after_response_line	  s    
r   c                   C   sB   t t$ ttttf dd  W d    n1 s40    Y  d S )Ns%   HEAD /foo HTTP/1.1
Host: foo bar

r   rA   rA   rA   rB   "test_reject_garbage_in_header_line  s    
r   c               	   C   sh   dD ]^} t d}||  |d tt$ tttt	f |d  W d    q1 sX0    Y  qd S )Ns     s   HEAD /s    HTTP/1.1
Host: foobar

)
rv   r?   extendre   rf   r!   rW   r   r   r   )Zbad_charmessagerA   rA   rB   test_reject_non_vchar_in_path  s    

r   c                   C   s&   t tttf dtddddgd d S )Ns\   HEAD /foo HTTP/1.1
Host: foo
Set-Cookie: ___utmvafIumyLc=kUdUpAt; path=/; Max-Age=900

rh   ri   r,   )z
Set-Cookiez-___utmvafIumyLc=kUdUpAt; path=/; Max-Age=900r2   )rW   r   r   r   r   rA   rA   rA   rB   "test_allow_some_garbage_in_cookies%  s    
r   c                   C   s   t ttddgd d S )Nr_   rq   s   Host: example.com
foo: bar

)rG   r&   r   rA   rA   rA   rB   test_host_comes_first7  s
    
r   )F)Ktypingr   r   r   r   re   Z_eventsr   r   r	   r
   r   r   r   _headersr   r   _readersr   r   r   r   r   Z_receivebufferr   _stater   r   r   r   r   r   r   r   r   r    Z_utilr!   _writersr"   r#   r$   r%   r&   r'   r(   helpersr*   rX   rN   rC   rG   rJ   rW   r]   r^   rg   rr   rw   boolry   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   rA   rA   rA   rB   <module>   s~   $	0$	
# !
=			
