
    <e`                       	 d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ  ej        d          Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ 	 d dlZn# e$ r dZY nw xY wej                             ej                    ej        d	z             Z ej        ej        d
k     oej         pej!         d          Z"d Z# ej         e#            d          Z$ G d dej%                  Z& G d dej%                  Z' G d dej%                  Z( G d d          Z) ej         e*ed          d           G d dej%        e)                      Z+ ej         e*ed          d           G d dej%        e)                      Z, ej        ej        dk    d           G d  d!ej%                              Z-d" Z.e/d#k    r ej0                     dS dS )$    )support)import_helper)	os_helper)warnings_helper)assert_python_okposixN)contextmanagerz-dummy-symlink        z(test is only meaningful on 32-bit buildsc                      t          t          d          sdS 	 t                              d           n2# t          $ r%} | j        t          j        k    rY d } ~ dS Y d } ~ nd } ~ ww xY wdS )Nsched_getschedulerFr   T)hasattrr   r   OSErrorerrnoENOSYS)es    &/usr/lib/python3.11/test/test_posix.py_supports_schedr   '   s    5.// u  ####   7el""55555 #"""" 4s   4 
A#AA#zrequires POSIX scheduler APIc                   l   e Zd Zd Zd Z ej         eed          d          d             Z	 ej         eed          d          d             Z
 ej         eed	          d
          d             Z ej         eed	          d
          d             Z ej         eed          d          d             Z ej         eed          d          d             Z ej         eed          d           ej         eed          d          d                         Z ej         eed          d          d             Z ej         eed          d          d             Z ej         eed          d          d             Z ej         eed          d           d!             Z ej         eed"d#          ej        v d$           ej                    d%                         Z ej         eed&          d'           ej                    d(                         Z ej                    d)             Z ej         eed*          d+          d,             Z ej         eed-          d.          d/             Z ej         eed0          d1          d2             Z ej         eed0          d1           ej         eed3          d4          d5                         Z  ej         eed0          d1          e!d6                         Z" ej         eed7          d8          d9             Z# ej         eed:          d;          d<             Z$ ej         eed:          d;           ej         eed=          d>          d?                         Z% ej         eed:          d;          e!d@                         Z& ej         eedA          dB          dC             Z' ej         eedA          dB          dD             Z( ej         eedE          dF          dG             Z) ej         eedE          dF          dH             Z* ej        ej+        ej        v dI          dJ             Z, ej        ej+        ej-        v dK          dL             Z. ej         eedM          dN          dO             Z/ ej         eedM          dN          e!dP                         Z0 ej         eedQ          dR          dS             Z1 ej         eedQ          dR          e!dT                         Z2 ej         eedU          dV           ej3        ej4        dW          dX                         Z5 ej         eedY          dZ          d[             Z6 ej         eed\          d]           ej3        ej4        d^          d_                         Z7 ej         eed`          da           ej8        dbdcdd           ej9                    de                                     Z: ej         eedf          dg          dh             Z; ej         eedi          dj          dk             Z< ej         eedl          dm          dn             Z=do Z> ej         eedp          dq          dr             Z? ej         eeds          o ee@dt          du          dv             ZA ej         eedw          dx          dy             ZBdz ZCeDjE         ej3        ejF        d{          d|                         ZGeDjE         ej         eed}          d~           ej3        ejF        d{          d                                     ZHeDjE         ej         eed          d          d                         ZI ej         eed          d          d             ZJd ZKd ZLd ZMd ZN ej        ejO        ej        v d          d             ZP ej         eed          d          d             ZQ ej         eed          d          d             ZR ej         eed          d          d             ZS ej         eed          d          d             ZT ej         eed          d           ej8        dbdcd          d                         ZUejV         ej         eed          d           ej8        dbdcd          d                                     ZW ej         eed          d          d             ZXd ZY ej         eed          d          d             ZZ ej         eed          d          d             Z[ ej         eed          d          d             Z\d Z]d Z^ ej         eed          d          d             Z_ ej         eed          d           ej         eed          d           ej         eed          d          d                                     Z` ej         eed          d           ej         eed          d           ej9                    d                                     Za ej         eebd          d           ej         eed          d          d                         Zc ej         eed          d          Zd ej         eed          d          Zeedd             Zfed ej         eed          d¦          dÄ                         ZgehdĄ             Zi ej         eedŦ          dƦ          dǄ             ZjeedȄ             ZkeedɄ             Zl ej3        ej4        dʦ          d˄             Zm ej         eed̦          dͦ          d΄             Zndτ ZodЄ Zpdф Zq ej         eedҦ          dӦ          dԄ             Zrd#S )PosixTesterc                 B   |                      t          j        t          j                   t	          t          j        d          5  	 d d d            n# 1 swxY w Y   |                     t          j                               t          j	        ddt                     d S )Nwbignorez.* potential security risk .*)
addCleanupr   unlinkTESTFNopenenterContextr   check_warningswarningsfilterwarningsRuntimeWarningselfs    r   setUpzPosixTester.setUp6   s    	()*:;;;)"D)) 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	/8::;;;*I .	0 	0 	0 	0 	0s   AAAc                     g d}|D ]m}t          t          |d           }|S|                     |          5   |             |                     t          |d           d d d            n# 1 swxY w Y   nd S )N)ctermidgetcwdgetcwdbunametimes
getloadavggetegidgeteuidgetgid	getgroupsgetpidgetpgrpgetppidgetuidsync   )getattrr   subTestassertRaises	TypeError)r#   NO_ARG_FUNCTIONSname
posix_funcs       r   testNoArgFunctionszPosixTester.testNoArgFunctions?   s       % 	@ 	@D d33J%\\$'' @ @JLLL%%iQ???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @	@ 	@s   'A))A-	0A-		getresuidztest needs posix.getresuid()c                     t                                           }|                     t          |          d           |D ]}|                     |d           d S N   r   )r   r>   assertEquallenassertGreaterEqual)r#   user_idsvals      r   test_getresuidzPosixTester.test_getresuidO   sa     ??$$X*** 	, 	,C##C++++	, 	,    	getresgidztest needs posix.getresgid()c                     t                                           }|                     t          |          d           |D ]}|                     |d           d S r@   )r   rI   rB   rC   rD   )r#   	group_idsrF   s      r   test_getresgidzPosixTester.test_getresgidW   sa     OO%%	Y+++ 	, 	,C##C++++	, 	,rH   	setresuidztest needs posix.setresuid()c                     t                                           }|                     t          j        |            |                     t                               ddd                     d S N)r   r>   assertIsNonerM   )r#   current_user_idss     r   test_setresuidzPosixTester.test_setresuid_   sZ     !??,,%/+;<===%//"b"5566666rH   c                     t                                           }d|vr.|d         dz   ddf} | j        t          t           j        g|R   d S d S Nr   r5   rP   )r   r>   r8   r   rM   )r#   rR   new_user_idss      r   test_setresuid_exceptionz$PosixTester.test_setresuid_exceptiong   sc     !??,,$$$,Q/12r:LDguFFFFFFF %$rH   	setresgidztest needs posix.setresgid()c                     t                                           }|                     t          j        |            |                     t                               ddd                     d S rO   )r   rI   rQ   rX   )r#   current_group_idss     r   test_setresgidzPosixTester.test_setresgidp   sZ     "OO--%/+<=>>>%//"b"5566666rH   c                     t                                           }d|vr.|d         dz   ddf} | j        t          t           j        g|R   d S d S rU   )r   rI   r8   r   rX   )r#   rZ   new_group_idss      r   test_setresgid_exceptionz$PosixTester.test_setresgid_exceptionx   sc     "OO--%%%.q1!3R<MDguGGGGGGG &%rH   
initgroupsztest needs os.initgroups()getpwuidztest needs pwd.getpwuid()c                    |                      t          t          j                   |                      t          t          j        d            |                      t          t          j        dd           |                      t          t          j        ddt	                                 t          j                    dk    r	 t          j        t                                                    j	        }n"# t          $ r t          j        d          w xY w	 t                              |d           |                     d           d S # t          $ r0}|                     |j        t           j                   Y d }~d S d }~ww xY wd S )NrA   foor   zneed a pwd entry   z+Expected OSError to be raised by initgroups)r8   r9   r   r_   objectosr3   pwdr`   pw_nameKeyErrorunittestSkipTestfailr   rB   r   EPERM)r#   r;   r   s      r   test_initgroupszPosixTester.test_initgroups   se    	)U%5666)U%5t<<<)U%5q%@@@)U%5uaJJJ 9;;!<|ELLNN33; < < <'(:;;;<I  r*** 		GHHHHH  7 7 7  %+6666666667 s$   ?0C0 0DE 
E?%E::E?statvfsztest needs posix.statvfs()c                 t    |                      t                              t          j                             d S N)
assertTruer   rn   re   curdirr"   s    r   test_statvfszPosixTester.test_statvfs   s*     	bi0011111rH   fstatvfsztest needs posix.fstatvfs()c                    t          t          j                  }	 |                     t                              |                                                     |                     t                              |                                                     |                                 d S # |                                 w xY wrp   )	r   r   r   rq   r   rt   filenorn   closer#   fps     r   test_fstatvfszPosixTester.test_fstatvfs   s     )"##	OOENN299;;77888OOEMM"))++66777HHJJJJJBHHJJJJs   A>B/ /C	ftruncateztest needs posix.ftruncate()c                 B   t          t          j        d          }	 |                    d           |                                 t
                              |                                d           |                                 d S # |                                 w xY w)Nw+testr   )	r   r   r   writeflushr   r{   rv   rw   rx   s     r   test_ftruncatezPosixTester.test_ftruncate   sy     )"D))	HHVHHJJJOOBIIKK+++HHJJJJJBHHJJJJs   AB Btruncateztest needs posix.truncate()c                    t          t          j        d          5 }|                    d           |                                 d d d            n# 1 swxY w Y   t
                              t          j        d           d S )Nwr~   r   )r   r   r   r   r   r   r   rx   s     r   test_truncatezPosixTester.test_truncate   s    )"C(( 	BHHVHHJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	y'+++++s   *AAAexecveNz/test needs execve() to support the fd parameterc                    t          j        t          j        t           j                  }	 t          j                    }|dk    rut          j        t           j                            t          j                  d                    t          
                    |t          j        ddgt           j                   nt          j        |d           t          j        |           d S # t          j        |           w xY w)Nr   -cpassexitcode)re   r   sys
executableO_RDONLYforkchdirpathsplitr   r   environr   wait_processrw   )r#   ry   pids      r   test_fexecvezPosixTester.test_fexecve   s     WS^R[11	'))Caxxs~66q9:::R#.$!?LLLL$S15555HRLLLLLBHRLLLLs   B$C% %C;waitidztest needs posix.waitid()c                    t          j                    }|dk    rt          j        t           j                            t
          j                  d                    t                              t
          j        t
          j        ddgt           j	                   d S t          
                    t          j        |t          j                  }|                     ||j                   d S )Nr   r   r   )re   r   r   r   r   r   r   r   r   r   r   P_PIDWEXITEDrB   si_pid)r#   r   ress      r   test_waitidzPosixTester.test_waitid   s     gii!88HRW]]3>2215666LL#.$)GTTTTT,,u{C??CS#*-----rH   c                 T   |                      t          d          5  t          j        d            d d d            n# 1 swxY w Y   |                      t          d          5  t          j        d           d d d            n# 1 swxY w Y   |                      t          d          5  t          j        d           d d d            n# 1 swxY w Y   |                      t          d          5  t          j        d	
           d d d            n# 1 swxY w Y   |                      t          d          5  t          j        d            d d d            n# 1 swxY w Y   |                      t          d          5  t          j        d            d d d            n# 1 swxY w Y   |                      t          d          5  t          j        d 
           d d d            n# 1 swxY w Y   |                      t          d          5  t          j        d d            d d d            n# 1 swxY w Y   |                      t          d          5  t          j        d d           d d d            n# 1 swxY w Y   d}t	          d|           d S )NzPositional args not allowed)msgc                      d S rp    r   rH   r   <lambda>z3PosixTester.test_register_at_fork.<locals>.<lambda>   s     rH   zArgs must be callable   )beforethree)after_in_childs   Five)after_in_parentzArgs must not be NonezInvalid arg was allowedc                      dS )NrA   r   r   rH   r   r   z3PosixTester.test_register_at_fork.<locals>.<lambda>   s    Q rH   )r   r   c                      d S rp   r   r   rH   r   r   z3PosixTester.test_register_at_fork.<locals>.<lambda>   s    t rH    )r   r   a  if 1:
            import os

            r, w = os.pipe()
            fin_r, fin_w = os.pipe()

            os.register_at_fork(before=lambda: os.write(w, b'A'))
            os.register_at_fork(after_in_parent=lambda: os.write(w, b'C'))
            os.register_at_fork(after_in_child=lambda: os.write(w, b'E'))
            os.register_at_fork(before=lambda: os.write(w, b'B'),
                                after_in_parent=lambda: os.write(w, b'D'),
                                after_in_child=lambda: os.write(w, b'F'))

            pid = os.fork()
            if pid == 0:
                # At this point, after-forkers have already been executed
                os.close(w)
                # Wait for parent to tell us to exit
                os.read(fin_r, 1)
                os._exit(0)
            else:
                try:
                    os.close(w)
                    with open(r, "rb") as f:
                        data = f.read()
                        assert len(data) == 6, data
                        # Check before-fork callbacks
                        assert data[:2] == b'BA', data
                        # Check after-fork callbacks
                        assert sorted(data[2:]) == list(b'CDEF'), data
                        assert data.index(b'C') < data.index(b'D'), data
                        assert data.index(b'E') < data.index(b'F'), data
                finally:
                    os.write(fin_w, b'!')
            r   )r8   r9   re   register_at_forkr   )r#   codes     r   test_register_at_forkz!PosixTester.test_register_at_fork   s   y.KLL 	. 	.---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.y.EFF 	* 	*q))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*y.EFF 	8 	8w7777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8y.EFF 	9 	98888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9y.EFF 	- 	-t,,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-y.EFF 	5 	5t4444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5y.EFF 	6 	65555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6y.GHH 	H 	HtYYGGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H y.GHH 	H 	H||BGGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H
