PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  oY8@s dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddl mZddlmZddlmZmZyddlZWnek rdZYnXddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddl m!Z!ddl"m#Z#e j$dkrddl%m&Z&nddlm&Z&ddZ'ddZ(dddZ)ddZ*GdddeZ+GdddeZ,Gdd d Z-Gd!d"d"e-e,Z.d#d$d%d&Z/e0ed'rGd(d)d)ej1eZ2Gd*d+d+e2eZ3Gd,d-d-e3Z4Gd.d/d/e-e4Z5d0d1Z6ej7d2d3Z8ej7d#d$d4d5Z9ej7d6d7d8dd#d$d9d:Z:d;d<Z;Gd=d>d>ej<Z=Gd?d@d@ej>Z?dAdBZ@GdCdDdDeAZBdEdFZCGdGdHdHe jDZDej7dIdJZEejFejGejHdKdLZIdMdNZJdS)OzUtilities shared by tests.N)mock) HTTPServer)WSGIRequestHandler WSGIServer) base_events)compat)events)futures) selectors)tasks) coroutine)logger)supportwin32) socketpaircCs$tdkrdStjtjSdS)N)sslZ SSLContextZPROTOCOL_SSLv23rr)/opt/python35/lib/python3.5/test_utils.pydummy_ssl_context-s rc CsVtdd}|}|j|}d|_z|j|Wd|jXdS)NcSsdS)Nrrrrronce5szrun_briefly..onceF)r Z create_taskZ_log_destroy_pendingrun_until_completeclose)looprgentrrr run_briefly4s  rcCsttj|}x]|so|dk rP|tj}|dkrPtj|jtjdd|qWdS)NrgMbP?r)timer TimeoutErrorrr sleep)rZpredtimeoutdeadlinerrr run_untilCs    r#cCs|j|j|jdS)zLegacy API to run once through the event loop. This is the recommended pattern for test code. It will poll the selector once and run all callbacks scheduled in response to I/O events. N)Z call_soonstopZ run_forever)rrrrrun_onceMsr%c@s(eZdZddZddZdS)SilentWSGIRequestHandlercCs tjS)N)ioStringIO)selfrrr get_stderrZsz#SilentWSGIRequestHandler.get_stderrcGsdS)Nr)r)formatargsrrr log_message]sz$SilentWSGIRequestHandler.log_messageN)__name__ __module__ __qualname__r*r-rrrrr&Xs  r&cs4eZdZdZfddZddZS)SilentWSGIServercs/tj\}}|j|j||fS)N)super get_request settimeoutrequest_timeout)r)request client_addr) __class__rrr4eszSilentWSGIServer.get_requestcCsdS)Nr)r)r7client_addressrrr handle_errorjszSilentWSGIServer.handle_error)r.r/r0r6r4r;rr)r9rr1as r1c@seZdZddZdS)SSLWSGIServerMixinc Cstjjtjjtdd}tjj|s]tjjtjjtjdd}tjj|d}tjj|d}tj|d|d|d d }y!|j||||j Wnt k rYnXdS) Nz..ZteststestZ test_asyncioz ssl_key.pemz ssl_cert.pemkeyfilecertfileZ server_sideT) ospathjoindirname__file__isdirrZ wrap_socketZRequestHandlerClassrOSError)r)r7r:herer>r?Zssockrrrfinish_requestps$    z!SSLWSGIServerMixin.finish_requestN)r.r/r0rHrrrrr<ns r<c@seZdZdS) SSLWSGIServerN)r.r/r0rrrrrIs rIuse_sslFc #sdd}|r|n|}||tj|j_tjdfdd}|jz VWdjj|j XdS)NcSs#d}dg}|||dgS)Nz200 OK Content-type text/plains Test message)rKrLr)environZstart_responsestatusZheadersrrrapps  z_run_test_server..apptargetcsjddS)NZ poll_intervalg?)Z serve_foreverr)httpdrrsz"_run_test_server..) r&Zset_appZserver_addressaddress threadingThreadstartshutdownZ server_closerB)rSrJ server_clsserver_ssl_clsrOZ server_classZ server_threadr)rQr_run_test_servers        rZAF_UNIXc@seZdZddZdS)UnixHTTPServercCs&tjj|d|_d|_dS)Nz 127.0.0.1P) socketserverUnixStreamServer server_bindZ server_nameZ server_port)r)rrrr`s zUnixHTTPServer.server_bindN)r.r/r0r`rrrrr\s r\cs4eZdZdZddZfddZS)UnixWSGIServerr2cCstj||jdS)N)r\r`Z setup_environ)r)rrrr`s zUnixWSGIServer.server_bindcs/tj\}}|j|j|dfS)N 127.0.0.1)rbrc)r3r4r5r6)r)r7r8)r9rrr4szUnixWSGIServer.get_request)r.r/r0r6r`r4rr)r9rras  rac@seZdZddZdS)SilentUnixWSGIServercCsdS)Nr)r)r7r:rrrr;sz!SilentUnixWSGIServer.handle_errorN)r.r/r0r;rrrrrds rdc@seZdZdS)UnixSSLWSGIServerN)r.r/r0rrrrres rec Cs!tj}|jSWdQRXdS)N)tempfileNamedTemporaryFilename)filerrrgen_unix_socket_pathsrjccs@t}z |VWdytj|Wntk r:YnXXdS)N)rjr@unlinkrF)rArrrunix_socket_paths   rlccs;t+}td|d|dtdtEdHWdQRXdS)NrSrJrXrY)rlrZrdre)rJrArrrrun_test_unix_servers rmhostz 127.0.0.1portc cs.td||fd|dtdtEdHdS)NrSrJrXrY)rZr1rI)rnrorJrrrrun_test_serversrpcCsni}xHt|D]:}|jdr:|jdr:qtdd||.genFTrg& .>)r3r~_check_on_close_gennext_timeZ_clock_resolution_timersr| _selectorreaderswritersreset_countersweakrefWeakValueDictionary _transports)r)r)r9rrr~s              zTestLoop.__init__cCs|jS)N)r)r)rrrr4sz TestLoop.timecCs|r|j|7_dS)zMove test time forward.N)r)r)advancerrr advance_time7szTestLoop.advance_timec sOtj|jrKy|jjdWntk r>Yn XtddS)NrzTime generator is not finished)r3rrrsend StopIterationAssertionError)r))r9rrr<s   zTestLoop.closecGs tj||||j|.)r rrZthreading_setup_thread_cleanup)r)rrrsetUps zTestCase.setUpcCsU|jtjd|jtjd|jtj|j tj dS)N)NNN) rr rZ assertEqualsysexc_infoZ doCleanupsrZthreading_cleanuprZ reap_children)r)rrrtearDowns    zTestCase.tearDowncOsGddd}|S)Nc@s(eZdZddZddZdS)z!TestCase.subTest..EmptyCMcSsdS)Nr)r)rrr __enter__sz+TestCase.subTest..EmptyCM.__enter__cWsdS)Nr)r)excrrr__exit__sz*TestCase.subTest..EmptyCM.__exit__N)r.r/r0rrrrrrEmptyCMs  rr)r)r,rrrrrsubTestszTestCase.subTest) r.r/r0rrrrrrZPY34rrrrrrs    rc cs;tj}ztjtjddVWdtj|XdS)zrContext manager to disable asyncio logger. For example, it can be used to ignore warnings in debug mode. rN)rlevelsetLevelloggingCRITICAL)Z old_levelrrrdisable_loggers   rcCs=tjtj}||_||_||_d|j_|S)z'Create a mock of a non-blocking socket.g)rZ MagicMocksocketprotorwfamily gettimeoutrr)rrwrsockrrrmock_nonblocking_sockets     rcCstjdddS)Nz'asyncio.sslproto._is_sslproto_availablerrF)rZpatchrrrrforce_legacy_ssl_supports r)Krr contextlibr'rr@rrr^rrfrTrZunittestrrZ http.serverrZwsgiref.simple_serverrrr ImportErrorrcrrr r r r Z coroutinesr logrr=rplatformZ windows_utilsrrrr#r%r&r1r<rIrZhasattrr_r\rardrerjcontextmanagerrlrmrpr{ BaseSelectorr|Z BaseEventLooprrvrrrrr IPPROTO_TCP SOCK_STREAMAF_INETrrrrrrs                           -