
W2                 @   sP  d  d l  Z  d  d l Z d  d l Z d  d l m Z e j d  Z d Z d d   Z Gd d   d e j	  Z
 Gd	 d
   d
  Z Gd d   d e  Z Gd d   d e e j  Z Gd d   d e e j  Z Gd d   d e e j  Z Gd d   d e  Z Gd d   d e  j  Z Gd d   d e e j  Z e d k rLe j   d S)    N)support	threading   c             C   s"   |  j  d k o! |  j   |  j  k S)Nr   )maxsizeqsize)q r   ?/afs/.cs/s/python-3.5.2/amd64_rhel6/lib/python3.5/test_queue.pyqfull   s    r
   c               @   s(   e  Z d  Z d d   Z d d   Z d S)_TriggerThreadc             C   s5   | |  _  | |  _ t j   |  _ t j j |   d  S)N)fnargsr   EventstartedEventThread__init__)selfr   r   r   r   r	   r      s    		z_TriggerThread.__init__c             C   s.   t  j d  |  j j   |  j |  j   d  S)Ng?)timesleepr   setr   r   )r   r   r   r	   run   s    	z_TriggerThread.runN)__name__
__module____qualname__r   r   r   r   r   r	   r      s   r   c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)BlockingTestMixinc             C   s   d  |  _  d  S)N)t)r   r   r   r	   tearDown1   s    zBlockingTestMixin.tearDownc             C   s   t  | |  |  _ |  j j   | |   |  _ |  j j j   sQ |  j d |  |  j j d  |  j j   r |  j d |  |  j S)Nz,blocking function '%r' appeared not to block
   z,trigger function '%r' appeared to not return)	r   r   startresultr   is_setfailjoinis_alive)r   
block_func
block_argstrigger_functrigger_argsr   r   r	   do_blocking_test4   s    		z"BlockingTestMixin.do_blocking_testc             C   s   t  | |  |  _ |  j j   z; y | |   Wn | k
 rG   Yn X|  j d |  Wd  |  j j d  |  j j   r |  j d |  |  j j j   s |  j d  Xd  S)Nzexpected exception of kind %rr   z,trigger function '%r' appeared to not returnz(trigger thread ended but event never set)r   r   r   r!   r"   r#   r   r    )r   r$   r%   r&   r'   Zexpected_exception_classr   r   r	   do_exceptional_blocking_testC   s    		z.BlockingTestMixin.do_exceptional_blocking_testN)r   r   r   r   r(   r)   r   r   r   r	   r   /   s   r   c               @   s   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 d   Z
 d d   Z d d   Z d S)BaseQueueTestMixinc             C   s   d |  _  t j   |  _ d  S)Nr   )cumr   Lockcumlock)r   r   r   r	   setUpY   s    	zBaseQueueTestMixin.setUpc          %   C   s-  | j    r t d   |  j | j    |  j | j    | j d  | j d  | j d  t d d d d g d d d d g d d d d g  } | j   | j   | j   g } |  j	 | | | j
 j d  x; t t d	  D]) } | j |  |  j | j    d
  q W|  j t |  d  d t } d t } | j |  |  j t |  d  |  j | j    |  j | j    y$ | j | d d |  j d  Wn t j k
 rYn Xy$ | j | d d |  j d  Wn t j k
 rYn X|  j | j | f | j f   |  j | j | d d f | j f   x t t  D] } | j   qTW|  j | j    d  y! | j d d  |  j d  Wn t j k
 rYn Xy! | j d d  |  j d  Wn t j k
 rYn X|  j | j f  | j d  |  j | j d | j d  d  S)Nz&Call this function with an empty queueo   iM     Queue	LifoQueuePriorityQueuez&Didn't seem to queue the correct data!   zQueue should not be emptyzQueue should not be full      zQueue should be fullblockr   z(Didn't appear to block with a full queuetimeoutg{Gz?z+Didn't appear to time-out with a full queueTr   zQueue should be emptyz*Didn't appear to block with an empty queuez-Didn't appear to time-out with an empty queueempty   )empty)Tr   )r;   )r   RuntimeError
assertTruer9   ZassertFalsefullputdictgetassertEqual	__class__r   range
QUEUE_SIZEr
   r!   queueFullr(   Empty)r   r   Ztarget_orderZactual_orderilastr>   r   r   r	   simple_queue_test]   sd    !

%z$BaseQueueTestMixin.simple_queue_testc          
   C   s[   xT | j    } | d k  r) | j   d  S|  j  |  j | 7_ Wd  QRX| j   q Wd  S)Nr   )rA   	task_doner-   r+   )r   r   xr   r   r	   worker   s    

zBaseQueueTestMixin.workerc             C   s   d |  _  x0 d D]( } t j d |  j d | f  j   q Wx! t d  D] } | j |  qI W| j   |  j |  j  t	 t d   d  x d D] } | j d	  q W| j   d  S)
Nr   r4   targetr   d   z0q.join() did not block until all tasks were done)r   r4   )r   r4   )
r+   r   r   rN   r   rD   r?   r"   rB   sum)r   r   rI   r   r   r	   queue_join_test   s    	&
z"BaseQueueTestMixin.queue_join_testc             C   s@   |  j    } y | j   Wn t k
 r. Yn X|  j d  d  S)Nz(Did not detect task count going negative)	type2testrL   
