
    daf]~                    D   d Z 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 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	 ddlZej4                  j7                   ej8                         ej:                  d	z         Z ej>                  e
j@                  d
k  xr ejB                  xs ejD                   d      Z#d Z$ ej>                   e$       d      Z% G d dejL                        Z' G d dejL                        Z( G d dejL                        Z) G d d      Z* ej>                   e+ed      d       G d dejL                  e*             Z, ej>                   e+ed      d       G d dejL                  e*             Z- ej>                  e
j                  dk(  d       G d  d!ejL                               Z. G d" d#ejL                        Z/d$ Z0e1d%k(  r ejd                          yy# e$ r ddlZY w xY w# e$ r dZY w xY w)&zTest posix functions    )support)import_helper)	os_helper)warnings_helperassert_python_okN)contextmanagerz-dummy-symlink        z(test is only meaningful on 32-bit buildsc                      t        t        d      sy	 t        j                  d       y# t        $ r,} | j                  t        j
                  k(  rY d } ~ yY d } ~ yd } ~ ww xY w)Nsched_getschedulerFr   T)hasattrposixr   OSErrorerrnoENOSYS)es    */root/Python-3.12.4/Lib/test/test_posix.py_supports_schedr   )   sU    5./  #   77ell" #s   ) 	AAAzrequires POSIX scheduler APIc                      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j2                         d%               Z ej                   eed&      d'       ej2                         d(               Z ej2                         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jV                  ej.                  v dI      dJ        Z, ej                  ejV                  ejZ                  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jf                  ejh                  dW      dX               Z5 ej                   eedY      dZ      d[        Z6 ej                   eed\      d]       ejf                  ejh                  d^      d_               Z7 ej                   eed`      da       ejp                  dbdcdd       ejr                         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      xr	  ee@dt      du      dv        ZA ej                   eedw      dx      dy        ZBdz ZC ej                   eed{      d|       ejf                  ej                  d}      d~               ZEeFj                   ej                   eed      d       ejf                  ej                  d}      d                      ZHeFj                   ej                   eed      d      d               ZI ej                   eed      d      d        ZJd ZKd ZLd ZMd ZN ej                  ej                  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jp                  dbdcd      d               ZUej                   ej                   eed      d       ejp                  dbdcd      d                      ZW ej                   eed      d      d        ZXd ZYeFj                  d        ZZd Z[eFj                  d        Z\ ej                   eed      d      d        Z] ej                   eed      d      d        Z^d Z_d Z`eFj                  d        ZbeFj                  d        Zc ej                   eed      d      eFj                  d               Zd ej                   eed      d      eFj                  d               Zed Zf ej                   eed      d      d        Zg ej                   eed      d      d        Zh ej                   eed      d      d        Zid Zjd Zk ej                   eed      d      d        Zl ej                   eed      d       ej                   eed      d       ej                   eed      d      d                      Zm ej                   eed«      dë       ej                   eedī      dū       ejr                         dƄ                      Zn ej                   eeodǫ      dȫ       ej                   eedɫ      dʫ      d˄               Zp ej                   eed̫      dͫ      Zq ej                   eedΫ      dϫ      ZreqdЄ        Zseq ej                   eedѫ      dҫ      dӄ               ZteudԄ        Zv ej                   eedի      d֫      dׄ        Zwerd؄        Zxerdل        Zy ejf                  ejh                  dګ       ej                  ej                  dk(  dܫ      d݄               Z{ ej                   eedޫ      d߫      d        Z|d Z}d Z~d Z ej                   eed      d      d        Zy#)PosixTesterc                 <   | j                  t        j                  t        j                         t	        t        j                  d      5  	 d d d        | j                  t        j                                t        j                  ddt               y # 1 sw Y   HxY w)Nwbignorez.* potential security risk .*)
addCleanupr   unlinkTESTFNopenenterContextr   check_warningswarningsfilterwarningsRuntimeWarningselfs    r   setUpzPosixTester.setUp8   sq    	(()*:*:;)""D) 		/88:;*I .	0	 	s   	BBc                     g d}|D ]N  }t        t        |d       }|| j                  |      5   |        | j                  t        |d       d d d        P y # 1 sw Y   [xY w)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.testNoArgFunctionsA   ss     % 	@D d3J%\\$' @L%%iQ?@ @	@@ @s   AA"		getresuidztest needs posix.getresuid()c                     t        j                         }| j                  t        |      d       |D ]  }| j	                  |d        y N   r   )r   r?   assertEquallenassertGreaterEqual)r$   user_idsvals      r   test_getresuidzPosixTester.test_getresuidQ   sC     ??$X* 	,C##C+	,    	getresgidztest needs posix.getresgid()c                     t        j                         }| j                  t        |      d       |D ]  }| j	                  |d        y rA   )r   rJ   rC   rD   rE   )r$   	group_idsrG   s      r   test_getresgidzPosixTester.test_getresgidY   sC     OO%	Y+ 	,C##C+	,rI   	setresuidztest needs posix.setresuid()c                     t        j                         }| j                  t        j                  |        | j                  t        j                  ddd             y N)r   r?   assertIsNonerN   )r$   current_user_idss     r   test_setresuidzPosixTester.test_setresuida   sD     !??,%//+;<=%//"b"56rI   c                     t        j                         }d|vr2|d   dz   ddf} | j                  t        t         j                  g|  y y Nr   r6   rQ   )r   r?   r9   r   rN   )r$   rS   new_user_idss      r   test_setresuid_exceptionz$PosixTester.test_setresuid_exceptioni   sP     !??,$$,Q/12r:LDguFF %rI   	setresgidztest needs posix.setresgid()c                     t        j                         }| j                  t        j                  |        | j                  t        j                  ddd             y rP   )r   rJ   rR   rY   )r$   current_group_idss     r   test_setresgidzPosixTester.test_setresgidr   sD     "OO-%//+<=>%//"b"56rI   c                     t        j                         }d|vr2|d   dz   ddf} | j                  t        t         j                  g|  y y rV   )r   rJ   r9   r   rY   )r$   r[   new_group_idss      r   test_setresgid_exceptionz$PosixTester.test_setresgid_exceptionz   sP     "OO-%%.q1!3R<MDguGG &rI   
initgroupsztest needs os.initgroups()getpwuidztest needs pwd.getpwuid()c                    | j                  t        t        j                         | j                  t        t        j                  d        | j                  t        t        j                  dd       | j                  t        t        j                  ddt	                      t        j                         dk7  r[	 t        j                  t        j                               j                  }	 t        j                  |d       | j                  d       y y # t        $ r t        j                  d      w xY w# t        $ r4}| j                  |j                   t         j"                         Y d }~y d }~ww xY w)NrB   foor   zneed a pwd entry   z+Expected OSError to be raised by initgroups)r9   r:   r   r`   objectosr4   pwdra   pw_nameKeyErrorunittestSkipTestfailr   rC   r   EPERM)r$   r<   r   s      r   test_initgroupszPosixTester.test_initgroups   s    	)U%5%56)U%5%5t<)U%5%5q%@)U%5%5uaJ 99;!<||ELLN3;;I  r* 		GH   <''(:;;<
  7  %++667s$   71D )D4 D14	E1=*E,,E1statvfsztest needs posix.statvfs()c                 h    | j                  t        j                  t        j                               y N)
assertTruer   ro   rf   curdirr#   s    r   test_statvfszPosixTester.test_statvfs   s     	bii01rI   fstatvfsztest needs posix.fstatvfs()c                 J   t        t        j                        }	 | j                  t	        j
                  |j                                      | j                  t	        j                  |j                                      |j                          y # |j                          w xY wrq   )	r   r   r   rr   r   ru   filenoro   closer$   fps     r   test_fstatvfszPosixTester.test_fstatvfs   sb     )""#	OOENN299;78OOEMM"))+67HHJBHHJs   A$B B"	ftruncateztest needs posix.ftruncate()c                    t        t        j                  d      }	 |j                  d       |j	                          t        j                  |j                         d       |j                          y # |j                          w xY w)Nw+testr   )	r   r   r   writeflushr   r|   rw   rx   ry   s     r   test_ftruncatezPosixTester.test_ftruncate   sW     )""D)	HHVHHJOOBIIK+HHJBHHJs   AA2 2Btruncateztest needs posix.truncate()c                     t        t        j                  d      5 }|j                  d       |j	                          d d d        t        j                  t        j                  d       y # 1 sw Y   .xY w)Nwr   r   )r   r   r   r   r   r   r   ry   s     r   test_truncatezPosixTester.test_truncate   sT    )""C( 	BHHVHHJ	 	y''+	 	s   "A**A3execveNz/test needs execve() to support the fd parameterc                    t        j                  t        j                  t         j                        }	 t        j
                         }|dk(  rzt        j                  t         j                  j                  t        j                        d          t        j                  |t        j                  ddgt         j                         nt        j                  |d       t        j                  |       y # t        j                  |       w xY w)Nr   -cpassexitcode)rf   r   sys
executableO_RDONLYforkchdirpathsplitr   r   environr   wait_processrx   )r$   rz   pids      r   test_fexecvezPosixTester.test_fexecve   s     WWS^^R[[1	'')Caxs~~6q9:R#..$!?L$$S15HHRLBHHRLs   B*C4 4Dwaitidztest needs posix.waitid()c                    t        j                         }|dk(  rt        j                  t         j                  j	                  t
        j                        d          t        j                  t
        j                  t
        j                  ddgt         j                         y t        j                  t        j                  |t        j                        }| j                  ||j                         y )Nr   r   r   )rf   r   r   r   r   r   r   r   r   r   r   P_PIDWEXITEDrC   si_pid)r$   r   ress      r   test_waitidzPosixTester.test_waitid   s     ggi!8HHRWW]]3>>2156LL#..$)GT,,u{{C?CS#**-rI   c                 Z   | j                  t        d      5  t        j                  d        d d d        | j                  t        d      5  t        j                  d       d d d        | j                  t        d      5  t        j                  d       d d d        | j                  t        d      5  t        j                  d	
       d d d        | j                  t        d      5  t        j                  d        d d d        | j                  t        d      5  t        j                  d        d d d        | j                  t        d      5  t        j                  d 
       d d d        | j                  t        d      5  t        j                  d d        d d d        | j                  t        d      5  t        j                          d d d        | j                  t        d      5  t        j                  d d       d d d        d}t	        d|       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ]xY w# 1 sw Y   4xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)NzPositional args not allowed)msgc                       y rq    r   rI   r   <lambda>z3PosixTester.test_register_at_fork.<locals>.<lambda>       rI   zArgs must be callable   )beforethree)after_in_childs   Five)after_in_parentzArgs must not be NonezInvalid arg was allowedc                       y)NrB   r   r   rI   r   r   z3PosixTester.test_register_at_fork.<locals>.<lambda>   r   rI   )r   r   z!At least one argument is requiredc                       y rq   r   r   rI   r   r   z3PosixTester.test_register_at_fork.<locals>.<lambda>   r   rI    )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   )r9   r:   rf   register_at_forkr   r$   codes     r   test_register_at_forkz!PosixTester.test_register_at_fork   sK   y.KL 	.-	.y.EF 	*q)	*y.EF 	8w7	8y.EF 	98	9y.EF 	-t,	-y.EF 	5t4	5y.EF 	65	6y.GH 	HtYG	H y.QR 	"!	" y.GH 	H|BG	H
