B
    ʦZ^                 @   s   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mZ ddlm	Z	m
Z
mZmZmZmZ edZdd Ze ZG dd	 d	Zd
d Zdd ZG dd dejZdd Zedkre  dS )z%Test program for the fcntl C module.
    N)Process)verboseTESTFNunlinkrun_unittestimport_modulecpython_onlyfcntlc           
   C   s  y
t j W n tk
r"   d} Y nX d} tjds>tjdkrtddkrVd}d}nd}d}t|| | d	 d
d
d
t	j
d
}nltjdrtdd
d
d
t	j
d
d
}nFtjdkrtdt	j
d
d
d
d
d
d
}n td	|  d	 t	j
d
d
d
d
d
}|rtrtdt| |S )NZllZqq)ZnetbsdZfreebsdZopenbsddarwinl   iZlxxxxZhhr   ZgnukfreebsdZqqihhi)Zaix3Zaix4zhp-uxBZ	unixware7Zhhllliizstruct.pack: )osO_LARGEFILEAttributeErrorsysplatform
startswithstructcalcsizepackr	   ZF_WRLCKr   printrepr)Z	start_lenZoff_tZpid_tlockdata r   A/work/yifan.wang/lscsoft/opt/python37/lib/python3.7/test_fcntl.pyget_lockdata   s.    



 r   c               @   s   e Zd Zdd Zdd ZdS )BadFilec             C   s
   || _ d S )N)fn)selfr   r   r   r   __init__1   s    zBadFile.__init__c             C   s   | j S )N)r   )r   r   r   r   fileno3   s    zBadFile.filenoN)__name__
__module____qualname__r    r!   r   r   r   r   r   0   s   r   c             C   sD   t | d}z*yt|| W n tk
r0   Y nX W d |  X d S )Nzwb+)openr	   lockfBlockingIOErrorclose)fnamecmdfr   r   r   try_lockf_on_other_process_fail6   s    

r,   c             C   s0   t | d}t|| t|tj |  d S )Nzwb+)r%   r	   r&   LOCK_UNr(   )r)   r*   r+   r   r   r   try_lockf_on_other_process?   s    
r.   c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zedd Z	e
e doXe dkddd Zdd Ze
e dkddd Ze
e dkddd Zedd ZdS )	TestFcntlc             C   s
   d | _ d S )N)r+   )r   r   r   r   setUpG   s    zTestFcntl.setUpc             C   s$   | j r| j js| j   tt d S )N)r+   closedr(   r   r   )r   r   r   r   tearDownJ   s    
zTestFcntl.tearDownc             C   sh   t td| _t| j tjtj}tr2t	d| t| j tj
t}trZt	dt| | j  d S )Nwbz#Status from fcntl with O_NONBLOCK: z!String from fcntl with F_SETLKW: )r%   r   r+   r	   r!   F_SETFLr   
O_NONBLOCKr   r   F_SETLKWr   r   r(   )r   rvr   r   r   test_fcntl_filenoO   s    
zTestFcntl.test_fcntl_filenoc             C   s`   t td| _t| jtjtj}tr.td| t| jtj	t
}trRtdt| | j  d S )Nr3   z#Status from fcntl with O_NONBLOCK: z!String from fcntl with F_SETLKW: )r%   r   r+   r	   r4   r   r5   r   r   r6   r   r   r(   )r   r7   r   r   r   test_fcntl_file_descriptorZ   s    
z$TestFcntl.test_fcntl_file_descriptorc          	   C   s   |  t tdtjtj W d Q R X |  t ttdtjtj W d Q R X |  t tdtjtj W d Q R X |  t ttdtjtj W d Q R X d S )Nspam)assertRaises
ValueErrorr	   r4   r   r5   r   	TypeError)r   r   r   r   test_fcntl_bad_filee   s     zTestFcntl.test_fcntl_bad_filec          	   C   s   ddl m}m} | t t|d tjtj W d Q R X | t  tt	|d tjtj W d Q R X | t t|d tjtj W d Q R X | t  tt	|d tjtj W d Q R X d S )Nr   )INT_MAXINT_MIN   )
	_testcapir@   rA   r<   OverflowErrorr	   r4   r   r5   r   )r   r@   rA   r   r   r   test_fcntl_bad_file_overflowo   s     $ z&TestFcntl.test_fcntl_bad_file_overflowZarmZLinuxz2ARM Linux returns EINVAL for F_NOTIFY DN_MULTISHOTc          	   C   sr   yt j}t j}W n tk
r.   | d Y nX ttjtj	t
tj}zt  ||| W d t| X d S )Nz$F_NOTIFY or DN_MULTISHOT unavailable)r	   ZF_NOTIFYZDN_MULTISHOTr   ZskipTestr   r%   pathdirnameabspathr   O_RDONLYr(   )r   r*   flagsfdr   r   r   test_fcntl_64_bit|   s    
zTestFcntl.test_fcntl_64_bitc             C   s   t td| _| j }t|tj t|tj t| jtjtjB  t| jtj t|tj	 t|tj | 
ttjdtj | 
ttjdtj d S )Nzwb+r:   r;   )r%   r   r+   r!   r	   flockLOCK_SHr-   LOCK_NBLOCK_EXr<   r=   r>   )r   r!   r   r   r   
test_flock   s    
zTestFcntl.test_flockZAIXzAIX returns PermissionErrorc             C   sh   t td| _tjtjB }t| j| ttt|fd}|	  |
  t| jtj | |jd d S )Nzwb+)targetargsr   )r%   r   r+   r	   rP   rO   r&   r   r,   startjoinr-   assertEqualexitcode)r   r*   pr   r   r   test_lockf_exclusive   s    zTestFcntl.test_lockf_exclusivec             C   sh   t td| _tjtjB }t| j| ttt|fd}|	  |
  t| jtj | |jd d S )Nzwb+)rR   rS   r   )r%   r   r+   r	   rN   rO   r&   r   r.   rT   rU   r-   rV   rW   )r   r*   rX   r   r   r   test_lockf_share   s    zTestFcntl.test_lockf_sharec             C   s&   dd l }| ttj|jd tj d S )Nr   rB   )rC   r<   rD   r	   rM   r@   rN   )r   rC   r   r   r   test_flock_overflow   s    zTestFcntl.test_flock_overflowN)r"   r#   r$   r0   r2   r8   r9   r?   r   rE   unittestZskipIfr   machiner   systemrL   rQ   rY   rZ   r[   r   r   r   r   r/   E   s   
r/   c               C   s   t t d S )N)r   r/   r   r   r   r   	test_main   s    r_   __main__)__doc__r   r   r   r   r\   Zmultiprocessingr   Ztest.supportr   r   r   r   r   r   r	   r   r   r   r,   r.   ZTestCaser/   r_   r"   r   r   r   r   <module>   s"    	t