"F 	t$$$$$s   ?AA&BBB/CCC8DD!DE##E'*E'
F,,F03F0G55G9<G9I  II'JJJlockfztest needs posix.lockf()c                    t          j        t          j        t           j        t           j        z            }	 t          j        |d           t          j        |dt           j                   t          
                    |t          j        d           t          
                    |t          j        d           t          j        |           d S # t          j        |           w xY w)N   testr      )re   r   r   r   O_WRONLYO_CREATr   lseekSEEK_SETr   r   F_LOCKF_ULOCKrw   r#   fds     r   
test_lockfzPosixTester.test_lockf  s    WY%r{RZ'?@@	HR!!!HRBK(((KKEL!,,,KKEM1---HRLLLLLBHRLLLLs   BC C%preadztest needs posix.pread()c                    t          j        t          j        t           j        t           j        z            }	 t          j        |d           t          j        |dt           j                   | 	                    dt                              |dd                     | 	                    dt                              |d                     t          j        |           d S # t          j        |           w xY w)Nr   r   s   esr   r5   s   te)re   r   r   r   O_RDWRr   r   r   r   rB   r   r   readrw   r   s     r   
test_preadzPosixTester.test_pread   s    WY%ry2:'=>>	HR!!!HRBK(((UEKKAq$9$9:::UEJJr1$5$5666HRLLLLLBHRLLLLs   BC" "C8preadvztest needs posix.preadv()c                    t          j        t          j        t           j        t           j        z            }	 t          j        |d           d dD             }|                     t          	                    ||d          d           |                     g dt          |                     t          j        |           d S # t          j        |           w xY w)N   test1tt2t3t5t6t6t8c                 ,    g | ]}t          |          S r   	bytearray.0is     r   
<listcomp>z+PosixTester.test_preadv.<locals>.<listcomp>1      333A9Q<<333rH      rA   r   rA   
   s   t1tt2s   t3ts   5t)re   r   r   r   r   r   r   rB   r   r   listrw   )r#   r   bufs      r   test_preadvzPosixTester.test_preadv,  s    WY%ry2:'=>>	HR.///33333CU\\"c155r:::666S		BBBHRLLLLLBHRLLLLs   A6C C	RWF_HIPRIztest needs posix.RWF_HIPRIc                    t          j        t          j        t           j        t           j        z            }	 t          j        |d           d dD             }|                     t          	                    ||dt           j
                  d           |                     g dt          |                     nf# t          $ r |                     d           Y nEt          $ r9}|j        t          j        t          j        hv rt%          j        d           d }~ww xY wt          j        |           d S # t          j        |           w xY w)	Nr   c                 ,    g | ]}t          |          S r   r   r   s     r   r   z1PosixTester.test_preadv_flags.<locals>.<listcomp>=  r   rH   r   rA   r   r   zpreadv2 not availablez0RWF_HIPRI is not supported by the current system)re   r   r   r   r   r   r   rB   r   r   r   r   NotImplementedErrorskipTestr   r   EINVALENOTSUPri   rj   rw   )r#   r   r   insts       r   test_preadv_flagszPosixTester.test_preadv_flags7  s8    WY%ry2:'=>>	HR.///33333CU\\"c1blCCRHHH666S		BBBB" 	3 	3 	3MM122222 	 	 	 zelEM:::'(Z[[[	 HRLLLLLBHRLLLLs6   BB: 9D6 :DD6 	D$4DDD6 6Ec                 0   t          j        t          j        t           j        t           j        z            }	 t          d          gdz  }|                     t                    5 }t          j	        ||d           d d d            n# 1 swxY w Y   | 
                    |j        j        t          j                   | 
                    t          |d                   ddz             t          j        |           d S # t          j        |           w xY wN      r       )re   r   r   r   r   r   r   r8   r   r   rB   	exceptionr   r   bytesrw   r#   r   r   cms       r   test_preadv_overflow_32bitsz'PosixTester.test_preadv_overflow_32bitsM  s    WY%ry2:'=>>	U##$u,C""7++ &r	"c1%%%& & & & & & & & & & & & & & &R\/>>>U3q6]]E5L999HRLLLLLBHRLLLLs0   -C? %B<C? BC? BAC? ?Dpwriteztest needs posix.pwrite()c                    t          j        t          j        t           j        t           j        z            }	 t          j        |d           t          j        |dt           j                   t          
                    |dd           |                     dt                              |d                     t          j        |           d S # t          j        |           w xY w)Nr   r      xxr5   s   txxtr   )re   r   r   r   r   r   r   r   r   r   r   rB   r   rw   r   s     r   test_pwritezPosixTester.test_pwriteZ  s    WY%ry2:'=>>	HR!!!HRBK(((LLUA&&&WejjQ&7&7888HRLLLLLBHRLLLLs   B C C$pwritevztest needs posix.pwritev()c                 2   t          j        t          j        t           j        t           j        z            }	 t          j        |d           t          j        |dt           j                   t          j	        |g dd          }| 
                    |d           t          j        |dt           j                   | 
                    dt                              |d                     t          j        |           d S # t          j        |           w xY w)Nr   r   s   test1s   tt2s   t3r   r   s   xxtest1tt2t3d   )re   r   r   r   r   r   r   r   r   r   rB   r   r   rw   r#   r   ns      r   test_pwritevzPosixTester.test_pwriteve  s    WY%ry2:'=>>		HRHRBK(((
2888!<<AQ###HRBK(((_ejjS.A.ABBBHRLLLLLBHRLLLLs   B2D   Dzos.RWF_SYNCztest needs os.RWF_SYNCc                 H   t          j        t          j        t           j        t           j        z            }	 t          j        |d           t          j        |dt           j                   t          j	        |g ddt           j
                  }|                     |d           t          j        |dt           j                   |                     dt                              |d                     t          j        |           d S # t          j        |           w xY w)Nr   r   r   r   r   s
   xxtest1tt2r   )re   r   r   r   r   r   r   r   r   r   RWF_SYNCrB   r   r   rw   r   s      r   test_pwritev_flagszPosixTester.test_pwritev_flagss  s     WY%ry2:'=>>		HRHRBK(((
2888!R[IIAQ###HRBK(((]EJJr3,?,?@@@HRLLLLLBHRLLLLs   B=D D!c                    t          j        t          j        t           j        t           j        z            }	 |                     t                    5 }t          j        |ddz  gdz  d           d d d            n# 1 swxY w Y   | 	                    |j
        j        t          j                   t          j        |           d S # t          j        |           w xY w)N   xr   r   r   )re   r   r   r   r   r   r8   r   r   rB   r   r   r   rw   r#   r   r   s      r   test_pwritev_overflow_32bitsz(PosixTester.test_pwritev_overflow_32bits  s     WY%ry2:'=>>	""7++ :r
2u~5q999: : : : : : : : : : : : : : :R\/>>>HRLLLLLBHRLLLLs/   C A<0C <B  C B -C Cposix_fallocatez"test needs posix.posix_fallocate()c                    t          j        t          j        t           j        t           j        z            }	 t                              |dd           n[# t          $ rN}|j	        t          j
        k    r3t          j                            d          rt          j        d           d }~ww xY w	 t          j        |           d S # t          j        |           w xY w)Nr   r   )sunosfreebsdnetbsdopenbsdgnukfreebsdz test may fail on ZFS filesystems)re   r   r   r   r   r   r   r   r   r   r   r   platform
startswithri   rj   rw   )r#   r   r   s      r   test_posix_fallocatez PosixTester.test_posix_fallocate  s     WY%r{RZ'?@@	!!"a,,,, 		 		 		
 zU\))cl.E.EH/J /J)'(JKKK		 - HRLLLLLBHRLLLLs*   A C 
B-A	B((B--C Cc                     	 t                               ddd           d S # t          $ r!}|j        t          j        k    r Y d }~d S d }~ww xY w)Nr   r   )r   r   r   r   EBADFr#   r   s     r   test_posix_fallocate_errnoz&PosixTester.test_posix_fallocate_errno  sj    	!!#q"----- 	 	 	zU[(( )(((((	s     
AAAposix_fadvisez test needs posix.posix_fadvise()c                    t          j        t          j        t           j                  }	 t
                              |ddt
          j                   t          j        |           d S # t          j        |           w xY wNr   )	re   r   r   r   r   r   r  POSIX_FADV_WILLNEEDrw   r   s     r   test_posix_fadvisezPosixTester.test_posix_fadvise  s_     WY%r{33	Aq%*CDDDHRLLLLLBHRLLLLs   'A( (A>c                     	 t                               dddt           j                   d S # t          $ r!}|j        t          j        k    r Y d }~d S d }~ww xY w)Nr  r   )r   r  r	  r   r   r  r  s     r   test_posix_fadvise_errnoz$PosixTester.test_posix_fadvise_errno  so    	Q5+DEEEEE 	 	 	zU[(( )(((((	s   '+ 
AAAz!test needs fd support in os.utimec           
         t          j                     }t          j        t          j        t          j                  }	 t                              |           t                              |d            |                     t          t          j        |d           |                     t          t          j        ||d f           |                     t          t          j        |d |f           t                              |t          |          t          |          f           t                              |||f           |                     t          t          j        |||f||f           |                     t          t          j        ||dfd           |                     t          t          j        |d|df           t                              |t          |          t          |t          |          z
  dz            f           t                              |t          |          t          |t          |          z
  dz            f           t          j        |           d S # t          j        |           w xY w)NNN)nsr       eA)timere   r   r   r   r   r   utimer8   r9   int
ValueErrorrw   )r#   nowr   s      r   test_utime_with_fdzPosixTester.test_utime_with_fd  s   ikkWY%r{33	KKOOOKKD!!!ib,GGGib3+FFFib4+FFFKKSXXs3xx0111KKS#J'''j%+rC:3PS*UUUj%+rC8UUUj%+r<SRSHUUUKKSXXsC#c((Nc+A'B'BCDDDKKC#sSXX~.D*E*EFKGGG HRLLLLLBHRLLLLs   HI. .Jz.test needs follow_symlinks support in os.utimec                    t          j                     }t                              t          j        d d           |                     t          t          j        t          j        dd           |                     t          t          j        t          j        |d fd           |                     t          t          j        t          j        d |fd           t                              t          j        t          |          t          |          fd           t                              t          j        ||fd           t                              t          j        d           d S )NFfollow_symlinksr  r  r   r  r   r   r8   r9   r  r#   r  s     r   test_utime_nofollow_symlinksz(PosixTester.test_utime_nofollow_symlinks  s+   ikkI$dEBBB)U[)2B& 	 	? 	? 	?)U[)2B+u 	 	> 	> 	>)U[)2B+u 	 	> 	> 	>I$s3xxS&:$) 	 	+ 	+ 	+I$sCj%HHHI$e<<<<<rH   writevztest needs posix.writev()c                 H   t          j        t          j        t           j        t           j        z            }	 t          j        |d          }|                     |d           t          j        |dt           j	                   |                     dt                              |d                     	 t                              |g           }|                     |d           n# t          $ r Y nw xY wt          j        |           d S # t          j        |           w xY w)Nr   r   r   
   test1tt2t3)re   r   r   r   r   r   r  rB   r   r   r   r   r   rw   )r#   r   r   sizes       r   test_writevzPosixTester.test_writev  s   WY%ry2:'=>>		"788AQ###HRBK(((]EJJr2,>,>???*||B++   q))))      HRLLLLLBHRLLLLs0   A:D 3C% D %
C2/D 1C22D D!c                    t          j        t          j        t           j        t           j        z            }	 |                     t                    5 }t          j        |ddz  gdz             d d d            n# 1 swxY w Y   | 	                    |j
        j        t          j                   t          j        |           d S # t          j        |           w xY w)Nr   r   r   )re   r   r   r   r   r   r8   r   r  rB   r   r   r   rw   r   s      r   test_writev_overflow_32bitsz'PosixTester.test_writev_overflow_32bits  s     WY%ry2:'=>>	""7++ 6r	"te|nu45556 6 6 6 6 6 6 6 6 6 6 6 6 6 6R\/>>>HRLLLLLBHRLLLLs/   C A;/C ;A??C A?-C Creadvztest needs posix.readv()c                 x   t          j        t          j        t           j        t           j        z            }	 t          j        |d           t          j        |dt           j                   d dD             }| 	                    t                              ||          d           | 	                    g dd |D                        	 t                              |g           }| 	                    |d           n# t          $ r Y nw xY wt          j        |           d S # t          j        |           w xY w)Nr  r   c                 ,    g | ]}t          |          S r   r   r   s     r   r   z*PosixTester.test_readv.<locals>.<listcomp>  r   rH   r   r   r   c                 ,    g | ]}t          |          S r   )r   r   s     r   r   z*PosixTester.test_readv.<locals>.<listcomp>	  s    8O8O8Oaq8O8O8OrH   )re   r   r   r   r   r   r   r   r   rB   r   r$  r   rw   )r#   r   r   r   s       r   