"F 	t$y	. 	.	* 	*	8 	8	9 	9	- 	-	5 	5	6 	6	H 	H	" 	"	H 	Hsw   H.H;I:I0I"&I/I<J	
J>J!.H8;III"I,/I9<J	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        j                  |t        j                  d       t        j                  |t        j                  d       t        j                  |       y # t        j                  |       w xY w)N   testr      )rf   r   r   r   O_WRONLYO_CREATr   lseekSEEK_SETr   r   F_LOCKF_ULOCKrx   r$   fds     r   
test_lockfzPosixTester.test_lockf  s    WWY%%r{{RZZ'?@	HHR!HHRBKK(KKELL!,KKEMM1-HHRLBHHRLs   BC   C7preadztest needs posix.pread()c                    t        j                  t        j                  t         j                  t         j
                  z        }	 t        j                  |d       t        j                  |dt         j                         | j                  dt        j                  |dd             | j                  dt        j                  |d             t        j                  |       y # t        j                  |       w xY w)Nr   r   s   esr   r6   s   te)rf   r   r   r   O_RDWRr   r   r   r   rC   r   r   readrx   r   s     r   
test_preadzPosixTester.test_pread%  s    WWY%%ryy2::'=>	HHR!HHRBKK(UEKKAq$9:UEJJr1$56HHRLBHHRLs   BC# #C:preadvztest needs posix.preadv()c                    t        j                  t        j                  t         j                  t         j
                  z        }	 t        j                  |d       dD cg c]  }t        |       }}| j                  t        j                  ||d      d       | j                  g dt        |             t        j                  |       y c c}w # t        j                  |       w xY w)N   test1tt2t3t5t6t6t8   rB   r   rB   
   s   t1tt2s   t3ts   5t)rf   r   r   r   r   r   r   	bytearrayrC   r   r   listrx   )r$   r   ibufs       r   test_preadvzPosixTester.test_preadv1  s    WWY%%ryy2::'=>	HHR./)23A9Q<3C3U\\"c15r:6S	BHHRL	 4 HHRLs   C C1AC C C)	RWF_HIPRIztest needs posix.RWF_HIPRIc                    t        j                  t        j                  t         j                  t         j
                  z        }	 t        j                  |d       dD cg c]  }t        |       }}| j                  t        j                  ||dt         j                        d       | j                  g dt        |             t        j*                  |       y c c}w # t        $ r | j                  d       Y 7t        $ rG}|j                   t         j"                  t         j$                  hv rt'        j(                  d       d }~ww xY w# t        j*                  |       w xY w)Nr   r   rB   r   r   zpreadv2 not availablez0RWF_HIPRI is not supported by the current system)rf   r   r   r   r   r   r   r   rC   r   r   r   r   NotImplementedErrorskipTestr   r   EINVALENOTSUPrj   rk   rx   )r$   r   r   r   insts        r   test_preadv_flagszPosixTester.test_preadv_flags<  s    WWY%%ryy2::'=>	HHR./)23A9Q<3C3U\\"c1bllCRH6S	B HHRL 4 # 	3MM12 	 zzellEMM::''(Z[[	 HHRLsD   C! C1AC! C! !E;E =EAEEE E&c                 4   t        j                  t        j                  t         j                  t         j
                  z        }	 t        d      gdz  }| j                  t              5 }t        j                  ||d       d d d        | j                  j                  j                  t        j                         | j                  t        |d         ddz         t        j                  |       y # 1 sw Y   txY w# t        j                  |       w xY wN      r       )rf   r   r   r   r   r   r   r9   r   r   rC   	exceptionr   r   bytesrx   r$   r   r   cms       r   test_preadv_overflow_32bitsz'PosixTester.test_preadv_overflow_32bitsR  s     WWY%%ryy2::'=>	U#$u,C""7+ &r		"c1%&R\\//>U3q6]E5L9HHRL& &
 HHRLs%   $D  )C4AD  4C=9D   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        j                  |dd       | j                  dt        j                  |d             t        j                  |       y # t        j                  |       w xY w)Nr   r      xxr6   s   txxtr   )rf   r   r   r   r   r   r   r   r   r   r   rC   r   rx   r   s     r   test_pwritezPosixTester.test_pwrite_  s    WWY%%ryy2::'=>	HHR!HHRBKK(LLUA&WejjQ&78HHRLBHHRLs   A8C C*pwritevztest needs posix.pwritev()c                 L   t        j                  t        j                  t         j                  t         j
                  z        }	 t        j                  |d       t        j                  |dt         j                         t        j                  |g dd      }| j                  |d       t        j                  |dt         j                         | j                  dt        j                  |d             t        j                  |       y # t        j                  |       w xY w)Nr   r   s   test1s   tt2s   t3r   r   s   xxtest1tt2t3d   )rf   r   r   r   r   r   r   r   r   r   rC   r   r   rx   r$   r   ns      r   test_pwritevzPosixTester.test_pwritevj  s    WWY%%ryy2::'=>		HHRHHRBKK(

28!<AQ#HHRBKK(_ejjS.ABHHRLBHHRLs   B1D D#zos.RWF_SYNCztest needs os.RWF_SYNCc                 j   t        j                  t        j                  t         j                  t         j
                  z        }	 t        j                  |d       t        j                  |dt         j                         t        j                  |g ddt         j                        }| j                  |d       t        j                  |dt         j                         | j                  dt        j                  |d             t        j                  |       y # t        j                  |       w xY w)Nr   r   r   r   r   s
   xxtest1tt2r   )rf   r   r   r   r   r   r   r   r   r   RWF_SYNCrC   r   r   rx   r   s      r   test_pwritev_flagszPosixTester.test_pwritev_flagsx  s     WWY%%ryy2::'=>		HHRHHRBKK(

28!R[[IAQ#HHRBKK(]EJJr3,?@HHRLBHHRLs   C D D2c                    t        j                  t        j                  t         j                  t         j
                  z        }	 | j                  t              5 }t        j                  |ddz  gdz  d       d d d        | j                  j                  j                  t        j                         t        j                  |       y # 1 sw Y   SxY w# t        j                  |       w xY w)N   xr   r   r   )rf   r   r   r   r   r   r9   r   r   rC   r   r   r   rx   r$   r   r   s      r   test_pwritev_overflow_32bitsz(PosixTester.test_pwritev_overflow_32bits  s     WWY%%ryy2::'=>	""7+ :r

2u~5q9:R\\//>HHRL	: : HHRLs$   C C9<C CC C.posix_fallocatez"test needs posix.posix_fallocate()c                    t        j                  t        j                  t         j                  t         j
                  z        }	 t        j                  |dd       	 t        j                   |       y # t        $ rW}|j                  t        j                  k(  r4t        j                  j                  d      rt        j                  d       d }~ww xY w# t        j                   |       w xY w)Nr   r   )sunosfreebsdnetbsdopenbsdgnukfreebsdz test may fail on ZFS filesystems)rf   r   r   r   r   r   r   r   r   r   r   r   platform
startswithrj   rk   rx   )r$   r   r   s      r   test_posix_fallocatez PosixTester.test_posix_fallocate  s     WWY%%r{{RZZ'?@	!!"a, HHRL  		
 zzU\\)cll.E.EH/J''(JKK		 HHRLs%   A3 3	C<ACCC C-c                     	 t        j                  ddd       y # t        $ r(}|j                  t        j                  k7  r Y d }~y 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  sA    	!!#q"- 	zzU[[( )	s    	AAAposix_fadvisez test needs posix.posix_fadvise()c                    t        j                  t        j                  t         j                        }	 t        j                  |ddt
        j                         t        j                  |       y # t        j                  |       w xY wNr   )	rf   r   r   r   r   r   r  POSIX_FADV_WILLNEEDrx   r   s     r   test_posix_fadvisezPosixTester.test_posix_fadvise  sT     WWY%%r{{3	Aq%*C*CDHHRLBHHRLs   &A0 0Bc                     	 t        j                  dddt         j                         y # t        $ r(}|j                  t        j
                  k7  r Y d }~y 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  sI    	Q5+D+DE 	zzU[[( )	s   &) 	AAAz!test needs fd support in os.utimec           
         t        j                          }t        j                  t        j                  t        j
                        }	 t        j                  |       t        j                  |d        | j                  t        t        j                  |d       | j                  t        t        j                  ||d f       | j                  t        t        j                  |d |f       t        j                  |t        |      t        |      f       t        j                  |||f       | j                  t        t        j                  |||f||f       | j                  t        t        j                  ||dfd       | j                  t        t        j                  |d|df       t        j                  |t        |      t        |t        |      z
  dz        f       t        j                  |t        |      t        |t        |      z
  dz        f       t        j                  |       y # t        j                  |       w xY w)NNN)nsr       eA)timerf   r   r   r   r   r   utimer9   r:   int
ValueErrorrx   )r$   nowr   s      r   test_utime_with_fdzPosixTester.test_utime_with_fd  s   iikWWY%%r{{3	KKOKKD!ib,Gib3+Fib4+FKKSXs3x01KKS#J'j%++rC:3PS*Uj%++rC8Uj%++r<SRSHUKKSXsC#c(Nc+A'BCDKKC#sSX~.D*EFG HHRLBHHRLs   GH4 4Iz.test needs follow_symlinks support in os.utimec                    t        j                          }t        j                  t        j                  d d       | j                  t        t        j                  t        j                  dd       | j                  t        t        j                  t        j                  |d fd       | j                  t        t        j                  t        j                  d |fd       t        j                  t        j                  t        |      t        |      fd       t        j                  t        j                  ||fd       t        j                  t        j                  d       y )NFfollow_symlinksr
  r  r   r  r   r   r9   r:   r  r$   r  s     r   test_utime_nofollow_symlinksz(PosixTester.test_utime_nofollow_symlinks  s    iikI$$dEB)U[[)2B2B& 	 	?)U[[)2B2B+u 	 	>)U[[)2B2B+u 	 	>I$$s3xS&:$)	+I$$sCj%HI$$e<rI   writevztest needs posix.writev()c                 @   t        j                  t        j                  t         j                  t         j
                  z        }	 t        j                  |d      }| j                  |d       t        j                  |dt         j                         | j                  dt        j                  |d             	 t        j                  |g       }| j                  |d       t        j                  |       y # t        $ r Y !w xY w# t        j                  |       w xY w)Nr   r   r   
   test1tt2t3)rf   r   r   r   r   r   r  rC   r   r   r   r   r   rx   )r$   r   r   sizes       r   test_writevzPosixTester.test_writev  s    WWY%%ryy2::'=>			"78AQ#HHRBKK(]EJJr2,>?*||B+   q)HHRL    HHRLs1   A3D 9C7 D 7	D D DD Dc                    t        j                  t        j                  t         j                  t         j
                  z        }	 | j                  t              5 }t        j                  |ddz  gdz         d d d        | j                  j                  j                  t        j                         t        j                  |       y # 1 sw Y   SxY w# t        j                  |       w xY w)Nr   r   r   )rf   r   r   r   r   r   r9   r   r  rC   r   r   r   rx   r   s      r   test_writev_overflow_32bitsz'PosixTester.test_writev_overflow_32bits  s     WWY%%ryy2::'=>	""7+ 6r		"te|nu456R\\//>HHRL	6 6 HHRLs$   C C
8<C 
CC C-readvztest needs posix.readv()c           	         t        j                  t        j                  t         j                  t         j
                  z        }	 t        j                  |d       t        j                  |dt         j                         dD cg c]  }t        |       }}| j                  t        j                  ||      d       | j                  g d|D cg c]  }t        |       c}       	 t        j                  |g       }| j                  |d       t        j                  |       y c c}w c c}w # t        $ r Y +w xY w# t        j                  |       w xY w)Nr  r   r   r   r   )rf   r   r   r   r   r   r   r   r   r   rC   r   r   r   r   rx   )r$   r   r   r   r  s        r   
test_readvzPosixTester.test_readv  s    WWY%%ryy2::'=>	HHR'HHRBKK()23A9Q<3C3U[[S126638Oaq8OP*{{2r*   q)HHRL 48O
    HHRLsN   ?E D(:E D-
"E *D2  E (
E 2	D>;E =D>>E Ec                 2   t        j                  t        j                  t         j                  t         j
                  z        }	 t        d      gdz  }| j                  t              5 }t        j                  ||       d d d        | j                  j                  j                  t        j                         | j                  t        |d         ddz         t        j                  |       y # 1 sw Y   txY w# t        j                  |       w xY wr   )rf   r   r   r   r   r   r   r9   r   r   rC   r   r   r   r   rx   r   s       r   test_readv_overflow_32bitsz&PosixTester.test_readv_overflow_32bits  s     WWY%%ryy2::'=>	U#$u,C""7+ "rS!"R\\//>U3q6]E5L9HHRL" "
 HHRLs%   $C? )C3 AC? 3C<8C? ?Ddupztest needs posix.dup()zWASI does not have dup()c                    t        t        j                        }	 t        j                  |j                               }| j                  |t               t        j                  |       |j                          y # |j                          w xY wrq   )
r   r   r   r   r%  rw   assertIsInstancer  rf   rx   )r$   rz   r   s      r   test_dupzPosixTester.test_dup)  s[     )""#	299;'B!!"c*HHRLHHJBHHJs   AA: :Bconfstrztest needs posix.confstr()c                     | j                  t        t        j                  d       | j	                  t        t        j                  d            dkD  d       y )N
CS_garbageCS_PATHr   T)r9   r  r   r)  rC   rD   r#   s    r   test_confstrzPosixTester.test_confstr5  s=     	*emm\BU]]956:DArI   dup2ztest needs posix.dup2()zWASI does not have dup2()c                 X   t        t        j                        }t        t        j                        }	 t        j                  |j                         |j                                |j                          |j                          y # |j                          |j                          w xY wrq   )r   r   r   r   r.  rw   rx   )r$   fp1fp2s      r   	test_dup2zPosixTester.test_dup2;  sk     9##$9##$	JJszz|SZZ\2IIKIIK IIKIIKs   2B "B)	O_CLOEXECzneeds os.O_CLOEXECr         c                    t        j                  t        j                  t         j                  t         j
                  z        }| j                  t         j                  |       | j                  t        j                  |             y rq   )
rf   r   r   r   r   r3  r   rx   assertFalseget_inheritabler   s     r   test_oscloexeczPosixTester.test_oscloexecG  sR     WWY%%r{{2<<'?@"%++B/0rI   O_EXLOCKztest needs posix.O_EXLOCKc                 Z   t        j                  t        j                  t         j                  t         j
                  z  t         j                  z        }| j                  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        }| j                  t        t         j                  t        j                  t         j                  t         j
                  z  t         j                  z         t        j                  |       y y )NO_SHLOCK)rf   r   r   r   r   r:  r   r9   r   
