a
    äzeÔ  ã                   @   s\   d dl Z d dlZd dlZd dlmZ d dlZe d¡ZG dd„ dejƒZ	e
dkrXe ¡  dS )é    N)ÚsupportÚresourcec                   @   sÚ   e Zd Zdd„ Ze ejdkd¡dd„ ƒZdd„ Z	d	d
„ Z
dd„ Ze ejdkd¡dd„ ƒZdd„ Ze ejdkd¡dd„ ƒZdd„ Ze eedƒd¡e ddd¡dd„ ƒƒZe eedƒd¡e ddd¡dd „ ƒƒZd!S )"ÚResourceTestc                 C   sF   |   ttj¡ |   ttjdd¡ |   ttj¡ |   ttjddd¡ d S ©Né*   )ÚassertRaisesÚ	TypeErrorr   Ú	getrlimitÚ	setrlimit©Úself© r   ú(/usr/lib/python3.9/test/test_resource.pyÚ	test_args   s    zResourceTest.test_argsZvxworksz0setting RLIMIT_FSIZE is not supported on VxWorksc                 C   sL   zt  t j¡\}}W n ty&   Y n"0 |  t j|¡ t  t j||f¡ d S )N)r   r	   ÚRLIMIT_FSIZEÚAttributeErrorÚassertEqualZRLIM_INFINITYr
   )r   ÚcurÚmaxr   r   r   Útest_fsize_ismax   s    zResourceTest.test_fsize_ismaxc                 C   sD  zt  t j¡\}}W n ty(   Y n0 zîzt  t jd|f¡ d}W n ty\   d}Y n0 ttjdƒ}z|| 	d¡ z6| 	d¡ | 
¡  tdƒD ]}t d¡ | 
¡  q’W n tyÄ   |sÀ‚ Y n0 |rÜt  t j||f¡ W | ¡  n
| ¡  0 W |rt  t j||f¡ t tj¡ n&|r2t  t j||f¡ t tj¡ 0 d S )	Ni   TFÚwbs   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXó   Yé   gš™™™™™¹?)r   r	   r   r   r
   Ú
ValueErrorÚopenr   ZTESTFNÚwriteÚflushÚrangeÚtimeÚsleepÚOSErrorÚcloseÚunlink)r   r   r   Z	limit_setÚfÚir   r   r   Útest_fsize_enforced#   s>    	



þz ResourceTest.test_fsize_enforcedc              	   C   s   dd }zt  t j¡\}}W n ty.   Y n^0 zt  t j||f¡ W n ttfy\   Y n0 zt  t j||f¡ W n ttfyŠ   Y n0 d S )Né
   é2   )r   r	   r   r   r
   ÚOverflowErrorr   )r   Ztoo_bigr   r   r   r   r   Útest_fsize_toobigR   s    zResourceTest.test_fsize_toobigc              	   C   sŒ   |   ttj¡ |   ttjdd¡ t tj¡}t tj¡}zt tj¡}W n ttfy^   Y n0 zt tj	¡}W n ttfy†   Y n0 d S r   )
r   r   r   Z	getrusageZRUSAGE_SELFZRUSAGE_CHILDRENZRUSAGE_BOTHr   r   ZRUSAGE_THREAD)r   Z	usageselfZusagechildrenZ	usagebothZusage_threadr   r   r   Útest_getrusagec   s    zResourceTest.test_getrusagez.setting RLIMIT_CPU is not supported on VxWorksc                 C   sF   zt  t j¡}W n ty"   Y n 0 G dd„ dƒ}t  t j|ƒ ¡ d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z9ResourceTest.test_setrusage_refcount.<locals>.BadSequencec                 S   s   dS ©Né   r   r   r   r   r   Ú__len__|   s    zAResourceTest.test_setrusage_refcount.<locals>.BadSequence.__len__c                 S   s    |dv rt ttdƒƒƒS t‚d S )N)r   é   i@B )ÚlenÚtupler   Ú
IndexError©r   Úkeyr   r   r   Ú__getitem__~   s    zEResourceTest.test_setrusage_refcount.<locals>.BadSequence.__getitem__N©Ú__name__Ú
__module__Ú__qualname__r-   r4   r   r   r   r   ÚBadSequence{   s   r9   )r   r	   Z
RLIMIT_CPUr   r
   )r   Úlimitsr9   r   r   r   Útest_setrusage_refcounts   s    z$ResourceTest.test_setrusage_refcountc                 C   s$   t  ¡ }|  |t¡ |  |d¡ d S )Nr   )r   ZgetpagesizeÚassertIsInstanceÚintZassertGreaterEqual)r   Zpagesizer   r   r   Útest_pagesize…   s    zResourceTest.test_pagesizeÚlinuxztest requires Linuxc              	   C   sN   dD ]D}t  t¡& |  ttd| ƒt¡ W d   ƒ q1 s>0    Y  qd S )N)ZMSGQUEUEZNICEZRTPRIOZRTTIMEZ
SIGPENDINGÚRLIMIT_©Ú
contextlibÚsuppressr   r<   Úgetattrr   r=   ©r   Úattrr   r   r   Útest_linux_constantsŠ   s    z!ResourceTest.test_linux_constantsc              	   C   sN   dD ]D}t  t¡& |  ttd| ƒt¡ W d   ƒ q1 s>0    Y  qd S )N)ZSWAPZSBSIZEZNPTSr@   rA   rE   r   r   r   Útest_freebsd_contants   s    z"ResourceTest.test_freebsd_contantsÚprlimitz
no prlimitr,   é   é$   c                 C   s`   |   ttj¡ |   ttjdtj¡ t tj¡}|  t dtj¡|¡ |  t dtj|¡|¡ d S )Néÿÿÿÿr   )r   r   r   rI   ÚProcessLookupErrorÚ	RLIMIT_ASr	   r   )r   Úlimitr   r   r   Útest_prlimit•   s    
ÿÿzResourceTest.test_prlimitc                    s<   G ‡ fdd„dƒ}t  t j¡‰ |  t  dt j|ƒ ¡ˆ ¡ d S )Nc                       s    e Zd Zdd„ Z‡ fdd„ZdS )z2ResourceTest.test_prlimit_refcount.<locals>.BadSeqc                 S   s   dS r+   r   r   r   r   r   r-   ¥   s    z:ResourceTest.test_prlimit_refcount.<locals>.BadSeq.__len__c                    s   ˆ | d S )Nr.   r   r2   ©r:   r   r   r4   §   s    z>ResourceTest.test_prlimit_refcount.<locals>.BadSeq.__getitem__Nr5   r   rQ   r   r   ÚBadSeq¤   s   rR   r   )r   r	   rN   r   rI   )r   rR   r   rQ   r   Útest_prlimit_refcount¡   s
    ÿz"ResourceTest.test_prlimit_refcountN)r6   r7   r8   r   ÚunittestZskipIfÚsysÚplatformr   r%   r)   r*   r;   r>   Z
skipUnlessrG   rH   Úhasattrr   r   Zrequires_linux_versionrP   rS   r   r   r   r   r      s,   ÿ
/ÿ


r   Ú__main__)rB   rU   rT   Útestr   r   Úimport_moduler   ZTestCaser   r6   Úmainr   r   r   r   Ú<module>   s   
 %