test_readvzPosixTester.test_readv  s+   WY%ry2:'=>>	HR'''HRBK(((33333CU[[S1126666668O8O38O8O8OPPP*{{2r**   q))))      HRLLLLLBHRLLLLs0   BD# C= &D# =
D
D# 	D

D# #D9c                 .   t          j        t          j        t           j        t           j        z            }	 t          d          gdz  }|                     t                    5 }t          j	        ||           d d d            n# 1 swxY w Y   | 
                    |j        j        t          j                   | 
                    t          |d                   ddz             t          j        |           d S # t          j        |           w xY wr   )re   r   r   r   r   r   r   r8   r   r$  rB   r   r   r   r   rw   r   s       r   test_readv_overflow_32bitsz&PosixTester.test_readv_overflow_32bits  s    WY%ry2:'=>>	U##$u,C""7++ "rS!!!" " " " " " " " " " " " " " "R\/>>>U3q6]]E5L999HRLLLLLBHRLLLLs0   -C> %B;C> BC> BAC> >Ddupztest needs posix.dup()zWASI does not have dup()c                 J   t          t          j                  }	 t                              |                                          }|                     |t                     t          j	        |           |	                                 d S # |	                                 w xY wrp   )
r   r   r   r   r+  rv   assertIsInstancer  re   rw   )r#   ry   r   s      r   test_dupzPosixTester.test_dup$  sx     )"##	299;;''B!!"c***HRLLLHHJJJJJBHHJJJJs   AB B"confstrztest needs posix.confstr()c                     |                      t          t          j        d           |                     t          t                              d                    dk    d           d S )N
CS_garbageCS_PATHr   T)r8   r  r   r/  rB   rC   r"   s    r   test_confstrzPosixTester.test_confstr0  sS     	*em\BBBU]]95566:DAAAAArH   dup2ztest needs posix.dup2()zWASI does not have dup2()c                    t          t          j                  }t          t          j                  }	 t                              |                                |                                           |                                 |                                 d S # |                                 |                                 w xY wrp   )r   r   r   r   r4  rv   rw   )r#   fp1fp2s      r   	test_dup2zPosixTester.test_dup26  s     9#$$9#$$	JJszz||SZZ\\222IIKKKIIKKKKK IIKKKIIKKKKs   ?B *C	O_CLOEXECzneeds os.O_CLOEXECr         c                     t          j        t          j        t           j        t           j        z            }|                     t           j        |           |                     t          j	        |                     d S rp   )
re   r   r   r   r   r9  r   rw   assertFalseget_inheritabler   s     r   test_oscloexeczPosixTester.test_oscloexecB  s\     WY%r{2<'?@@"%%%+B//00000rH   O_EXLOCKztest needs posix.O_EXLOCKc                    t          j        t          j        t           j        t           j        z  t           j        z            }|                     t          t           j        t          j        t           j        t           j        z  t           j	        z             t          j
        |           t          t          d          rt          j        t          j        t           j        t           j        z  t           j        z            }|                     t          t           j        t          j        t           j        t           j        z  t           j	        z             t          j
        |           d S d S )NO_SHLOCK)re   r   r   r   r   r@  r   r8   r   
O_NONBLOCKrw   r   r   rB  r   s     r   test_osexlockzPosixTester.test_osexlockJ  s    WY%[,RZ79 9'27I,<+bk1"-?	A 	A 	A
5*%% 	)R[0;= =Bgrw	0@ k"+5bmCE E EHRLLLLL	 	rH   rB  ztest needs posix.O_SHLOCKc                    t          j        t          j        t           j        t           j        z  t           j        z            }t          j        t          j        t           j        t           j        z  t           j        z            }t          j        |           t          j        |           t          t          d          rt          j        t          j        t           j        t           j        z  t           j        z            }| 
                    t          t           j        t          j        t           j        t           j        z  t           j        z             t          j        |           d S d S )Nr@  )re   r   r   r   r   rB  r   rw   r   r   r8   r   r   r@  rC  )r#   fd1fd2r   s       r   test_osshlockzPosixTester.test_osshlockZ  s     gi&[,RZ79 9gi&k"+-bj8: :

5*%% 	)R[0;= =Bgrw	0@ k"+5bmCE E EHRLLLLL	 	rH   fstatztest needs posix.fstat()c           	         t          t          j                  }	 |                     t                              |                                                     |                     t                              |                                                     |                     t          dt          j        t          |                                                     |                                 d S # |                                 w xY wNz4should be string, bytes, os.PathLike or integer, not)r   r   r   rq   r   rI  rv   statassertRaisesRegexr9   floatrw   rx   s     r   
test_fstatzPosixTester.test_fstatk  s     )"##	OOEKK		44555OOEJJryy{{33444""9JJbiikk 2 24 4 4 HHJJJJJBHHJJJJs   CC5 5Dc           
         |                      t                              t          j                             |                      t                              t          j        t          j                                       |                     t          dt          j        t          t          j        t          j                                       | 
                    t          dt          j        d            | 
                    t          dt          j        t          t          j                             | 
                    t          dt          j        t          t          j        t          j                                       d S rK  )rq   r   rL  r   r   re   fsencodeassertWarnsRegexDeprecationWarningr   rM  r9   r   r"   s    r   	test_statzPosixTester.test_staty  s,   

9#344555

2;y/?#@#@AABBB0F
Ibk)2B&C&CDD	F 	F 	F 	yF
D	" 	" 	" 	yF
D!122	4 	4 	4 	yF
DY-=!>!>??	A 	A 	A 	A 	ArH   mkfifozdon't have mkfifo()c                 J   t           j        dk    r+t          j                            dt
          j                  }nt
          j        }t          j        |           |                     t
          j        |           	 t          
                    |t          j        t          j        z             n/# t          $ r"}|                     d|z             Y d }~nd }~ww xY w|                     t          j        t                              |          j                             d S )Nvxworksz/fifos/posix.mkfifo(): %s)r   r   re   r   joinr   r   r   r   r   rU  rL  S_IRUSRS_IWUSRPermissionErrorr   rq   S_ISFIFOst_mode)r#   	fifo_pathr   s      r   test_mkfifozPosixTester.test_mkfifo  s    <9$$Y	0@AAII!(I###	()444	4LLDL4<$?@@@@ 	4 	4 	4MM.233333333	4ejj&;&;&CDDEEEEEs   =2B0 0
C:CCmknodS_IFIFOzdon't have mknod()/S_IFIFOc                 V   t          j        t           j                   t          j        t          j        z  t          j        z  }	 t                              t           j        |d           | 	                    t          j
        t                              t           j                  j                             nS# t          $ rF}|                     |j        t          j        t          j        t          j        f           Y d }~nd }~ww xY wt          j        t           j                   	 t                              t           j        |dd            d S # t          $ rG}|                     |j        t          j        t          j        t          j        f           Y d }~d S d }~ww xY w)Nr   )r   modedevicedir_fd)r   r   r   rL  rb  rZ  r[  r   ra  rq   r]  r^  r   assertInr   rl   r   EACCES)r#   rd  r   s      r   
test_mknodzPosixTester.test_mknod  s}   
 	)***|dl*T\9	QKK	($222 OODM%**Y5E*F*F*NOOPPPP  	N 	N 	N MM!'EKu|#LMMMMMMMM	N 	)***	NKKY-D       	N 	N 	NMM!'EKu|#LMMMMMMMMM	Ns0   &B; ;
D<DD-(E 
F(!<F##F(makedevztest needs posix.makedev()c                 z   t                               t          j                  }|j        }|                     |t                     |                     |d           t                               |          }|                     |t                     |                     |d           | 	                    t                               |          |           | 
                    t          t           j        t          |                     | 
                    t          t           j                   | 
                    t          t          ft           j        d           t                               |          }|                     |t                     |                     |d           | 	                    t                               |          |           | 
                    t          t           j        t          |                     | 
                    t          t           j                   | 
                    t          t          ft           j        d           | 	                    t                               ||          |           | 
                    t          t           j        t          |          |           | 
                    t          t           j        |t          |                     | 
                    t          t           j        |           | 
                    t          t           j                   d S )Nr   rP   )r   rL  r   r   st_devr-  r  rD   majorrB   r8   r9   rN  r  OverflowErrorminorrj  )r#   stdevrm  ro  s        r   test_makedevzPosixTester.test_makedev  sU   ZZ	())ic3'''Q'''C  eS)))q)))S))5111)U[%**===)U[111:}5u{BGGGC  eS)))q)))S))5111)U[%**===)U[111:}5u{BGGGue44c:::)U]E%LL%HHH)U]E5<<HHH)U]E:::)U]33333rH   c           
      z    	  fd}t          j                    }t          j                    } |||            |||            |d|            |||            ||d            |||           t          j        dk    r|dv }n|dk    }t
          j        rn|r`t          j        dk    rdnd} |||            |||            |dd            |||            |||            |||           nt	          j                    dv rt          j	        d	           
                    t          |dd            |||            
                    t          |dd            |||           dt          j                    vr* 
                    t          |dd            |||           t          t          fD ]h}	 
                    t          | |	|          |            |||            
                    t          || |	|                      |||           id S )
Nc                     C           }                     |j        |                                 |j        |           d S d S rp   )rB   st_uidst_gid)uidgidrL  first_paramr#   	stat_funcs      r   
check_statz6PosixTester._test_all_chown_common.<locals>.check_stat  sV    $ y--  c222  c22222 %$rH   rP   rW  )r   r5   r   l        r   )zHP-UXSunOSz1Skipping because of non-standard chown() behavior)re   r3   r.   r   r   r   is_emscriptensystemri   rj   r8   r   r/   strrN  r9   )
r#   
chown_funcry  rz  r{  rw  rx  is_root	big_valuets
   ` ``      r   _test_all_chown_commonz"PosixTester._test_all_chown_common  s   =	3 	3 	3 	3 	3 	3 	3
 ikkikk
;S)))
3
;C(((
3
;R(((
3<9$$ f}GGaxG  )	%  %	%" #&,)";";IJ{Iy999Jy),,,J{B+++Jy),,,J{C---JsC    _"444 # %/ 0 0 0 gz;1EEEJsC   gz;2FFFJsC   &&!!':{BJJJ
3$$$e 	! 	!Ai[!!C&&#NNNJsC   i[#qqvvNNNJsC    		! 	!rH   getgid() is a stubc                 L   t          j        t          j                   |                     t
          t          j        t          j        dd           t          j        t          j                   | 	                    t          j        t          j        t          j
                   d S rO   )re   r   r   r   r8   r   r   chowncreate_empty_filer  rL  r"   s    r   
test_chownzPosixTester.test_chown  ss     		)"###'5;	0@"bIII 	#I$4555##EK1A5:NNNNNrH   fchownztest needs os.fchown()c           	      d   t          j        t          j                   t	          t          j        d          }	 |                                }|                     t          j        |t          t          dd                      |
                                 d S # |
                                 w xY w)Nr   rI  )re   r   r   r   r   rv   r  r   r  r6   rw   )r#   	test_filer   s      r   test_fchownzPosixTester.test_fchown   s     		)"### )3//		!!##B''b(/w(E(EG G G OOIOOs   A	B B/lchownztest needs os.lchown()c           	         t          j        t          j                   t          j        t
          t          j                   |                     t          j        t          j        t          t          dd                      d S )Nlstat)
re   r   r   r   symlink_DUMMY_SYMLINKr  r   r  r6   r"   s    r   test_lchownzPosixTester.test_lchown/  sk     		)"###

>9#3444##EL)2B$+E7D$A$A	C 	C 	C 	C 	CrH   r   ztest needs posix.chdir()c                     t                               t          j                   |                     t
          t           j        t          j                   d S rp   )r   r   re   rr   r8   r   r   r   r"   s    r   
test_chdirzPosixTester.test_chdir8  s9    BI'5;	0@AAAAArH   c                     |                      t          j        t                              t
          j                             d S rp   )rg  r   r   r   listdirre   rr   r"   s    r   test_listdirzPosixTester.test_listdir=  s-    i&bi(@(@AAAAArH   c                 t    |                      t          j        t                                                     d S rp   )rg  r   r   r   r  r"   s    r   test_listdir_defaultz PosixTester.test_listdir_default@  s)     	i&88888rH   c                     |                      t          j        t          j                  t
                              d                     d S N   .)rg  re   rQ  r   r   r   r  r"   s    r   test_listdir_byteszPosixTester.test_listdir_bytesE  s7     	bk)"233U]]45H5HIIIIIrH   c                    t           t          fD ]}|                     t                    5  t                               |d                    }d d d            n# 1 swxY w Y   |                     t          j        t          j
                  |           |D ]*}|                     t          |          t                     +d S r  )r   
memoryviewassertWarnsrS  r   r  rg  re   rQ  r   r   assertIstyper   )r#   clsnamesr;   s       r   test_listdir_bytes_likez#PosixTester.test_listdir_bytes_likeJ  s    j( 	1 	1C!!"455 1 1cc$ii001 1 1 1 1 1 1 1 1 1 1 1 1 1 1MM"+i&677??? 1 1d4jj%00001		1 	1s   $AA	"A	z)test needs fd support for posix.listdir()c                 >   t                               t                                           t           j                  }|                     t           j        |           |                     t          t                               d                    t          t                               |                               |                     t          t                               d                    t          t                               |                               d S )N.)	r   r   r'   r   r   rw   rB   sortedr  )r#   fs     r   test_listdir_fdzPosixTester.test_listdir_fdR  s     JJu||~~u~66Q'''5==%%&&5==##$$	 	 	
 	5==%%&&5==##$$	 	 	 	 	rH   accessztest needs posix.access()c                     |                      t                              t          j        t
          j                             d S rp   )rq   r   r  r   r   re   R_OKr"   s    r   test_accesszPosixTester.test_accessa  s-    Y%5rw??@@@@@rH   umaskztest needs posix.umask()c                     t                               d          }|                     |t                     t                               |           d S r  )r   r  r-  r  )r#   old_masks     r   