O_NONBLOCKrx   r   r   r<  r   s     r   test_osexlockzPosixTester.test_osexlockO  s     WWY%%[[,RZZ79'277I,<,<++bkk1"--?	A
5*%))R[[0;=Bgrww	0@0@ kk"++5bmmCEHHRL &rI   r<  ztest needs posix.O_SHLOCKc                 d   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        }| j                  t        t         j                  t        j                  t         j                  t         j                  z  t         j                  z         t        j                  |       y y )Nr:  )rf   r   r   r   r   r<  r   rx   r   r   r9   r   r   r:  r=  )r$   fd1fd2r   s       r   test_osshlockzPosixTester.test_osshlock_  s     ggi&&[[,RZZ79ggi&&kk"++-bjj8:

5*%))R[[0;=Bgrww	0@0@ kk"++5bmmCEHHRL &rI   fstatztest needs posix.fstat()c           	         t        t        j                        }	 | j                  t	        j
                  |j                                      | j                  t	        j                  |j                                      | j                  t        dt        j                  t        |j                                      |j                          y # |j                          w xY wNz4should be string, bytes, os.PathLike or integer, not)r   r   r   rr   r   rC  rw   statassertRaisesRegexr:   floatrx   ry   s     r   
test_fstatzPosixTester.test_fstatp  s     )""#	OOEKK		45OOEJJryy{34""9JJJbiik 24 HHJBHHJs   B!C Cc           
         | j                  t        j                  t        j                               | j                  t        j                  t        j                  t        j                                     | j                  t        dt        j                  t        t        j                  t        j                                     | j                  t        dt        j                  d        | j                  t        dt        j                  t        t        j                               | j                  t        dt        j                  t        t        j                  t        j                                     y rE  )rr   r   rF  r   r   rf   fsencoderG  r:   r   r   r#   s    r   	test_statzPosixTester.test_stat~  s    

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

2;;y/?/?#@AByF

Ibkk)2B2B&CD	F 	yF

D	" 	yF

D!1!12	4 	yF

DY-=-=!>?	ArI   mkfifozdon't have mkfifo()c                 T   t         j                  dk(  r/t        j                  j	                  dt
        j                        }nt
        j                  }t        j                  |       | j                  t
        j                  |       	 t        j                  |t        j                  t        j                  z         | j!                  t        j"                  t        j                  |      j$                               y # t        $ r}| j                  d|z         Y d }~dd }~ww xY w)Nvxworksz/fifos/posix.mkfifo(): %s)r   r   rf   r   joinr   r   r   r   r   rM  rF  S_IRUSRS_IWUSRPermissionErrorr   rr   S_ISFIFOst_mode)r$   	fifo_pathr   s      r   test_mkfifozPosixTester.test_mkfifo  s    <<9$Y	0@0@AI!((I#	(()4	4LLDLL4<<$?@ 	ejj&;&C&CDE  	4MM.233	4s   	5D   	D'	D""D'mknodS_IFIFOzdon't have mknod()/S_IFIFOc                    t        j                  t         j                         t        j                  t        j
                  z  t        j                  z  }	 t        j                  t         j                  |d       | j                  t        j                  t        j                  t         j                        j                               t        j                  t         j                         	 t        j                  t         j                  |dd        y # t        $ rS}| j                  |j                  t        j                  t        j                   t        j"                  f       Y d }~d }~ww xY w# t        $ rS}| j                  |j                  t        j                  t        j                   t        j"                  f       Y d }~y d }~ww xY w)Nr   )r   modedevicedir_fd)r   r   r   rF  rZ  rR  rS  r   rY  rr   rU  rV  r   assertInr   rm   r   EACCES)r$   r\  r   s      r   
test_mknodzPosixTester.test_mknod  s+   
 	))*||dll*T\\9	QKK	(($2 OODMM%**Y5E5E*F*N*NOP 	))*	NKKY--D  	N MM!''EKKu||#LMM	N  	NMM!''EKKu||#LMM	Ns2   %D /'E6 	E3 A	E..E36	G?A	GGmakedevztest needs posix.makedev()c                    t        j                  t        j                        }|j                  }| j                  |t               | j                  |d       t        j                  |      }| j                  |t               | j                  |d       | j                  t        j                  |      |       | j                  t        t         j                  t        |             | j                  t        t         j                         dD ]-  }| j                  t        t        ft         j                  |       / t        j                  |      }| j                  |t               | j                  |d       | j                  t        j                  |      |       | j                  t        t         j                  t        |             | j                  t        t         j                         dD ]-  }| j                  t        t        ft         j                  |       / | j                  t        j                   ||      |       | j                  t        t         j                   t        |      |       | j                  t        t         j                   |t        |             | j                  t        t         j                   |       | j                  t        t         j                          dD ]Z  }| j                  t        t        ft         j                   ||       | j                  t        t        ft         j                   ||       \ t"        j$                  dk(  rsd}| j                  t        j                  |      |       | j                  t        j                  |      |       | j                  t        j                   ||      |       y y )Nr   )                    )rd  r
   re  rf  linuxrQ   )r   rF  r   r   st_devr'  r  rE   majorrC   r9   r:   rH  r  OverflowErrorminorrb  r   r   )r$   stdevri  xrk  NODEVs          r   test_makedevzPosixTester.test_makedev  s   ZZ	(()iic3'Q'C eS)q)S)51)U[[%*=)U[[1$ 	KAz=95;;J	K C eS)q)S)51)U[[%*=)U[[1$ 	KAz=95;;J	K 	ue4c:)U]]E%L%H)U]]E5<H)U]]E:)U]]3+ 	TAz=95==!USz=95==%QRS	T <<7"EU[[/7U[[/7U]]5%8%@	 #rI   c           
           fd}t        j                         }t        j                         } |||        |||        |d|        |||        ||d        |||       t        j                  dk(  r|dv }n|dk(  }t
        j                  rn|rQt        j                  dk7  rdnd} |||        |||        |dd        |||        |||        |||       nt	        j                         dv rt        j                  d	       j                  t        |dd        |||        j                  t        |dd        |||       dt        j                         vr" j                  t        |dd        |||       t        t        fD ]R  }	 j                  t        | |	|      |        |||        j                  t        || |	|              |||       T y
)z/Common code for chown, fchown and lchown tests.c                     A       }j                  |j                  |        j                  |j                  |       y y rq   )rC   st_uidst_gid)uidgidrF  first_paramr$   	stat_funcs      r   
check_statz6PosixTester._test_all_chown_common.<locals>.check_stat  s@    $ -  c2  c2 %rI   rQ   rO  )r   r6   r   l        r   )zHP-UXSunOSz1Skipping because of non-standard chown() behaviorN)rf   r4   r/   r   r   r   is_emscriptensystemrj   rk   r9   r   r0   strrH  r:   )
r$   
chown_funcrw  rx  ry  ru  rv  is_root	big_valuets
   ` ``      r   _test_all_chown_commonz"PosixTester._test_all_chown_common  s   	3
 iikiik;S)3;C(3;R(3<<9$ f}GaxG   " #&,,)";I{Iy9y),{B+y),{C-sC __"44 ## %/ 0 0 gz;1EsC gz;2FsC &!!':{BJ3$e 	!Ai[!C&#NsC i[#qvNsC 		!rI   chownzrequires os.chown()getgid() is a stubc                 t   t        j                  t        j                         | j	                  t
        t        j                  t        j                  dd       t        j                  t        j                         | j                  t        j                  t        j                  t        j                         y rP   )rf   r   r   r   r9   r   r   r  create_empty_filer  rF  r#   s    r   
test_chownzPosixTester.test_chown%  sl     			)""#'5;;	0@0@"bI 	##I$4$45##EKK1A1A5::NrI   fchownztest needs os.fchown()c           	      J   t        j                  t        j                         t	        t        j                  d      }	 |j                         }| j                  t        j                  |t        t        dd              |j                          y # |j                          w xY w)Nr   rC  )rf   r   r   r   r   rw   r  r   r  r7   rx   )r$   	test_filer   s      r   test_fchownzPosixTester.test_fchown0  sw     			)""# ))3/		!!#B''b(/w(EG OOIOOs   A B B"lchownztest needs os.lchown()c           	         t        j                  t        j                         t        j                  t
        t        j                         | j                  t        j                  t        j                  t        t        dd              y )Nlstat)
rf   r   r   r   symlink_DUMMY_SYMLINKr  r   r  r7   r#   s    r   test_lchownzPosixTester.test_lchown?  sS     			)""#


>9#3#34##ELL)2B2B$+E7D$A	CrI   r   ztest needs posix.chdir()c                     t        j                  t        j                         | j	                  t
        t         j                  t        j                         y rq   )r   r   rf   rs   r9   r   r   r   r#   s    r   
test_chdirzPosixTester.test_chdirH  s.    BII'5;;	0@0@ArI   c                     | j                  t        j                  t        j                  t
        j                               y rq   )r_  r   r   r   listdirrf   rs   r#   s    r   test_listdirzPosixTester.test_listdirM  s#    i&&bii(@ArI   c                 h    | j                  t        j                  t        j                                y rq   )r_  r   r   r   r  r#   s    r   test_listdir_defaultz PosixTester.test_listdir_defaultP  s     	i&&8rI   c                     | j                  t        j                  t        j                        t        j                  d             y N   .)r_  rf   rK  r   r   r   r  r#   s    r   test_listdir_byteszPosixTester.test_listdir_bytesU  s*     	bkk)"2"23U]]45HIrI   c                     t         t        fD ];  }| j                  t              5  t	        j
                   |d             d d d        = y # 1 sw Y   HxY wr  )r   
memoryviewr9   r:   r   r  )r$   clss     r   test_listdir_bytes_likez#PosixTester.test_listdir_bytes_likeZ  sN    j( 	)C""9- )c$i() )	)) )s   AA	z)test needs fd support for posix.listdir()c                    t        j                  t        j                         t         j                        }| j	                  t         j
                  |       | j                  t        t        j                  d            t        t        j                  |                   | j                  t        t        j                  d            t        t        j                  |                   y )N.)	r   r   r(   r   r   rx   rC   sortedr  )r$   fs     r   test_listdir_fdzPosixTester.test_listdir_fd_  s     JJu||~u~~6Q'5==%&5==#$	
 	5==%&5==#$	rI   accessztest needs posix.access()c                     | j                  t        j                  t        j                  t
        j                               y rq   )rr   r   r  r   r   rf   R_OKr#   s    r   test_accesszPosixTester.test_accessn  s#    Y%5%5rww?@rI   umaskztest needs posix.umask()c                     t        j                  d      }| j                  |t               t        j                  |       y r  )r   r  r'  r  )r$   old_masks     r   
test_umaskzPosixTester.test_umaskr  s+    ;;q>h,HrI   strerrorztest needs posix.strerror()c                 L    | j                  t        j                  d             y r  )rr   r   r  r#   s    r   test_strerrorzPosixTester.test_strerrorx  s     	q)*rI   pipeztest needs posix.pipe()c                     t        j                         \  }}t        j                  |       t        j                  |       y rq   )r   r  rf   rx   )r$   readerwriters      r   	test_pipezPosixTester.test_pipe}  s)    

rI   pipe2ztest needs os.pipe2()   c                    | j                  t        t        j                  d       | j                  t        t        j                  dd       t        j                  d      \  }}t        j                  |       t        j                  |       t        j                  t        j
                  t        j                  z        \  }}| j                  t        j                  |       | j                  t        j                  |       | j                  t        j                  |             | j                  t        j                  |             | j                  t        j                  |             | j                  t        j                  |             | j                  t        t        j                  |d       	 t        j                  |dt        j                  z         y # t        $ r Y y w xY w)NDEADBEEFr   r6   r   )r9   r:   rf   r  rx   r3  r=  r   r7  r8  get_blockingr   r   r   r   PIPE_MAX_SIZE)r$   rr   s      r   
test_pipe2zPosixTester.test_pipe2  sH    	)RXXz:)RXXq!4 xx{1

 xxR]]231!$!$++A./++A./+,+,'277Aq1	HHQw4445 		s   <'G$ $	G0/G0c                     dd l }| j                  t        t        j                  |j
                  dz          | j                  t        t        j                  |j                  dz          y Nr   r6   )	_testcapir9   rj  rf   r  INT_MAXUINT_MAX)r$   r  s     r   test_pipe2_c_limitszPosixTester.test_pipe2_c_limits  sI    
 	-93D3Dq3HI-93E3E3IJrI   r  ztest needs posix.utime()c                 p   t        j                          }t        j                  t        j                  d        | j                  t        t        j                  t        j                  d       | j                  t        t        j                  t        j                  |d f       | j                  t        t        j                  t        j                  d |f       t        j                  t        j                  t        |      t        |      f       t        j                  t        j                  ||f       y )Nr
  r  r  s     r   
test_utimezPosixTester.test_utime  s    iikI$$d+)U[[#**L	:)U[[#**S$K	9)U[[#**T3K	9I$$s3xS&:;I$$sCj1rI   c                 \   t        j                  |      j                  }	 |t        j                  t        j                  z  t        j
                  z   z  } |||fi | | j                  t        j                  |      j                  |       t        j                  |      r	 t        |d      5  	 d d d        |t        j                  t        j                  z  t        j
                  z  z  } |||fi | | j                  t        j                  |      j                  |       t        j                  |      rt        |d      5  	 d d d        t        j                  ||       y # 1 sw Y   xY w# t        $ r Y w xY w# 1 sw Y   ;xY w# t        j                  ||       w xY w)Nzwb+)rf   rF  rV  S_IWOTHS_IWGRPrS  rC   S_ISREGr   rT  r   chmod)r$   
chmod_functargetkwargsr\  new_modes         r   check_chmodzPosixTester.check_chmod  sL   wwv&&	&t|| ;dll JKKHvx262RWWV_44h?||D!fe,  t||dll:T\\IJHvx262RWWV_44h?||D!&%(  KK% &   KK%sa   BF &E8 2E,4E8 <BF FF ,E51E8 8	FF FF FF F+c                 `    | j                  t        j                  t        j                         y rq   )r  r   r  r   r   r#   s    r   test_chmod_filezPosixTester.test_chmod_file  s    i&6&67rI   c                     t         j                  dz   }t        j                  |       | j	                  t        j
                  |       |S )Nd)r   r   r   mkdirr   rmdirr$   r  s     r   tempdirzPosixTester.tempdir  s5    !!C'FV,rI   c                 d    | j                         }| j                  t        j                  |       y rq   )r  r  r   r  r  s     r   test_chmod_dirzPosixTester.test_chmod_dir  s!    f-rI   lchmodztest needs os.lchmod()c                     | j                  t        j                  t        j                         | j                  t        j
                  t        j                  d       y NFr  )r  r   r  r   r   r  r#   s    r   test_lchmod_filezPosixTester.test_lchmod_file  s;    y'7'78i&6&6NrI   c                     | j                         }| j                  t        j                  |       | j                  t        j                  |d       y r  )r  r  r   r  r  r  s     r   test_lchmod_dirzPosixTester.test_lchmod_dir  s:    v.feDrI   c                 Z   t        j                  |      j                  }t        j                  |      j                  }	 |t        j                  t        j
                  z  t        j                  z   z  } |||fi | | j                  t        j                  |      j                  |       | j                  t        j                  |      j                  |       |t        j                  t        j
                  z  t        j                  z  z  } |||fi | | j                  t        j                  |      j                  |       | j                  t        j                  |      j                  |       t        j                  ||       y # t        j                  ||       w xY wrq   )
