o
    IXîh æ  ã                   @   s8  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ	 d dl
Zd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZ zd dlZW n ey{   dZY nw dd	d
ddge	 d¡de dƒddde	 !d¡e	 !d¡e	 !e dddddd¡¡dœgZ"G dd„ dej#ƒZ$G dd„ dej#ƒZ%G dd„ dej#ƒZ&G dd „ d ej#ƒZ'G d!d"„ d"ej#ƒZ(G d#d$„ d$ej#ƒZ)d a* a+a,dRd%d&„Z-dSd'd(„Z.d)d*„ Z/d+d,„ Z0G d-d.„ d.ej#ƒZ1G d/d0„ d0e1ƒZ2G d1d2„ d2e1ƒZ3G d3d4„ d4e1ƒZ4G d5d6„ d6e1ƒZ5G d7d8„ d8e5ƒZ6G d9d:„ d:e5ƒZ7e 8edu d;¡G d<d=„ d=e1ƒƒZ9e 8edu d;¡G d>d?„ d?ej#ƒƒZ:G d@dA„ dAe1ƒZ;G dBdC„ dCej#ƒZ<G dDdE„ dEejj=ƒZ>G dFdG„ dGej#ƒZ?ej@dTdIdJ„ƒZAG dKdL„ dLej#ƒZBG dMdN„ dNej#ƒZCdOdP„ ZDeEdQkrše F¡  dS dS )Ué    N)Úmock)Úsupport)Ú	os_helper)Úsocket_helper)Úthreading_helper)Ú	ALWAYS_EQÚLARGESTÚSMALLESTzfoo@bar.baz.spamgHázns¼@i   é   z.zyx.41ó   my dog has fleasFu	   ä€€æ€€è€€zregular valueú20050210T11:41:23)	éÕ  r
   é
   é   é)   é   r   é   éÿÿÿÿr   r   r   r   r   )ZastringZafloatZanintZ
ashortlongZanotherlistZabase64Zb64bytesZb64bytearrayZbooleanÚunicodeu   ukeyä€€Z	datetime1Z	datetime2Z	datetime3c                   @   s¼   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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-S ).ÚXMLRPCTestCasec                 C   s.   t  tf¡}t  |¡}|  t|d d ¡ d S )Nr   )Ú	xmlrpclibÚdumpsÚalistÚloadsÚassertEqual)ÚselfÚdumpÚload© r   ú:/opt/python-3.10.19/usr/lib/python3.10/test/test_xmlrpc.pyÚtest_dump_load0   s   
zXMLRPCTestCase.test_dump_loadc                 C   s6  t   dddddd¡}|  |t d¡¡ t |f¡}tj|dd	\}}|\}|  ||¡ |  t|ƒt j ¡ |  |¡ tj|d
d	\}}|\}|  ||¡ |  t|ƒtj¡ |  |¡ tj|dd\}}|\}|  ||¡ |  t|ƒt j ¡ |  |¡ tj|d
d\}}|\}|  ||¡ |  t|ƒtj¡ |  |¡ d S )Nr   r
   r   r   r   r   r   T©Úuse_builtin_typesF)Zuse_datetime©	Údatetimer   r   ÚDateTimer   r   ÚassertIsÚtypeÚassertIsNone©r   ZdtÚsÚresultÚmZnewdtr   r   r   Útest_dump_bare_datetime5   s.   


z&XMLRPCTestCase.test_dump_bare_datetimec                 C   s¶   t   dddddd¡}|  |t d¡¡ t |f¡}tj|dd	\}}|\}|  ||¡ |  t|ƒt j ¡ |  |¡ tj|d
d	\}}|\}|  ||¡ |  t|ƒtj¡ |  |¡ d S )Nr   r
   r   r   r   r   z00010210T11:41:23Tr!   Fr#   r)   r   r   r   Útest_datetime_before_1900W   s   
z(XMLRPCTestCase.test_datetime_before_1900c                 C   sR   t  ¡ }t  t j|fdd¡\\}}|  |jt¡ t j|fdd}|  |t¡ d S )NT©Úmethodresponse)r   r%   r   r   ZassertIsInstanceÚvalueÚstr)r   ÚdZnew_dÚdummyr*   r   r   r   Útest_bug_1164912i   s   ÿzXMLRPCTestCase.test_bug_1164912c                 C   sL   G dd„ dt ƒ}|ƒ }d|_d|_t t |f¡¡\\}}|  ||j¡ d S )Nc                   @   s   e Zd ZdS )z-XMLRPCTestCase.test_newstyle_class.<locals>.TN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚTt   s    r9   éd   ZHello)ÚobjectÚxÚyr   r   r   r   Ú__dict__)r   r9   ÚtÚt2r4   r   r   r   Útest_newstyle_classs   s   z"XMLRPCTestCase.test_newstyle_classc                 C   s   |   ttjdd f¡ d S )Nr
   éc   )ÚassertRaisesÚOverflowErrorr   r   ©r   r   r   r   Útest_dump_big_long|   ó   z!XMLRPCTestCase.test_dump_big_longc                 C   s   |   ttjddif¡ d S )N©r   r
   é   r   ©rC   Ú	TypeErrorr   r   rE   r   r   r   Útest_dump_bad_dict   rG   z!XMLRPCTestCase.test_dump_bad_dictc                 C   s4   g d¢}ddd|g}|  |¡ |  ttj|f¡ d S )NrH   rI   é   é   )ÚappendrC   rK   r   r   )r   Úlr?   r   r   r   Útest_dump_recursive_seq‚   s   
z&XMLRPCTestCase.test_dump_recursive_seqc                 C   s2   dddœ}d|dœ}||d< |   ttj|f¡ d S )Nr   )Ú1Ú2rI   )Ú3r3   r?   rJ   ©r   r3   r?   r   r   r   Útest_dump_recursive_dictˆ   s   

