a „oe—,ã@sxddlZddlZddlZddlZddlZddlZddlmZedkrPej dZ ne Z dd„Z dd„Z Gdd „d ejƒZGd d „d ejƒZGd d „d eƒZGdd„deƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZddlZddlZGdd„dƒZGdd„dejƒZdd„Zedkrtej dd…dgkrFeƒe d¡e ¡e ¡e ƒe ¡e  ¡e !¡dS)éN)Ú TestSkippedÚ__main__cCsdtjvrtdƒ‚dS)NZCIzWe skip this test on CI)ÚosÚenvironr©rrú;C:\Program Files\Certbot\pkgs\win32\test\test_win32trace.pyÚSkipIfCIs rcCs<t d¡t d¡t ¡dkr8t ¡t ¡tdƒ‚dS)NZHigš™™™™™©?z\An existing win32trace reader appears to be running - please stop this process and try again)Ú win32traceÚwriteÚtimeÚsleepÚreadÚTermReadÚ TermWriteÚ RuntimeErrorrrrrÚCheckNoOtherReaderss   ÿrc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) Ú TestInitOpscCs"tƒt ¡t ¡t ¡dS©N)rr ÚInitReadr r©ÚselfrrrÚsetUp&szTestInitOps.setUpcCsHz t ¡Wntjy Yn0z t ¡WntjyBYn0dSr)r rÚerrorrrrrrÚtearDown-s  zTestInitOps.tearDowncCsˆ| tjtj¡t ¡t ¡}| |d¡t ¡| tjtj¡t ¡| tjtj¡t ¡| tjtj¡t ¡t ¡dS)NÚ) Ú assertRaisesr rr rÚ assertEqualrÚ InitWriter)rÚresultrrrÚtestInitTermRead7s zTestInitOps.testInitTermReadcCsB| tjtjd¡t ¡t d¡t ¡| tjtjd¡dS)NZHeiz Johan Galtung)rr rr rrrrrrÚtestInitTermWriteFs  zTestInitOps.testInitTermWritecCszt ¡t d¡t ¡t ¡| t ¡dv¡t ¡t ¡t d¡t ¡t ¡| dt ¡¡t ¡dS)NúTa da)r!r) r rr rrZ assertTruer rrrrrrÚtestTermSematicsMs  zTestInitOps.testTermSematicsN)Ú__name__Ú __module__Ú __qualname__rrrr r"rrrrr%s  rc@seZdZdd„Zdd„ZdS)ÚBasicSetupTearDowncCs"tƒt ¡t ¡t ¡dSr©rr rr rrrrrrdszBasicSetupTearDown.setUpcCst ¡t ¡dSr)r rrrrrrrmszBasicSetupTearDown.tearDownN)r#r$r%rrrrrrr&cs r&c@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) Ú TestModuleOpscCs"t d¡t ¡}| d|¡dS©Nz Syver Enstad©r r r r©rZ syverEnstadrrrÚ testRoundTripss zTestModuleOps.testRoundTripcCs"t d¡t ¡}| d|¡dS©Nu©opyright Syver Enstadr*r+rrrÚtestRoundTripUnicodexs z"TestModuleOps.testRoundTripUnicodecCst d¡| dt ¡¡dSr)©r r rÚ blockingreadrrrrÚtestBlockingReads zTestModuleOps.testBlockingReadcCst d¡| dt ¡¡dSr-r/rrrrÚtestBlockingReadUnicodeƒs z%TestModuleOps.testBlockingReadUnicodecCs t ¡dSr)r ÚflushrrrrÚ testFlush‰szTestModuleOps.testFlushN)r#r$r%r,r.r1r2r4rrrrr(rs r(c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚTestTraceObjectOpscCsht ¡t ¡t ¡}| tj|j¡| tj|jd¡t ¡t  ¡|  d| ¡¡| d¡dS)NrZSyver) r rrÚ GetTracerrrr r rrr©rZ traceObjectrrrÚtestInitŽszTestTraceObjectOps.testInitcCst ¡}| ¡dSr)r r6r3r7rrrr4™szTestTraceObjectOps.testFlushcCst ¡}| ¡dksJ‚dS)NF)r r6Úisatty)rZtracerrrrÚ testIsattyszTestTraceObjectOps.testIsattycCs&t ¡}| d¡| d| ¡¡dSr))r r6r rr r7rrrr,¡s z TestTraceObjectOps.testRoundTripN)r#r$r%r8r4r:r,rrrrr5s r5c@seZdZdd„Zdd„ZdS)Ú WriterThreadcCs0d|_t|jƒD]}t t|ƒ¡q|j|_dS©Nr)Ú writeCountÚrangeÚ BucketCountr r Ústr©rÚeachrrrÚrun¨szWriterThread.runcCs |j|jkSr)r=r?rrrrÚ verifyWritten®szWriterThread.verifyWrittenN)r#r$r%rCrDrrrrr;§sr;c@s<eZdZdZdZdd„Zdd„Zdd„Zd d „Zd d „Z d S)ÚTestMultipleThreadsWritingé2é cCsltƒ|jt_t ¡t ¡t ¡tƒdd„t|j ƒDƒ|_ t t|jƒƒ|_ |j D]}d|j |<qXdS)NcSsg|] }tƒ‘qSr©r;©Ú.0rBrrrÚ ¾óz4TestMultipleThreadsWriting.setUp..r) rr?r;r rr rrr>Ú FullBucketÚthreadsÚlistÚbucketsrArrrr·s z TestMultipleThreadsWriting.setUpcCst ¡t ¡dSr©r rrrrrrrÃsz#TestMultipleThreadsWriting.tearDowncCs8d}|jD](}||jks J|ƒ‚||jkr d}q4q |S©NTF©rPrM©rZbucketsAreFullrBrrrÚareBucketsFullÇs  z)TestMultipleThreadsWriting.areBucketsFullcCsbt ¡}|D]N}t|ƒ}|j|}|dks.J‚|d|j|<|j||jkr | ¡r dSq qdS©Néÿÿÿÿé©r r0ÚintrPrMrU©rZ readStringZchZintegerÚcountrrrr Ðs  zTestMultipleThreadsWriting.readcCsX|jD] }| ¡q| ¡|jD] }| ¡q"|jD]}| ¡s6J‚q6| ¡sTJ‚dSr)rNÚstartr ÚjoinrDrUrArrrÚ testThreadsÜs     z&TestMultipleThreadsWriting.testThreadsN) r#r$r%rMr?rrrUr r_rrrrrE²s   rEc@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚTestHugeChunksicCs"tƒt ¡t ¡t ¡dSrr'rrrrrëszTestHugeChunks.setUpcCs*d}t|ƒ|jkr&t |¡||}qdS)Na*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** )ÚlenÚ BiggestChunkr r )rÚdatarrrÚtestHugeChunksñs zTestHugeChunks.testHugeChunkscCst ¡t ¡dSrrQrrrrrøszTestHugeChunks.tearDownN)r#r$r%rbrrdrrrrrr`çsr`c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚTraceWriteProcesscCsd|_||_dS)NrW)ÚexitCodeÚ threadCount)rrgrrrÚ__init__szTraceWriteProcess.__init__c Cs@t ddt|j|jfdddtjddt ¡¡ \}}}}||_dS)Nz'python.exe "%s" /run_test_process %s %sr)Ú win32processZ CreateProcessÚ this_filer?rgZNORMAL_PRIORITY_CLASSZ STARTUPINFOÚ processHandle)rZ procHandleZ threadHandleZprocIdZthreadIdrrrr]s ÿö zTraceWriteProcess.startcCs"t |jtj¡t |j¡|_dSr)Ú win32eventZWaitForSingleObjectrkZINFINITEriZGetExitCodeProcessrfrrrrr^szTraceWriteProcess.joincCs |jdkSr<)rfrrrrrDszTraceWriteProcess.verifyWrittenN)r#r$r%rhr]r^rDrrrrresrec@sDeZdZdZdZdd„Zdd„Zdd„Zd d „Zd d „Z d d„Z dS)ÚTestOutofProcessrGrFcCsHtƒt ¡|jt_| ¡tt|jƒƒ|_|jD]}d|j|<q4dSr<) rr rr?reÚ setUpWritersrOr>rPrArrrr!s zTestOutofProcess.setUpcCs t ¡dSr)r rrrrrr*szTestOutofProcess.tearDowncCsLg|_t|jdƒ\}}tdƒD]}|j t|ƒ¡q|rH|j t|ƒ¡dS)Né)Ú processesÚdivmodrMr>Úappendre)rZquotZ remainderrBrrrrn-s  zTestOutofProcess.setUpWriterscCs8d}|jD](}||jks J|ƒ‚||jkr d}q4q |SrRrSrTrrrrU6s  zTestOutofProcess.areBucketsFullcCsbt ¡}|D]N}t|ƒ}|j|}|dks.J‚|d|j|<|j||jkr | ¡r dSq qdSrVrYr[rrrr ?s  zTestOutofProcess.readcCsX|jD] }| ¡q| ¡|jD] }| ¡q"|jD]}| ¡s6J‚q6| ¡sTJ‚dSr)rpr]r r^rDrUrArrrÚ testProcessesKs     zTestOutofProcess.testProcessesN) r#r$r%r?rMrrrnrUr rsrrrrrms    rmcCs|ttjdƒt_ttjdƒ}dd„t|ƒDƒ}t ¡|D] }| ¡q<|D] }|  ¡qN|D]}|  ¡s`t  d¡q`dS)NéécSsg|] }tƒ‘qSrrHrIrrrrKZrLz%_RunAsTestProcess..rW) rZÚsysÚargvr;r?r>r rr]r^rDÚexit)rgrNÚtrrrÚ_RunAsTestProcessVs  rzrXrtz/run_test_process)"rrvÚ threadingr Zunittestr Zpywin32_testutilrr#rwrjÚ__file__rrZTestCaserr&r(r5ÚThreadr;rEr`rlrirermrzrxrrrrÚmainrrrrÚsB   > 59