î
yÐR\  ã               @   sÑ   d  d l  m Z d d l Z d d l m Z d  d l  m Z m Z m Z d  d l m 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 d
 d „  Z e d k rÍ e j ƒ  n  d S)é   )Úunittesté    N)Ú
extensions)ÚConnectingTestCaseÚscript_to_py3Úslow)Údsn)ÚPopenÚPIPEc               @   sú   e  Z d  Z d d „  Z d d „  Z d d d d „ Z e d	 d
 „  ƒ Z e d d „  ƒ Z e d d „  ƒ Z	 e d d „  ƒ Z
 e d d „  ƒ Z e d d „  ƒ Z e d d „  ƒ Z e d d „  ƒ Z d d „  Z d d „  Z d d „  Z d d  „  Z d S)!ÚNotifiesTestsc             C   s   | j  t j ƒ d S)z$Set a connection in autocommit mode.N)Zset_isolation_levelr   ZISOLATION_LEVEL_AUTOCOMMIT)ÚselfÚconn© r   úO/var/www/dbchiro/venv/lib/python3.4/site-packages/psycopg2/tests/test_notify.pyÚ
autocommit(   s    zNotifiesTests.autocommitc             C   s.   |  j  j ƒ  } | j d | ƒ | j ƒ  d S)z(Start listening for a name on self.conn.zLISTEN N)r   ÚcursorÚexecuteÚclose)r   ÚnameZcursr   r   r   Úlisten,   s    zNotifiesTests.listenr   Nc             C   sq   | d k r d } n
 d | } d i t  j d 6t d 6| d 6| d 6| d	 6} t t j d
 t | ƒ g d t ƒS)z@Send a notification to the database, eventually after some time.NÚ z, %ra5  import time
time.sleep(%(sec)s)
import %(module)s as psycopg2
import %(module)s.extensions as ext
conn = psycopg2.connect(%(dsn)r)
conn.set_isolation_level(ext.ISOLATION_LEVEL_AUTOCOMMIT)
print conn.get_backend_pid()
curs = conn.cursor()
curs.execute("NOTIFY " %(name)r %(payload)r)
curs.close()
conn.close()
Úmoduler   Úsecr   Úpayloadz-cÚstdout)Úpsycopg2Ú__name__r   r	   ÚsysÚ
executabler   r
   )r   r   r   r   Úscriptr   r   r   Únotify2   s    	

 zNotifiesTests.notifyc             C   s;  |  j  |  j ƒ |  j d ƒ |  j d d ƒ } t j ƒ  } t j |  j g g  g  d ƒ t j ƒ  } |  j d | | k  o„ d k  n | | ƒ t | j ƒ  d ƒ } |  j	 d t
 |  j j ƒ ƒ |  j	 t j |  j j ƒ  ƒ |  j	 d t
 |  j j ƒ ƒ |  j	 | |  j j d d ƒ |  j	 d |  j j d d ƒ d  S)NÚfoor   é   g®Gáz®ï?é   r   )r   r   r   r    ÚtimeÚselectÚ