z'XMLRPCTestCase.test_dump_recursive_dictc                 C   sÂ   t jdkr|  ttjtdƒf¡ t tjtjf¡ |  ttjtjd f¡ |  ttjtjd f¡ dd„ }t 	¡ }| 
tj|¡ | 
tj|¡ |  t|j
tjd |¡ |  t|j
tjd |¡ d S )Niÿÿÿì        r   c                 S   ó   d S ©Nr   ©r*   r   r   r   Údummy_write™   ó   z5XMLRPCTestCase.test_dump_big_int.<locals>.dummy_write)ÚsysÚmaxsizerC   rD   r   r   ÚintÚMAXINTÚMININTÚ
MarshallerZdump_int©r   r[   r,   r   r   r   Útest_dump_big_intŽ   s*   

ÿ

ÿ

ÿ

ÿ

ÿz XMLRPCTestCase.test_dump_big_intc                 C   s    t  tdƒf¡ t  tt jƒtt jƒf¡ t  tt jd ƒtt jd ƒf¡ dd„ }t  ¡ }| t j|¡ | t j|¡ | t jd |¡ | t jd |¡ d S )NrW   é*   c                 S   rX   rY   r   rZ   r   r   r   r[   «   r\   z4XMLRPCTestCase.test_dump_double.<locals>.dummy_write)r   r   Úfloatr`   ra   rb   Zdump_doublerc   r   r   r   Útest_dump_double¤   s   ÿÿzXMLRPCTestCase.test_dump_doublec                 C   sT   t d g }t d g f}tj|dd}|  |t |¡d d ¡ |  ttj|f¡ d S )NT)Ú
allow_noner   )r   r   r   r   r   rC   rK   )r   r1   Zarg1Ústrgr   r   r   Útest_dump_none´   s   
ÿzXMLRPCTestCase.test_dump_nonec                 C   sü   ddi}t j|fdd}d| }|  t  |¡d d |¡ | dd¡}|  t  |¡d d |¡ t j|fddd	}|  t  |¡d d |¡ | dd¡}|  t  |¡d d |¡ d
}t j|fd|d}|  t  |¡d d |¡ |  t  |¡d |¡ d S )Nu   keyâ‚¬Â¤u
   valueâ‚¬Â¤úiso-8859-15©Úencodingz,<?xml version='1.0' encoding='iso-8859-15'?>r   ÚxmlcharrefreplaceT)rm   r0   u   methodâ‚¬Â¤)rm   Ú
methodnamer   )r   r   r   r   Úencode)r   r1   ri   ro   r   r   r   Útest_dump_encoding¼   s(   ÿ
ÿ
ÿz!XMLRPCTestCase.test_dump_encodingc                 C   s¾   d}|   |t |¡¡ tttjfD ]K}||ƒ}t |f¡}tj|dd\}}|\}|   ||¡ |  t|ƒt¡ |  	|¡ tj|dd\}}|\}|   ||¡ |  t|ƒtj¡ |  	|¡ qd S )Nr   Tr!   F)
r   r   ÚBinaryÚbytesÚ	bytearrayr   r   r&   r'   r(   )r   ÚsampleZtype_r1   r*   r+   r,   Únewvaluer   r   r   Útest_dump_bytesÑ   s    
òzXMLRPCTestCase.test_dump_bytesc                 C   sF   t j}d}|  |t j|¡ d}|  |t j|¡ d}|  |t j|¡ d S )Nz6<params><param><value><spam/></value></param></params>zT<params><param><value><array><value><spam/></value></array></value></param></params>zª<params><param><value><struct><member><name>a</name><value><spam/></value></member><member><name>b</name><value><spam/></value></member></struct></value></param></params>)r   ÚResponseErrorrC   r   )r   rx   Údatar   r   r   Útest_loads_unsupportedä   s   z%XMLRPCTestCase.test_loads_unsupportedc                 K   sR   d| }t j|fi |¤Ž\}}|\}|  ||¡ |  t|ƒt|ƒ¡ |  |¡ d S )Nz1<params><param><value>%s</value></param></params>)r   r   r   r&   r'   r(   )r   r*   r1   Úkwargsr   r+   r,   rv   r   r   r   Úcheck_loadsò   s   zXMLRPCTestCase.check_loadsc              
   C   sÄ   | j }|ddƒ |ddƒ |ddƒ |ddƒ |ddƒ |d	dƒ |d
dƒ |ddƒ |dt d¡ƒ |dddd |dt d¡ƒ |dt dddddd¡dd |dddgƒ |ddddœƒ d S )NÚstringz<string>string</string>u4   <string>ð”˜ð”«ð”¦ð” ð”¬ð”¡ð”¢ string</string>u#   ð”˜ð”«ð”¦ð” ð”¬ð”¡ð”¢ stringz<int>2056183947</int>i‹àŽzz<int>-2056183947</int>iuq…z<i4>2056183947</i4>z<double>46093.78125</double>g    ¹æ@z<boolean>0</boolean>Fz%<base64>AGJ5dGUgc3RyaW5n/w==</base64>s    byte stringÿTr!   z6<dateTime.iso8601>20050210T11:41:23</dateTime.iso8601>r   r   r
   r   r   r   r   zR<array><data><value><int>1</int></value><value><int>2</int></value></data></array>r   z…<struct><member><name>b</name><value><int>2</int></value></member><member><name>a</name><value><int>1</int></value></member></struct>)ÚaÚb)r|   r   rr   r%   r$   ©r   Úcheckr   r   r   Útest_load_standard_typesú   s8   







ÿÿÿþþýz'XMLRPCTestCase.test_load_standard_typesc                 C   s`   | j }|dd ƒ |dd ƒ |ddƒ |ddƒ |ddƒ |d	d
ƒ |ddƒ |dt d¡ƒ d S )Nz<nil/>z	<ex:nil/>z<i1>205</i1>éÍ   z<i2>20561</i2>iQP  z<i8>9876543210</i8>l   ê`	 z-<biginteger>98765432100123456789</biginteger>l   5¤?Ú4*UU z<float>93.78125</float>g     rW@z.<bigdecimal>9876543210.0123456789</bigdecimal>z9876543210.0123456789)r|   ÚdecimalZDecimalr€   r   r   r   Útest_load_extension_types  s   




ÿ
ÿz(XMLRPCTestCase.test_load_extension_typesc              	   C   sÎ   | j }d}t |¡S d|d  }|  t¡ |d|› dd ƒ W d   ƒ n1 s*w   Y  |  t¡ |d|› dd ƒ W d   ƒ n1 sHw   Y  W d   ƒ d S W d   ƒ d S 1 s`w   Y  d S )Niˆ  rR   r   z<int>z</int>z<biginteger>z</biginteger>)r|   r   Zadjust_int_max_str_digitsrC   Ú
ValueError)r   r   Z	maxdigitsr*   r   r   r   Útest_limit_int"  s   ÿÿü"üzXMLRPCTestCase.test_limit_intc                 C   s(   t j ¡ }|  | d¡ddgi f¡ d S )Nzuser@host.tldzhost.tld)ZAuthorizationzBasic dXNlcg==)ÚxmlrpcÚclientÚ	Transportr   Zget_host_info)r   Ztranspr   r   r   Útest_get_host_info,  s   
ÿÿz!XMLRPCTestCase.test_get_host_infoc                 C   s|   zdd l }W n ty   d}Y nw d}ztj d¡ ¡  W d S  ty/   |  |d¡ Y d S  ty=   |  	|¡ Y d S w )Nr   FTzhttps://localhost:9999z&xmlrpc client's error with SSL support)
ÚsslÚImportErrorrˆ   r‰   ÚServerProxyZbad_functionÚNotImplementedErrorÚassertFalseÚOSErrorÚ
assertTrue)r   rŒ   Zhas_sslr   r   r   Útest_ssl_presence3  s   ÿÿz XMLRPCTestCase.test_ssl_presencec                    s¼   G dd„ dt jjƒ}‡ fdd„}t j tjdf|¡‰ |  ˆ j¡ tj	|d}| 
¡  |  |j¡ djˆ jŽ }t |¡}|  | ¡ d¡ |  | ¡ d¡ W d   ƒ d S 1 sWw   Y  d S )	Nc                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )z@XMLRPCTestCase.test_keepalive_disconnect.<locals>.RequestHandlerúHTTP/1.1Fc                 S   s„   t | j d¡ƒ}| j |¡ | jrd| _d S tjddd}| 	¡ }|  
tjj¡ |  dt|ƒ¡ |  ¡  | j |¡ d| _d| _d S )NúContent-LengthT)rN   r/   F)r_   ÚheadersÚgetZrfileÚreadÚhandledZclose_connectionr   r   rp   Zsend_responseÚhttpZ
HTTPStatusZOKZsend_headerÚlenZend_headersZwfileÚwrite)r   ÚlengthÚresponser   r   r   Údo_POSTF  s   
zHXMLRPCTestCase.test_keepalive_disconnect.<locals>.RequestHandler.do_POSTc                 W   rX   rY   r   )r   ÚformatÚargsr   r   r   Úlog_messageU  ó   zLXMLRPCTestCase.test_keepalive_disconnect.<locals>.RequestHandler.log_messageN)r6   r7   r8   Úprotocol_versionr™   rŸ   r¢   r   r   r   r   ÚRequestHandlerB  s
    r¥   c                      s$   ˆ j  tdƒ¡ ˆ  ¡  ˆ  ¡  d S ©Nr   )ÚsocketÚ
settimeoutrf   Úhandle_requestr   ©Úserverr   r   Ú
run_serverY  s   z<XMLRPCTestCase.test_keepalive_disconnect.<locals>.run_serverr   )Útargetzhttp://{}:{}/rN   )rš   r«   ZBaseHTTPRequestHandlerZ
HTTPServerr   ZHOSTÚ
addCleanupÚserver_closeÚ	threadingÚThreadÚstartÚjoinr    Zserver_addressr   rŽ   r   Úmethod)r   r¥   r¬   ÚthreadÚurlÚpr   rª   r   Útest_keepalive_disconnectA  s   "þz(XMLRPCTestCase.test_keepalive_disconnectN)r6   r7   r8   r    r-   r.   r5   rA   rF   rL   rQ   rV   rd   rg   rj   rq   rw   rz   r|   r‚   r…   r‡   r‹   r“   r¸   r   r   r   r   r   .   s.    "
	
r   c                   @   sL   e Zd ZG dd„ deƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )ÚSimpleXMLRPCDispatcherTestCasec                   @   s   e Zd ZdZdS )z*SimpleXMLRPCDispatcherTestCase.DispatchExczSRaised inside the dispatched functions when checking for
        chained exceptionsN)r6   r7   r8   Ú__doc__r   r   r   r   ÚDispatchExcj  ó    r»   c                    sŽ   d}‡ fdd„}t j ¡ }| |¡ ˆ  ˆ j¡}| d|¡ W d  ƒ n1 s)w   Y  ˆ  |jj	|f¡ ˆ  
|jj¡ ˆ  
|jj¡ dS )z$Calls explicitly registered functionrH   c                     s
   ˆ   | ¡‚rY   )r»   )ÚparamsrE   r   r   Údispatched_funcu  ó   
