î
5dÝV  ã               @   sŸ   d  d l  Z  d  d l Z d  d l Z d  d l m Z d d l m Z d d l m Z m Z m	 Z	 Gd d „  d e ƒ Z
 d d	 „  Z e d
 k r› e j ƒ  n  d S)é    N)Úextrasé   )Údsn)ÚunittestÚConnectingTestCaseÚskip_before_postgresc               @   sj   e  Z d  Z d d „  Z d d „  Z e d d ƒ d d „  ƒ Z e d d ƒ d	 d
 „  ƒ Z d d „  Z d S)ÚCancelTestsc             C   s:   t  j |  ƒ |  j j ƒ  } | j d ƒ |  j j ƒ  d  S)Nz[
            CREATE TEMPORARY TABLE table1 (
              id int PRIMARY KEY
            ))r   ÚsetUpÚconnÚcursorÚexecuteÚcommit)ÚselfÚcur© r   ú>/tmp/pip-build-0jahl3lb/psycopg2/psycopg2/tests/test_cancel.pyr	   %   s
    zCancelTests.setUpc             C   s   |  j  j ƒ  d  S)N)r
   Úcancel)r   r   r   r   Útest_empty_cancel/   s    zCancelTests.test_empty_cancelé   é   c                s¥   g  ‰  ‡  ‡ f d d †  } ‡  f d d †  } t  j d | d ˆ j f ƒ } t  j d | d ˆ j f ƒ} | j ƒ  | j ƒ  | j ƒ  | j ƒ  ˆ j ˆ  g  ƒ d  S)Nc                s˜   |  j  ƒ  } yP ˆ j t j j | j d ƒ |  j ƒ  | j d ƒ ˆ j | j ƒ  d g ƒ Wn5 t	 k
 r“ } z ˆ  j
 | ƒ ‚  WYd  d  } ~ Xn Xd  S)Nzselect pg_sleep(60)zselect 1r   )r   )r   ÚassertRaisesÚpsycopg2Ú
extensionsÚQueryCanceledErrorr   ÚrollbackÚassertEqualÚfetchallÚ	ExceptionÚappend)r
   r   Úe)Úerrorsr   r   r   Úneverending6   s    
z,CancelTests.test_cancel.<locals>.neverendingc                sV   |  j  ƒ  } y |  j ƒ  Wn5 t k
 rQ } z ˆ  j | ƒ ‚  WYd  d  } ~ Xn Xd  S)N)r   r   r   r   )r
   r   r   )r    r   r   Ú	cancellerC   s    z*CancelTests.test_cancel.<locals>.cancellerÚtargetÚargsg333333Ó?)Ú	threadingÚThreadr
   ÚTimerÚstartÚjoinr   )r   r!   r"   Zthread1Zthread2r   )r    r   r   Útest_cancel2   s    



zCancelTests.test_cancelc             C   sÁ   t  j t d d ƒ} |  j t  j | j ƒ t j | ƒ | j ƒ  } | j	 d ƒ |  j
 | j ƒ  ƒ | j ƒ  |  j t  j j t j | ƒ | j	 d ƒ t j | ƒ |  j | j ƒ  d g ƒ d  S)NÚasyncTzselect pg_sleep(10000)zselect 1r   )r   )r   Úconnectr   r   ZOperationalErrorr   r   Zwait_selectr   r   Ú
assertTrueZisexecutingr   r   r   r   )r   Ú
async_connr   r   r   r   Útest_async_cancelV   s    
zCancelTests.test_async_cancelc             C   s3   t  j t d d ƒ} | j ƒ  |  j | j ƒ d  S)Nr+   T)r   r,   r   Úcloser-   Úclosed)r   r.   r   r   r   Útest_async_connection_cancele   s    
z(CancelTests.test_async_connection_cancelN)	Ú__name__Ú
__module__Ú__qualname__r	   r   r   r*   r/   r2   r   r   r   r   r   #   s
   
$r   c               C   s   t  j ƒ  j t ƒ S)N)r   Z
TestLoaderZloadTestsFromNamer3   r   r   r   r   Ú
test_suitek   s    r6   Ú__main__)r%   r   Zpsycopg2.extensionsr   Z
testconfigr   Z	testutilsr   r   r   r   r6   r3   Úmainr   r   r   r   Ú<module>   s   H