
    0hh                       S SK Jr  S SKJr  S SKJr  S SKJr  S SKJr  S SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJr   S SKr S SKr\R6                  R9                  \R:                  " 5       \R<                  S-   5      r\R@                  " \
RB                  S	:  =(       a$    \RD                  =(       d    \RF                  (       + S
5      r$S r%\R@                  " \%" 5       S5      r& " S S\RN                  5      r( " S S\RN                  5      r) " S S\RN                  5      r* " S S5      r+\R@                  " \," \S5      S5      \RZ                  " 5        " S S\RN                  \+5      5       5       r.\R@                  " \," \S5      S5      \RZ                  " 5        " S S\RN                  \+5      5       5       r/\R@                  " \
R                  S:H  S5       " S S \RN                  5      5       r0 " S! S"\RN                  5      r1S# r2\3S$:X  a  \Rh                  " 5         gg! \ a    S SKr GNf = f! \ a    Sr GNf = f)%    )support)is_apple)	os_helper)warnings_helperassert_python_okN)contextmanagerz-dummy-symlink        z(test is only meaningful on 32-bit buildsc                      [        [        S5      (       d  g [        R                  " S5        g! [         a-  n U R                  [        R
                  :X  a   S n A g S n A gS n A ff = f)Nsched_getschedulerFr   T)hasattrposixr   OSErrorerrnoENOSYS)es    8/opt/python-3.13.8/usr/lib/python3.13/test/test_posix.py_supports_schedr   +   sX    5.//  #   77ell" #s   / 
