
yR\                 @   s
  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	 d d l
 m Z m Z d  d l m Z m Z Gd d	   d	 e  Z Gd
 d   d e  Z Gd d   d e j  Z Gd d   d e  Z d d   Z e d k re j   n  d S)    N)extras   )dsn)ConnectingTestCaseunittestskip_before_postgresslow)ReplicationTestCaseskip_repl_if_green)LogicalReplicationConnectionStopReplicationc               @   s@   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 S)

AsyncTestsc             C   sk   t  j |   |  j |  _ |  j d d  |  _ |  j |  j  |  j j   } | j d  |  j |  d  S)NasyncTz[
            CREATE TEMPORARY TABLE table1 (
              id int PRIMARY KEY
            ))r   setUpconn	sync_connconnectwaitcursorexecute)selfZcurs r   V/var/www/dbchiro/venv/lib/python3.4/site-packages/psycopg2/tests/test_async_keyword.pyr   '   s    zAsyncTests.setUpc             C   s   |  j  j   } |  j j   } ~ ~ |  j |  j  j  |  j |  j j  |  j |  j  j  |  j |  j  j  |  j |  j  j d k  |  j |  j  j t	 j
 j k  d  S)N      )r   r   )r   r   r   
assertTruer   Z
autocommitserver_versionprotocol_versionencodingpsycopg2
extensions	encodings)r   curZsync_curr   r   r   test_connection_setup6   s    z AsyncTests.test_connection_setupc             C   sh   Gd d   d t  j j  } |  j d | d d  } |  j t | |   |  j | j  | j   d  S)Nc               @   s   e  Z d  Z d d d  Z d S)z.AsyncTests.test_async_subclass.<locals>.MyConnr   c             S   s    t  j j j |  | d | d  S)Nr   )r   r    
connection__init__)r   r   r   r   r   r   r%   H   s    z7AsyncTests.test_async_subclass.<locals>.MyConn.__init__N)__name__
__module____qualname__r%   r   r   r   r   MyConnG   s   r)   connection_factoryr   T)r   r    r$   r   r   
isinstancer   close)r   r)   r   r   r   r   test_async_subclassF   s
    zAsyncTests.test_async_subclassc             C   s{   y& t  j d d d } |  j |  WnA t  j k
 ri } z |  j t |  d d  WYd  d  } ~ Xn X|  j d  d  S)Nzdbname=thisdatabasedoesntexistr   Tzasynchronous connection failedzconnection error reason lostzno exception raised)r   r   r   ErrorassertNotEqualstrZfail)r   Zcnner   r   r   #test_async_connection_error_messageP   s    z.AsyncTests.test_async_connection_error_messageN)r&   r'   r(   r   r#   r-   r2   r   r   r   r   r   &   s   
r   c               @   sI   e  Z d  Z 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   r   r   r   r   Zcommit)r   r"   r   r   r   r   \   s
    zCancelTests.setUp   r   c             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)Nr   Tzselect pg_sleep(10)r   zselect 1)r   )r   r   r   assertRaisesZOperationalErrorcancelr   Zwait_selectr   r   timesleepr   Zisexecutingr    ZQueryCanceledErrorassertEqualZfetchall)r   
async_connr"   r   r   r   test_async_cancelf   s    
zCancelTests.test_async_cancelc             C   s3   t  j t d d } | j   |  j | j  d  S)Nr   T)r   r   r   r,   r   closed)r   r:   r   r   r   test_async_connection_cancelw   s    
z(CancelTests.test_async_connection_cancelN)r&   r'   r(   r   r   r   r;   r=   r   r   r   r   r3   [   s   
r3   c               @   sL   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d S)ConnectTestCasec                s:   d    _  d  d   f d d  } t j   _ | t _ d  S)NFc                s   |  | | f   _  d  S)N)args)r   r*   r   )r   r   r   connect_stub   s    z+ConnectTestCase.setUp.<locals>.connect_stub)r?   r   _connect_connect_orig)r   r@   r   )r   r   r   ~   s    	zConnectTestCase.setUpc             C   s   |  j  t _ d  S)N)rB   r   rA   )r   r   r   r   tearDown   s    zConnectTestCase.tearDownc             C   sR   |  j  t t j  |  j  t t j d d d d  |  j  t t j d d d  S)Nr*   Fc             S   s   d  S)Nr   )r   r   r   r   r   <lambda>   s    z@ConnectTestCase.test_there_has_to_be_something.<locals>.<lambda>r   T)r5   	TypeErrorr   r   )r   r   r   r   test_there_has_to_be_something   s
    z.ConnectTestCase.test_there_has_to_be_somethingc             C   s   d d d  } t  j d d d d d |  |  j |  j d	 d
  |  j |  j d |  |  j |  j d d  t  j d
 d | |  j |  j d	 d
  |  j |  j d |  |  j |  j d d  d  S)NFc             S   s   d  S)Nr   )r   r   r   r   r   f   s    z'ConnectTestCase.test_factory.<locals>.fdatabasefoohostbazr*   r   zdbname=foo host=bazr   r   )r   r   assertDsnEqualr?   r9   )r   rG   r   r   r   test_factory   s    zConnectTestCase.test_factoryc             C   s   t  j d d d d d d  |  j |  j d d  |  j |  j d d   |  j |  j d	  t  j d d d
 |  j |  j d d  |  j |  j d d   |  j |  j d	  d  S)NrH   rI   rJ   rK   r   r   r   zdbname=foo host=bazr   T)r   r   rL   r?   r9   r   )r   r   r   r   
test_async   s    zConnectTestCase.test_asyncN)r&   r'   r(   r   rC   rF   rM   rN   r   r   r   r   r>   }   s
   	r>   c               @   s1   e  Z d  Z e d d  e d d     Z d S)AsyncReplicationTest	      c                s    j  d t d d  } | d  k r( d  S| j     j  d d  j    j  j   j    j   d  _   f d d      j	 t
 j  j       f d	 d
   }  j	 t |  d  S)Nr*   r   r   Zoutput_pluginZtest_decodingr   c                sh   d   j  t |   f  j d 7_  j d k rQ   j d d  t    n    j d |  j  d  S)Nz%s: %sr   r   ZreplyTZ	flush_lsn)Zio_timestamprepr	msg_countZsend_feedbackr   Z
data_start)msg)r"   r   r   r   consume   s    z<AsyncReplicationTest.test_async_replication.<locals>.consumec                 sM   d d l  m  }  x6  j   } | r2   |  q |   g g  g   q Wd  S)Nr   )select)rV   Zread_message)rV   rT   )rU   r"   r   r   process_stream   s    zCAsyncReplicationTest.test_async_replication.<locals>.process_stream)Zrepl_connectr   r   Zcreate_replication_slotr   Zstart_replicationZslotZmake_replication_eventsrS   r5   r   ZProgrammingErrorZconsume_streamr   )r   r   rW   r   )rU   r"   r   r   test_async_replication   s    	
	z+AsyncReplicationTest.test_async_replicationN)r&   r'   r(   r   r
   rX   r   r   r   r   rO      s   rO   c               C   s   t  j   j t  S)N)r   Z
TestLoaderZloadTestsFromNamer&   r   r   r   r   
test_suite   s    rY   __main__)r7   r   r   Z
testconfigr   Z	testutilsr   r   r   r   Ztest_replicationr	   r
   Zpsycopg2.extrasr   r   r   r3   ZTestCaser>   rO   rY   r&   mainr   r   r   r   <module>   s   "5"..