test_umaskzPosixTester.test_umaske  s?    ;;q>>h,,,HrH   strerrorztest needs posix.strerror()c                 `    |                      t                              d                     d S r  )rq   r   r  r"   s    r   test_strerrorzPosixTester.test_strerrork  s(     	q))*****rH   pipeztest needs posix.pipe()c                     t                                           \  }}t          j        |           t          j        |           d S rp   )r   r  re   rw   )r#   readerwriters      r   	test_pipezPosixTester.test_pipep  s9    

rH   pipe2ztest needs os.pipe2()   c                    |                      t          t          j        d           |                      t          t          j        dd           t          j        d          \  }}t          j        |           t          j        |           t          j        t          j        t          j        z            \  }}|                     t          j        |           |                     t          j        |           |                     t          j	        |                     |                     t          j	        |                     |                     t          j
        |                     |                     t          j
        |                     |                      t          t          j        |d           	 t          j        |dt          j        z             d S # t          $ r Y d S w xY w)NDEADBEEFr   r5   r   )r8   r9   re   r  rw   r9  rC  r   r=  r>  get_blockingr   r   r   r   PIPE_MAX_SIZE)r#   rr   s      r   
test_pipe2zPosixTester.test_pipe2v  s    	)RXz:::)RXq!444 x{{1

 xR]2331!$$$!$$$+A..///+A..///++,,,++,,,'27Aq111	HQw4455555 	 	 	DD	s   ?"G# #
G10G1c                     dd l }|                     t          t          j        |j        dz              |                     t          t          j        |j        dz              d S Nr   r5   )	_testcapir8   rn  re   r  INT_MAXUINT_MAX)r#   r  s     r   test_pipe2_c_limitszPosixTester.test_pipe2_c_limits  sZ    
 	-93Dq3HIII-93E3IJJJJJrH   r  ztest needs posix.utime()c                 t   t          j                     }t                              t          j        d            |                     t          t          j        t          j        d           |                     t          t          j        t          j        |d f           |                     t          t          j        t          j        d |f           t                              t          j        t          |          t          |          f           t                              t          j        ||f           d S )Nr  r  r  s     r   
test_utimezPosixTester.test_utime  s    ikkI$d+++)U[#*L	: 	: 	:)U[#*S$K	9 	9 	9)U[#*T3K	9 	9 	9I$s3xxS&:;;;I$sCj11111rH   c                    t          j        |          }|                     t          |d                     |j        t          j        z  }	  |||fi | nD# t          $ r7}|j        t          j        k    r d}| 	                    |           Y d }~nd }~ww xY w	 t          j        |          }| 
                    |j        t          j        z  |j                   	 t          |d          }	n<# t          $ r/}
| 
                    |
j        t          j                   Y d }
~
nd }
~
ww xY wt                              ||j                   d S # t                              ||j                   w xY w)Nst_flags2chflag UF_IMMUTABLE not supported by underlying fsr}   )re   rL  rq   r   r  UF_IMMUTABLEr   r   
EOPNOTSUPPr   rB   r   rl   r   chflags)r#   chflags_functarget_filekwargsrp  flagserrr   new_str   r   s              r   _test_chflags_regular_filez&PosixTester._test_chflags_regular_file  s   W[!!J//000 d//	Le66v6666 	 	 	yE,,,FCMM#			4W[))FR[4+<<foNNN7+t,, 7 7 7  %+666666667 MM+r{33333EMM+r{3333sO   
A 
B"-BBAE C0 /E 0
D):%D$E $D))E "E0r  ztest needs os.chflags()c                 Z    |                      t          j        t          j                   d S rp   )r  r   r  r   r   r"   s    r   test_chflagszPosixTester.test_chflags  s#    ''y7GHHHHHrH   lchflagsztest needs os.lchflags()c                     |                      t          j        t          j                   |                      t          j        t          j        d           d S NFr  )r  r   r  r   r   r  r"   s    r   test_lchflags_regular_filez&PosixTester.test_lchflags_regular_file  sP    ''	8HIII''y7G8= 	( 	? 	? 	? 	? 	?rH   c                    t          j        t          j                  }|                     t          |d                     |                     t          j        t                     t          j	        t          j        t                     t          j
        t                    }d }t          j        |fD ]$}|j        t          j        z  }	  |t          |           nD# t          $ r7}|j        t           j        k    r d}|                     |           Y d }~nd }~ww xY w	 t          j        t          j                  }t          j
        t                    }	|                     |j        |j                   |                     |j        t          j        z  |	j                    |t          |j                   #  |t          |j                   w xY wd S )Nr  c                 <    t                               | |d          S r  )r   r  )r   r  s     r   chflags_nofollowz;PosixTester.test_lchflags_symlink.<locals>.chflags_nofollow  s    ==ue=DDDrH   r  )re   rL  r   r   rq   r   r   r   r  r  r  r   r  r  r  r   r   r  r   rB   )
r#   	testfn_stdummy_symlink_str  fnr  r  r   new_testfn_stnew_dummy_symlink_sts
             r   test_lchflags_symlinkz!PosixTester.test_lchflags_symlink  s   GI,--		:66777	(.999

9#^4448N33	E 	E 	E >#34 	> 	>B$-0AAE#>5)))) # # #9 000Jc""""""""	#
> "	(8 9 9')x'?'?$  !3]5KLLL  !1!:T=N!N!5!>@ @ @ >#3#<====>#3#<====%	> 	>s%   C
D )-DD $BG  Gc                    t           j        dk    rt          }nt          }t          j                                        D ]K\  }}|                     t          |          |           |                     t          |          |           Ld S )Nnt)	re   r;   r  r   r   r   itemsrB   r  )r#   	item_typekvs       r   test_environzPosixTester.test_environ  s    7d??IIIM'')) 	1 	1DAqT!WWi000T!WWi0000	1 	1rH   c                 \   |                      t                    5  t          j        dd           d d d            n# 1 swxY w Y   |                      t                    5  t          j        dd           d d d            n# 1 swxY w Y   |                      t                    5  t          j        dd           d d d            n# 1 swxY w Y   |                      t                    5  t          j        dd           d d d            n# 1 swxY w Y   |                      t                    5  t          j        d	d
           d d d            n# 1 swxY w Y   |                      t                    5  t          j        dd           d d d            d S # 1 swxY w Y   d S )NzFRUIT VEGETABLEcabbages   FRUIT VEGETABLEs   cabbageFRUITzorange VEGETABLE=cabbages   FRUITs   orange VEGETABLE=cabbagezFRUIT=ORANGElemons   FRUIT=ORANGEs   lemon)r8   r  re   putenvr"   s    r   test_putenvzPosixTester.test_putenv  s   z** 	5 	5I()444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5z** 	7 	7I):666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7z** 	< 	<Ig:;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<z** 	> 	>Ih <===	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>z** 	/ 	/Ing...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/z** 	1 	1Iox000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1si   =AA"BBB)CCC0DDD7EE E>F!!F%(F%r'   ztest needs posix.getcwd()c                    d}t          j                    }t           j                            t          j                  dz   }	 t          j        |           t          j        |           n0#  Y t          j        |           t	          j        |           d S xY w	 t          j        |           t	          j        |           d S # t          j        |           t	          j        |           w xY w)Nz8getcwd-test-directory-0123456789abcdef-01234567890abcdefz.getcwd)	re   r'   r   abspathr   r   mkdirr   rmtree)r#   dirnamerr   	base_path_create_and_do_getcwds       @r   test_getcwd_long_pathnamesz&PosixTester.test_getcwd_long_pathnames  s    LGOOI$455	A		(HYHY	+ ( HVY'''''5  2 HVY''''' HVY''''s$   (A- ,C -B/C C *C2getgrouplistztest needs posix.getgrouplist()r3   ztest needs os.getuid()c                    t          j        t          j                              d         }t          j        t          j                              d         }|                     |t
                              ||                     d S )Nr   rA   )rf   r`   re   r3   rg  r   r  )r#   usergroups      r   test_getgrouplistzPosixTester.test_getgrouplist&  sb     |BIKK((+RY[[))!,eU//e<<=====rH   r,   ztest needs os.getegid()popenztest needs os.popen()c                 F   t          j        d          5 }|                                                                }|                                }d d d            n# 1 swxY w Y   	 t          d |                                D                       }n# t          $ r t                      }Y nw xY w||st          j	        d          t          j        dk    rgdd l}|                    d          pd}t          d |                    d	          dd
         D                       dk     rt          j	        d          |                    t                                                     }|                     | p|t                                           hk               d S )Nzid -G 2>/dev/nullc              3   4   K   | ]}t          |          V  d S rp   r  )r   gs     r   	<genexpr>z-PosixTester.test_getgroups.<locals>.<genexpr>8  s(      <<SVV<<<<<<rH   zneed working 'id -G'darwinr   MACOSX_DEPLOYMENT_TARGETz10.3c              3   4   K   | ]}t          |          V  d S rp   r  )r   r   s     r   r  z-PosixTester.test_getgroups.<locals>.<genexpr>B  s(      88SVV888888rH   r  r   )r   r:  z$getgroups(2) is broken prior to 10.6)re   r  r   striprw   setr   r  ri   rj   r   r   	sysconfigget_config_vartuplesymmetric_differencer   r/   rq   r,   )r#   idggroupsret
idg_groupsr  dtsymdiffs           r   test_getgroupszPosixTester.test_getgroups/  s    X)** 	cXXZZ%%''F))++C	 	 	 	 	 	 	 	 	 	 	 	 	 	 		<<V\\^^<<<<<JJ 	 	 	JJJ	?*?#$:;;; <8##))*DEEOB88RXXc]]1Q3%7888887BB'(NOOO 11%//2C2CDDGCw5==??2C'CDDDDDs#   ;AA #A (+B B/.B/SIGCHLDz2CLD_XXXX be placed in si_code for a SIGCHLD signalwaitid_resultztest needs os.waitid_resultc                     t           j         t           j         t           j         t           j         t           j         t           j         d S rp   )re   
CLD_EXITED
CLD_KILLED
CLD_DUMPEDCLD_TRAPPEDCLD_STOPPEDCLD_CONTINUEDr"   s    r   test_cld_xxxx_constantsz#PosixTester.test_cld_xxxx_constantsL  s6     	




rH   sched_yieldzdon't have scheduling supportsched_setaffinityz!don't have sched affinity supportc                 8    t                                            d S rp   )r   r"  r"   s    r   test_sched_yieldzPosixTester.test_sched_yield[  s     	rH   sched_get_priority_maxz!requires sched_get_priority_max()c                    t           j        }t                               |          }t                               |          }|                     |t
                     |                     |t
                     |                     ||           t          j        dk    rN| 	                    t          t           j        d           | 	                    t          t           j        d           d S d S )Nr  i)r   SCHED_RRsched_get_priority_minr&  r-  r  rD   r   r   r8   r   )r#   pollohis       r   test_sched_priorityzPosixTester.test_sched_priority`  s    
 n))#..))#..b#&&&b#&&&B'''<8##gu'CSIIIgu'CSIIIII $#rH   c                 v   d t           j                                        D             }t                               d          }|                     ||           	 t                               t          j                              }|                     ||           n-# t          $ r }|j        t          j	        k    r Y d }~nd }~ww xY w| 
                    t          t           j        d           | 
                    t          t           j        d           t                               d          }|                     |j        t                     t          j                            d          s	 t                               d||           t                               d|           n-# t          $ r }|j        t          j	        k    r Y d }~nd }~ww xY w| 
                    t          t           j        d|           | 
                    t          t           j        d||           | 
                    t(          t           j        d|d            | 
                    t(          t           j        dd           t                               d           }| 
                    t(          t           j        d|           d}t                               |          }| 
                    t,          t           j        d|           t                               |           }| 
                    t,          t           j        d|           d S )Nc                 B    g | ]\  }}|                     d           |S )SCHED_r   )r   r;   scheds      r   r   zDPosixTester.test_get_and_set_scheduler_and_param.<locals>.<listcomp>r  s<     = = =u"&//(";";=u = = =rH   r   rP   r   r   +   l    )sched_priority)r   __dict__r  r   rg  re   r2   r   r   rl   r8   sched_getparamr-  r5  r  r   r   r   sched_setschedulersched_setparamr9   sched_paramrn  )r#   possible_schedulersmineparentr   paramlarges          r   $test_get_and_set_scheduler_and_paramz0PosixTester.test_get_and_set_scheduler_and_paramp  s   = =8L8L8N8N = = =''**d/000	7--bjll;;F
 MM&"56666	  	 	 	w%+%% &%%%%	
 	'5#;R@@@'5#7<<<$$Q''e2C888
 |&&'<== 	H((D%888$$Q....   7ek)) *)))) gu';RGGG'5#;RuMMM)U%=q$MMM)U%91bAAA!!$'')U%91eDDD!!%((-)=q%HHH!!%!88-)=q%HHHHHs0   +B 