rf   rF  rV  r  r  r  rS  rC   r   r  r$   r  r  linkr  target_mode	link_moder  s           r   check_chmod_linkzPosixTester.check_chmod_link  s#   ggfo--HHTN**	
	-"t||dll'BT\\'Q%RRHtX00RWWV_44h?RXXd^33Y?"dllT\\&ADLL&PQHtX00RWWV_44h?RXXd^33Y?KK,EKK,s    D;F F*c                    t        j                  |      j                  }t        j                  |      j                  }|t        j                  t        j
                  z  t        j                  z   z  } |||fi | | j                  t        j                  |      j                  |       | j                  t        j                  |      j                  |       |t        j                  t        j
                  z  t        j                  z  z  } |||fi | | j                  t        j                  |      j                  |       | j                  t        j                  |      j                  |       y rq   )rf   rF  rV  r  r  r  rS  rC   r  s           r   check_lchmod_linkzPosixTester.check_lchmod_link  s   ggfo--HHTN**	!<t||!KLL4,V,00+>$//:t|| ;dll JK4,V,00+>$//:rI   c                    t         j                  }t         j                  dz   }t        j                  ||       | j	                  t
        j                  |       t        j                  dk(  r"| j                  t
        j                  ||       y | j                  t
        j                  ||       | j                  t
        j                  ||d       y )N-linkntTr  )r   r   rf   r  r   r   r   r<   r  r  r  r$   r  r  s      r   test_chmod_file_symlinkz#PosixTester.test_chmod_file_symlink  s    !!')


64 d+77d?""5;;=!!%++vt<!!%++vtT!RrI   c                    | j                         }t        j                  dz   }t        j                  ||d       | j                  t        j                  |       t        j                  dk(  r"| j                  t        j                  ||       y | j                  t        j                  ||       | j                  t        j                  ||d       y )Nr  T)target_is_directoryr  r  )r  r   r   rf   r  r   r   r   r<   r  r  r  r  s      r   test_chmod_dir_symlinkz"PosixTester.test_chmod_dir_symlink  s    ')


64T:d+77d?""5;;=!!%++vt<!!%++vtT!RrI   c                 >   t         j                  }t         j                  dz   }t        j                  ||       | j	                  t
        j                  |       | j                  t
        j                  ||d       | j                  t
        j                  ||       y Nr  Fr  )
r   r   rf   r  r   r   r   r  r  r  r  s      r   test_lchmod_file_symlinkz$PosixTester.test_lchmod_file_symlink  sp     !!')


64 d+u{{FD%Pu||VT:rI   c                 >   | j                         }t        j                  dz   }t        j                  ||       | j                  t        j                  |       | j                  t        j                  ||d       | j                  t        j                  ||       y r  )r  r   r   rf   r  r   r   r   r  r  r  r  s      r   test_lchmod_dir_symlinkz#PosixTester.test_lchmod_dir_symlink!  sp     ')


64 d+u{{FD%Pu||VT:rI   c                     t        j                  |      }| j                  t        |d             |j                  t        j
                  z  }	  |||fi | 	 t        j                  |      }| j                  |j                  t        j
                  z  |j                         	 t        |d      }	t        j                  ||j                         y # t        $ r;}|j                  t        j                  k7  r d}| j                  |       Y d }~d }~ww xY w# t        $ r4}
| j                  |
j                  t        j                         Y d }
~
d }
~
ww xY w# t        j                  ||j                         w xY w)Nst_flags2chflag UF_IMMUTABLE not supported by underlying fsr~   )rf   rF  rr   r   r  UF_IMMUTABLEr   r   
EOPNOTSUPPr   rC   r   rm   r   chflags)r$   chflags_functarget_filer  rl  flagserrr   new_str   r   s              r   _test_chflags_regular_filez&PosixTester._test_chflags_regular_file+  s$   WW[!J/0 d///	e6v6	4WW[)FR[[4+<+<<fooN7+t, MM+r{{3  	yyE,,,FCMM#		  7  %++667 MM+r{{3sI   
C AE 'D 	D1DD	E$*EE EE "E=r  ztest needs os.chflags()c                 `    | j                  t        j                  t        j                         y rq   )r   r   r  r   r   r#   s    r   test_chflagszPosixTester.test_chflagsC  s    ''y7G7GHrI   lchflagsztest needs os.lchflags()c                     | j                  t        j                  t        j                         | j                  t        j
                  t        j                  d       y r  )r   r   r  r   r   r  r#   s    r   test_lchflags_regular_filez&PosixTester.test_lchflags_regular_fileG  s@    ''	8H8HI''y7G7G8= 	( 	?rI   c                    t        j                  t        j                        }| j	                  t        |d             | j                  t        j                  t               t        j                  t        j                  t               t        j                  t              }d }t        j                  |fD ]  }|j                  t        j                  z  }	  |t        |       	 t        j                  t        j                        }t        j                  t              }	| j'                  |j                  |j                         | j'                  |j                  t        j                  z  |	j                          |t        |j                          y # t        $ r;}|j                   t         j"                  k7  r d}| j%                  |       Y d }~d }~ww xY w#  |t        |j                         w xY w)Nr  c                 2    t        j                  | |d      S r  )r   r  )r   r  s     r   chflags_nofollowz;PosixTester.test_lchflags_symlink.<locals>.chflags_nofollowW  s    ==ueDDrI   r  )rf   rF  r   r   rr   r   r   r   r  r  r  r   r  r  r  r   r   r  r   rC   )
r$   	testfn_stdummy_symlink_str  fnr  r  r   new_testfn_stnew_dummy_symlink_sts
             r   test_lchflags_symlinkz!PosixTester.test_lchflags_symlinkM  sx   GGI,,-		:67	((.9


9##^488N3	E >>#34 	>B$--0A0AAE#>5)> "	(8(8 9')xx'?$  !3!3]5K5KL  !1!:!:T=N=N!N!5!>!>@ >#3#<#<=%	>
  #99 0 00Jc""	# >#3#<#<=s%   F(BG"	G$1GG"G;c                     t         j                  dk(  rt        }nt        }t        j
                  j                         D ];  \  }}| j                  t        |      |       | j                  t        |      |       = y )Nr  )	rf   r<   r}  r   r   r   itemsrC   type)r$   	item_typekvs       r   test_environzPosixTester.test_environn  s_    77d?IIMM'') 	1DAqT!Wi0T!Wi0	1rI   c                 .   | j                  t              5  t        j                  dd       d d d        | j                  t              5  t        j                  dd       d d d        | j                  t              5  t        j                  dd       d d d        t        j                  dk(  r| j                  t              5  t        j                  dd	       d d d        | j                  t              5  t        j                  d
d       d d d        | j                  t              5  t        j                  dd       d d d        y y # 1 sw Y   #xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   pxY w# 1 sw Y   y xY w)NzFRUIT VEGETABLEcabbageFRUITzorange VEGETABLE=cabbagezFRUIT=ORANGElemonr   s   FRUIT VEGETABLEs   cabbages   FRUITs   orange VEGETABLE=cabbages   FRUIT=ORANGEs   lemon)r9   r  rf   putenvr<   r#   s    r   test_putenvzPosixTester.test_putenvw  sF   z* 	5II()4	5z* 	<IIg:;	<z* 	/IIng.	/77g"":. ;		-z:;"":. B		($@AB"":. 5		/845 5 	5 	5	< 	<	/ 	/; ;B B5 5sG   E
E>E'E39E?-FEE$'E03E<?FFr(   ztest needs posix.getcwd()c                    d}t        j                         }t         j                  j                  t        j
                        dz   }	 t        j                  |       t        j                  |       	 t        j                  |       t	        j                  |       y #  Y t        j                  |       t	        j                  |       y xY w# t        j                  |       t	        j                  |       w xY w)Nz8getcwd-test-directory-0123456789abcdef-01234567890abcdefz.getcwd)	rf   r(   r   abspathr   r   r  r   rmtree)r$   dirnamers   	base_path_create_and_do_getcwds       @r   test_getcwd_long_pathnamesz&PosixTester.test_getcwd_long_pathnames  s    LGGOOI$4$45	A		(HHYHHY2 HHVY'3	+ ( HHVY' HHVY's   	*B C!C C ,C<getgrouplistztest needs posix.getgrouplist()r4   ztest needs os.getuid()c                     t        j                  t        j                               d   }t        j                  t        j                               d   }| j	                  |t        j                  ||             y )Nr   rB   )rg   ra   rf   r4   r_  r   r#  )r$   usergroups      r   test_getgrouplistzPosixTester.test_getgrouplist  sQ     ||BIIK(+RYY[)!,eU//e<=rI   r-   ztest needs os.getegid()popenztest needs os.popen()c                    t        j                  d      5 }|j                         j                         }|j	                         }d d d        	 t        d j                         D              }|st        j                  d      t        j                  dk(  rUdd l}|j                  d      xs d}t        d |j                  d	      dd
 D              dk  rt        j                  d      |j                  t!        j"                               }| j%                  | xs |t!        j&                         hk(         y # 1 sw Y   xY w# t        $ r t               }Y w xY w)Nzid -G 2>/dev/nullc              3   2   K   | ]  }t        |        y wrq   r  ).0gs     r   	<genexpr>z-PosixTester.test_getgroups.<locals>.<genexpr>  s     <SV<   zneed working 'id -G'darwinr   MACOSX_DEPLOYMENT_TARGETz10.3c              3   2   K   | ]  }t        |        y wrq   r+  )r,  r   s     r   r.  z-PosixTester.test_getgroups.<locals>.<genexpr>  s     8SV8r/  r  r   )r   r4  z$getgroups(2) is broken prior to 10.6)rf   r(  r   striprx   setr   r  rj   rk   r   r   	sysconfigget_config_vartuplesymmetric_differencer   r0   rr   r-   )r$   idggroupsret
idg_groupsr5  dtsymdiffs           r   test_getgroupszPosixTester.test_getgroups  s)    XX)* 	cXXZ%%'F))+C		<V\\^<<J ?*##$:;; <<8#))*DEOB8RXXc]1Q%7887B''(NOO 11%//2CDGCw5==?2C'CD/	 	  	J	s   /D? E ?EE! E!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                   y rq   )rf   
CLD_EXITED
CLD_KILLED
CLD_DUMPEDCLD_TRAPPEDCLD_STOPPEDCLD_CONTINUEDr#   s    r   test_cld_xxxx_constantsz#PosixTester.test_cld_xxxx_constants  s0     	




