î
5dÝVm  ã               @   s•   d  d l  Z  d  d l Z d  d l Z d  d l Z d d l m Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z d d	 „  Z	 e
 d
 k r‘ e  j ƒ  n  d S)é    Né   )ÚConnectingTestCasec               @   s:   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d S)	ÚConnectionStubz?A `connection` wrapper allowing analysis of the `poll()` calls.c             C   s   | |  _  g  |  _ d  S)N)ÚconnÚpolls)Úselfr   © r   ú=/tmp/pip-build-0jahl3lb/psycopg2/psycopg2/tests/test_green.pyÚ__init__"   s    	zConnectionStub.__init__c             C   s   |  j  j ƒ  S)N)r   Úfileno)r   r   r   r	   r   &   s    zConnectionStub.filenoc             C   s#   |  j  j ƒ  } |  j j | ƒ | S)N)r   Úpollr   Úappend)r   Úrvr   r   r	   r   )   s    zConnectionStub.pollN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r   r   r   r   r	   r       s   r   c               @   sX   e  Z d  Z d d „  Z d d „  Z d d „  Z d d „  Z d	 d
 „  Z d d „  Z d S)ÚGreenTestCasec             C   s9   t  j j ƒ  |  _ t  j j t  j j ƒ t j |  ƒ d  S)N)	Úpsycopg2Ú
extensionsZget_wait_callbackÚ_cbÚset_wait_callbackÚextrasÚwait_selectr   ÚsetUp)r   r   r   r	   r   /   s    zGreenTestCase.setUpc             C   s$   t  j |  ƒ t j j |  j ƒ d  S)N)r   ÚtearDownr   r   r   r   )r   r   r   r	   r   4   s    zGreenTestCase.tearDownc                s,   t  | ƒ ‰  t j j ‡  f d d †  ƒ ˆ  S)Nc                s   t  j j ˆ  ƒ S)N)r   r   r   )r   )Ústubr   r	   Ú<lambda>;   s    z6GreenTestCase.set_stub_wait_callback.<locals>.<lambda>)r   r   r   r   )r   r   r   )r   r	   Úset_stub_wait_callback8   s    	z$GreenTestCase.set_stub_wait_callbackc             C   sÉ   |  j  } |  j | ƒ } | j ƒ  } x… d D]} } | d d } | j d  d  … =| j d d | f ƒ |  j | t | j ƒ  d	 ƒ ƒ | j j t	 j
 j ƒ d k r+ d  Sq+ Wd	 d  l } | j d
 ƒ d  S)Nr   é   é
   é   é2   i   z
select %s;Úxr   z4sending a large query didn't trigger block on write.)r   r   r    r!   r"   )r   r   Úcursorr   ÚexecuteÚassertEqualÚlenÚfetchoneÚcountr   r   Z
POLL_WRITEÚwarningsÚwarn)r   r   r   ÚcursÚmbÚsizer*   r   r   r	   Útest_flush_on_write>   s    	 z!GreenTestCase.test_flush_on_writec             C   sl   |  j  } | j ƒ  } | j d ƒ | j ƒ  t j j d d „  ƒ |  j t | j d ƒ |  j	 | j
 ƒ d  S)Nzselect 1c             S   s   d d S)Nr   r   r   )r   r   r   r	   r   \   s    z6GreenTestCase.test_error_in_callback.<locals>.<lambda>zselect 2)r   r$   r%   r(   r   r   r   ÚassertRaisesÚZeroDivisionErrorÚ
assertTrueÚclosed)r   r   r,   r   r   r	   Útest_error_in_callbackR   s    	
z$GreenTestCase.test_error_in_callbackc             C   st   |  j  } | j ƒ  } |  j t j | j d ƒ |  j | j ƒ | j ƒ  | j d ƒ |  j	 | j
 ƒ  d d ƒ d  S)Nzselect the unselectablezselect 1r   r   )r   r$   r0   r   ZProgrammingErrorr%   r2   r3   Úrollbackr&   r(   )r   r   r,   r   r   r	   Útest_dont_freak_outa   s    	
z!GreenTestCase.test_dont_freak_outN)	r   r   r   r   r   r   r/   r4   r6   r   r   r   r	   r   .   s   r   c               C   s   t  j ƒ  j t ƒ S)N)ÚunittestZ
TestLoaderZloadTestsFromNamer   r   r   r   r	   Ú
test_suitep   s    r8   Ú__main__)r7   r   Zpsycopg2.extensionsZpsycopg2.extrasZ	testutilsr   Úobjectr   r   r8   r   Úmainr   r   r   r	   Ú<module>   s   B