Yf8@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_SSLv23rr7/opt/alt/python35/lib64/python3.5/asyncio/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 Zsleep)rZpredtimeoutZdeadlinerrr 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__rrr2eszSilentWSGIServer.get_requestcCsdS)Nr)r'r5client_addressrrr handle_errorjszSilentWSGIServer.handle_error)r,r-r.r4r2r9rr)r7rr/as r/c@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'r5r8herer<r=Zssockrrrfinish_requestps$    z!SSLWSGIServerMixin.finish_requestN)r,r-r.rFrrrrr:ns r:c@seZdZdS) SSLWSGIServerN)r,r-r.rrrrrGs rGuse_sslFc #sdd}|r|n|}||tj|j_tjdfdd}|jz VWdjj|j XdS)NcSs#d}dg}|||dgS)Nz200 OK Content-type text/plains Test message)rIrJr)environZstart_responseZstatusZheadersrrrapps  z_run_test_server..apptargetcsjddS)NZ poll_intervalg?)Z serve_foreverr)httpdrrsz"_run_test_server..) r$Zset_appZserver_addressaddress threadingZThreadstartZshutdownZ server_closer@)rPrH server_clsserver_ssl_clsrLZ server_classZ server_threadr)rNr_run_test_servers        rUZAF_UNIXc@seZdZddZdS)UnixHTTPServercCs&tjj|d|_d|_dS)Nz 127.0.0.1P) socketserverUnixStreamServer server_bindZ server_nameZ server_port)r'rrrrZs zUnixHTTPServer.server_bindN)r,r-r.rZrrrrrVs rVcs4eZdZdZddZfddZS)UnixWSGIServerr0cCstj||jdS)N)rVrZZ setup_environ)r'rrrrZs zUnixWSGIServer.server_bindcs/tj\}}|j|j|dfS)N 127.0.0.1)r\r])r1r2r3r4)r'r5r6)r7rrr2szUnixWSGIServer.get_request)r,r-r.r4rZr2rr)r7rr[s  r[c@seZdZddZdS)SilentUnixWSGIServercCsdS)Nr)r'r5r8rrrr9sz!SilentUnixWSGIServer.handle_errorN)r,r-r.r9rrrrr^s r^c@seZdZdS)UnixSSLWSGIServerN)r,r-r.rrrrr_s r_c Cs!tj}|jSWdQRXdS)N)tempfileZNamedTemporaryFilename)filerrrgen_unix_socket_pathsrcccs@t}z |VWdytj|Wntk r:YnXXdS)N)rcr>unlinkrD)r?rrrunix_socket_paths   reccs;t+}td|d|dtdtEdHWdQRXdS)NrPrHrSrT)rerUr^r_)rHr?rrrrun_test_unix_servers rfhostz 127.0.0.1portc cs.td||fd|dtdtEdHdS)NrPrHrSrT)rUr/rG)rgrhrHrrrrun_test_serversricCsni}xHt|D]:}|jdr:|jdr:qtdd||.genFTrg& .>)r1rv_check_on_close_gennext_timeZ_clock_resolution_timersrtZ _selectorreaderswritersreset_countersweakrefWeakValueDictionary _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 sOtj|jrKy|jjdWntk r>Yn XtddS)NrzTime generator is not finished)r1rrrsend StopIterationAssertionError)r')r7rrr<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-r.rrrrrrEmptyCMs  rr)r'r*rrrrrsubTestszTestCase.subTest) r,r-r.rrrrrrZPY34rrrrrrs    rc cs;tj}ztjtjddVWdtj|XdS)zrContext manager to disable asyncio logger. For example, it can be used to ignore warnings in debug mode. rN)rlevelZsetLevelloggingZCRITICAL)Z old_levelrrrdisable_loggers   rcCs=tjtj}||_||_||_d|j_|S)z'Create a mock of a non-blocking socket.g)rZ MagicMocksocketprotorpfamilyZ gettimeoutrk)rrprZsockrrrmock_nonblocking_sockets     rcCstjdddS)Nz'asyncio.sslproto._is_sslproto_availablerkF)rZpatchrrrrforce_legacy_ssl_supports r)Krr contextlibr%rr>rrrXrr`rQrZunittestrrZ http.serverrZwsgiref.simple_serverrrr ImportErrorr]rrr r r r Z coroutinesr logrr;rplatformZ windows_utilsrrrr!r#r$r/r:rGrUhasattrrYrVr[r^r_rccontextmanagerrerfrirsZ BaseSelectorrtZ BaseEventLooprrorrrrrZ IPPROTO_TCPZ SOCK_STREAMZAF_INETrrrrrrs                           -