rI   sched_yieldzdon't have scheduling supportsched_setaffinityz!don't have sched affinity supportc                 ,    t        j                          y rq   )r   rJ  r#   s    r   test_sched_yieldzPosixTester.test_sched_yield  s     	rI   sched_get_priority_maxz!requires sched_get_priority_max()c                    t         j                  }t        j                  |      }t        j                  |      }| j	                  |t
               | j	                  |t
               | j                  ||       t        j                  dk7  rK| j                  t        t         j                  d       | j                  t        t         j                  d       y y )Nr0  i)r   SCHED_RRsched_get_priority_minrN  r'  r  rE   r   r   r9   r   )r$   pollohis       r   test_sched_priorityzPosixTester.test_sched_priority  s    
 nn))#.))#.b#&b#&B'<<8#gu'C'CSIgu'C'CSI $rI   c                 ^   t         j                  j                         D cg c]  \  }}|j                  d      r| }}}t        j                  d      }| j                  ||       	 t        j                  t        j                               }| j                  ||       | j                  t        t         j                  d       | j                  t        t         j                  d       t        j                  d      }| j                  |j                  t               t         j"                  j                  d      sT	 t        j$                  d||       t        j&                  d|       | j                  t        t         j&                  d|       | j                  t        t         j$                  d||       | j                  t(        t         j$                  d|d        | j                  t(        t         j&                  dd       t        j*                  d       }| j                  t(        t         j&                  d|       d}t        j*                  |      }| j                  t,        t         j&                  d|       t        j*                  |       }| j                  t,        t         j&                  d|       y c c}}w # t        $ r)}|j                  t        j                  k7  r Y d }~Od }~ww xY w# t        $ r)}|j                  t        j                  k7  r Y d }~d }~ww xY w)NSCHED_r   rQ   r   r   +   l    )sched_priority)r   __dict__r  r   r   r_  rf   r3   r   r   rm   r9   sched_getparamr'  rZ  r  r   r   sched_setschedulersched_setparamr:   sched_paramrj  )	r$   r<   schedpossible_schedulersmineparentr   paramlarges	            r   $test_get_and_set_scheduler_and_paramz0PosixTester.test_get_and_set_scheduler_and_param  se   8=8L8L8N =u"&//(";  % = =''*d/0	7--bjjl;F
 MM&"56'5#;#;R@'5#7#7<$$Q'e22C8
 ||&&'<=((D%8$$Q. gu';';RG'5#;#;RuM)U%=%=q$M)U%9%91bA!!$')U%9%91eD!!%(-)=)=q%H!!%8-)=)=q%HK=  	ww%++% &	"  77ekk) *s5   J?*'K -K: 	K7K22K7:	L,L''L,sched_rr_get_intervalzno functionc                 .   	 t        j                  d      }| j                  t               | j                  |d       | j                  |d       y # t        $ r9}|j                  t        j                  k7  r | j                  d       Y d }~xd }~ww xY w)Nr   z only works on SCHED_RR processesg        g      ?)
r   rg  r   r   r   r   r'  rH  rE   
assertLess)r$   intervalr   s      r   test_sched_rr_get_intervalz&PosixTester.test_sched_rr_get_interval  s~    	>2215H 	h."-"%  	> ww%,,&MM<==	>s   A 	B/BBc                    t        j                  d      }| j                  |t               | j	                  t        |      d       t        j                  j                  d      s%| j                  t        t         j                  d       |D ]<  }| j                  |t               | j	                  |d       | j                  |d       > y )Nr   r6   r   rQ   r
   )r   sched_getaffinityr'  r4  rE   rD   r   r   r   r9   r   r  ri  )r$   maskcpus      r   test_sched_getaffinityz"PosixTester.test_sched_getaffinity,  s    &&q)dC(D	1-||&&y1gu'>'>C 	*C!!#s+##C+OOC)	*rI   c           	         t        j                  d      }| j                  t         j                  dt	        |             t        |      dkD  r|j                          t        j                  d|       | j                  t        j                  d      |       	 t        j                  dg        | j                  t        t         j                  ddg       | j                  t        t         j                  dt        t        d             | j                  t        t         j                  dddz  g       t        j                  j!                  d      s'| j                  t        t         j                  d|       y y # t        $ r Y w xY w)Nr   r6   i0X   r   rQ   )r   rm  r   rK  r   rD   poprC   r   r9   r  mapr  rj  r   r   r   )r$   rn  s     r   test_sched_setaffinityz"PosixTester.test_sched_setaffinity9  s%   &&q)//DJ?t9q=HHJ4(003T:	##Ar* 	*e&=&=q3%H*e&=&=q#c4.Q-)@)@!afXN||&&y1gu'>'>DI 2  	 	s   E< <	FFzNo dynamic linking on WASIr   zPOSIX-only testc                     t         j                   t         j                   t         j                   t         j                   y rq   )r   	RTLD_LAZYRTLD_NOWRTLD_GLOBAL
RTLD_LOCALr#   s    r   test_rtld_constantszPosixTester.test_rtld_constantsS  s$     	rI   	SEEK_HOLEz(test needs an OS that reports file holesc           
         t        t        j                  d      5 }|j                  d       |j	                          |j                         }|j                         }	 t        |      D ]l  }| j                  |t        j                  ||t        j                               | j                  |t        j                  ||t        j                               n | j                  t        t        j                  ||t        j                         | j                  t        t        j                  ||t        j                         	 d d d        y # t        $ r t!        j"                  d      w xY w# 1 sw Y   y xY w)Nzr+bs   hellozOSError raised!)r   r   r   r   r   tellrw   rangerC   rf   r   	SEEK_DATAassertLessEqualr}  r9   r   rj   rk   )r$   rz   r  fnor   s        r   test_fs_holeszPosixTester.test_fs_holes\  s    )""E* 	;bHHXHHJ779D))+C;t OA$$Qa(FG((rxxQ/MNO !!'288S$M!!'288S$M	; 	;  ;
 ''(9::;	; 	;s   AE.C$EE++E..E7c           	      &   dD ]K  }t        t        |d      }|dt        j                  fD ]  }	  |d|        | j                  d|z          M y# t        $ r5}| j                  dj                  |      t        |             Y d}~ d}~ww xY w)zf
        Test functions that call path_error2(), providing two filenames in their exceptions.
        )renamereplacer  Nnoodly2doesnotexistfilenamez'doesnotexistfilename' -> '{}'z#No valid path_error2() test for os.)	r7   rf   r   r   r   r_  formatr}  rl   )r$   r<   functiondstr   s        r   test_path_error2zPosixTester.test_path_error2w  s     2 	HDr4.H!9#3#34 H3S9H 		?$FG	H  MM"B"I"I#"NPSTUPVWs   	A	B*BBc                 F   t         j                  }|dz   }| j                  t         j                  |       t        j                  |       d }	 | j	                  t
              5  t        j                  |t        j                  t        j                  z        }d d d        |t        j                  |       	 | j                  t        j                  j                  |             | j	                  t
        t        j                  |       | j                  t        j                  j                  |             t        |d      j                          | j	                  t
        t        j                  |       y # 1 sw Y   xY w# |t        j                  |       w w xY w)N r   )r   r   r   r   r9   r  rf   r   r   r   rx   r7  r   existsr  rF  r$   r  fn_with_NULr   s       r   test_path_with_null_characterz)PosixTester.test_path_with_null_character  s$   4i	(("-	"":. DWW["++

*BCD ~+,*bhh<+,R*bgg{;D D ~ s$   F #6E:F :F?F F c                 l   t        j                  t        j                        }|dz   }| j	                  t        j
                  |       t        j
                  |       d }	 | j                  t              5  t        j                  |t         j                  t         j                  z        }d d d        |t        j                  |       	 | j                  t         j                  j                  |             | j                  t        t         j                  |       | j                  t         j                  j                  |             t        |d      j                          | j                  t        t         j                   |       y # 1 sw Y   xY w# |t        j                  |       w w xY w)Nr   r   )rf   rK  r   r   r   r   r9   r  r   r   r   rx   r7  r   r  r  rF  r  s       r   test_path_with_null_bytez$PosixTester.test_path_with_null_byte  s-   [[))*5j	(("-	"":. DWW["++

*BCD ~+,*bhh<+,R*bgg{;D D ~ s$   !F 66F,F FF F3
pidfd_openzpidfd_open unavailablec                 @   | j                  t              5 }t        j                  d       d d d        j                  j
                  t
        j                  k(  r| j                  d       t        |j                  t              r| j                  d|j                         | j                  |j                  j
                  t
        j                         t        j                  t        j                  t        j                         d             y # 1 sw Y   xY w)NrQ   z"system does not support pidfd_openzpidfd_open syscall blocked: r   )r9   r   rf   r  r   r   r   r   
isinstancerT  rC   r   rx   r1   )r$   r   s     r   test_pidfd_openzPosixTester.test_pidfd_open  s    w' 	2MM"	<<-MM>?bllO4MM88HIJ++U\\:
ryy{A./	 	s   DD)__name__
__module____qualname__r%   r>   rj   
skipUnlessr   r   rH   rM   rT   rX   r\   r_   rg   rn   rt   r{   r   r   r7   rf   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(  r-  r2  requires_linux_versionrequires_subprocessr9  r>  rB  rI  rL  rX  rF  ra  rp  r  r{  r  r   skip_unless_working_chmodr  r  r  r  r  r  r  r  r  r  r  r  r  r  cpython_onlyr  r  r  r  r  r  r  r  r  r  skip_unless_symlinkr  r  r  r  r   r  r  r  r  r  r"  r'  r?  signalrI  requires_sched_hrequires_sched_affinityrM  rU  requires_schedrf  rk  rp  rv  r<   r|  r  r  r  r  r  r   rI   r   r   r   6   sq   0@  X479,9, X479,9, X479797 X479G9G X479797 X479H9H X557Xj13NOI P7I. X	257272 X
3688 X4799 X
35RS, T, XXt4FHyzW
  {
 X13NOW.  P. W=% =%~ X02LM	 N	 X02LM	 N	 X13NO P X13NOX46RS T P( X13NO	  P	 X13NO P X	24PQ R X	24PQX68PQ R R X	24PQ  R X(9:,..$ X(9:,.. X8*,, X8*,, XR^^35XY Z( XR%@%@@Brs= t= X13NO P* X13NO  P X02LM N* X02LM	  N	 X.13X__W__&@A B3 X	257B7B X/24X__W__&AB C4 X[13GH#W##Aq"- W  "1 # . I1
 X
3466 X
3466 X035
5
A" X13HIF JF X0MWT95M57N7N, X	24PQ%A R%ANF!P XW-/DEX__W**,@AO B FO ((X13KLX__W**,@A
 B M )
 ((X13KLC M )C X02LMB NBB9
J
)
 X"..8DFF X13NOA PA X02LM N
 X
368+8+ X/1JK L
 XW-/FG#W##Aq"- . H4 XW-/FG#W##Aq"-K . H K X02LM
2 N
2&* ((8 )8 ((. ). X13KLO MO X13KLE ME
-
; ""	S #	S ""	S #	S X13KL""; # M; X13KL""; # M;40 X	24MNI OI X
35OP? Q?
 X
35OP> Q>@15 X13NO!( P!(F X79Z[Xj13NOXX.0HI> J P \> XY/1JKXW-/FG W  "E # H LE4 X35ijX_57TU V k +x**75-+H+JL1h11'%AT2U2UW   X(@A<>J> J &I &IP X(?@-P& Q& 
* 
* J J2 X__W__&BCXG+->? @ D X[1CE;E;2H$<$<$ X\24LM0 N0rI   r   c                   X   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      xr 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j2                  d       ej                   ee	d      xr e	j4                  e	j                  v d      d               Z ej                  e	j8                  e	j                  v d      d        Z ej                   ee	d      xr# e	j<                  e	j                  v xr	  eed      d      d        Z ej                  e	j@                  e	j                  v d      d        Z! ej                   ee	d      xr e	jD                  e	j                  v d      d        Z# ej                  e	jH                  e	j                  v d      d         Z% ej                  e	jL                  e	j                  v d!      d"        Z' ej                  e	jP                  e	j                  v d#      d$        Z) ej                   ee	d%      xr e	jT                  e	j                  v d&      d'        Z+y())TestPosixDirFdr   c              #   
  K   t         xj                  dz  c_        t        j                   d| j                   }t        j                   d| j                   d}t	        j
                  |       | j                  t        j                  |       t        j                  j                  ||      }t        j                  j                  |      rJ t        j                  |      5 }|||f d d d        y # 1 sw Y   y xY ww)Nr6   _base)r  countr   r   r   r  r   r  rf   r   rQ  r  open_dir_fd)r$   r<   base_dirfullnamer^  s        r   preparezTestPosixDirFd.prepare  s     !""#1TZZL1&&'qD9HX.77<<$/77>>(+++""8, 	+4**	+ 	+ 	+s   C$D&C7.	D7D <Dc              #      K   | j                         5 \  }}}t        j                  |       | j                  t        j
                  |       |||f d d d        y # 1 sw Y   y xY wwrq   )r  r   r  r   r   r   r$   r^  r<   r  s       r   prepare_filezTestPosixDirFd.prepare_file  sY     \\^ 	+7h''1OOELL(34**	+ 	+ 	+s   A)AA	A)A&"A)z)test needs dir_fd support for os.access()c                     | j                         5 \  }}}| j                  t        j                  |t        j
                  |             d d d        y # 1 sw Y   y xY wNr^  )r  rr   r   r  rf   r  r  s       r   test_access_dir_fdz!TestPosixDirFd.test_access_dir_fd  sM      	H$<VT8OOELLrwwvFG	H 	H 	Hs   :AAz'test needs dir_fd support in os.chmod()c                    | j                         5 \  }}}t        j                  |t        j                         t        j                  |t        j                  t        j
                  z  |       t        j                  |      }| j                  |j                  t        j                  z  t        j                  t        j
                  z         d d d        y # 1 sw Y   y xY wr  )	r  r   r  rF  rR  rS  rC   rV  S_IRWXU)r$   r^  r<   r  ss        r   test_chmod_dir_fdz TestPosixDirFd.test_chmod_dir_fd  s      	:$<VT8KK$,,/KKdllT\\9&I

8$AQYY5!\\DLL8:		: 	: 	:s   CCC$r  z'test needs dir_fd support in os.chown()r  c                     | j                         5 \  }}}t        j                  |t        j                         t        j
                         |       d d d        y # 1 sw Y   y xY wr  )r  r   r  rf   r4   r/   r  s       r   test_chown_dir_fdz TestPosixDirFd.test_chown_dir_fd  sP       	G$<VT8KKbiik299;vF	G 	G 	Gs   AAA%z&test needs dir_fd support in os.stat()c           
         | j                         5 \  }}}t        |d      5 }|j                  d       d d d        | j                  t        j
                  |       t	        j                  |      }t	        j                  ||      }| j                  ||       t	        j                  |d       }| j                  ||       | j                  t        dt        j                  |t	        j                                | j                  t        dt        j                  |t        |             | j                  t        t        j                  |d       d d d        y # 1 sw Y   ,xY w# 1 sw Y   y xY w)Nr   z	testline
r  zshould be integer or None, notl      Fx:^V )r  r   r   r   r   r   rF  rC   rG  r:   r(   rH  r9   rj  )r$   r^  r<   r  outfiles1s2s          r   test_stat_dir_fdzTestPosixDirFd.test_stat_dir_fd  s+   \\^ 	57hh$ ,l+,OOELL(3H%BD0BR$HT2BR$""9.NJJU\\^ # =""9.NJJU6] # <mJJV  5	5 	5, ,	5 	5s"   E+ED!E+E(	#E++E4z'test needs dir_fd support in os.utime()c                    | j                         5 \  }}}t        j                         }t        j                  |d |       t        j                  ||       | j	                  t
        t        j                  |||       | j	                  t
        t        j                  |d|       | j	                  t
        t        j                  ||d f|       | j	                  t
        t        j                  |d |f|       | j	                  t
        t        j                  ||df|       t        j                  |t        |      t        |      f|       t        j                  |||f|       t        j                  |t        |      t        |t        |      z
  dz        f|       t        j                  ||t        |      t        |t        |      z
  dz        f       t        j                  t        j                  v r	 t        j                  |d|       d d d        y # t        $ r Y w xY w# 1 sw Y   y xY w)Nr  r
  rn  r  )r^  r+   F)r  r^  )
