3 2a: @sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddl mZddlmZddlmZmZy ddlZWnek rdZYnXddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lm Z ddl!m"Z"ej#dkrDddl$m%Z%n ddlm%Z%ddZ&e&dZ'e&dZ(ddZ)ddZ*dQddZ+ddZ,GdddeZ-Gd d!d!eZ.Gd"d#d#Z/Gd$d%d%e/e.Z0d&d'd(d)Z1e2ed*rVGd+d,d,ej3eZ4Gd-d.d.e4eZ5Gd/d0d0e5Z6Gd1d2d2e/e6Z7d3d4Z8ej9d5d6Z:ej9d&d'd7d8Z;ej9d9dd&d:d;d<ZZ=Gd?d@d@ej>Z?GdAdBdBej@ZAdCdDZBGdEdFdFeCZDdGdHZEGdIdJdJe jFZFej9dKdLZGejHejIejJfdMdNZKdOdPZLdS)RN)mock) HTTPServer)WSGIRequestHandler WSGIServer) base_events)compat)events)futures) selectors)tasks) coroutine)logger)supportwin32) socketpaircCs`ttdr*tjjtj|}tjj|r*|Stjjtjjtjd|}tjj|rT|St |dS)N TEST_HOME_DIRtest) hasattrrospathjoinrisfiledirname__file__FileNotFoundError)filenamefullnamer//opt/alt/python36/lib64/python3.6/test_utils.py data_file-s   r z ssl_cert.pemz ssl_key.pemcCstdkr dStjtjSdS)N)ssl SSLContextZPROTOCOL_SSLv23rrrrdummy_ssl_context<sr#c Cs@tdd}|}|j|}d|_z|j|Wd|jXdS)NcSsdS)NrrrrronceDszrun_briefly..onceF)r Z create_taskZ_log_destroy_pendingrun_until_completeclose)loopr$gentrrr run_brieflyCs  r*cCsTtj|}xB|sN|dk r8|tj}|dkr8tj|jtjd|dqWdS)NrgMbP?)r')timer TimeoutErrorr%r Zsleep)r'ZpredtimeoutZdeadlinerrr run_untilRs  r/cCs|j|j|jdS)N)Z call_soonstopZ run_forever)r'rrrrun_once\s r1c@seZdZddZddZdS)SilentWSGIRequestHandlercCstjS)N)ioStringIO)selfrrr get_stderrisz#SilentWSGIRequestHandler.get_stderrcGsdS)Nr)r5formatargsrrr log_messagelsz$SilentWSGIRequestHandler.log_messageN)__name__ __module__ __qualname__r6r9rrrrr2gsr2cs(eZdZdZfddZddZZS)SilentWSGIServercs"tj\}}|j|j||fS)N)super get_request settimeoutrequest_timeout)r5request client_addr) __class__rrr@ts zSilentWSGIServer.get_requestcCsdS)Nr)r5rCclient_addressrrr handle_erroryszSilentWSGIServer.handle_error)r:r;r<rBr@rG __classcell__rr)rErr=ps r=c@seZdZddZdS)SSLWSGIServerMixinc Cs^t}t}tj}|j|||j|dd}y|j||||jWntk rXYnXdS)NT)Z server_side) ONLYKEYONLYCERTr!r"Zload_cert_chainZ wrap_socketZRequestHandlerClassr&OSError)r5rCrFZkeyfileZcertfilecontextZssockrrrfinish_requests  z!SSLWSGIServerMixin.finish_requestN)r:r;r<rNrrrrrI}srIc@s eZdZdS) SSLWSGIServerN)r:r;r<rrrrrOsrOF)use_sslc #svdd}|r|n|}||tj|j_tjfddd}|jz VWdjj|j XdS)NcSsd}dg}|||dgS)Nz200 OK Content-type text/plains Test message)rQrRr)environZstart_responsestatusZheadersrrrapps z_run_test_server..appcs jddS)Ng?)Z poll_interval)Z serve_foreverr)httpdrrsz"_run_test_server..)target) r2Zset_appZserver_addressaddress threadingZThreadstartshutdownZ server_closer)rYrP server_clsserver_ssl_clsrUZ server_classZ server_threadr)rVr_run_test_servers    r_ZAF_UNIXc@seZdZddZdS)UnixHTTPServercCstjj|d|_d|_dS)Nz 127.0.0.1P) socketserverUnixStreamServer server_bindZ server_nameZ server_port)r5rrrrds zUnixHTTPServer.server_bindN)r:r;r<rdrrrrr`sr`cs(eZdZdZddZfddZZS)UnixWSGIServerr>cCstj||jdS)N)r`rdZ setup_environ)r5rrrrds zUnixWSGIServer.server_bindcs"tj\}}|j|j|dfS)N 127.0.0.1)rfrg)r?r@rArB)r5rCrD)rErrr@s zUnixWSGIServer.get_request)r:r;r<rBrdr@rHrr)rErresrec@seZdZddZdS)SilentUnixWSGIServercCsdS)Nr)r5rCrFrrrrGsz!SilentUnixWSGIServer.handle_errorN)r:r;r<rGrrrrrhsrhc@s eZdZdS)UnixSSLWSGIServerN)r:r;r<rrrrrisric Cstj}|jSQRXdS)N)tempfileZNamedTemporaryFilename)filerrrgen_unix_socket_paths rmccs<t}z |VWdytj|Wntk r4YnXXdS)N)rmrunlinkrL)rrrrunix_socket_paths roc cs,t}t||ttdEdHWdQRXdS)N)rYrPr]r^)ror_rhri)rPrrrrrun_test_unix_serversrpz 127.0.0.1)hostportrPccst||f|ttdEdHdS)N)rYrPr]r^)r_r=rO)rqrrrPrrrrun_test_servers rscCsPi}x4t|D](}|jdr(|jdr(qtdd||<qWtd|f|j|S)N__) return_valueZ TestProtocol)dir startswithendswith MockCallbacktype __bases__)baseZdctrkrrrmake_test_protocols r}c@s6eZdZddZd ddZddZdd Zd d ZdS) TestSelectorcCs i|_dS)N)keys)r5rrr__init__szTestSelector.__init__NcCstj|d||}||j|<|S)Nr)r Z SelectorKeyr)r5fileobjr datakeyrrrregisters zTestSelector.registercCs |jj|S)N)rpop)r5rrrr unregister szTestSelector.unregistercCsgS)Nr)r5r.rrrselectszTestSelector.selectcCs|jS)N)r)r5rrrget_mapszTestSelector.get_map)N)r:r;r<rrrrrrrrrr~s  r~cseZdZd,fdd ZddZddZfdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zfd$d%Zfd&d'Zd(d)Zd*d+ZZS)-TestLoopNcsvtj|dkr"dd}d|_nd|_||_t|jd|_d|_g|_t|_ i|_ i|_ |j t j|_dS)Ncss dVdS)Nrrrrrr(,szTestLoop.__init__..genFTrg& .>)r?r_check_on_close_gennext_timeZ_clock_resolution_timersr~Z _selectorreaderswritersreset_countersweakrefWeakValueDictionary _transports)r5r()rErrr(s  zTestLoop.__init__cCs|jS)N)r)r5rrrr,?sz TestLoop.timecCs|r|j|7_dS)N)r)r5advancerrr advance_timeBszTestLoop.advance_timec sBtj|jr>y|jjdWntk r4Yn XtddS)NrzTime generator is not finished)r?r&rrsend StopIterationAssertionError)r5)rErrr&Gs zTestLoop.closecGstj||||j|<dS)N)r Handler)r5fdcallbackr8rrr _add_readerQszTestLoop._add_readercCs0|j|d7<||jkr(|j|=dSdSdS)NrTF)remove_reader_countr)r5rrrr_remove_readerTs  zTestLoop._remove_readercGsh||jkrtd|d|j|}|j|krDtd|jd||j|krdtd|jd|dS)Nzfd z is not registeredzunexpected callback: z != zunexpected callback args: )rrZ _callbackZ_args)r5rrr8handlerrr assert_reader\s    zTestLoop.assert_readercCs||jkrtd|ddS)Nzfd z is registered)rr)r5rrrrassert_no_readergs zTestLoop.assert_no_readercGstj||||j|<dS)N)r rr)r5rrr8rrr _add_writerkszTestLoop._add_writercCs0|j|d7<||jkr(|j|=dSdSdS)NrTF)remove_writer_countr)r5rrrr_remove_writerns  zTestLoop._remove_writercGs|j|}dS)N)r)r5rrr8rrrr assert_writervs zTestLoop.assert_writerc Cs8y|j|}Wntk r"YnXtdj||dS)Nz.File descriptor {!r} is used by transport {!r})rKeyError RuntimeErrorr7)r5rZ transportrrr_ensure_fd_no_transport~sz TestLoop._ensure_fd_no_transportcGs|j||j||f|S)N)rr)r5rrr8rrr add_readers zTestLoop.add_readercCs|j||j|S)N)rr)r5rrrr remove_readers zTestLoop.remove_readercGs|j||j||f|S)N)rr)r5rrr8rrr add_writers zTestLoop.add_writercCs|j||j|S)N)rr)r5rrrr remove_writers zTestLoop.remove_writercCstjt|_tjt|_dS)N) collections defaultdictintrr)r5rrrrs zTestLoop.reset_counterscs:tjx$|jD]}|jj|}|j|qWg|_dS)N)r? _run_oncerrrr)r5whenr)rErrrs    zTestLoop._run_oncecs |jj|tj||f|S)N)rappendr?call_at)r5rrr8)rErrrs zTestLoop.call_atcCsdS)Nr)r5Z event_listrrr_process_eventsszTestLoop._process_eventscCsdS)Nr)r5rrr_write_to_selfszTestLoop._write_to_self)N)r:r;r<rr,rr&rrrrrrrrrrrrrrrrrrHrr)rErrs*     rcKstjfddgi|S)Nspec__call__)rZMock)kwargsrrrrysryc@seZdZddZdS) MockPatterncCsttjt||tjS)N)boolresearchstrS)r5otherrrr__eq__szMockPattern.__eq__N)r:r;r<rrrrrrs rcCs$tj|}|dkr td|f|S)Nzunable to get the source of %r)r Z_get_function_source ValueError)funcsourcerrrget_function_sources rc@sVeZdZeddZddddZddd Zd d Zd d ZddZ e j sRddZ dS)TestCasecCs&|j}|dk r|jdd|jdS)NT)wait)Z_default_executorr\r&)r'executorrrr close_loops zTestCase.close_loopT)cleanupcCs tjd|r|j|j|dS)N)r set_event_loopZ addCleanupr)r5r'rrrrrs zTestCase.set_event_loopNcCst|}|j||S)N)rr)r5r(r'rrr new_test_loops zTestCase.new_test_loopcCs |jt_dS)N)_get_running_loopr )r5rrrunpatch_get_running_loopsz!TestCase.unpatch_get_running_loopcCs tj|_ddt_tj|_dS)NcSsdS)NrrrrrrWsz TestCase.setUp..)r rrZthreading_setup_thread_cleanup)r5rrrsetUps zTestCase.setUpcCsB|jtjd|jtjd|jtj|j tj dS)N)NNN) rr rZ assertEqualsysexc_infoZ doCleanupsrZthreading_cleanuprZ reap_children)r5rrrtearDowns   zTestCase.tearDowncOsGddd}|S)Nc@seZdZddZddZdS)z!TestCase.subTest..EmptyCMcSsdS)Nr)r5rrr __enter__sz+TestCase.subTest..EmptyCM.__enter__cWsdS)Nr)r5excrrr__exit__sz*TestCase.subTest..EmptyCM.__exit__N)r:r;r<rrrrrrEmptyCMsrr)r5r8rrrrrsubTestszTestCase.subTest)N) r:r;r< staticmethodrrrrrrrZPY34rrrrrrs   rc cs2tj}ztjtjddVWdtj|XdS)Nr)rlevelZsetLevelloggingZCRITICAL)Z old_levelrrrdisable_loggers  rcCs*tjtj}||_||_||_d|j_|S)Ng)rZ MagicMocksocketprotorzfamilyZ gettimeoutru)rrzrZsockrrrmock_nonblocking_socket s  rcCstjdddS)Nz'asyncio.sslproto._is_sslproto_availableF)ru)rZpatchrrrrforce_legacy_ssl_supportsr)r+)Mr contextlibr3rrrrrbrrjrZr,ZunittestrrZ http.serverrZwsgiref.simple_serverrrr! ImportErrorrgrrr r r r Z coroutinesr logrrrplatformZ windows_utilsrr rKrJr#r*r/r1r2r=rIrOr_rrcr`rerhrirmcontextmanagerrorprsr}Z BaseSelectorr~Z BaseEventLooprryrrrrrZ IPPROTO_TCPZ SOCK_STREAMZAF_INETrrrrrrs                        4