3 Õì2aó:ã @süddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddl mZddlmZddlmZmZy ddlZWnek r¼dZYnXddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lm Z ddl!m"Z"ej#dk�rDddl$m%Z%n ddlm%Z%dd„Z&e&dƒZ'e&dƒZ(dd„Z)dd„Z*dQdd„Z+dd„Z,Gdd„deƒZ-Gd d!„d!eƒZ.Gd"d#„d#ƒZ/Gd$d%„d%e/e.ƒZ0d&d'œd(d)„Z1e2ed*ƒ�rVGd+d,„d,ej3eƒZ4Gd-d.„d.e4eƒZ5Gd/d0„d0e5ƒZ6Gd1d2„d2e/e6ƒZ7d3d4„Z8ej9d5d6„ƒZ:ej9d&d'œd7d8„ƒZ;ej9d9dd&d:œd;d<„ƒZ„Z=Gd?d@„d@ej>ƒZ?GdAdB„dBej@ƒZAdCdD„ZBGdEdF„dFeCƒZDdGdH„ZEGdIdJ„dJe jFƒZFej9dKdL„ƒZGejHejIejJfdMdN„ZKdOdP„ZLdS)RéN)Úmock)Ú HTTPServer)ÚWSGIRequestHandlerÚ WSGIServeré)Ú base_events)Úcompat)Úevents)Úfutures)Ú selectors)Útasks)Ú coroutine)Úlogger)ÚsupportÚwin32)Ú socketpaircCs`ttdƒr*tjjtj|ƒ}tjj|ƒr*|Stjjtjjtjƒd|ƒ}tjj|ƒrT|St |ƒ‚dS)NÚ TEST_HOME_DIRÚtest) ÚhasattrrÚosÚpathÚjoinrÚisfileÚdirnameÚ__file__ÚFileNotFoundError)ÚfilenameÚfullname©rú//opt/alt/python36/lib64/python3.6/test_utils.pyÚ data_file-s   r z ssl_cert.pemz ssl_key.pemcCstdkr dStjtjƒSdS)N)ÚsslÚ SSLContextZPROTOCOL_SSLv23rrrrÚdummy_ssl_context<sr#c Cs@tdd„ƒ}|ƒ}|j|ƒ}d|_z|j|ƒWd|jƒXdS)NcSsdS)NrrrrrÚonceDszrun_briefly..onceF)r Z create_taskZ_log_destroy_pendingÚrun_until_completeÚclose)Úloopr$ÚgenÚtrrrÚ run_brieflyCs  r*écCsTtjƒ|}xB|ƒsN|dk r8|tjƒ}|dkr8tjƒ‚|jtjd|d�ƒqWdS)Nrgü©ñÒMbP?)r')Útimer Ú TimeoutErrorr%r Zsleep)r'ZpredÚtimeoutZdeadlinerrrÚ run_untilRs  r/cCs|j|jƒ|jƒdS)N)Z call_soonÚstopZ run_forever)r'rrrÚrun_once\s r1c@seZdZdd„Zdd„ZdS)ÚSilentWSGIRequestHandlercCstjƒS)N)ÚioÚStringIO)ÚselfrrrÚ get_stderrisz#SilentWSGIRequestHandler.get_stderrcGsdS)Nr)r5ÚformatÚargsrrrÚ log_messagelsz$SilentWSGIRequestHandler.log_messageN)Ú__name__Ú __module__Ú __qualname__r6r9rrrrr2gsr2cs(eZdZdZ‡fdd„Zdd„Z‡ZS)ÚSilentWSGIServerécs"tƒjƒ\}}|j|jƒ||fS)N)ÚsuperÚ get_requestÚ settimeoutÚrequest_timeout)r5ÚrequestÚ client_addr)Ú __class__rrr@ts zSilentWSGIServer.get_requestcCsdS)Nr)r5rCÚclient_addressrrrÚ handle_erroryszSilentWSGIServer.handle_error)r:r;r<rBr@rGÚ __classcell__rr)rErr=ps r=c@seZdZdd„ZdS)ÚSSLWSGIServerMixinc Cs^t}t}tjƒ}|j||ƒ|j|dd�}y|j|||ƒ|jƒWntk rXYnXdS)NT)Z server_side) ÚONLYKEYÚONLYCERTr!r"Zload_cert_chainZ wrap_socketZRequestHandlerClassr&ÚOSError)r5rCrFZkeyfileZcertfileÚcontextZssockrrrÚfinish_requests  z!SSLWSGIServerMixin.finish_requestN)r:r;r<rNrrrrrI}srIc@s eZdZdS)Ú SSLWSGIServerN)r:r;r<rrrrrO’srOF)Úuse_sslc #svdd„}|r|n|}||tƒ‰ˆj|ƒˆjˆ_tj‡fdd„d�}|jƒz ˆVWdˆjƒˆjƒ|j ƒXdS)NcSsd}dg}|||ƒdgS)Nz200 OKú Content-typeú text/plains Test message)rQrRr)ÚenvironZstart_responseÚstatusZheadersrrrÚapp˜s z_run_test_server..appcs ˆjdd�S)Ngš™™™™™©?)Z poll_interval)Z serve_foreverr)ÚhttpdrrÚ¥sz"_run_test_server..)Útarget) r2Zset_appZserver_addressÚaddressÚ threadingZThreadÚstartÚshutdownZ server_closer)rYrPÚ server_clsÚserver_ssl_clsrUZ server_classZ server_threadr)rVrÚ_run_test_server–s    r_ZAF_UNIXc@seZdZdd„ZdS)ÚUnixHTTPServercCstjj|ƒd|_d|_dS)Nz 127.0.0.1éP)Ú socketserverÚUnixStreamServerÚ server_bindZ server_nameZ server_port)r5rrrrd³s zUnixHTTPServer.server_bindN)r:r;r<rdrrrrr`±sr`cs(eZdZdZdd„Z‡fdd„Z‡ZS)ÚUnixWSGIServerr>cCstj|ƒ|jƒdS)N)r`rdZ setup_environ)r5rrrrd½s zUnixWSGIServer.server_bindcs"tƒjƒ\}}|j|jƒ|dfS)Nú 127.0.0.1Ú)rfrg)r?r@rArB)r5rCrD)rErrr@Ás zUnixWSGIServer.get_request)r:r;r<rBrdr@rHrr)rErre¹srec@seZdZdd„ZdS)ÚSilentUnixWSGIServercCsdS)Nr)r5rCrFrrrrGÏsz!SilentUnixWSGIServer.handle_errorN)r:r;r<rGrrrrrhÍsrhc@s eZdZdS)ÚUnixSSLWSGIServerN)r:r;r<rrrrriÓsric Cstjƒ�}|jSQRXdS)N)ÚtempfileZNamedTemporaryFileÚname)ÚfilerrrÚgen_unix_socket_path×s rmccs<tƒ}z |VWdytj|ƒWntk r4YnXXdS)N)rmrÚunlinkrL)rrrrÚunix_socket_pathÜs roc cs,tƒ�}t||ttd�EdHWdQRXdS)N)rYrPr]r^)ror_rhri)rPrrrrÚrun_test_unix_serverèsrpz 127.0.0.1)ÚhostÚportrPccst||f|ttd�EdHdS)N)rYrPr]r^)r_r=rO)rqrrrPrrrÚrun_test_serverðs rscCsPi}x4t|ƒD](}|jdƒr(|jdƒr(qtdd�||<qWtd|f|j|ƒƒS)NÚ__)Ú return_valueZ TestProtocol)ÚdirÚ startswithÚendswithÚ MockCallbackÚtypeÚ __bases__)ÚbaseZdctrkrrrÚmake_test_protocol÷s r}c@s6eZdZdd„Zd dd„Zdd„Zdd „Zd d „ZdS) Ú TestSelectorcCs i|_dS)N)Úkeys)r5rrrÚ__init__szTestSelector.__init__NcCstj|d||ƒ}||j|<|S)Nr)r Z SelectorKeyr)r5Úfileobjr ÚdataÚkeyrrrÚregisters zTestSelector.registercCs |jj|ƒS)N)rÚpop)r5r�rrrÚ unregister szTestSelector.unregistercCsgS)Nr)r5r.rrrÚselectszTestSelector.selectcCs|jS)N)r)r5rrrÚget_mapszTestSelector.get_map)N)r:r;r<r€r„r†r‡rˆrrrrr~s  r~csÊeZdZd,‡fdd„ Zdd„Zdd„Z‡fdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Z‡fd$d%„Z‡fd&d'„Zd(d)„Zd*d+„Z‡ZS)-ÚTestLoopNcsvtƒjƒ|dkr"dd„}d|_nd|_|ƒ|_t|jƒd|_d|_g|_tƒ|_ i|_ i|_ |j ƒt jƒ|_dS)Ncss dVdS)Nrrrrrr(,szTestLoop.__init__..genFTrg•Ö&è .>)r?r€Ú_check_on_closeÚ_genÚnextÚ_timeZ_clock_resolutionÚ_timersr~Z _selectorÚreadersÚwritersÚreset_countersÚweakrefÚWeakValueDictionaryÚ _transports)r5r()rErrr€(s  zTestLoop.__init__cCs|jS)N)r�)r5rrrr,?sz TestLoop.timecCs|r|j|7_dS)N)r�)r5ÚadvancerrrÚ advance_timeBszTestLoop.advance_timec sBtƒjƒ|jr>y|jjdƒWntk r4Yn Xtdƒ‚dS)NrzTime generator is not finished)r?r&rŠr‹ÚsendÚ StopIterationÚAssertionError)r5)rErrr&Gs zTestLoop.closecGstj|||ƒ|j|<dS)N)r ÚHandler�)r5ÚfdÚcallbackr8rrrÚ _add_readerQszTestLoop._add_readercCs0|j|d7<||jkr(|j|=dSdSdS)NrTF)Úremove_reader_countr�)r5r›rrrÚ_remove_readerTs  zTestLoop._remove_readercGsh||jkrtd|›d�ƒ‚|j|}|j|krDtd|j›d|›�ƒ‚|j|krdtd|j›d|›�ƒ‚dS)Nzfd z is not registeredzunexpected callback: z != zunexpected callback args: )r�r™Z _callbackZ_args)r5r›rœr8ÚhandlerrrÚ assert_reader\s    zTestLoop.assert_readercCs||jkrtd|›d�ƒ‚dS)Nzfd z is registered)r�r™)r5r›rrrÚassert_no_readergs zTestLoop.assert_no_readercGstj|||ƒ|j|<dS)N)r ršr�)r5r›rœr8rrrÚ _add_writerkszTestLoop._add_writercCs0|j|d7<||jkr(|j|=dSdSdS)NrTF)Úremove_writer_countr�)r5r›rrrÚ_remove_writerns  zTestLoop._remove_writercGs|j|}dS)N)r�)r5r›rœr8r rrrÚ assert_writervs zTestLoop.assert_writerc Cs8y|j|}Wntk r"YnXtdj||ƒƒ‚dS)Nz.File descriptor {!r} is used by transport {!r})r”ÚKeyErrorÚ RuntimeErrorr7)r5r›Z transportrrrÚ_ensure_fd_no_transport~sz TestLoop._ensure_fd_no_transportcGs|j|ƒ|j||f|žŽS)N)r©r�)r5r›rœr8rrrÚ add_readerˆs zTestLoop.add_readercCs|j|ƒ|j|ƒS)N)r©rŸ)r5r›rrrÚ remove_reader�s zTestLoop.remove_readercGs|j|ƒ|j||f|žŽS)N)r©r£)r5r›rœr8rrrÚ add_writer’s zTestLoop.add_writercCs|j|ƒ|j|ƒS)N)r©r¥)r5r›rrrÚ remove_writer—s zTestLoop.remove_writercCstjtƒ|_tjtƒ|_dS)N)Ú collectionsÚ defaultdictÚintržr¤)r5rrrr‘œs zTestLoop.reset_counterscs:tƒjƒx$|jD]}|jj|ƒ}|j|ƒqWg|_dS)N)r?Ú _run_oncerŽr‹r—r–)r5Úwhenr•)rErrr± s    zTestLoop._run_oncecs |jj|ƒtƒj||f|žŽS)N)rŽÚappendr?Úcall_at)r5r²rœr8)rErrr´§s zTestLoop.call_atcCsdS)Nr)r5Z event_listrrrÚ_process_events«szTestLoop._process_eventscCsdS)Nr)r5rrrÚ_write_to_self®szTestLoop._write_to_self)N)r:r;r<r€r,r–r&r�rŸr¡r¢r£r¥r¦r©rªr«r¬r­r‘r±r´rµr¶rHrr)rErr‰s*     r‰cKstjfddgi|—ŽS)NÚspecÚ__call__)rZMock)Úkwargsrrrry²sryc@seZdZdd„ZdS)Ú MockPatterncCsttjt|ƒ|tjƒƒS)N)ÚboolÚreÚsearchÚstrÚS)r5ÚotherrrrÚ__eq__¿szMockPattern.__eq__N)r:r;r<rÁrrrrrº¶s rºcCs$tj|ƒ}|dkr td|fƒ‚|S)Nzunable to get the source of %r)r Z_get_function_sourceÚ ValueError)ÚfuncÚsourcerrrÚget_function_sourceÃs rÅc@sVeZdZedd„ƒZddœdd„Zddd „Zd d „Zd d „Zdd„Z e j sRdd„Z dS)ÚTestCasecCs&|j}|dk r|jdd�|jƒdS)NT)Úwait)Z_default_executorr\r&)r'ÚexecutorrrrÚ close_loopËs zTestCase.close_loopT)ÚcleanupcCs tjdƒ|r|j|j|ƒdS)N)r Úset_event_loopZ addCleanuprÉ)r5r'rÊrrrrËÒs zTestCase.set_event_loopNcCst|ƒ}|j|ƒ|S)N)r‰rË)r5r(r'rrrÚ new_test_loopÙs zTestCase.new_test_loopcCs |jt_dS)N)Ú_get_running_loopr )r5rrrÚunpatch_get_running_loopÞsz!TestCase.unpatch_get_running_loopcCs tj|_dd„t_tjƒ|_dS)NcSsdS)NrrrrrrWãsz TestCase.setUp..)r rÍrZthreading_setupÚ_thread_cleanup)r5rrrÚsetUpás zTestCase.setUpcCsB|jƒtjdƒ|jtjƒdƒ|jƒtj|j Žtj ƒdS)N)NNN) rÎr rËZ assertEqualÚsysÚexc_infoZ doCleanupsrZthreading_cleanuprÏZ reap_children)r5rrrÚtearDownæs   zTestCase.tearDowncOsGdd„dƒ}|ƒS)Nc@seZdZdd„Zdd„ZdS)z!TestCase.subTest..EmptyCMcSsdS)Nr)r5rrrÚ __enter__÷sz+TestCase.subTest..EmptyCM.__enter__cWsdS)Nr)r5ÚexcrrrÚ__exit__ùsz*TestCase.subTest..EmptyCM.__exit__N)r:r;r<rÔrÖrrrrÚEmptyCMösr×r)r5r8r¹r×rrrÚsubTestõszTestCase.subTest)N) r:r;r<Ú staticmethodrÉrËrÌrÎrÐrÓrZPY34rØrrrrrÆÊs   rÆc cs2tj}ztjtjdƒdVWdtj|ƒXdS)Nr)rÚlevelZsetLevelÚloggingZCRITICAL)Z old_levelrrrÚdisable_loggerþs  rÜcCs*tjtjƒ}||_||_||_d|j_|S)Ng)rZ MagicMockÚsocketÚprotorzÚfamilyZ gettimeoutru)rÞrzrßZsockrrrÚmock_nonblocking_socket s  ràcCstjddd�S)Nz'asyncio.sslproto._is_sslproto_availableF)ru)rZpatchrrrrÚforce_legacy_ssl_supportsrá)r+)Mr®Ú contextlibr3rÛrr¼rÝrbrÑrjrZr,Zunittestr’rZ http.serverrZwsgiref.simple_serverrrr!Ú ImportErrorrgrrr r r r Z coroutinesr ÚlogrrrÚplatformZ windows_utilsrr rKrJr#r*r/r1r2r=rIrOr_rrcr`rerhrirmÚcontextmanagerrorprsr}Z BaseSelectorr~Z BaseEventLoopr‰ryr¾rºrÅrÆrÜZ IPPROTO_TCPZ SOCK_STREAMZAF_INETràrárrrrÚs†                        4