zQSimpleXMLRPCDispatcherTestCase.test_call_registered_func.<locals>.dispatched_funcr¾   N)rˆ   r«   ÚSimpleXMLRPCDispatcherÚregister_functionrC   r»   Ú	_dispatchr   Ú	exceptionr¡   r(   Ú	__cause__Ú__context__)r   Ú
exp_paramsr¾   Ú
dispatcherÚexc_ctxr   rE   r   Útest_call_registered_funcn  s   

ÿz8SimpleXMLRPCDispatcherTestCase.test_call_registered_funcc                 C   s’   d}G dd„ dƒ}t j ¡ }| |ƒ ¡ |  | j¡}| d|¡ W d  ƒ n1 s+w   Y  |  |jj	|f¡ |  
|jj¡ |  
|jj¡ dS )z3Calls a registered instance attribute as a functionrH   c                   @   ó   e Zd Zdd„ ZdS )zOSimpleXMLRPCDispatcherTestCase.test_call_instance_func.<locals>.DispatchedClassc                 W   s
   t  |¡‚rY   ©r¹   r»   )r   r½   r   r   r   r¾   ˆ  r¿   z_SimpleXMLRPCDispatcherTestCase.test_call_instance_func.<locals>.DispatchedClass.dispatched_funcN)r6   r7   r8   r¾   r   r   r   r   ÚDispatchedClass‡  ó    rÌ   r¾   N©rˆ   r«   rÀ   Úregister_instancerC   r»   rÂ   r   rÃ   r¡   r(   rÄ   rÅ   )r   rÆ   rÌ   rÇ   rÈ   r   r   r   Útest_call_instance_func€  s   
ÿz6SimpleXMLRPCDispatcherTestCase.test_call_instance_funcc                 C   s˜   d}d}G dd„ dƒ}t j ¡ }| |ƒ ¡ |  | j¡}| ||¡ W d  ƒ n1 s-w   Y  |  |jj	||f¡ |  
|jj¡ |  
|jj¡ dS )z4Calls the registered instance's `_dispatch` functionr´   rH   c                   @   rÊ   )zLSimpleXMLRPCDispatcherTestCase.test_call_dispatch_func.<locals>.TestInstancec                 S   s   t  ||¡‚rY   rË   )r   r´   r½   r   r   r   rÂ   œ  s   ÿzVSimpleXMLRPCDispatcherTestCase.test_call_dispatch_func.<locals>.TestInstance._dispatchN)r6   r7   r8   rÂ   r   r   r   r   ÚTestInstance›  rÍ   rÑ   NrÎ   )r   Z
exp_methodrÆ   rÑ   rÇ   rÈ   r   r   r   Útest_call_dispatch_func“  s   
ÿz6SimpleXMLRPCDispatcherTestCase.test_call_dispatch_funcc                 C   sV   t j ¡ }|jddd |  td¡ | dd¡ W d  ƒ dS 1 s$w   Y  dS )z2Calls explicitly registered function which is NoneNr´   ©Úname©Zparam)rˆ   r«   rÀ   rÁ   ÚassertRaisesRegexÚ	ExceptionrÂ   ©r   rÇ   r   r   r   Útest_registered_func_is_none¨  s
   
"ÿz;SimpleXMLRPCDispatcherTestCase.test_registered_func_is_nonec                 C   sT   t j ¡ }| tƒ ¡ |  td¡ | dd¡ W d  ƒ dS 1 s#w   Y  dS )z>Attempts to call nonexistent function on a registered instancer´   rÕ   N)rˆ   r«   rÀ   rÏ   r;   rÖ   r×   rÂ   rØ   r   r   r   Útest_instance_has_no_func°  s
   
"ÿz8SimpleXMLRPCDispatcherTestCase.test_instance_has_no_funcc                 C   sH   t j ¡ }|  td¡ | dd¡ W d  ƒ dS 1 sw   Y  dS )z2Calls a function that the dispatcher cannot locater´   rÕ   N)rˆ   r«   rÀ   rÖ   r×   rÂ   rØ   r   r   r   Útest_cannot_locate_func¸  s   
"ÿz6SimpleXMLRPCDispatcherTestCase.test_cannot_locate_funcN)r6   r7   r8   r×   r»   rÉ   rÐ   rÒ   rÙ   rÚ   rÛ   r   r   r   r   r¹   i  s    r¹   c                   @   rÊ   )ÚHelperTestCasec                 C   s:   |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ d S )Nza&bza&amp;bza<bza&lt;bza>bza&gt;b)r   r   ÚescaperE   r   r   r   Útest_escapeÁ  s   zHelperTestCase.test_escapeN)r6   r7   r8   rÞ   r   r   r   r   rÜ   À  rÍ   rÜ   c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚFaultTestCasec                 C   s4   t  dd¡}|  t|ƒd¡ |  t|ƒt|ƒ¡ d S )Nre   ú
Test Faultz<Fault 42: 'Test Fault'>)r   ÚFaultr   Úreprr2   )r   Úfr   r   r   Ú	test_reprÇ  s   zFaultTestCase.test_reprc                 C   sj   t  dd¡}t  |f¡}t  |¡\\}}|  |dddœ¡ |  |d ¡ t  ¡  |¡}|  t jt j|¡ d S )Nre   rá   )Ú	faultCodeÚfaultString)r   râ   r   r   r   rb   rC   )r   rä   r*   Znewfr,   r   r   r   Útest_dump_faultÌ  s   zFaultTestCase.test_dump_faultc                 C   s,   |   ttjjtd¡ |  tj td¡¡ d S ©NZ__addÚtitle)rC   ÚAttributeErrorrˆ   r«   Úresolve_dotted_attributer2   r’   rE   r   r   r   Útest_dotted_attributeÖ  s   
ÿz#FaultTestCase.test_dotted_attributeN)r6   r7   r8   rå   rè   rí   r   r   r   r   rà   Æ  s    
rà   c                   @   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 )ÚDateTimeTestCasec                 C   sl   t  d¡'}t g d¢¡}||_t ¡ }t ¡ }|  t	|ƒt 
d|¡¡ W d   ƒ d S 1 s/w   Y  d S )Nztime.localtime)	iÝ  é   é   r   é   é1   r   éÄ   r   ú%Y%m%dT%H:%M:%S)r   ZpatchÚtimeÚstruct_timeZreturn_valueÚ	localtimer   r%   r   r2   Ústrftime)r   Zlocaltime_mockZtime_structr÷   r?   r   r   r   Útest_defaultÞ  s   ÿ

ÿ"úzDateTimeTestCase.test_defaultc              	   C   s0   d}t  |¡}|  t|ƒt dt |¡¡¡ d S ©Ngl]‚Þ®šÑArô   )r   r%   r   r2   rõ   rø   r÷   rU   r   r   r   Ú	test_timeè  s
   

ÿzDateTimeTestCase.test_timec                 C   s"   d}t  |¡}|  t|ƒd¡ d S )N)	é×  é   é	   r   é&   é2   rN   é    r   z20070609T10:38:50)r   r%   r   r2   rU   r   r   r   Útest_time_tupleî  s   
z DateTimeTestCase.test_time_tuplec                 C   s0   t  d¡}t |¡}|  t|ƒt  d|¡¡ d S rú   )rõ   r÷   r   r%   r   r2   rø   rU   r   r   r   Útest_time_structó  s   

z!DateTimeTestCase.test_time_structc                 C   s2   t   dddddd¡}t |¡}|  t|ƒd¡ d S )Nrü   r   r
   rI   rM   rN   z20070102T03:04:05)r$   r   r%   r   r2   rU   r   r   r   Útest_datetime_datetimeø  s   
z'DateTimeTestCase.test_datetime_datetimec                 C   s>   t   dddddd¡}t |¡}dt|ƒ }|  t|ƒ|¡ d S )Nrü   r   r
   rI   rM   rN   z%<DateTime '20070102T03:04:05' at %#x>)r$   r   r%   Úidr   rã   )r   r3   r?   Úvalr   r   r   rå   ý  s   
zDateTimeTestCase.test_reprc              
   C   sV   d}t  ¡ }| |¡ t  t dddddd¡¡}|  ||¡ t  |¡}|  ||¡ d S )Nz 20070908T07:11:13  rü   rþ   é   rï   r   é   )r   r%   Údecoder$   r   Z	_datetime)r   r3   Út1Ztrefr@   r   r   r   Útest_decode  s   

