o
    HXîh*  ã                   @   sx   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dlZe 	d¡Z
G dd„ dejƒZedkr:e ¡  dS dS )	é    N)Úsupport)Úimport_helper)Ú	os_helperÚ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   ú</opt/python-3.10.19/usr/lib/python3.10/test/test_resource.pyÚ	test_args   s   zResourceTest.test_argsÚvxworksz0setting RLIMIT_FSIZE is not supported on VxWorksc                 C   sN   z
t  t j¡\}}W n
 ty   Y d S w |  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   s>  z
t  t j¡\}}W n
 ty   Y d S w zwzt  t jd|f¡ d}W n ty.   d}Y nw ttjdƒ}z>| 	d¡ z| 	d¡ | 
¡  tdƒD ]}t d¡ | 
¡  qIW n tyb   |s`‚ Y nw |rnt  t j||f¡ W | ¡  n| ¡  w W |r…t  t j||f¡ t tj¡ d S |r˜t  t j||f¡ t tj¡ w )	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%   sJ   ÿ
ÿ



þÿÿ€þz ResourceTest.test_fsize_enforcedc              	   C   s’   dd }z
t  t j¡\}}W n
 ty   Y d S w zt  t j||f¡ W n ttfy/   Y nw zt  t j||f¡ W d S  ttfyH   Y d S w )Né
   é2   )r   r   r   r   r   ÚOverflowErrorr   )r   Ztoo_bigr   r   r   r   r   Útest_fsize_toobigT   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w z	t tj	¡}W d S  ttfyE   Y d S w 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_getrusagee   s   ÿÿzResourceTest.test_getrusagez.setting RLIMIT_CPU is not supported on VxWorksc                 C   sH   zt  t j¡}W n
 ty   Y d S w 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   ó   dS ©Né   r   r   r   r   r   Ú__len__~   ó   zAResourceTest.test_setrusage_refcount.<locals>.BadSequence.__len__c                 S   s   |dv rt ttdƒƒƒS t‚)N)r   é   i@B )ÚlenÚtupler    Ú
IndexError©r   Úkeyr   r   r   Ú__getitem__€   s   zEResourceTest.test_setrusage_refcount.<locals>.BadSequence.__getitem__N©Ú__name__Ú
__module__Ú__qualname__r1   r9   r   r   r   r   ÚBadSequence}   s    r>   )r   r   Z
RLIMIT_CPUr   r   )r   Úlimitsr>   r   r   r   Útest_setrusage_refcountu   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   óN   dD ]"}t  t¡ |  ttd| ƒt¡ W d   ƒ n1 sw   Y  qd S )N)ZMSGQUEUEZNICEZRTPRIOZRTTIMEZ
SIGPENDINGÚRLIMIT_©Ú
contextlibÚsuppressr   rA   Úgetattrr   rB   ©r   Úattrr   r   r   Útest_linux_constantsŒ   s   ÿ€ÿz!ResourceTest.test_linux_constantsc              	   C   rE   )N)ZSWAPZSBSIZEZNPTSrF   rG   rK   r   r   r   Útest_freebsd_contants’   s   ÿ€ÿz"ResourceTest.test_freebsd_contantsÚprlimitz
no prlimitr0   é   é$   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   rO   Ú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   r.   r/   r   r   r   r   r   r1   §   r2   z:ResourceTest.test_prlimit_refcount.<locals>.BadSeq.__len__c                    s   ˆ | d S )Nr3   r   r7   ©r?   r   r   r9   ©   s   z>ResourceTest.test_prlimit_refcount.<locals>.BadSeq.__getitem__Nr:   r   rW   r   r   ÚBadSeq¦   s    rX   r   )r   r   rT   r   rO   )r   rX   r   rW   r   Útest_prlimit_refcount£   s
   ÿz"ResourceTest.test_prlimit_refcountN)r;   r<   r=   r   ÚunittestZskipIfÚsysÚplatformr   r(   r,   r-   r@   rC   Z
skipUnlessrM   rN   Úhasattrr   r   Zrequires_linux_versionrV   rY   r   r   r   r   r      s.    ÿ
/ÿ


r   Ú__main__)rH   r[   rZ   Útestr   Ztest.supportr   r   r!   Úimport_moduler   ZTestCaser   r;   Úmainr   r   r   r   Ú<module>   s    
 %ÿ