C&CC/7F' '
G1GGsched_rr_get_intervalzno functionc                 P   	 t                               d          }nB# t          $ r5}|j        t          j        k    r |                     d           Y d }~nd }~ww xY w|                     |t                     |                     |d           | 	                    |d           d S )Nr   z only works on SCHED_RR processesg        g      ?)
r   rA  r   r   r   r   r-  rN  rD   
assertLess)r#   intervalr   s      r   test_sched_rr_get_intervalz&PosixTester.test_sched_rr_get_interval  s    	>22155HH 	> 	> 	> w%,&&MM<========	> 	h..."---"%%%%%s    
A+AAc                    t                               d          }|                     |t                     |                     t          |          d           t          j                            d          s&| 	                    t          t           j        d           |D ]I}|                     |t                     |                     |d           |                     |d           Jd S )Nr   r5   r   rP   r
   )r   sched_getaffinityr-  r  rD   rC   r   r   r   r8   r   r  rC  )r#   maskcpus      r   test_sched_getaffinityz"PosixTester.test_sched_getaffinity  s    &&q))dC(((D		1---|&&y11 	Dgu'>CCC 	* 	*C!!#s+++##C+++OOC))))	* 	*rH   c           	         t                               d          }t          |          dk    r|                                 t                               d|           |                     t                               d          |           |                     t          t           j        dg            |                     t          t           j        ddg           |                     t          t           j        dt          t          d                     |                     t          t           j        dddz  g           t          j                            d          s)|                     t          t           j        d|           d S d S )Nr   r5   i0X   r   rP   )r   rG  rC   popr#  rB   r8   r   r  mapr  rn  r   r   r   )r#   rH  s     r   test_sched_setaffinityz"PosixTester.test_sched_setaffinity  s7   &&q))t99q==HHJJJ4(((0033T:::'5#:ArBBB*e&=q3%HHH*e&=q#c4..QQQ-)@!afXNNN|&&y11 	Jgu'>DIIIII	J 	JrH   zNo dynamic linking on WASIc                 f    t           j         t           j         t           j         t           j         d S rp   )r   	RTLD_LAZYRTLD_NOWRTLD_GLOBAL
RTLD_LOCALr"   s    r   test_rtld_constantszPosixTester.test_rtld_constants  s*     	rH   	SEEK_HOLEz(test needs an OS that reports file holesc           
         t          t          j        d          5 }|                    d           |                                 |                                }|                                }	 t          |          D ]j}|                     |t          j
        ||t          j                             |                     |t          j
        ||t          j                             k|                     t          t          j
        ||t          j                   |                     t          t          j
        ||t          j                   n"# t          $ r t!          j        d          w xY w	 d d d            d S # 1 swxY w Y   d S )Nzr+bs   hellozOSError raised!)r   r   r   r   r   tellrv   rangerB   re   r   	SEEK_DATAassertLessEqualrW  r8   r   ri   rj   )r#   ry   r   fnor   s        r   test_fs_holeszPosixTester.test_fs_holes  s    )"E** 	;bHHXHHJJJ7799D))++C;t O OA$$Qa(F(FGGG((rxQ/M/MNNNN!!'28S$MMM!!'28S$MMMM ; ; ;
 '(9:::; N	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s+   AE=.CEE=E,,E==FFc           	      L   	 dD ]}t          t          |d           }|dt          j        fD ]]}	  |d|           # t          $ rA}|                     d                    |          t          |                     Y d }~ n d }~ww xY w|                     d|z              d S )N)renamereplacelinknoodly2doesnotexistfilenamez'doesnotexistfilename' -> '{}'z#No valid path_error2() test for os.)	r6   re   r   r   r   rg  formatr  rk   )r#   r;   functiondstr   s        r   test_path_error2zPosixTester.test_path_error2  s    	 2 	H 	HDr4..H!9#34 H HH3S9999   MM"B"I"I#"N"NPSTUPVPVWWWEEEEE 		?$FGGG	H 	Hs   =
B6BBc                 \   t           j        }|dz   }|                     t           j        |           t          j        |           d }	 |                     t
                    5  t          j        |t          j        t          j	        z            }d d d            n# 1 swxY w Y   |t          j
        |           n# |t          j
        |           w w xY w|                     t          j                            |                     |                     t
          t          j        |           |                     t          j                            |                     t          |d          
                                 |                     t
          t          j        |           d S )N r   )r   r   r   r   r8   r  re   r   r   r   rw   r=  r   existsr  rL  r#   r  fn_with_NULr   s       r   test_path_with_null_characterz)PosixTester.test_path_with_null_character  s   4i	("---	"":.. D DW["+
*BCCD D D D D D D D D D D D D D D ~ ~ ++,,,*bh<<<++,,,R*bg{;;;;;s0   	B> #-BB> B  B> #B $B> >Cc                    t          j        t          j                  }|dz   }|                     t          j        |           t          j        |           d }	 |                     t                    5  t          j        |t           j	        t           j
        z            }d d d            n# 1 swxY w Y   |t          j        |           n# |t          j        |           w w xY w|                     t           j                            |                     |                     t          t           j        |           |                     t           j                            |                     t          |d                                           |                     t          t           j        |           d S )Nr   r   )re   rQ  r   r   r   r   r8   r  r   r   r   rw   r=  r   rk  r  rL  rl  s       r   test_path_with_null_bytez$PosixTester.test_path_with_null_byte  s   [)**5j	("---	"":.. D DW["+
*BCCD D D D D D D D D D D D D D D ~ ~ ++,,,*bh<<<++,,,R*bg{;;;;;s0   C 5-B."C .B22C 5B26C C)
pidfd_openzpidfd_open unavailablec                 "   |                      t                    5 }t          j        d           d d d            n# 1 swxY w Y   |j        j        t
          j        k    r|                     d           t          |j        t                    r|                     d|j                   | 
                    |j        j        t
          j                   t          j        t          j        t          j                    d                     d S )NrP   z"system does not support pidfd_openzpidfd_open syscall blocked: r   )r8   r   re   rq  r   r   r   r   
isinstancer\  rB   r   rw   r0   )r#   r   s     r   test_pidfd_openzPosixTester.test_pidfd_open  s   w'' 	2M"	 	 	 	 	 	 	 	 	 	 	 	 	 	 	<--MM>???blO44 	KMMIIIJJJ+U\:::
ry{{A../////s   <A A )s__name__
__module____qualname__r$   r=   ri   
skipUnlessr   r   rG   rL   rS   rW   r[   r^   rf   rm   rs   rz   r   r   r6   re   supports_fdr   requires_forkr   r   r   r   r   r   r   requires_32br   r   r   r   r   r   r  r
  r  r  r  supports_follow_symlinksr  r!  r#  r(  r*  skipIfis_wasir.  r3  r8  requires_linux_versionrequires_subprocessr?  rD  rH  rO  rT  r`  rL  ri  rr  r  r   skip_unless_working_chmodr}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  cpython_onlyr  r  r  r  r  r  r  r  r  r  r  signalr!  requires_sched_hrequires_sched_affinityr%  r-  requires_schedr@  rE  rJ  rP  rV  r^  rh  rn  rp  rt  r   rH   r   r   r   4   s       0 0 0@ @ @  X4479 9, ,9 9, X4479 9, ,9 9, X4479 97 79 97 X4479 9G G9 9G X4479 97 79 97 X4479 9H H9 9H X5557 7Xj113NOOI I PO7 7I. X	2257 72 27 72 X
3368 8 8 8 X4479 9 9 9 X
335RSS, , TS, XXt44FHyzzW
 
  {z
 X113NOOW. .  PO. W:% :% :%x X002LMM	 	 NM	 X002LMM	 	 NM	 X113NOO  PO X113NOOX446RSS  TS PO( X113NOO	 	 \ PO	 X113NOO  PO X	224PQQ  RQ X	224PQQX668PQQ  RQ RQ X	224PQQ  \ RQ X(9::,. . . .$ X(9::,. . . . X88*, , , , X88*, , , , XR^35XYY  ZY( XR%@@Brss= = ts= X113NOO  PO* X113NOO  \ PO X002LMM  NM* X002LMM	 	 \ NM	 X..13 3X_W_&@AA  BA3 3 X	2257 7B B7 7B X//24 4X_W_&ABB  CB4 4 X[113GHH#W#Aq"-- W ""1 1 #" .- IH1
 X
3346 6 6 6 X
3346 6 6 6 X0035 5
 
5 5
A A A" X113HIIF F JIF X00MWWT95M5M57 7N N7 7N, X	224PQQ4 4 RQ48F! F! F!P (X_W*,@AAO O BA )(O (X113KLLX_W*,@AA
 
 BA ML )(
 (X113KLLC C ML )(C X002LMMB B NMBB B B9 9 9
J J J
1 1 1 X".8DF F F F X113NOOA A POA X002LMM  NM
 X
3368 8+ +8 8+ X//1JKK  LK
 XW--/FGG#W#Aq"--  .- HG4 XW--/FGG#W#Aq"--K K .- HG K X002LMM
2 
2 NM
24 4 40 X	224MNNI I ONI X
335OPP? ? QP?
 X
335OPP> > QP>@1 1 11 1 1 X113NOO!( !( PO!(F X779Z[[Xj113NOOXX..0HII> > JI PO \[> XY//1JKKXW--/FGG W ""E E #" HG LKE4 X335ijjX_557TUU  VU kj +x*775-+H+H+JL L1h1''%AT2U2U2UW W    X(@AA<> >J J> > J &I &I ^&IP X(?@@-PP& & QP& 
* 
* 
* J J J X_W_&BCC  DC X[11CE E; ;E E;2H H H$< < <$< < <$ X\224LMM0 0 NM0 0 0rH   r   c                   f   e Zd ZdZed             Zed             Z ej        e	j
        e	j        v d          d             Z ej        e	j        e	j        v d          d             Z ej         ee	d          oe	j        e	j        v d	           ej        ej        d
          d                         Z ej        e	j        e	j        v d          d             Z ej        e	j        e	j        v d          d             Z ej        ej        d           ej         ee	d          oe	j        e	j        v d          d                         Z ej        e	j        e	j        v d          d             Z ej         ee	d          oe	j        e	j        v o eed          d          d             Z ej        e	j         e	j        v d          d             Z! ej         ee	d          oe	j"        e	j        v d          d             Z# ej        e	j$        e	j        v d          d              Z% ej        e	j&        e	j        v d!          d"             Z' ej        e	j(        e	j        v d#          d$             Z) ej         ee	d%          oe	j*        e	j        v d&          d'             Z+d(S ))TestPosixDirFdr   c              #     K   t           xj        dz  c_        t          j         d| j         }t          j         d| j         d}t                              |           |                     t          j        |           t          j	        
                    ||          }t          j        |          5 }|||fV  d d d            d S # 1 swxY w Y   d S )Nr5   _base)r  countr   r   r   r  r   rmdirre   r   rY  open_dir_fd)r#   r;   base_dirfullnamerf  s        r   preparezTestPosixDirFd.prepare.  s     !"11TZ11&99999HX...7<<$//"8,, 	+4****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   3CCCc              #      K   |                                  5 \  }}}t          j        |           |                     t          j        |           |||fV  d d d            d S # 1 swxY w Y   d S rp   )r  r   r  r   r   r   r#   rf  r;   r  s       r   prepare_filezTestPosixDirFd.prepare_file:  s      \\^^ 	+7h'111OOEL(3334****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   A A$$A(+A(z)test needs dir_fd support for os.access()c                     |                                  5 \  }}}|                     t                              |t          j        |                     d d d            d S # 1 swxY w Y   d S Nrf  )r  rq   r   r  re   r  r  s       r   test_access_dir_fdz!TestPosixDirFd.test_access_dir_fdA  s       	H$<VT8OOELLrwvLFFGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	Hs   ?A!!A%(A%z'test needs dir_fd support in os.chmod()c                    |                                  5 \  }}}t                              |t          j                   t                              |t          j        t          j        z  |           t                              |          }|                     |j        t          j        z  t          j        t          j        z             d d d            d S # 1 swxY w Y   d S r  )	r  r   chmodrL  rZ  r[  rB   r^  S_IRWXU)r#   rf  r;   r  ss        r   test_chmod_dir_fdz TestPosixDirFd.test_chmod_dir_fdF  s       	:$<VT8KK$,///KKdlT\9&KIII

8$$AQY5!\DL8: : :		: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   B7CC Cr  z'test needs dir_fd support in os.chown()r  c                     |                                  5 \  }}}t                              |t          j                    t          j                    |           d d d            d S # 1 swxY w Y   d S r  )r  r   r  re   r3   r.   r  s       r   test_chown_dir_fdz TestPosixDirFd.test_chown_dir_fdO  s        	G$<VT8KKbikk29;;vKFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   AA''A+.A+z&test needs dir_fd support in os.stat()c           
      Z   |                                  5 \  }}}t          |d          5 }|                    d           d d d            n# 1 swxY w Y   |                     t          j        |           t                              |          }t                              ||          }|                     ||           t                              |d           }|                     ||           |                     t          dt          j        |t          
                                           |                     t          dt          j        |t          |                     |                     t          t          j        |d           d d d            d S # 1 swxY w Y   d S )Nr   z	testline
r  zshould be integer or None, notl      Fx:^V )r  r   r   r   r   r   rL  rB   rM  r9   r'   rN  r8   rn  )r#   rf  r;   r  outfiles1s2s          r   test_stat_dir_fdzTestPosixDirFd.test_stat_dir_fdV  s   \\^^ 	57hh$$ ,l+++, , , , , , , , , , , , , , ,OOEL(333H%%BD00BR$$$HT22BR$$$""9.NJU\\^^ # = = =""9.NJU6]] # < < <mJV  5 5 5	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5s5   F A F A	F A	D?F  F$'F$z'test needs dir_fd support in os.utime()c                    |                                  5 \  }}}t          j                    }t                              |d |           t                              ||           |                     t
          t          j        |||           |                     t
          t          j        |d|           |                     t
          t          j        ||d f|           |                     t
          t          j        |d |f|           |                     t
          t          j        ||df|           t                              |t          |          t          |          f|           t                              |||f|           t                              |t          |          t          |t          |          z
  dz            f|           t                              ||t          |          t          |t          |          z
  dz            f           t          j        t          j        v r/	 t                              |d|           n# t          $ r Y nw xY wd d d            d S # 1 swxY w Y   d S )Nr  r  xr  )rf  r*   F)r  rf  )
r  r  r   r  r8   r9   r  re   r|  r  )r#   rf  r;   r  r  s        r   test_utime_dir_fdz TestPosixDirFd.test_utime_dir_fdj  s      	$<VT8)++CKKd6K222KKVK,,,id!&  2 2 2id*6  ; ; ;id"Dk&  : : :id#Sk&  : : :id"Cj  9 9 9KKs3xxS26KBBBKKsCjK888KKXXsC#c((Nc#9::;F  L L LKKV#&s88S#C.C1G-H-H"I  K K K x2666KKeFKKKKK!   D3	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   H,I=I I= 
I-*I=,I--I==JJz5WASI: symlink following on path_link is not supportedrb  z&test needs dir_fd support in os.link()c                 J   |                                  5 \  }}}|                                 5 \  }}}	 t                              ||||           n/# t          $ r"}|                     d|z             Y d }~nd }~ww xY w|                     t          j        |           |                     t          	                    |          d         t          	                    |          d                    d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N
src_dir_fd
dst_dir_fdzposix.link(): %sr5   )
r  r  r   rb  r\  r   r   r   rB   rL  )r#   rf  r;   r  dir_fd2linknamefulllinknamer   s           r   test_link_dir_fdzTestPosixDirFd.test_link_dir_fd  s       		-$<VT8\\^^		-@<6