zDateTimeTestCase.test_decodec                 C   s^  t j  ¡ }t | ¡ ¡}|  ||k¡ |  ||k¡ |t jdd }|  ||k¡ |  ||k ¡ | d¡}|  ||k¡ |  ||k¡ t | ¡ ¡}|  ||k¡ |  ||k ¡ | d¡}| ¡ }|  	|dk¡ |  ||k¡ |  	|t
|ƒk¡ |  ||k¡ |  t¡ |tdƒk  W d   ƒ n1 s•w   Y  |  t¡ ||k W d   ƒ n1 s®w   Y  |  t¡ |t
|ƒk W d   ƒ n1 sÉw   Y  |  t¡ ||k W d   ƒ n1 sâw   Y  |  |tk¡ |  	|tk¡ |  |tk ¡ |  	|tk¡ |  |tk¡ |  	|tk¡ |  	|tk ¡ |  |tk¡ |  	|tk¡ |  |tk¡ d S )NrM   )Zsecondsrô   Úasciii²  )r$   Únowr   r%   Z	timetupler’   Z	timedeltarø   rp   r   rt   rC   rK   rf   r   r   r	   )r   r  ZdtimeZthenZdstrZ
dtime_thenZdbytesZdtupler   r   r   Útest_comparison  sR   


ÿ
ÿÿ
ÿz DateTimeTestCase.test_comparisonN)r6   r7   r8   rù   rû   r  r  r  rå   r  r  r   r   r   r   rî   Ý  s    

rî   c                   @   rß   )ÚBinaryTestCasec                 C   s   t  ¡ }|  t|ƒd¡ d S )NÚ ©r   rr   r   r2   )r   r?   r   r   r   rù   C  s   zBinaryTestCase.test_defaultc                 C   s(   d}t  |¡}|  t|ƒt|dƒ¡ d S ©Ns   abc123ÿþzlatin-1r  rU   r   r   r   Útest_stringG  s   
zBinaryTestCase.test_stringc                 C   sZ   d}t  |¡}t ¡ }| |¡ |  t|ƒt|dƒ¡ t |¡}|  t|ƒt|dƒ¡ d S r  )Úbase64Zencodebytesr   rr   r	  r   r2   Z_binary)r   r3   Úder
  r@   r   r   r   r  L  s   


zBinaryTestCase.test_decodeN)r6   r7   r8   rù   r  r  r   r   r   r   r  <  s    r  c           
      C   s\  G dd„ dƒ}G dd„ dt jjƒ}|st jj}|d||ddd}zz[| ¡  |j ¡ \aadttf a	| 
¡  | ¡  | ¡  | t¡ | d	d
„ d¡ |jdd„ ƒ}|jdddd„ ƒ}|ƒ }	|j|	dd |  ¡  |dkr{| ¡  |d8 }|dksoW n	 ty…   Y nw W |j ¡  d a|  ¡  d S W |j ¡  d a|  ¡  d S |j ¡  d a|  ¡  w )Nc                   @   s*   e Zd Zdd„ Zdd„ ZG dd„ dƒZdS )z&http_server.<locals>.TestInstanceClassc                 S   ó   || S rY   r   ©r   r<   r=   r   r   r   Údiv^  ó   z*http_server.<locals>.TestInstanceClass.divc                 S   ó   |dkrdS d S ©Nr  úThis is the div functionr   ©r   rÔ   r   r   r   Ú_methodHelpa  ó   ÿz2http_server.<locals>.TestInstanceClass._methodHelpc                   @   s   e Zd Zedd„ ƒZdS )z.http_server.<locals>.TestInstanceClass.Fixturec                   S   ó   dS )NÚ42r   r   r   r   r   ÚgetDataf  r£   z6http_server.<locals>.TestInstanceClass.Fixture.getDataN)r6   r7   r8   Ústaticmethodr"  r   r   r   r   ÚFixturee  s    r$  N)r6   r7   r8   r  r  r$  r   r   r   r   ÚTestInstanceClass]  s    r%  c                   @   rÊ   )z#http_server.<locals>.MyXMLRPCServerc                 S   ó    | j  ¡ \}}| d¡ ||fS ©NT©r§   ÚacceptÚsetblocking©r   r*   Úportr   r   r   Úget_requestk  ó   
z/http_server.<locals>.MyXMLRPCServer.get_requestN©r6   r7   r8   r-  r   r   r   r   ÚMyXMLRPCServerj  rÍ   r0  ©Ú	localhostr   F)rm   ÚlogRequestsÚbind_and_activateúhttp://%s:%dc                 S   ó   | S rY   r   )r<   r   r   r   Ú<lambda>„  ó    zhttp_server.<locals>.<lambda>õ   tÃªÅ¡tc                   S   r   ©úThis is my functionTr   r   r   r   r   Úmy_function…  s   z http_server.<locals>.my_functionÚaddrÓ   c                 S   ó   | | S rY   r   ©r<   r=   r   r   r   Ú_‰  s   zhttp_server.<locals>._T)Zallow_dotted_namesr   r   )rˆ   r«   ÚSimpleXMLRPCServerÚSimpleXMLRPCRequestHandlerÚserver_bindr§   ÚgetsocknameÚADDRÚPORTÚURLÚserver_activateÚ register_introspection_functionsÚregister_multicall_functionsrÁ   ÚpowrÏ   Úsetr©   ÚTimeoutErrorÚclose)
ÚevtÚnumrequestsÚrequestHandlerrm   r%  r0  Úservr<  r@  ZtestInstancer   r   r   Úhttp_server\  sV   þ



þ€ÿ€
ü

þ
rS  c                 C   s°  G dd„ dƒ}dd„ }G dd„ dt jjƒ}|st jj}G dd„ d|ƒ}G d	d
„ d
ƒ}|d|ddd}|j d¡ | ¡  zzi|j ¡ \aa	dtt	f a
| ¡  g d¢}	|	D ]}
| |
t j ¡ ¡}| ¡  | ¡  | |
fdd„d¡ qU| |	d ¡ t¡ | |	d ¡ dd„ d¡ | d|ƒ ¡ |  ¡  |dkr¥| ¡  |d8 }|dks™W n	 ty¯   Y nw W |j ¡  d a	|  ¡  d S W |j ¡  d a	|  ¡  d S |j ¡  d a	|  ¡  w )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z,http_multi_server.<locals>.TestInstanceClassc                 S   r  rY   r   r  r   r   r   r  ž  r  z0http_multi_server.<locals>.TestInstanceClass.divc                 S   r  r  r   r  r   r   r   r  ¡  r  z8http_multi_server.<locals>.TestInstanceClass._methodHelpN)r6   r7   r8   r  r  r   r   r   r   r%    s    r%  c                   S   r   r:  r   r   r   r   r   r<  ¥  r£   z&http_multi_server.<locals>.my_functionc                   @   rÊ   )z)http_multi_server.<locals>.MyXMLRPCServerc                 S   r&  r'  r(  r+  r   r   r   r-  ª  r.  z5http_multi_server.<locals>.MyXMLRPCServer.get_requestNr/  r   r   r   r   r0  ©  rÍ   r0  c                   @   s   e Zd Zg ZdS )z+http_multi_server.<locals>.MyRequestHandlerN)r6   r7   r8   Z	rpc_pathsr   r   r   r   ÚMyRequestHandler³  r¼   rT  c                   @   s   e Zd Zddd„ZdS )z+http_multi_server.<locals>.BrokenDispatcherNc                 S   s   t dƒ‚)Nzbroken dispatcher)ÚRuntimeError)r   ry   Zdispatch_methodÚpathr   r   r   Ú_marshaled_dispatch·  r  z?http_multi_server.<locals>.BrokenDispatcher._marshaled_dispatch©NN)r6   r7   r8   rW  r   r   r   r   ÚBrokenDispatcher¶  s    rY  r1  F)r3  r4  rI   r5  )
ú/fooú/foo/barú/foo?k=vú	/foo#fragú/foo?k=v#fragr  ú/ú/RPC2ú?k=vú#fragc                 S   r6  rY   r   )r·   r   r   r   r7  Ð  r8  z#http_multi_server.<locals>.<lambda>Útestr   r   c                 S   r>  rY   r   r?  r   r   r   r7  Ò  s    r=  ú
/is/broken)rˆ   r«   ZMultiPathXMLRPCServerrB  r§   r¨   rC  rD  rE  rF  rG  rH  Zadd_dispatcherrÀ   rI  rJ  rÁ   Zget_dispatcherrK  rL  r©   rM  rN  )rO  rP  rQ  r%  r<  r0  rT  rY  rR  ÚpathsrV  r3   r   r   r   Úhttp_multi_serverœ  sZ   ÿþ€ÿ€
ü