r  r  r   r  r9   r:   r  rf   r  r  )r$   r^  r<   r  r  s        r   test_utime_dir_fdz TestPosixDirFd.test_utime_dir_fd  s     	$<VT8))+CKKd62KKV,id!&  2id*6  ;id"Dk&  :id#Sk&  :id"Cj  9KKs3xS26BKKsCj8KKXsC#c(Nc#9:;FLKKV#&s8S#C.C1G-H"IK xx2666KKeFK1	 	2 " 3	 	s*   G2H4H%%	H1.H40H11H44H=z5WASI: symlink following on path_link is not supportedr  z&test needs dir_fd support in os.link()c                    | j                         5 \  }}}| j                         5 \  }}}	 t        j                  ||||       | j                  t        j                  |       | j                  t        j                  |      d   t        j                  |      d          d d d        d d d        y # t        $ r}| j                  d|z         Y d }~d }~ww xY w# 1 sw Y   <xY w# 1 sw Y   y xY w)N
src_dir_fd
dst_dir_fdzposix.link(): %sr6   )
r  r  r   r  rT  r   r   r   rC   rF  )r$   r^  r<   r  dir_fd2linknamefulllinknamer   s           r   test_link_dir_fdzTestPosixDirFd.test_link_dir_fd  s       		-$<VT8\\^		-@<6

4fQ OOELL,7UZZ1!4

<(+-		- 		- 		- # 6014556			- 		- 		- 		-sL   C*CB4AC#C*4	C=CCCCC'	#C**C3z'test needs dir_fd support in os.mkdir()c                     | j                         5 \  }}}t        j                  ||       | j                  t        j                  |       t        j
                  |       d d d        y # 1 sw Y   y xY wr  )r  r   r  r   r  rF  r  s       r   test_mkdir_dir_fdz TestPosixDirFd.test_mkdir_dir_fd,  sU    \\^ 	!7hKKV,OOEKK2JJx 	! 	! 	!s   AA++A4rY  rZ  zAtest requires both stat.S_IFIFO and dir_fd support for os.mknod()c                 n   | j                         5 \  }}}t        j                  t        j                  z  t        j                  z  }	 t        j                  ||d|       | j                  t
        j                  |       | j                  t        j                  t        j                  |      j                               d d d        y # t        $ rS}| j                  |j                  t        j                  t        j                   t        j"                  f       Y d }~`d }~ww xY w# 1 sw Y   y xY w)Nr   r  )r  rF  rZ  rR  rS  r   rY  r   r   rr   rU  rV  r   r_  r   rm   r   r`  )r$   r^  r<   r  r\  r   s         r   test_mknod_dir_fdz TestPosixDirFd.test_mknod_dir_fd3  s     \\^ 
	M7h<<$,,.=DMD$&9 h7ejj.B.J.J KL
	M 
	M  R aggU\\5<<'PQQR	
	M 
	Ms7   7D+	C"A!D+	D(A	D#D+#D((D++D4z&test needs dir_fd support in os.open()c                    | j                         5 \  }}}t        |d      5 }|j                  d       d d d        | j                  t        j
                  |       t	        j                  |t        j                  |      }	 t	        j                  |d      }| j                  d|       t	        j                  |       	 d d d        y # 1 sw Y   xY w# t	        j                  |       w xY w# 1 sw Y   y xY w)Nr   s	   testline
r  	   )
r  r   r   r   r   r   r   r   rC   rx   )r$   r^  r<   r  r  r   r   s          r   test_open_dir_fdzTestPosixDirFd.test_open_dir_fdF  s    \\^ 		 7hh% -m,-OOELL(3D%..@B jjQ'  4B		  		 - - B		  		 s:   C0C
AC0(C+C0
C	C0C--C00C9readlinkz*test needs dir_fd support in os.readlink()c                    | j                         5 \  }}}t        j                  d|       | j                  t        j
                  |       | j                  t	        j                  ||      d       d d d        y # 1 sw Y   y xY wNr  r  )r  rf   r  r   r   r   rC   r  r  s       r   test_readlink_dir_fdz#TestPosixDirFd.test_readlink_dir_fdS  sj     \\^ 	M7hJJy(+OOELL(3U^^D@)L	M 	M 	M   A"A<<Bz(test needs dir_fd support in os.rename()c                 0   | j                         5 \  }}}| j                         5 \  }}}t        j                  ||||       t        j                  |       t        j                  ||       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  )r  r  r   r  rF  )r$   r^  r<   r  r  name2	fullname2s          r   test_rename_dir_fdz!TestPosixDirFd.test_rename_dir_fd[  s      	.$<VT8\\^	.:	LLu$*w@JJy!LLH-	. 	. 	. 	. 	. 	.s#   BA	B /B B		BBz)test needs dir_fd support in os.symlink()c                    | j                         5 \  }}}t        j                  d||       | j                  t        j                  |       | j                  t        j                  |      d       d d d        y # 1 sw Y   y xY wr  )r  r   r  r   r   rC   r  r  s       r   test_symlink_dir_fdz"TestPosixDirFd.test_symlink_dir_fdd  sh    \\^ 	B7hMM)T&9OOELL(3U^^H5yA	B 	B 	Br  z(test needs dir_fd support in os.unlink()c                 r   | j                         5 \  }}}t        j                  |       t        j                  |       	 t        j
                  ||       | j                  t        t        j                  |       	 d d d        y #  | j                  t        j
                  |        xY w# 1 sw Y   y xY wr  )	r  r   r  r   rF  r   r9   r   r   r  s       r   test_unlink_dir_fdz!TestPosixDirFd.test_unlink_dir_fdk  s    \\^ 	7h''1JJx T&1!!'5::x@	 	h7	 	s   /B-<B#B**B--B6rM  z(test needs dir_fd support in os.mkfifo()c                    | j                         5 \  }}}	 t        j                  |t        j                  t        j
                  z  |       | j                  t        j                  |       | j                  t        j                  t        j                  |      j                               d d d        y # t        $ r}| j                  d|z         Y d }~d }~ww xY w# 1 sw Y   y xY w)Nr  rP  )r  r   rM  rF  rR  rS  rT  r   r   r   rr   rU  rV  )r$   r^  r<   r  r   s        r   test_mkfifo_dir_fdz!TestPosixDirFd.test_mkfifo_dir_fdw  s    \\^ 	I7h8T4<<$,,#>vN OOELL(3OODMM%**X*>*F*FGH	I 	I # 82Q6778	I 	Is5   C"7B8A!C"8	CCC"CC""C+N),r  r  r  r  r	   r  r  rj   r  rf   r  supports_dir_fdr  r  r  r   r  r  r   r{  r  rF  r  r  r  r  r  r  r  r  rY  r  r   r  r  r  r  r  r  r  r   r  rM  r  r   rI   r   r  r    s   E	+ 	+ + + Xb&8&88:efH gH XR%7%779bc: d: XW-R288r?Q?Q3QBDX__W**,@AG BDG XB$6$668`a5 b5& XR%7%779bc d< X__? XF=2+=+= =0
-		
- XR%7%779bc! d! XW- 6 hh"*<*<<6$T95\^M	^M XB$6$668`a
  b
  XZ0XbkkREWEW6WEGMGM Xb&8&88:de. f. Xr'9'99;fgB hB Xb&8&88:de	 f	 XX.R299@R@R3RT~I @IrI   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
y	)
PosixGroupsTesterc                 (   t        j                         dk7  rt        j                  d      t	        t         d      st        j                  d      t
        j                  dk(  rt        j                  d      t        j                         | _        y )Nr   znot enough privilegesr0   zneed posix.getgroupsr0  zgetgroups(2) is broken on OSX)	r   r4   rj   rk   r   r   r   r0   saved_groupsr#   s    r   r%   zPosixGroupsTester.setUp  sk    <<>Q##$;<<uk*##$:;;<<8###$CDD!OO-rI   c                 .   t        t        d      r t        j                  | j                         y t        t        d      rUt	        j
                  t        j                               j                  }t        j                  || j                  d          y y )N	setgroupsr`   r   )	r   r   r  r  rg   ra   r4   rh   r`   r$   r<   s     r   tearDownzPosixGroupsTester.tearDown  sb    5+&OOD--.UL)<</77DT4#4#4Q#78 *rI   r`   ztest needs posix.initgroups()c                    t        | j                  xs dg      dz   }t        j                  t	        j
                               j                  }t	        j                  ||       | j                  |t	        j                                y r  )
