3
sY]9#                 @   sn   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eedsHejdG dd dej	Z
edkrjej  dS )z
Tests for kqueue wrapper.
    Nkqueueztest works only on BSDc               @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )
TestKQueuec             C   sT   t j }| j|j dk|j  | j|j  |j  | j|j | jt|j d S )Nr   )selectr   
assertTruefilenoclosedcloseassertRaises
ValueError)selfkq r   !lib/python3.6/test/test_kqueue.pytest_create_queue   s    zTestKQueue.test_create_queuec       
      C   s*  ddl m}m}m}m} tjtjtj}| j	tj
| tj|}tjd}| j|j| | j|jtj | j|jtj | j|jd | j|jd | j|jd | j|| | j|| | j||k  | j||k xD||||fD ]4}| jt||d  | jt||d | jt||d qW tj|tj}| j|j| | j|jtj | j|jtj | j|jd | j|jd | j|jd | j|| | j|| tj|tjtj}| j|j| | j|jtj | j|jtj | j|jd | j|jd | j|jd | j|| | j|| tjddddd	d
}| j|jd | j|jd | j|jd | j|jd | j|jd	 | j|jd
 | j|| | j|| d}	tj|	ddd|	d |	}| j|j|	 | j|jd | j|jd | j|jd | j|j|	d  | j|j|	 | j|| | j|| d}	tjdd|	}| j|jd | j|jd | j|j|	 | j|jd | j|jd | j|jd | j|| | j|| d}	tjddd|	}| j|jd | j|jd | j|jd | j|j|	 | j|jd | j|jd | j|| | j|| d S )Nr   )ltlegtgei     ev               i  i  l    )operatorr   r   r   r   osopendevnullO_WRONLY
addCleanupr   r   keventassertEqualidentfilterKQ_FILTER_READflags	KQ_EV_ADDZfflagsdataZudataZassertNotEqualr   r	   	TypeErrorKQ_FILTER_WRITEZKQ_EV_ONESHOT)
r   r   r   r   r   fdr   otheropZbignumr   r   r   test_create_event   s    

zTestKQueue.test_create_eventc             C   s  t j  }|jd |j  t j  }|jd y|jd|j d f W n6 tk
r| } z| j|jd t	j
 W Y d d }~X nX |j \}}tj }tjj|j }tj|j tjtjtjB }|j|gd tj|j tjtjtjB }|j|gd tj|j tjtjtjB }|j|gd tj|j tjtjtjB }|j|gd |jd dd}	tdd |	D }	| j|	t|j tjf|j tjfg |jd |jd	 xDtd
D ].}
|jd dd}	t|	dkrP tjd qW | jd tdd |	D }	| j|	t|j tjf|j tjf|j tjf|j tjfg tj|j tjtj}|j|gd tj|j tjtj}|j|gd tj|j tjtj}|j|gdd |jg dd}	tdd |	D }	| j|	t|j tjfg |j  |j  |j  d S )N	127.0.0.1r   Fr   r   c             s   s   | ]}|j |jfV  qd S )N)r#   r$   ).0er   r   r   	<genexpr>   s    z.TestKQueue.test_queue_event.<locals>.<genexpr>s   Hello!s   world!!!
   g      ?z'timeout waiting for event notificationsc             s   s   | ]}|j |jfV  qd S )N)r#   r$   )r0   r1   r   r   r   r2      s    gGz?c             s   s   | ]}|j |jfV  qd S )N)r#   r$   )r0   r1   r   r   r   r2      s    )r/   r   )socketZbindZlistenZsetblockingZconnectZgetsocknameOSErrorr"   argserrnoZEINPROGRESSZacceptr   r   Zfromfdr   r!   r*   r'   KQ_EV_ENABLEcontrolr%   setsendrangelentimeZsleepZfailZKQ_EV_DELETEr   )r   ZserverSocketZclientr1   ZserverZaddrr   Zkq2r   Zeventsir   r   r   test_queue_eventp   s    

&









zTestKQueue.test_queue_eventc             C   s   t j }tj \}}|jd t j|t jt jt jB }t j|t jt jt jB }|j	||gdd}| j
| | j|d jt j@  | j|j|d jd |j  |j  |j  d S )Ns   foor   r   )r   r   r4   
socketpairr;   r!   r%   r'   r8   r9   r   assertFalser&   ZKQ_EV_ERRORr"   Zrecvr(   r   )r   r   abZevent1Zevent2rr   r   r   testPair   s    

zTestKQueue.testPairc                s   t j }tj \}}t j|t jt jt jB  |j gd |j fd G  fddd}|j| d |jt	 gd |j
  |j
  |j
  d S )Nr   c                   s    e Zd Zdd Z fddZdS )z+TestKQueue.test_issue30058.<locals>.BadListc             S   s   dS )Nr   r   )r   r   r   r   __len__   s    z3TestKQueue.test_issue30058.<locals>.BadList.__len__c             3   s   xt dD ]
} V  q
W d S )Nd   )r<   )r   r?   )r   r   r   __iter__   s    z4TestKQueue.test_issue30058.<locals>.BadList.__iter__N)__name__
__module____qualname__rG   rI   r   )r   r   r   BadList   s   rM   )r   r   r4   rA   r!   r%   r'   r8   r9   iterr   )r   r   rC   rD   rM   r   )r   r   test_issue30058   s    zTestKQueue.test_issue30058c             C   s   t td}| j|j |j }tj }| j|j t | j	|j
 |j  | j|j
 | jt|j |j  | jt|jd d d S )Nrbr   )r   __file__r    r   r   r   r   ZassertIsInstanceintrB   r   r   r	   r
   r9   )r   Z	open_filer+   r   r   r   r   
test_close   s    
zTestKQueue.test_closec             C   s.   t j }| j|j | jtj|j d d S )NF)r   r   r    r   r"   r   get_inheritabler   )r   r   r   r   r   test_fd_non_inheritable   s    z"TestKQueue.test_fd_non_inheritableN)
rJ   rK   rL   r   r.   r@   rF   rO   rS   rU   r   r   r   r   r      s   YSr   __main__)__doc__r7   r   r   r4   r>   ZunittesthasattrZSkipTestZTestCaser   rJ   mainr   r   r   r   <module>   s   

 y