þ
rf  c                 C   sb   z| j dks| jdu rW dS | j d¡}W n ty"   t| ƒ}Y nw |r-d| ¡ v r/dS dS dS )zÇReturns True if the given ProtocolError is the product of a server-side
       exception caused by the 'temporarily unavailable' response sometimes
       given by operations on non-blocking sockets.r   NTúX-exceptionztemporarily unavailable)Zerrcoder–   r—   rë   r2   Úlower)ÚeZexc_messr   r   r   Úis_unavailable_exceptionä  s   þÿrj  c                    s   | sdd„ S ‡ fdd„}|S )Nc                 S   r6  rY   r   )Úfuncr   r   r   r7  ù  r8  z)make_request_and_skipIf.<locals>.<lambda>c                    s   ‡ fdd„}|S )Nc              
      sR   z	t  t¡ ¡  W n t jtfy# } zt|ƒs‚ W Y d }~nd }~ww t ˆ ¡‚rY   )	r   rŽ   rG  r<  ÚProtocolErrorr‘   rj  ÚunittestZSkipTest)r   ri  ©Úreasonr   r   Úmake_request_and_skipû  s   ÿ€ÿ
zImake_request_and_skipIf.<locals>.decorator.<locals>.make_request_and_skipr   )rk  rp  rn  r   r   Ú	decoratorú  s   z*make_request_and_skipIf.<locals>.decoratorr   )Z	conditionro  rq  r   rn  r   Úmake_request_and_skipIfõ  s   	rr  c                   @   s,   e Zd ZdZdZeeƒZdd„ Zdd„ Z	dS )ÚBaseServerTestCaseNr   c                 C   s`   dt jj_t ¡ | _| j| j| jf}tj	| j
|d}| ¡  |  |j¡ | j ¡  | j ¡  d S )NT©r­   r¡   )rˆ   r«   rA  Ú_send_traceback_headerr°   ÚEventrO  Úrequest_countrQ  r±   Ú
threadFuncr²   r®   r³   ÚwaitÚclear©r   Z	serv_argsrµ   r   r   r   ÚsetUp
  s   


zBaseServerTestCase.setUpc                 C   s   | j  ¡  dtjj_d S ©NF)rO  ry  rˆ   r«   rA  ru  rE   r   r   r   ÚtearDown  s   
zBaseServerTestCase.tearDown)
r6   r7   r8   rQ  rw  r#  rS  rx  r|  r~  r   r   r   r   rs    s    rs  c                   @   s¦   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	e
ejjdkdƒ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%S )&ÚSimpleServerTestCasec                 C   s‚   zt  t¡}|  | dd¡d¡ W d S  t jtfy@ } zt|ƒs5|  d|t	|ddƒf ¡ W Y d }~d S W Y d }~d S d }~ww )Nrý   r  é ¡ ú%s
%sr–   r  )
r   rŽ   rG  r   rK  rl  r‘   rj  ÚfailÚgetattr©r   r·   ri  r   r   r   Útest_simple1!  s   
(þ€þz!SimpleServerTestCase.test_simple1c                 C   sŽ   d}d}zt  t¡}|  | ||¡|| ¡ W d S  t jtfyF } zt|ƒs;|  d|t	|ddƒf ¡ W Y d }~d S W Y d }~d S d }~ww )Nu   PÅ·tu   hÆ¡nr  r–   r  )
r   rŽ   rG  r   r=  rl  r‘   rj  r‚  rƒ  ©r   Zstart_stringZ
end_stringr·   ri  r   r   r   Útest_nonascii+  s   

ÿ(þ€þz"SimpleServerTestCase.test_nonasciic                 C   s”   d}d}zt jtdd}|  | ||¡|| ¡ W d S  t jtjfyI } zt|ƒs>|  	d|t
|ddƒf ¡ W Y d }~d S W Y d }~d S d }~ww )Nõ   â‚¬õ   Â¤rk   rl   r  r–   r  ©r   rŽ   rG  r   r=  rl  r§   Úerrorrj  r‚  rƒ  r†  r   r   r   Útest_client_encoding8  s   
ÿ(þ€þz)SimpleServerTestCase.test_client_encodingc                 C   s†   zt jtdd}|  | d¡d¡ W d S  t jtjfyB } zt|ƒs7|  	d|t
|ddƒf ¡ W Y d }~d S W Y d }~d S d }~ww )Nr  rl   re   r  r–   r  )r   rŽ   rG  r   t   tÃªÅ¡trl  r§   r‹  rj  r‚  rƒ  r„  r   r   r   Útest_nonascii_methodnameF  s   (þ€þz-SimpleServerTestCase.test_nonascii_methodnamec                 C   sh   t  tj tt¡¡}| dd¡ | ¡ }W d   ƒ n1 sw   Y  |  	|j
d¡ |  	|jd¡ d S )NZPOSTz/this-is-not-validi”  z	Not Found)Ú
contextlibÚclosingrš   r‰   ZHTTPConnectionrE  rF  ZrequestZgetresponser   Ústatusro  )r   Úconnrž   r   r   r   Útest_404P  s   
þzSimpleServerTestCase.test_404c                 C   s”   t g d¢ƒ}zt t¡}|j ¡ }|  t |ƒ|¡ W d S  tjtfyI } zt	|ƒs>|  
d|t|ddƒf ¡ W Y d }~d S W Y d }~d S d }~ww )N)
rK  r  r<  r=  r9  zsystem.listMethodszsystem.methodHelpzsystem.methodSignaturezsystem.multicallr$  r  r–   r  )rL  r   rŽ   rG  ÚsystemZlistMethodsr   rl  r‘   rj  r‚  rƒ  )r   Zexpected_methodsr·   Úmethri  r   r   r   Útest_introspection1Z  s   

(þ€þz(SimpleServerTestCase.test_introspection1c                 C   ó†   zt  t¡}|j d¡}|  |d¡ W d S  t jtfyB } zt|ƒs7|  	d|t
|ddƒf ¡ W Y d }~d S W Y d }~d S d }~ww )Nr  r  r  r–   r  ©r   rŽ   rG  r“  Z
methodHelpr   rl  r‘   rj  r‚  rƒ  )r   r·   Zdivhelpri  r   r   r   Útest_introspection2j  s   
(þ€þz(SimpleServerTestCase.test_introspection2r
   z)Docstrings are omitted with -O2 and abovec                 C   r–  )Nr<  r;  r  r–   r  r—  )r   r·   Z
myfunctionri  r   r   r   Útest_introspection3v  s   
(þ€þz(SimpleServerTestCase.test_introspection3c                 C   r–  )Nr  zsignatures not supportedr  r–   r  )r   rŽ   rG  r“  ZmethodSignaturer   rl  r‘   rj  r‚  rƒ  )r   r·   Zdivsigri  r   r   r   Útest_introspection4„  s   
(þ€þz(SimpleServerTestCase.test_introspection4c                 C   sÌ   z7t  t¡}t  |¡}| dd¡ | dd¡ | dd¡ |ƒ \}}}|  |d¡ |  |d¡ |  |d¡ W d S  t jt	fye } zt
|ƒsZ|  d	|t|d
dƒf ¡ W Y d }~d S W Y d }~d S d }~ww )Nr
   rI   rý   r  é   re   rN   r€  r  r–   r  )r   rŽ   rG  Ú	MultiCallr=  rK  r  r   rl  r‘   rj  r‚  rƒ  )r   r·   Ú	multicallÚ
add_resultZ
pow_resultZ
div_resultri  r   r   r   Útest_multicall‘  s    

(þ€þz#SimpleServerTestCase.test_multicallc                 C   s²   z*t  t¡}t  |¡}| ¡  |ƒ }|  |jd d d¡ |  |jd d d¡ W d S  t jtfyX } zt	|ƒsM|  
d|t|ddƒf ¡ W Y d }~d S W Y d }~d S d }~ww )	Nr   ræ   r   rç   z@<class 'Exception'>:method "this_is_not_exists" is not supportedr  r–   r  )r   rŽ   rG  rœ  Zthis_is_not_existsr   Úresultsrl  r‘   rj  r‚  rƒ  )r   r·   r  r+   ri  r   r   r   Útest_non_existing_multicall¢  s   


ÿ(þ€þz0SimpleServerTestCase.test_non_existing_multicallc                 C   s4   |   ttjjtd¡ |  tj td¡¡ |  ¡  d S ré   )rC   rë   rˆ   r«   rì   r2   r’   r…  rE   r   r   r   rí   ·  s
   
ÿz*SimpleServerTestCase.test_dotted_attributec                 C   s,   t  dttf ¡}|j ¡ }|  |d¡ d S )Núhttp://%s:%d/RPC2r!  )r   rŽ   rE  rF  r$  r"  r   )r   r«   ry   r   r   r   Útest_allow_dotted_names_trueÁ  s   
z1SimpleServerTestCase.test_allow_dotted_names_truec                 C   s*   t  dttf ¡}|  | dd¡d¡ d S )Nr¢  r~   õ   Ã©u   aÃ©)r   rŽ   rE  rF  r   r=  ©r   r«   r   r   r   Útest_unicode_hostÇ  s   z&SimpleServerTestCase.test_unicode_hostc                 C   sX   t  t ttf¡¡}| dt› dt› d d¡¡ W d   ƒ d S 1 s%w   Y  d S )Nz@POST /RPC2 HTTP/1.0
Content-Length: 100

bye HTTP/1.1
Host: ú:z2
Accept-Encoding: identity
Content-Length: 0

r  )rŽ  r  r§   Úcreate_connectionrE  rF  Úsendrp   )r   r‘  r   r   r   Útest_partial_postË  s   ýýû"ÿz&SimpleServerTestCase.test_partial_postc                 C   s^   t  t¡}| dd¡ |  |dƒjd¡ W d   ƒ n1 sw   Y  |  |dƒjd¡ d S )Nr
   rI   Ú	transportrX  )r   rŽ   rG  r=  ZassertNotEqualÚ_connectionr   r¥  r   r   r   Útest_context_managerÕ  s   ÿþÿz)SimpleServerTestCase.test_context_managerc                 C   sf   zt  t¡}| dd¡ W d   ƒ n1 sw   Y  W n
 t jy'   Y nw |  |dƒjd¡ d S )Nr
   r~   r«  rX  )r   rŽ   rG  r=  râ   r   r¬  r¥  r   r   r   Ú!test_context_manager_method_errorÝ  s   ÿ€ÿÿz6SimpleServerTestCase.test_context_manager_method_errorN)r6   r7   r8   r…  r‡  rŒ  r  r’  r•  r˜  rr  r]   ÚflagsÚoptimizer™  rš  rŸ  r¡  rí   r£  r¦  rª  r­  r®  r   r   r   r   r     s*    


ÿ


r  c                   @   s"   e Zd Zeddd„ƒZdd„ ZdS )ÚSimpleServerEncodingTestCaseNc                 C   s   t | ||dƒ d S )Nrk   )rS  )rO  rP  rQ  rm   r   r   r   rx  è  s   z'SimpleServerEncodingTestCase.threadFuncc                 C   s   d}d}zt  t¡}|  | ||¡|| ¡ W d S  t jtjfyG } zt|ƒs<|  	d|t
|ddƒf ¡ W Y d }~d S W Y d }~d S d }~ww )Nrˆ  r‰  r  r–   r  rŠ  r†  r   r   r   Útest_server_encodingì  s   

ÿ(þ€þz1SimpleServerEncodingTestCase.test_server_encodingrX  )r6   r7   r8   r#  rx  r²  r   r   r   r   r±  ç  s    r±  c                   @   sp   e Zd Ze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d„ Zdd„ Zdd„ ZdS )ÚMultiPathServerTestCaser
   c                 C   ó:   t  td ¡}|  | dd¡d¡ |  t j|jdd¡ d S )NrZ  rý   r  r€  )r   rŽ   rG  r   rK  rC   râ   r=  ©r   r·   r   r   r   Ú
test_path1þ  ó   z"MultiPathServerTestCase.test_path1c                 C   r´  )Nr[  rý   r  é   )r   rŽ   rG  r   r=  rC   râ   rK  rµ  r   r   r   Ú
test_path2  r·  z"MultiPathServerTestCase.test_path2c                 C   ó&   t  td ¡}|  t j|jdd¡ d S )Nrd  rý   r  ©r   rŽ   rG  rC   râ   r=  rµ  r   r   r   Ú
test_path3  ó   z"MultiPathServerTestCase.test_path3c                 C   rº  )Nz/invalidrý   r  r»  rµ  r   r   r   Útest_invalid_path  r½  z)MultiPathServerTestCase.test_invalid_pathc                 C   ó"   t  td ¡}|  | ¡ d¡ d S )Nr^  ©r   rŽ   rG  r   rc  rµ  r   r   r   Útest_path_query_fragment  ó   z0MultiPathServerTestCase.test_path_query_fragmentc                 C   r¿  )Nr]  rÀ  rµ  r   r   r   Útest_path_fragment  rÂ  z*MultiPathServerTestCase.test_path_fragmentc                 C   r¿  )Nr\  rÀ  rµ  r   r   r   Útest_path_query  rÂ  z'MultiPathServerTestCase.test_path_queryc                 C   s   t  t¡}|  | ¡ d¡ d S )Nr`  rÀ  rµ  r   r   r   Útest_empty_path  s   
z'MultiPathServerTestCase.test_empty_pathc                 C   r¿  )Nr_  rÀ  rµ  r   r   r   Útest_root_path   rÂ  z&MultiPathServerTestCase.test_root_pathc                 C   r¿  )Nra  rÀ  rµ  r   r   r   Útest_empty_path_query$  rÂ  z-MultiPathServerTestCase.test_empty_path_queryc                 C   r¿  )Nrb  rÀ  rµ  r   r   r   Útest_empty_path_fragment(  rÂ  z0MultiPathServerTestCase.test_empty_path_fragmentN)r6   r7   r8   r#  rf  rx  rw  r¶  r¹  r¼  r¾  rÁ  rÃ  rÄ  rÅ  rÆ  rÇ  rÈ  r   r   r   r   r³  û  s    r³  c                   @   s,   e Zd ZG dd„ dejjƒZeZdd„ ZdS )ÚBaseKeepaliveServerTestCasec                   @   s,   e Zd ZejjZdZg Zdd„ Z	dd„ Z
dS )z*BaseKeepaliveServerTestCase.RequestHandlerr”   c                 C   s(   | j  g ¡ t| j ƒd | _| j | ¡S r¦   )Ú
myRequestsrO   r›   ÚreqidxÚparentClassÚhandlerE   r   r   r   rÍ  6  s   z1BaseKeepaliveServerTestCase.RequestHandler.handlec                 C   s$   | j  | ¡}| j| j  | j¡ |S rY   )rÌ  Úhandle_one_requestrÊ  rË  rO   Zraw_requestline)r   r+   r   r   r   rÎ  :  s   z=BaseKeepaliveServerTestCase.RequestHandler.handle_one_requestN)r6   r7   r8   rˆ   r«   rB  rÌ  r¤   rÊ  rÍ  rÎ  r   r   r   r   r¥   2  s    r¥   c                 C   s   g | j _t | ¡S rY   )r¥   rÊ  rs  r|  rE   r   r   r   r|  @  s   
z!BaseKeepaliveServerTestCase.setUpN)	r6   r7   r8   rˆ   r«   rB  r¥   rQ  r|  r   r   r   r   rÉ  /  s    rÉ  c                   @   rÊ   )ÚKeepaliveServerTestCase1c                 C   s€   t  t¡}|  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ |dƒƒ  |  t| jjƒd¡ |  t| jjd ƒd¡ d S )Nrý   r  r€  rN  r   r   r
   ©	r   rŽ   rG  r   rK  r›   r¥   rÊ  ZassertGreaterEqualrµ  r   r   r   Útest_twoH  s   

