a 5êdg@æã@s ddlZddlZddlZddlZddlZddlZddlmZddlmZ ddl Z ddl Z ddl Z ddlZ ddlZddlZddlZddlZddlZddlmZddlmZddlmZmZmZz ddlZWneyÞdZYn0dddd d ge  d ¡d ed ƒd d de  d¡e  d¡e  e dd dddd¡¡dœgZ Gdd„dej!ƒZ"Gdd„dej!ƒZ#Gdd„dej!ƒZ$Gdd„dej!ƒZ%Gdd „d ej!ƒZ&Gd!d"„d"ej!ƒZ'da(a)a*dPd#d$„Z+dQd%d&„Z,d'd(„Z-d)d*„Z.Gd+d,„d,ej!ƒZ/Gd-d.„d.e/ƒZ0Gd/d0„d0e/ƒZ1Gd1d2„d2e/ƒZ2Gd3d4„d4e/ƒZ3Gd5d6„d6e3ƒZ4Gd7d8„d8e3ƒZ5e 6edud9¡Gd:d;„d;e/ƒƒZ7e 6edud9¡Gdd?„d?e/ƒZ9Gd@dA„dAej!ƒZ:GdBdC„dCe jj;ƒZdRdGdH„ƒZ?GdIdJ„dJej!ƒZ@GdKdL„dLej!ƒZAejBdMdN„ƒZCeDdOkreCƒdS)SéN)Úmock)Úsupport)Ú socket_helper)Ú ALWAYS_EQÚLARGESTÚSMALLESTzfoo@bar.baz.spamgHázns¼@iéz.zyx.41ómy dog has fleasFu 䀀怀耀z regular valueú20050210T11:41:23) éÕré é é)érééÿÿÿÿr r r rr)ZastringZafloatZanintZ ashortlongZ anotherlistZabase64Zb64bytesZ b64bytearrayZbooleanÚunicodeuukey䀀Z datetime1Z datetime2Z datetime3c@s´eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+S),ÚXMLRPCTestCasecCs.t tf¡}t |¡}| t|dd¡dS)Nr)Ú xmlrpclibÚdumpsÚalistÚloadsÚ assertEqual)ÚselfÚdumpÚload©rú,/usr/local/lib/python3.9/test/test_xmlrpc.pyÚtest_dump_load.s  zXMLRPCTestCase.test_dump_loadcCs6t dddddd¡}| |t d¡¡t |f¡}tj|dd \}}|\}| ||¡| t|ƒtj¡| |¡tj|d d \}}|\}| ||¡| t|ƒtj¡| |¡tj|dd \}}|\}| ||¡| t|ƒtj¡| |¡tj|d d \}}|\}| ||¡| t|ƒtj¡| |¡dS) Nr rr r rrr T©Úuse_builtin_typesF)Z use_datetime© ÚdatetimerrÚDateTimerrÚassertIsÚtypeÚ assertIsNone©rZdtÚsÚresultÚmZnewdtrrrÚtest_dump_bare_datetime3s.        z&XMLRPCTestCase.test_dump_bare_datetimecCs¶t dddddd¡}| |t d¡¡t |f¡}tj|dd \}}|\}| ||¡| t|ƒtj¡| |¡tj|d d \}}|\}| ||¡| t|ƒtj¡| |¡dS) Nrrr r rrz00010210T11:41:23TrFr!r'rrrÚtest_datetime_before_1900Us    z(XMLRPCTestCase.test_datetime_before_1900cCsRt ¡}t tj|fdd¡\\}}| |jt¡tj|fdd}| |t¡dS)NT©Úmethodresponse)rr#rrZassertIsInstanceÚvalueÚstr)rÚdZnew_dÚdummyr(rrrÚtest_bug_1164912gs ÿzXMLRPCTestCase.test_bug_1164912cCsLGdd„dtƒ}|ƒ}d|_d|_t t |f¡¡\\}}| ||j¡dS)Nc@s eZdZdS)z-XMLRPCTestCase.test_newstyle_class..TN)Ú__name__Ú __module__Ú __qualname__rrrrÚTrsr7édZHello)ÚobjectÚxÚyrrrrÚ__dict__)rr7ÚtÚt2r2rrrÚtest_newstyle_classqs z"XMLRPCTestCase.test_newstyle_classcCs| ttjddf¡dS)Nréc)Ú assertRaisesÚ OverflowErrorrr©rrrrÚtest_dump_big_longzsz!XMLRPCTestCase.test_dump_big_longcCs| ttjddif¡dS)N©rrér©rAÚ TypeErrorrrrCrrrÚtest_dump_bad_dict}sz!XMLRPCTestCase.test_dump_bad_dictcCs4gd¢}ddd|g}| |¡| ttj|f¡dS)NrErFéé)ÚappendrArHrr)rÚlr=rrrÚtest_dump_recursive_seq€s  z&XMLRPCTestCase.test_dump_recursive_seqcCs2dddœ}d|dœ}||d<| ttj|f¡dS)Nr)Ú1Ú2rF)Ú3r1r=rG©rr1r=rrrÚtest_dump_recursive_dict†s  z'XMLRPCTestCase.test_dump_recursive_dictcCsÂtjdkr | ttjtdƒf¡t tjtjf¡| ttjtjdf¡| ttjtjdf¡dd„}t  ¡}|  tj|¡|  tj|¡| t|j tjd|¡| t|j tjd|¡dS)NiÿÿÿìrcSsdS©Nr©r(rrrÚ dummy_write—sz5XMLRPCTestCase.test_dump_big_int..dummy_write) ÚsysÚmaxsizerArBrrÚintÚMAXINTÚMININTÚ MarshallerZdump_int©rrWr*rrrÚtest_dump_big_intŒs*  ÿ  ÿ  ÿ  ÿ  ÿz XMLRPCTestCase.test_dump_big_intcCs t tdƒf¡t ttjƒttjƒf¡t ttjdƒttjdƒf¡dd„}t ¡}| tj|¡| tj|¡| tjd|¡| tjd|¡dS)NrTé*cSsdSrUrrVrrrrW©sz4XMLRPCTestCase.test_dump_double..dummy_write)rrÚfloatr[r\r]Z dump_doubler^rrrÚtest_dump_double¢s ÿ ÿzXMLRPCTestCase.test_dump_doublecCsTtdg}tdgf}tj|dd}| |t |¡dd¡| ttj|f¡dS)NT)Ú allow_noner)rrrrrrArH)rr/Zarg1ÚstrgrrrÚtest_dump_none²s  ÿzXMLRPCTestCase.test_dump_nonecCsüddi}tj|fdd}d|}| t |¡dd|¡| dd¡}| t |¡dd|¡tj|fddd }| t |¡dd|¡| dd¡}| t |¡dd|¡d }tj|fd|d }| t |¡dd|¡| t |¡d |¡dS) Nukey€¤u value€¤ú iso-8859-15©Úencodingz,rÚxmlcharrefreplaceT)rhr.u method€¤)rhÚ methodnamer)rrrrÚencode)rr/rdrjrrrÚtest_dump_encodingºs(ÿ  ÿ  ÿz!XMLRPCTestCase.test_dump_encodingcCs¾d}| |t |¡¡tttjfD]–}||ƒ}t |f¡}tj|dd\}}|\}| ||¡| t|ƒt¡|  |¡tj|dd\}}|\}| ||¡| t|ƒtj¡|  |¡q"dS)Nr TrF) rrÚBinaryÚbytesÚ bytearrayrrr$r%r&)rÚsampleÚtype_r/r(r)r*ÚnewvaluerrrÚtest_dump_bytesÏs    zXMLRPCTestCase.test_dump_bytescCsFtj}d}| |tj|¡d}| |tj|¡d}| |tj|¡dS)Nz6zTab)rÚ ResponseErrorrAr)rrtÚdatarrrÚtest_loads_unsupportedâsz%XMLRPCTestCase.test_loads_unsupportedcKsRd|}tj|fi|¤Ž\}}|\}| ||¡| t|ƒt|ƒ¡| |¡dS)Nz1%s)rrrr$r%r&)rr(r/Úkwargsrr)r*rrrrrÚ check_loadsðs  zXMLRPCTestCase.check_loadsc CsÄ|j}|ddƒ|ddƒ|ddƒ|ddƒ|ddƒ|d dƒ|d d ƒ|d d ƒ|dt d¡ƒ|dddd|dt d¡ƒ|dt dddddd¡dd|dddgƒ|ddddœƒdS)NÚstringzstringu4ð”˜ð”«ð”¦ð” ð”¬ð”¡ð”¢ stringu#ð”˜ð”«ð”¦ð” ð”¬ð”¡ð”¢ stringz2056183947i‹àŽzz-2056183947iuq…z2056183947z46093.78125g¹æ@z0Fz%AGJ5dGUgc3RyaW5n/w==s byte stringÿTrz620050210T11:41:23r r rr r rrzR12rz…b2a1)ÚaÚb)rxrrmr#r"©rÚcheckrrrÚtest_load_standard_typesøs8        ÿÿÿþþýz'XMLRPCTestCase.test_load_standard_typescCs`|j}|ddƒ|ddƒ|ddƒ|ddƒ|ddƒ|d d ƒ|d d ƒ|d t d¡ƒdS)Nzz z 205éÍz20561iQPz9876543210lê` z-98765432100123456789l5¤?Ú4*UUz93.78125grW@z.9876543210.0123456789z9876543210.0123456789)rxÚdecimalZDecimalr|rrrÚtest_load_extension_typess     ÿ ÿz(XMLRPCTestCase.test_load_extension_typescCs(tj ¡}| | d¡ddgif¡dS)Nz user@host.tldzhost.tld)Z AuthorizationzBasic dXNlcg==)ÚxmlrpcÚclientÚ TransportrZ get_host_info)rZtransprrrÚtest_get_host_info s   ÿÿz!XMLRPCTestCase.test_get_host_infocCszz ddl}Wnty"d}Yn0d}ztj d¡ ¡Wn8tyZ| |d¡Yntyt|  |¡Yn0dS)NrFTzhttps://localhost:9999z&xmlrpc client's error with SSL support) ÚsslÚ ImportErrorr‚rƒÚ ServerProxyZ bad_functionÚNotImplementedErrorÚ assertFalseÚOSErrorÚ assertTrue)rr†Zhas_sslrrrÚtest_ssl_presence's     z XMLRPCTestCase.test_ssl_presencecsºGdd„dtjjƒ}‡fdd„}tj tjdf|¡‰| ˆj¡tj |d}|  ¡| |j ¡dj ˆj Ž}t |¡0}| | ¡d¡| | ¡d¡Wdƒn1s¬0YdS) Nc@s$eZdZdZdZdd„Zdd„ZdS)z@XMLRPCTestCase.test_keepalive_disconnect..RequestHandlerúHTTP/1.1FcSs„t|j d¡ƒ}|j |¡|jr,d|_dStjddd}|  ¡}|  t j j ¡| dt|ƒ¡| ¡|j |¡d|_d|_dS)NúContent-LengthT)rKr-F)rZÚheadersÚgetZrfileÚreadÚhandledZclose_connectionrrrkZ send_responseÚhttpZ HTTPStatusZOKZ send_headerÚlenZ end_headersZwfileÚwrite)rÚlengthÚresponserrrÚdo_POST:s  zHXMLRPCTestCase.test_keepalive_disconnect..RequestHandler.do_POSTcWsdSrUr)rÚformatÚargsrrrÚ log_messageIszLXMLRPCTestCase.test_keepalive_disconnect..RequestHandler.log_messageN)r4r5r6Úprotocol_versionr“r™rœrrrrÚRequestHandler6sržcs$ˆj tdƒ¡ˆ ¡ˆ ¡dS©Nr)ÚsocketÚ settimeoutraÚhandle_requestr©ÚserverrrÚ run_serverMsz.run_serverr)Útargetz http://{}:{}/rK)r”r¤ZBaseHTTPRequestHandlerZ HTTPServerrZHOSTÚ addCleanupÚ server_closeÚ threadingÚThreadÚstartÚjoinršZserver_addressrrˆrÚmethod)rržr¥ÚthreadÚurlÚprr£rÚtest_keepalive_disconnect5s      z(XMLRPCTestCase.test_keepalive_disconnectN)r4r5r6rr+r,r3r?rDrIrNrSr_rbrerlrsrvrxr~rr…rr±rrrrr,s*"   rc@sLeZdZGdd„deƒZdd„Zdd„Zdd„Zd d „Zd d „Z d d„Z dS)ÚSimpleXMLRPCDispatcherTestCasec@seZdZdZdS)z*SimpleXMLRPCDispatcherTestCase.DispatchExczSRaised inside the dispatched functions when checking for chained exceptionsN)r4r5r6Ú__doc__rrrrÚ DispatchExc^sr´csŽd}‡fdd„}tj ¡}| |¡ˆ ˆj¡}| d|¡Wdƒn1sR0Yˆ |jj |f¡ˆ  |jj ¡ˆ  |jj ¡dS)z$Calls explicitly registered functionrEcsˆ |¡‚dSrU)r´)ÚparamsrCrrÚdispatched_funciszQSimpleXMLRPCDispatcherTestCase.test_call_registered_func..dispatched_funcr¶N) r‚r¤ÚSimpleXMLRPCDispatcherÚregister_functionrAr´Ú _dispatchrÚ exceptionr›r&Ú __cause__Ú __context__)rÚ exp_paramsr¶Ú dispatcherÚexc_ctxrrCrÚtest_call_registered_funcbs   *z8SimpleXMLRPCDispatcherTestCase.test_call_registered_funccCs’d}Gdd„dƒ}tj ¡}| |ƒ¡| |j¡}| d|¡Wdƒn1sV0Y| |jj |f¡|  |jj ¡|  |jj ¡dS)z3Calls a registered instance attribute as a functionrEc@seZdZdd„ZdS)zOSimpleXMLRPCDispatcherTestCase.test_call_instance_func..DispatchedClasscWst |¡‚dSrU©r²r´)rrµrrrr¶|sz_SimpleXMLRPCDispatcherTestCase.test_call_instance_func..DispatchedClass.dispatched_funcN)r4r5r6r¶rrrrÚDispatchedClass{srÂr¶N© r‚r¤r·Úregister_instancerAr´r¹rrºr›r&r»r¼)rr½rÂr¾r¿rrrÚtest_call_instance_functs  *z6SimpleXMLRPCDispatcherTestCase.test_call_instance_funccCs˜d}d}Gdd„dƒ}tj ¡}| |ƒ¡| |j¡}| ||¡Wdƒn1sZ0Y| |jj ||f¡|  |jj ¡|  |jj ¡dS)z4Calls the registered instance's `_dispatch` functionr­rEc@seZdZdd„ZdS)zLSimpleXMLRPCDispatcherTestCase.test_call_dispatch_func..TestInstancecSst ||¡‚dSrUrÁ)rr­rµrrrr¹sÿzVSimpleXMLRPCDispatcherTestCase.test_call_dispatch_func..TestInstance._dispatchN)r4r5r6r¹rrrrÚ TestInstancesrÆNrÃ)rZ exp_methodr½rÆr¾r¿rrrÚtest_call_dispatch_func‡s  *z6SimpleXMLRPCDispatcherTestCase.test_call_dispatch_funccCsTtj ¡}|jddd| td¡| dd¡Wdƒn1sF0YdS)z2Calls explicitly registered function which is NoneNr­©Úname©Zparam)r‚r¤r·r¸ÚassertRaisesRegexÚ Exceptionr¹©rr¾rrrÚtest_registered_func_is_noneœs z;SimpleXMLRPCDispatcherTestCase.test_registered_func_is_nonecCsRtj ¡}| tƒ¡| td¡| dd¡Wdƒn1sD0YdS)z>Attempts to call nonexistent function on a registered instancer­rÊN)r‚r¤r·rÄr9rËrÌr¹rÍrrrÚtest_instance_has_no_func¤s  z8SimpleXMLRPCDispatcherTestCase.test_instance_has_no_funccCsFtj ¡}| td¡| dd¡Wdƒn1s80YdS)z2Calls a function that the dispatcher cannot locater­rÊN)r‚r¤r·rËrÌr¹rÍrrrÚtest_cannot_locate_func¬s z6SimpleXMLRPCDispatcherTestCase.test_cannot_locate_funcN) r4r5r6rÌr´rÀrÅrÇrÎrÏrÐrrrrr²]sr²c@seZdZdd„ZdS)ÚHelperTestCasecCs:| t d¡d¡| t d¡d¡| t d¡d¡dS)Nza&bza&bzabza>b)rrÚescaperCrrrÚ test_escapeµszHelperTestCase.test_escapeN)r4r5r6rÓrrrrrÑ´srÑc@s$eZdZdd„Zdd„Zdd„ZdS)Ú FaultTestCasecCs4t dd¡}| t|ƒd¡| t|ƒt|ƒ¡dS)Nr`ú Test Faultz)rÚFaultrÚreprr0)rÚfrrrÚ test_repr»s zFaultTestCase.test_reprcCsjt dd¡}t |f¡}t |¡\\}}| |dddœ¡| |d¡t ¡ |¡}| tjtj|¡dS)Nr`rÕ)Ú faultCodeÚ faultString)rrÖrrrr]rA)rrØr(Znewfr*rrrÚtest_dump_faultÀs   zFaultTestCase.test_dump_faultcCs,| ttjjtd¡| tj td¡¡dS©NZ__addÚtitle)rAÚAttributeErrorr‚r¤Úresolve_dotted_attributer0rŒrCrrrÚtest_dotted_attributeÊs ÿz#FaultTestCase.test_dotted_attributeN)r4r5r6rÙrÜrárrrrrÔºs rÔc@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dS)ÚDateTimeTestCasecCsjt d¡L}t gd¢¡}||_t ¡}t ¡}| t |ƒt  d|¡¡Wdƒn1s\0YdS)Nztime.localtime) iÝééréé1réÄrú%Y%m%dT%H:%M:%S) rZpatchÚtimeÚ struct_timeZ return_valueÚ localtimerr#rr0Ústrftime)rZlocaltime_mockZ time_structrër=rrrÚ test_defaultÒs ÿ  ÿzDateTimeTestCase.test_defaultc Cs0d}t |¡}| t|ƒt dt |¡¡¡dS©Ngl]‚Þ®šÑArè)rr#rr0rérìrërRrrrÚ test_timeÜs   ÿzDateTimeTestCase.test_timecCs"d}t |¡}| t|ƒd¡dS)N) é×éé r é&é2rKé rz20070609T10:38:50)rr#rr0rRrrrÚtest_time_tupleâs z DateTimeTestCase.test_time_tuplecCs0t d¡}t |¡}| t|ƒt d|¡¡dSrî)rérërr#rr0rìrRrrrÚtest_time_structçs  z!DateTimeTestCase.test_time_structcCs2t dddddd¡}t |¡}| t|ƒd¡dS)NrðrrrFrJrKz20070102T03:04:05)r"rr#rr0rRrrrÚtest_datetime_datetimeìs z'DateTimeTestCase.test_datetime_datetimecCs>t dddddd¡}t |¡}dt|ƒ}| t|ƒ|¡dS)NrðrrrFrJrKz%)r"rr#Úidrr×)rr1r=ÚvalrrrrÙñs  zDateTimeTestCase.test_reprc CsVd}t ¡}| |¡t t dddddd¡¡}| ||¡t |¡}| ||¡dS)Nz 20070908T07:11:13 rðròérãr é )rr#Údecoder"rZ _datetime)rr1Út1Ztrefr>rrrÚ test_decode÷s   zDateTimeTestCase.test_decodecCsftj ¡}t | ¡¡}| ||k¡| ||k¡|tjdd}| ||k¡| ||k¡| d¡}| ||k¡| ||k¡t | ¡¡}| ||k¡| ||k¡| d¡}| ¡}|  |dk¡| ||k¡|  |t |ƒk¡| ||k¡|  t ¡|t dƒkWdƒn1s,0Y|  t ¡||kWdƒn1s`0Y|  t ¡|t |ƒkWdƒn1s˜0Y|  t ¡||kWdƒn1sÌ0Y| |tk¡|  |tk¡| |tk¡|  |tk¡| |tk¡|  |tk¡|  |tk¡| |tk¡|  |tk¡| |tk¡dS)NrJ)ZsecondsrèÚasciii²)r"Únowrr#Z timetuplerŒZ timedeltarìrkrŠrorArHrarrr)rrZdtimeZthenZdstrZ dtime_thenZdbytesZdtuplerrrÚtest_comparisonsJ    , ( , (z DateTimeTestCase.test_comparisonN) r4r5r6rírïrör÷rørÙrÿrrrrrrâÑs  râc@s$eZdZdd„Zdd„Zdd„ZdS)ÚBinaryTestCasecCst ¡}| t|ƒd¡dS)NÚ©rrmrr0)rr=rrrrí7szBinaryTestCase.test_defaultcCs(d}t |¡}| t|ƒt|dƒ¡dS©Ns abc123ÿþzlatin-1rrRrrrÚ test_string;s zBinaryTestCase.test_stringcCsZd}t |¡}t ¡}| |¡| t|ƒt|dƒ¡t |¡}| t|ƒt|dƒ¡dSr)Úbase64Z encodebytesrrmrýrr0Z_binary)rr1Úderþr>rrrrÿ@s   zBinaryTestCase.test_decodeN)r4r5r6rírrÿrrrrr0src Cs@Gdd„dƒ}Gdd„dtjjƒ}|s.tjj}|d||ddd}zâz°| ¡|j ¡\aadttfa |  ¡|  ¡|  ¡|  t¡|  d d „d ¡|j d d „ƒ}|j dddd„ƒ}|ƒ} |j| dd| ¡|dkrð| ¡|d8}qÖWntjyYn0W|j ¡da| ¡n|j ¡da| ¡0dS)Nc@s*eZdZdd„Zdd„ZGdd„dƒZdS)z&http_server..TestInstanceClasscSs||SrUr©rr:r;rrrÚdivRsz*http_server..TestInstanceClass.divcSs|dkr dSdS©Nr úThis is the div functionr©rrÉrrrÚ _methodHelpUsz2http_server..TestInstanceClass._methodHelpc@seZdZedd„ƒZdS)z.http_server..TestInstanceClass.FixturecSsdS)NÚ42rrrrrÚgetDataZsz6http_server..TestInstanceClass.Fixture.getDataN)r4r5r6Ú staticmethodrrrrrÚFixtureYsrN)r4r5r6r rrrrrrÚTestInstanceClassQsrc@seZdZdd„ZdS)z#http_server..MyXMLRPCServercSs |j ¡\}}| d¡||fS©NT©r ÚacceptÚ setblocking©rr(ÚportrrrÚ get_request_s z/http_server..MyXMLRPCServer.get_requestN©r4r5r6rrrrrÚMyXMLRPCServer^sr©Ú localhostrF)rhÚ logRequestsÚbind_and_activateú http://%s:%dcSs|SrUr)r:rrrÚxózhttp_server..õtêštcSsdS©úThis is my functionTrrrrrÚ my_functionysz http_server..my_functionÚaddrÈcSs||SrUr©r:r;rrrÚ_}szhttp_server.._T)Zallow_dotted_namesrr)r‚r¤ÚSimpleXMLRPCServerÚSimpleXMLRPCRequestHandlerÚ server_bindr Ú getsocknameÚADDRÚPORTÚURLÚserver_activateÚ register_introspection_functionsÚregister_multicall_functionsr¸ÚpowrÄÚsetr¢ÚtimeoutÚclose) ÚevtÚ numrequestsÚrequestHandlerrhrrÚservr(r+Z testInstancerrrÚ http_serverPsF þ       þ r>c CsšGdd„dƒ}dd„}Gdd„dtjjƒ}|s6tjj}Gdd„d|ƒ}Gd d „d ƒ}|d |d d d }|j d¡| ¡zzÐ|j ¡\aa dtt fa |  ¡gd¢} | D]:} |  | tj  ¡¡} |  ¡|  ¡|  | fdd„d¡q¬| | d¡ t¡| | d¡ dd„d¡|  d|ƒ¡| ¡|dkrJ| ¡|d8}q,WntjybYn0W|j ¡da | ¡n|j ¡da | ¡0dS)Nc@seZdZdd„Zdd„ZdS)z,http_multi_server..TestInstanceClasscSs||SrUrr rrrr ’sz0http_multi_server..TestInstanceClass.divcSs|dkr dSdSr rrrrrr•sz8http_multi_server..TestInstanceClass._methodHelpN)r4r5r6r rrrrrr‘srcSsdSr&rrrrrr(™sz&http_multi_server..my_functionc@seZdZdd„ZdS)z)http_multi_server..MyXMLRPCServercSs |j ¡\}}| d¡||fSrrrrrrržs z5http_multi_server..MyXMLRPCServer.get_requestNrrrrrrsrc@seZdZgZdS)z+http_multi_server..MyRequestHandlerN)r4r5r6Z rpc_pathsrrrrÚMyRequestHandler§sr?c@seZdZddd„ZdS)z+http_multi_server..BrokenDispatcherNcSs tdƒ‚dS)Nzbroken dispatcher)Ú RuntimeError)rruZdispatch_methodÚpathrrrÚ_marshaled_dispatch«sz?http_multi_server..BrokenDispatcher._marshaled_dispatch)NN)r4r5r6rBrrrrÚBrokenDispatcherªsrCrF)r r!rFr") ú/fooú/foo/barú/foo?k=vú /foo#fragú /foo?k=v#fragrú/ú/RPC2ú?k=vú#fragcSs|SrUr)r°rrrr#Är$z#http_multi_server..ÚtestrrcSs||SrUrr*rrrr#Ær$r)ú /is/broken)r‚r¤ZMultiPathXMLRPCServerr-r r¡r.r/r0r1r2r3Zadd_dispatcherr·r4r5r¸Zget_dispatcherr6r7r¢r8r9) r:r;r<rr(rr?rCr=ÚpathsrAr1rrrÚhttp_multi_serversJÿ     þ rPcCs^z*|jdks|jdurWdS|j d¡}WntyDt|ƒ}Yn0|rZd| ¡vrZdSdS)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.rNTú X-exceptionztemporarily unavailable)Zerrcoderr‘rßr0Úlower)ÚeZexc_messrrrÚis_unavailable_exceptionØs rTcs|s dd„S‡fdd„}|S)NcSs|SrUr)Úfuncrrrr#ír$z)make_request_and_skipIf..cs‡fdd„}|S)Nc sVzt t¡ ¡Wn4tjtfyF}zt|ƒs2‚WYd}~n d}~00t ˆ¡‚dSrU) rrˆr2r(Ú ProtocolErrorr‹rTÚunittestZSkipTest)rrS©ÚreasonrrÚmake_request_and_skipïs zImake_request_and_skipIf..decorator..make_request_and_skipr)rUrZrXrrÚ decoratorîs z*make_request_and_skipIf..decoratorr)Z conditionrYr[rrXrÚmake_request_and_skipIfés r\c@s,eZdZdZdZeeƒZdd„Zdd„Z dS)ÚBaseServerTestCaseNrcCs`dtjj_t ¡|_|j|j|jf}tj |j |d}|  ¡|  |j ¡|j ¡|j ¡dS)NT©r¦r›)r‚r¤r,Ú_send_traceback_headerr©ÚEventr:Ú request_countr<rªÚ threadFuncr«r§r¬ÚwaitÚclear©rZ serv_argsr®rrrÚsetUpþs    zBaseServerTestCase.setUpcCs|j ¡dtjj_dS©NF)r:rcr‚r¤r,r_rCrrrÚtearDown s zBaseServerTestCase.tearDown) r4r5r6r<rarr>rbrfrhrrrrr]ùs r]c@s¦eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z e e j j dkdƒdd„ƒZdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%S)&ÚSimpleServerTestCasec Cstz"t t¡}| | dd¡d¡WnLtjtfyn}z.t|ƒsZ| d|t |ddƒf¡WYd}~n d}~00dS)Nrñrûé¡ú%s %srr) rrˆr2rr6rVr‹rTÚfailÚgetattr©rr°rSrrrÚ test_simple1s  z!SimpleServerTestCase.test_simple1c Cs€d}d}z&t t¡}| | ||¡||¡WnLtjtfyz}z.t|ƒsf| d|t |ddƒf¡WYd}~n d}~00dS)NuPÅ·tuhÆ¡nrkrr) rrˆr2rr)rVr‹rTrlrm©rZ start_stringZ end_stringr°rSrrrÚ test_nonasciis ÿz"SimpleServerTestCase.test_nonasciic Cs†d}d}z*tjtdd}| | ||¡||¡WnNtjtjfy€}z.t|ƒsl|  d|t |ddƒf¡WYd}~n d}~00dS)Nõ€õ¤rfrgrkrr© rrˆr2rr)rVr ÚerrorrTrlrmrprrrÚtest_client_encoding,sÿz)SimpleServerTestCase.test_client_encodingc Csxz$tjtdd}| | d¡d¡WnNtjtjfyr}z.t|ƒs^|  d|t |ddƒf¡WYd}~n d}~00dS)Nrrgr`rkrr) rrˆr2rttêštrVr rurTrlrmrnrrrÚtest_nonascii_methodname:s z-SimpleServerTestCase.test_nonascii_methodnamecCsht tj tt¡¡$}| dd¡| ¡}Wdƒn1s>0Y|  |j d¡|  |j d¡dS)NZPOSTz/this-is-not-validi”z Not Found) Ú contextlibÚclosingr”rƒZHTTPConnectionr0r1ZrequestZ getresponserÚstatusrY)rÚconnr˜rrrÚtest_404Ds  &zSimpleServerTestCase.test_404c Cs†tgd¢ƒ}z(t t¡}|j ¡}| t|ƒ|¡WnLtjtfy€}z.t |ƒsl|  d|t |ddƒf¡WYd}~n d}~00dS)N) r6r r(r)r%zsystem.listMethodszsystem.methodHelpzsystem.methodSignaturezsystem.multicallrrkrr) r7rrˆr2ÚsystemZ listMethodsrrVr‹rTrlrm)rZexpected_methodsr°ÚmethrSrrrÚtest_introspection1Ns   z(SimpleServerTestCase.test_introspection1c Csxz&t t¡}|j d¡}| |d¡WnLtjtfyr}z.t|ƒs^|  d|t |ddƒf¡WYd}~n d}~00dS)Nr r rkrr© rrˆr2r}Z methodHelprrVr‹rTrlrm)rr°ZdivhelprSrrrÚtest_introspection2^s  z(SimpleServerTestCase.test_introspection2rz)Docstrings are omitted with -O2 and abovec Csxz&t t¡}|j d¡}| |d¡WnLtjtfyr}z.t|ƒs^|  d|t |ddƒf¡WYd}~n d}~00dS)Nr(r'rkrrr€)rr°Z myfunctionrSrrrÚtest_introspection3js  z(SimpleServerTestCase.test_introspection3c Csxz&t t¡}|j d¡}| |d¡WnLtjtfyr}z.t|ƒs^|  d|t |ddƒf¡WYd}~n d}~00dS)Nr zsignatures not supportedrkrr) rrˆr2r}ZmethodSignaturerrVr‹rTrlrm)rr°ZdivsigrSrrrÚtest_introspection4xs  z(SimpleServerTestCase.test_introspection4c Cs¾zlt t¡}t |¡}| dd¡| dd¡| dd¡|ƒ\}}}| |d¡| |d¡| |d¡WnLtjt fy¸}z.t |ƒs¤|  d |t |d d ƒf¡WYd}~n d}~00dS) NrrFrñrûér`rKrjrkrr) rrˆr2Ú MultiCallr)r6r rrVr‹rTrlrm)rr°Ú multicallÚ add_resultZ pow_resultZ div_resultrSrrrÚtest_multicall…s        z#SimpleServerTestCase.test_multicallc Cs¤zRt t¡}t |¡}| ¡|ƒ}| |jddd¡| |jddd¡WnLtjtfyž}z.t |ƒsŠ|  d|t |ddƒf¡WYd}~n d}~00dS) NrrÚrrÛz@:method "this_is_not_exists" is not supportedrkrr) rrˆr2r…Zthis_is_not_existsrÚresultsrVr‹rTrlrm)rr°r†r)rSrrrÚtest_non_existing_multicall–s  ÿz0SimpleServerTestCase.test_non_existing_multicallcCs4| ttjjtd¡| tj td¡¡| ¡dSrÝ)rArßr‚r¤ràr0rŒrorCrrrrá«s  ÿz*SimpleServerTestCase.test_dotted_attributecCs,t dttf¡}|j ¡}| |d¡dS)Núhttp://%s:%d/RPC2r)rrˆr0r1rrr)rr¤rurrrÚtest_allow_dotted_names_trueµs z1SimpleServerTestCase.test_allow_dotted_names_truecCs*t dttf¡}| | dd¡d¡dS)Nr‹rzõéuaé)rrˆr0r1rr)©rr¤rrrÚtest_unicode_host»sz&SimpleServerTestCase.test_unicode_hostcCsVt t ttf¡¡.}| dt›dt›d d¡¡Wdƒn1sH0YdS)Nz@POST /RPC2 HTTP/1.0 Content-Length: 100 bye HTTP/1.1 Host: ú:z2 Accept-Encoding: identity Content-Length: 0 r)rxryr Úcreate_connectionr0r1Úsendrk)rr{rrrÚtest_partial_post¿sýýûz&SimpleServerTestCase.test_partial_postcCs^t t¡.}| dd¡| |dƒjd¡Wdƒn1s>0Y| |dƒjd¡dS)NrrFÚ transport©NN)rrˆr2r)ZassertNotEqualÚ _connectionrrŽrrrÚtest_context_managerÉs   ÿ" ÿz)SimpleServerTestCase.test_context_managercCsfz:t t¡}| dd¡Wdƒn1s.0YWntjyNYn0| |dƒjd¡dS)Nrrzr”r•)rrˆr2r)rÖrr–rŽrrrÚ!test_context_manager_method_errorÑs . ÿz6SimpleServerTestCase.test_context_manager_method_errorN)r4r5r6rorqrvrwr|rrr\rXÚflagsÚoptimizer‚rƒrˆrŠrárŒrr“r—r˜rrrrris(     ÿ    ric@s"eZdZeddd„ƒZdd„ZdS)ÚSimpleServerEncodingTestCaseNcCst|||dƒdS)Nrf)r>)r:r;r<rhrrrrbÜsz'SimpleServerEncodingTestCase.threadFuncc Cs‚d}d}z&t t¡}| | ||¡||¡WnNtjtjfy|}z.t|ƒsh|  d|t |ddƒf¡WYd}~n d}~00dS)NrrrsrkrrrtrprrrÚtest_server_encodingàs ÿz1SimpleServerEncodingTestCase.test_server_encoding)NN)r4r5r6rrbrœrrrrr›Ûs r›c@speZdZeeƒZdZdd„Zdd„Zdd„Z dd „Z d d „Z d d „Z dd„Z dd„Zdd„Zdd„Zdd„ZdS)ÚMultiPathServerTestCasercCs:t td¡}| | dd¡d¡| tj|jdd¡dS)NrDrñrûrj)rrˆr2rr6rArÖr)©rr°rrrÚ test_path1òsz"MultiPathServerTestCase.test_path1cCs:t td¡}| | dd¡d¡| tj|jdd¡dS)NrErñrûé)rrˆr2rr)rArÖr6ržrrrÚ test_path2÷sz"MultiPathServerTestCase.test_path2cCs&t td¡}| tj|jdd¡dS)NrNrñrû©rrˆr2rArÖr)ržrrrÚ test_path3üsz"MultiPathServerTestCase.test_path3cCs&t td¡}| tj|jdd¡dS)Nz/invalidrñrûr¢ržrrrÚtest_invalid_pathsz)MultiPathServerTestCase.test_invalid_pathcCs"t td¡}| | ¡d¡dS)NrH©rrˆr2rrMržrrrÚtest_path_query_fragmentsz0MultiPathServerTestCase.test_path_query_fragmentcCs"t td¡}| | ¡d¡dS)NrGr¥ržrrrÚtest_path_fragmentsz*MultiPathServerTestCase.test_path_fragmentcCs"t td¡}| | ¡d¡dS)NrFr¥ržrrrÚtest_path_query sz'MultiPathServerTestCase.test_path_querycCst t¡}| | ¡d¡dS)NrJr¥ržrrrÚtest_empty_paths z'MultiPathServerTestCase.test_empty_pathcCs"t td¡}| | ¡d¡dS)NrIr¥ržrrrÚtest_root_pathsz&MultiPathServerTestCase.test_root_pathcCs"t td¡}| | ¡d¡dS)NrKr¥ržrrrÚtest_empty_path_querysz-MultiPathServerTestCase.test_empty_path_querycCs"t td¡}| | ¡d¡dS)NrLr¥ržrrrÚtest_empty_path_fragmentsz0MultiPathServerTestCase.test_empty_path_fragmentN)r4r5r6rrPrbrarŸr¡r£r¤r¦r§r¨r©rªr«r¬rrrrrïsrc@s,eZdZGdd„dejjƒZeZdd„ZdS)ÚBaseKeepaliveServerTestCasec@s,eZdZejjZdZgZdd„Z dd„Z dS)z*BaseKeepaliveServerTestCase.RequestHandlerrŽcCs(|j g¡t|jƒd|_|j |¡SrŸ)Ú myRequestsrLr•ÚreqidxÚ parentClassÚhandlerCrrrr±*s z1BaseKeepaliveServerTestCase.RequestHandler.handlecCs$|j |¡}|j|j |j¡|SrU)r°Úhandle_one_requestr®r¯rLZraw_requestline)rr)rrrr².s z=BaseKeepaliveServerTestCase.RequestHandler.handle_one_requestN) r4r5r6r‚r¤r-r°rr®r±r²rrrrrž&s ržcCsg|j_t |¡SrU)ržr®r]rfrCrrrrf4sz!BaseKeepaliveServerTestCase.setUpN) r4r5r6r‚r¤r-ržr<rfrrrrr­#s r­c@seZdZdd„ZdS)ÚKeepaliveServerTestCase1cCs€t t¡}| | dd¡d¡| | dd¡d¡| | dd¡d¡|dƒƒ| t|jjƒd¡| t|jjdƒd¡dS)Nrñrûrjr9rrr© rrˆr2rr6r•ržr®ZassertGreaterEqualržrrrÚtest_two<s  z!KeepaliveServerTestCase1.test_twoN)r4r5r6rµrrrrr³;sr³c@s eZdZdZdd„Zdd„ZdS)ÚKeepaliveServerTestCase2rcCsÞt t¡}| | dd¡d¡| | dd¡d¡| | dd¡d¡|dƒƒ| | dd¡d¡| | dd¡d¡| | dd¡d¡|dƒƒ| t|jjƒd¡| t|jjdƒd¡| t|jjdƒd¡dS)Nrñrûrjr9rréþÿÿÿr´ržrrrÚ test_closeRs   z#KeepaliveServerTestCase2.test_closecCs`t t¡}| | dd¡d¡|dƒ ¡| | dd¡d¡|dƒƒ| t|jjƒd¡dS)Nrñrûrjr”r9r) rrˆr2rr6r9r•ržr®ržrrrÚtest_transportes    z'KeepaliveServerTestCase2.test_transportN)r4r5r6rar¸r¹rrrrr¶Nsr¶z requires gzipc@sVeZdZGdd„dejjƒZeZGdd„dej ƒZ dd„Z dd„Z d d „Z d d „Z d S)ÚGzipServerTestCasec@s eZdZejjZdZdd„ZdS)z!GzipServerTestCase.RequestHandlerrŽcCst|jdƒ|j_|j |¡S)Núcontent-length)rZrÚ __class__Úcontent_lengthr°r™rCrrrr™xsz)GzipServerTestCase.RequestHandler.do_POSTN) r4r5r6r‚r¤r-r°rr™rrrrržtsržc@s eZdZdZdd„Zdd„ZdS)zGzipServerTestCase.TransportFcCs t| dd¡ƒ|_tj ||¡S)Nr»r)rZZ getheaderÚresponse_lengthrr„Úparse_response)rr˜rrrr¿sz+GzipServerTestCase.Transport.parse_responsecCs"|jr| dd¡tj |||¡S)NzContent-EncodingÚgzip)Ú fake_gzipZ putheaderrr„Ú send_content)rÚ connectionÚbodyrrrrÂ…s z)GzipServerTestCase.Transport.send_contentN)r4r5r6rÁr¿rÂrrrrr„~sr„cCst |¡dSrU)r]rfrCrrrrf‹szGzipServerTestCase.setUpcCsv| ¡}d|_tjt|d}| | dd¡d¡|jj}d|_| | dd¡d¡|jj}|  ||k¡|dƒƒdS©N©r”rñrûrjrr9) r„Úencode_thresholdrrˆr2rr6ržr½rŒ)rr=r°rzr{rrrÚtest_gzip_requestŽsz$GzipServerTestCase.test_gzip_requestcCst| ¡}d|_d|_tjt|d}| tjt  d¡¡}||  dd¡Wdƒn1s\0Y|dƒƒdS)NTrÆz\b400\brñrûr9) r„rÇrÁrrˆr2rËrVÚreÚcompiler6)rr=r°ÚcmrrrÚtest_bad_gzip_requestšsÿ*z(GzipServerTestCase.test_bad_gzip_requestcCs†| ¡}tjt|d}|jj}d|j_| | dd¡d¡|j}d|j_| | dd¡d¡|dƒƒ|j}||j_|  ||k¡dSrÅ) r„rrˆr2r<rÇrr6r¾rŒ)rr=r°Úoldrzr{rrrÚtest_gzip_response¥s z%GzipServerTestCase.test_gzip_responseN)r4r5r6r‚r¤r-ržr<rr„rfrÈrÌrÎrrrrrºps   rºc@seZdZdd„ZdS)ÚGzipUtilTestCasecCsŽd}d|}t |¡}t |¡}| t|ƒ|¡d|d}t |¡}| td¡t |¡Wdƒn1sr0Ytj|dddS)Ni@órz#max gzipped payload length exceededr)Z max_decode)rZ gzip_encodeZ gzip_decoderr•rËÚ ValueError)rZmax_gzip_decoderuÚencodedZdecodedrrrÚtest_gzip_decode_limit·s    ÿ(z'GzipUtilTestCase.test_gzip_decode_limitN)r4r5r6rÓrrrrrÏ´srÏcsleZdZGdd„dejjƒZeZgd¢Z‡fdd„Z dd„Z dd „Z d d „Z d d „Z dd„Zdd„Z‡ZS)ÚHeadersServerTestCasecs eZdZdZ‡fdd„Z‡ZS)z$HeadersServerTestCase.RequestHandlerNcs|j|j_tƒ ¡SrU)rr¼Ú test_headersÚsuperr™rC©r¼rrr™Ìs z,HeadersServerTestCase.RequestHandler.do_POST)r4r5r6rÕr™Ú __classcell__rrr×rržÉsrž)ZHostzAccept-Encodingz Content-Typez User-Agentrcsd|j_tƒ ¡SrU)ržrÕrÖrfrCr×rrrfÔszHeadersServerTestCase.setUpcCsRt|jt| ¡ƒƒ}| t| ¡ƒ|¡| ¡D]\}}| | |¡|¡q2dSrU)ÚsortedÚstandard_headersÚlistÚkeysZassertListEqualÚitemsrr‘)rrÚ additionalZ expected_keysÚkeyr/rrrÚassertContainsAdditionalHeadersØsz5HeadersServerTestCase.assertContainsAdditionalHeaderscCs@tjtdgd}| | dd¡d¡|jj}| |ddi¡dS)N©úX-TestÚfoo©rrñrûrjrârã©rrˆr2rr6ržrÕrà©rr°rrrrÚ test_headerßsz!HeadersServerTestCase.test_headercCsDtjtddgd}| | dd¡d¡|jj}| |ddd œ¡dS) Nrá)ú X-Test-SecondÚbarrärñrûrjrãré)rârèrårærrrÚtest_header_manyæsÿ ÿz&HeadersServerTestCase.test_header_manycCs:tjtgd}| | dd¡d¡|jj}| |i¡dS)NrärñrûrjrårærrrÚtest_header_emptyïsz'HeadersServerTestCase.test_header_emptycCs>tjtdd}| | dd¡d¡|jj}| |ddi¡dS)N)rárärñrûrjrârãrårærrrÚtest_header_tupleösz'HeadersServerTestCase.test_header_tuplecCsFtjtddi ¡d}| | dd¡d¡|jj}| |ddi¡dS)Nrârãrärñrûrj) rrˆr2rÝrr6ržrÕràrærrrÚtest_header_itemsýsz'HeadersServerTestCase.test_header_items)r4r5r6r‚r¤r-ržr<rÚrfràrçrêrërìrírØrrr×rrÔÈs  rÔc@s$eZdZdd„Zdd„Zdd„ZdS)ÚServerProxyTestCasecCstj |¡d|_dS)Nzhttp://fake.localhost)rWÚTestCaserfr¯rCrrrrfs zServerProxyTestCase.setUpcCs"t |j¡}| |dƒƒd¡dS)Nr9)rrˆr¯rržrrrr¸ s zServerProxyTestCase.test_closecCs,t ¡}tj|j|d}| |dƒ|¡dS)NrÆr”)rr„rˆr¯r)rr=r°rrrr¹sz"ServerProxyTestCase.test_transportN)r4r5r6rfr¸r¹rrrrrîsrîcseZdZd‡fdd„ Z‡ZS)ÚFailingMessageClassNcs"| ¡}|dkrdStƒ ||¡S)Nr»z I am broken)rRrÖr‘)rrßZfailobjr×rrr‘szFailingMessageClass.get)N)r4r5r6r‘rØrrr×rrðsrðc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚFailingServerTestCasecCsNt ¡|_|jdf}tjt|d}| ¡| |j¡|j ¡|j  ¡dS)Nrr^) r©r`r:rªr>r«r§r¬rcrdrerrrrf"s    zFailingServerTestCase.setUpcCs*|j ¡dtjj_tjj}|tjj _ dSrg) r:rcr‚r¤r,r_r”rƒÚ HTTPMessager-Ú MessageClass)rZ default_classrrrrh.s  zFailingServerTestCase.tearDownc Cs”tjjj}| |d¡dtjj_z"t t¡}| | dd¡d¡WnLtj t fyŽ}z.t |ƒsz|  d|t |ddƒf¡WYd}~n d}~00dS) NFTrñrûrjrkrr)r‚r¤r,r_rrrˆr2r6rVr‹rTrlrm)rZflagvalr°rSrrrÚ test_basic7s    z FailingServerTestCase.test_basicc Csœttjj_zt t¡}| dd¡Wnhtj t fyŒ}zJt |ƒsxt |dƒrx|  |j d¡du¡|  |j d¡du¡WYd}~nd}~00| d¡dS)NrñrûrrQú X-tracebackúProtocolError not raised)rðr‚r¤r-rórrˆr2r6rVr‹rTÚhasattrrŒrr‘rlrnrrrÚtest_fail_no_infoIs  ,z'FailingServerTestCase.test_fail_no_infoc Cs¨ttjj_dtjj_zt t ¡}|  dd¡Wnjtj t fy˜}zLt |ƒs„t|dƒr„d}| |j d¡|¡| |j d¡du¡WYd}~nd}~00| d¡dS) NTrñrûrz5invalid literal for int() with base 10: 'I am broken'rQrõrö)rðr‚r¤r-rór,r_rrˆr2r6rVr‹rTr÷rrr‘rŒrl)rr°rSZ expected_errrrrÚtest_fail_with_infoYs   ,z)FailingServerTestCase.test_fail_with_infoN)r4r5r6rfrhrôrørùrrrrrñ!s   rñúutf-8ccs:tj}tjt ¡|dt_ztjVW|t_n|t_0dS)zhA variation on support.captured_stdout() which gives a text stream having a `buffer` attribute. rgN)rXÚstdoutÚioÚ TextIOWrapperÚBytesIO)rhZ orig_stdoutrrrÚcaptured_stdoutos  rÿc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚCGIHandlerTestCasecCstj ¡|_dSrU)r‚r¤ÚCGIXMLRPCRequestHandlerÚcgirCrrrrf}szCGIHandlerTestCase.setUpcCs d|_dSrU)rrCrrrrh€szCGIHandlerTestCase.tearDownc Cs¸t ¡œ}d|d<t|jjd}|j ¡Wdƒn1s@0Y| d¡| ¡}| ¡d}d  | ¡dd…¡}|  |d ¡|  |d ¡Wdƒn1sª0YdS) NÚGETZREQUEST_METHODrgrrú rrJZ400z Bad Request) rÚEnvironmentVarGuardrÿrrhr¢Úseekr’Úsplitr¬r)rÚenvÚdata_outr±rzÚmessagerrrÚ test_cgi_getƒs (   zCGIHandlerTestCase.test_cgi_getc Csd}t ¡”}t|jjdf}t ¡>}| |¡| d¡tt |ƒƒ|d<|j  ¡Wdƒn1sj0YWdƒn1sˆ0YWdƒn1s¦0Y| d¡|  ¡}|  t jt j|dd…¡|| d¡d…}| tt d|¡ d¡ƒt |ƒ¡dS) Naw test_method foo bar rgrZCONTENT_LENGTHé,zUseBuiltinTypesTestCase.test_use_builtin_types..foobarT)rcrhr r)rr"rrr‚r¤r·r¸rBrr•r$r%rn)rZexpected_bytesZ expected_dateZ marshaledrÚhandlerZmybytesZmydaterrCrÚtest_use_builtin_typesÂs ÿ   z.UseBuiltinTypesTestCase.test_use_builtin_typescCstjjdd}| |j¡dS)NTr)r‚r¤rrŒr )rrrrrÚ*test_cgihandler_has_use_builtin_types_flagÖszBUseBuiltinTypesTestCase.test_cgihandler_has_use_builtin_types_flagcCs(tjjddd}| ¡| |j¡dS)NrTr)r‚r¤r,r¨rŒr rŽrrrÚ,test_xmlrpcserver_has_use_builtin_types_flagÚs ÿzDUseBuiltinTypesTestCase.test_xmlrpcserver_has_use_builtin_types_flagN)r4r5r6rrrrrrrrÀsrcCs0t tttttttt t t t t tttttt¡dSrU)rZ run_unittestrrÑrârrÔrrir›r³r¶rºrÏrÔrrîrñrr²rrrrÚ test_mainás úrÚ__main__)NN)N)rú)Err"r€rXrérWrÚ xmlrpc.clientrƒrZ xmlrpc.serverr‚Z http.clientr”Z http.serverr r©rÉrürxrMrZ test.supportrrrrrÀr‡rmror#rrïrr²rÑrÔrârr0r1r2r>rPrTr\r]rir›rr­r³r¶ZskipIfrºrÏrÔrîròrðrñÚcontextmanagerrÿrrZ reap_threadsrr4rrrrÚsœ       ÿÿò3W_  @ HH4"C>N D!