î
5dÝV*  ã               @   s/   d  Z  d d l Z Gd d „  d e j ƒ Z d S)zC Python DB API 2.0 driver Two Phase Commit compliance test suite.

é    Nc               @   s²   e  Z d  Z d Z d d „  Z d Z d Z d d „  Z d d	 „  Z d
 d „  Z	 d d „  Z
 d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d S)ÚTwoPhaseCommitTestsNc             C   s
   t  ‚ d S)zMake a database connection.N)ÚNotImplementedError)Úself© r   ú>/tmp/pip-build-0jahl3lb/psycopg2/psycopg2/tests/dbapi20_tpc.pyÚconnect   s    zTwoPhaseCommitTests.connectr   zdbapi20_tpc:c             C   s8   t  j } t  j d 7_ | j d d |  j | f d ƒ S)Né   é*   z%s%dZ	qualifier)r   Ú_last_idÚxidÚ_global_id_prefix)r   ÚconÚidr   r   r   Úmake_xid   s    	zTwoPhaseCommitTests.make_xidc             C   sü   |  j  ƒ  } y | j d d d ƒ } Wn% |  j j k
 rL |  j d ƒ Yn X|  j | d d ƒ |  j | d d ƒ |  j | d d ƒ | j d d d ƒ } |  j t | ƒ d ƒ | j d	 d
 d d d ƒ } |  j t | ƒ d	 d
 d d d f ƒ d  S)Nr	   ÚglobalZbqualz(Driver does not support transaction IDs.r   r   é   Ú iÿÿÿÚaé@   Úb)r   r   r   )r   r   ÚdriverÚNotSupportedErrorÚfailZassertEqualÚtuple)r   r   r   r   r   r   Útest_xid   s    zTwoPhaseCommitTests.test_xidc             C   sj   |  j  ƒ  } zL |  j | ƒ } y | j | ƒ Wn% |  j j k
 rV |  j d ƒ Yn XWd  | j ƒ  Xd  S)Nz#Driver does not support tpc_begin())r   r   Ú	tpc_beginr   r   r   Úclose)r   r   r   r   r   r   Útest_tpc_begin)   s    z"TwoPhaseCommitTests.test_tpc_beginc          
   C   sa   |  j  ƒ  } zC |  j | ƒ } | j | ƒ | j ƒ  } | j d ƒ | j ƒ  Wd  | j ƒ  Xd  S)NzSELECT 1)r   r   r   ÚcursorÚexecuteÚ
tpc_commitr   )r   r   r   r   r   r   r   Útest_tpc_commit_without_prepare4   s    z3TwoPhaseCommitTests.test_tpc_commit_without_preparec          
   C   sa   |  j  ƒ  } zC |  j | ƒ } | j | ƒ | j ƒ  } | j d ƒ | j ƒ  Wd  | j ƒ  Xd  S)NzSELECT 1)r   r   r   r   r   Útpc_rollbackr   )r   r   r   r   r   r   r   Ú!test_tpc_rollback_without_prepare?   s    z5TwoPhaseCommitTests.test_tpc_rollback_without_preparec          
   C   sk   |  j  ƒ  } zM |  j | ƒ } | j | ƒ | j ƒ  } | j d ƒ | j ƒ  | j ƒ  Wd  | j ƒ  Xd  S)NzSELECT 1)r   r   r   r   r   Útpc_preparer    r   )r   r   r   r   r   r   r   Útest_tpc_commit_with_prepareJ   s    
z0TwoPhaseCommitTests.test_tpc_commit_with_preparec          
   C   sk   |  j  ƒ  } zM |  j | ƒ } | j | ƒ | j ƒ  } | j d ƒ | j ƒ  | j ƒ  Wd  | j ƒ  Xd  S)NzSELECT 1)r   r   r   r   r   r$   r"   r   )r   r   r   r   r   r   r   Útest_tpc_rollback_with_prepareV   s    
z2TwoPhaseCommitTests.test_tpc_rollback_with_preparec          
   C   sf   |  j  ƒ  } zH |  j | ƒ } | j ƒ  } | j d ƒ |  j |  j j | j | ƒ Wd  | j ƒ  Xd  S)NzSELECT 1)	r   r   r   r   ÚassertRaisesr   ÚProgrammingErrorr   r   )r   r   r   r   r   r   r   Ú#test_tpc_begin_in_transaction_failsb   s    z7TwoPhaseCommitTests.test_tpc_begin_in_transaction_failsc          
   C   sf   |  j  ƒ  } zH |  j | ƒ } | j ƒ  } | j d ƒ |  j |  j j | j | ƒ Wd  | j ƒ  Xd  S)NzSELECT 1)	r   r   r   r   r'   r   r(   r   r   )r   r   r   r   r   r   r   Ú'test_tpc_begin_in_tpc_transaction_failsn   s    z;TwoPhaseCommitTests.test_tpc_begin_in_tpc_transaction_failsc          
   C   sW   |  j  ƒ  } z9 |  j | ƒ } | j | ƒ |  j |  j j | j ƒ Wd  | j ƒ  Xd  S)N)r   r   r   r'   r   r(   Úcommitr   )r   r   r   r   r   r   Útest_commit_in_tpc_failsz   s    z,TwoPhaseCommitTests.test_commit_in_tpc_failsc          
   C   sW   |  j  ƒ  } z9 |  j | ƒ } | j | ƒ |  j |  j j | j ƒ Wd  | j ƒ  Xd  S)N)r   r   r   r'   r   r(   Úrollbackr   )r   r   r   r   r   r   Útest_rollback_in_tpc_fails†   s    z.TwoPhaseCommitTests.test_rollback_in_tpc_fails)Ú__name__Ú
__module__Ú__qualname__r   r   r
   r   r   r   r   r!   r#   r%   r&   r)   r*   r,   r.   r   r   r   r   r      s   r   )Ú__doc__ZunittestZTestCaser   r   r   r   r   Ú<module>   s   