a 5êdgÆ'ã@s8dZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z m Z m Z ddlm Z ddlmZddlZddlZdZe dZGdd „d ƒZGd d „d eƒZd d „ZGdd„deejƒZe eedƒ d¡Gdd„deejƒƒZdd„ZGdd„deejƒZGdd„deejƒZdd„Ze dkr4e !¡dS)z9Test largefile support on system where this makes sense. éN)ÚTESTFNÚrequiresÚunlinkÚ bigmemtest)Ú SHORT_TIMEOUT)Ú socket_helperly*Ú2c@s eZdZdd„Zedd„ƒZdS)Ú LargeFileTestcCsÎtj t¡rd}nd}| t|¡˜}t | ¡¡tj}|t dkrTWdƒdS|dkrf|  d¡|  d¡|  t ¡|  d¡|  ¡|  t | ¡¡tjt d¡Wdƒn1sÀ0YdS)Núr+bzw+bérózóa)ÚosÚpathÚexistsrÚopenÚfstatÚfilenoÚstatÚST_SIZEÚsizeÚwriteÚseekÚflushÚ assertEqual)ÚselfÚmodeÚfZ current_size©rú//usr/local/lib/python3.9/test/test_largefile.pyÚsetUps      zLargeFileTest.setUpcCsV| td¡Wdƒn1s"0Yt t¡tjdksJ| d¡‚ttƒdS)NÚwbrz0File was not truncated by opening with mode "wb")rrrrrZfailureExceptionrÚTESTFN2)ÚclsrrrÚ tearDownClass,s  zLargeFileTest.tearDownClassN)Ú__name__Ú __module__Ú __qualname__r Ú classmethodr$rrrrr sr c@sNeZdZdZeeddddd„ƒZdd„Zd d „Zd d „Z d d„Z dd„Z dS)ÚTestFileMethodszWTest that each file function works as expected for large (i.e. > 2 GiB) files. éF)rZmemuseÚdry_runcCs\| td¡<}| t| ¡ƒtd¡| | ¡td¡Wdƒn1sN0YdS)NÚrbr )rrrÚlenÚreadrÚtell)rÚ_sizerrrrÚtest_large_read=szTestFileMethods.test_large_readcCs | t t¡tjtd¡dS)Nr )rrrrrr©rrrrÚ test_osstatDszTestFileMethods.test_osstatcCsÔ| td¡°}| | ¡d¡| | d¡d¡| | ¡d¡| d¡| | ¡d¡| dd¡| | ¡d¡| d¡| | ¡d¡| dd¡| | ¡d¡| dd¡| | ¡d¡| dd¡| | ¡d¡| dd¡| | ¡tdd¡| dd¡| | ¡tdd ¡| t dd¡| | ¡d¡| t¡| | ¡t¡| | d¡d ¡| t dd¡| | d¡d¡| | ¡d¡Wdƒn1sÆ0YdS) Nr,rr r é*éTr*éöÿÿÿé r )rrrr/r.rr©rrrrrÚtest_seek_readGs8         zTestFileMethods.test_seek_readcCs,| td¡}| t | ¡dd¡d¡| t | ¡dd¡d¡| t | ¡dd¡d¡| t | ¡dd¡d¡| t | ¡dd¡tdd¡| t | ¡dd¡tdd¡| t | ¡t dd¡d¡| t | ¡td¡t¡| | d¡d ¡Wdƒn1s0YdS) Nr,rr4r r5r*r6r7r )rrrrÚlseekrrr.r8rrrÚ test_lseekfs"" zTestFileMethods.test_lseekcCs8| td¡}t|dƒs$t d¡‚| dd¡| | ¡td¡td}| |¡|  ¡| | ¡|¡| dd¡| | ¡|¡|d8}| d¡|  |¡| | ¡d¡| dd¡| | ¡|¡| d¡|  d¡| | ¡d¡| d¡| t |  ¡ƒd¡Wdƒn1s*0YdS) Nr Útruncatez.open().truncate() not available on this systemrr*r r7r4) rrÚhasattrÚunittestÚSkipTestrrr/rr<r-r.)rrZnewsizerrrÚ test_truncatess,           zTestFileMethods.test_truncatec CsRdD]H}| td¡(}| |¡| | ¡¡Wdƒq1sB0YqdS)N)iÿÿÿlìr,)rrrZ assertTrueÚseekable)rÚposrrrrÚ test_seekable’s zTestFileMethods.test_seekableN) r%r&r'Ú__doc__rrr1r3r9r;r@rDrrrrr)6s   r)cs‡‡fdd„}|S)Ncs‡‡‡fdd„}|S)NcsHt tj ˆ¡¡jˆkr:tˆddƒ}t d|›d¡‚ˆ|i|¤ŽS)Niz required z MiB of free disk space) ÚshutilÚ disk_usagerrÚrealpathÚfreeÚintr>r?)ÚargsÚkwargsZhsize)ÚfunrÚrequiredrrÚwrappers  ÿz6skip_no_disk_space..decorator..wrapperr)rMrO©rrN)rMrÚ decoratorœsz%skip_no_disk_space..decoratorr)rrNrQrrPrÚskip_no_disk_space›srRc@s,eZdZeejƒZeeedƒdd„ƒZ dS)Ú TestCopyfileç@cCsŠtj t¡}t tt¡| tj t¡|¡ttdƒ@}| |  d¡d¡|  |d¡| |  ¡d¡Wdƒn1s|0YdS)Nr,éózóa) rrÚgetsizerrFÚcopyfiler"rrr.r)rrrrrrÚtest_it¬s   zTestCopyfile.test_itN) r%r&r'Ú staticmethodÚiorrRrrrZrrrrrS§s  rSÚsendfilezsendfile not supportedcsTeZdZeejƒZeZ‡fdd„Z‡fdd„Z dd„Z e e e dƒdd „ƒZ‡ZS) ÚTestSocketSendfilecstƒ ¡d|_dS©N)Úsuperr Úthreadr2©Ú __class__rrr ¾s zTestSocketSendfile.setUpcs,tƒ ¡|jdur(|j |j¡d|_dSr_)r`ÚtearDownraÚjoinÚtimeoutr2rbrrrdÂs  zTestSocketSendfile.tearDowncsJ‡‡fdd„}t ¡‰| ˆj¡tj||fdˆ_ˆj ¡ˆ ¡dS)Nc sÜ|Ä| ¡\}}| ˆj¡|ˆttdƒ^}ˆ ˆj¡| d¡}|srWdƒWdƒWdƒdS| |¡q.run)ÚtargetrK)Ú threadingÚEventrhrfÚThreadraÚstartÚset)rrkrqrrorÚ tcp_serverÈs    zTestSocketSendfile.tcp_serverrTc Cs*t ¡}t d|f¡|}| |¡t d|f¡D}ttdƒ}| |¡Wdƒn1s\0YWdƒn1sz0YWdƒn1s˜0Y|  ¡t j   t¡}|  t j   t¡|¡ttdƒ@}|  | d¡d¡| |d¡|  | ¡d¡Wdƒn1s0YdS)NÚz 127.0.0.1r,rUrVrW)rZfind_unused_portÚsocketÚ create_serverrxÚcreate_connectionrrr]rdrrrXrr"r.r)rÚportrkÚclientrrrrrrZÝs  d  zTestSocketSendfile.test_it)r%r&r'r[r\rrrfr rdrxrRrrrZÚ __classcell__rrrbrr^¹s    r^c Csàzddl}| |j|j¡Wnttfy2Yn0tjdd…dksPtjdkrdtddtt ƒƒnxt t ddd}zVz |  d ¡|  d ¡| ¡Wn ttfy´t d ¡‚Yn0W| ¡tt ƒn| ¡tt ƒ0dS) NréÚwinÚdarwinZ largefilez-test requires %s bytes and a long time to runr!)Ú bufferingrAóxz*filesystem does not have largefile support)ÚsignalÚSIGXFSZÚSIG_IGNÚ ImportErrorÚAttributeErrorÚsysÚplatformrÚstrrrrrrrÚOSErrorÚ OverflowErrorr>r?Úcloser)r…rrrrÚ setUpModuleïs( ÿ    ÿrc@seZdZeejƒZdS)ÚCLargeFileTestN)r%r&r'r[r\rrrrrr‘sr‘c@seZdZeejƒZdS)ÚPyLargeFileTestN)r%r&r'r[Úpyiorrrrrr’sr’cCsttƒttƒdSr_)rrr"rrrrÚtearDownModulesr”Ú__main__)"rErrrŠr>rzrFrsZ test.supportrrrrrrr\Z_pyior“rr"r r)rRZTestCaserSZskipIfr=r^rr‘r’r”r%ÚmainrrrrÚs4   e 5$