maxr  rg   ra   r   r4   rh   r`   r_  r0   )r$   r-  r<   s      r   rn   z!PosixGroupsTester.test_initgroups  s_    
 !!(aS)A-||ELLN+33q!a*+rI   r  ztest needs posix.setgroups()c                     dgt        t        d            fD ];  }t        j                  |       | j	                  |t        j
                                = y )Nr      )r   r  r   r  assertListEqualr0   )r$   r:  s     r   test_setgroupsz PosixGroupsTester.test_setgroups  sE     sDrO, 	<FOOF#  ):;	<rI   N)r  r  r  r%   r  rj   r  r   r   rn   r  r   rI   r   r  r    sf    .9 X58:,:, X479<9<rI   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 ej$                   eed      d      d        Zd Zd Z ej$                   eed      d      d        Zd Ze ej6                  ej8                  j;                  d      d      d               Ze ej6                  ej8                  j;                  d      d      d               Zd Z d Z!d Z"d Z#d Z$y) _PosixSpawnMixin-I-Sr   r   Nc                 .    t         j                  ddg|S )Nr  r  )r   r   r$   argss     r   python_argsz_PosixSpawnMixin.python_args  s     d2T22rI   c                    t         j                  }| j                  t         j                  |       d|d}| j	                  d|      }| j                  |d   |t        j                        }t        j                  |d       t        |d      5 }| j                  |j                         t        |             d d d        y # 1 sw Y   y xY w)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_funcrf   r   r   r   r   rC   r   r}  )r$   pidfilescriptr  r   r  s         r   test_returns_pidz!_PosixSpawnMixin.test_returns_pid  s    ""	(('2k "
 f-ood1gtRZZ8S1-'G, 	1QVVXs3x0	1 	1 	1s   *CCc                 8   d}	 | j                  ||gt        j                        }t        j                  |d      \  }}| j	                  ||       | j                  |d       y # t        t        f$ r&}| j	                  |j                  |       Y d }~y d }~ww xY w)Nno_such_executabler   )	r  rf   r   waitpidrC   assertNotEqualFileNotFoundErrorrT  filename)r$   r
  r   pid2statusexcs         r   test_no_such_executablez(_PosixSpawnMixin.test_no_such_executable  s    1	+//"4#5"6"$**.C ::c1-LD&T3'* "?3 	?S\\+=>>	?s   "A$ $B3BBc                    t         j                  }| j                  t         j                  |       d|d}| j	                  d|      }| j                  |d   |i t        j                  ddi      }t        j                  |d       t        |d	      5 }| j                  |j                         d       d d d        y # 1 sw Y   y xY w)
Nr  z^, "w", encoding="utf-8") as envfile:
                envfile.write(os.environ['foo'])
        r   r   rc   barr   r  r  )r   r   r   r   r  r  rf   r   r   r   r   rC   r   )r$   envfiler  r  r   r  s         r   test_specify_environmentz)_PosixSpawnMixin.test_specify_environment  s    ""	(('2k "	
 f-ood1gt::UE:<S1-'G, 	.QVVXu-	. 	. 	.s   !CC
c                     | j                  | j                  d   | j                  t        j                  d       }t	        j
                  |d       y Nr   file_actionsr   r  NOOP_PROGRAMrf   r   r   r   r$   r   s     r   test_none_file_actionsz'_PosixSpawnMixin.test_none_file_actions  sH    ooa JJ	  
 	S1-rI   c                     | j                  | j                  d   | j                  t        j                  g       }t	        j
                  |d       y r  r  r  s     r   test_empty_file_actionsz(_PosixSpawnMixin.test_empty_file_actions  sH    ooa JJ	  
 	S1-rI   c                     | j                  t        j                  t        j                  ddgt        j                  d      }t        j                  |d       y )Nr   r   Fresetidsr   r   r  r   r   rf   r   r   r   r  s     r   test_resetids_explicit_defaultz/_PosixSpawnMixin.test_resetids_explicit_default  sF    ooNN^^T6*JJ	  
 	S1-rI   c                     | j                  t        j                  t        j                  ddgt        j                  d      }t        j                  |d       y )Nr   r   Tr"  r   r   r$  r  s     r   test_resetidsz_PosixSpawnMixin.test_resetids  sF    ooNN^^T6*JJ	  
 	S1-rI   c                     | j                  t        j                  t        j                  ddgt        j                  t        j
                               }t        j                  |d       y )Nr   r   	setpgroupr   r   )r  r   r   rf   r   r2   r   r   r  s     r   test_setpgroupz_PosixSpawnMixin.test_setpgroup  sL    ooNN^^T6*JJjjl	  
 	S1-rI   c                     | j                  t              5  | j                  t        j                  t        j                  ddgt
        j                  d       d d d        y # 1 sw Y   y xY w)Nr   r   023r)  )r9   r:   r  r   r   rf   r   r#   s    r   test_setpgroup_wrong_typez*_PosixSpawnMixin.test_setpgroup_wrong_type  sS    y) 	9OOCNN ^^T6:JJ%  9	9 	9 	9s   AA""A+pthread_sigmaskzneed signal.pthread_sigmask()c                     t        j                  d      }| j                  t        j                  t        j                  d|gt
        j                  t        j                  g      }t        j                  |d       y )NI            import signal
            signal.raise_signal(signal.SIGUSR1)r   
setsigmaskr   r   )textwrapdedentr  r   r   rf   r   r  SIGUSR1r   r   )r$   r   r   s      r   test_setsigmaskz _PosixSpawnMixin.test_setsigmask  sd       3 4 ooNN^^T4(JJ'	  
 	S1-rI   c           	         | j                  t              5  | j                  t        j                  t        j                  ddgt
        j                  d       d d d        | j                  t              5  | j                  t        j                  t        j                  ddgt
        j                  dg       d d d        | j                  t              5  | j                  t        j                  t        j                  ddgt
        j                  t        j                  t        j                  dz   g       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   "   r2  jr6   
r9   r:   r  r   r   rf   r   r  r  NSIGr#   s    r   test_setsigmask_wrong_typez+_PosixSpawnMixin.test_setsigmask_wrong_type!  s   y) 	7OOCNN ^^T6:JJ2  7	7 y) 	:OOCNN ^^T6:JJC5  :	: z* 	DOOCNN ^^T6:JJFKK4:KKM4C  D	D 	D	7 	7	: 	:	D 	D&   AE6AEA$EEEE%c                 6   t        j                         \  }}| j                  t         j                  |       	 t        j                  |d       t        j                  d| d      }	 | j                  t        j                  t        j                  d|gt         j                  d      }t        j                  |       t        j                  d	       t        j                   |d
      }t#        |      }t        j$                  t        j&                               }| j)                  ||       y # t        $ r}| j                  d|       Y d }~d }~wt        $ r}| j                  d|       Y d }~d }~ww xY w# t        j                  |       w xY w)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   )rf   r  r   rx   set_inheritabler4  r5  r  r   r   r   r   r   rT  r   r   r   r  getsidr1   r  )	r$   rfdwfdr   r   r  output	child_sid
parent_sids	            r   test_setsidz_PosixSpawnMixin.test_setsid0  sA   779S#&	sD)?? (U $ D>oocnn'*~~tT&B&(jj & ? HHSMS1-c"K	YYryy{+
J	2 ' C 9#ABB" > 4SG<==> HHSMsB   /F )AD2 2	E>;EF E> E94F 9E>>F Fc                    t        j                   t         j                  t         j                        }t        j                  d      }	 | j                  t        j                  t        j                  d|gt        j                  t         j                  g      }t        j                   t         j                  |       t        j                  |t         j                          y # t        j                   t         j                  |       w xY w)Nr1  r   	setsigdefr   )r  r6  SIG_IGNr4  r5  r  r   r   rf   r   r   r   )r$   original_handlerr   r   s       r   test_setsigdefz_PosixSpawnMixin.test_setsigdefO  s     "==H  3 4	<//t,

!>>*	 " C MM&..*:;SFNN?; MM&..*:;s   	AC% %&Dc           	         | j                  t              5  | j                  t        j                  t        j                  ddgt
        j                  d       d d d        | j                  t              5  | j                  t        j                  t        j                  ddgt
        j                  dg       d d d        | j                  t              5  | j                  t        j                  t        j                  ddgt
        j                  t        j                  t        j                  dz   g       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   r9  rJ  r:  r6   r;  r#   s    r   test_setsigdef_wrong_typez*_PosixSpawnMixin.test_setsigdef_wrong_typeb  s   y) 	6OOCNN ^^T6:JJ"  6	6 y) 	9OOCNN ^^T6:JJ3%  9	9 z* 	POOCNN ^^T6:JJ6;;A2N  P	P 	P	6 	6	9 	9	P 	Pr>  rX  zbpo-34685: test can fail on BSDc           	      l   t        j                  d      }t        j                  |      }t        j                  d| d| d      }| j                  t        j                  t        j                  d|gt         j                  d t        j                  |      f      }t        j                  |d       y 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   rf   r   rQ  r4  r5  r  r   r   r   r_  r   r   r$   policypriorityr   r   s        r   test_setscheduler_only_paramz-_PosixSpawnMixin.test_setscheduler_only_paramp  s     &&q),,V4 $,,28 477?j A	 ! " ooNN^^T4(JJR^^H56	  
 	S1-rI   c           	      l   t        j                  d      }t        j                  |      }t        j                  d| d| d      }| j                  t        j                  t        j                  d|gt         j                  |t        j                  |      f      }t        j                  |d       y rR  rT  rU  s        r   test_setscheduler_with_policyz._PosixSpawnMixin.test_setscheduler_with_policy  s     &&q),,V4 $,,28 477?j A	 ! " ooNN^^T4(JJr~~h78	  
 	S1-rI   c                 v   t         j                  dt         j                  j                  t              t         j
                  dft         j                  dft         j                  ddfg}| j                  | j                  d   | j                  t         j                  |      }t        j                  |d       y )NrB   r   r6   r   r  r   )rf   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      !RWW%5%5h%?aP!!1%  !Q'

 ood//2"// jj+7  9 	S1-rI   c                    | j                   }| j                  t              5  | j                  |d   |t        j
                  d g       d d d        | j                  t              5  | j                  |d   |t        j
                  dg       d d d        | j                  t              5  | j                  |d   |t        j
                  dg       d d d        | j                  t              5  | j                  |d   |t        j
                  dg       d d d        | j                  t              5  | j                  |d   |t        j
                  t        j                  fg       d d d        | j                  t              5  | j                  |d   |t        j
                  t        j                  ddfg       d d d        | j                  t              5  | j                  |d   |t        j
                  t        j                  d fg       d d d        | j                  t              5  | j                  |d   |t        j
                  t        j                  dt        d	z   t        j                  dfg       d d d        y # 1 sw Y   FxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   WxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)
Nr   r  r   rq   )i90  r6   r   rB   r  )r  r9   r:   r  rf   r   r_  r  r\  r^  r   r  s     r   test_bad_file_actionsz&_PosixSpawnMixin.test_bad_file_actions  s     y) 	1OODGT2::*.  1	1 y) 	/OODGT2::*,  /	/ y) 	4OODGT2::*1  4	4 y) 	5OODGT2::*2  5	5 y) 	DOODGT2::+-+?+?*A)B  D	D y) 	IOODGT2::+-+?+?A*F)G  I	I y) 	IOODGT2::+-+?+?*F)G  I	I z* 	=OODGT2::+-+>+>+,ho+-;;+; *<  =	= 	=+	1 	1	/ 	/	4 	4	5 	5	D 	D	I 	I	I 	I	= 	=s`   (J'(J,(J(1(J567K
9K 8K5AK(JJ%(J25J?KKK%(K1c                 T   t         j                  }| j                  t         j                  |       d}t        j
                  d|t        j                  t        j                  z  t        j                  z  t        j                  t        j                  z  fg}| j                  d|      }| j                  |d   |t        j                  |      }t        j                   |d       t#        |d      5 }| j%                  |j'                         d	       d d d        y # 1 sw Y   y xY w)
NOif 1:
            import sys
            sys.stdout.write("hello")
            r6   r   r   r  r   r  r  hello)r   r   r   r   rf   r\  r   r   O_TRUNCrF  rR  rS  r  r  r   r   r   r   rC   r   )r$   r  r  r  r  r   r  s          r   test_open_filez_PosixSpawnMixin.test_open_file  s    ""	(('2
   !Wbjj(2::5t||+-

 f-ood1gtRZZ+7  9 	S1-'G, 	0QVVXw/	0 	0 	0s   4!DD'c                    t         j                  }| j                  t         j                  |       d|d}| j	                  d|      }| j                  |d   |t        j                  t        j                  dfg      }t        j                  |d       t        |d      5 }| j                  |j                         d	t        j                  z         d d d        y # 1 sw Y   y xY w)
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  rf   r   r_  r   r   r   rC   r   r   r   )r$   	closefiler  r  r   r  s         r   test_close_filez _PosixSpawnMixin.test_close_file  s    $$		(()4
 %- ( f-ood1gtRZZ-/-A-A1,E+F  H 	S1-)g. 	E!QVVX~'CD	E 	E 	Es   $2CC(c                    t         j                  }| j                  t         j                  |       d}t	        |d      5 }t
        j                  |j                         dfg}| j                  d|      }| j                  |d   |t
        j                  |      }t        j                  |d       d d d        t	        |d	      5 }| j                  |j                         d
       d d d        y # 1 sw Y   @xY w# 1 sw Y   y xY w)Nre  r   r6   r   r   r  r   r  r  rf  )r   r   r   r   r   rf   r`  rw   r  r  r   r   r   rC   r   )r$   dupfiler  	childfiler  r  r   r  s           r   r2  z_PosixSpawnMixin.test_dup2  s    ""	(('2 '4  	2I$$i&6&6&8!<L ##D&1D//$q'4/; " =C  q1	2 'G, 	0QVVXw/	0 	0	2 	2	0 	0s   A2C0!C<0C9<D)%r  r  r  r   r   r  r  r  r  r  r  r  r   r%  r'  r+  r.  rj   r  r   r  r7  r=  rH  rN  rP  r  r  r   r   rX  rZ  ra  rc  rh  rk  r2  r   rI   r   r  r    sL   NND$f=LJ31+......9 X):;:<.<.D3> X):;8:<:<"P X__S\\,,-BC68.8 ." X__S\\,,-BC68.8 ."
.=:0(E&0rI   r  posix_spawnztest needs os.posix_spawnc                        e Zd Z eedd      Zy)TestPosixSpawnro  N)r  r  r  r7   r   r  r   rI   r   rq  rq    s    t4JrI   rq  posix_spawnpztest needs os.posix_spawnpc                   D    e Zd Z eedd      Zej                  d        Zy)TestPosixSpawnPrr  Nc                    t        j                         }| j                  t        j                  |       d}t
        j                  j                  ||      }t        j                  t        j                  |       	 t
        j                  j                  |t
        j                  d   f      }|ddddf}t        j                  d|d      }d|f}t!        |d|i y # t        $ r |}Y =w xY w)	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  rf   r   rQ  r  r   r   pathsepr   ri   r4  r5  r   )r$   temp_dirprogramprogram_fullpathr   
spawn_argsr   r  s           r   test_posix_spawnpz!TestPosixSpawnP.test_posix_spawnp  s     ##%	(((3177<<':