A&A!!A&zrequires POSIX scheduler APIc                   J   \ rS rSrS rS r\R                  " \" \	S5      S5      S 5       r
\R                  " \" \	S5      S5      S	 5       r\R                  " \" \	S
5      S5      S 5       r\R                  " \" \	S
5      S5      S 5       r\R                  " \" \	S5      S5      S 5       r\R                  " \" \	S5      S5      S 5       r\R                  " \" \	S5      S5      \R                  " \" \S5      S5      S 5       5       r\R                  " \" \	S5      S5      S 5       r\R                  " \" \	S5      S5      S 5       r\R                  " \" \	S5      S5      S 5       r\R                  " \" \	S 5      S!5      S" 5       r\R                  " \" \S#S$5      \R0                  ;   S%5      \R4                  " 5       S& 5       5       r\R                  " \" \	S'5      S(5      \R4                  " 5       S) 5       5       r\R4                  " 5       S* 5       r\R                  " \" \	S+5      S,5      S- 5       r\R                  " \" \	S.5      S/5      S0 5       r\R                  " \" \	S15      S25      S3 5       r \R                  " \" \	S15      S25      \R                  " \" \	S45      S55      S6 5       5       r!\R                  " \" \	S15      S25      \"S7 5       5       r#\R                  " \" \	S85      S95      S: 5       r$\R                  " \" \	S;5      S<5      S= 5       r%\R                  " \" \	S;5      S<5      \R                  " \" \	S>5      S?5      S@ 5       5       r&\R                  " \" \	S;5      S<5      \"SA 5       5       r'\R                  " \" \	SB5      SC5      SD 5       r(\R                  " \" \	SB5      SC5      SE 5       r)\R                  " \" \	SF5      SG5      SH 5       r*\R                  " \" \	SF5      SG5      SI 5       r+\R                  " \RX                  \R0                  ;   SJ5      SK 5       r-\R                  " \RX                  \R\                  ;   SL5      SM 5       r/\R                  " \" \	SN5      SO5      SP 5       r0\R                  " \" \	SN5      SO5      \"SQ 5       5       r1\R                  " \" \	SR5      SS5      ST 5       r2\R                  " \" \	SR5      SS5      \"SU 5       5       r3\R                  " \" \	SV5      SW5      \Rh                  " \Rj                  SX5      SY 5       5       r6\R                  " \" \	SZ5      S[5      S\ 5       r7\R                  " \" \	S]5      S^5      S_ 5       r8\R                  " \" \	S`5      Sa5      \Rh                  " \Rj                  Sb5      Sc 5       5       r9\R                  " \" \Sd5      Se5      \Rt                  " SfSgSh5      \Rv                  " 5       Si 5       5       5       r<\R                  " \" \	Sj5      Sk5      Sl 5       r=\R                  " \" \	Sm5      Sn5      So 5       r>\R                  " \" \	Sp5      Sq5      Sr 5       r?Ss r@\R                  " \" \	St5      Su5      Sv 5       rA\R                  " \" \	Sw5      =(       a	    \" \BSx5      Sy5      Sz 5       rC\R                  " \" \	S{5      S|5      S} 5       rDS~ rE\R                  " \" \S5      S5      \Rh                  " \R                  S5      S 5       5       rG\HR                  \R                  " \" \	S5      S5      \Rh                  " \R                  S5      S 5       5       5       rJ\HR                  \R                  " \" \	S5      S5      S 5       5       rK\R                  " \" \	S5      S5      S 5       rLS rMS rNS rOS rP\R                  " \	R                  \R0                  ;   S5      S 5       rR\R                  " \" \	S5      S5      S 5       rS\R                  " \" \	S5      S5      S 5       rT\R                  " \" \	S5      S5      S 5       rU\R                  " \" \	S5      S5      S 5       rV\R                  " \" \S5      S5      \Rt                  " SfSgS5      S 5       5       rW\R                  \R                  " \" \S5      S5      \Rt                  " SfSgS5      S 5       5       5       rY\R                  " \" \	S5      S5      S 5       rZS r[\HR                  S 5       r\S r]\HR                  S 5       r^\HR                  S 5       r_\R                  " \" \	S5      S5      S 5       r`\R                  " \" \	S5      S5      S 5       raS rbS rc\HR                  S 5       re\HR                  S 5       rf\R                  " \" \	S5      S5      \HR                  S 5       5       rg\R                  " \" \	S5      S5      \HR                  S 5       5       rhS ri\R                  " \" \	S5      S5      S 5       rj\R                  " \" \	S5      S5      S 5       rk\R                  " \" \	S5      S5      S 5       rlS rmS rn\R                  " \" \	S5      S5      S 5       ro\R                  " \" \	S5      S5      \R                  " \" \S5      S5      \R                  " \" \S5      S5      S 5       5       5       rp\R                  " \" \S5      S5      \R                  " \" \S5      S5      \Rv                  " 5       S 5       5       5       rq\R                  " \" \rS5      S5      \R                  " \" \S5      S5      S 5       5       rs\R                  " \" \	S5      S5      rt\R                  " \" \	S5      S5      ru\tS 5       rv\t\R                  " \" \	S5      S5      S 5       5       rw\xS 5       ry\xS 5       rz\R                  " \" \	S5      S5      S 5       r{\uS 5       r|\uS 5       r}\Rh                  " \Rj                  S5      \R                  " \R                  S:H  S5      S 5       5       r\R                  " \" \S5      S5      S 5       rS rS rS r\R                  " \" \S5      S5      S 5       rSrg$)PosixTester8   c                 J   U R                  [        R                  [        R                  5        [	        [        R                  S5          S S S 5        U R                  [        R                  " 5       5        [        R                  " SS[        5        g ! , (       d  f       NO= f)Nwbignorez.* potential security risk .*)
addCleanupr   unlinkTESTFNopenenterContextr   check_warningswarningsfilterwarningsRuntimeWarningselfs    r   setUpPosixTester.setUp:   sj    	(()*:*:;)""D) */88:;*I .	0 *)s   	B
B"c                     / SQnU HQ  n[        [        US 5      nUc  M  U R                  U5         U" 5         U R                  [        US5        S S S 5        MS     g ! , (       d  f       Me  = f)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   testNoArgFunctionsPosixTester.testNoArgFunctionsC   s^     %D d3J%\\$'L%%iQ? (' % ('s   A
A,		getresuidztest needs posix.getresuid()c                     [         R                  " 5       nU R                  [        U5      S5        U H  nU R	                  US5        M     g N   r   )r   rB   assertEquallenassertGreaterEqual)r%   user_idsvals      r   test_getresuidPosixTester.test_getresuidS   s>     ??$X*C##C+     	getresgidztest needs posix.getresgid()c                     [         R                  " 5       nU R                  [        U5      S5        U H  nU R	                  US5        M     g rD   )r   rN   rF   rG   rH   )r%   	group_idsrJ   s      r   test_getresgidPosixTester.test_getresgid[   s>     OO%	Y+C##C+ rM   	setresuidztest needs posix.setresuid()c                     [         R                  " 5       nU R                  [         R                  " U6 5        U R                  [         R                  " SSS5      5        g N)r   rB   assertIsNonerS   )r%   current_user_idss     r   test_setresuidPosixTester.test_setresuidc   sD     !??,%//+;<=%//"b"56rM   c                     [         R                  " 5       nSU;  a2  US   S-   SS4nU R                  " [        [         R                  /UQ76   g g Nr   r8   rV   )r   rB   r;   r   rS   )r%   rX   new_user_idss      r   test_setresuid_exception$PosixTester.test_setresuid_exceptionk   sN     !??,$$,Q/12r:LguFF %rM   	setresgidztest needs posix.setresgid()c                     [         R                  " 5       nU R                  [         R                  " U6 5        U R                  [         R                  " SSS5      5        g rU   )r   rN   rW   r`   )r%   current_group_idss     r   test_setresgidPosixTester.test_setresgidt   sD     "OO-%//+<=>%//"b"56rM   c                     [         R                  " 5       nSU;  a2  US   S-   SS4nU R                  " [        [         R                  /UQ76   g g r\   )r   rN   r;   r   r`   )r%   rb   new_group_idss      r   test_setresgid_exception$PosixTester.test_setresgid_exception|   sN     "OO-%%.q1!3R<MguGG &rM   
initgroupsztest needs os.initgroups()getpwuidztest needs pwd.getpwuid()c                    U R                  [        [        R                  5        U R                  [        [        R                  S 5        U R                  [        [        R                  SS5        U R                  [        [        R                  SS[	        5       5        [
        R                  " 5       S:w  a^   [        R                  " [        R                  " 5       5      R                  n [        R                  " US5        U R                  S5        g g ! [         a    [        R                  " S5      ef = f! [         a4  nU R                  UR                   [         R"                  5         S nAg S nAff = f)NrE   foor   zneed a pwd entry   z+Expected OSError to be raised by initgroups)r;   r<   r   ri   objectosr6   pwdrj   pw_nameKeyErrorunittestSkipTestfailr   rF   r   EPERM)r%   r>   r   s      r   test_initgroups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$   93D -D; !D8;
E9*E44E9statvfsztest needs posix.statvfs()c                 j    U R                  [        R                  " [        R                  5      5        g N)
assertTruer   ry   ro   curdirr$   s    r   test_statvfsPosixTester.test_statvfs   s     	bii01rM   fstatvfsztest needs posix.fstatvfs()c                 N   [        [        R                  5      n U R                  [        R
                  " UR                  5       5      5        U R                  [        R                  " UR                  5       5      5        UR                  5         g ! UR                  5         f = fr{   )	r   r   r   r|   r   r   filenory   closer%   fps     r   test_fstatvfsPosixTester.test_fstatvfs   sb     )""#	OOENN299;78OOEMM"))+67HHJBHHJs   A&B B$	ftruncateztest needs posix.ftruncate()c                    [        [        R                  S5      n UR                  S5        UR	                  5         [
        R                  " UR                  5       S5        UR                  5         g ! UR                  5         f = f)Nw+testr   )	r   r   r   writeflushr   r   r   r   r   s     r   test_ftruncatePosixTester.test_ftruncate   sW     )""D)	HHVHHJOOBIIK+HHJBHHJs   AA3 3Btruncateztest needs posix.truncate()c                     [        [        R                  S5       nUR                  S5        UR	                  5         S S S 5        [
        R                  " [        R                  S5        g ! , (       d  f       N4= f)Nwr   r   )r   r   r   r   r   r   r   r   s     r   test_truncatePosixTester.test_truncate   sM    )""C(BHHVHHJ ) 	y''+ )(s   "A++
A9execveNz/test needs execve() to support the fd parameterc                 &   [         R                  " [        R                  [         R                  5      n [         R
                  " 5       nUS:X  a|  [         R                  " [         R                  R                  [        R                  5      S   5        [        R                  " U[        R                  SS/[         R                  5        O[        R                  " USS9  [         R                  " U5        g ! [         R                  " U5        f = f)Nr   -cpassexitcode)ro   r   sys
executableO_RDONLYforkchdirpathsplitr   r   environr   wait_processr   )r%   r   pids      r   test_fexecvePosixTester.test_fexecve   s     WWS^^R[[1	'')Caxs~~6q9:R#..$!?L$$S15HHRLBHHRLs   B,C8 8Dwaitidztest needs posix.waitid()c                    [         R                  " 5       nUS:X  a  [         R                  " [         R                  R	                  [
        R                  5      S   5        [        R                  " [
        R                  [
        R                  SS/[         R                  5        g [        R                  " [        R                  U[        R                  5      nU R                  XR                  5        g )Nr   r   r   )ro   r   r   r   r   r   r   r   r   r   r   P_PIDWEXITEDrF   si_pid)r%   r   ress      r   test_waitidPosixTester.test_waitid   s     ggi!8HHRWW]]3>>2156LL#..$)GT,,u{{C?CS**-rM   c                 h   U R                  [        SS9   [        R                  " S 5        S S S 5        U R                  [        SS9   [        R                  " SS9  S S S 5        U R                  [        SS9   [        R                  " SS9  S S S 5        U R                  [        SS9   [        R                  " S	S
9  S S S 5        U R                  [        SS9   [        R                  " S S9  S S S 5        U R                  [        SS9   [        R                  " S S9  S S S 5        U R                  [        SS9   [        R                  " S S
9  S S S 5        U R                  [        SS9   [        R                  " S S S9  S S S 5        U R                  [        SS9   [        R                  " 5         S S S 5        U R                  [        SS9   [        R                  " S SS9  S S S 5        Sn[	        SU5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN`= f! , (       d  f       GNA= f! , (       d  f       GN"= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f)NzPositional args not allowed)msgc                      g r{    r   rM   r   <lambda>3PosixTester.test_register_at_fork.<locals>.<lambda>   s    rM   zArgs must be callable   )beforethree)after_in_childs   Five)after_in_parentzArgs must not be NonezInvalid arg was allowedc                      g)NrE   r   r   rM   r   r   r      s    QrM   )r   r   z!At least one argument is requiredc                      g r{   r   r   rM   r   r   r      s    trM    )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   )r;   r<   ro   register_at_forkr   r%   codes     r   test_register_at_fork!PosixTester.test_register_at_fork   s   y.KL- My.EFq) Gy.EFw7 Gy.EF8 Gy.EFt, Gy.EFt4 Gy.EF5 Gy.GHtYG I y.QR! S y.GH|BG I
"F 	t$y MLFFFFFFFFFFFFHH SR IHsw   H	H:H&+H8I
I>I./J "JJ#
H
H#&
H58
I

I
I+.
I= 
J
J #
J1lockfztest needs posix.lockf()c                    [         R                  " [        R                  [         R                  [         R
                  -  5      n [         R                  " US5        [         R                  " US[         R                  5        [        R                  " U[        R                  S5        [        R                  " U[        R                  S5        [         R                  " U5        g ! [         R                  " U5        f = f)N   testr      )ro   r   r   r   O_WRONLYO_CREATr   lseekSEEK_SETr   r   F_LOCKF_ULOCKr   r%   fds     r   
test_lockfPosixTester.test_lockf  s    WWY%%r{{RZZ'?@	HHR!HHRBKK(KKELL!,KKEMM1-HHRLBHHRLs   B	C& &C>preadztest needs posix.pread()c                    [         R                  " [        R                  [         R                  [         R
                  -  5      n [         R                  " US5        [         R                  " US[         R                  5        U R                  S[        R                  " USS5      5        U R                  S[        R                  " US5      5        [         R                  " U5        g ! [         R                  " U5        f = f)Nr   r   s   esr   r8   s   te)ro   r   r   r   O_RDWRr   r   r   r   rF   r   r   readr   r   s     r   
test_preadPosixTester.test_pread'  s    WWY%%ryy2::'=>	HHR!HHRBKK(UEKKAq$9:UEJJr1$56HHRLBHHRLs   BC) )Dpreadvztest needs posix.preadv()c                    [         R                  " [        R                  [         R                  [         R
                  -  5      n [         R                  " US5        S Vs/ s H  n[        U5      PM     nnU R                  [        R                  " XS5      S5        U R                  / SQ[        U5      5        [         R                  " U5        g s  snf ! [         R                  " U5        f = f)N   test1tt2t3t5t6t6t8   rE   r   rE   
   s   t1tt2s   t3ts   5t)ro   r   r   r   r   r   r   	bytearrayrF   r   r   listr   )r%   r   ibufs       r   test_preadvPosixTester.test_preadv3  s    WWY%%ryy2::'=>	HHR./)23A9Q<C3U\\"15r:6S	BHHRL	 4 HHRLs   C !C6AC C C0	RWF_HIPRIztest needs posix.RWF_HIPRIc                    [         R                  " [        R                  [         R                  [         R
                  -  5      n [         R                  " US5        S Vs/ s H  n[        U5      PM     nnU R                  [        R                  " XS[         R                  5      S5        U R                  / SQ[        U5      5        [         R*                  " U5        g s  snf ! [         a    U R                  S5         N9[         aJ  nUR                   [         R"                  [         R$                  1;   a  [&        R(                  " S5      ee S nAff = f! [         R*                  " U5        f = f)Nr   r   rE   r   r   zpreadv2 not availablez0RWF_HIPRI is not supported by the current system)ro   r   r   r   r   r   r   r   rF   r   r   r   r   NotImplementedErrorskipTestr   r   EINVALENOTSUPrs   rt   r   )r%   r   r   r   insts        r   test_preadv_flagsPosixTester.test_preadv_flags>  s     WWY%%ryy2::'=>	HHR./)23A9Q<C3U\\"1bllCRH6S	B HHRL 4 # 	3MM12 	 zzellEMM::''(Z[[	 HHRLsD   C' !C"6AC' "C' 'EE 	EAEEE E2c                 D   [         R                  " [        R                  [         R                  [         R
                  -  5      n [        S5      /S-  nU R                  [        5       n[         R                  " XS5        S S S 5        U R                  WR                  R                  [        R                  5        U R                  [        US   5      SS-  5        [         R                  " U5        g ! , (       d  f       Nz= f! [         R                  " U5        f = fN      r       )ro   r   r   r   r   r   r   r;   r   r   rF   	exceptionr   r   bytesr   r%   r   r   cms       r   test_preadv_overflow_32bits'PosixTester.test_preadv_overflow_32bitsT  s     WWY%%ryy2::'=>	U#$u,C""7+r		"1% ,R\\//>U3q6]E5L9HHRL ,+
 HHRLs%   $D *C6AD 6
D D Dpwriteztest needs posix.pwrite()c                    [         R                  " [        R                  [         R                  [         R
                  -  5      n [         R                  " US5        [         R                  " US[         R                  5        [        R                  " USS5        U R                  S[        R                  " US5      5        [         R                  " U5        g ! [         R                  " U5        f = f)Nr   r      xxr8   s   txxtr   )ro   r   r   r   r   r   r   r   r   r   r   rF   r   r   r   s     r   test_pwritePosixTester.test_pwritea  s    WWY%%ryy2::'=>	HHR!HHRBKK(LLUA&WejjQ&78HHRLBHHRLs   A<C C1pwritevztest needs posix.pwritev()c                 \   [         R                  " [        R                  [         R                  [         R
                  -  5      n [         R                  " US5        [         R                  " US[         R                  5        [         R                  " U/ SQS5      nU R                  US5        [         R                  " US[         R                  5        U R                  S[        R                  " US5      5        [         R                  " U5        g ! [         R                  " U5        f = f)Nr   r   s   test1s   tt2s   t3r   r   s   xxtest1tt2t3d   )ro   r   r   r   r   r   r   r   r   r   rF   r   r   r   r%   r   ns      r   test_pwritevPosixTester.test_pwritevl  s    WWY%%ryy2::'=>		HHRHHRBKK(

28!<AQ#HHRBKK(_ejjS.ABHHRLBHHRLs   B6D D+zos.RWF_SYNCztest needs os.RWF_SYNCc                 z   [         R                  " [        R                  [         R                  [         R
                  -  5      n [         R                  " US5        [         R                  " US[         R                  5        [         R                  " U/ SQS[         R                  5      nU R                  US5        [         R                  " US[         R                  5        U R                  S[        R                  " US5      5        [         R                  " U5        g ! [         R                  " U5        f = f)Nr   r   r   r   r   s
   xxtest1tt2r   )ro   r   r   r   r   r   r   r   r   r   RWF_SYNCrF   r   r   r   r   s      r   test_pwritev_flagsPosixTester.test_pwritev_flagsz  s     WWY%%ryy2::'=>		HHRHHRBKK(

28!R[[IAQ#HHRBKK(]EJJr3,?@HHRLBHHRLs   CD" "D:c                    [         R                  " [        R                  [         R                  [         R
                  -  5      n U R                  [        5       n[         R                  " USS-  /S-  S5        S S S 5        U R                  WR                  R                  [        R                  5        [         R                  " U5        g ! , (       d  f       NY= f! [         R                  " U5        f = f)N   xr   r   r   )ro   r   r   r   r   r   r;   r   r   rF   r   r   r   r   r%   r   r   s      r   test_pwritev_overflow_32bits(PosixTester.test_pwritev_overflow_32bits  s     WWY%%ryy2::'=>	""7+r

2u~5q9 ,R\\//>HHRL	 ,+ HHRLs$   C  C;<C 
CC C7posix_fallocatez"test needs posix.posix_fallocate()c                    [         R                  " [        R                  [         R                  [         R
                  -  5      n [        R                  " USS5         [         R"                  " U5        g ! [         a  nUR                  [        R                  :X  a:  [        R                  R                  S5      (       a  [        R                  " S5      eUR                  [        R                   :X  a:  [        R                  R                  S5      (       a  [        R                  " S5      ee S nAff = f! [         R"                  " U5        f = f)Nr   r   )sunosfreebsdopenbsdgnukfreebsdz test may fail on ZFS filesystemsnetbsdz test may fail on FFS filesystems)ro   r   r   r   r   r   r   r  r   r   r   r   platform
startswithrs   rt   
EOPNOTSUPPr   )r%   r   r   s      r   test_posix_fallocate PosixTester.test_posix_fallocate  s     WWY%%r{{RZZ'?@	!!"a, HHRL  	
 zzU\\)cll.E.E>/@ /@''(JKKu///CLL4K4KH4U4U''(JKK	 HHRLs%   A6 6
D6 B1D11D66D9 9Ec                      [         R                  " SSS5        g ! [         a)  nUR                  [        R                  :w  a  e  S nAg S nAff = f)Nr   r   )r   r  r   r   EBADFr%   r   s     r   test_posix_fallocate_errno&PosixTester.test_posix_fallocate_errno  sA    	!!#q"- 	zzU[[( )	s    
AA		Aposix_fadvisez test needs posix.posix_fadvise()c                    [         R                  " [        R                  [         R                  5      n [
        R                  " USS[
        R                  5        [         R                  " U5        g ! [         R                  " U5        f = fNr   )	ro   r   r   r   r   r   r  POSIX_FADV_WILLNEEDr   r   s     r   test_posix_fadvisePosixTester.test_posix_fadvise  sT     WWY%%r{{3	Aq%*C*CDHHRLBHHRLs   'A3 3Bc                      [         R                  " SSS[         R                  5        g ! [         a)  nUR                  [        R
                  :w  a  e  S nAg S nAff = f)Nr  r   )r   r  r"  r   r   r  r  s     r   test_posix_fadvise_errno$PosixTester.test_posix_fadvise_errno  sI    	Q5+D+DE 	zzU[[( )	s   '* 
AAAz!test needs fd support in os.utimec           
         [         R                   " 5       n[        R                  " [        R                  [        R
                  5      n [        R                  " U5        [        R                  " US 5        U R                  [        [        R                  US5        U R                  [        [        R                  X!S 45        U R                  [        [        R                  US U45        [        R                  " U[        U5      [        U5      45        [        R                  " X!U45        U R                  [        [        R                  X!U4X4S9  U R                  [        [        R                  X!S4SS9  U R                  [        [        R                  USUS4S9  [        R                  " U[        U5      [        U[        U5      -
  S-  5      45        [        R                  " U[        U5      [        U[        U5      -
  S-  5      4S9  [        R                  " U5        g ! [        R                  " U5        f = f)NNN)nsr       eA)timero   r   r   r   r   r   utimer;   r<   int
ValueErrorr   )r%   nowr   s      r   test_utime_with_fdPosixTester.test_utime_with_fd  s   iikWWY%%r{{3	KKOKKD!ib,Gib+Fib4+FKKSXs3x01KK#J'j%++r:3*Uj%++r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H, ,Iz.test needs follow_symlinks support in os.utimec                    [         R                   " 5       n[        R                  " [        R                  S SS9  U R                  [        [        R                  [        R                  SSS9  U R                  [        [        R                  [        R                  US 4SS9  U R                  [        [        R                  [        R                  S U4SS9  [        R                  " [        R                  [        U5      [        U5      4SS9  [        R                  " [        R                  X4SS9  [        R                  " [        R                  SS9  g )NFfollow_symlinksr)  r,  r   r-  r   r   r;   r<   r.  r%   r0  s     r   test_utime_nofollow_symlinks(PosixTester.test_utime_nofollow_symlinks  s    iikI$$dEB)U[[)2B2B& 	 	?)U[[)2B2B+u 	 	>)U[[)2B2B+u 	 	>I$$s3xS&:$)	+I$$sj%HI$$e<rM   writevztest needs posix.writev()c                 P   [         R                  " [        R                  [         R                  [         R
                  -  5      n [         R                  " US5      nU R                  US5        [         R                  " US[         R                  5        U R                  S[        R                  " US5      5         [        R                  " U/ 5      nU R                  US5        [         R                  " U5        g ! [         a     N#f = f! [         R                  " U5        f = f)Nr   r   r   
   test1tt2t3)ro   r   r   r   r   r   r:  rF   r   r   r   r   r   r   )r%   r   r  sizes       r   test_writevPosixTester.test_writev  s    WWY%%ryy2::'=>			"78AQ#HHRBKK(]EJJr2,>?*||B+   q)HHRL    HHRLs1   A6D =C= D =
D
D 	D

D D%c                    [         R                  " [        R                  [         R                  [         R
                  -  5      n U R                  [        5       n[         R                  " USS-  /S-  5        S S S 5        U R                  WR                  R                  [        R                  5        [         R                  " U5        g ! , (       d  f       NY= f! [         R                  " U5        f = f)Nr	  r   r   )ro   r   r   r   r   r   r;   r   r:  rF   r   r   r   r   r
  s      r   test_writev_overflow_32bits'PosixTester.test_writev_overflow_32bits  s     WWY%%ryy2::'=>	""7+r		"te|nu45 ,R\\//>HHRL	 ,+ HHRLs$   C C:<C 
CC C6readvztest needs posix.readv()c           	         [         R                  " [        R                  [         R                  [         R
                  -  5      n [         R                  " US5        [         R                  " US[         R                  5        S Vs/ s H  n[        U5      PM     nnU R                  [        R                  " X5      S5        U R                  / SQU Vs/ s H  n[        U5      PM     sn5         [        R                  " U/ 5      nU R                  US5        [         R                  " U5        g s  snf s  snf ! [         a     N-f = f! [         R                  " U5        f = f)Nr<  r   r   r   r   )ro   r   r   r   r   r   r   r   r   r   rF   r   rC  r   r   r   )r%   r   r   r   r=  s        r   
test_readvPosixTester.test_readv
  s    WWY%%ryy2::'=>	HHR'HHRBKK()23A9Q<C3U[[126638O3aq38OP*{{2r*   q)HHRL 48O
    HHRLsO   AE D3:E D8
+E 3D= 
E 3
E =
E
E 	E

E E%c                 B   [         R                  " [        R                  [         R                  [         R
                  -  5      n [        S5      /S-  nU R                  [        5       n[         R                  " X5        S S S 5        U R                  WR                  R                  [        R                  5        U R                  [        US   5      SS-  5        [         R                  " U5        g ! , (       d  f       Nz= f! [         R                  " U5        f = fr   )ro   r   r   r   r   r   r   r;   r   rC  rF   r   r   r   r   r   r   s       r   test_readv_overflow_32bits&PosixTester.test_readv_overflow_32bits   s     WWY%%ryy2::'=>	U#$u,C""7+r! ,R\\//>U3q6]E5L9HHRL ,+
 HHRLs%   $D *C5AD 5
D?D Ddupztest needs posix.dup()zWASI does not have dup()c                 "   [        [        R                  5      n [        R                  " UR                  5       5      nU R                  U[        5        [        R                  " U5        UR                  5         g ! UR                  5         f = fr{   )
r   r   r   r   rJ  r   assertIsInstancer.  ro   r   )r%   r   r   s      r   test_dupPosixTester.test_dup-  s[     )""#	299;'B!!"c*HHRLHHJBHHJs   AA< <Bconfstrztest needs posix.confstr()c                    U R                  [        S5         [        R                  " S5        S S S 5        U R                  [        S5         [        R                  " S5        S S S 5        [        R                  " S5      nU R                  [        U5      S5        U R                  [        R                  " [        R                  S   5      U5        g ! , (       d  f       N= f! , (       d  f       N= f)Nunrecognized configuration name
CS_garbage/configuration names must be strings or integersGz?CS_PATHr   )	assertRaisesRegexr/  r   rO  r<   assertGreaterrG   rF   confstr_names)r%   r   s     r   test_confstrPosixTester.test_confstr9  s     ##9
 MM,'

 ##H
 MM$

 }}Y'3t9a(u':':9'EFM
 


 
s   CC%
C"%
C3sysconfztest needs posix.sysconf()c                    U R                  [        S5         [        R                  " S5        S S S 5        U R                  [        S5         [        R                  " S5        S S S 5        [        R                  " S5      nU R                  US5        U R                  [        R                  " [        R                  S   5      U5        g ! , (       d  f       N= f! , (       d  f       N= f)NrQ  
SC_garbagerS  rT  
SC_ARG_MAXr   )rV  r/  r   r[  r<   rW  rF   sysconf_names)r%   arg_maxs     r   test_sysconfPosixTester.test_sysconfJ  s     ##9
 MM,'

 ##H
 MM$

 ---7A&MM%--l;<g	G
 


 
s   CC
C
C*dup2ztest needs posix.dup2()zWASI does not have dup2()c                 Z   [        [        R                  5      n[        [        R                  5      n [        R                  " UR                  5       UR                  5       5        UR                  5         UR                  5         g ! UR                  5         UR                  5         f = fr{   )r   r   r   r   rc  r   r   )r%   fp1fp2s      r   	test_dup2PosixTester.test_dup2\  sk     9##$9##$	JJszz|SZZ\2IIKIIK IIKIIKs   3B "B*	O_CLOEXECzneeds os.O_CLOEXECr         c                    [         R                  " [        R                  [         R                  [         R
                  -  5      nU R                  [         R                  U5        U R                  [         R                  " U5      5        g r{   )
ro   r   r   r   r   ri  r   r   assertFalseget_inheritabler   s     r   test_oscloexecPosixTester.test_oscloexech  sR     WWY%%r{{2<<'?@"%++B/0rM   O_EXLOCKztest needs posix.O_EXLOCKc                 l   [         R                  " [        R                  [         R                  [         R
                  -  [         R                  -  5      nU R                  [        [         R                  [        R                  [         R                  [         R
                  -  [         R                  -  5        [         R                  " U5        [        [        S5      (       a  [         R                  " [        R                  [         R                  [         R                  -  [         R                  -  5      nU R                  [        [         R                  [        R                  [         R                  [         R
                  -  [         R                  -  5        [         R                  " U5        g g )NO_SHLOCK)ro   r   r   r   r   rq  r   r;   r   
O_NONBLOCKr   r   r   rs  r   s     r   test_osexlockPosixTester.test_osexlockp  s     WWY%%[[,RZZ79'277I,<,<++bkk1"--?	A
5*%%))R[[0;=Bgrww	0@0@ kk"++5bmmCEHHRL &rM   rs  ztest needs posix.O_SHLOCKc                 z   [         R                  " [        R                  [         R                  [         R
                  -  [         R                  -  5      n[         R                  " [        R                  [         R                  [         R
                  -  [         R                  -  5      n[         R                  " U5        [         R                  " U5        [        [        S5      (       a  [         R                  " [        R                  [         R                  [         R
                  -  [         R                  -  5      nU R                  [        [         R                  [        R                  [         R                  [         R                  -  [         R                  -  5        [         R                  " U5        g g )Nrq  )ro   r   r   r   r   rs  r   r   r   r   r;   r   r   rq  rt  )r%   fd1fd2r   s       r   test_osshlockPosixTester.test_osshlock  s     ggi&&[[,RZZ79ggi&&kk"++-bjj8:

5*%%))R[[0;=Bgrww	0@0@ kk"++5bmmCEHHRL &rM   fstatztest needs posix.fstat()c           	         [        [        R                  5      n U R                  [        R
                  " UR                  5       5      5        U R                  [        R                  " UR                  5       5      5        U R                  [        S[        R                  [        UR                  5       5      5        UR                  5         g ! UR                  5         f = fNz4should be string, bytes, os.PathLike or integer, not)r   r   r   r|   r   r|  r   statrV  r<   floatr   r   s     r   
test_fstatPosixTester.test_fstat  s     )""#	OOEKK		45OOEJJryy{34""9JJJbiik 24 HHJBHHJs   B#C C!c           
         U R                  [        R                  " [        R                  5      5        U R                  [        R                  " [
        R                  " [        R                  5      5      5        U R                  [        S[        R                  [        [
        R                  " [        R                  5      5      5        U R                  [        S[        R                  S 5        U R                  [        S[        R                  [        [        R                  5      5        U R                  [        S[        R                  [        [
        R                  " [        R                  5      5      5        g r~  )r|   r   r  r   r   ro   fsencoderV  r<   r   r   r$   s    r   	test_stat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rM   mkfifozdon't have mkfifo()c                 `   [         R                  S:X  a/  [        R                  R	                  S[
        R                  5      nO[
        R                  n[
        R                  " U5        U R                  [
        R                  U5         [        R                  " U[        R                  [        R                  -  5        U R!                  [        R"                  " [        R                  " U5      R$                  5      5        g ! [         a  nU R                  SU-  5         S nANgS nAff = f)Nvxworksz/fifos/posix.mkfifo(): %s)r   r  ro   r   joinr   r   r   r   r   r  r  S_IRUSRS_IWUSRPermissionErrorr   r|   S_ISFIFOst_mode)r%   	fifo_pathr   s      r   test_mkfifo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   6D 
D-D((D-mknodS_IFIFOzdon't have mknod()/S_IFIFOc                    [         R                  " [         R                  5        [        R                  [        R
                  -  [        R                  -  n [        R                  " [         R                  US5        U R                  [        R                  " [        R                  " [         R                  5      R                  5      5        [         R                  " [         R                  5         [        R                  " [         R                  USS S9  g ! [         aS  nU R                  UR                  [        R                  [        R                   [        R"                  45         S nANS nAff = f! [         aS  nU R                  UR                  [        R                  [        R                   [        R"                  45         S nAg S nAff = f)Nr   )r   modedevicedir_fd)r   r   r   r  r  r  r  r   r  r|   r  r  r   assertInr   rv   r   EACCES)r%   r  r   s      r   
test_mknod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 4%E: 
E7$A	E22E7:
GA	GGmakedevztest needs posix.makedev()c                    [         R                  " [        R                  5      nUR                  nU R                  U[        5        U R                  US5        [         R                  " U5      nU R                  U[        5        U R                  US5        U R                  [         R                  " U5      U5        U R                  [        [         R                  [        U5      5        U R                  [        [         R                  5        S H.  nU R                  [        [        4[         R                  U5        M0     [         R                  " U5      nU R                  U[        5        U R                  US5        U R                  [         R                  " U5      U5        U R                  [        [         R                  [        U5      5        U R                  [        [         R                  5        S H.  nU R                  [        [        4[         R                  U5        M0     U R                  [         R                   " X55      U5        U R                  [        [         R                   [        U5      U5        U R                  [        [         R                   U[        U5      5        U R                  [        [         R                   U5        U R                  [        [         R                   5        S HY  nU R                  [        [        4[         R                   XE5        U R                  [        [        4[         R                   X45        M[     ["        R$                  S:X  a  [&        R(                  " 5       (       du  SnU R                  [         R                  " U5      U5        U R                  [         R                  " U5      U5        U R                  [         R                   " Xf5      U5        g g g )Nr   )                    )r  r
   r  r  linuxrV   )r   r  r   r   st_devrL  r.  rH   majorrF   r;   r<   r  r/  OverflowErrorminorr  r   r  r   linked_to_musl)r%   stdevr  xr  NODEVs          r   test_makedevPosixTester.test_makedev  s   ZZ	(()iic3'Q'C eS)q)S)51)U[[%*=)U[[1$Az=95;;J % C eS)q)S)51)U[[%*=)U[[1$Az=95;;J % 	u4c:)U]]E%L%H)U]]E5<H)U]]E:)U]]3+Az=95==!Sz=95==%S , <<7"7+A+A+C+CEU[[/7U[[/7U]]58%@	 ,D"rM   c           
      ,  ^ ^^ UU U4S jn[         R                  " 5       n[         R                  " 5       nU" TXV5        U" XV5        U" TSU5        U" XV5        U" TUS5        U" XV5        [        R                  S:X  a  US;   nOUS:H  n[
        R                  (       a  GOU(       aM  [        R                  S:w  a  SOSnU" TX5        U" X5        U" TSS5        U" X5        U" TXV5        U" XV5        O[        R                  " 5       S;   a  [        R                  " S	5      eT R                  [        UTSS5        U" XV5        T R                  [        UTSS5        U" XV5        [        [         S
5      (       a:  S[         R                  " 5       ;  a!  T R                  [        UTSS5        U" XV5        [        [        4 HP  n	T R                  [         UTU	" U5      U5        U" XV5        T R                  [         UTXY" U5      5        U" XV5        MR     g )Nc                    > TbA  T" T5      nTR                  UR                  U 5        TR                  UR                  U5        g g r{   )rF   st_uidst_gid)uidgidr  first_paramr%   	stat_funcs      r   
check_stat6PosixTester._test_all_chown_common.<locals>.check_stat   s@    $ -  c2  c2 %rM   rV   r  )r   r8   r   l        r   )zHP-UXSunOSz1Skipping because of non-standard chown() behaviorr2   )ro   r6   r1   r   r  r   is_emscriptensystemrs   rt   r;   r   r   r2   strr  r<   )
r%   
chown_funcr  r  r  r  r  is_root	big_valuets
   ` ``      r   _test_all_chown_common"PosixTester._test_all_chown_common  s   	3
 iikiik;)3;C(3;R(3<<9$ f}GaxG   " #&,,)";I{I9y,{B+y,{C-s __"44 ## %/ 0 0 gz;1Es gz;2Fs r;''BLLN*%%gz;ANs(eAi[!C&#Ns i[#qvNs 	 rM   chownzrequires os.chown()getgid() is a stubc                 x   [         R                  " [        R                  5        U R	                  [
        [        R                  [        R                  SS5        [        R                  " [        R                  5        U R                  [        R                  [        R                  [        R                  5        g rU   )ro   r   r   r   r;   r   r   r  create_empty_filer  r  r$   s    r   
test_chownPosixTester.test_chownG  sl     			)""#'5;;	0@0@"bI 	##I$4$45##EKK1A1A5::NrM   fchownztest needs os.fchown()c           	      L   [         R                  " [        R                  5        [	        [        R                  S5      n UR                  5       nU R                  [        R                  U[        [        SS 5      5        UR                  5         g ! UR                  5         f = f)Nr   r|  )ro   r   r   r   r   r   r  r   r  r9   r   )r%   	test_filer   s      r   test_fchownPosixTester.test_fchownR  sw     			)""# ))3/		!!#B''b(/w(EG OOIOOs    A B B#lchownztest needs os.lchown()c           	         [         R                  " [        R                  5        [         R                  " [
        [        R                  5        U R                  [        R                  [        R                  [        [        SS 5      5        g )Nlstat)
ro   r   r   r   symlink_DUMMY_SYMLINKr  r   r  r9   r$   s    r   test_lchownPosixTester.test_lchowna  sS     			)""#


>9#3#34##ELL)2B2B$+E7D$A	CrM   r   ztest needs posix.chdir()c                     [         R                  " [        R                  5        U R	                  [
        [         R                  [        R                  5        g r{   )r   r   ro   r}   r;   r   r   r   r$   s    r   
test_chdirPosixTester.test_chdirj  s.    BII'5;;	0@0@ArM   c                     U R                  [        R                  [        R                  " [
        R                  5      5        g r{   )r  r   r   r   listdirro   r}   r$   s    r   test_listdirPosixTester.test_listdiro  s#    i&&bii(@ArM   c                 j    U R                  [        R                  [        R                  " 5       5        g r{   )r  r   r   r   r  r$   s    r   test_listdir_default PosixTester.test_listdir_defaultr  s     	i&&8rM   c                     U R                  [        R                  " [        R                  5      [
        R                  " S5      5        g N   .)r  ro   r  r   r   r   r  r$   s    r   test_listdir_bytesPosixTester.test_listdir_bytesw  s*     	bkk)"2"23U]]45HIrM   c                     [         [        4 H=  nU R                  [        5         [        R
                  " U" S5      5        S S S 5        M?     g ! , (       d  f       MQ  = fr  )r   
memoryviewr;   r<   r   r  )r%   clss     r   test_listdir_bytes_like#PosixTester.test_listdir_bytes_like|  s>    j(C""9-c$i( .- )--s   A
A	z)test needs fd support for posix.listdir()c                    [         R                  " [         R                  " 5       [         R                  5      nU R	                  [         R
                  U5        U R                  [        [         R                  " S5      5      [        [         R                  " U5      5      5        U R                  [        [         R                  " S5      5      [        [         R                  " U5      5      5        g )N.)	r   r   r*   r   r   r   rF   sortedr  r%   fs     r   test_listdir_fdPosixTester.test_listdir_fd  s     JJu||~u~~6Q'5==%&5==#$	
 	5==%&5==#$	rM   accessztest needs posix.access()c                     U R                  [        R                  " [        R                  [
        R                  5      5        g r{   )r|   r   r  r   r   ro   R_OKr$   s    r   test_accessPosixTester.test_access  s#    Y%5%5rww?@rM   umaskztest needs posix.umask()c                     [         R                  " S5      nU R                  U[        5        [         R                  " U5        g r!  )r   r  rL  r.  )r%   old_masks     r   
test_umaskPosixTester.test_umask  s+    ;;q>h,HrM   strerrorztest needs posix.strerror()c                 N    U R                  [        R                  " S5      5        g r!  )r|   r   r  r$   s    r   test_strerrorPosixTester.test_strerror  s     	q)*rM   pipeztest needs posix.pipe()c                     [         R                  " 5       u  p[        R                  " U5        [        R                  " U5        g r{   )r   r  ro   r   )r%   readerwriters      r   	test_pipePosixTester.test_pipe  s'    

rM   pipe2ztest needs os.pipe2()   c                    U R                  [        [        R                  S5        U R                  [        [        R                  SS5        [        R                  " S5      u  p[        R                  " U5        [        R                  " U5        [        R                  " [        R
                  [        R                  -  5      u  pU R                  [        R                  U5        U R                  [        R                  U5        U R                  [        R                  " U5      5        U R                  [        R                  " U5      5        U R                  [        R                  " U5      5        U R                  [        R                  " U5      5        U R                  [        [        R                  US5         [        R                  " US[        R                  -  5        g ! [         a     g f = f)NDEADBEEFr   r8   r	  )r;   r<   ro   r  r   ri  rt  r   rm  rn  get_blockingr   r   r   r   PIPE_MAX_SIZE)r%   rr   s      r   
test_pipe2PosixTester.test_pipe2  sD    	)RXXz:)RXXq!4 xx{

 xxR]]23!$!$++A./++A./+,+,'277Aq1	HHQw4445 		s   (G+ +
G87G8c                     SS K nU R                  [        [        R                  UR
                  S-   5        U R                  [        [        R                  UR                  S-   5        g Nr   r8   )	_testcapir;   r  ro   r  INT_MAXUINT_MAX)r%   r  s     r   test_pipe2_c_limitsPosixTester.test_pipe2_c_limits  sI    
 	-93D3Dq3HI-93E3E3IJrM   r-  ztest needs posix.utime()c                 v   [         R                   " 5       n[        R                  " [        R                  S 5        U R                  [        [        R                  [        R                  S5        U R                  [        [        R                  [        R                  US 45        U R                  [        [        R                  [        R                  S U45        [        R                  " [        R                  [        U5      [        U5      45        [        R                  " [        R                  X45        g )Nr)  r6  r7  s     r   
test_utimePosixTester.test_utime  s    iikI$$d+)U[[#**L	:)U[[#**S$K	9)U[[#**T3K	9I$$s3xS&:;I$$sj1rM   c                 z   [        U[        5      (       + n[        R                  " U5      R                  n U[        R
                  [        R                  -  [        R                  -  ) -  nU" X&40 UD6  U R                  [        R                  " U5      R                  U5        [        R                  " U5      (       a   [        USUS9    S S S 5        U[        R
                  [        R                  -  [        R                  -  -  nU" X&40 UD6  U R                  [        R                  " U5      R                  U5        [        R                  " U5      (       a  [        USUS9    S S S 5        U" X%5        g ! , (       d  f       N= f! [         a     Nf = f! , (       d  f       N8= f! U" X%5        f = f)Nwb+)closefd)
isinstancer.  ro   r  r  S_IWOTHS_IWGRPr  rF   S_ISREGr   r  )r%   
chmod_functargetkwargsr  r  new_modes          r   check_chmodPosixTester.check_chmod  sG    --wwv&&	%t|| ;dll JKKHv262RWWV_44h?||D!!feW= > t||dll:T\\IJHv262RWWV_44h?||D!!&%9 : v$ >=&  :9 v$sm   B
F0 F E>F BF0 +F-F0 >
FF F0 F 
FF0 FF0 
F-)F0 0
F:c                 `    U R                  [        R                  [        R                  5        g r{   )r"  r   chmodr   r   r$   s    r   test_chmod_filePosixTester.test_chmod_file  s    i&6&67rM   c                     [         R                  S-   n[        R                  " U5        U R	                  [        R
                  U5        U$ )Nd)r   r   r   mkdirr   rmdirr%   r  s     r   tempdirPosixTester.tempdir  s5    !!C'FV,rM   c                 d    U R                  5       nU R                  [        R                  U5        g r{   )r-  r"  r   r%  r,  s     r   test_chmod_dirPosixTester.test_chmod_dir  s!    f-rM   c                 $   [        [        R                  S5       nU R                  [        R
                  UR                  5       5        U R                  [        R                  UR                  5       5        S S S 5        g ! , (       d  f       g = f)Nr  )r   r   r   r"  r   fchmodr   r%  r  s     r   test_fchmod_filePosixTester.test_fchmod_file  sT    )""E*aU\\188:6U[[!((*5 +**s   AB
Blchmodztest needs os.lchmod()c                     U R                  [        R                  [        R                  5        U R                  [        R
                  [        R                  SS9  g NFr4  )r"  r   r6  r   r   r%  r$   s    r   test_lchmod_filePosixTester.test_lchmod_file  s;    y'7'78i&6&6NrM   c                     U R                  5       nU R                  [        R                  U5        U R                  [        R                  USS9  g r8  )r-  r"  r   r6  r%  r,  s     r   test_lchmod_dirPosixTester.test_lchmod_dir  s:    v.feDrM   c                 b   [         R                  " U5      R                  n[         R                  " U5      R                  n U[        R                  [        R
                  -  [        R                  -  ) -  nU" X740 UD6  U R                  [         R                  " U5      R                  U5        U R                  [         R                  " U5      R                  U5        U[        R                  [        R
                  -  [        R                  -  -  nU" X740 UD6  U R                  [         R                  " U5      R                  U5        U R                  [         R                  " U5      R                  U5        [        R                  " X%5        g ! [        R                  " X%5        f = fr{   )
ro   r  r  r  r  r  r  rF   r   r%  r%   r  r  linkr   target_mode	link_moder!  s           r   check_chmod_linkPosixTester.check_chmod_link  s   ggfo--HHTN**	
	-"t||dll'BT\\'Q%RRHt00RWWV_44h?RXXd^33Y?"dllT\\&ADLL&PQHt00RWWV_44h?RXXd^33Y?KK,EKK,s   D=F F.c                    [         R                  " U5      R                  n[         R                  " U5      R                  nU[        R                  [        R
                  -  [        R                  -  ) -  nU" X740 UD6  U R                  [         R                  " U5      R                  U5        U R                  [         R                  " U5      R                  U5        U[        R                  [        R
                  -  [        R                  -  -  nU" X740 UD6  U R                  [         R                  " U5      R                  U5        U R                  [         R                  " U5      R                  U5        g r{   )ro   r  r  r  r  r  r  rF   r?  s           r   check_lchmod_linkPosixTester.check_lchmod_link  s    ggfo--HHTN**	!<t||!KLL4,V,00+>$//:t|| ;dll JK4,V,00+>$//:rM   c                    [         R                  n[         R                  S-   n[        R                  " X5        U R	                  [
        R                  U5        [        R                  S:X  a!  U R                  [
        R                  X5        O U R                  [
        R                  X5        U R                  [
        R                  XSS9  g )N-linkntTr4  )r   r   ro   r  r   r   r   r>   rF  r%  rC  r%   r  r@  s      r   test_chmod_file_symlink#PosixTester.test_chmod_file_symlink(  s    !!')


6 d+77d?""5;;=!!%++v<ekk6NrM   c                    U R                  5       n[        R                  S-   n[        R                  " XSS9  U R                  [        R                  U5        [        R                  S:X  a!  U R                  [        R                  X5        O U R                  [        R                  X5        U R                  [        R                  XSS9  g )NrI  T)target_is_directoryrJ  r4  )r-  r   r   ro   r  r   r   r   r>   rF  r%  rC  rK  s      r   test_chmod_dir_symlink"PosixTester.test_chmod_dir_symlink4  s    ')


6T:d+77d?""5;;=!!%++v<ekk6NrM   c                 4   [         R                  n[         R                  S-   n[        R                  " X5        U R	                  [
        R                  U5        U R                  [
        R                  XSS9  U R                  [
        R                  X5        g NrI  Fr4  )
r   r   ro   r  r   r   r   rF  r%  r6  rK  s      r   test_lchmod_file_symlink$PosixTester.test_lchmod_file_symlink@  sj     !!')


6 d+u{{F%Pu||V:rM   c                 4   U R                  5       n[        R                  S-   n[        R                  " X5        U R                  [        R                  U5        U R                  [        R                  XSS9  U R                  [        R                  X5        g rS  )r-  r   r   ro   r  r   r   r   rF  r%  r6  rK  s      r   test_lchmod_dir_symlink#PosixTester.test_lchmod_dir_symlinkJ  sj     ')


6 d+u{{F%Pu||V:rM   c                    [         R                  " U5      nU R                  [        US5      5        UR                  [        R
                  -  n U" X%40 UD6   [         R                  " U5      nU R                  UR                  [        R
                  -  UR                  5         [        US5      n	[        R                  " X$R                  5        g ! [         a<  nUR                  [        R                  :w  a  e SnU R                  U5         S nANS nAff = f! [         a4  n
U R                  U
R                  [        R                  5         S n
A
NS n
A
ff = f! [        R                  " X$R                  5        f = f)Nst_flags2chflag UF_IMMUTABLE not supported by underlying fsr   )ro   r  r|   r   rZ  UF_IMMUTABLEr   r   r  r   rF   r   rv   r   chflags)r%   chflags_functarget_filer   r  flagserrr   new_str   r   s              r   _test_chflags_regular_file&PosixTester._test_chflags_regular_fileT  s   WW[!J/0 d///	6v6	4WW[)FR[[4+<+<<fooN7+t, MM+{{3  	yyE,,,FCMM#		  7  %++667 MM+{{3sI   	C AE (D 
D2DD
E(*EE EE "Fr]  ztest needs os.chflags()c                 `    U R                  [        R                  [        R                  5        g r{   )rc  r   r]  r   r   r$   s    r   test_chflagsPosixTester.test_chflagsl  s    ''y7G7GHrM   lchflagsztest needs os.lchflags()c                     U R                  [        R                  [        R                  5        U R                  [        R
                  [        R                  SS9  g r8  )rc  r   rh  r   r   r]  r$   s    r   test_lchflags_regular_file&PosixTester.test_lchflags_regular_filep  s@    ''	8H8HI''y7G7G8= 	( 	?rM   c                    [         R                  " [        R                  5      nU R	                  [        US5      5        U R                  [        R                  [        5        [         R                  " [        R                  [        5        [         R                  " [        5      nS n[        R                  U4 H  nUR                  [        R                  -  n U" [        U5         [         R                  " [        R                  5      n[         R                  " [        5      n	U R'                  UR                  UR                  5        U R'                  UR                  [        R                  -  U	R                  5        U" [        UR                  5        M     g ! [         a<  nUR                   [         R"                  :w  a  e SnU R%                  U5         S nANS nAff = f! U" [        UR                  5        f = f)NrZ  c                 ,    [         R                  " XSS9$ r8  )r   r]  )r   r`  s     r   chflags_nofollow;PosixTester.test_lchflags_symlink.<locals>.chflags_nofollow  s    ==eDDrM   r[  )ro   r  r   r   r|   r   r   r   r  r  r  r   rh  rZ  r\  r   r   r  r   rF   )
r%   	testfn_stdummy_symlink_strn  fnr`  ra  r   new_testfn_stnew_dummy_symlink_sts
             r   test_lchflags_symlink!PosixTester.test_lchflags_symlinkv  ss   GGI,,-		:67	((.9


9##^488N3	E >>#34B$--0A0AAE#>5)> "	(8(8 9')xx'?$  !3!3]5K5KL  !1!:!:T=N=N!N!5!>!>@ >#3#<#<=% 5
  #99 0 00Jc""	# >#3#<#<=s%   F"+BG+"
G(,2G##G(+Hc                     [         R                  S:X  a  [        nO[        n[        R
                  R                  5        H;  u  p#U R                  [        U5      U5        U R                  [        U5      U5        M=     g )NrJ  )	ro   r>   r  r   r   r   itemsrF   type)r%   	item_typekvs       r   test_environPosixTester.test_environ  sX    77d?IIMM'')DAT!Wi0T!Wi0 *rM   c                 z   U R                  [        5         [        R                  " SS5        S S S 5        U R                  [        5         [        R                  " SS5        S S S 5        U R                  [        5         [        R                  " SS5        S S S 5        [        R                  S:X  a  U R                  [        5         [        R                  " SS	5        S S S 5        U R                  [        5         [        R                  " S
S5        S S S 5        U R                  [        5         [        R                  " SS5        S S S 5        g g ! , (       d  f       GN.= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)NzFRUIT VEGETABLEcabbageFRUITzorange VEGETABLE=cabbagezFRUIT=ORANGElemonr   s   FRUIT VEGETABLEs   cabbages   FRUITs   orange VEGETABLE=cabbages   FRUIT=ORANGEs   lemon)r;   r/  ro   putenvr>   r$   s    r   test_putenvPosixTester.test_putenv  s   z*II()4 +z*IIg:; +z*IIng. +77g"":.		-z: /"":.		($@A /"":.		/84 /.  +***** /.....sG   EE' E9	F
>F3F,
E$'
E69
F

F
F),
F:r*   ztest needs posix.getcwd()c                   ^ Sn[         R                  " 5       n[         R                  R                  [        R
                  5      S-   n [         R                  " U5        [         R                  " U5         [         R                  " U5        [        R                  " U5        g !    [         R                  " U5        [        R                  " U5        g = f! [         R                  " U5        [        R                  " U5        f = f)Nz8getcwd-test-directory-0123456789abcdef-01234567890abcdefz.getcwd)	ro   r*   r   abspathr   r   r*  r   rmtree)r%   dirnamer}   	base_path_create_and_do_getcwds       @r   test_getcwd_long_pathnames&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 .Dgetgrouplistztest needs posix.getgrouplist()r6   ztest needs os.getuid()c                     [         R                  " [        R                  " 5       5      S   n[         R                  " [        R                  " 5       5      S   nU R	                  U[
        R                  " X5      5        g )Nr   rE   )rp   rj   ro   r6   r  r   r  )r%   usergroups      r   test_getgrouplistPosixTester.test_getgrouplist  sO     ||BIIK(+RYY[)!,eU//<=rM   r/   ztest needs os.getegid()popenztest needs os.popen()c                    [         R                  " S5       nUR                  5       R                  5       nUR	                  5       nS S S 5         [        S WR                  5        5       5      nWc  U(       d  [        R                  " S5      e[        R                  S:X  a\  SS KnUR                  S5      =(       d    Sn[        S UR                  S	5      SS
  5       5      S:  a  [        R                  " S5      eUR                  [         R"                  " 5       5      nU R%                  U(       + =(       d    U[         R&                  " 5       1:H  5        g ! , (       d  f       GN= f! [         a    [        5       n GNf = f)Nzid -G 2>/dev/nullc              3   8   #    U  H  n[        U5      v   M     g 7fr{   r.  ).0gs     r   	<genexpr>-PosixTester.test_getgroups.<locals>.<genexpr>  s     <^SVV^   zneed working 'id -G'darwinr   MACOSX_DEPLOYMENT_TARGETz10.3c              3   8   #    U  H  n[        U5      v   M     g 7fr{   r  )r  r  s     r   r  r    s     8%7SVV%7r  r  r   )r   rj  z$getgroups(2) is broken prior to 10.6)ro   r  r   stripr   setr   r/  rs   rt   r   r  	sysconfigget_config_vartuplesymmetric_differencer   r2   r|   r/   )r%   idggroupsret
idg_groupsr  dtsymdiffs           r   test_getgroups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   /E E, 
E),FFSIGCHLDz2CLD_XXXX be placed in si_code for a SIGCHLD signalwaitid_resultztest needs os.waitid_resultc                     [         R                    [         R                    [         R                    [         R                    [         R
                    [         R                    g r{   )ro   
CLD_EXITED
CLD_KILLED
CLD_DUMPEDCLD_TRAPPEDCLD_STOPPEDCLD_CONTINUEDr$   s    r   test_cld_xxxx_constants#PosixTester.test_cld_xxxx_constants  s0     	




rM   sched_yieldzdon't have scheduling supportsched_setaffinityz!don't have sched affinity supportc                 .    [         R                  " 5         g r{   )r   r  r$   s    r   test_sched_yieldPosixTester.test_sched_yield  s     	rM   sched_get_priority_maxz!requires sched_get_priority_max()c                    [         R                  n[         R                  " U5      n[         R                  " U5      nU R	                  U[
        5        U R	                  U[
        5        U R                  X25        [        (       dK  U R                  [        [         R                  S5        U R                  [        [         R                  S5        g g )Ni)
r   SCHED_RRsched_get_priority_minr  rL  r.  rH   r   r;   r   )r%   pollohis       r   test_sched_priorityPosixTester.test_sched_priority  s    
 nn))#.))#.b#&b#&'xgu'C'CSIgu'C'CSI rM   c                    [         R                  R                  5        VVs/ s H  u  pUR                  S5      (       d  M  UPM!     nnn[         R                  " S5      nU R                  XC5         [         R                  " [        R                  " 5       5      nU R                  XS5        U R                  [        [         R                  S5        U R                  [        [         R                  S5        [         R                  " S5      nU R                  UR                  [        5        [        R                   R                  S5      (       dU   [         R"                  " SXF5        [         R$                  " SU5        U R                  [        [         R$                  SU5        U R                  [        [         R"                  SXF5        U R                  [&        [         R"                  SUS 5        U R                  [&        [         R$                  SS5        [         R(                  " S 5      nU R                  [&        [         R$                  SU5        Sn[         R(                  " U5      nU R                  [*        [         R$                  SU5        [         R(                  " U* S9nU R                  [*        [         R$                  SU5        g s  snnf ! [         a     GN5f = f! [         a     GNsf = f)NSCHED_r   rV   r  r  +   l    sched_priority)r   __dict__rx  r  r   r  ro   r5   r  r;   r   sched_getparamrL  r  r.  r   r  sched_setschedulersched_setparamr<   sched_paramr  )r%   r>   schedpossible_schedulersmineparentparamlarges           r   $test_get_and_set_scheduler_and_param0PosixTester.test_get_and_set_scheduler_and_param  s3   8=8L8L8N =8N"&//(";  %8N =''*d0	7--bjjl;F MM&6'5#;#;R@'5#7#7<$$Q'e22C8
 ||&&'<==((D8$$Q. gu';';RG'5#;#;RM)U%=%=q$M)U%9%91bA!!$')U%9%91eD!!%(-)=)=q%H!!%8-)=)=q%HK=  	 	$ # s/   KK3)K .K& 
K#"K#&
K43K4c                    [         R                  " S5      n[        [        R                  S-   5       H>  n[        R
                  " [        R                  " X5      5      nU R                  X15        M@     [        R                  " U5      nU R                  X15        U R                  X15        [        R                  " U5      nU R                  X15        U R                  X15        [        R                  " U5      nU R                  X15        U R                  X15        [        R                  " USS9nU R                  X15        U R                  UR                  S5        g )Nr8   r   r  )r   r  rangepickleHIGHEST_PROTOCOLloadsdumpsrF   copyassertIsNotdeepcopyreplaceassertNotEqualr  )r%   r  protonewparams       r   test_sched_paramPosixTester.test_sched_paramF  s   !!!$622145E||FLL$>?HX- 6 99U#))=='))<<&))<<a8H,00!4rM   sched_rr_get_intervalzno functionc                 4    [         R                  " S5      nU R                  W[        5        U R                  US5        U R                  US5        g ! [         a:  nUR                  [        R                  :w  a  e U R                  S5         S nANzS nAff = f)Nr   z only works on SCHED_RR processesg        g      ?)
r   r  r   r   r   r   rL  r  rH   
assertLess)r%   intervalr   s      r   test_sched_rr_get_interval&PosixTester.test_sched_rr_get_intervalY  s~    	>2215H 	h."-"%  	> ww%,,&MM<==	>s   A 
B0BBc                    [         R                  " S5      nU R                  U[        5        U R	                  [        U5      S5        [        R                  R                  S5      (       d%  U R                  [        [         R                  S5        U H=  nU R                  U[        5        U R	                  US5        U R                  US5        M?     g )Nr   r8   r  rV   r
   )r   sched_getaffinityrL  r  rH   rG   r   r  r  r;   r   r.  r  )r%   maskcpus      r   test_sched_getaffinity"PosixTester.test_sched_getaffinityh  s    &&q)dC(D	1-||&&y11gu'>'>CC!!#s+##C+OOC) rM   c           	      ,   [         R                  " S5      nU R                  [         R                  S[	        U5      5        [        U5      S:  a  UR                  5         [         R                  " SU5        U R                  [         R                  " S5      U5         [         R                  " S/ 5        U R                  [        [         R                  SS/5        U R                  [        [         R                  S[        [        S5      5        U R                  [        [         R                  SSS-  /5        [        R                  R!                  S5      (       d'  U R                  [        [         R                  SU5        g g ! [         a     Nf = f)Nr   r8   i0X   r  rV   )r   r  r   r  r   rG   poprF   r   r;   r/  mapr.  r  r   r  r  )r%   r  s     r   test_sched_setaffinity"PosixTester.test_sched_setaffinityu  s(   &&q)//DJ?t9q=HHJ4(003T:	##Ar* 	*e&=&=q3%H*e&=&=q#c4.Q-)@)@!afXN||&&y11gu'>'>DI 2  	 	s   F 
FFzNo dynamic linking on WASIr   zPOSIX-only testc                     [         R                    [         R                    [         R                    [         R                    g r{   )r   	RTLD_LAZYRTLD_NOWRTLD_GLOBAL
RTLD_LOCALr$   s    r   test_rtld_constantsPosixTester.test_rtld_constants  s$     	rM   	SEEK_HOLEz(test needs an OS that reports file holesc           
         [        [        R                  S5       nUR                  S5        UR	                  5         UR                  5       nUR                  5       n [        U5       Hm  nU R                  U[        R                  " X4[        R                  5      5        U R                  U[        R                  " X4[        R                  5      5        Mo     U R                  [        [        R                  X2[        R                  5        U R                  [        [        R                  X2[        R                  5         S S S 5        g ! [         a    [         R"                  " S5      ef = f! , (       d  f       g = f)Nzr+bs   hellozOSError raised!)r   r   r   r   r   tellr   r  rF   ro   r   	SEEK_DATAassertLessEqualr  r;   r   rs   rt   )r%   r   r=  fnor   s        r   test_fs_holesPosixTester.test_fs_holes  s    )""E*bHHXHHJ779D))+C;tA$$Q(FG((rxx/MN % !!'288SM!!'288SM +*  ;
 ''(9::; +*s   AE0C$E!E--E00
E>c           	      6   S HP  n[        [        US 5      nUc  M  S[        R                  4 H  n U" SU5        M     U R                  SU-   5        MR     g ! [         a6  nU R                  SR                  U5      [        U5      5         S nA  M  S nAff = f)N)renamer  r@  noodly2doesnotexistfilenamez'doesnotexistfilename' -> '{}'z#No valid path_error2() test for os.)	r9   ro   r   r   r   r  formatr  ru   )r%   r>   functiondstr   s        r   test_path_error2PosixTester.test_path_error2  s     2Dr4.H!9#3#343S9 5 		?$FG 2  MM"B"I"I#"NPSTUPVWs   	A
B"*BBc                 Z   [         R                  nUS-   nU R                  [         R                  U5        [         R                  " U5        S n U R	                  [
        5         [        R                  " U[        R                  [        R                  -  5      nS S S 5        Ub  [        R                  " U5        U R                  [        R                  R                  U5      5        U R	                  [
        [        R                  U5        U R                  [        R                  R                  U5      5        [        US5      R                  5         U R	                  [
        [        R                  U5        g ! , (       d  f       N= f! Ub  [        R                  " U5        f f = f)N r   )r   r   r   r   r;   r/  ro   r   r   r   r   rm  r   existsr*  r  r%   rr  fn_with_NULr   s       r   test_path_with_null_character)PosixTester.test_path_with_null_character  s   4i	(("-	"":.WW["++

*BC / ~+,*bhh<+,R*bgg{; /. ~ s$   F $7E=F =
FF F*c                    [         R                  " [        R                  5      nUS-   nU R	                  [        R
                  U5        [        R
                  " U5        S n U R                  [        5         [         R                  " U[         R                  [         R                  -  5      nS S S 5        Ub  [         R                  " U5        U R                  [         R                  R                  U5      5        U R                  [        [         R                  U5        U R                  [         R                  R                  U5      5        [        US5      R                  5         U R                  [        [         R                   U5        g ! , (       d  f       N= f! Ub  [         R                  " U5        f f = f)Nr   r   )ro   r  r   r   r   r   r;   r/  r   r   r   r   rm  r   r  r*  r  r  s       r   test_path_with_null_byte$PosixTester.test_path_with_null_byte  s"   [[))*5j	(("-	"":.WW["++

*BC / ~+,*bhh<+,R*bgg{; /. ~ s$   #F" 87F/F" 
FF" "F>
pidfd_openzpidfd_open unavailablec                 `   U R                  [        5       n[        R                  " S5        S S S 5        WR                  R
                  [
        R                  :X  a  U R                  S5        [        UR                  [        5      (       a  U R                  SUR                  < 35        U R                  UR                  R
                  [
        R                  5        [        R                  " [        R                  " [        R                  " 5       S5      5        g ! , (       d  f       N= f)NrV   z"system does not support pidfd_openzpidfd_open syscall blocked: r   )r;   r   ro   r  r   r   r   r   r  r  rF   r   r   r3   )r%   r   s     r   test_pidfd_openPosixTester.test_pidfd_open  s    w'2MM" (<<-MM>?bllO44MM88HIJ++U\\:
ryy{A./ ('s   D
D-r   )__name__
__module____qualname____firstlineno__r&   r@   rs   
skipUnlessr   r   rK   rQ   rY   r^   rc   rg   rp   rw   r~   r   r   r   r9   ro   supports_fdr   requires_forkr   r   r   r   r   r   r   requires_32br   r   r  r  r  r  r  r#  r&  r-  r1  supports_follow_symlinksr8  r>  rA  rE  rH  skipIfis_wasirM  rY  ra  rg  requires_linux_versionrequires_subprocessro  ru  rz  r  r  r  r  r  r  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-  r0  r4  r9  r<  rC  rF  skip_unless_symlinkrL  rP  rT  rW  rc  rf  rj  ru  r}  r  r  r  r  signalr  requires_sched_hrequires_sched_affinityr  r  requires_schedr  r  r  r  r  r>   r  r	  r  r  r  r   __static_attributes__r   rM   r   r   r   8   s   0@  479,9, 479,9, 479797 479G9G 479797 479H9H 557j13NOI P7I. 	257272 
3688 4799 
35RS, T, Xt4FHyz
  {
 13NO.  P. =% =%~ 02LM	 N	 02LM	 N	 13NO P 13NO46RS T P( 13NO	  P	 13NO P 	24PQ R 	24PQ68PQ R R 	24PQ  R (9:,..( (9:,.. 8*,, 8*,, R^^35XY Z( R%@%@@Brs= t= 13NO P* 13NO  P 02LM N* 02LM	  N	 .13__W__&@A B3 	257N7N 	257G7G  /24__W__&AB C4 [13GH##Aq"-  "1 # . I1
 
3466 
3466 035
5
A" 13HIF JF 0MWT95M57N7N, 	24PQ%A R%ANG!R W-/DE__W**,@AO B FO ((13KL__W**,@A
 B M )
 ((13KLC M )C 02LMB NBB9
J
)
 "..8DFF 13NOA PA 02LM N
 
368+8+ /1JK L
 W-/FG##Aq"- . H4 W-/FG##Aq"-K . H K 02LM
2 N
2%, ((8 )8 ((. ). ((6 )6
 13KLO MO 13KLE ME
-
; ""	O #	O ""	O #	O 13KL""; # M; 13KL""; # M;40 	24MNI OI 
35OP? Q?
 
35OP> Q>@15 13NO!( P!(F 79Z[j13NOX.0HI> J P \> Y/1JKW-/FG  "E # H LE4 35ij_57TU V k  **75-+H+JL&11'%AT2U2UW   (@A<>J> J &I &IP 5 5$ (?@-P& Q& 
* 
* J J2 __W__&BCG+->? @ D [1CE;E;2H$<$<$ \24LM0 N0rM   r   c                      \ rS rSrSr\S 5       r\S 5       r\R                  " \
R                  \
R                  ;   S5      S 5       r\R                  " \
R                  \
R                  ;   S5      S 5       r\R                  " \" \
S	5      =(       a    \
R"                  \
R                  ;   S
5      \R$                  " \R(                  S5      S 5       5       r\R                  " \
R,                  \
R                  ;   S5      S 5       r\R                  " \
R0                  \
R                  ;   S5      S 5       r\R$                  " \R4                  S5      \R                  " \" \
S5      =(       a    \
R6                  \
R                  ;   S5      S 5       5       r\R                  " \
R:                  \
R                  ;   S5      S 5       r\R                  " \" \
S5      =(       a)    \
R>                  \
R                  ;   =(       a	    \" \S5      S5      S 5       r \R                  " \
RB                  \
R                  ;   S5      S 5       r"\R                  " \" \
S5      =(       a    \
RF                  \
R                  ;   S5      S 5       r$\R                  " \
RJ                  \
R                  ;   S 5      S! 5       r&\R                  " \
RN                  \
R                  ;   S"5      S# 5       r(\R                  " \
RR                  \
R                  ;   S$5      S% 5       r*\R                  " \" \
S&5      =(       a    \
RV                  \
R                  ;   S'5      S( 5       r,S)r-g*)+TestPosixDirFdi  r   c              #     #    [         =R                  S-  sl        [        R                   SU R                   3n[        R                   SU R                   S3n[        R
                  " U5        U R                  [        R                  U5        [        R                  R                  X!5      n[        R                  " U5       nXAU4v   S S S 5        g ! , (       d  f       g = f7f)Nr8   _base)r8  countr   r   r   r*  r   r+  ro   r   r  open_dir_fd)r%   r>   base_dirfullnamer  s        r   prepareTestPosixDirFd.prepare  s     !""#1TZZL1&&'qD9HX.77<</""8,** -,,s   CC'C	C'
C$ C'c              #      #    U R                  5        u  pn[        R                  " U5        U R                  [        R
                  U5        XU4v   S S S 5        g ! , (       d  f       g = f7fr{   )r@  r   r  r   r   r   r%   r  r>   r?  s       r   prepare_fileTestPosixDirFd.prepare_file  sI     \\^7h''1OOELL(3** ^^s   A-A A	A-
A*&A-z)test needs dir_fd support for os.access()c           	          U R                  5        u  pnU R                  [        R                  " U[        R
                  US95        S S S 5        g ! , (       d  f       g = fNr  )rD  r|   r   r  ro   r  rC  s       r   test_access_dir_fd!TestPosixDirFd.test_access_dir_fd  s>     $<V8OOELLrwwvFG !  s   7A
Az'test needs dir_fd support in os.chmod()c                    U R                  5        u  pn[        R                  " U[        R                  5        [        R                  " U[        R                  [        R
                  -  US9  [        R                  " U5      nU R                  UR                  [        R                  -  [        R                  [        R
                  -  5        S S S 5        g ! , (       d  f       g = frG  )	rD  r   r%  r  r  r  rF   r  S_IRWXU)r%   r  r>   r?  ss        r   test_chmod_dir_fd TestPosixDirFd.test_chmod_dir_fd  s     $<V8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                     U R                  5        u  pn[        R                  " U[        R                  " 5       [        R
                  " 5       US9  S S S 5        g ! , (       d  f       g = frG  )rD  r   r  ro   r6   r1   rC  s       r   test_chown_dir_fd TestPosixDirFd.test_chown_dir_fd  sA      $<V8KKbiik299;vF !  s   AA
A)z&test needs dir_fd support in os.stat()c           
         U R                  5        u  pn[        US5       nUR                  S5        S S S 5        U R                  [        R
                  U5        [        R                  " U5      n[        R                  " X!S9nU R                  XV5        [        R                  " US S9nU R                  XV5        U R                  [        S[        R                  U[        R                  " 5       S9  U R                  [        S[        R                  U[        U5      S9  U R                  [        [        R                  USS9  S Hu  nU R                  [        S5       nU R                  [         5         [        R                  " SUS9  S S S 5        S S S 5        U R                  WR"                  [$        5        Mw     S S S 5        g ! , (       d  f       GN= f! , (       d  f       NU= f! , (       d  f       N^= f! , (       d  f       g = f)	Nr   z	testline
rH  zshould be integer or None, notl      Fx:^V )FTz!bool is used as a file descriptornonexisting)r@  r   r   r   r   r   r  rF   rV  r<   r*   r  r;   r  assertWarnsRegexr#   r   filename__file__)	r%   r  r>   r?  outfiles1s2r   r   s	            r   test_stat_dir_fdTestPosixDirFd.test_stat_dir_fd!  s   \\^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 "**>;=@B**73

=< 4=   h7 "% ^$$( 43= =' ^sR   G>G
D.G>!G-7G	G-,G>

G	G>
G*&G--
G;7G>>
Hz'test needs dir_fd support in os.utime()c                 N   U R                  5        u  pn[        R                  " 5       n[        R                  " US US9  [        R                  " X!S9  U R	                  [
        [        R                  UXAS9  U R	                  [
        [        R                  USUS9  U R	                  [
        [        R                  UUS 4US9  U R	                  [
        [        R                  US U4US9  U R	                  [
        [        R                  UUS4US9  [        R                  " U[        U5      [        U5      4US9  [        R                  " X$U4US9  [        R                  " U[        U5      [        U[        U5      -
  S-  5      4US9  [        R                  " X![        U5      [        U[        U5      -
  S-  5      4S9  [        R                  [        R                  ;   a   [        R                  " USUS9  S S S 5        g ! [         a     Nf = f! , (       d  f       g = f)NrH  r)  r  r+  )r  r-   F)r5  r  )
rD  r,  r   r-  r;   r<   r.  ro   r*  r/  )r%   r  r>   r?  r0  s        r   test_utime_dir_fd TestPosixDirFd.test_utime_dir_fd<  s    $<V8))+CKKd62KK,id!  2id*6  ;id"Dk&  :id#Sk&  :id"Cj  9KKs3xS26BKKCj8KKXsC#c(Nc#9:;FLKK#&s8S#C.C1G-H"IK xx2666KKeFK1 ! 2 " 3 ! s*   GH'H
HHHH
H$z5WASI: symlink following on path_link is not supportedr@  z&test needs dir_fd support in os.link()c           	         U R                  5        u  pnU R                  5        u  pEn [        R                  " X%XS9  U R                  [        R                  U5        U R                  [        R                  " U5      S   [        R                  " U5      S   5        S S S 5        S S S 5        g ! [         a  nU R                  SU-  5         S nANS nAff = f! , (       d  f       NB= f! , (       d  f       g = f)N
src_dir_fd
dst_dir_fdzposix.link(): %sr8   )
rD  r@  r   r@  r  r   r   r   rF   r  )r%   r  r>   r?  dir_fd2linknamefulllinknamer   s           r   test_link_dir_fdTestPosixDirFd.test_link_dir_fd[  s      $<V8\\^@<6

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

<(+-  !  # 6014556 ^ ! sK   C,CB0A CC,0
C:CCCC
C)	%C,,
C:z'test needs dir_fd support in os.mkdir()c                     U R                  5        u  pn[        R                  " X!S9  U R                  [        R                  U5        [        R
                  " U5        S S S 5        g ! , (       d  f       g = frG  )r@  r   r*  r   r+  r  rC  s       r   test_mkdir_dir_fd TestPosixDirFd.test_mkdir_dir_fdo  sF    \\^7hKK,OOEKK2JJx  ^^s   AA((
A6r  r  zAtest requires both stat.S_IFIFO and dir_fd support for os.mknod()c                 v   U R                  5        u  pn[        R                  [        R                  -  [        R                  -  n [
        R                  " X$SUS9  U R                  [
        R                  U5        U R                  [        R                  " [
        R                  " U5      R                  5      5        S S S 5        g ! [         aS  nU R                  UR                  [        R                  [        R                   [        R"                  45         S nANaS nAff = f! , (       d  f       g = f)Nr   rH  )r@  r  r  r  r  r   r  r   r   r|   r  r  r   r  r   rv   r   r  )r%   r  r>   r?  r  r   s         r   test_mknod_dir_fd TestPosixDirFd.test_mknod_dir_fdv  s     \\^7h<<$,,.=DMD&9 h7ejj.B.J.J KL ^  R aggU\\5<<'PQQR	 ^s7   6D*C
A#D*

D'A	D"D*"D''D**
D8z&test needs dir_fd support in os.open()c                    U R                  5        u  pn[        US5       nUR                  S5        S S S 5        U R                  [        R
                  U5        [        R                  " U[        R                  US9n [        R                  " US5      nU R                  SU5        [        R                  " U5         S S S 5        g ! , (       d  f       N= f! [        R                  " U5        f = f! , (       d  f       g = f)Nr   s	   testline
rH  	   )
r@  r   r   r   r   r   r   r   rF   r   )r%   r  r>   r?  rX  r   r   s          r   test_open_dir_fdTestPosixDirFd.test_open_dir_fd  s    \\^7hh%m, &OOELL(3D%..@B jjQ'  4B ^%% B ^s:   C5C	AC5 )C)C5	
C	C5C22C55
Dreadlinkz*test needs dir_fd support in os.readlink()c                    U R                  5        u  pn[        R                  " SU5        U R                  [        R
                  U5        U R                  [        R                  " X!S9S5        S S S 5        g ! , (       d  f       g = fNr  rH  )r@  ro   r  r   r   r   rF   rs  rC  s       r   test_readlink_dir_fd#TestPosixDirFd.test_readlink_dir_fd  sW     \\^7hJJy(+OOELL(3U^^D@)L ^^   AA99
Bz(test needs dir_fd support in os.rename()c           	      :   U R                  5        u  pnU R                  5        u  pEn[        R                  " X%XS9  [        R                  " U5        [        R                  " Xc5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nra  )rD  r@  r   r  r  )r%   r  r>   r?  rd  name2	fullname2s          r   test_rename_dir_fd!TestPosixDirFd.test_rename_dir_fd  sk     $<V8\\^:	LL$*@JJy!LL-	  ! ^ ! s#   BAA;*B;
B		B
Bz)test needs dir_fd support in os.symlink()c                    U R                  5        u  pn[        R                  " SX!S9  U R                  [        R                  U5        U R                  [        R                  " U5      S5        S S S 5        g ! , (       d  f       g = fru  )r@  r   r  r   r   rF   rs  rC  s       r   test_symlink_dir_fd"TestPosixDirFd.test_symlink_dir_fd  sU    \\^7hMM)T9OOELL(3U^^H5yA ^^rx  z(test needs dir_fd support in os.unlink()c                 x   U R                  5        u  pn[        R                  " U5        [        R                  " U5         [        R
                  " X!S9  U R                  [        [        R                  U5         S S S 5        g !   U R                  [        R
                  U5        e = f! , (       d  f       g = frG  )	r@  r   r  r   r  r   r;   r   r   rC  s       r   test_unlink_dir_fd!TestPosixDirFd.test_unlink_dir_fd  s~    \\^7h''1JJx T1!!'5::x@ ^h7 ^s   0B+9B#B((B++
B9r  z(test needs dir_fd support in os.mkfifo()c                    U R                  5        u  pn [        R                  " U[        R                  [        R
                  -  US9  U R                  [        R                  U5        U R                  [        R                  " [        R                  " U5      R                  5      5        S S S 5        g ! [         a  nU R                  SU-  5         S nANS nAff = f! , (       d  f       g = f)NrH  r  )r@  r   r  r  r  r  r  r   r   r   r|   r  r  )r%   r  r>   r?  r   s        r   test_mkfifo_dir_fd!TestPosixDirFd.test_mkfifo_dir_fd  s    \\^7h8T4<<$,,#>vN OOELL(3OODMM%**X*>*F*FGH ^ # 82Q6778 ^s5   C"5B7A#C"7
CCC"CC""
C0r   N).r"  r#  r$  r%  r<  r	   r@  rD  rs   r&  ro   r  supports_dir_fdrI  r%  rN  r   r  r+  r   r  rQ  r  r[  r-  r^  r,  r@  rg  r*  rj  r  rm  r   rq  rs  rv  r  r|  r  r  r   r  r  r  r6  r   rM   r   r8  r8    s   E	+ 	+ + + b&8&88:efH gH R%7%779bc: d: W-R288r?Q?Q3QBD__W**,@AG BDG B$6$668`a8 b84 R%7%779bc d< __? F=2+=+= =0
-		
- R%7%779bc! d! W- 6 hh"*<*<<6$T95\^M	^M B$6$668`a
  b
  Z0XbkkREWEW6WEGMGM b&8&88:de. f. r'9'99;fgB hB b&8&88:de	 f	 X.R299@R@R3RT~I @IrM   r8  c                       \ rS rSrS rS r\R                  " \" \	S5      S5      S 5       r
\R                  " \" \	S5      S5      S	 5       rS
rg)PosixGroupsTesteri  c                 @   [         R                  " 5       S:w  a  [        R                  " S5      e[	        [         S5      (       d  [        R                  " S5      e[
        R                  S:X  a  [        R                  " S5      e[         R                  " 5       U l        g )Nr   znot enough privilegesr2   zneed posix.getgroupsr  zgetgroups(2) is broken on OSX)	r   r6   rs   rt   r   r   r  r2   saved_groupsr$   s    r   r&   PosixGroupsTester.setUp  sn    <<>Q##$;<<uk**##$:;;<<8###$CDD!OO-rM   c                 H   [        [        S5      (       a!  [        R                  " U R                  5        g [        [        S5      (       aW  [        R
                  " [        R                  " 5       5      R                  n[        R                  " XR                  S   5        g g )N	setgroupsri   r   )	r   r   r  r  rp   rj   r6   rq   ri   r%   r>   s     r   tearDownPosixGroupsTester.tearDown  sf    5+&&OOD--.UL))<</77DT#4#4Q#78 *rM   ri   ztest needs posix.initgroups()c                 $   [        U R                  =(       d    S/5      S-   n[        R                  " [        R
                  " 5       5      R                  n[        R                  " X!5        U R                  U[        R                  " 5       5        g r  )
maxr  rp   rj   r   r6   rq   ri   r  r2   )r%   r  r>   s      r   rw   !PosixGroupsTester.test_initgroups  s]    
 !!(aS)A-||ELLN+33!a*+rM   r  ztest needs posix.setgroups()c                     S/[        [        S5      5      4 H>  n[        R                  " U5        U R	                  U[        R
                  " 5       5        M@     g )Nr      )r   r  r   r  assertListEqualr2   )r%   r  s     r   test_setgroups PosixGroupsTester.test_setgroups  s@     sDrO,FOOF#  ):; -rM   )r  N)r"  r#  r$  r%  r&   r  rs   r&  r   r   rw   r  r6  r   rM   r   r  r    sb    .9 58:,:, 479<9<rM   r  c                      \ rS rSr\R
                  SSSS4rSrS rS r	S	 r
S
 rS rS rS rS rS rS r\R&                  " \" \S5      S5      S 5       rS rS r\R&                  " \" \S5      S5      S 5       rS r\\R8                  " \R:                  R=                  S5      S5      S 5       5       r\\R8                  " \R:                  R=                  S5      S5      \R8                  " \R@                  " 5       S   S:H  =(       a+    \!RD                  " S5      \!RF                  \!RH                  4;   S5      S 5       5       5       r%S r&S  r'S! r(S" r)S# r*S$r+g)%_PosixSpawnMixini  -I-Sr   r   Nc                 .    [         R                  SS/UQ7$ )Nr  r  )r   r   r%   argss     r   python_args_PosixSpawnMixin.python_args  s     d2T22rM   c                    [         R                  nU R                  [         R                  U5        SU< S3nU R	                  SU5      nU R                  US   U[        R                  5      n[        R                  " USS9  [        USS9 nU R                  UR                  5       [        U5      5        S S S 5        g ! , (       d  f       g = f)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_funcro   r   r   r   r   rF   r   r  )r%   pidfilescriptr  r   r  s         r   test_returns_pid!_PosixSpawnMixin.test_returns_pid  s    ""	(('2k "
 f-ood1gtRZZ8S1-'G,QVVXs3x0 -,,s   *C  
Cc                 8   Sn U R                  UU/[        R                  5      n[        R                  " US5      u  p4U R	                  X25        U R                  US5        g ! [        [        4 a&  nU R	                  UR                  U5         S nAg S nAff = f)Nno_such_executabler   )	r  ro   r   waitpidrF   r  FileNotFoundErrorr  rV  )r%   r  r   pid2statusexcs         r   test_no_such_executable(_PosixSpawnMixin.test_no_such_executable  s    1	+//"4#5"6"$**.C ::c1-LDT'* "?3 	?S\\+=>>	?s   "A# #B3BBc                    [         R                  nU R                  [         R                  U5        SU< S3nU R	                  SU5      nU R                  US   U0 [        R                  ESS0E5      n[        R                  " USS9  [        USS	9 nU R                  UR                  5       S5        S S S 5        g ! , (       d  f       g = f)
Nr  z^, "w", encoding="utf-8") as envfile:
                envfile.write(os.environ['foo'])
        r   r   rl   barr   r  r  )r   r   r   r   r  r  ro   r   r   r   r   rF   r   )r%   envfiler  r  r   r  s         r   test_specify_environment)_PosixSpawnMixin.test_specify_environment  s    ""	(('2k "	
 f-ood1gt::UE:<S1-'G,QVVXu- -,,s   !B==
Cc                     U R                  U R                  S   U R                  [        R                  S S9n[        R
                  " USS9  g Nr   file_actionsr   r  NOOP_PROGRAMro   r   r   r   r%   r   s     r   test_none_file_actions'_PosixSpawnMixin.test_none_file_actions"  sH    ooa JJ	  
 	S1-rM   c                     U R                  U R                  S   U R                  [        R                  / S9n[        R
                  " USS9  g r  r  r  s     r   test_empty_file_actions(_PosixSpawnMixin.test_empty_file_actions+  sH    ooa JJ	  
 	S1-rM   c                     U R                  [        R                  [        R                  SS/[        R                  SS9n[
        R                  " USS9  g )Nr   r   Fresetidsr   r   r  r   r   ro   r   r   r   r  s     r   test_resetids_explicit_default/_PosixSpawnMixin.test_resetids_explicit_default4  sF    ooNN^^T6*JJ	  
 	S1-rM   c                     U R                  [        R                  [        R                  SS/[        R                  SS9n[
        R                  " USS9  g )Nr   r   Tr  r   r   r  r  s     r   test_resetids_PosixSpawnMixin.test_resetids=  sF    ooNN^^T6*JJ	  
 	S1-rM   c                     U R                  [        R                  [        R                  SS/[        R                  [        R
                  " 5       S9n[        R                  " USS9  g )Nr   r   	setpgroupr   r   )r  r   r   ro   r   r4   r   r   r  s     r   test_setpgroup_PosixSpawnMixin.test_setpgroupF  sL    ooNN^^T6*JJjjl	  
 	S1-rM   c                     U R                  [        5         U R                  [        R                  [        R                  SS/[
        R                  SS9  S S S 5        g ! , (       d  f       g = f)Nr   r   023r  )r;   r<   r  r   r   ro   r   r$   s    r   test_setpgroup_wrong_type*_PosixSpawnMixin.test_setpgroup_wrong_typeO  sJ    y)OOCNN ^^T6:JJ%  9 *))s   A A
A-pthread_sigmaskzneed signal.pthread_sigmask()c                     [         R                  " S5      nU R                  [        R                  [        R                  SU/[
        R                  [        R                  /S9n[        R                  " USS9  g )NI            import signal
            signal.raise_signal(signal.SIGUSR1)r   
setsigmaskr   r   )textwrapdedentr  r   r   ro   r   r2  SIGUSR1r   r   )r%   r   r   s      r   test_setsigmask _PosixSpawnMixin.test_setsigmaskU  sd       3 4 ooNN^^T4(JJ'	  
 	S1-rM   c           	         U R                  [        5         U R                  [        R                  [        R                  SS/[
        R                  SS9  S S S 5        U R                  [        5         U R                  [        R                  [        R                  SS/[
        R                  S/S9  S S S 5        U R                  [        5         U R                  [        R                  [        R                  SS/[
        R                  [        R                  [        R                  S-   /S9  S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr   r   "   r  jr8   
r;   r<   r  r   r   ro   r   r/  r2  NSIGr$   s    r   test_setsigmask_wrong_type+_PosixSpawnMixin.test_setsigmask_wrong_typed  s    y)OOCNN ^^T6:JJ2  7 * y)OOCNN ^^T6:JJC5  : * z*OOCNN ^^T6:JJFKK4:KKM4C  D +* *) *) +*&   A D;3AEA!E;
E	
E
E+c                 @   [         R                  " 5       u  pU R                  [         R                  U5         [         R                  " US5        [
        R                  " SU S35      n U R                  [        R                  [        R                  SU/[         R                  SS9n[         R                  " U5        [        R                  " WSS	9  [         R                   " US
5      n[#        U5      n[         R$                  " [         R&                  " 5       5      nU R)                  X5        g ! [         a  nU R                  SU< 35         S nANS nAf[         a  nU R                  SU< 35         S nANS nAff = f! [         R                  " U5        f = f)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   )ro   r  r   r   set_inheritabler  r  r  r   r   r   r   r   r  r   r   r   r.  getsidr3   r  )	r%   rfdwfdr   r   r  output	child_sid
parent_sids	            r   test_setsid_PosixSpawnMixin.test_setsids  s=   779#&	sD)?? (U $ D>oocnn'*~~tT&B&(jj & ? HHSMS1-c"K	YYryy{+
J2 ' C 9#ABB" > 4SG<==> HHSMsA   1F +?D2 2
F<EF F#E=8F =FF Fc                    [         R                   " [         R                  [         R                  5      n[        R                  " S5      n U R                  [        R                  [        R                  SU/[        R                  [         R                  /S9n[         R                   " [         R                  U5        [        R                  " U[         R                  * S9  g ! [         R                   " [         R                  U5        f = f)Nr  r   	setsigdefr   )r2  r  SIG_IGNr  r  r  r   r   ro   r   r   r   )r%   original_handlerr   r   s       r   test_setsigdef_PosixSpawnMixin.test_setsigdef  s     "==H  3 4	<//t,

!>>*	 " C MM&..*:;SFNN?; MM&..*:;s   AC# #'D
c           	         U R                  [        5         U R                  [        R                  [        R                  SS/[
        R                  SS9  S S S 5        U R                  [        5         U R                  [        R                  [        R                  SS/[
        R                  S/S9  S S S 5        U R                  [        5         U R                  [        R                  [        R                  SS/[
        R                  [        R                  [        R                  S-   /S9  S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr   r   r  r  r  r8   r  r$   s    r   test_setsigdef_wrong_type*_PosixSpawnMixin.test_setsigdef_wrong_type  s    y)OOCNN ^^T6:JJ"  6 * y)OOCNN ^^T6:JJ3%  9 * z*OOCNN ^^T6:JJ6;;A2N  P +* *) *) +*r  r  zbpo-34685: test can fail on BSDc           	      j   [         R                  " S5      n[         R                  " U5      n[        R                  " SU SU S35      nU R                  [        R                  [        R                  SU/[         R                  S [         R                  " U5      4S9n[        R                  " USS9  g 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   ro   r   r  r  r  r  r   r   r   r  r   r   r%   policypriorityr   r   s        r   test_setscheduler_only_param-_PosixSpawnMixin.test_setscheduler_only_param  s     &&q),,V4 $,,28 477?j A	 ! " ooNN^^T4(JJR^^H56	  
 	S1-rM   r   glibcz)Skip test due to glibc posix_spawn policyc           	      j   [         R                  " S5      n[         R                  " U5      n[        R                  " SU SU S35      nU R                  [        R                  [        R                  SU/[         R                  U[         R                  " U5      4S9n[        R                  " USS9  g r  r  r  s        r   test_setscheduler_with_policy._PosixSpawnMixin.test_setscheduler_with_policy  s     &&q),,V4 $,,28 477?j A	 ! " ooNN^^T4(JJr~~h78	  
 	S1-rM   c                 l   [         R                  S[         R                  R                  [        5      [         R
                  S4[         R                  S4[         R                  SS4/nU R                  U R                  S   U R                  [         R                  US9n[        R                  " USS9  g )NrE   r   r8   r   r  r   )ro   POSIX_SPAWN_OPENr   realpathrW  r   POSIX_SPAWN_CLOSEPOSIX_SPAWN_DUP2r  r  r   r   r   )r%   r  r   s      r   test_multiple_file_actions+_PosixSpawnMixin.test_multiple_file_actions  s      !RWW%5%5h%?aP!!1%  !Q'

 ood//2"// jj+7  9 	S1-rM   c                    U R                   nU R                  [        5         U R                  US   U[        R
                  S /S9  S S S 5        U R                  [        5         U R                  US   U[        R
                  S/S9  S S S 5        U R                  [        5         U R                  US   U[        R
                  S/S9  S S S 5        U R                  [        5         U R                  US   U[        R
                  S/S9  S S S 5        U R                  [        5         U R                  US   U[        R
                  [        R                  4/S9  S S S 5        U R                  [        5         U R                  US   U[        R
                  [        R                  SS4/S9  S S S 5        U R                  [        5         U R                  US   U[        R
                  [        R                  S 4/S9  S S S 5        U R                  [        5         U R                  US   U[        R
                  [        R                  S[        S	-   [        R                  S4/S9  S S S 5        g ! , (       d  f       GN6= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNg= f! , (       d  f       GN&= f! , (       d  f       N= f! , (       d  f       g = f)
Nr   r  r   r{   )i90  r8   r   rE   r  )r  r;   r<   r  ro   r   r  r/  r  rW  r   r  s     r   test_bad_file_actions&_PosixSpawnMixin.test_bad_file_actions  se     y)OODGT2::*.  1 * y)OODGT2::*,  / * y)OODGT2::*1  4 * y)OODGT2::*2  5 * y)OODGT2::+-+?+?*A)B  D * y)OODGT2::+-+?+?A*F)G  I * y)OODGT2::+-+?+?*F)G  I * z*OODGT2::+-+>+>+,ho+-;;+; *<  = +*+ *) *) *) *) *) *) *) +*s`   %I6$%J&%J(%J,*4J>;6K5K" AK36
J
J
J),
J;>
K
K"
K03
Lc                 N   [         R                  nU R                  [         R                  U5        Sn[        R
                  SU[        R                  [        R                  -  [        R                  -  [        R                  [        R                  -  4/nU R                  SU5      nU R                  US   U[        R                  US9n[        R                   " USS9  [#        USS9 nU R%                  UR'                  5       S	5        S S S 5        g ! , (       d  f       g = f)
NOif 1:
            import sys
            sys.stdout.write("hello")
            r8   r   r   r  r   r  r  hello)r   r   r   r   ro   r  r   r   O_TRUNCr  r  r  r  r  r   r   r   r   rF   r   )r%   rX  r  r  r  r   r  s          r   test_open_file_PosixSpawnMixin.test_open_file	  s    ""	(('2
   !Wbjj(2::5t||+-

 f-ood1gtRZZ+7  9 	S1-'G,QVVXw/ -,,s   ,!D
D$c                    [         R                  nU R                  [         R                  U5        SU< S3nU R	                  SU5      nU R                  US   U[        R                  [        R                  S4/S9n[        R                  " USS9  [        USS9 nU R                  UR                  5       S	[        R                  -  5        S S S 5        g ! , (       d  f       g = f)
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  ro   r   r  r   r   r   rF   r   r   r  )r%   	closefiler  r  r   r  s         r   test_close_file _PosixSpawnMixin.test_close_file  s    $$		(()4
 %- ( f-ood1gtRZZ-/-A-A1,E+F  H 	S1-)g.!QVVX~'CD /..s   2C
C&c                    [         R                  nU R                  [         R                  U5        Sn[	        US5       n[
        R                  UR                  5       S4/nU R                  SU5      nU R                  US   U[
        R                  US9n[        R                  " USS9  S S S 5        [	        USS	9 nU R                  UR                  5       S
5        S S S 5        g ! , (       d  f       NB= f! , (       d  f       g = f)Nr  r   r8   r   r   r  r   r  r  r  )r   r   r   r   r   ro   r  r   r  r  r   r   r   rF   r   )r%   dupfiler  	childfiler  r  r   r  s           r   rg  _PosixSpawnMixin.test_dup20  s    ""	(('2 '4 I$$i&6&6&8!<L ##D&1D//$q'4/; " =C  q1 ! 'G,QVVXw/ -, !  -,s   A-C(>!C9(
C69
Dr   ),r"  r#  r$  r%  r   r   r  r  r  r  r  r  r  r  r  r  r  r  rs   r&  r   r2  r  r  r  r  r  r5  r+  r  r  r  libc_verro   r   SCHED_BATCH
SCHED_IDLEr  r  r  r  r  rg  r6  r   rM   r   r  r    s   NND$f=LJ31+......9 ):;:<.<.D3> ):;8:<:<"P __S\\,,-BC68.8 ." __S\\,,-BC68__X&&(+w6 '**1-2' ' A	B
.B8 ."
.=:0(E&0rM   r  posix_spawnztest needs os.posix_spawnc                   (    \ rS rSr\" \SS5      rSrg)TestPosixSpawniC  r(  Nr   )r"  r#  r$  r%  r9   r   r  r6  r   rM   r   r*  r*  C  s     t4JrM   r*  posix_spawnpztest needs os.posix_spawnpc                   L    \ rS rSr\" \SS5      r\R                  S 5       r	Sr
g)TestPosixSpawnPiI  r+  Nc                    [         R                  " 5       nU R                  [        R                  U5        Sn[
        R                  R                  X5      n[
        R                  " [        R                  U5         [
        R                  R                  U[
        R                  S   45      nUSSSS4n[        R                  " SU< S35      nSU4n[!        USU06  g ! [         a    Un N@f = f)	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  ro   r   r  r  r   r   pathsepr   rr   r  r  r   )r%   temp_dirprogramprogram_fullpathr   
spawn_argsr   r  s           r   test_posix_spawnp!TestPosixSpawnP.test_posix_spawnpN  s     ##%	(((3177<<:


3>>#34	::??Hbjj.@#ABD tT48
    d|$*T*%  	D	s   =2C! !C0/C0r   )r"  r#  r$  r%  r9   r   r  r   r1  r7  r6  r   rM   r   r-  r-  I  s*     5J""+ #+rM   r-  r  ztest weak linking on macOSc                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rSrg)TestPosixWeaklinkingio  c                 "   SS K nSS KnUR                  5       nU Vs1 s H'  oDR                  S5      (       d  M  X4   (       d  M%  UiM)     snU l        [        S UR                  " 5       S   R                  S5       5       5      U l        g s  snf )Nr   HAVE_c              3   8   #    U  H  n[        U5      v   M     g 7fr{   r  )r  parts     r   r  -TestPosixWeaklinking.setUp.<locals>.<genexpr>|  s     T3S4SYY3Sr  r  )r  r  get_config_varsr  	availabler  mac_verr   )r%   r  r  config_varsnms        r   r&   TestPosixWeaklinking.setUpv  sn    //1(3c"}}W7M2R]Ra2cT83C3C3Ea3H3N3Ns3STT ds   BBBc                 T    XR                   ;  a  [        R                  " U S35      eg )Nz not weak-linked)rA  rs   rt   r  s     r   _verify_available&TestPosixWeaklinking._verify_available~  s*    ~~%##tf,<$=>> &rM   c                 H   U R                  S5        U R                  S:  aA  U R                  [        [        S5      S5        U R                  [        [        S5      S5        g U R                  [        [        S5      S5        U R                  [        [        S5      S5        g )	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)rG  rB  r|   r   ro   rm  r$   s    r   r  !TestPosixWeaklinking.test_pwritev  sz    ~.<<8#OOGB	24QROOGB13NO WR35NOWR24KLrM   c                 R   U R                  S5        U R                  S:  a!  U R                  S[        R                  5        g U R                  S[        R                  5        U R                  [        S5         [        R                  " SSS9  S S S 5        g ! , (       d  f       g = f)NHAVE_FSTATATr   r   dir_fd unavailablefiler   rH  )
rG  rB  r  r   _have_functionsassertNotInrV  r   ro   r  r$   s    r   r  TestPosixWeaklinking.test_stat  su    ~.<<8#MM.%*?*?@ ^U-B-BC''(;=QRq) SRR   9B
B&c                     U R                  S5        U R                  S:  a!  U R                  S[        R                  5        g U R                  S[        R                  5        g )NHAVE_PTSNAME_R)r   rm   r   )rG  rB  r  r   rQ  rR  r$   s    r   test_ptsname_r#TestPosixWeaklinking.test_ptsname_r  sI    /0<<;&MM*E,A,AB-u/D/DErM   c                    U R                  S5        U R                  S:  a!  U R                  S[        R                  5        g U R                  S[        R                  5        U R                  [        S5         [        R                  " S[        R                  SS9  S S S 5        U R                  [        S5         [        R                  " S[        R                  SS	9  S S S 5        U R                  [        S
5         [        R                  " S[        R                  SS9  S S S 5        g ! , (       d  f       N= f! , (       d  f       Nc= f! , (       d  f       g = f)NHAVE_FACCESSATrN  rO  rP  r   rH  zfollow_symlinks unavailableFr4  zeffective_ids unavailableT)effective_ids)rG  rB  r  r   rQ  rR  rV  r   ro   r  r  r$   s    r   r   TestPosixWeaklinking.test_access  s    /0<<8#MM*E,A,AB -u/D/DE''(;=QR		&"''!4 S ''(;=Z[		&"''5A \ ''(;=XY		&"''> ZY SR \[ ZYs$   9%D-<%D>?%E-
D;>
E
Ec                    U R                  S5        U R                  S:  a!  U R                  S[        R                  5        g U R                  S[        R                  5        U R                  S[        R                  5        U R                  [        S5         [        R                  " SSSS9  S S S 5        g ! , (       d  f       g = f)	NHAVE_FCHMODATrN  HAVE_LCHMODrO  rP  i  r   rH  )
rG  rB  r  r   rQ  rR  rV  r   ro   r%  r$   s    r   
test_chmodTestPosixWeaklinking.test_chmod  s    /<<8#MM/5+@+@A _e.C.CDMM-)>)>?''(;=QRq1 SRRs   B99
Cc                    U R                  S5        U R                  S:  a!  U R                  S[        R                  5        g U R                  S[        R                  5        U R                  S[        R                  5        U R                  [        S5         [        R                  " SSSSS9  S S S 5        g ! , (       d  f       g = f)NHAVE_FCHOWNATrN  HAVE_LCHOWNrO  rP  r   rH  )
rG  rB  r  r   rQ  rR  rV  r   ro   r  r$   s    r   r  TestPosixWeaklinking.test_chown  s    /<<8#MM/5+@+@A _e.C.CDMM-)>)>?''(;=QRAa0 SRRs   B::
Cc                 >   U R                  S5        U R                  S:  a!  U R                  S[        R                  5        g U R                  S[        R                  5        U R                  [        S5         [        R                  " SSSS9  S S S 5        U R                  [        S5         [        R                  " SSSS	9  S S S 5        U R                  [        S5         [        R                  " SSSSS
9  S S S 5        [        R                  " 5        n[        R                  R                  US5      n[        R                  R                  US5      n[        R                  R                  US5      n[        US5       nUR                  S5        S S S 5        [        R                   " SU5        U R#                  [$        5         [        R                  " XBSS9  S S S 5        U R#                  [$        5         [        R                  " XBSS9  S S S 5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GNy= f! , (       d  f       GNU= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       No= f! , (       d  f       g = f)NHAVE_LINKATrN  zsrc_dir_fd unavailablesourcer  r   rb  zdst_dir_fd unavailablerc  ra  r@  r   dataTr4  F)rG  rB  r  r   rQ  rR  rV  r   ro   r@  r   r3  r   r  r   r   r  r;   FileExistsError)r%   r  	link_pathtarget_pathsource_pathr   s         r   	test_linkTestPosixWeaklinking.test_link  s   }-<<8#MM-)>)>? ]E,A,AB''(;=UV(: W ''(;=UV(: W ''(;=UV(aH W ##%GGLLF;	 ggll9h? ggll9h?+s+rHHV$ , 

8Y/ &&7GGKDI 8 &&7GGKEJ 8# &% WV WV WV ,+ 87 87# &%sy   9H%.H7#I	A-JI4JI,!J>I=J%
H47
I	
I
I)	%J,
I:	6J=
J	J
Jc                    U R                  S5        U R                  S:  a!  U R                  S[        R                  5        g U R                  S[        R                  5        U R                  [        S5         [        R                  " S5        S S S 5        U R                  [        S5         [        R                  " S5        S S S 5        g ! , (       d  f       ND= f! , (       d  f       g = f)NHAVE_FDOPENDIRrN  zClistdir: path should be string, bytes, os.PathLike or None, not intr   zCscandir: path should be string, bytes, os.PathLike or None, not int)rG  rB  r  r   rQ  rR  rV  r<   ro   r  scandirr$   s    r   test_listdir_scandir)TestPosixWeaklinking.test_listdir_scandir  s    /0<<8#MM*E,A,AB -u/D/DE''	3xy

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

1 zy zy zys   9C.C
C
C-c                 R   U R                  S5        U R                  S:  a!  U R                  S[        R                  5        g U R                  S[        R                  5        U R                  [        S5         [        R                  " SSS9  S S S 5        g ! , (       d  f       g = f)NHAVE_MKDIRATrN  rO  dirr   rH  )
rG  rB  r  r   rQ  rR  rV  r   ro   r*  r$   s    r   
test_mkdirTestPosixWeaklinking.test_mkdir  su    ~.<<8#MM.%*?*?@ ^U-B-BC''(;=QRq) SRRrT  c                 R   U R                  S5        U R                  S:  a!  U R                  S[        R                  5        g U R                  S[        R                  5        U R                  [        S5         [        R                  " SSS9  S S S 5        g ! , (       d  f       g = f)NHAVE_MKFIFOATrm   r   rO  r   r   rH  )
rG  rB  r  r   rQ  rR  rV  r   ro   r  r$   s    r   r   TestPosixWeaklinking.test_mkfifo	  su    /<<7"MM/5+@+@A _e.C.CD''(;=QR		&+ SRRrT  c                 R   U R                  S5        U R                  S:  a!  U R                  S[        R                  5        g U R                  S[        R                  5        U R                  [        S5         [        R                  " SSS9  S S S 5        g ! , (       d  f       g = f)NHAVE_MKNODATr~  rO  r   r   rH  )
rG  rB  r  r   rQ  rR  rV  r   ro   r  r$   s    r   r  TestPosixWeaklinking.test_mknod	  su    ~.<<7"MM.%*?*?@ ^U-B-BC''(;=QR* SRRrT  c                    U R                  S5        U R                  S:  a!  U R                  S[        R                  5        g U R                  S[        R                  5        U R                  [        S5         [        R                  " SSSS9  S S S 5        U R                  [        S5         [        R                  " SSSS9  S S S 5        U R                  [        S5         [        R                  " SSSS9  S S S 5        U R                  [        S5         [        R                  " SSSS9  S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nf= f! , (       d  f       g = f)	NHAVE_RENAMEATrN  z%src_dir_fd and dst_dir_fd unavailableabr   ri  rj  )rG  rB  r  r   rQ  rR  rV  r   ro   r  r  r$   s    r   test_rename_replace(TestPosixWeaklinking.test_rename_replace	  s   /<<8#MM/5+@+@A _e.C.CD''(;=de		#sq1 f ''(;=de		#sq1 f ''(;=de

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

32 fe fe fe fe fes0   9D8.E	#EE+8
E	
E
E(+
E9c                    U R                  S5        U R                  S:  a!  U R                  S[        R                  5        g U R                  S[        R                  5        U R                  [        S5         [        R                  " SSS9  S S S 5        U R                  [        S5         [        R                  " SSS9  S S S 5        g ! , (       d  f       NC= f! , (       d  f       g = f)NHAVE_UNLINKATrN  rO  r   r   rH  )rG  rB  r  r   rQ  rR  rV  r   ro   r   r+  r$   s    r   test_unlink_rmdir&TestPosixWeaklinking.test_unlink_rmdir1	  s    /<<8#MM/5+@+@A _e.C.CD''(;=QR		&+ S ''(;=QR* SR SR SRs   9C-C
C
C+c                 p   U R                  S5        U R                  S:  a!  U R                  S[        R                  5        g U R                  S[        R                  5        U R                  [        S5         [        R                  " S[        R                  SS9  S S S 5        g ! , (       d  f       g = f)NHAVE_OPENATrN  rO  r   r   rH  )rG  rB  r  r   rQ  rR  rV  r   ro   r   r   r$   s    r   	test_openTestPosixWeaklinking.test_open?	  s{    }-<<8#MM-)>)>? ]E,A,AB''(;=QRA6 SRRs   9%B''
B5c                 R   U R                  S5        U R                  S:  a!  U R                  S[        R                  5        g U R                  S[        R                  5        U R                  [        S5         [        R                  " SSS9  S S S 5        g ! , (       d  f       g = f)NHAVE_READLINKATrN  rO  r   r   rH  )
rG  rB  r  r   rQ  rR  rV  r   ro   rs  r$   s    r   test_readlink"TestPosixWeaklinking.test_readlinkJ	  sx    01<<8#MM+U-B-BC .0E0EF''(;=QRFA. SRRrT  c                 T   U R                  S5        U R                  S:  a!  U R                  S[        R                  5        g U R                  S[        R                  5        U R                  [        S5         [        R                  " SSSS9  S S S 5        g ! , (       d  f       g = f)NHAVE_SYMLINKATrN  rO  r  r  r   rH  )
rG  rB  r  r   rQ  rR  rV  r   ro   r  r$   s    r   test_symlink!TestPosixWeaklinking.test_symlinkU	  sz    /0<<8#MM*E,A,AB -u/D/DE''(;=QR

3Q/ SRRs   9B
B'c                    U R                  S5        U R                  S5        U R                  S:  aA  U R                  S[        R                  5        U R                  S[        R                  5        g U R                  S[        R                  5        U R                  S[        R                  5        U R                  [        S5         [        R                  " SSS9  S S S 5        g ! , (       d  f       g = f)NHAVE_FUTIMENSHAVE_UTIMENSAT)r   rm   rO  r   r   rH  )
rG  rB  r  r   rQ  rR  rV  r   ro   r-  r$   s    r   r  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RRs   
C))
C7)rA  rB  N)r"  r#  r$  r%  r&   rG  r  r  rW  r  r`  r  rp  ru  rz  r  r  r  r  r  r  r  r  r6  r   rM   r   r:  r:  o  sf    U?M	*F?"
2
1$KN	*	,	+3(+	7	/	0+rM   r:  c                      \ rS rSr\R
                  " \" \S5      S5      \R
                  " \" \S5      S5      \R
                  " \R                  R                  S5      S5      \
R                  " SS	S	5      S
 5       5       5       5       rSrg)NamespacesTestsio	  unsharezneeds os.unshare()setnszneeds os.setns()z/proc/self/ns/utszneed /proc/self/ns/utsrE   r   c                      Sn[        SU5        g )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_setns"NamespacesTests.test_unshare_setnsr	  s    
"H 	t$rM   r   N)r"  r#  r$  r%  rs   r&  r   ro   r   r  r   r-  r  r6  r   rM   r   r  r  o	  s     Y/1EFW-/AB(;<>VW##Aq!,%% - X C G%%rM   r  c                  .    [         R                  " 5         g r{   )r   reap_childrenr   rM   r   tearDownModuler  	  s    rM   __main__)5r   r   test.supportr   r   r   test.support.script_helperr   r  r   r   r2  r,  ro   r  r  r  r0  rs   r!   r  
contextlibr	   r   ImportErrorrJ  rp   r   r  
gettempdirr   r  r&  maxsizer  r,  r)  r   r5  TestCaser   r8  r  r  r   r.  r*  r-  r:  r  r  r"  mainr   rM   r   <module>r     sO    ! " ( 7   
   	        % h113'..1AAC ""KK%J!6!6!I'//J. $$_%68VWz0(## z0|-LIX&& LI^!<)) !<HW0 W0t
 
WR/1LM5X&&(8 5  N5 
WR02NO!+h'')9 !+  P!+H 
S\\X-/KL|+8,, |+ M|+~,%h'' ,%^ zMMO QL  
  
Cs$   I I 
IIII