î
yÐR\y  ã               @   s±   d  d l  Z  d  d l Z d  d l Z d  d l Z d d l m Z m Z Gd d „  d e ƒ Z Gd d „  d e ƒ Z	 Gd d	 „  d	 e ƒ Z
 d
 d „  Z e d k r­ e  j ƒ  n  d S)é    Né   )ÚConnectingTestCaseÚslowc               @   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	   úN/var/www/dbchiro/venv/lib/python3.4/site-packages/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               @   s^   e  Z d  Z d d „  Z d d „  Z d d „  Z e 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Ú
extensionsÚget_wait_callbackÚ_cbÚset_wait_callbackÚextrasÚwait_selectr   ÚsetUp)r   r	   r	   r
   r   1   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   6   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_callback:   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   Ú
POLL_WRITEÚwarningsÚwarn)r   r   r   ÚcursZ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_callbackU   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&   r2   r   ZProgrammingErrorr'   r4   r5   Zrollbackr(   r*   )r   r   r/   r	   r	   r
   Útest_dont_freak_outd   s    	
z!GreenTestCase.test_dont_freak_outN)
r   r   r   r   r   r    r   r1   r6   r7   r	   r	   r	   r
   r   0   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)ÚCallbackErrorTestCasec             C   s?   t  j j ƒ  |  _ t  j j |  j ƒ t j |  ƒ d  |  _ d  S)N)	r   r   r   r   r   Úcrappy_callbackr   r   Úto_error)r   r	   r	   r
   r   t   s    zCallbackErrorTestCase.setUpc             C   s$   t  j |  ƒ t j j |  j ƒ d  S)N)r   r   r   r   r   r   )r   r	   r	   r
   r   z   s    zCallbackErrorTestCase.tearDownc             C   s  d d l  } d d l m } m } m } xî |  j d k	 rj |  j d 8_ |  j d k rj t d ƒ ‚ qj n  y‰ | j ƒ  } | | k r‰ Pni | | k r´ | j  | j ƒ  g g  g  ƒ n> | | k rß | j  g  | j ƒ  g g  ƒ n | j	 d | ƒ ‚ Wq+ t
 k
 r| j ƒ  w+ Yq+ Xq+ Wd S)z>green callback failing after `self.to_error` time it is calledr   N)ÚPOLL_OKÚ	POLL_READr,   r   zI accidentally the connectionzbad state from poll: %s)ÚselectÚpsycopg2.extensionsr;   r<   r,   r:   r3   r   r   ZOperationalErrorÚKeyboardInterruptÚcancel)r   r   r=   r;   r<   r,   Ústater	   r	   r
   r9   ~   s&    
z%CallbackErrorTestCase.crappy_callbackc             C   sX   xD t  d ƒ D]6 } | |  _ y |  j ƒ  Wn t k
 r> Yq Xd  Sq W|  j d ƒ d  S)Néd   z0you should have had a success or an error by now)Úranger:   Úconnectr3   Úfail)r   Úir	   r	   r
   Útest_errors_on_connection—   s    	z/CallbackErrorTestCase.test_errors_on_connectionc             C   s†   xr t  d ƒ D]d } d  |  _ |  j ƒ  } | j ƒ  } | |  _ y | j d ƒ | j ƒ  Wn t k
 rl Yq Xd  Sq W|  j d ƒ d  S)NrB   zselect 1z0you should have had a success or an error by now)rC   r:   rD   r&   r'   r*   r3   rE   )r   rF   ÚcnnÚcurr	   r	   r
   Útest_errors_on_query¥   s    		z*CallbackErrorTestCase.test_errors_on_queryc             C   s‰   xu t  d ƒ D]g } d  |  _ |  j ƒ  } | j d ƒ } | |  _ y | j d ƒ | j ƒ  Wn t k
 ro Yq Xd  Sq W|  j d ƒ d  S)NrB   Zfoozselect 1z0you should have had a success or an error by now)rC   r:   rD   r&   r'   r*   r3   rE   )r   rF   rH   rI   r	   r	   r
   Útest_errors_named_cursor¶   s    		z.CallbackErrorTestCase.test_errors_named_cursorN)	r   r   r   r   r   r9   rG   rJ   rK   r	   r	   r	   r
   r8   s   s   r8   c               C   s   t  j ƒ  j t ƒ S)N)ÚunittestZ
TestLoaderZloadTestsFromNamer   r	   r	   r	   r
   Ú
test_suiteÈ   s    rM   Ú__main__)rL   r   r>   Zpsycopg2.extrasZ	testutilsr   r   Úobjectr   r   r8   rM   r   Úmainr	   r	   r	   r
   Ú<module>   s   CU