
wR\"                 @   s   d  d l  Z  d  d l m Z m Z m Z d d l m Z d d l m Z m	 Z	 d d l m
 Z
 m Z e d  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)PhysicalReplicationConnectionLogicalReplicationConnectionStopReplication   )
testconfig)unittestConnectingTestCase)skip_before_postgresskip_if_greenz'replication not supported in green modec                   sd   e  Z d  Z   f d d   Z   f d d   Z e j d d  Z e j d d  Z d	 d
   Z	   S)ReplicationTestCasec                s,   t  t |   j   t j |  _ g  |  _ d  S)N)superr   setUpr   	repl_slotslot_slots)self)	__class__ T/var/www/dbchiro/venv/lib/python3.4/site-packages/psycopg2/tests/test_replication.pyr   %   s    zReplicationTestCase.setUpc                s   t  t |   j   d d  l } | j d  |  j r |  j   } | r | j   } x$ |  j D] } | j d | f  q] W| j	   | j
   q n  d  S)Nr   g?z#SELECT pg_drop_replication_slot(%s))r   r   tearDowntimesleepr   connectcursorexecutecommitclose)r   r   Z	kill_connZkill_curr   )r   r   r   r   *   s    	
zReplicationTestCase.tearDownc             K   s$   | j  | |  |  j j |  d  S)N)create_replication_slotr   append)r   cur	slot_namekwargsr   r   r   r   :   s    z+ReplicationTestCase.create_replication_slotc             C   s!   | j  |  |  j j |  d  S)N)drop_replication_slotr   remove)r   r   r    r   r   r   r"   >   s    z)ReplicationTestCase.drop_replication_slotc             C   sv   |  j    } | d  k r d  S| j   } y | j d  Wn t j k
 rZ | j   Yn X| j d  | j   d  S)NzDROP TABLE dummy1z@CREATE TABLE dummy1 AS SELECT * FROM generate_series(1, 5) AS id)r   r   r   psycopg2ProgrammingErrorZrollbackr   )r   connr   r   r   r   make_replication_eventsC   s    z+ReplicationTestCase.make_replication_events)
__name__
__module____qualname__r   r   r   r   r   r"   r'   r   r   )r   r   r   $   s
   r   c               @   s!  e  Z d  Z e d d  d d    Z e d d  d d    Z e d d  d d	    Z e d d  d
 d    Z e d d  e d d     Z	 e d d  e d d     Z
 e d d  e d d     Z e d d  e d d     Z e d d  e d d     Z d S)ReplicationTest	   r   c             C   sI   |  j  d t  } | d  k r" d  S| j   } | j d  | j   d  S)Nconnection_factoryIDENTIFY_SYSTEM)repl_connectr   r   r   fetchall)r   r&   r   r   r   r   $test_physical_replication_connectionS   s    z4ReplicationTest.test_physical_replication_connectionc             C   st   t  j d  k r |  j d  S|  j d t  j d d d t  } | d  k rM d  S| j   } | j d  | j   d  S)Nz%replication tests disabled by defaultZdsnoptionsz-cdatestyle=germanr-   r.   )r   Zrepl_dsnZskipTestr/   r   r   r   r0   )r   r&   r   r   r   r   test_datestyle\   s    		zReplicationTest.test_datestyle   c             C   sI   |  j  d t  } | d  k r" d  S| j   } | j d  | j   d  S)Nr-   r.   )r/   r   r   r   r0   )r   r&   r   r   r   r   #test_logical_replication_connectionj   s    z3ReplicationTest.test_logical_replication_connectionc             C   sX   |  j  d t  } | d  k r" d  S| j   } |  j |  |  j t j |  j |  d  S)Nr-   )r/   r   r   r   assertRaisesr$   r%   )r   r&   r   r   r   r   test_create_replication_slots   s    z,ReplicationTest.test_create_replication_slotc             C   sk   |  j  d t  } | d  k r" d  S| j   } |  j t j | j |  j  |  j |  | j |  j  d  S)Nr-   )	r/   r   r   r6   r$   r%   start_replicationr   r   )r   r&   r   r   r   r   &test_start_on_missing_replication_slot~   s    z6ReplicationTest.test_start_on_missing_replication_slotc             C   s   d d l  m } |  j d t  } | d  k r2 d  S| j   } |  j | d d | j | j d  j d | j	 |  j
    d  S)Nr   )sqlr-   output_plugintest_decodingz0START_REPLICATION SLOT {slot} LOGICAL 0/00000000r   )r$   r:   r/   r   r   r   Zstart_replication_expertZSQLformatZ
Identifierr   )r   r:   r&   r   r   r   r   !test_start_replication_expert_sql   s    z1ReplicationTest.test_start_replication_expert_sqlc             C   s   |  j  d t  } | d  k r" d  S| j   } |  j | d d | j d |  j d i d d 6 d d	   } |  j t j | j	 |  | j d |  j  d  S)
Nr-   r;   r<   r    r2   valueZinvalid_paramc             S   s   d  S)Nr   )msgr   r   r   consume   s    zBReplicationTest.test_start_and_recover_from_error.<locals>.consume)
r/   r   r   r   r8   r   r6   r$   Z	DataErrorconsume_stream)r   r&   r   rA   r   r   r   !test_start_and_recover_from_error   s    	z1ReplicationTest.test_start_and_recover_from_errorc             C   s   |  j  d t  } | d  k r" d  S| j   } |  j | d d |  j   | j |  j  d d   } |  j t | j	 | d d | j
   d  S)Nr-   r;   r<   c             S   s   t     d  S)N)r   )r@   r   r   r   rA      s    z/ReplicationTest.test_keepalive.<locals>.consumeZkeepalive_interval   )r/   r   r   r   r'   r8   r   r6   r   rB   r   )r   r&   r   rA   r   r   r   test_keepalive   s    
	zReplicationTest.test_keepalivec             C   s   |  j  d t  } | d  k r" d  S| j   } |  j | d d |  j   | j |  j  d d   } |  j t | j	 |  d  S)Nr-   r;   r<   c             S   s   t     d  S)N)r   )r@   r   r   r   rA      s    z6ReplicationTest.test_stop_replication.<locals>.consume)
r/   r   r   r   r'   r8   r   r6   r   rB   )r   r&   r   rA   r   r   r   test_stop_replication   s    
z%ReplicationTest.test_stop_replicationN)r(   r)   r*   r	   r1   r3   r5   r7   skip_repl_if_greenr9   r>   rC   rE   rF   r   r   r   r   r+   R   s   		r+   c               @   s1   e  Z d  Z e d d  e d d     Z d S)AsyncReplicationTestr,   r4   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-   Zasync_r   r;   r<   r   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      ZreplyTZ	flush_lsn)Zio_timestamprepr	msg_countZsend_feedbackr   Z
data_start)r@   )r   r   r   r   rA      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)rL   Zread_message)rL   r@   )rA   r   r   r   process_stream   s    zCAsyncReplicationTest.test_async_replication.<locals>.process_stream)r/   r   r   r   waitr8   r   r'   rK   r6   r$   r%   rB   r   )r   r&   rM   r   )rA   r   r   r   test_async_replication   s    	
	z+AsyncReplicationTest.test_async_replicationN)r(   r)   r*   r	   rG   rO   r   r   r   r   rH      s   rH   c               C   s   t  j   j t  S)N)r   Z
TestLoaderZloadTestsFromNamer(   r   r   r   r   
test_suite  s    rP   __main__)r$   Zpsycopg2.extrasr   r   r    r   Z	testutilsr   r   r	   r
   rG   r   r+   rH   rP   r(   mainr   r   r   r   <module>   s   ..