4f
QQQQ" 6 6 6014555555556OOEL,777UZZ11!4

<((+- - -		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		- 		-s^   DD AD 
A?A:5D :A??A5D 4D D	DD	DDDz'test needs dir_fd support in os.mkdir()c                    |                                  5 \  }}}t                              ||           |                     t          j        |           t                              |           d d d            d S # 1 swxY w Y   d S r  )r  r   r  r   r  rL  r  s       r   test_mkdir_dir_fdz TestPosixDirFd.test_mkdir_dir_fd  s    \\^^ 	!7hKKVK,,,OOEK222JJx   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   AA==BBra  rb  zAtest requires both stat.S_IFIFO and dir_fd support for os.mknod()c                 b   |                                  5 \  }}}t          j        t          j        z  t          j        z  }	 t
                              ||d|           |                     t
          j        |           | 	                    t          j
        t
                              |          j                             nS# t          $ rF}|                     |j        t          j        t          j        t          j        f           Y d }~nd }~ww xY wd d d            d S # 1 swxY w Y   d S )Nr   r  )r  rL  rb  rZ  r[  r   ra  r   r   rq   r]  r^  r   rg  r   rl   r   rh  )r#   rf  r;   r  rd  r   s         r   test_mknod_dir_fdz TestPosixDirFd.test_mknod_dir_fd  sa    \\^^ 
	M7h<$,.=DMD$&999 h777ejj.B.B.J K KLLLL  R R R agU\5<'PQQQQQQQQR	
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	M 
	Ms<   +D$CA%D$
D<D
D$DD$$D(+D(z&test needs dir_fd support in os.open()c                 J   |                                  5 \  }}}t          |d          5 }|                    d           d d d            n# 1 swxY w Y   |                     t          j        |           t                              |t          j        |          }	 t                              |d          }|                     d|           t          	                    |           n# t          	                    |           w xY w	 d d d            d S # 1 swxY w Y   d S )Nr   s	   testline
r  	   )
r  r   r   r   r   r   r   r   rB   rw   )r#   rf  r;   r  r  r   r   s          r   test_open_dir_fdzTestPosixDirFd.test_open_dir_fd  sp   \\^^ 		 7hh%% -m,,,- - - - - - - - - - - - - - -OOEL(333D%.@@B jjQ''  444BB		  		  		  		  		  		  		  		  		  		  		  		  		  		  		  		  		  		 sM   DA DA	DA	A
D1C+D+DDDDreadlinkz*test needs dir_fd support in os.readlink()c                 2   |                                  5 \  }}}t          j        d|           |                     t          j        |           |                     t                              ||          d           d d d            d S # 1 swxY w Y   d S Nr  r  )r  re   r  r   r   r   rB   r  r  s       r   test_readlink_dir_fdz#TestPosixDirFd.test_readlink_dir_fd  s     \\^^ 	M7hJy(+++OOEL(333U^^D^@@)LLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	Ms   A*BBBz(test needs dir_fd support in os.rename()c                 n   |                                  5 \  }}}|                                 5 \  }}}t                              ||||           t                              |           t                              ||           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr  )r  r  r   r`  rL  )r#   rf  r;   r  r  name2	fullname2s          r   test_rename_dir_fdz!TestPosixDirFd.test_rename_dir_fd  s0      	.$<VT8\\^^	.:	LLu$*w  @ @ @JJy!!!LLH---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s5   B*ABB*B	B*B	B**B.1B.z)test needs dir_fd support in os.symlink()c                 >   |                                  5 \  }}}t                              d||           |                     t          j        |           |                     t                              |          d           d d d            d S # 1 swxY w Y   d S r  )r  r   r  r   r   rB   r  r  s       r   test_symlink_dir_fdz"TestPosixDirFd.test_symlink_dir_fd  s    \\^^ 	B7hMM)T&M999OOEL(333U^^H55yAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs   A0BBBz(test needs dir_fd support in os.unlink()c                    |                                  5 \  }}}t          j        |           t                              |           	 t                              ||           |                     t          t          j        |           n&#  |                     t          j        |            xY w	 d d d            d S # 1 swxY w Y   d S r  )	r  r   r  r   rL  r   r8   r   r   r  s       r   test_unlink_dir_fdz!TestPosixDirFd.test_unlink_dir_fd  s    \\^^ 	7h'111JJx   T&111!!'5:x@@@@h777 A	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s*   3C 	ABC #B//C  CCrU  z(test needs dir_fd support in os.mkfifo()c                    |                                  5 \  }}}	 t                              |t          j        t          j        z  |           n/# t          $ r"}|                     d|z             Y d }~nd }~ww xY w|                     t          j	        |           | 
                    t          j        t                              |          j                             d d d            d S # 1 swxY w Y   d S )Nr  rX  )r  r   rU  rL  rZ  r[  r\  r   r   r   rq   r]  r^  )r#   rf  r;   r  r   s        r   test_mkfifo_dir_fdz!TestPosixDirFd.test_mkfifo_dir_fd  s;   \\^^ 	I7h8T4<$,#>vNNNN" 8 8 82Q6777777778OOEL(333OODM%**X*>*>*FGGHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	Is;   C04AC0
A<A72C07A<<A'C00C47C4N),ru  rv  rw  r  r	   r  r  ri   rx  re   r  supports_dir_fdr  r  r  r   r  r}  r   r}  r  rL  r  r  r  r~  rb  r  r  r  ra  r  r   r  r  r  r`  r  r  r  r   r  rU  r  r   rH   r   r  r  +  s3       E	+ 	+ ^	+ + + ^+ Xb&88:effH H gfH XR%779bcc: : dc: XW--R28r?Q3QBD DX_W*,@AAG G BAD DG XB$668`aa5 5 ba5& XR%779bcc  dc< X_?  XF=2+= =0 
- 
-	 	 
- XR%779bcc! ! dc! XW-- 6 h"*<<6$WT955\^ ^M M	^ ^M XB$668`aa
  
  ba
  XZ00XbkREW6WEG GM MG GM Xb&88:dee. . fe. Xr'99;fggB B hgB Xb&88:dee	 	 fe	 XX..R29@R3RT~I I @I I IrH   r  c                       e Zd Zd Zd Z ej         eed          d          d             Z	 ej         eed          d          d             Z
d	S )
PosixGroupsTesterc                 >   t                                           dk    rt          j        d          t	          t           d          st          j        d          t
          j        dk    rt          j        d          t                                           | _        d S )Nr   znot enough privilegesr/   zneed posix.getgroupsr  zgetgroups(2) is broken on OSX)	r   r3   ri   rj   r   r   r   r/   saved_groupsr"   s    r   r$   zPosixGroupsTester.setUp  s    <<>>Q#$;<<<uk** 	<#$:;;;<8###$CDDD!OO--rH   c                 L   t          t          d          r!t                              | j                   d S t          t          d          rXt	          j        t                                                    j        }t                              || j        d                    d S d S )N	setgroupsr_   r   )	r   r   r  r  rf   r`   r3   rg   r_   r#   r;   s     r   tearDownzPosixGroupsTester.tearDown  s    5+&& 	9OOD-.....UL)) 	9<//7DT4#4Q#788888	9 	9rH   r_   ztest needs posix.initgroups()c                 *   t          | j        pdg          dz   }t          j        t                                                    j        }t                              ||           |                     |t          	                                           d S r  )
maxr  rf   r`   r   r3   rg   r_   rg  r/   )r#   r  r;   s      r   rm   z!PosixGroupsTester.test_initgroups  st    
 !(aS))A-|ELLNN++3q!!!a**+++++rH   r  ztest needs posix.setgroups()c                     dgt          t          d                    fD ]I}t                              |           |                     |t                                                     Jd S )Nr      )r   rZ  r   r  assertListEqualr/   )r#   r  s     r   test_setgroupsz PosixGroupsTester.test_setgroups  se     sDrOO, 	< 	<FOOF###  ):):;;;;	< 	<rH   N)ru  rv  rw  r$   r  ri   rx  r   r   rm   r  r   rH   r   r  r    s        . . .9 9 9 X558: :, ,: :, X4479 9< <9 9< < <rH   r  c                      e Zd Zej        ddddfZdZd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Z ej         eed          d          d             Zd Zd Z ej         eed          d          d             Zd Ze ej        ej                            d          d          d                         Ze ej        ej                            d          d          d                         Z d Z!d Z"d Z#d Z$d  Z%dS )!_PosixSpawnMixin-I-Sr   r   Nc                 &    t           j        ddg|R S )Nr  r  )r   r   r#   argss     r   python_argsz_PosixSpawnMixin.python_args  s     d2T222rH   c                    t           j        }|                     t           j        |           d|d}|                     d|          }|                     |d         |t          j                  }t          j	        |d           t          |d          5 }|                     |                                t          |                     d d d            d S # 1 swxY w Y   d S )N2if 1:
            import os
            with open(zO, "w") as pidfile:
                pidfile.write(str(os.getpid()))
            r   r   r   utf-8encoding)r   r   r   r   r  
spawn_funcre   r   r   r   r   rB   r   r  )r#   pidfilescriptr  r   r  s         r   test_returns_pidz!_PosixSpawnMixin.test_returns_pid$  s   "	('222  
 f--ood1gtRZ88S1----'G,,, 	1QVVXXs3xx000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s   6CC!Cc                 L   d}	 |                      ||gt          j                  }t          j        |d          \  }}|                     ||           |                     |d           d S # t          t          f$ r&}|                     |j        |           Y d }~d S d }~ww xY w)Nno_such_executabler   )	r  re   r   waitpidrB   assertNotEqualFileNotFoundErrorr\  filename)r#   r  r   pid2statusexcs         r   test_no_such_executablez(_PosixSpawnMixin.test_no_such_executable2  s    1	+//"4#5"6"$*. .C :c1--LD&T3'''***** "?3 	? 	? 	?S\+=>>>>>>>>>	?s   "A, ,B#=BB#c                    t           j        }|                     t           j        |           d|d}|                     d|          }|                     |d         |i t          j        ddi          }t          j	        |d           t          |d	          5 }|                     |                                d           d d d            d S # 1 swxY w Y   d S )
Nr  z^, "w", encoding="utf-8") as envfile:
                envfile.write(os.environ['foo'])
        r   r   rb   barr   r  r  )r   r   r   r   r  r  re   r   r   r   r   rB   r   )r#   envfiler  r  r   r  s         r   test_specify_environmentz)_PosixSpawnMixin.test_specify_environmentA  s(   "	('222  
 f--ood1gt::UE::< <S1----'G,,, 	.QVVXXu---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   )CCCc                     |                      | j        d         | j        t          j        d           }t	          j        |d           d S Nr   file_actionsr   r  NOOP_PROGRAMre   r   r   r   r#   r   s     r   test_none_file_actionsz'_PosixSpawnMixin.test_none_file_actionsP  sQ    ooa J	  
 
 	S1------rH   c                     |                      | j        d         | j        t          j        g           }t	          j        |d           d S r  r  r  s     r   test_empty_file_actionsz(_PosixSpawnMixin.test_empty_file_actionsY  sQ    ooa J	  
 
 	S1------rH   c                     |                      t          j        t          j        ddgt          j        d          }t          j        |d           d S )Nr   r   Fresetidsr   r   r  r   r   re   r   r   r   r  s     r   test_resetids_explicit_defaultz/_PosixSpawnMixin.test_resetids_explicit_defaultb  sQ    ooN^T6*J	  
 
 	S1------rH   c                     |                      t          j        t          j        ddgt          j        d          }t          j        |d           d S )Nr   r   Tr  r   r   r   r  s     r   test_resetidsz_PosixSpawnMixin.test_resetidsk  sQ    ooN^T6*J	  
 
 	S1------rH   c                     |                      t                    5  |                     t          j        t          j        ddgt
          j        d            d d d            d S # 1 swxY w Y   d S )Nr   r   r  r8   r9   r  r   r   re   r   r"   s    r   test_resetids_wrong_typez)_PosixSpawnMixin.test_resetids_wrong_typet  s    y)) 	7 	7OOCN ^T6:J  7 7 7	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7   ;A##A'*A'c                     |                      t          j        t          j        ddgt          j        t          j                              }t          j        |d           d S )Nr   r   	setpgroupr   r   )r  r   r   re   r   r1   r   r   r  s     r   test_setpgroupz_PosixSpawnMixin.test_setpgroupz  sW    ooN^T6*Jjll	  
 
 	S1------rH   c                     |                      t                    5  |                     t          j        t          j        ddgt
          j        d           d d d            d S # 1 swxY w Y   d S )Nr   r   023r	  r  r"   s    r   test_setpgroup_wrong_typez*_PosixSpawnMixin.test_setpgroup_wrong_type  s    y)) 	9 	9OOCN ^T6:J%  9 9 9	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9r  pthread_sigmaskzneed signal.pthread_sigmask()c                     t          j        d          }|                     t          j        t          j        d|gt
          j        t          j        g          }t          j
        |d           d S )NI            import signal
            signal.raise_signal(signal.SIGUSR1)r   
setsigmaskr   r   )textwrapdedentr  r   r   re   r   r  SIGUSR1r   r   )r#   r   r   s      r   test_setsigmaskz _PosixSpawnMixin.test_setsigmask  sp       3 4 4 ooN^T4(J'	  
 
 	S1------rH   c           	         |                      t                    5  |                     t          j        t          j        ddgt
          j        d           d d d            n# 1 swxY w Y   |                      t                    5  |                     t          j        t          j        ddgt
          j        dg           d d d            n# 1 swxY w Y   |                      t                    5  |                     t          j        t          j        ddgt
          j        t          j	        t          j	        dz   g           d d d            d S # 1 swxY w Y   d S )Nr   r   "   r  jr5   
r8   r9   r  r   r   re   r   r  r  NSIGr"   s    r   test_setsigmask_wrong_typez+_PosixSpawnMixin.test_setsigmask_wrong_type  s   y)) 	7 	7OOCN ^T6:J2  7 7 7	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 y)) 	: 	:OOCN ^T6:JC5  : : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: z** 	D 	DOOCN ^T6:JFK4:KM4C  D D D	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D6   ;A""A&)A&<CCC4AEEEc                 >   t          j                    \  }}|                     t           j        |           	 t          j        |d           t          j        d| d          }	 |                     t          j	        t          j	        d|gt           j
        d          }nY# t          $ r"}|                     d|           Y d }~n2d }~wt          $ r"}|                     d|           Y d }~nd }~ww xY wt          j        |           n# t          j        |           w xY wt          j        |d	           t          j        |d
          }t#          |          }t          j        t          j                              }|                     ||           d S )NTz0
                import os
                fd = z`
                sid = os.getsid(0)
                os.write(fd, str(sid).encode())
            r   )setsidzsetsid is not supported: zsetsid failed with: r   r   r   )re   r  r   rw   set_inheritabler  r  r  r   r   r   r   r   r\  r   r   r   r  getsidr0   r  )	r#   rfdwfdr   r   r  output	child_sid
