
    daf                         d Z ddlZddlZddlZddlZddlZddlZddlmZm	Z	m
Z
 ddlmZ ddlmZmZ  ed      Z G d d      Zd	 Zd
 Z G d dej(                        Zedk(  r ej.                          yy)z%Test program for the fcntl C module.
    N)verbosecpython_onlyget_pagesize)import_module)TESTFNunlinkfcntlc                       e Zd Zd Zd Zy)BadFilec                     || _         y Nfn)selfr   s     */root/Python-3.12.4/Lib/test/test_fcntl.py__init__zBadFile.__init__   s	        c                     | j                   S r   r   r   s    r   filenozBadFile.fileno   s    wwr   N)__name__
__module____qualname__r   r    r   r   r   r      s    r   r   c                     t        | d      }	 t        j                  ||       |j	                          y # t        $ r Y w xY w# |j	                          w xY wNwb+)openr	   lockfBlockingIOErrorclosefnamecmdfs      r   try_lockf_on_other_process_failr&      sL    UEAAs 	
	   	
	s    5 	AA  AA Ac                     t        | d      }t        j                  ||       t        j                  |t        j                         |j	                          y r   )r   r	   r   LOCK_UNr!   r"   s      r   try_lockf_on_other_processr)   "   s7    UEA	KK3	KK5==!GGIr   c                   H   e Zd Zd Zd Zed        Zd Zd Zd Z	e
d        Z ej                   ej                         j!                  d      xr  ej"                         d	k(  d
      d        Zd Z ej                   ej"                         dk(  d      d        Z ej                   ej"                         dk(  d      d        Ze
d        Z ej                  ej                  dk7  d      d        Z ej2                   eed      xr	  eed      d      d        Zy)	TestFcntlc                     d | _         y r   )r%   r   s    r   setUpzTestFcntl.setUp*   s	    r   c                     | j                   r0| j                   j                  s| j                   j                          t        t               y r   )r%   closedr!   r   r   r   s    r   tearDownzTestFcntl.tearDown-   s'    66$&&--FFLLNvr   c            
         	 t         j                   d} t        j                  j                  d      st        j                  dk(  rSt        j                  d      dk(  rd}d}nd}d}t        j                  ||z   |z   d	z   d
d
d
t        j                  d
      }nt        j                  j                  d      r*t        j                  dd
d
d
t        j                  d
d
      }nlt        j                  dv r+t        j                  dt        j                  d
d
d
d
d
d
      }n/t        j                  d	| z   d	z   t        j                  d
d
d
d
d
      }|rt        rt        dt        |             |S # t        $ r d} Y gw xY w)Nqqll)netbsdfreebsdopenbsddarwinl   ilxxxxhhr   gnukfreebsdqqihhi)zhp-uxB	unixware7hhllliizstruct.pack: )osO_LARGEFILEAttributeErrorsysplatform
startswithstructcalcsizepackr	   F_WRLCKr   printrepr)	start_lenoff_tpid_tlockdatas       r   get_lockdatazTestFcntl.get_lockdata2   s;   	NN ILL##$DE||x's#q({{55=5#84#?Aq#(==!5H\\$$]3{{8Q1emmQJH\\44{{9emmQ1aANH{{4	>$#6q!QPQSTUHotH~61  	I	s   E- -E<;E<c                    t        t        d      | _        t        j                  | j                  j	                         t        j
                  t        j                        }t        rt        d|       | j                         }t        j                  | j                  j	                         t        j                  |      }t        rt        dt        |             | j                  j                          y Nwbz#Status from fcntl with O_NONBLOCK: z!String from fcntl with F_SETLKW: )r   r   r%   r	   r   F_SETFLrA   
O_NONBLOCKr   rK   rQ   F_SETLKWrL   r!   r   rvrP   s      r   test_fcntl_filenozTestFcntl.test_fcntl_filenoP   s    fd#[[%--G7<$$&[[%..(C5tBx@r   c                    t        t        d      | _        t        j                  | j                  t        j                  t
        j                        }t        rt        d|       | j                         }t        j                  | j                  t        j                  |      }t        rt        dt        |             | j                  j                          y rS   )r   r   r%   r	   rU   rA   rV   r   rK   rQ   rW   rL   r!   rX   s      r   test_fcntl_file_descriptorz$TestFcntl.test_fcntl_file_descriptor\   s    fd#[[>7<$$&[[:5tBx@r   c                    | j                  t              5  t        j                  dt        j                  t        j
                         d d d        | j                  t              5  t        j                  t        d      t        j                  t        j
                         d d d        | j                  t              5  t        j                  dt        j                  t        j
                         d d d        | j                  t              5  t        j                  t        d      t        j                  t        j
                         d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   }xY w# 1 sw Y   y xY w)Nspam)assertRaises
