a 7dg'@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z GdddZ GdddZ Gdddej ZGd d d eZGd d d eZdS) N)supportc@seZdZddZddddZddZd d Zd d Zej d e j dddddZ ej e j fddZ ddZddZejddZddZd S)FunctionalTestCaseMixincCstSN)asyncioZnew_event_loopselfr8/usr/local/lib/python3.9/test/test_asyncio/functional.pynew_loopsz FunctionalTestCaseMixin.new_loopg{Gz?)delaycCs|jt|dSr)loopZrun_until_completersleep)rr rrr run_loop_brieflysz(FunctionalTestCaseMixin.run_loop_brieflycCs|j||j|dSr)._FunctionalTestCaseMixin__unhandled_exceptionsappendr Zdefault_exception_handler)rr contextrrr loop_exception_handlers z.FunctionalTestCaseMixin.loop_exception_handlercCsB||_td|j|jg|_tjj|_ ddtj_dS)NcSsdSrrrrrr "z/FunctionalTestCaseMixin.setUp..) r r rset_event_loopZset_exception_handlerrrevents_get_running_loop_old_get_running_looprrrr setUps    zFunctionalTestCaseMixin.setUpc CsnzL|j|jr0tdt|j|dW|jtj_ t dd|_n|jtj_ t dd|_0dS)Nz2Unexpected calls to loop.call_exception_handler():z1unexpected calls to loop.call_exception_handler()) r closerprintpprintfailrrrrrrrrr tearDown$s       z FunctionalTestCaseMixin.tearDownN )familyaddrtimeoutbacklog max_clientsc Cs|durPttdrL|tjkrLt}|j}WdqP1s@0Ynd}tj|||d}|durptd|dkrtd||t |||||S)NAF_UNIX)z 127.0.0.1r)r!r$timeout is requiredr#only blocking sockets are supported) hasattrsocketr&tempfileNamedTemporaryFilename create_server RuntimeError settimeoutTestThreadedServer) rZ server_progr!r"r#r$r%tmpsockrrr tcp_server2s &  z"FunctionalTestCaseMixin.tcp_servercCsFt|tj}|durtd|dkr.td||t||||S)Nr'rr()r* SOCK_STREAMr/r0TestThreadedClient)rZ client_progr!r#r3rrr tcp_clientJs z"FunctionalTestCaseMixin.tcp_clientcOs$ttdst|j|dtji|SNr&r!)r)r*NotImplementedErrorr4r&rargskwargsrrr unix_serverYs z#FunctionalTestCaseMixin.unix_servercOs$ttdst|j|dtji|Sr8)r)r*r9r7r&r:rrr unix_client^s z#FunctionalTestCaseMixin.unix_clientccstp}tj|d}z,|VWzt|WqjtyBYqj0n$zt|WntyfYn00Wdn1s~0YdS)Nr3)r+TemporaryDirectoryospathjoinunlinkOSError)rZtdfnrrr unix_sock_namecs   z&FunctionalTestCaseMixin.unix_sock_namec Cs*z|jW||n ||0dSr)r stoprrexrrr _abort_socket_testos z*FunctionalTestCaseMixin._abort_socket_test)__name__ __module__ __qualname__r rrrrr*AF_INETrZLOOPBACK_TIMEOUTr4r7r=r> contextlibcontextmanagerrFrJrrrr r s&    rc@s<eZdZddZddZddddd Zd d Zd d ZdS)TestSocketWrappercCs ||_dSr)_TestSocketWrapper__sockrr3rrr __init__}szTestSocketWrapper.__init__cCs<d}t||kr8||t|}|dkr.t||7}q|S)Nr)lenrecvConnectionAbortedError)rnbufdatarrr recv_alls  zTestSocketWrapper.recv_allFN) server_sideserver_hostnamecCs^|j|j||dd}z2z |Wn|Yn0W|jn |j0||_dS)NF)r\r]Zdo_handshake_on_connect)Z wrap_socketrRZ do_handshaker)rZ ssl_contextr\r]Zssl_sockrrr start_tlss  zTestSocketWrapper.start_tlscCs t|j|Sr)getattrrR)rr-rrr __getattr__szTestSocketWrapper.__getattr__cCsdt|j|jS)Nz <{} {!r}>)formattyperKrRrrrr __repr__szTestSocketWrapper.__repr__)rKrLrMrTr[r^r`rcrrrr rQ{s  rQc@s$eZdZddZddZddZdS) SocketThreadcCsd|_|dSNF)_activerBrrrr rGszSocketThread.stopcCs ||Sr)startrrrr __enter__szSocketThread.__enter__cGs |dSr)rG)rexcrrr __exit__szSocketThread.__exit__N)rKrLrMrGrhrjrrrr rdsrdc@seZdZddZddZdS)r6cCs:tj|dddd|_||_||_d|_||_||_dS)Nz test-clientT) threadingThreadrTdaemon_timeout_sockrf_prog_test)rtestr3progr#rrr rTszTestThreadedClient.__init__c CsJz|t|jWn0tyD}z|j|WYd}~n d}~00dSr)rprQro ExceptionrqrJrHrrr runszTestThreadedClient.runN)rKrLrMrTrurrrr r6s r6csHeZdZddZfddZddZddZd d Zed d Z Z S) r1cCshtj|dddd|_d|_d|_||_||_||_d|_ ||_ t \|_ |_|j d||_dS)Nz test-serverTrF)rkrlrTrm_clientsZ_finished_clients _max_clientsrnrorfrpr* socketpair_s1_s2 setblockingrq)rrrr3rsr#r%rrr rTs zTestThreadedServer.__init__csXzF|jr:|jdkr:z|jdWnty8Yn0Wtn t0dS)Nsstop)rzfilenosendrDsuperrGr __class__rr rGs zTestThreadedServer.stopcCsnzR|j$|jd|Wdn1s20YW|j|jn|j|j0dSre)ror{_runryrrzrrrr rus (  zTestThreadedServer.runc Cs<|jr8|j|jkrdSt|j|jggg|j\}}}|j|vrFdS|j|vrz|j\}}Wn6tyxYqYqt j y|jsYdSYq0|jd7_| |jz2|| |Wdn1s0YWqt y4}z4d|_zW|j|n|j|0WYd}~qd}~00qdS)NrF)rfrvrwselectroryrnacceptBlockingIOErrorr*r#r0_handle_clientrtrqrJ)rrwxconnr"rIrrr rs6      ,zTestThreadedServer._runcCs|t|dSr)rprQrSrrr r sz!TestThreadedServer._handle_clientcCs |jSr)ro getsocknamerrrr r"szTestThreadedServer.addr) rKrLrMrTrGrurrpropertyr" __classcell__rrrr r1s  "r1)rZasyncio.eventsrOr@rrr*r+rkrrrrrQrlrdr6r1rrrr s n(