z!KeepaliveServerTestCase1.test_twoN)r6   r7   r8   rÑ  r   r   r   r   rÏ  G  rÍ   rÏ  c                   @   ó    e Zd ZdZdd„ Zdd„ ZdS )ÚKeepaliveServerTestCase2r
   c                 C   sÞ   t  t¡}|  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ |dƒƒ  |  | dd¡d¡ |  | dd¡d¡ |  | dd¡d¡ |dƒƒ  |  t| jjƒd¡ |  t| jjd ƒd¡ |  t| jjd ƒd¡ d S )Nrý   r  r€  rN  r
   r   éþÿÿÿrÐ  rµ  r   r   r   Ú
test_close^  s   


z#KeepaliveServerTestCase2.test_closec                 C   s`   t  t¡}|  | dd¡d¡ |dƒ ¡  |  | dd¡d¡ |dƒƒ  |  t| jjƒd¡ d S )Nrý   r  r€  r«  rN  r
   )	r   rŽ   rG  r   rK  rN  r›   r¥   rÊ  rµ  r   r   r   Útest_transportq  s   

z'KeepaliveServerTestCase2.test_transportN)r6   r7   r8   rw  rÕ  rÖ  r   r   r   r   rÓ  Z  s    rÓ  zrequires gzipc                   @   sV   e Zd ZG dd„ dejjƒZeZG dd„ dej	ƒZ	dd„ Z
dd„ Zd	d
„ Zdd„ ZdS )ÚGzipServerTestCasec                   @   s    e Zd ZejjZdZdd„ ZdS )z!GzipServerTestCase.RequestHandlerr”   c                 C   s   t | jd ƒ| j_| j | ¡S )Núcontent-length)r_   r–   Ú	__class__Úcontent_lengthrÌ  rŸ   rE   r   r   r   rŸ   „  s   z)GzipServerTestCase.RequestHandler.do_POSTN)	r6   r7   r8   rˆ   r«   rB  rÌ  r¤   rŸ   r   r   r   r   r¥   €  s    r¥   c                   @   rÒ  )zGzipServerTestCase.TransportFc                 C   s    t | dd¡ƒ| _tj | |¡S )NrØ  r   )r_   Z	getheaderÚresponse_lengthr   rŠ   Úparse_response)r   rž   r   r   r   rÜ    s   z+GzipServerTestCase.Transport.parse_responsec                 C   s"   | j r	| dd¡ tj | ||¡S )NzContent-EncodingÚgzip)Ú	fake_gzipZ	putheaderr   rŠ   Úsend_content)r   Ú
connectionÚbodyr   r   r   rß  ‘  s   z)GzipServerTestCase.Transport.send_contentN)r6   r7   r8   rÞ  rÜ  rß  r   r   r   r   rŠ   Š  s    rŠ   c                 C   s   t  | ¡ d S rY   )rs  r|  rE   r   r   r   r|  —  s   zGzipServerTestCase.setUpc                 C   sv   |   ¡ }d |_tjt|d}|  | dd¡d¡ | jj}d|_|  | dd¡d¡ | jj}|  	||k¡ |dƒƒ  d S ©N©r«  rý   r  r€  r   rN  )
rŠ   Úencode_thresholdr   rŽ   rG  r   rK  r¥   rÚ  r’   )r   r?   r·   r~   r   r   r   r   Útest_gzip_requestš  s   z$GzipServerTestCase.test_gzip_requestc                 C   st   |   ¡ }d |_d|_tjt|d}|  tjt 	d¡¡}| | 
dd¡ W d   ƒ n1 s.w   Y  |dƒƒ  d S )NTrã  z\b400\brý   r  rN  )rŠ   rä  rÞ  r   rŽ   rG  rÖ   rl  ÚreÚcompilerK  )r   r?   r·   Úcmr   r   r   Útest_bad_gzip_request¦  s   ÿÿz(GzipServerTestCase.test_bad_gzip_requestc                 C   s†   |   ¡ }tjt|d}| jj}d | j_|  | dd¡d¡ |j}d| j_|  | dd¡d¡ |dƒƒ  |j}|| j_|  	||k¡ d S râ  )
rŠ   r   rŽ   rG  rQ  rä  r   rK  rÛ  r’   )r   r?   r·   Úoldr~   r   r   r   r   Útest_gzip_response±  s   
z%GzipServerTestCase.test_gzip_responseN)r6   r7   r8   rˆ   r«   rB  r¥   rQ  r   rŠ   r|  rå  ré  rë  r   r   r   r   r×  |  s    r×  c                   @   rÊ   )ÚGzipUtilTestCasec                 C   sŽ   d}d| }t  |¡}t  |¡}|  t|ƒ|¡ d|d  }t  |¡}|  td¡ t  |¡ W d   ƒ n1 s9w   Y  t j|dd d S )Ni  @ó    r   z#max gzipped payload length exceededr   )Z
max_decode)r   Zgzip_encodeZgzip_decoder   r›   rÖ   r†   )r   Zmax_gzip_decodery   ÚencodedZdecodedr   r   r   Útest_gzip_decode_limitÃ  s   