ValueErrorr	   rU   rA   rV   r   	TypeErrorr   s    r   test_fcntl_bad_filezTestFcntl.test_fcntl_bad_fileh   s   z* 	:KKEMM2==9	:z* 	CKKU]]BMMB	Cy) 	>KKr}}=	>y) 	GKKF	G 	G	: 	:	C 	C	> 	>	G 	Gs/   4E'=E%4E1=E=E"%E.1E:=Fc                 :   ddl m}m} | j                  t              5  t
        j                  |dz   t
        j                  t        j                         d d d        | j                  t              5  t
        j                  t        |dz         t
        j                  t        j                         d d d        | j                  t              5  t
        j                  |dz
  t
        j                  t        j                         d d d        | j                  t              5  t
        j                  t        |dz
        t
        j                  t        j                         d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   )INT_MAXINT_MIN   )
	_testcapire   rf   r`   OverflowErrorr	   rU   rA   rV   r   )r   re   rf   s      r   test_fcntl_bad_file_overflowz&TestFcntl.test_fcntl_bad_file_overflowr   s!   .}- 	CKK!U]]BMMB	C}- 	LKK!,emmR]]K	L}- 	CKK!U]]BMMB	C}- 	LKK!,emmR]]K	L 	L	C 	C	L 	L	C 	C	L 	Ls1   7E,2A E97F#A F,E69FFFarmLinuxz2ARM Linux returns EINVAL for F_NOTIFY DN_MULTISHOTc                    	 t         j                  }t         j                  }t        j                  t
        j                  j                  t
        j                  j                  t                    t
        j                        }	 t         j                  |       t        j                  |       y # t        $ r | j	                  d       Y w xY w# t        j                  |       w xY w)Nz$F_NOTIFY or DN_MULTISHOT unavailable)r	   F_NOTIFYDN_MULTISHOTrC   skipTestrA   r   pathdirnameabspathr   O_RDONLYr!   )r   r$   flagsfds       r   test_fcntl_64_bitzTestFcntl.test_fcntl_64_bit   s    	B..C&&E WWRWW__RWW__V%<=r{{K	KKC'HHRL  	BMM@A	B HHRLs    B2 C 2CCC)c                 ,   t        t        d      | _        | j                  j                         }t        j                  |t        j                         t        j                  |t        j                         t        j                  | j                  t        j                  t        j                  z         t        j                  | j                  t        j                         t        j                  |t        j                         t        j                  |t        j                         | j                  t        t        j
                  dt        j                         | j                  t        t        j
                  dt        j                         y )Nr   r^   r_   )r   r   r%   r   r	   flockLOCK_SHr(   LOCK_NBLOCK_EXr`   ra   rb   )r   r   s     r   
test_flockzTestFcntl.test_flock   s    fe$FEMM*FEMM*DFFEMMEMM9:DFFEMM*FEMM*FEMM**ekk2u}}E)U[[&%--Hr   AIXzAIX returns PermissionErrorc                    t        t        d      | _        t        j                  t        j
                  z  }t        j                  | j                  |       t        j                  d      }|j                  t        t        |f      }|j                          |j                          t        j                  | j                  t        j                         | j                  |j                  d       y Nr   spawn)targetargsr   )r   r   r%   r	   r|   r{   r   multiprocessingget_contextProcessr&   startjoinr(   assertEqualexitcoder   r$   mpps       r   test_lockf_exclusivezTestFcntl.test_lockf_exclusive   s    fe$mmemm+DFFC ((1JJ=VSMJR			DFFEMM*Q'r   c                    t        t        d      | _        t        j                  t        j
                  z  }t        j                  | j                  |       t        j                  d      }|j                  t        t        |f      }|j                          |j                          t        j                  | j                  t        j                         | j                  |j                  d       y r   )r   r   r%   r	   rz   r{   r   r   r   r   r)   r   r   r(   r   r   r   s       r   test_lockf_sharezTestFcntl.test_lockf_share   s    fe$mmemm+DFFC ((1JJ8}JM			DFFEMM*Q'r   c                     dd l }| j                  t        t        j                  |j
                  dz   t        j                         y )Nr   rg   )rh   r`   ri   r	   ry   re   rz   )r   rh   s     r   test_flock_overflowzTestFcntl.test_flock_overflow   s/    -i6G6G6I--	)r   r7   z$F_GETPATH is only available on macosc           	      T   t        t        d      | _        t        j                  j                  t              j                  d      }t        j                  | j                  j                         t        j                  t        t        |                  }| j                  ||       y )NrT   zutf-8)r   r   r%   rA   rq   rs   encoder	   r   	F_GETPATHbyteslenr   )r   expectedress      r   test_fcntl_f_getpathzTestFcntl.test_fcntl_f_getpath   sf    fd#77??6*11':kk$&&--/5??E#h-<PQ3'r   F_SETPIPE_SZF_GETPIPE_SZzAF_SETPIPE_SZ and F_GETPIPE_SZ are not available on all platforms.c                 2   t        j                         \  }}	 t        j                  |t        j                        }|dz  }t	               }||k  rt        j                  d      t        j                  |t        j                  |       | j                  t        j                  |t        j                        |       t        j                  |       t        j                  |       y # t        j                  |       t        j                  |       w xY w)N   z+default pipesize too small to perform test.)
rA   piper	   r   r   unittestSkipTestr   r   r!   )r   test_pipe_rtest_pipe_wpipesize_defaultpipesizepagesize_defaults         r   test_fcntl_f_pipesizezTestFcntl.test_fcntl_f_pipesize   s     $&779 [	"${{;8J8JK'1,H+~**''AC CKKU%7%7BU[[e6H6HI%' HH[!HH[! HH[!HH[!s   B&C* *,DN)r   r   r   r-   r0   staticmethodrQ   rZ   r\   rc   r   rj   r   skipIfrE   machinerF   systemrw   r}   r   r   r   rD   r   
skipUnlesshasattrr	   r   r   r   r   r+   r+   (   sx   
  :

G 
L 
L X__%%e,M1Bg1M<>>I X___X__&%/1NO	( P	( X___X__&%/1NO	( P	( ) )
 X__S\\X-/UV( W( X~&I75.+IKM"M"r   r+   __main__)__doc__r   rE   rA   rG   rD   r   test.supportr   r   r   test.support.import_helperr   test.support.os_helperr   r   r	   r   r&   r)   TestCaser+   r   mainr   r   r   <module>r      sw      	  
  < < 4 1 	g n"!! n"b zHMMO r   