parent_sids	            r   test_setsidz_PosixSpawnMixin.test_setsid  s   799S#&&&	sD)))? $$ $ $  D>oocn'*~tT&B&(j & ? ? ' C C CA#AABBBBBBBB" > > ><S<<========> HSMMMMBHSMMMMS1----c""KK	Yry{{++
J	22222sG   -D &:B!  D !
C7+CD C7C2-D 2C77D D%c                    t          j         t           j        t           j                  }t          j        d          }	 |                     t          j        t          j        d|gt          j	        t           j        g          }t          j         t           j        |           n$# t          j         t           j        |           w xY wt          j        |t           j                    d S )Nr  r   	setsigdefr   )r  r  SIG_IGNr  r  r  r   r   re   r   r   r   )r#   original_handlerr   r   s       r   test_setsigdefz_PosixSpawnMixin.test_setsigdef  s     "=HH  3 4 4	<//t,
!>*	 "  C M&.*:;;;;FM&.*:;;;;SFN?;;;;;;s   AB$ $!Cc           	         |                      t                    5  |                     t          j        t          j        ddgt
          j        d           d d d            n# 1 swxY w Y   |                      t                    5  |                     t          j        t          j        ddgt
          j        dg           d d d            n# 1 swxY w Y   |                      t                    5  |                     t          j        t          j        ddgt
          j        t          j	        t          j	        dz   g           d d d            d S # 1 swxY w Y   d S )Nr   r   r  r*  r  r5   r  r"   s    r   test_setsigdef_wrong_typez*_PosixSpawnMixin.test_setsigdef_wrong_type  s   y)) 	6 	6OOCN ^T6:J"  6 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 y)) 	9 	9OOCN ^T6:J3%  9 9 9	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 z** 	P 	POOCN ^T6:J6;A2N  P P P	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Pr  r3  zbpo-34685: test can fail on BSDc           	      T   t          j        d          }t          j        |          }t          j        d| d| d          }|                     t          j        t          j        d|gt           j        d t          j	        |          f          }t          j        |d           d S Nr   zF            import os, sys
            if os.sched_getscheduler(0) != zV:
                sys.exit(101)
            if os.sched_getparam(0).sched_priority != z:
                sys.exit(102)r   )	schedulerr   re   r   r)  r  r  r  r   r   r   r:  r   r   r#   policypriorityr   r   s        r   test_setscheduler_only_paramz-_PosixSpawnMixin.test_setscheduler_only_param  s     &q)),V44  !,2 !  ! 8@	 !  !  ! " " ooN^T4(JR^H556	  
 
 	S1------rH   c           	      T   t          j        d          }t          j        |          }t          j        d| d| d          }|                     t          j        t          j        d|gt           j        |t          j	        |          f          }t          j        |d           d S r2  r4  r5  s        r   test_setscheduler_with_policyz._PosixSpawnMixin.test_setscheduler_with_policy  s     &q)),V44  !,2 !  ! 8@	 !  !  ! " " ooN^T4(Jr~h778	  
 
 	S1------rH   c                 J   t           j        dt           j                            t                    t           j        dft           j        dft           j        ddfg}|                     | j	        d         | j	        t           j
        |          }t          j        |d           d S )NrA   r   r5   r   r  r   )re   POSIX_SPAWN_OPENr   realpath__file__r   POSIX_SPAWN_CLOSEPOSIX_SPAWN_DUP2r  r  r   r   r   )r#   r  r   s      r   test_multiple_file_actionsz+_PosixSpawnMixin.test_multiple_file_actions  s     !RW%5%5h%?%?aP!1% !Q'

 ood/2"/ j+7  9 9 	S1------rH   c                 `   | j         }|                     t                    5  |                     |d         |t          j        d g           d d d            n# 1 swxY w Y   |                     t                    5  |                     |d         |t          j        dg           d d d            n# 1 swxY w Y   |                     t                    5  |                     |d         |t          j        dg           d d d            n# 1 swxY w Y   |                     t                    5  |                     |d         |t          j        dg           d d d            n# 1 swxY w Y   |                     t                    5  |                     |d         |t          j        t          j        fg           d d d            n# 1 swxY w Y   |                     t                    5  |                     |d         |t          j        t          j        ddfg           d d d            n# 1 swxY w Y   |                     t                    5  |                     |d         |t          j        t          j        d fg           d d d            n# 1 swxY w Y   |                     t                    5  |                     |d         |t          j        t          j        dt          d	z   t          j
        dfg           d d d            d S # 1 swxY w Y   d S )
Nr   r  r   rp   )i90  r5   r   rA   rj  )r  r8   r9   r  re   r   r?  r  r<  r>  r   r  s     r   test_bad_file_actionsz&_PosixSpawnMixin.test_bad_file_actions  sA    y)) 	1 	1OODGT2:*.  1 1 1	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 y)) 	/ 	/OODGT2:*,  / / /	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ y)) 	4 	4OODGT2:*1  4 4 4	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 y)) 	5 	5OODGT2:*2  5 5 5	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 y)) 	D 	DOODGT2:+-+?*A)B  D D D	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D y)) 	I 	IOODGT2:+-+?A*F)G  I I I	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I y)) 	I 	IOODGT2:+-+?*F)G  I I I	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I z** 	= 	=OODGT2:+-+>+,ho+-;+; *<  = = =	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   +AA A>+B55B9<B9+DDD6+E--E14E16GGG98H==II"7J%%J),J)
AL##L'*L'c                 J   t           j        }|                     t           j        |           d}t          j        d|t          j        t          j        z  t          j        z  t          j
        t          j        z  fg}|                     d|          }|                     |d         |t          j        |          }t          j        |d           t#          |d          5 }|                     |                                d	           d d d            d S # 1 swxY w Y   d S )
NOif 1:
            import sys
            sys.stdout.write("hello")
            r5   r   r   r  r   r  r  hello)r   r   r   r   re   r<  r   r   O_TRUNCrL  rZ  r[  r  r  r   r   r   r   rB   r   )r#   r  r  r  r  r   r  s          r   test_open_filez_PosixSpawnMixin.test_open_file8  sG   "	('222
  !Wbj(2:5t|+-

 f--ood1gtRZ+7  9 9 	S1----'G,,, 	0QVVXXw///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   ")DDDc                    t           j        }|                     t           j        |           d|d}|                     d|          }|                     |d         |t          j        t          j        dfg          }t          j
        |d           t          |d          5 }|                     |                                d	t          j        z             d d d            d S # 1 swxY w Y   d S )
Nzif 1:
            import os
            try:
                os.fstat(0)
            except OSError as e:
                with open(zq, 'w', encoding='utf-8') as closefile:
                    closefile.write('is closed %d' % e.errno)
            r   r   r  r   r  r  zis closed %d)r   r   r   r   r  r  re   r   r?  r   r   r   rB   r   r   r  )r#   	closefiler  r  r   r  s         r   test_close_filez _PosixSpawnMixin.test_close_fileL  sK   $		()444
 %   f--ood1gtRZ-/-A1,E+F  H H 	S1----)g... 	E!QVVXX~'CDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   &6C))C-0C-c                 D   t           j        }|                     t           j        |           d}t	          |d          5 }t
          j        |                                dfg}|                     d|          }| 	                    |d         |t
          j
        |          }t          j        |d           d d d            n# 1 swxY w Y   t	          |d	          5 }|                     |                                d
           d d d            d S # 1 swxY w Y   d S )NrE  r   r5   r   r   r  r   r  r  rF  )r   r   r   r   r   re   r@  rv   r  r  r   r   r   rB   r   )r#   dupfiler  	childfiler  r  r   r  s           r   r8  z_PosixSpawnMixin.test_dup2_  s   "	('222 '4   	2I$i&6&6&8&8!<L ##D&11D//$q'4/; " = =C q1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 'G,,, 	0QVVXXw///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s$   A8CC
C)DDD)&ru  rv  rw  r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  ri   rx  r   r  r  r  r(  r.  r0  r  r}  r   r   r8  r:  rA  rC  rH  rK  r8  r   rH   r   r  r    sg       ND$f=LJ3 3 31 1 1+ + +. . .. . .. . .. . .. . .7 7 7. . .9 9 9 X):;;:< <. .< <.D D D3 3 3> X):;;8: :< <: :<"P P P X_S\,,-BCC68 8. .8 8 ^." X_S\,,-BCC68 8. .8 8 ^."
. 
. 
.= = =:0 0 0(E E E&0 0 0 0 0rH   r  posix_spawnztest needs os.posix_spawnc                   (    e Zd Z eedd          ZdS )TestPosixSpawnrO  N)ru  rv  rw  r6   r   r  r   rH   r   rQ  rQ  r  s!        t44JJJrH   rQ  posix_spawnpztest needs os.posix_spawnpc                   H    e Zd Z eedd          Zej        d             ZdS )TestPosixSpawnPrR  Nc                    t          j                    }|                     t          j        |           d}t
          j                            ||          }t          j        t          j
        |           	 t
          j                            |t
          j        d         f          }n# t          $ r |}Y nw xY w|ddddf}t          j        d|d          }d|f}t!          |d|i d S )	Nzposix_spawnp_test_program.exePATHr  r  r   r   zP
            import os
            from test import support

            args = zy
            pid = os.posix_spawnp(args[0], args, os.environ)

            support.wait_process(pid, exitcode=0)
        )tempfilemkdtempr   r   r  re   r   rY  r  r   r   pathsepr   rh   r  r  r   )r#   temp_dirprogramprogram_fullpathr   