assertTrueÚintÚcommunicateÚassertEqualÚlenÚnotifiesr   ÚPOLL_OKÚpoll)r   ÚprocÚt0Út1Úpidr   r   r   Útest_notifies_received_on_pollK   s    .z,NotifiesTests.test_notifies_received_on_pollc             C   sB  |  j  |  j ƒ x$ d d d g D] } |  j | ƒ q  Wi  } x= d d d d g D]) } t |  j | ƒ j ƒ  d ƒ | | <qP W|  j d t |  j j ƒ ƒ x0 t	 d ƒ D]" } |  j t
 j |  j j ƒ  ƒ q¦ W|  j d t |  j j ƒ ƒ t j d d d g ƒ } x; |  j j D]- \ } } |  j | | | ƒ | j | ƒ qWd  S)Nr!   ÚbarÚbazZquxr   é
   é   )r   r   r   r'   r    r(   r)   r*   r+   Úranger   r,   r-   ÚdictÚfromkeysÚpop)r   r   ZpidsÚiÚnamesr1   r   r   r   Útest_many_notifies^   s    ' z NotifiesTests.test_many_notifiesc             C   sÊ   |  j  |  j ƒ |  j d ƒ t |  j d ƒ j ƒ  d ƒ } |  j d t |  j j ƒ ƒ |  j j	 ƒ  j
 d ƒ |  j d t |  j j ƒ ƒ |  j | |  j j d d ƒ |  j d |  j j d d ƒ d  S)Nr!   r   z	select 1;r   )r   r   r   r'   r    r(   r)   r*   r+   r   r   )r   r1   r   r   r   Ú!test_notifies_received_on_executer   s    z/NotifiesTests.test_notifies_received_on_executec             C   sz   |  j  |  j ƒ |  j d ƒ |  j d ƒ j ƒ  t j d ƒ |  j j ƒ  |  j j d } |  j	 t
 | t j j ƒ ƒ d  S)Nr!   g      à?r   )r   r   r   r    r(   r$   Úsleepr-   r+   r&   Ú
isinstancer   r   ÚNotify)r   r    r   r   r   Útest_notify_object}   s    z NotifiesTests.test_notify_objectc             C   s¿   |  j  |  j ƒ |  j d ƒ t |  j d ƒ j ƒ  d ƒ } t j d ƒ |  j j ƒ  |  j	 d t
 |  j j ƒ ƒ |  j j d } |  j	 | | j ƒ |  j	 d | j ƒ |  j	 d | j ƒ d  S)Nr!   r   g      à?r   r   )r   r   r   r'   r    r(   r$   r?   r-   r)   r*   r+   r1   Úchannelr   )r   r1   r    r   r   r   Útest_notify_attributes‡   s    z$NotifiesTests.test_notify_attributesc             C   sî   |  j  j d k  r) |  j d |  j  j ƒ S|  j |  j  ƒ |  j d ƒ t |  j d d d ƒj ƒ  d ƒ } t j	 d ƒ |  j  j
 ƒ  |  j d t |  j  j ƒ ƒ |  j  j d } |  j | | j ƒ |  j d | j ƒ |  j d | j ƒ d  S)	Ni_ z0server version %s doesn't support notify payloadr!   r   zHello, world!r   g      à?r   )r   Úserver_versionZskipTestr   r   r'   r    r(   r$   r?   r-   r)   r*   r+   r1   rC   r   )r   r1   r    r   r   r   Útest_notify_payload”   s    	%z!NotifiesTests.test_notify_payloadc             C   s·   d d l  m } |  j |  j ƒ | ƒ  |  j _ |  j d ƒ |  j d ƒ j ƒ  t j	 d ƒ |  j j
 ƒ  |  j j j ƒ  } |  j t | t j j ƒ ƒ |  j t |  j j ƒ d ƒ d  S)Nr   )Údequer!   g      à?)ÚcollectionsrG   r   r   r+   r   r    r(   r$   r?   r-   Úpopleftr&   r@   r   r   rA   r)   r*   )r   rG   r    r   r   r   Útest_notify_deque¤   s    zNotifiesTests.test_notify_dequec             C   sp   |  j  |  j ƒ d  |  j _ |  j d ƒ |  j d ƒ j ƒ  t j d ƒ |  j j ƒ  |  j	 |  j j d  ƒ d  S)Nr!   g      à?)
r   r   r+   r   r    r(   r$   r?   r-   r)   )r   r   r   r   Útest_notify_noappend±   s    z"NotifiesTests.test_notify_noappendc             C   sç   t  j j d d ƒ } |  j d | j ƒ |  j d | j ƒ |  j d | j ƒ | \ } } |  j | | f d ƒ t  j j d d d ƒ } |  j d | j ƒ |  j d | j ƒ |  j d | j ƒ | \ } } |  j | | f d ƒ d  S)	Nr5   r!   r   é*   r3   r4   )r5   zfoo)rL   zbar)r   r   rA   r)   r1   rC   r   )r   Únr1   rC   r   r   r   Útest_notify_init»   s    zNotifiesTests.test_notify_initc             C   s”   d d d d	 g } x{ | D]s } xj | D]b } t  j j | Œ  } t  j j | Œ  } |  j | | k | | k ƒ |  j | | k | | k ƒ q& Wq Wd  S)
Nr5   r!   é   r3   r4   )r5   úfoo)rO   rP   )r5   rP   zbar)r5   rP   zbaz)r   r   rA   r)   )r   ÚdataZd1Úd2Zn1Zn2r   r   r   Útest_compareÊ   s    zNotifiesTests.test_comparec             C   s{   d d l  m } |  j d | d d ƒ ƒ |  j d | d d d ƒ ƒ |  j d	 | d d ƒ ƒ |  j d
 | d d ƒ ƒ d  S)Nr   )rA   r5   r!   r3   rO   )r5   úfoo)r5   rT   )r5   rT   )r5   rT   )Úpsycopg2.extensionsrA   r)   ÚassertNotEqual)r   rA   r   r   r   Útest_compare_tupleÓ   s
    z NotifiesTests.test_compare_tuplec             C   sj   d d l  m } |  j t d ƒ t | d d ƒ ƒ ƒ |  j t | d d d ƒ ƒ t | d d ƒ ƒ ƒ d  S)Nr   )rA   r5   r!   r3   )r5   zfoo)rU   rA   r)   ÚhashrV   )r   rA   r   r   r   Ú	test_hashÚ   s    %zNotifiesTests.test_hash)r   Ú
__module__Ú__qualname__r   r   r    r   r2   r=   r>   rB   rD   rF   rJ   rK   rN   rS   rW   rY   r   r   r   r   r   &   s   

	r   c               C   s   t  j ƒ  j t ƒ S)N)r   Z
TestLoaderZloadTestsFromNamer   r   r   r   r   Ú
test_suiteá   s    r\   Ú__main__)Z	testutilsr   r   r   r   r   r   Z
testconfigr   r   r$   r%   Ú
subprocessr	   r
   r   r\   r   Úmainr   r   r   r   Ú<module>   s   »