3>>#34	::??Hbjj.@#ABD tT48
    d|$*T*%  	D	s   <2C C,+C,)	r  r  r  r7   r   r  r   r  r~  r   rI   r   rt  rt     s(    5J""+ #+rI   rt  r0  ztest weak linking on macOSc                   x    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y)TestPosixWeaklinkingc                    dd l }dd l}|j                         }|D ch c]  }|j                  d      s||   s| c}| _        t        d  |j                         d   j                  d      D              | _        y c c}w )Nr   HAVE_c              3   2   K   | ]  }t        |        y wrq   r+  )r,  parts     r   r.  z-TestPosixWeaklinking.setUp.<locals>.<genexpr>2  s     T4SYTr/  r  )r5  r   get_config_varsr   	availabler7  mac_verr   )r$   r5  r   config_varsnms        r   r%   zTestPosixWeaklinking.setUp,  sp    //1(3c"r}}W7MR]^`Ra2cT3C83C3C3Ea3H3N3Ns3STT ds   A?A?A?c                 P    || j                   vrt        j                  | d      y )Nz not weak-linked)r  rj   rk   r  s     r   _verify_availablez&TestPosixWeaklinking._verify_available4  s,    t~~%##tf,<$=>> &rI   c                 F   | j                  d       | j                  dk\  rA| j                  t        t        d      d       | j                  t        t        d      d       y | j                  t        t        d      d       | j                  t        t        d      d       y )	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)r  r  rr   r   rf   r7  r#   s    r   r   z!TestPosixWeaklinking.test_pwritev8  sz    ~.<<8#OOGB	24QROOGB13NO WR35NOWR24KLrI   c                 J   | j                  d       | j                  dk\  r!| j                  dt        j                         y | j                  dt        j                         | j                  t        d      5  t        j                  dd       d d d        y # 1 sw Y   y xY w)NHAVE_FSTATATr   r   dir_fd unavailablefiler   r  )
r  r  r_  r   _have_functionsassertNotInrG  r   rf   rF  r#   s    r   rL  zTestPosixWeaklinking.test_statB  s}    ~.<<8#MM.%*?*?@ ^U-B-BC''(;=QR *q)* * *   8BB"c                    | j                  d       | j                  dk\  r!| j                  dt        j                         y | j                  dt        j                         | j                  t        d      5  t        j                  dt        j                  d       d d d        | j                  t        d      5  t        j                  dt        j                  d	       d d d        | j                  t        d
      5  t        j                  dt        j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   [xY w# 1 sw Y   y xY w)NHAVE_FACCESSATr  r  r  r   r  zfollow_symlinks unavailableFr  zeffective_ids unavailableT)effective_ids)r  r  r_  r   r  r  rG  r   rf   r  r  r#   s    r   r  z TestPosixWeaklinking.test_accessM  s	   /0<<8#MM*E,A,AB -u/D/DE''(;=QR 5		&"''!45 ''(;=Z[ B		&"''5AB ''(;=XY ?		&"''>? ?5 5B B? ?s$   8'D2='D>'E
2D;>E
Ec                    | j                  d       | j                  dk\  r!| j                  dt        j                         y | j                  dt        j                         | j                  dt        j                         | j                  t        d      5  t        j                  ddd       d d d        y # 1 sw Y   y xY w)	NHAVE_FCHMODATr  HAVE_LCHMODr  r  i  r   r  )
r  r  r_  r   r  r  rG  r   rf   r  r#   s    r   
test_chmodzTestPosixWeaklinking.test_chmod^  s    /<<8#MM/5+@+@A _e.C.CDMM-)>)>?''(;=QR 2q12 2 2s   B::Cc                    | j                  d       | j                  dk\  r!| j                  dt        j                         y | j                  dt        j                         | j                  dt        j                         | j                  t        d      5  t        j                  dddd       d d d        y # 1 sw Y   y xY w)NHAVE_FCHOWNATr  HAVE_LCHOWNr  r  r   r  )
r  r  r_  r   r  r  rG  r   rf   r  r#   s    r   r  zTestPosixWeaklinking.test_chownj  s    /<<8#MM/5+@+@A _e.C.CDMM-)>)>?''(;=QR 1Aa01 1 1s   B;;Cc                 
   | j                  d       | j                  dk\  r!| j                  dt        j                         y | j                  dt        j                         | j                  t        d      5  t        j                  ddd       d d d        | j                  t        d      5  t        j                  ddd	       d d d        | j                  t        d      5  t        j                  dddd
       d d d        t        j                         5 }t        j                  j                  |d      }t        j                  j                  |d      }t        j                  j                  |d      }t        |d      5 }|j                  d       d d d        t        j                   d|       | j#                  t$              5  t        j                  ||d       d d d        | j#                  t$              5  t        j                  ||d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   uxY w# 1 sw Y   JxY w# 1 sw Y   xY w# 1 sw Y   {xY w# 1 sw Y   QxY w# 1 sw Y   y xY w)NHAVE_LINKATr  zsrc_dir_fd unavailablesourcer  r   r  zdst_dir_fd unavailabler  r  r  r   dataTr  F)r  r  r_  r   r  r  rG  r   rf   r  r   rz  r   rQ  r   r   r  r9   FileExistsError)r$   r   	link_pathtarget_pathsource_pathrz   s         r   	test_linkzTestPosixWeaklinking.test_linkv  s   }-<<8#MM-)>)>? ]E,A,AB''(;=UV ;(:; ''(;=UV ;(:; ''(;=UV I(aHI ##% KGGLLF;	 ggll9h? ggll9h?+s+ %rHHV$% 

8Y/ &&7 JGGKDIJ &&7 KGGKEJK#K K; ;; ;I I% %J JK K#K Ksy   8H./H;&IA-I9	I3I9I!'I9I-I9.H8;III	I9!I*	&I9-I6	2I99Jc                    | j                  d       | j                  dk\  r!| j                  dt        j                         y | j                  dt        j                         | j                  t        d      5  t        j                  d       d d d        | j                  t        d      5  t        j                  d       d d d        y # 1 sw Y   >xY w# 1 sw Y   y xY w)NHAVE_FDOPENDIRr  zClistdir: path should be string, bytes, os.PathLike or None, not intr   zCscandir: path should be string, bytes, os.PathLike or None, not int)r  r  r_  r   r  r  rG  r:   rf   r  scandirr#   s    r   test_listdir_scandirz)TestPosixWeaklinking.test_listdir_scandir  s    /0<<8#MM*E,A,AB -u/D/DE''	3xy 

1 ''	3xy 

1   s   8C,CCC c                 J   | j                  d       | j                  dk\  r!| j                  dt        j                         y | j                  dt        j                         | j                  t        d      5  t        j                  dd       d d d        y # 1 sw Y   y xY w)NHAVE_MKDIRATr  r  dirr   r  )
r  r  r_  r   r  r  rG  r   rf   r  r#   s    r   
test_mkdirzTestPosixWeaklinking.test_mkdir  s}    ~.<<8#MM.%*?*?@ ^U-B-BC''(;=QR *q)* * *r  c                 J   | j                  d       | j                  dk\  r!| j                  dt        j                         y | j                  dt        j                         | j                  t        d      5  t        j                  dd       d d d        y # 1 sw Y   y xY w)NHAVE_MKFIFOATrd   r   r  r   r   r  )
r  r  r_  r   r  r  rG  r   rf   rM  r#   s    r   rX  z TestPosixWeaklinking.test_mkfifo  s}    /<<7"MM/5+@+@A _e.C.CD''(;=QR ,		&+, , ,r  c                 J   | j                  d       | j                  dk\  r!| j                  dt        j                         y | j                  dt        j                         | j                  t        d      5  t        j                  dd       d d d        y # 1 sw Y   y xY w)NHAVE_MKNODATr  r  r   r   r  )
r  r  r_  r   r  r  rG  r   rf   rY  r#   s    r   ra  zTestPosixWeaklinking.test_mknod  s}    ~.<<7"MM.%*?*?@ ^U-B-BC''(;=QR +*+ + +r  c                    | j                  d       | j                  dk\  r!| j                  dt        j                         y | j                  dt        j                         | j                  t        d      5  t        j                  ddd       d d d        | j                  t        d      5  t        j                  ddd       d d d        | j                  t        d      5  t        j                  ddd       d d d        | j                  t        d      5  t        j                  ddd       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   YxY w# 1 sw Y   y xY w)	NHAVE_RENAMEATr  z%src_dir_fd and dst_dir_fd unavailableabr   r  r  )r  r  r_  r   r  r  rG  r   rf   r  r  r#   s    r   test_rename_replacez(TestPosixWeaklinking.test_rename_replace  s/   /<<8#MM/5+@+@A _e.C.CD''(;=de 2		#sq12 ''(;=de 2		#sq12 ''(;=de 3

323 ''(;=de 3

323 32 22 23 33 3s0   8D?/E&EE#?EEE #E,c                    | j                  d       | j                  dk\  r!| j                  dt        j                         y | j                  dt        j                         | j                  t        d      5  t        j                  dd       d d d        | j                  t        d      5  t        j                  dd       d d d        y # 1 sw Y   @xY w# 1 sw Y   y xY w)NHAVE_UNLINKATr  r  r   r   r  )r  r  r_  r   r  r  rG  r   rf   r   r  r#   s    r   test_unlink_rmdirz&TestPosixWeaklinking.test_unlink_rmdir  s    /<<8#MM/5+@+@A _e.C.CD''(;=QR ,		&+, ''(;=QR +*+ +, ,+ +s   8C.CCC$c                 h   | j                  d       | j                  dk\  r!| j                  dt        j                         y | j                  dt        j                         | j                  t        d      5  t        j                  dt        j                  d       d d d        y # 1 sw Y   y xY w)NHAVE_OPENATr  r  r   r   r  )r  r  r_  r   r  r  rG  r   rf   r   r   r#   s    r   	test_openzTestPosixWeaklinking.test_open  s    }-<<8#MM-)>)>? ]E,A,AB''(;=QR 7A67 7 7s   8'B((B1c                 J   | j                  d       | j                  dk\  r!| j                  dt        j                         y | j                  dt        j                         | j                  t        d      5  t        j                  dd       d d d        y # 1 sw Y   y xY w)NHAVE_READLINKATr  r  r   r   r  )
r  r  r_  r   r  r  rG  r   rf   r  r#   s    r   test_readlinkz"TestPosixWeaklinking.test_readlink  s    01<<8#MM+U-B-BC .0E0EF''(;=QR /FA./ / /r  c                 L   | j                  d       | j                  dk\  r!| j                  dt        j                         y | j                  dt        j                         | j                  t        d      5  t        j                  ddd       d d d        y # 1 sw Y   y xY w)NHAVE_SYMLINKATr  r  r  r  r   r  )
r  r  r_  r   r  r  rG  r   rf   r  r#   s    r   test_symlinkz!TestPosixWeaklinking.test_symlink	  s    /0<<8#MM*E,A,AB -u/D/DE''(;=QR 0

3Q/0 0 0s   8BB#c                    | j                  d       | j                  d       | j                  dk\  rA| j                  dt        j                         | j                  dt        j                         y | j                  dt        j                         | j                  dt        j                         | j                  t        d      5  t        j                  dd       d d d        y # 1 sw Y   y xY w)NHAVE_FUTIMENSHAVE_UTIMENSAT)r   rd   r  r   r   r  )
r  r  r_  r   r  r  rG  r   rf   r  r#   s    r   r  zTestPosixWeaklinking.test_utime	  s    //0<<8#MM/5+@+@AMM*E,A,AB _e.C.CD-u/D/DE''(;=QR +*+ + +s   	C**C3N)r  r  r  r%   r  r   rL  r  r  r  r  r  r  rX  ra  r  r  r  r  r  r  r   rI   r   r  r  %  s`    U?M	*?"
2
1$KN	*	,	+3(+	7	/	0+rI   r  c                      e Zd ZdZ ej
                   eed      d       ej
                   eed      d       ej
                  ej                  j                  d      d       e
j                  dd	d	      d
                             Zy)NamespacesTestsz&Tests for os.unshare() and os.setns().unsharezneeds os.unshare()setnszneeds os.setns()z/proc/self/ns/utszneed /proc/self/ns/utsrB   r   c                      d}t        d|       y )Na  if 1:
            import errno
            import os
            import sys
            fd = os.open('/proc/self/ns/uts', os.O_RDONLY)
            try:
                original = os.readlink('/proc/self/ns/uts')
                try:
                    os.unshare(os.CLONE_NEWUTS)
                except OSError as e:
                    if e.errno == errno.ENOSPC:
                        # skip test if limit is exceeded
                        sys.exit()
                    raise
                new = os.readlink('/proc/self/ns/uts')
                if original == new:
                    raise Exception('os.unshare failed')
                os.setns(fd, os.CLONE_NEWUTS)
                restored = os.readlink('/proc/self/ns/uts')
                if original != restored:
                    raise Exception('os.setns failed')
            except PermissionError:
                # The calling process did not have the required privileges
                # for this operation
                pass
            except OSError as e:
                # Skip the test on these errors:
                # - ENOSYS: syscall not available
                # - EINVAL: kernel was not configured with the CONFIG_UTS_NS option
                # - ENOMEM: not enough memory
                if e.errno not in (errno.ENOSYS, errno.EINVAL, errno.ENOMEM):
                    raise
            finally:
                os.close(fd)
            r   r   r   s     r   test_unshare_setnsz"NamespacesTests.test_unshare_setns!	  s    
"H 	t$rI   N)r  r  r  __doc__rj   r  r   rf   r   r  r   r  r  r   rI   r   r  r  	  s    0XY/1EFXW-/ABX(;<>VW#W##Aq!,%% - X C G%%rI   r  c                  ,    t        j                          y rq   )r   reap_childrenr   rI   r   tearDownModuler  M	  s    rI   __main__)3r  r   r   test.supportr   r   r   test.support.script_helperr   r   r   r  r  rf   r   rF  rw  rj   r    r4  
contextlibr	   r   ImportErrorr  rg   r   rQ  
gettempdirr   r  r  maxsizer{  r  r  r   r  TestCaser   r  r  r  r   rq  rt  r  r  r  r  mainr   rI   r   <module>r     s7     & " ( 7  
   	       % 1h113'..1AAC #x""KK%J!6!6!I'//J. %$$_%68VW@0(## @0H,EIX&& EIP!<)) !<HR0 R0j
 WR/1LM5X&&(8 5 N5 WR02NO!+h'')9 !+ P!+H S\\X-/KLu+8,, u+ Mu+p,%h'' ,%^ zHMMO sI  
  
Cs$   H H 	HHHH