ValueErrorr!   )r   r   r   r   r	   test_queue_task_done   s    z'BaseQueueTestMixin.test_queue_task_donec             C   sZ   |  j    } |  j |  |  j |  y | j   Wn t k
 rH Yn X|  j d  d  S)Nz(Did not detect task count going negative)rT   rS   rL   rU   r!   )r   r   r   r   r	   test_queue_join   s    z"BaseQueueTestMixin.test_queue_joinc             C   s-   |  j  t  } |  j |  |  j |  d  S)N)rT   rE   rK   )r   r   r   r   r	   test_simple_queue   s    z$BaseQueueTestMixin.test_simple_queuec             C   sg   |  j  t  } |  j t   | j d d d Wd  QRX|  j t   | j d d d Wd  QRXd  S)Nr4   r8   rQ   rQ   )rT   rE   assertRaisesrU   r?   rA   )r   r   r   r   r	   &test_negative_timeout_raises_exception   s
    z9BaseQueueTestMixin.test_negative_timeout_raises_exceptionc             C   s   |  j  t  } x! t t  D] } | j d  q W|  j t j   | j d  Wd  QRXx t t  D] } | j   qg W|  j t j   | j   Wd  QRXd  S)Nr4   )	rT   rE   rD   
put_nowaitrY   rF   rG   
get_nowaitrH   )r   r   rI   r   r   r	   test_nowait   s    zBaseQueueTestMixin.test_nowaitc             C   s   |  j  d  } | j d  | j d  | j d  |  j t j   | j d  Wd  QRX|  j | j   d  d | _ |  j t j   | j d  Wd  QRXd  S)Nr6   r4   r5      )	rT   r?   rY   rF   rG   r[   rB   r   r   )r   r   r   r   r	   test_shrinking_queue   s    	z'BaseQueueTestMixin.test_shrinking_queueN)r   r   r   r.   rK   rN   rS   rV   rW   rX   rZ   r]   r_   r   r   r   r	   r*   X   s   9

r*   c               @   s   e  Z d  Z e j Z d S)	QueueTestN)r   r   r   rF   r1   rT   r   r   r   r	   r`      s   r`   c               @   s   e  Z d  Z e j Z d S)LifoQueueTestN)r   r   r   rF   r2   rT   r   r   r   r	   ra      s   ra   c               @   s   e  Z d  Z e j Z d S)PriorityQueueTestN)r   r   r   rF   r3   rT   r   r   r   r	   rb      s   rb   c               @   s   e  Z d  Z d S)FailingQueueExceptionN)r   r   r   r   r   r   r	   rc      s   rc   c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)FailingQueuec             G   s)   d |  _  d |  _ t j j |  |  d  S)NF)fail_next_putfail_next_getrF   r1   r   )r   r   r   r   r	   r      s    		zFailingQueue.__init__c             C   s1   |  j  r d |  _  t d   t j j |  |  S)NFzYou Lose)re   rc   rF   r1   _put)r   itemr   r   r	   rg      s    		zFailingQueue._putc             C   s.   |  j  r d |  _  t d   t j j |   S)NFzYou Lose)rf   rc   rF   r1   _get)r   r   r   r	   ri     s    		zFailingQueue._getN)r   r   r   r   rg   ri   r   r   r   r	   rd      s   rd   c               @   s(   e  Z d  Z d d   Z d d   Z d S)FailingQueueTestc          <   C   s  | j    r t d   x% t t d  D] } | j |  q) Wd | _ y$ | j d d d |  j d  Wn t k
 r Yn Xd | _ y$ | j d d d	 |  j d  Wn t k
 r Yn X| j d
  |  j t	 |  d  d | _ y- |  j
 | j d | j f   |  j d  Wn t k
 r1Yn X| j d
  d | _ y0 |  j | j d | j f  t  |  j d  Wn t k
 rYn X| j d
  |  j t	 |  d  | j   |  j t	 |  d  | j d
  |  j t	 |  d  |  j
 | j d | j f   x t t  D] } | j   qW|  j | j    d  | j d  d | _ y | j   |  j d  Wn t k
 rYn X|  j | j    d  d | _ y! | j d d	  |  j d  Wn t k
 rYn X|  j | j    d  | j   |  j | j    d  d | _ y0 |  j | j f  | j d t  |  j d  Wn t k
 rgYn X|  j | j    d  | j   |  j | j    d  d  S)Nz&Call this function with an empty queuer4   TZoopsr7   r   z)The queue didn't fail when it should haver8   g?rJ   zQueue should be fullr>   r   zQueue should not be fullzQueue should be emptyfirstzQueue should not be emptyr9   )full)rl   Tr   )rl   )zempty)r   r<   rD   rE   r?   re   r!   rc   r=   r
   r(   rA   r)   rf   )r   r   rI   r   r   r	   failing_queue_test  s    				
	
	
	
z#FailingQueueTest.failing_queue_testc             C   s*   t  t  } |  j |  |  j |  d  S)N)rd   rE   rm   )r   r   r   r   r	   test_failing_queue]  s    z#FailingQueueTest.test_failing_queueN)r   r   r   rm   rn   r   r   r   r	   rj   
  s   Qrj   __main__)rF   r   Zunittesttestr   import_moduler   rE   r
   r   r   r   r*   ZTestCaser`   ra   rb   	Exceptionrc   r1   rd   rj   r   mainr   r   r   r	   <module>   s"    )[