spawn_argsr   r  s           r   test_posix_spawnpz!TestPosixSpawnP.test_posix_spawnp{  s     #%%	((33317<<'::

3>#3444	:??Hbj.@#ABBDD 	 	 	DDD	 tT48
 zz    d|$*T*****s   61B( (B76B7)	ru  rv  rw  r6   r   r  r   skip_unless_symlinkr^  r   rH   r   rT  rT  w  sD        55J"+ + #"+ + +rH   rT  r  ztest weak linking on macOSc                   z    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestPosixWeaklinkingc                     dd l }dd l}|                                fdD             | _        t	          d  |j                    d                             d          D                       | _        d S )Nr   c                 N    h | ]!}|                     d           |         |"S )HAVE_r1  )r   nmconfig_varss     r   	<setcomp>z-TestPosixWeaklinking.setUp.<locals>.<setcomp>  s6    ccc"r}}W7M7McR]^`Rac2cccrH   c              3   4   K   | ]}t          |          V  d S rp   r  )r   parts     r   r  z-TestPosixWeaklinking.setUp.<locals>.<genexpr>  s(      TT4SYYTTTTTTrH   r  )r  r   get_config_vars	availabler  mac_verr   )r#   r  r   rf  s      @r   r$   zTestPosixWeaklinking.setUp  s    //11cccccccTT3C83C3E3Ea3H3N3Ns3S3STTTTTrH   c                 F    || j         vrt          j        | d          d S )Nz not weak-linked)rk  ri   rj   r  s     r   _verify_availablez&TestPosixWeaklinking._verify_available  s1    t~%%#t$=$=$=>>> &%rH   c                    |                      d           | j        dk    rT|                     t          t          d          d           |                     t          t          d          d           d S |                     t          t          d          d           |                     t          t          d          d           d S )	NHAVE_PWRITEV)r   r  r   zos.pwritev is not availabler   zos.readv is not availablezos.pwritev is availablezos.readv is available)rn  rl  rq   r   re   r=  r"   s    r   r   z!TestPosixWeaklinking.test_pwritev  s    ~...<8##OOGB	224QRRROOGB113NOOOOO WR335NOOOWR224KLLLLLrH   c                 ^   |                      d           | j        dk    r"|                     dt          j                   d S |                     dt          j                   |                     t          d          5  t          j	        dd           d d d            d S # 1 swxY w Y   d S )NHAVE_FSTATATr   r   dir_fd unavailablefiler   r  )
rn  rl  rg  r   _have_functionsassertNotInrM  r   re   rL  r"   s    r   rT  zTestPosixWeaklinking.test_stat  s    ~...<8##MM.%*?@@@@@ ^U-BCCC''(;=QRR * *q))))* * * * * * * * * * * * * * * * * *   >B""B&)B&c                    |                      d           | j        dk    r"|                     dt          j                   d S |                     dt          j                   |                     t          d          5  t          j	        dt          j
        d           d d d            n# 1 swxY w Y   |                     t          d          5  t          j	        dt          j
        d	           d d d            n# 1 swxY w Y   |                     t          d
          5  t          j	        dt          j
        d           d d d            d S # 1 swxY w Y   d S )NHAVE_FACCESSATrs  rt  ru  r   r  zfollow_symlinks unavailableFr  zeffective_ids unavailableT)effective_ids)rn  rl  rg  r   rv  rw  rM  r   re   r  r  r"   s    r   r  z TestPosixWeaklinking.test_access  s   /000<8##MM*E,ABBBBB -u/DEEE''(;=QRR 5 5	&"'!44445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 ''(;=Z[[ B B	&"'5AAAAB B B B B B B B B B B B B B B ''(;=XYY ? ?	&"'>>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s6   >"B,,B03B0"D  DD&"EEEc                    |                      d           | j        dk    r"|                     dt          j                   d S |                     dt          j                   |                     dt          j                   |                     t          d          5  t          j	        ddd           d d d            d S # 1 swxY w Y   d S )	NHAVE_FCHMODATrs  HAVE_LCHMODrt  ru  i  r   r  )
rn  rl  rg  r   rv  rw  rM  r   re   r  r"   s    r   
test_chmodzTestPosixWeaklinking.test_chmod  s   ///<8##MM/5+@AAAAA _e.CDDDMM-)>???''(;=QRR 2 2q11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   CC
Cc                    |                      d           | j        dk    r"|                     dt          j                   d S |                     dt          j                   |                     dt          j                   |                     t          d          5  t          j	        dddd           d d d            d S # 1 swxY w Y   d S )NHAVE_FCHOWNATrs  HAVE_LCHOWNrt  ru  r   r  )
rn  rl  rg  r   rv  rw  rM  r   re   r  r"   s    r   r  zTestPosixWeaklinking.test_chown  s   ///<8##MM/5+@AAAAA _e.CDDDMM-)>???''(;=QRR 1 1Aa00001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s   CCCc                 h   |                      d           | j        dk    r"|                     dt          j                   d S |                     dt          j                   |                     t          d          5  t          j	        ddd           d d d            n# 1 swxY w Y   |                     t          d          5  t          j	        ddd	           d d d            n# 1 swxY w Y   |                     t          d          5  t          j	        dddd
           d d d            n# 1 swxY w Y   t          j                    5 }t          j                            |d          }t          j                            |d          }t          j                            |d          }t          |d          5 }|                    d           d d d            n# 1 swxY w Y   t          j        d|           |                     t$                    5  t          j	        ||d           d d d            n# 1 swxY w Y   |                     t$                    5  t          j	        ||d           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NHAVE_LINKATrs  zsrc_dir_fd unavailablesourcetargetr   r  zdst_dir_fd unavailabler  r  rb  r   dataTr  F)rn  rl  rg  r   rv  rw  rM  r   re   rb  r   rZ  r   rY  r   r   r  r8   FileExistsError)r#   r  	link_pathtarget_pathsource_pathry   s         r   	test_linkzTestPosixWeaklinking.test_link  sp   }---<8##MM-)>????? ]E,ABBB''(;=UVV ; ;(::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ''(;=UVV ; ;(::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ''(;=UVV I I(aHHHHI I I I I I I I I I I I I I I #%% KGLLF;;	 gll9h?? gll9h??+s++ %rHHV$$$% % % % % % % % % % % % % % % 
8Y/// &&77 J JGKDIIIIJ J J J J J J J J J J J J J J &&77 K KGKEJJJJK K K K K K K K K K K K K K K#K K K K K K K K K K K K K K K K K Ks   >B""B&)B&C,,C03C0D77D;>D;A1J'G(J'(G,	,J'/G,	02J'"I:J'I
	
J'I
	J'+JJ'J	J'J	J''J+.J+c                    |                      d           | j        dk    r"|                     dt          j                   d S |                     dt          j                   |                     t          d          5  t          j	        d           d d d            n# 1 swxY w Y   |                     t          d          5  t          j
        d           d d d            d S # 1 swxY w Y   d S )NHAVE_FDOPENDIRrs  zClistdir: path should be string, bytes, os.PathLike or None, not intr   zCscandir: path should be string, bytes, os.PathLike or None, not int)rn  rl  rg  r   rv  rw  rM  r9   re   r  scandirr"   s    r   test_listdir_scandirz)TestPosixWeaklinking.test_listdir_scandir  sa   /000<8##MM*E,ABBBBB -u/DEEE''	3xyy  
1               ''	3xyy  
1                 s$   >BB#&B#C''C+.C+c                 ^   |                      d           | j        dk    r"|                     dt          j                   d S |                     dt          j                   |                     t          d          5  t          j	        dd           d d d            d S # 1 swxY w Y   d S )NHAVE_MKDIRATrs  rt  dirr   r  )
rn  rl  rg  r   rv  rw  rM  r   re   r  r"   s    r   
test_mkdirzTestPosixWeaklinking.test_mkdir"  s    ~...<8##MM.%*?@@@@@ ^U-BCCC''(;=QRR * *q))))* * * * * * * * * * * * * * * * * *rx  c                 ^   |                      d           | j        dk    r"|                     dt          j                   d S |                     dt          j                   |                     t          d          5  t          j	        dd           d d d            d S # 1 swxY w Y   d S )NHAVE_MKFIFOATrc   r   rt  r   r   r  )
rn  rl  rg  r   rv  rw  rM  r   re   rU  r"   s    r   r`  z TestPosixWeaklinking.test_mkfifo-  s    ///<7""MM/5+@AAAAA _e.CDDD''(;=QRR , ,	&++++, , , , , , , , , , , , , , , , , ,rx  c                 ^   |                      d           | j        dk    r"|                     dt          j                   d S |                     dt          j                   |                     t          d          5  t          j	        dd           d d d            d S # 1 swxY w Y   d S )NHAVE_MKNODATr  rt  r   r   r  )
rn  rl  rg  r   rv  rw  rM  r   re   ra  r"   s    r   ri  zTestPosixWeaklinking.test_mknod8  s    ~...<7""MM.%*?@@@@@ ^U-BCCC''(;=QRR + +****+ + + + + + + + + + + + + + + + + +rx  c                    |                      d           | j        dk    r"|                     dt          j                   d S |                     dt          j                   |                     t          d          5  t          j	        ddd           d d d            n# 1 swxY w Y   |                     t          d          5  t          j	        ddd           d d d            n# 1 swxY w Y   |                     t          d          5  t          j
        ddd           d d d            n# 1 swxY w Y   |                     t          d          5  t          j
        ddd           d d d            d S # 1 swxY w Y   d S )	NHAVE_RENAMEATrs  z%src_dir_fd and dst_dir_fd unavailableabr   r  r  )rn  rl  rg  r   rv  rw  rM  r   re   r`  ra  r"   s    r   test_rename_replacez(TestPosixWeaklinking.test_rename_replaceC  s   ///<8##MM/5+@AAAAA _e.CDDD''(;=dee 2 2	#sq11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ''(;=dee 2 2	#sq11112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 ''(;=dee 3 3
322223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ''(;=dee 3 3
322223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3sH   >B""B&)B&C,,C03C0D66D:=D:FFFc                    |                      d           | j        dk    r"|                     dt          j                   d S |                     dt          j                   |                     t          d          5  t          j	        dd           d d d            n# 1 swxY w Y   |                     t          d          5  t          j
        dd           d d d            d S # 1 swxY w Y   d S )NHAVE_UNLINKATrs  rt  r   r   r  )rn  rl  rg  r   rv  rw  rM  r   re   r   r  r"   s    r   test_unlink_rmdirz&TestPosixWeaklinking.test_unlink_rmdirW  sp   ///<8##MM/5+@AAAAA _e.CDDD''(;=QRR , ,	&++++, , , , , , , , , , , , , , , ''(;=QRR + +****+ + + + + + + + + + + + + + + + + +s$   >B!!B%(B%C++C/2C/c                 t   |                      d           | j        dk    r"|                     dt          j                   d S |                     dt          j                   |                     t          d          5  t          j	        dt          j
        d           d d d            d S # 1 swxY w Y   d S )NHAVE_OPENATrs  rt  r   r   r  )rn  rl  rg  r   rv  rw  rM  r   re   r   r   r"   s    r   	test_openzTestPosixWeaklinking.test_opene  s    }---<8##MM-)>????? ]E,ABBB''(;=QRR 7 7A66667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   >"B--B14B1c                 ^   |                      d           | j        dk    r"|                     dt          j                   d S |                     dt          j                   |                     t          d          5  t          j	        dd           d d d            d S # 1 swxY w Y   d S )NHAVE_READLINKATrs  rt  r   r   r  )
rn  rl  rg  r   rv  rw  rM  r   re   r  r"   s    r   test_readlinkz"TestPosixWeaklinking.test_readlinkp  s    0111<8##MM+U-BCCCCC .0EFFF''(;=QRR / /FA..../ / / / / / / / / / / / / / / / / /rx  c                 `   |                      d           | j        dk    r"|                     dt          j                   d S |                     dt          j                   |                     t          d          5  t          j	        ddd           d d d            d S # 1 swxY w Y   d S )NHAVE_SYMLINKATrs  rt  r  r  r   r  )
rn  rl  rg  r   rv  rw  rM  r   re   r  r"   s    r   test_symlinkz!TestPosixWeaklinking.test_symlink{  s    /000<8##MM*E,ABBBBB -u/DEEE''(;=QRR 0 0
3Q////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0s   >B##B'*B'c                    |                      d           |                      d           | j        dk    rB|                     dt          j                   |                     dt          j                   d S |                     dt          j                   |                     dt          j                   |                     t          d          5  t          j	        dd           d d d            d S # 1 swxY w Y   d S )NHAVE_FUTIMENSHAVE_UTIMENSAT)r   rc   rt  r   r   r  )
rn  rl  rg  r   rv  rw  rM  r   re   r  r"   s    r   r  zTestPosixWeaklinking.test_utime  s3   ////000<8##MM/5+@AAAMM*E,ABBBBB _e.CDDD-u/DEEE''(;=QRR + +****+ + + + + + + + + + + + + + + + + +s   C77C;>C;N)ru  rv  rw  r$   rn  r   rT  r  r  r  r  r  r  r`  ri  r  r  r  r  r  r  r   rH   r   ra  ra    s,       U U U? ? ?M M M	* 	* 	*? ? ?"
2 
2 
2
1 
1 
1$K $K $KN  	* 	* 	*	, 	, 	,	+ 	+ 	+3 3 3(+ + +	7 	7 	7	/ 	/ 	/	0 	0 	0+ + + + +rH   ra  c                  ,    t          j                     d S rp   )r   reap_childrenr   rH   r   tearDownModuler    s    rH   __main__)1r~   r   test.supportr   r   r   test.support.script_helperr   import_moduler   r   r   r  r  re   r   rL  rW  ri   r   r  
contextlibr	   rf   ImportErrorr   rY  
gettempdirr   r  rx  maxsizer}  r~  r{  r   r  TestCaser   r  r  r  r   rQ  rT  ra  r  ru  mainr   rH   r   <module>r     s          & & & & & & " " " " " " ( ( ( ( ( ( 7 7 7 7 7 7 	$#G,,  



   				       % % % % % %JJJJ   
CCC 1h133'.1AAC C #x"K%J!6!I'/J.    %$__%6%68VWWs0 s0 s0 s0 s0(# s0 s0 s0n'EI EI EI EI EIX& EI EI EIP!< !< !< !< !<) !< !< !<HX0 X0 X0 X0 X0 X0 X0 X0v
 WWR//1LMM5 5 5 5 5X&(8 5 5 NM5 WWR002NOO!+ !+ !+ !+ !+h')9 !+ !+ PO!+H S\X-/KLLu+ u+ u+ u+ u+8, u+ u+ MLu+p   zHMOOOOO s   #A( (A21A2