ÿþz'GzipUtilTestCase.test_gzip_decode_limitN)r6   r7   r8   rï  r   r   r   r   rì  À  s    rì  c                       sl   e Zd ZG dd„ dejjƒZeZg d¢Z‡ fdd„Z	dd„ Z
dd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚHeadersServerTestCasec                       s    e Zd ZdZ‡ fdd„Z‡  ZS )z$HeadersServerTestCase.RequestHandlerNc                    s   | j | j_tƒ  ¡ S rY   )r–   rÙ  Útest_headersÚsuperrŸ   rE   ©rÙ  r   r   rŸ   Ø  s   

z,HeadersServerTestCase.RequestHandler.do_POST)r6   r7   r8   rñ  rŸ   Ú__classcell__r   r   ró  r   r¥   Õ  s    r¥   )ZHostzAccept-EncodingzContent-Typez
User-Agentr•   c                    s   d | j _tƒ  ¡ S rY   )r¥   rñ  rò  r|  rE   ró  r   r   r|  à  s   
zHeadersServerTestCase.setUpc                 C   sR   t | jt| ¡ ƒ ƒ}|  t | ¡ ƒ|¡ | ¡ D ]\}}|  | |¡|¡ qd S rY   )ÚsortedÚstandard_headersÚlistÚkeysZassertListEqualÚitemsr   r—   )r   r–   Ú
additionalZexpected_keysÚkeyr1   r   r   r   ÚassertContainsAdditionalHeadersä  s
   ÿz5HeadersServerTestCase.assertContainsAdditionalHeadersc                 C   s@   t jtdgd}|  | dd¡d¡ | jj}|  |ddi¡ d S )N©úX-TestÚfoo©r–   rý   r  r€  rþ  rÿ  ©r   rŽ   rG  r   rK  r¥   rñ  rü  ©r   r·   r–   r   r   r   Útest_headerë  s   z!HeadersServerTestCase.test_headerc                 C   sD   t jtddgd}|  | dd¡d¡ | jj}|  |ddd	œ¡ d S )
Nrý  )úX-Test-SecondÚbarr   rý   r  r€  rÿ  r  )rþ  r  r  r  r   r   r   Útest_header_manyò  s   ÿ
ÿz&HeadersServerTestCase.test_header_manyc                 C   s:   t jtg d}|  | dd¡d¡ | jj}|  |i ¡ d S )Nr   rý   r  r€  r  r  r   r   r   Útest_header_emptyû  s   z'HeadersServerTestCase.test_header_emptyc                 C   s>   t jtdd}|  | dd¡d¡ | jj}|  |ddi¡ d S )N)rý  r   rý   r  r€  rþ  rÿ  r  r  r   r   r   Útest_header_tuple  s   z'HeadersServerTestCase.test_header_tuplec                 C   sF   t jtddi ¡ d}|  | dd¡d¡ | jj}|  |ddi¡ d S )Nrþ  rÿ  r   rý   r  r€  )	r   rŽ   rG  rù  r   rK  r¥   rñ  rü  r  r   r   r   Útest_header_items	  s   z'HeadersServerTestCase.test_header_items)r6   r7   r8   rˆ   r«   rB  r¥   rQ  rö  r|  rü  r  r  r  r  r	  rô  r   r   ró  r   rð  Ô  s    	rð  c                   @   rß   )ÚServerProxyTestCasec                 C   s   t j | ¡ d| _d S )Nzhttp://fake.localhost)rm  ÚTestCaser|  r¶   rE   r   r   r   r|    s   
zServerProxyTestCase.setUpc                 C   s"   t  | j¡}|  |dƒƒ d ¡ d S )NrN  )r   rŽ   r¶   r   rµ  r   r   r   rÕ    s   zServerProxyTestCase.test_closec                 C   s,   t  ¡ }t j| j|d}|  |dƒ|¡ d S )Nrã  r«  )r   rŠ   rŽ   r¶   r   )r   r?   r·   r   r   r   rÖ    s   z"ServerProxyTestCase.test_transportN)r6   r7   r8   r|  rÕ  rÖ  r   r   r   r   r
    s    r
  c                       s   e Zd Zd‡ fdd„	Z‡  ZS )ÚFailingMessageClassNc                    s"   |  ¡ }|dkr
