î
wÐR\Ï  ã               @   s±   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 d d l m Z 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_postgresÚslowc               @   sv   e  Z d  Z d d „  Z d d „  Z e e d d ƒ d d „  ƒ ƒ Z e 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ÚexecuteZcommit)ÚselfÚcur© r   úO/var/www/dbchiro/venv/lib/python3.4/site-packages/psycopg2/tests/test_cancel.pyr
   '   s
    zCancelTests.setUpc             C   s   |  j  j ƒ  d  S)N)r   Úcancel)r   r   r   r   Útest_empty_cancel1   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   ZrollbackÚassertEqualÚfetchallÚ	ExceptionÚappend)r   r   Úe)Úerrorsr   r   r   Úneverending9   s    
z,CancelTests.test_cancel.<locals>.neverendingc                sY   |  j  ƒ  } y |  j ƒ  Wn5 t k
 rQ } z ˆ  j | ƒ ‚  WYd  d  } ~ Xn X~ d  S)N)r   r   r   r   )r   r   r   )r   r   r   Ú	cancellerF   s    z*CancelTests.test_cancel.<locals>.cancellerÚtargetÚargsg333333Ó?)Ú	threadingÚThreadr   ÚTimerÚstartÚjoinr   )r   r    r!   Zthread1Zthread2r   )r   r   r   Útest_cancel4   s    	



zCancelTests.test_cancelc             C   sÎ   t  j t d d ƒ} |  j t  j | j ƒ t j | ƒ | j ƒ  } | j	 d ƒ t
 j d ƒ |  j | j ƒ  ƒ | j ƒ  |  j t  j j t j | ƒ | j	 d ƒ t j | ƒ |  j | j ƒ  d g ƒ d  S)NÚasync_Tzselect pg_sleep(10)r   zselect 1)r   )r   Úconnectr   r   ZOperationalErrorr   r   Zwait_selectr   r   ÚtimeÚsleepÚ
assertTrueZisexecutingr   r   r   r   )r   Ú
async_connr   r   r   r   Útest_async_cancelZ   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_cancelk   s    
z(CancelTests.test_async_connection_cancelN)
Ú__name__Ú
__module__Ú__qualname__r
   r   r   r   r)   r0   r3   r   r   r   r   r	   %   s   
%r	   c               C   s   t  j ƒ  j t ƒ S)N)r   Z
TestLoaderZloadTestsFromNamer4   r   r   r   r   Ú
test_suiteq   s    r7   Ú__main__)r,   r$   r   Zpsycopg2.extensionsr   Z
testconfigr   Z	testutilsr   r   r   r   r	   r7   r4   Úmainr   r   r   r   Ú<module>   s   "L