a 4êdg¤$ã@sddlmZddlmZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ej Z dZGdd„de jƒZGdd„dejƒZd d „ZGd d „d e jƒZGd d„deƒZGdd„de jƒZGdd„de jƒZGdd„de jƒZedkrþe  ¡dS)é)Úsupport)Ú socket_helperNsQUIT c@s eZdZdZdd„Zdd„ZdS)Ú echo_serverécCs<tj |¡||_t tjtj¡|_t  |j¡|_ d|_ dS©N) Ú threadingÚThreadÚ__init__ÚeventÚsocketÚAF_INETÚ SOCK_STREAMÚsockrZ bind_portÚportÚstart_resend_event)Úselfr ©rú./usr/local/lib/python3.9/test/test_asynchat.pyr s  zecho_server.__init__cCsÐ|j ¡|j ¡|j ¡\}}d|_t|jvrP| d¡}|sBqP|j||_q(|j td¡|_|j rp|j   ¡z<|jrª|  |jd|j …¡}t  d¡|j|d…|_qrWn Yn0| ¡|j ¡dS)Nórgü©ñÒMbP?)rÚlistenr ÚsetÚacceptÚbufferÚ SERVER_QUITÚrecvÚreplacerÚwaitÚsendÚ chunk_sizeÚtimeÚsleepÚclose)rÚconnÚclientÚdataÚnrrrÚrun"s*      zecho_server.runN)Ú__name__Ú __module__Ú __qualname__rr r&rrrrrs rc@s>eZdZdd„Zdd„Zejdkr*dd„Zdd „Zd d „Z d S) Ú echo_clientcCsDtj |¡g|_| tjtj¡| t |f¡|  |¡d|_ dS©Nr) ÚasynchatÚ async_chatr ÚcontentsZ create_socketr r r ÚconnectÚHOSTÚset_terminatorr)rÚ terminatorZ server_portrrrr Ds   zecho_client.__init__cCsdSrr©rrrrÚhandle_connectLszecho_client.handle_connectÚdarwincCsdSrrr3rrrÚ handle_exptRszecho_client.handle_exptcCs|j|7_dSr)r)rr$rrrÚcollect_incoming_dataUsz!echo_client.collect_incoming_datacCs|j |j¡d|_dSr+)r.Úappendrr3rrrÚfound_terminatorXszecho_client.found_terminatorN) r'r(r)r r4ÚsysÚplatformr6r7r9rrrrr*Bs  r*cCs:t ¡}t|ƒ}| ¡| ¡| ¡t d¡||fS)Nç{®Gáz„?)rÚEventrÚstartrÚclearrr )r ÚsrrrÚstart_echo_server\s rAc@sˆeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zd S)!Ú TestAsynchatFcCst ¡|_dSr)rZthreading_setupÚ_threadsr3rrrÚsetUpiszTestAsynchat.setUpcCstj|jŽdSr)rZthreading_cleanuprCr3rrrÚtearDownlszTestAsynchat.tearDowncCs¦t ¡}t|ƒ}||_| ¡| ¡| ¡t d¡t ||j ƒ}|  d¡|  d|¡|  d|¡|  t ¡t j|jdddt |¡| |jddg¡dS)Nr<shello sworldóI'm not dead yet!é,©Zuse_pollÚcountÚtimeoutó hello world)rr=rrr>rr?rr r*rÚpushrÚasyncoreÚloopÚusepollrÚ join_threadÚ assertEqualr.)rZtermZ server_chunkr r@ÚcrrrÚline_terminator_checkos     z"TestAsynchat.line_terminator_checkcCsdD]}| d|¡qdS)N©rééó ©rS©rÚlrrrÚtest_line_terminator1…sz"TestAsynchat.test_line_terminator1cCsdD]}| d|¡qdS)NrTs rXrYrrrÚtest_line_terminator2Šsz"TestAsynchat.test_line_terminator2cCsdD]}| d|¡qdS)NrTsqqqrXrYrrrÚtest_line_terminator3sz"TestAsynchat.test_line_terminator3cCsftƒ\}}t||jƒ}d}| |¡| t¡tj|jdddt  |¡|  |j |d|…g¡dS©Nshello world, I'm not dead yet! rGr<rH© rAr*rrLrrMrNrOrrPrQr.)rZtermlenr@r rRr$rrrÚnumeric_terminator_check”s     z%TestAsynchat.numeric_terminator_checkcCs| d¡dS)Nr©r`r3rrrÚtest_numeric_terminator1 sz%TestAsynchat.test_numeric_terminator1cCs| d¡dS)Nérar3rrrÚtest_numeric_terminator2¥sz%TestAsynchat.test_numeric_terminator2cCsjtƒ\}}td|jƒ}d}| |¡| t¡tj|jdddt  |¡|  |j g¡|  |j |¡dSr^) rAr*rrLrrMrNrOrrPrQr.r©rr@r rRr$rrrÚtest_none_terminator¨s     z!TestAsynchat.test_none_terminatorcCshtƒ\}}td|jƒ}d}tj|tdd}| |¡tj|j dddt   |¡|  |j dd g¡dS) NrWóhello world I'm not dead yet! é)Z buffer_sizerGr<rHrKrF)rAr*rr,Zsimple_producerrÚpush_with_producerrMrNrOrrPrQr.)rr@r rRr$ÚprrrÚtest_simple_producerµs    z!TestAsynchat.test_simple_producercCsZtƒ\}}td|jƒ}d}| |t¡tj|jdddt  |¡|  |j ddg¡dS)NrWrgrGr<rHrKrF) rAr*rrirrMrNrOrrPrQr.rerrrÚtest_string_producerÀs   z!TestAsynchat.test_string_producercCs\tƒ\}}td|jƒ}| d¡| t¡tj|jdddt  |¡|  |j gd¢¡dS)NrWshello world I'm not dead yet! rGr<rH)rKrrFr_©rr@r rRrrrÚtest_empty_lineÊs     ÿzTestAsynchat.test_empty_linecCs†tƒ\}}t ¡|_td|jƒ}| d¡| t¡| ¡t j |j ddd|j  ¡t  |¡| |jg¡| t|jƒd¡dS)NrWrgrGr<rHr)rArr=rr*rrLrZclose_when_donerMrNrOrrrPrQr.Z assertGreaterÚlenrrmrrrÚtest_close_when_doneÖs       z!TestAsynchat.test_close_when_donecCsœtƒ\}}td|jƒ}d}| |¡| t|ƒ¡| t|ƒ¡| t|jd¡| t|jd¡| t¡t j |j dddt   |¡| |jgd¢¡dS) NrWsbytes é ÚunicoderGr<rH)óbytesrsrs)rAr*rrLÚ bytearrayÚ memoryviewÚ assertRaisesÚ TypeErrorrrMrNrOrrPrQr.rerrrÚ test_pushìs     zTestAsynchat.test_pushN)r'r(r)rOrDrErSr[r\r]r`rbrdrfrkrlrnrprxrrrrrBfs      rBc@seZdZdZdS)ÚTestAsynchat_WithPollTN)r'r(r)rOrrrrryýsryc@seZdZdd„ZdS)ÚTestAsynchatMockedcCs~tj ¡}ttjƒ|j_t  ¡}|  |¡|  |j ¡tjj  |d¡}| ¡Wdƒn1sd0Y| |j¡dS)NZ handle_error)ÚunittestZmockZMockÚBlockingIOErrorÚerrnoÚEAGAINrZ side_effectr,r-Z set_socketZ addCleanupZ del_channelZpatchÚobjectZ handle_readZ assertFalseZcalled)rrÚ dispatcherÚerrorrrrÚtest_blockingioerrors   &z'TestAsynchatMocked.test_blockingioerrorN)r'r(r)r‚rrrrrzsrzc@seZdZdd„ZdS)ÚTestHelperFunctionscCs,| t dd¡d¡| t dd¡d¡dS)Nzqwerty z rZ qwertydkjfr)rQr,Zfind_prefix_at_endr3rrrÚtest_find_prefix_at_endsz+TestHelperFunctions.test_find_prefix_at_endN)r'r(r)r„rrrrrƒsrƒc@seZdZdd„ZdS)ÚTestNotConnectedcCst ¡}| t|jd¡dS)Néÿÿÿÿ)r,r-rvÚ ValueErrorr1)rr#rrrÚ!test_disallow_negative_terminatorsz2TestNotConnected.test_disallow_negative_terminatorN)r'r(r)rˆrrrrr…sr…Ú__main__)ÚtestrZ test.supportrr,rMr}r r:rrr{Z unittest.mockr0rrrr-r*rAZTestCaserBryrzrƒr…r'ÚmainrrrrÚs.  .