a 5êdgM{ã@s¦ddlmZmZmZmZmZmZmZmZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZedƒZejZGdd„de jƒZGdd„de jƒZedkr¢e  ¡dS) é)ÚTESTFNÚ import_moduleÚunlinkÚrequiresÚ_2GÚ_4GÚ gc_collectÚ cpython_onlyNÚmmapc@sÈeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Ze eed-ƒd.¡d/d0„ƒZd1d2„Zd3d4„Zd5d6„Z e e!j"d7kd8¡d9d:„ƒZ#e$e e!j"d7kd8¡d;d<„ƒƒZ%e e!j"d7kd8¡d=d>„ƒZ&e e!j"d7kd8¡d?d@„ƒZ'dAdB„Z(dCdD„Z)dEdF„Z*dGdH„Z+e ,e!j"d7kdI¡dJdK„ƒZ-dLdM„Z.dNdO„Z/dPdQ„Z0e eejdRƒdS¡dTdU„ƒZ1dVS)WÚ MmapTestscCstj t¡rt t¡dS©N)ÚosÚpathÚexistsrr©Úself©rú*/usr/local/lib/python3.9/test/test_mmap.pyÚsetUps zMmapTests.setUpcCs&zt t¡Wnty Yn0dSr )r rrÚOSErrorrrrrÚtearDowns zMmapTests.tearDowncCsÚttdƒ}zR| dt¡| d¡| dtd¡| ¡t | ¡dt¡}W| ¡n | ¡0tt |ƒƒ}|  |  d¡t¡|  t |ƒdt¡|  |dd¡|  |dd…d¡|  t|jt |ƒ¡|  t|jt |ƒd¡d|d<d |tdtdd…<|  |dd¡|  |dd…d ¡|  |td td …d ¡| ¡t d|¡}|durr| d¡n2| d¡\}}||}|  |t¡|  |td¡| dd¡|  | ¡d¡| dd ¡|  | ¡d¡| dd¡|  | ¡t |ƒ¡|  t|jd¡|  t|jd d¡|  t|jt |ƒ d d¡z| d¡Wnty\Ynr0|  t |ƒd¡|  t|jdd¡ttdƒ}z(| dd¡|  | ¡d¡W| ¡n | ¡0|  | ¡d¡| ¡dS)Nzbw+óófooéérsé3óbars3éésfoobars [A-Za-z]+zregex match on mmap failed!éé*éÿÿÿÿééÚrb)ÚopenrÚwriteÚPAGESIZEÚflushr ÚfilenoÚcloseÚstrÚtypeÚ assertEqualÚfindÚlenÚ assertRaisesÚ IndexErrorÚ __getitem__Ú __setitem__ÚreÚsearchÚfailÚspanÚseekÚtellÚ ValueErrorÚresizeÚ SystemErrorÚsize)rÚfÚmÚtpÚmatchÚstartÚendÚlengthrrrÚ test_basicsd            zMmapTests.test_basicc Cszd}ttdƒ}| d|¡Wdƒn1s20Yttdƒ–}tj| ¡|tjd}| |dd…d|d¡zd||dd…<Wnty Yn 0| d¡z d|d <WntyÊYn 0| d¡z|  d d ¡| d ¡WntyYn 0| d¡z|  d d ¡|  d ¡Wnty>Yn 0| d¡z|  d |¡Wn&t ypYnty‚Yn 0| d ¡ttdƒ&}| |  ¡d|d¡Wdƒn1sÆ0YWdƒn1sæ0Yttdƒº}zt | ¡|d¡}Wn,ty@tj d¡r<| d¡Yn"0tj d¡sZ| d¡| ¡tj d¡r¦ttdƒ}| |¡Wdƒn1sœ0YWdƒn1s¼0Yttdƒ`}tj| ¡|tjd}d||dd…<| |dd…d|d¡| ¡| ¡Wdƒn1s80Yttdƒ}|  ¡}Wdƒn1sl0Y| |d|d¡ttdƒ¶}tj| ¡|tjd}d ||dd…<| |dd…d |d¡| ¡ttdƒ&}| |  ¡d|d¡Wdƒn1s0Y| t|j d |¡| ¡Wdƒn1sP0Yttdƒ*}|jttj| ¡|ddWdƒn1s–0Ytjdkrvttdƒ4}|jttj| ¡|tjtjtjdWdƒn1sò0Ytjttdd ƒB}ttdƒL}tj| ¡||d}| t|jd¡| t|j d ¡| ¡Wdƒn1sl0YdS)Né Úwbóar$©Úaccessz#Readonly memory map data incorrect.óbz$Able to write to readonly memory mapróabcódrz"Able to resize readonly memory mapz*Readonly memory map data file was modifiedúr+brÚwinz0Opening mmap with size+1 should work on Windows.z1Opening mmap with size+1 should raise ValueError.ócz5Write-through memory map memory not updated properly.z8Write-through memory map data file not updated properly.z4Copy-on-write memory map data not written correctly.z4Copy-on-write test data file should not be modified.éÚposix)ÚflagsÚprotrJZ PROT_EXEC©rTsabcdef)r%rr&r r)Ú ACCESS_READr-Ú TypeErrorr6r8Ú write_byter;r<Úreadr:ÚsysÚplatformÚ startswithr*ÚtruncateÚ ACCESS_WRITEr(Ú ACCESS_COPYr0r ÚnameZ MAP_PRIVATEÚ PROT_READÚgetattr)rÚmapsizeÚfpr>r?ÚstuffrTrrrÚtest_access_parameter{s¶ ,           ÿD   J ÿ( ( ÿ ÿ ÿ$( :  þ& zMmapTests.test_access_parametercCs| ttjdd¡dS)Néþÿÿÿé)r0rr rrrrÚtest_bad_file_descøszMmapTests.test_bad_file_desccCsÄttdƒ>}d}t|ƒ}| |¡| ¡t | ¡|¡}Wdƒn1sN0Yt|dƒD]R}t||dƒD]>}|||…}| |  |¡|  |¡¡| |  |d¡d¡qvqd|  ¡dS)Núwb+saabaacdeefaaróxr!) r%rr/r&r(r r)Úranger-r.r*)rr>ÚdataÚnr?rBZfinishÚslicerrrÚtest_tougher_findüs  . zMmapTests.test_tougher_findcCsìttdƒ>}d}t|ƒ}| |¡| ¡t | ¡|¡}Wdƒn1sN0Y| | d¡d¡| | d¡d¡| | ddd¡d¡| | dd¡d¡| | ddd¡d¡| | ddd ¡d¡| | t dƒ¡d¡dS) Nrjó one two onesóonersonesér!rrg) r%rr/r&r(r r)r-r.Ú bytearray©rr>rmrnr?rrrÚ test_find_ends  .zMmapTests.test_find_endcCsîttdƒ>}d}t|ƒ}| |¡| ¡t | ¡|¡}Wdƒn1sN0Y| | d¡d¡| | d¡d¡| | ddd¡d¡| | ddd¡d¡| | dd d¡d¡| | dd d¡d¡| | t dƒ¡d¡dS) Nrjrqrrrssone rr!rgr) r%rr/r&r(r r)r-ÚrfindrtrurrrÚ test_rfind s  .zMmapTests.test_rfindcCsŒttdƒ}| dd¡Wdƒn1s.0Yttdƒ6}tj| ¡dtjd}| ¡| ¡Wdƒn1s~0YdS)NrjérHr$rI)r%rr&r r)rVr*©rr>ÚmfrrrÚtest_double_close2s  , zMmapTests.test_double_closec Cs¾ttdƒ}| dd¡Wdƒn1s.0Yttdƒh}t | ¡d¡8}| t|ƒdd¡| | d¡dd¡Wdƒn1s’0YWdƒn1s°0YdS)Nrjryómzrb+rz Map size should equal file size.)r%rr&r r)r-r/rYrzrrrÚtest_entire_file<s , ÿzMmapTests.test_entire_filec Cs®ttdƒ}| dd¡Wdƒn1s.0YttdƒX}tj| ¡ddtjd }| t|jd¡Wdƒn1s‚0YWdƒn1s 0YdS) NrGir}r$rry©ÚoffsetrJi€8) r%rr&r r)rVr0r1r2rzrrrÚtest_length_0_offsetFs  , zMmapTests.test_length_0_offsetcCs€ttdƒ}| dd¡Wdƒn1s.0Yttdƒ*}|jttj| ¡dddWdƒn1sr0YdS)NrGióÃr}úw+briÿ©r€)r%rr&r0r:r r)©rr>rrrÚtest_length_0_large_offsetRs  , ÿz$MmapTests.test_length_0_large_offsetc Cs$ttdƒ^}| d¡| ¡t | ¡d¡}| ddd¡| |dd…dd¡| ¡Wdƒn1sn0Yd}t t |ƒƒD]¤}t t |ƒƒD]’}t t |ƒt ||ƒƒD]v}|d|…||||…|||d…}t d t |ƒ¡}||dd…<| |||¡| |dd…|¡| ¡q²q˜qˆt d d ¡}gd ¢} t   | | | ¡D]4\} }} z| | || ¡Wnty€Yn0qPgd ¢} | D] \} }} | t|j| || ¡q’| ¡t d d ¡}| t|jddd¡| t|jd dd ¡| t|jdd d ¡| ddd ¡| ddd¡dS)Nrjs ABCDEabcderFérs ABCDEABCDEz'Map move should have duplicated front 5ó 0123456789r!éd)iœÿÿÿr!rrrˆ))r!r!r!)r!r!r)r!rr!)rr!r!)r!rr)rr!r)rrr!rr)r%rr&r(r r)Úmover-r*rlr/ÚmaxÚ itertoolsÚproductr:r0) rr>r{rmÚdestÚsrcÚcountZexpectedr?ÚoffsetsÚsourcer=rrrÚ test_move\sD  &,    zMmapTests.test_movecCs^t dt¡}ttƒD]}| ||dd¡qttƒD]$}|d@}|||<| |||¡q4dS)Nr!rz+anonymously mmap'ed contents should be zeroéÿ)r r'rlr-)rr?ÚxÚbrrrÚtest_anonymousŒs   ÿ zMmapTests.test_anonymouscCs&t dd¡}| |j¡| ttdƒƒ¡| d¡| | ¡ttdƒƒ¡| d¡| | ¡ttddƒƒ¡| d¡| | ¡d¡| d¡| | d¡ttddƒƒ¡| d¡| | d¡ttddƒƒ¡| d¡| | d ¡ttddƒƒ¡| d ¡| | d ¡ttd dƒƒ¡dS) Nr!érrsórrQr†rgé iÖÿÿÿ) r Ú addCleanupr*r&Úbytesrlr8r-rY©rr?rrrÚ test_read_all˜s"         zMmapTests.test_read_allcCsPt dd¡}| |j¡| t|jd¡| t|jd¡| t|jgd¢¡dS)Nr!r—Úfoog@)rrr)r ršr*r0rWrYrœrrrÚtest_read_invalid_arg­s   zMmapTests.test_read_invalid_argc Cs¦tttdƒƒƒ}t dt|ƒ¡}||dd…<| |dd…|¡ddddddtjddd d f }|D]@}|D]6}|dd…D]$}| ||||…||||…¡qxqhq`dS© Nér!rrréi,rgiáÿÿÿiÔþÿÿ)r›Úreversedrlr r/r-rZÚmaxsize)rÚsr?ÚindicesrBÚstopÚsteprrrÚtest_extended_getsliceµs  ÿz MmapTests.test_extended_getslicec CsÜtttdƒƒƒ}t dt|ƒ¡}ddddddtjddd d f }|D]–}|D]Œ}|dd…D]z}||dd…<| |dd…|¡t|ƒ}||||…}tt|ƒƒ}|||||…<|||||…<| |dd…t|ƒ¡qXqHq@dSr ) r›r£rlr r/rZr¤r-Úlist) rr¥r?r¦rBr§r¨ÚLrmrrrÚtest_extended_set_del_sliceÃs  z%MmapTests.test_extended_set_del_slicecCsB| d|¡| d¡| d|d¡| ¡t | ¡d¡S)Nrrrr)r&r(r r))rr>ÚhalfsizerrrÚmake_mmap_file×s  zMmapTests.make_mmap_filec Cs^ttdƒ}| ¡ttdƒ.}|jtdtj| ¡dtjdWdƒn1sP0YdS)Nr‚r$zcannot mmap an empty filerrI)r%rr*ÚassertRaisesRegexr:r r)rVr„rrrÚtest_empty_fileßs   ýzMmapTests.test_empty_filecCsättdƒ}z¤tj}| ||¡}| ¡| ¡|d}ttdƒ}dD]N}z$tj| ¡||d}| dd¡Wntt t fy†YqF0| dd¡qF| ¡ttdƒ}tj| ¡|||d}| |dd…d ¡| ¡z|  d ¡Wnt yüYn~0| t |ƒd ¡| t|jd d¡| |dd…d ¡ttd ƒ}| dd¡| | ¡|d ¡| ¡| | ¡|d ¡| ¡W| ¡zt t¡Wnty®Yn0n.| ¡zt t¡WntyÜYn00dS) Nr‚rrN)rgr!Nrƒrrrrr"r#r$)r%rr ÚALLOCATIONGRANULARITYr®r*r)r-r:rWÚ OverflowErrorr;r<r/r0r8r9r=r rr)rr>r­r?rcr€rrrÚ test_offsetèsV        üzMmapTests.test_offsetcCsGdd„dtjƒ}|tƒdS)Nc@seZdZdd„ZdS)z*MmapTests.test_subclass..anon_mmapc_stjj|dg|¢Ri|¤ŽS)Nr!)r Ú__new__)ÚklassÚargsÚkwargsrrrr´#sz2MmapTests.test_subclass..anon_mmap.__new__N)Ú__name__Ú __module__Ú __qualname__r´rrrrÚ anon_mmap"sr»)r r')rr»rrrÚ test_subclass!szMmapTests.test_subclassrazneeds mmap.PROT_READcCsd}ttdƒ}| d|¡Wdƒn1s20Yttdƒ6}tj| ¡|tjd}| t|jd¡Wdƒn1s‚0YdS)NrFrGrHr$rUrž)r%rr&r r)rar0rW)rrcrdr>r?rrrÚtest_prot_readonly's  , zMmapTests.test_prot_readonlycCs| tjt¡dSr )ÚassertIsr ÚerrorrrrrrÚ test_error0szMmapTests.test_errorcCsòd}ttdƒ"}| dt|ƒ¡Wdƒn1s60Yttdƒ$}t | ¡t|ƒ¡}Wdƒn1st0Ytt|ƒƒD]6}| | ¡|¡|  ||¡| | ¡|d¡qŠ|  t |j d¡| |dd…|¡|  d¡tt|ƒƒD]<}| | ¡|¡| |  ¡||¡| | ¡|d¡qü|  t |j ¡|  d¡| | d¡d ¡| | ¡d ¡|  d¡| d ¡| | ¡d ¡| |dd…d ¡| td ƒ¡| | ¡d¡| |dd…d¡|  t |jd¡dS)Nr‡rGrkrNréxrrs345rrs 012bar6789sbazr™s 012barbaz9sba)r%rr&r/r r)rlr-r9rXr0r:r8Ú read_byterYrt)rrmrdr>r?ÚirrrÚtest_io_methods3s8 0 2    zMmapTests.test_io_methodscCsVdD]L}t dd¡}| |¡| |d|¡| d¡| | ¡|¡| ¡qdS)N)ééÈr“r!rr)r rXr-r8rÂr*)rr•r?rrrÚtest_non_ascii_byteUs   zMmapTests.test_non_ascii_byteÚntzrequires WindowscCsd}d}t|ƒt|ƒksJ‚tjdt|ƒdd}||dd…<tjdt|ƒdd}||dd…<| |dd…|¡| |dd…|¡| ¡| ¡tjdt|ƒdd}||dd…<tjdt|ƒdd}||dd…<| |dd…|¡| |dd…|¡| ¡| ¡dS)Nr‡s abcdefghijr!rž©ÚtagnameZboo)r/r r-r*)rZdata1Zdata2Úm1Úm2rrrÚ test_tagname^s&    zMmapTests.test_tagnamecCsHt dd¡}d}tjdd|d}| t |¡t |¡t|ƒd¡dS)Nr!rˆržrÉr)r r-rZÚ getsizeofr/)rrËrÊrÌrrrÚ test_sizeofxs   ÿzMmapTests.test_sizeofcCsÞtjdddd}ztjdddddd…Wn Yn0| ¡ttdƒ}| d¡Wdƒn1sl0Yttdƒ}t | ¡d ¡}| ¡z| d ¡Wn Yn0z|dd…Wn Yn0| ¡dS) Nr!éèržrÉéˆrGs xxxxxxxxxxrNr)r r*r%rr&r)r;)rr?rdr>rrrÚtest_crasher_on_windowss( ( z!MmapTests.test_crasher_on_windowscCs^t ¡}zF| t¡ t | ¡d¡}Wdƒn1s:0YW| ¡n | ¡0dS)NrF)Úsocketr0rr r)r*)rr¥r?rrrÚtest_invalid_descriptor›s  0z!MmapTests.test_invalid_descriptorcCsHt dd¡}| |j¡Wdƒn1s.0Y| |j¡dS)Nr!rF)r Z assertFalseÚclosedÚ assertTruerœrrrÚtest_context_manager§s*zMmapTests.test_context_managerc Cs|| t¡@}t dd¡}t‚Wdƒn1s20YWdƒn1sP0Y| |jtd¡| |jd¡dS)Nr!rFz)wrong exception raised in context managerzcontext manager failed)r0Ú Exceptionr rZassertIsInstanceÚ exceptionrÖrÕ)rÚexcr?rrrÚtest_context_manager_exception¬s @ ÿz(MmapTests.test_context_manager_exceptioncCs>t dd¡}t |¡}| |ƒ|¡~tƒ| |ƒd¡dS)Nr!r—)r ÚweakrefÚrefr¾r)rÚmmÚwrrrrÚ test_weakrefµs   zMmapTests.test_weakrefcCsXt dd¡}| | d¡d¡| | d¡d¡| | d¡d¡| | d ¡d ¡dS) Nr!r—r˜rrkrsyzrópythonr)r r-r&)rrÞrrrÚ0test_write_returning_the_number_of_bytes_written¾s  z:MmapTests.test_write_returning_the_number_of_bytes_writtenz(cannot resize anonymous mmaps on WindowscCs’t dd¡}| |j¡| d¡z| d¡WntyL| d¡Yn0| | d¡d¡| t |j ¡| t |j d¡| t |j d ¡dS) Nr!i rÑrhzresizing not supportedér˜r rL) r ršr*rYr;r<ZskipTestr-r0r:rÂrXr&rœrrrÚtest_resize_past_posÅs    zMmapTests.test_resize_past_poscCstt dd¡}| t¡||Wdƒn1s40Y| t¡|dWdƒn1sf0YdS)Nr!r—r)r r0rWrœrrrÚtest_concat_repeat_exceptionÓs   & z&MmapTests.test_concat_repeat_exceptioncCsZt dd¡}| |j¡| d¡| ¡}| |¡tj d¡rV|  t |jdt dƒ¡dS)Nr!r—ráÚlinuxr) r ršr*r&r(Z assertIsNonerZr[r\r0rr/)rrÞÚresultrrrÚtest_flush_return_valueÚs     z!MmapTests.test_flush_return_valuec Cs–t d¡}t d¡}d}tdd„|Dƒƒ}t||ƒD]Z\}}d|}||}d} d|d |d |d f} ttd ƒ} |  |¡|  ¡t  | | ¡D]Ø\} } t t | ƒ}t j |   ¡|||d †}|  | ¡| t|ƒ¡}| |¡| | d¡| ¡| | d¡t|ƒ¡| | d¡t| ƒ¡| | d¡t|ƒ¡Wdƒn1sL0Y| t|ƒ¡}| |¡q–Wdƒq41s†0Yq4dS)Nzr\S+), length=(?P\d+), pos=(?P\d+), offset=(?P\d+)>z)é2rˆrÐi@Bi€–˜css"|]}|dtjtjVqdS)rN)r r±)Ú.0rcrrrÚ ðsÿ ÿz&MmapTests.test_repr..rH)ZACCESS_DEFAULTrVr_r^rrFr†rQrj)rJr€rJrDÚposr€)r4ÚcompileÚtupleÚzipr%rr&r(r‹rŒrbr r)r8rAÚreprZassertIsNotNoner-Úgroupr+)rZopen_mmap_repr_patZclosed_mmap_repr_patZmapsizesrr€rcrmrDZaccessesZ positionsrdrJrìZaccintrÞrArrrÚ test_reprçsBÿ ÿ   ý  6zMmapTests.test_reprÚmadvisez needs madvisecCsxdt}t d|¡}| td¡| tj|¡Wdƒn1sD0Y| td¡| tjd¡Wdƒn1s~0Y| td¡ | tjdd¡Wdƒn1sº0Y| td¡"| tjttj¡Wdƒn1sø0Y|  | tj¡d¡|  | tjt¡d¡|  | tjt|¡d¡|  | tjdd¡d¡|  | tjd|¡d¡dS)Nrr!zmadvise start out of boundszmadvise length invalidrzmadvise length too large) r'r r¯r:róZ MADV_NORMALr²rZr¤r-)rr=r?rrrÚ test_madvise s ,,.0zMmapTests.test_madviseN)2r¸r¹rºrrrErfrirprvrxr|r~rr…r’r–rrŸr©r¬r®r°r³r¼ÚunittestÚ skipUnlessÚhasattrr r½rÀrÄrÇr r`rÍr rÏrÒrÔr×rÛràrâZskipIfrärårèròrôrrrrr s^^}    0  9 "         $r c@speZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Ze   e j e kd ¡dd„ƒZe   e j e kd ¡dd„ƒZdS)ÚLargeMmapTestscCs ttƒdSr ©rrrrrrr!szLargeMmapTests.setUpcCs ttƒdSr rùrrrrr$szLargeMmapTests.tearDownc Cs¤tjdd…dkstjdkr.tddtdƒƒttdƒ}z | |¡| |¡| ¡WnFt t t fyžz |  ¡Wnt t fyŽYn0t  d¡‚Yn0|S) NrrOÚdarwinZ largefilez-test requires %s bytes and a long time to runìr‚z*filesystem does not have largefile support)rZr[rr+r%rr8r&r(rr²r:r*rõZSkipTest)rZ num_zeroesÚtailr>rrrÚ_make_test_file's  ÿ     zLargeMmapTests._make_test_filec Csx| dd¡X}tj| ¡ddtjd }| |dd¡Wdƒn1sL0YWdƒn1sj0YdS)Nlÿÿó rlriÿÿÿé )rýr r)rVr-©rr>r?rrrÚtest_large_offset8sz LargeMmapTests.test_large_offsetc Cs| dd¡à}tjdkr˜| t¡&tj| ¡dtjdWdƒn1sN0Y| t¡&tj| ¡dtjdWdƒn1sŽ0Ytj| ¡dtjd }|  |  ¡d¡Wdƒn1sÔ0YWdƒn1sò0YdS)NlÿÿrþrûrIrry) rýrZr¤r0r²r r)rVr:r-r=rrrrÚtest_large_filesize=s  4 4z"LargeMmapTests.test_large_filesizec Csšd}|t|ƒd}|t|ƒ}| ||¡Z}tj| ¡dtjd$}| |||…|¡Wdƒn1sn0YWdƒn1sŒ0YdS)Ns DEARdear rrrI)r/rýr r)rVr-)rÚboundaryrürBrCr>r?rrrÚ_test_around_boundaryKs  z$LargeMmapTests._test_around_boundaryz!test cannot run on 32-bit systemscCs| t¡dSr )rrrrrrÚtest_around_2GBSszLargeMmapTests.test_around_2GBcCs| t¡dSr )rrrrrrÚtest_around_4GBWszLargeMmapTests.test_around_4GBN)r¸r¹rºrrrýrrrrõrörZr¤rrrrrrrrøs røÚ__main__)Z test.supportrrrrrrrr rõr r4r‹rÓrZrÜr r'ZTestCaser rør¸ÚmainrrrrÚs&(=