ñÕYfÃ8ã@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$dkrÁddl%m&Z&nddlm&Z&dd„Z'dd„Z(ddd„Z)dd„Z*Gdd„deƒZ+Gdd„deƒZ,Gdd „d ƒZ-Gd!d"„d"e-e,ƒZ.d#d$d%d&„Z/e0ed'ƒrGd(d)„d)ej1eƒZ2Gd*d+„d+e2eƒZ3Gd,d-„d-e3ƒZ4Gd.d/„d/e-e4ƒZ5d0d1„Z6ej7d2d3„ƒZ8ej7d#d$d4d5„ƒZ9ej7d6d7d8dd#d$d9d:„ƒZ:d;d<„Z;Gd=d>„d>ej<ƒZ=Gd?d@„d@ej>ƒZ?dAdB„Z@GdCdD„dDeAƒZBdEdF„ZCGdGdH„dHe jDƒZDej7dIdJ„ƒZEejFejGejHdKdL„ZIdMdN„ZJdS)OzUtilities shared by tests.éN)Úmock)Ú HTTPServer)ÚWSGIRequestHandlerÚ WSGIServeré)Ú base_events)Úcompat)Úevents)Úfutures)Ú selectors)Útasks)Ú coroutine)Úlogger)ÚsupportÚwin32)Ú socketpaircCs$tdkrdStjtjƒSdS)N)ÚsslZ SSLContextZPROTOCOL_SSLv23©rrú7/opt/alt/python35/lib64/python3.5/asyncio/test_utils.pyÚdummy_ssl_context-s rc CsVtdd„ƒ}|ƒ}|j|ƒ}d|_z|j|ƒWd|jƒXdS)NcSsdS)NrrrrrÚonce5szrun_briefly..onceF)r Z create_taskZ_log_destroy_pendingÚrun_until_completeÚclose)ÚlooprÚgenÚtrrrÚ run_briefly4s  récCsttjƒ|}x]|ƒso|dk rP|tjƒ}|dkrPtjƒ‚|jtjdd|ƒƒqWdS)Nrgü©ñÒMbP?r)Útimer Ú TimeoutErrorrr Zsleep)rZpredÚtimeoutZdeadlinerrrÚ run_untilCs    r!cCs|j|jƒ|jƒdS)zÊLegacy 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_soonÚstopZ run_forever)rrrrÚrun_onceMsr#c@s(eZdZdd„Zdd„ZdS)ÚSilentWSGIRequestHandlercCs tjƒS)N)ÚioÚStringIO)ÚselfrrrÚ get_stderrZsz#SilentWSGIRequestHandler.get_stderrcGsdS)Nr)r'ÚformatÚargsrrrÚ log_message]sz$SilentWSGIRequestHandler.log_messageN)Ú__name__Ú __module__Ú __qualname__r(r+rrrrr$Xs  r$cs4eZdZdZ‡fdd†Zdd„Z‡S)ÚSilentWSGIServerécs/tƒjƒ\}}|j|jƒ||fS)N)ÚsuperÚ get_requestÚ settimeoutÚrequest_timeout)r'ÚrequestÚ client_addr)Ú __class__rrr2eszSilentWSGIServer.get_requestcCsdS)Nr)r'r5Úclient_addressrrrÚ handle_errorjszSilentWSGIServer.handle_error)r,r-r.r4r2r9rr)r7rr/as r/c@seZdZdd„ZdS)ÚSSLWSGIServerMixinc Csâtjjtjjtƒddƒ}tjj|ƒs]tjjtjjtjƒddƒ}tjj|dƒ}tjj|dƒ}tj|d|d|d d ƒ}y!|j|||ƒ|j ƒWnt k rÝYnXdS) Nz..ZtestsÚtestZ test_asyncioz ssl_key.pemz ssl_cert.pemÚkeyfileÚcertfileZ server_sideT) ÚosÚpathÚjoinÚdirnameÚ__file__ÚisdirrZ wrap_socketZRequestHandlerClassrÚOSError)r'r5r8Úherer<r=ZssockrrrÚfinish_requestps$    z!SSLWSGIServerMixin.finish_requestN)r,r-r.rFrrrrr:ns r:c@seZdZdS)Ú SSLWSGIServerN)r,r-r.rrrrrG‡s rGÚuse_sslFc #s�dd„}|r|n|}||tƒ‰ˆj|ƒˆjˆ_tjd‡fdd†ƒ}|jƒz ˆVWdˆjƒˆjƒ|j ƒXdS)NcSs#d}dg}|||ƒdgS)Nz200 OKú Content-typeú text/plains Test message)rIrJr)ÚenvironZstart_responseZstatusZheadersrrrÚapp�s  z_run_test_server..appÚtargetcsˆjddƒS)NZ poll_intervalgš™™™™™©?)Z serve_foreverr)ÚhttpdrrÚšsz"_run_test_server..) r$Zset_appZserver_addressÚaddressÚ threadingZThreadÚstartZshutdownZ server_closer@)rPrHÚ server_clsÚserver_ssl_clsrLZ server_classZ server_threadr)rNrÚ_run_test_server‹s        rUZAF_UNIXc@seZdZdd„ZdS)ÚUnixHTTPServercCs&tjj|ƒd|_d|_dS)Nz 127.0.0.1éP)Ú socketserverÚUnixStreamServerÚ server_bindZ server_nameZ server_port)r'rrrrZ¨s zUnixHTTPServer.server_bindN)r,r-r.rZrrrrrV¦s rVcs4eZdZdZdd„Z‡fdd†Z‡S)ÚUnixWSGIServerr0cCstj|ƒ|jƒdS)N)rVrZZ setup_environ)r'rrrrZ²s zUnixWSGIServer.server_bindcs/tƒjƒ\}}|j|jƒ|dfS)Nú 127.0.0.1Ú)r\r])r1r2r3r4)r'r5r6)r7rrr2¶szUnixWSGIServer.get_request)r,r-r.r4rZr2rr)r7rr[®s  r[c@seZdZdd„ZdS)ÚSilentUnixWSGIServercCsdS)Nr)r'r5r8rrrr9Äsz!SilentUnixWSGIServer.handle_errorN)r,r-r.r9rrrrr^Âs r^c@seZdZdS)ÚUnixSSLWSGIServerN)r,r-r.rrrrr_Ès r_c Cs!tjƒ�}|jSWdQRXdS)N)ÚtempfileZNamedTemporaryFileÚname)ÚfilerrrÚgen_unix_socket_pathÌsrcccs@tƒ}z |VWdytj|ƒWntk r:YnXXdS)N)rcr>ÚunlinkrD)r?rrrÚunix_socket_pathÑs   reccs;tƒ�+}td|d|dtdtƒEdHWdQRXdS)NrPrHrSrT)rerUr^r_)rHr?rrrÚrun_test_unix_serverÝs rfÚhostz 127.0.0.1Úportc cs.td||fd|dtdtƒEdHdS)NrPrHrSrT)rUr/rG)rgrhrHrrrÚrun_test_serveråsricCsni}xHt|ƒD]:}|jdƒr:|jdƒr:qtddƒ||.genFTrg•Ö&è .>)r1rvÚ_check_on_closeÚ_genÚnextÚ_timeZ_clock_resolutionÚ_timersrtZ _selectorÚreadersÚwritersÚreset_countersÚweakrefÚWeakValueDictionaryÚ _transports)r'r)r7rrrvs              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 sOtƒjƒ|jrKy|jjdƒWntk r>Yn Xtdƒ‚dS)NrzTime generator is not finished)r1rr€r�ÚsendÚ StopIterationÚAssertionError)r')r7rrr<s   zTestLoop.closecGs tj|||ƒ|j|.)r rÂrZthreading_setupÚ_thread_cleanup)r'rrrÚsetUpÈs zTestCase.setUpcCsU|jƒtjdƒ|jtjƒdƒ|jƒtj|j Œtj ƒdS)N)NNN) rÃr rÀZ assertEqualÚsysÚexc_infoZ doCleanupsrZthreading_cleanuprÄZ reap_children)r'rrrÚtearDownÍs    zTestCase.tearDowncOsGdd„dƒ}|ƒS)Nc@s(eZdZdd„Zdd„ZdS)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-r.rÉrËrrrrÚEmptyCMÝs  rÌr)r'r*r±rÌrrrÚsubTestÜszTestCase.subTest) r,r-r.rÀrÁrÃrÅrÈrZPY34rÍrrrrr¾¸s    r¾c cs;tj}ztjtjdƒdVWdtj|ƒXdS)zrContext manager to disable asyncio logger. For example, it can be used to ignore warnings in debug mode. rN)rÚlevelZsetLevelÚloggingZCRITICAL)Z old_levelrrrÚdisable_loggerås   rÐcCs=tjtjƒ}||_||_||_d|j_|S)z'Create a mock of a non-blocking socket.g)rZ MagicMockÚsocketÚprotorpÚfamilyZ gettimeoutrk)rÒrprÓZsockrrrÚmock_nonblocking_socketós     rÔcCstjdddƒS)Nz'asyncio.sslproto._is_sslproto_availablerkF)rZpatchrrrrÚforce_legacy_ssl_supportþs rÕ)Kr®r¥Ú contextlibr%rÏr>r´rÑrXrÆr`rQrZunittestrˆrZ http.serverrZwsgiref.simple_serverrrrÚ ImportErrorr]rrr r r r Z coroutinesr Úlogrr;rÚplatformZ windows_utilsrrrr!r#r$r/r:rGrUÚhasattrrYrVr[r^r_rcÚcontextmanagerrerfrirsZ BaseSelectorrtZ BaseEventLooprror¶r²r½r¾rÐZ IPPROTO_TCPZ SOCK_STREAMZAF_INETrÔrÕrrrrÚs€                         –  -