dS tƒ  ||¡S )NrØ  zI am broken)rh  rò  r—   )r   rû  Zfailobjró  r   r   r—   &  s   zFailingMessageClass.getrY   )r6   r7   r8   r—   rô  r   r   ró  r   r  %  s    r  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚFailingServerTestCasec                 C   sN   t  ¡ | _| jdf}t jt|d}| ¡  |  |j¡ | j ¡  | j 	¡  d S )Nr   rt  )
r°   rv  rO  r±   rS  r²   r®   r³   ry  rz  r{  r   r   r   r|  .  s   


zFailingServerTestCase.setUpc                 C   s*   | j  ¡  dtjj_tjj}|tjj	_
d S r}  )rO  ry  rˆ   r«   rA  ru  rš   r‰   ÚHTTPMessagerB  ÚMessageClass)r   Zdefault_classr   r   r   r~  :  s   

zFailingServerTestCase.tearDownc                 C   s¢   t jjj}|  |d¡ dt jj_zt t¡}|  | dd¡d¡ W d S  tj	t
fyP } zt|ƒsE|  d|t|ddƒf ¡ W Y d }~d S W Y d }~d S d }~ww )	NFTrý   r  r€  r  r–   r  )rˆ   r«   rA  ru  r   r   rŽ   rG  rK  rl  r‘   rj  r‚  rƒ  )r   Zflagvalr·   ri  r   r   r   Ú
test_basicC  s   


(þ€þz FailingServerTestCase.test_basicc              
   C   sº   t tjj_zt t¡}| dd¡ W nC tj	t
fyU } z4t|ƒsCt|dƒrJ|  |j d¡d u ¡ |  |j d¡d u ¡ W Y d }~d S W Y d }~d S W Y d }~d S d }~ww |  d¡ d S )Nrý   r  r–   rg  úX-tracebackúProtocolError not raised)r  rˆ   r«   rB  r  r   rŽ   rG  rK  rl  r‘   rj  Úhasattrr’   r–   r—   r‚  r„  r   r   r   Útest_fail_no_infoU  s   

$ý€þz'FailingServerTestCase.test_fail_no_infoc              
   C   sÆ   t tjj_dtjj_zt t	¡}| 
dd¡ W nD tjtfy[ } z5t|ƒsIt|dƒrPd}|  |j d¡|¡ |  |j d¡d u¡ W Y d }~d S W Y d }~d S W Y d }~d S d }~ww |  d¡ d S )	NTrý   r  r–   z5invalid literal for int() with base 10: 'I am broken'rg  r  r  )r  rˆ   r«   rB  r  rA  ru  r   rŽ   rG  rK  rl  r‘   rj  r  r   r–   r—   r’   r‚  )r   r·   ri  Zexpected_errr   r   r   Útest_fail_with_infoe  s   


$ü€þz)FailingServerTestCase.test_fail_with_infoN)r6   r7   r8   r|  r~  r  r  r  r   r   r   r   r  -  s    	r  úutf-8c                 c   s:    t j}tjt ¡ | dt _z
t jV  W |t _dS |t _w )zhA variation on support.captured_stdout() which gives a text stream
    having a `buffer` attribute.
    rl   N)r]   ÚstdoutÚioÚTextIOWrapperÚBytesIO)rm   Zorig_stdoutr   r   r   Úcaptured_stdout{  s   €
r  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚCGIHandlerTestCasec                 C   s   t j ¡ | _d S rY   )rˆ   r«   ÚCGIXMLRPCRequestHandlerÚcgirE   r   r   r   r|  ‰  ó   zCGIHandlerTestCase.setUpc                 C   s
   d | _ d S rY   )r  rE   r   r   r   r~  Œ  r¿   zCGIHandlerTestCase.tearDownc              	   C   sº   t  ¡ O}d|d< t| jjd}| j ¡  W d   ƒ n1 s w   Y  | d¡ | ¡ }| ¡ d }d 	| ¡ dd… ¡}|  
|d	¡ |  
|d
¡ W d   ƒ d S 1 sVw   Y  d S )NÚGETZREQUEST_METHODrl   r   r   ú r
   rM   Z400zBad Request)r   ÚEnvironmentVarGuardr  r  rm   r©   Úseekr˜   Úsplitr³   r   )r   ÚenvÚdata_outrÍ  r  Úmessager   r   r   Útest_cgi_get  s   
ÿ
"òzCGIHandlerTestCase.test_cgi_getc              
   C   s  d}t  ¡ J}t| jjd3}t ¡ }| |¡ | d¡ t	t
|ƒƒ|d< | j ¡  W d   ƒ n1 s5w   Y  W d   ƒ n1 sDw   Y  W d   ƒ n1 sSw   Y  | d¡ | ¡ }|  tjtj|dd … ¡ || d¡d … }|  tt d|¡ d¡ƒt
|ƒ¡ d S )	Naw  <?xml version='1.0'?>
        <methodCall>
            <methodName>test_method</methodName>
            <params>
                <param>
                    <value><string>foo</string></value>
                </param>
                <param>
                    <value><string>bar</string></value>
                </param>
            </params>
        </methodCall>
        rl   r   ZCONTENT_LENGTHé,   z<?xmlzContent-Length: (\d+)r   )r   r"  r  r  rm   r   Zcaptured_stdinrœ   r#  r2   r›   r©   r˜   rC   r   râ   r   Úfindr   r_   ræ  ÚsearchÚgroup)r   ry   r%  r&  Zdata_inrÍ  Zcontentr   r   r   Útest_cgi_xmlrpc_response¡  s2   
ÿþ

ú€ € 
þz+CGIHandlerTestCase.test_cgi_xmlrpc_responseN)r6   r7   r8   r|  r~  r(  r-  r   r   r   r   r  ˆ  s
    r  c                   @   rß   )ÚUseBuiltinTypesTestCasec                    s´   g ˆ _ d}t dddddd¡}t ||fd¡}‡ fd	d
„}tjjdd dd}| |¡ | |¡ ˆ  	t
ˆ j ƒd¡ ˆ j \}}ˆ  	ˆ j ||g¡ ˆ  t|ƒtj¡ ˆ  t|ƒt¡ d S )Nr   iØ  rN   é   é   é   é   Úfoobarc                     s   ˆ j  | ¡ d S rY   )ÚlogÚextend)r¡   rE   r   r   r3  Ö  r  z>UseBuiltinTypesTestCase.test_use_builtin_types.<locals>.foobarT)rh   rm   r"   r
   )r4  r$   r   r   rˆ   r«   rÀ   rÁ   rW  r   r›   r&   r'   rs   )r   Zexpected_bytesZexpected_dateZ	marshaledr3  ÚhandlerZmybytesZmydater   rE   r   Útest_use_builtin_typesÎ  s   ÿ


z.UseBuiltinTypesTestCase.test_use_builtin_typesc                 C   s   t jjdd}|  |j¡ d S )NTr!   )rˆ   r«   r  r’   r"   )r   r6  r   r   r   Ú*test_cgihandler_has_use_builtin_types_flagâ  s   zBUseBuiltinTypesTestCase.test_cgihandler_has_use_builtin_types_flagc                 C   s(   t jjddd}| ¡  |  |j¡ d S )Nr1  Tr!   )rˆ   r«   rA  r¯   r’   r"   r¥  r   r   r   Ú,test_xmlrpcserver_has_use_builtin_types_flagæ  s
   ÿzDUseBuiltinTypesTestCase.test_xmlrpcserver_has_use_builtin_types_flagN)r6   r7   r8   r7  r8  r9  r   r   r   r   r.  Ì  s    r.  c                  C   s    t  ¡ } tjt jg| ¢R Ž  d S rY   )r   Zthreading_setuprm  ZaddModuleCleanupZthreading_cleanup)Úthread_infor   r   r   ÚsetUpModuleí  s   r;  Ú__main__rX  rY   )r  )Gr  r$   r„   r]   rõ   rm  r   Úxmlrpc.clientr‰   r   Zxmlrpc.serverrˆ   Zhttp.clientrš   Zhttp.serverr§   r°   ræ  r  rŽ  rc  r   Ztest.supportr   r   r   r   r   r	   rÝ  r   rr   rt   r%   r   r  r   r¹   rÜ   rà   rî   r  rE  rF  rG  rS  rf  rj  rr  rs  r  r±  r³  rÉ  rÏ  rÓ  ZskipIfr×  rì  rð  r
  r  r  r  Úcontextmanagerr  r  r.  r;  r6   Úmainr   r   r   r   Ú<module>   s¤    ÿÿÿò  =W_

@H H4"C>ND!
ÿ