ó
[³XMc           @   sZ  d  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 m	 Z	 d d l m
 Z
 m Z d d l m Z d d l m Z m Z m Z d d l m Z d	 Z d
 d/ d „  ƒ  YZ d d0 d „  ƒ  YZ d d1 d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z e e d e ƒ  ƒ e e d e ƒ  ƒ d e j f d  „  ƒ  YZ  d! e! f d" „  ƒ  YZ" d# e j f d$ „  ƒ  YZ# d% e j f d& „  ƒ  YZ$ d' e! f d( „  ƒ  YZ% d) e f d* „  ƒ  YZ& d+ e! f d, „  ƒ  YZ' d- e j f d. „  ƒ  YZ( d S(2   s&   
Tests for twisted.enterprise.adbapi.
iÿÿÿÿ(   t   unittestN(   t   ConnectionPoolt   ConnectionLostt   safe(   t
   Connectiont   Transaction(   t   _unreleasedVersion(   t   reactort   defert
   interfaces(   t   Failures%   
CREATE TABLE simple (
  x integer
)
t   ADBAPITestBasec           B   s  e  Z d  Z i  Z e j e d ƒ d k r3 d Z n  d „  Z	 d „  Z
 d „  Z d d „ Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s"   Test the asynchronous DB-API code.s5   ADB-API requires threads, no way to test without themc         C   s3   |  j  ƒ  |  j d |  j ƒ |  _ |  j j ƒ  d S(   sR   
        Set up the database and create a connection pool pointing at it.
        t
   cp_openfunN(   t   startDBt   makePoolt   openfunt   dbpoolt   start(   t   self(    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt
   extraSetUp#   s    
c            sB   ˆ  j  j d ƒ } | j ‡  f d †  ƒ | j ‡  f d †  ƒ | S(   Ns   DROP TABLE simplec            s   ˆ  j  j ƒ  S(   N(   R   t   close(   t   res(   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   <lambda>.   s    c            s
   ˆ  j  ƒ  S(   N(   t   stopDB(   R   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   /   s    (   R   t   runOperationt   addCallback(   R   t   d(    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   tearDown,   s    c         C   s   t  |  j | <d  S(   N(   t   Truet   openfun_called(   R   t   conn(    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   2   s    c         C   s6   | s |  j  |  j ƒ n |  j  |  j j | ƒ ƒ d  S(   N(   t
   failUnlessR   t   has_key(   R   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   checkOpenfunCalled5   s    c            sø   ˆ  j  j t ƒ } ˆ  j rt | j ˆ  j ƒ | j ˆ  j ƒ | j ˆ  j ƒ | j ˆ  j ƒ | j ‡  f d †  ƒ n  | j ˆ  j	 ƒ | j ˆ  j
 ƒ | j ˆ  j ƒ | j ˆ  j ƒ | j ˆ  j ƒ | j ˆ  j ƒ | j ˆ  j ƒ | j ˆ  j ƒ | S(   Nc            s
   ˆ  j  ƒ  S(   N(   t   flushLoggedErrors(   R   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   B   s    (   R   R   t   simple_table_schemat   test_failuresR   t   _testPool_1_1t   _testPool_1_2t   _testPool_1_3t   _testPool_1_4t   _testPool_2t   _testPool_3t   _testPool_4t   _testPool_5t   _testPool_6t   _testPool_7t   _testPool_8t   _testPool_9(   R   R   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   testPool;   s     	c            s8   t  j ˆ  j j d ƒ } | j ‡  f d †  d „  ƒ | S(   Ns   select * from NOTABLEc            s   ˆ  j  d ƒ S(   Ns   no exception(   t   fail(   R   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   O   s    c         S   s   d  S(   N(   t   None(   t   f(    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   P   s    (   R   t   maybeDeferredR   t   runQueryt   addCallbacks(   R   R   R   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR%   M   s    
c            s8   t  j ˆ  j j d ƒ } | j ‡  f d †  d „  ƒ | S(   Ns   deletexxx from NOTABLEc            s   ˆ  j  d ƒ S(   Ns   no exception(   R2   (   R   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   V   s    c         S   s   d  S(   N(   R3   (   R4   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   W   s    (   R   R5   R   R   R7   (   R   R   R   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR&   S   s
    	
c            s;   t  j ˆ  j j ˆ  j ƒ } | j ‡  f d †  d „  ƒ | S(   Nc            s   ˆ  j  d ƒ S(   Ns   no exception(   R2   (   R   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   ]   s    c         S   s   d  S(   N(   R3   (   R4   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   ^   s    (   R   R5   R   t   runInteractiont   bad_interactionR7   (   R   R   R   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR'   Z   s
    
c            s;   t  j ˆ  j j ˆ  j ƒ } | j ‡  f d †  d „  ƒ | S(   Nc            s   ˆ  j  d ƒ S(   Ns   no exception(   R2   (   R   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   d   s    c         S   s   d  S(   N(   R3   (   R4   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   e   s    (   R   R5   R   t   runWithConnectiont   bad_withConnectionR7   (   R   R   R   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR(   a   s
    
c            s8   d } ˆ  j  j | ƒ } ‡  f d †  } | j | ƒ | S(   Ns   select count(1) from simplec            s2   ˆ  j  t |  d d ƒ d k d ƒ ˆ  j ƒ  d  S(   Ni    s   Interaction not rolled back(   R   t   intR!   (   t   row(   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   _checkl   s    $(   R   R6   R   (   R   R   t   sqlR   R>   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR)   h   s
    c            s”   d } g  } x: t  ˆ  j ƒ D]) } d | } | j ˆ  j j | ƒ ƒ q Wt j | ƒ } ‡  f d †  } | j | ƒ ‡  f d †  } | j | ƒ | S(   Ns   select count(1) from simples    insert into simple(x) values(%d)c            s   d } ˆ  j  j | ƒ } | S(   Ns   select x from simple order by x(   R   R6   (   R   R?   R   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   _select{   s    c            s{   ˆ  j  t |  ƒ ˆ  j k d ƒ xU t ˆ  j ƒ D]D } ˆ  j  t |  | ƒ d k d ƒ ˆ  j  |  | d | k d ƒ q/ Wd  S(   Ns   Wrong number of rowsi   s   Wrong size rowi    s   Values not returned.(   R   t   lent   num_iterationst   range(   t   rowst   i(   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR>   ‚   s
     (   RC   RB   t   appendR   R   R   t   gatherResultsR   (   R   R   R?   t   insertsRE   R   R@   R>   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR*   r   s    
c            s/   ˆ  j  j ˆ  j ƒ } | j ‡  f d †  ƒ | S(   Nc            s   ˆ  j  |  d ƒ S(   Nt   done(   t   assertEquals(   R   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR      s    (   R   R8   t   interactionR   (   R   R   R   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR+   Œ   s    c            s/   ˆ  j  j ˆ  j ƒ } | j ‡  f d †  ƒ | S(   Nc            s   ˆ  j  |  d ƒ S(   NRI   (   RJ   (   R   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   •   s    (   R   R:   t   withConnectionR   (   R   R   R   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR,   ’   s    c         C   s   |  j  j |  j ƒ } | S(   N(   R   R:   t   close_withConnection(   R   R   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR-   ˜   s    c            sx   g  } x: t  ˆ  j ƒ D]) } d | } | j ˆ  j j | ƒ ƒ q Wt j | d t ƒ} ‡  f d †  } | j | ƒ | S(   Ns!   select x from simple where x = %dt   fireOnOneErrbackc            sD   x= t  ˆ  j ƒ D], } ˆ  j |  | d d d | k d ƒ q Wd  S(   Ni   i    s   Value not returned(   RC   RB   R   (   t   resultRE   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR>   ¤   s    (	   RC   RB   RF   R   R6   R   t   DeferredListR   R   (   R   R   t   dsRE   R?   t   dlistR>   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR.      s    
c         C   s\   g  } x: t  |  j ƒ D]) } d | } | j |  j j | ƒ ƒ q Wt j | d t ƒ} | S(   Ns   delete from simple where x = %dRN   (   RC   RB   RF   R   R   R   RP   R   (   R   R   RQ   RE   R?   RR   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR/   ª   s    
c            s8   d } ˆ  j  j | ƒ } ‡  f d †  } | j | ƒ | S(   Ns   select count(1) from simplec            s2   ˆ  j  t |  d d ƒ d k d ƒ ˆ  j ƒ  d  S(   Ni    s)   Didn't successfully delete table contents(   R   R<   t   checkConnect(   R=   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR>   ·   s    (   R   R6   R   (   R   R   R?   R   R>   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR0   ³   s
    c         C   sê   |  j  j ƒ  } |  j | ƒ | j ƒ  } | j d ƒ | j d ƒ | j ƒ  } |  j t | ƒ d ƒ |  j t | d ƒ d ƒ |  j | d d d ƒ | j d ƒ | j d ƒ |  j t | j ƒ  ƒ d ƒ | j ƒ  |  j  j	 | ƒ d S(   s/   Check the connect/disconnect synchronous calls.s   insert into simple(x) values(1)s   select x from simplei   i    s   delete from simpleN(
   R   t   connectR!   t   cursort   executet   fetchallt   failUnlessEqualRA   R   t
   disconnect(   R   R   t   cursR   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRS   ¾   s    
c         C   sm   | j  d ƒ xY t |  j ƒ D]H } | j ƒ  } |  j t | ƒ d k d ƒ |  j | d | k d ƒ q Wd S(   Ns   select x from simple order by xi   s   Wrong size rowi    s   Value not returned.RI   (   RV   RC   RB   t   fetchoneR   RA   (   R   t   transactionRE   R=   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRK   Ï   s    c         C   s*   |  j  r | j d ƒ n  | j d ƒ d  S(   Ns   insert into simple(x) values(0)s   select * from NOTABLE(   t   can_rollbackRV   (   R   R\   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR9   Ù   s    	c         C   s‹   | j  ƒ  } zm | j d ƒ xY t |  j ƒ D]H } | j ƒ  } |  j t | ƒ d k d ƒ |  j | d | k d ƒ q, WWd  | j ƒ  Xd S(   Ns   select x from simple order by xi   s   Wrong size rowi    s   Value not returned.RI   (   RU   RV   RC   RB   R[   R   RA   R   (   R   R   RZ   RE   R=   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRL   ß   s    "c         C   s   | j  ƒ  d  S(   N(   R   (   R   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRM   í   s    c         C   s/   | j  ƒ  } z | j d ƒ Wd  | j ƒ  Xd  S(   Ns   select * from NOTABLE(   RU   RV   R   (   R   R   RZ   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR;   ð   s    N(    t   __name__t
   __module__t   __doc__R   R	   t   IReactorThreadsR   R3   t   skipR   R   R   R!   R1   R%   R&   R'   R(   R)   R*   R+   R,   R-   R.   R/   R0   RS   RK   R9   RL   RM   R;   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR      s6   											
										
			t   ReconnectTestBasec           B   sw   e  Z d  Z e j e d
 ƒ d
 k r- d Z n  d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z d „  Z d	 „  Z RS(   s1   Test the asynchronous DB-API code with reconnect.s5   ADB-API requires threads, no way to test without themc         C   sl   |  j  d k r! t j d ƒ ‚ n  |  j ƒ  |  j d d d t d |  j  ƒ |  _ |  j j ƒ  |  j j	 t
 ƒ S(   s¹   
        Skip the test if C{good_sql} is unavailable.  Otherwise, set up the
        database, create a connection pool pointed at it, and set up a simple
        schema in it.
        s   no good sql for reconnect testt   cp_maxi   t   cp_reconnectt   cp_good_sqlN(   t   good_sqlR3   R    t   SkipTestR   R   R   R   R   R   R#   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   þ   s    
c            sB   ˆ  j  j d ƒ } | j ‡  f d †  ƒ | j ‡  f d †  ƒ | S(   Ns   DROP TABLE simplec            s   ˆ  j  j ƒ  S(   N(   R   R   (   R   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR     s    c            s
   ˆ  j  ƒ  S(   N(   R   (   R   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR     s    (   R   R   R   (   R   R   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR     s    c         C   so   t  j d  ƒ } | j |  j ƒ | j |  j ƒ |  j sK | j |  j ƒ n  | j |  j ƒ | j |  j	 ƒ | S(   N(
   R   t   succeedR3   R   t   _testPool_1R)   t   early_reconnectR*   R+   R,   (   R   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR1     s    	c            s8   d } ˆ  j  j | ƒ } ‡  f d †  } | j | ƒ | S(   Ns   select count(1) from simplec            s(   ˆ  j  t |  d d ƒ d k d ƒ d  S(   Ni    s   Table not empty(   R   R<   (   R=   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR>      s    (   R   R6   R   (   R   R   R?   R   R>   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRj     s
    c         C   s   |  j  j j ƒ  d j ƒ  d  S(   Ni    (   R   t   connectionst   valuesR   (   R   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR)   %  s    c            s>   d } t  j ˆ  j j | ƒ } | j ‡  f d †  d „  ƒ | S(   Ns   select count(1) from simplec            s   ˆ  j  d ƒ S(   Ns   no exception(   R2   (   R   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   ,  s    c         S   s   d  S(   N(   R3   (   R4   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   -  s    (   R   R5   R   R6   R7   (   R   R   R?   R   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR*   )  s
    
c            s8   d } ˆ  j  j | ƒ } ‡  f d †  } | j | ƒ | S(   Ns   select count(1) from simplec            s(   ˆ  j  t |  d d ƒ d k d ƒ d  S(   Ni    s   Table not empty(   R   R<   (   R=   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR>   3  s    (   R   R6   R   (   R   R   R?   R   R>   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR+   0  s
    c            sN   ˆ  j  ƒ  d } t j ˆ  j j | ƒ } | j ‡  f d †  ‡  f d †  ƒ | S(   Ns   select * from NOTABLEc            s   ˆ  j  d ƒ S(   Ns   no exception(   R2   (   R   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   <  s    c            s   ˆ  j  |  j t ƒ ƒ S(   N(   t   failIft   checkR   (   R4   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   =  s    (   R"   R   R5   R   R6   R7   (   R   R   R?   R   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR,   8  s    
N(   R^   R_   R`   R	   Ra   R   R3   Rb   R   R   R1   Rj   R)   R*   R+   R,   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRc   ø   s   				
				t   DBTestConnectorc           B   s›   e  Z d  Z d	 Z d Z d Z d Z d	 Z e	 Z
 e	 Z e	 Z e	 Z e	 Z e j Z e	 Z e	 Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(
   s9  A class which knows how to test for the presence of
    and establish a connection to a relational database.

    To enable test cases  which use a central, system database,
    you must create a database named DB_NAME with a user DB_USER
    and password DB_PASS with full access rights to database DB_NAME.
    t   twisted_testi2   c         C   sN   |  j  ƒ  |  _ t j |  j ƒ |  j ƒ  sD t j d |  j ƒ ‚ n  |  j ƒ  S(   Ns   %s: Cannot access db(	   t   mktempt   DB_DIRt   ost   mkdirt   can_connectR    Rh   t   TEST_PREFIXR   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   setUp^  s
    c         C   s   t  ƒ  ‚ d S(   sX   Return true if this database is present on the system
        and can be used in a test.N(   t   NotImplementedError(   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRv   e  s    c         C   s   d S(   s+   Take any steps needed to bring database up.N(    (   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   j  s    c         C   s   d S(   s   Bring database down, if needed.N(    (   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   n  s    c         K   s8   |  j  ƒ  \ } } | j ƒ  } | j | ƒ t | | Ž  S(   s;   Create a connection pool with additional keyword arguments.(   t   getPoolArgst   copyt   updateR   (   R   t   newkwt   argst   kw(    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   r  s    c         C   s   t  ƒ  ‚ d S(   s™   Return a tuple (args, kw) of list and keyword arguments
        that need to be passed to ConnectionPool to create a connection
        to this database.N(   Ry   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRz   y  s    N(   R^   R_   R`   R3   Rw   t   DB_NAMEt   DB_USERt   DB_PASSRs   R   t   nulls_okt   trailing_spaces_okR]   R$   t   escape_slashesR   Rg   Rk   t	   can_clearRB   Rx   Rv   R   R   R   Rz   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRp   A  s*   						t   GadflyConnectorc           B   sG   e  Z d  Z e Z e Z e Z d Z d Z d „  Z	 d „  Z
 d „  Z RS(   t   Gadflys   select * from simple where 1=0i   c         C   s@   y d d  l  } Wn t SXt | d d  ƒ s< | j  | _ n  t S(   NiÿÿÿÿRT   (   t   gadflyt   Falset   getattrR3   RT   R   (   R   R‰   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRv   ‰  s      c         C   s_   d d  l  } | j  ƒ  } | j |  j |  j ƒ | j ƒ  } | j d ƒ | j ƒ  | j ƒ  d  S(   Niÿÿÿÿs   create table x (x integer)(   R‰   t   startupR€   Rs   RU   RV   t   commitR   (   R   R‰   R   RU   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR     s    
c         C   s,   d |  j  |  j f } i d d 6} | | f S(   NR‰   i   Rd   (   R€   Rs   (   R   R~   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRz   ›  s    (   R^   R_   Rw   RŠ   Rƒ   R]   R…   Rg   RB   Rv   R   Rz   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR‡     s   		t   SQLiteConnectorc           B   s5   e  Z d  Z e Z d Z d „  Z d „  Z d „  Z RS(   t   SQLitei   c         C   s   y d d  l  } Wn t SXt S(   Niÿÿÿÿ(   t   sqliteRŠ   R   (   R   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRv   §  s
      c         C   sJ   t  j j |  j |  j ƒ |  _ t  j j |  j ƒ rF t  j |  j ƒ n  d  S(   N(   Rt   t   patht   joinRs   R€   t   databaset   existst   unlink(   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   ¬  s    c         C   s'   d } i |  j  d 6d d 6} | | f S(   NR   R“   i   Rd   (   s   sqlite(   R“   (   R   R~   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRz   ±  s    (	   R^   R_   Rw   RŠ   R…   RB   Rv   R   Rz   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRŽ      s   		t   PyPgSQLConnectorc           B   s    e  Z d  Z d „  Z d „  Z RS(   t   PyPgSQLc         C   sg   y d d l  m } Wn t SXy9 | j d |  j d |  j d |  j ƒ } | j ƒ  t SWn t SXd  S(   Niÿÿÿÿ(   t   PgSQLR“   t   usert   password(	   t   pyPgSQLR˜   RŠ   RT   R€   R   R‚   R   R   (   R   R˜   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRv   ¹  s      
c         C   s;   d } i |  j  d 6|  j d 6|  j d 6d d 6} | | f S(   Ns   pyPgSQL.PgSQLR“   R™   Rš   i    t   cp_min(   s   pyPgSQL.PgSQL(   R€   R   R‚   (   R   R~   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRz   Ä  s    (   R^   R_   Rw   Rv   Rz   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR–   ¶  s   	t   PsycopgConnectorc           B   s    e  Z d  Z d „  Z d „  Z RS(   t   Psycopgc         C   sc   y d d  l  } Wn t SXy9 | j d |  j d |  j d |  j ƒ } | j ƒ  t SWn t SXd  S(   NiÿÿÿÿR“   R™   Rš   (   t   psycopgRŠ   RT   R€   R   R‚   R   R   (   R   RŸ   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRv   Í  s      
c         C   s;   d } i |  j  d 6|  j d 6|  j d 6d d 6} | | f S(   NRŸ   R“   R™   Rš   i    Rœ   (   s   psycopg(   R€   R   R‚   (   R   R~   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRz   Ø  s    (   R^   R_   Rw   Rv   Rz   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   Ê  s   	t   MySQLConnectorc           B   s2   e  Z d  Z e Z e Z e Z d „  Z d „  Z RS(   t   MySQLc         C   sc   y d d  l  } Wn t SXy9 | j d |  j d |  j d |  j ƒ } | j ƒ  t SWn t SXd  S(   Niÿÿÿÿt   dbR™   t   passwd(   t   MySQLdbRŠ   RT   R€   R   R‚   R   R   (   R   R¤   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRv   å  s      
c         C   s4   d } i |  j  d 6|  j d 6|  j d 6} | | f S(   NR¤   R¢   R™   R£   (   s   MySQLdb(   R€   R   R‚   (   R   R~   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRz   ð  s    $(	   R^   R_   Rw   RŠ   R„   R]   Rk   Rv   Rz   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR    Þ  s   	t   FirebirdConnectorc           B   sP   e  Z d  Z e Z e Z d Z e Z d Z	 d „  Z
 d „  Z d „  Z d „  Z RS(   t   Firebirdi   c         C   sF   y d d  l  } Wn t SXy |  j ƒ  |  j ƒ  t SWn t SXd  S(   Niÿÿÿÿ(   t   kinterbasdbRŠ   R   R   R   (   R   R§   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRv   ÿ  s      

c         C   s   d d  l  } t j j |  j t j ƒ |  _ t j |  j t j	 t j
 t j ƒ d } | |  j |  j |  j f ;} | j | ƒ } | j ƒ  d  S(   Niÿÿÿÿs,   create database "%s" user "%s" password "%s"(   R§   Rt   R‘   R’   Rs   Rp   R€   t   chmodt   statt   S_IRWXUt   S_IRWXGt   S_IRWXOR   R‚   t   create_databaseR   (   R   R§   R?   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   
  s    $c         C   s;   d } i |  j  d 6d d 6|  j d 6|  j d 6} | | f S(   NR§   R“   s	   127.0.0.1t   hostR™   Rš   (   s   kinterbasdb(   R€   R   R‚   (   R   R~   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRz     s    c      	   C   sG   d d  l  } | j d |  j d d d |  j d |  j ƒ } | j ƒ  d  S(   NiÿÿÿÿR“   R®   s	   127.0.0.1R™   Rš   (   R§   RT   R€   R   R‚   t   drop_database(   R   R§   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR     s
    N(   R^   R_   Rw   RŠ   R$   R…   R3   Rg   R†   RB   Rv   R   Rz   R   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR¥   õ  s   		
	c         C   sh   t  t t t t t g } xI | D]A } | j | } t j | | |  t	 j
 f |  j ƒ } | | | <q Wd S(   sQ  
    Make a test case for every db connector which can connect.

    @param base: Base class for test case. Additional base classes
                 will be a DBConnector subclass and unittest.TestCase
    @param suffix: A suffix used to create test case names. Prefixes
                   are defined in the DBConnector subclasses.
    N(   R‡   RŽ   R–   R   R    R¥   Rw   t   newt   classobjR    t   TestCaset   __dict__(   t   baset   suffixt   globalst
   connectorst	   connclasst   namet   klass(    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   makeSQLTests!  s    		$t   ADBAPITestCaset   ReconnectTestCaset   DeprecationTestCasec           B   s   e  Z d  Z d „  Z RS(   s8   
    Test deprecations in twisted.enterprise.adbapi
    c         C   s)   |  j  t t d ƒ } |  j | d ƒ d S(   sF   
        Test deprecation of twisted.enterprise.adbapi.safe()
        s   test's   test''N(   t   callDeprecatedR   R   t   assertEqual(   R   RO   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt	   test_safe@  s    	(   R^   R_   R`   RÁ   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR¾   ;  s   t   FakePoolc           B   s5   e  Z d  Z e Z e Z d „  Z d „  Z d „  Z RS(   s¿   
    A fake L{ConnectionPool} for tests.

    @ivar connectionFactory: factory for making connections returned by the
        C{connect} method.
    @type connectionFactory: any callable
    c         C   s   | |  _  d  S(   N(   t   connectionFactory(   R   RÃ   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   __init__W  s    c         C   s
   |  j  ƒ  S(   sB   
        Return an instance of C{self.connectionFactory}.
        (   RÃ   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRT   [  s    c         C   s   d S(   s   
        Do nothing.
        N(    (   R   t
   connection(    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRY   b  s    (	   R^   R_   R`   R   t	   reconnectt   noisyRÄ   RT   RY   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRÂ   L  s   		t   ConnectionTestCasec           B   s   e  Z d  Z d „  Z RS(   s,   
    Tests for the L{Connection} class.
    c         C   sˆ   d t  f d „  ƒ  Y} t | ƒ } t | ƒ } |  j t | j ƒ |  j t ƒ } |  j t	 | ƒ d ƒ |  j | d j
 j d d ƒ d S(   s|   
        If an error happens during rollback, L{ConnectionLost} is raised but
        the original error is logged.
        t   ConnectionRollbackRaisec           B   s   e  Z d  „  Z RS(   c         S   s   t  d ƒ ‚ d  S(   Ns   problem!(   t   RuntimeError(   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   rollbackt  s    (   R^   R_   RË   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRÉ   s  s   i   i    s   problem!N(   t   objectRÂ   R   t   assertRaisesR   RË   R"   RÊ   RJ   RA   t   valueR~   (   R   RÉ   t   poolRÅ   t   errors(    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   test_rollbackErrorLoggedn  s    (   R^   R_   R`   RÑ   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRÈ   i  s   t   TransactionTestCasec           B   s   e  Z d  Z d „  Z RS(   s-   
    Tests for the L{Transaction} class.
    c         C   s…   d t  f d „  ƒ  Y} t d ƒ } t | | ƒ  ƒ } | j ƒ  |  j t ƒ } |  j t | ƒ d ƒ |  j | d j	 j
 d d ƒ d S(   s„   
        If the cursor creation raises an error in L{Transaction.reopen}, it
        reconnects but log the error occurred.
        t   ConnectionCursorRaisec           B   s    e  Z d  Z d „  Z d „  Z RS(   i    c         S   s   d  S(   N(    (   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRÆ     s    c         S   s1   |  j  d k r- |  j  d 7_  t d ƒ ‚ n  d  S(   Ni    i   s   problem!(   t   countRÊ   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRU     s    (   R^   R_   RÔ   RÆ   RU   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRÓ   Š  s   	i   i    s   problem!N(   RÌ   RÂ   R3   R   t   reopenR"   RÊ   RJ   RA   RÎ   R~   (   R   RÓ   RÏ   R\   RÐ   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   test_reopenLogErrorIfReconnect…  s    
(   R^   R_   R`   RÖ   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRÒ   €  s   t   NonThreadPoolc           B   s   e  Z d  „  Z RS(   c         O   sO   t  } y | | | Ž  } Wn" t k
 r= } t } t ƒ  } n X| | | ƒ d  S(   N(   R   t	   ExceptionRŠ   R
   (   R   t   onResultR4   t   aR   t   successRO   t   e(    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   callInThreadWithCallbackŸ  s    (   R^   R_   RÝ   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR×   ž  s   t   DummyConnectionPoolc           B   s    e  Z d  Z e ƒ  Z d „  Z RS(   s'   
    A testable L{ConnectionPool};
    c         C   s   t  |  _  d S(   s*   
        Don't forward init call.
        N(   R   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRÄ   °  s    (   R^   R_   R`   R×   t
   threadpoolRÄ   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRÞ   ª  s   	t   EventReactorc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s  
    Partial L{IReactorCore} implementation with simple event-related
    methods.

    @ivar _running: A C{bool} indicating whether the reactor is pretending
        to have been started already or not.

    @ivar triggers: A C{list} of pending system event triggers.
    c         C   s   | |  _  g  |  _ d  S(   N(   t   _runningt   triggers(   R   t   running(    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRÄ   Â  s    	c         C   s*   |  j  r | ƒ  n |  j d d | ƒ Sd  S(   Nt   afterRŒ   (   Rá   t   addSystemEventTrigger(   R   t   function(    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   callWhenRunningÇ  s    	
c         C   s#   | | | f } |  j  j | ƒ | S(   N(   Râ   RF   (   R   t   phaset   eventt   triggert   handle(    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRå   Î  s    c         C   s   |  j  j | ƒ d  S(   N(   Râ   t   remove(   R   Rë   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   removeSystemEventTriggerÔ  s    (   R^   R_   R`   RÄ   Rç   Rå   Rí   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRà   ¸  s
   				t   ConnectionPoolTestCasec           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s+   
    Unit tests for L{ConnectionPool}.
    c            sr   d t  f d „  ƒ  Y} d „  } t ƒ  } | | _ | j | ƒ } ˆ  j | t ƒ } ‡  f d †  } | j | ƒ | S(   s‘   
        If rollback fails, L{ConnectionPool.runWithConnection} raises the
        original exception and log the error of the rollback.
        RÉ   c           B   s   e  Z d  „  Z d „  Z RS(   c         S   s   d  S(   N(    (   R   RÏ   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRÄ   ä  s    c         S   s   t  d ƒ ‚ d  S(   Ns   problem!(   RÊ   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRË   ç  s    (   R^   R_   RÄ   RË   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRÉ   ã  s   	c         S   s   t  d ƒ ‚ d  S(   Nt   foo(   t
   ValueError(   RÅ   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   raisingFunctionê  s    c            sG   ˆ  j  t ƒ } ˆ  j t | ƒ d ƒ ˆ  j | d j j d d ƒ d  S(   Ni   i    s   problem!(   R"   RÊ   RJ   RA   RÎ   R~   (   t   ignoredRÐ   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   cbFailedñ  s    (   RÌ   RÞ   RÃ   R:   t   assertFailureRð   R   (   R   RÉ   Rñ   RÏ   R   Ró   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt(   test_runWithConnectionRaiseOriginalErrorÞ  s    			c         C   sv   d t  f d „  ƒ  Y} t ƒ  } | j | ƒ  ƒ |  j t ƒ } |  j t | ƒ d ƒ |  j | d j j d d ƒ d S(   s;   
        L{ConnectionPool._close} logs exceptions.
        t   ConnectionCloseRaisec           B   s   e  Z d  „  Z RS(   c         S   s   t  d ƒ ‚ d  S(   Ns   problem!(   RÊ   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   þ  s    (   R^   R_   R   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRö   ý  s   i   i    s   problem!N(	   RÌ   RÞ   t   _closeR"   RÊ   RJ   RA   RÎ   R~   (   R   Rö   RÏ   RÐ   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   test_closeLogErrorù  s    	c            s‘   d t  f d „  ƒ  Y} d t  f d „  ƒ  Y} d „  } t ƒ  } | | _ | | _ | j | ƒ } ˆ  j | t ƒ } ‡  f d †  } | j | ƒ | S(   sŽ   
        If rollback fails, L{ConnectionPool.runInteraction} raises the
        original exception and log the error of the rollback.
        RÉ   c           B   s   e  Z d  „  Z d „  Z RS(   c         S   s   d  S(   N(    (   R   RÏ   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRÄ     s    c         S   s   t  d ƒ ‚ d  S(   Ns   problem!(   RÊ   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRË     s    (   R^   R_   RÄ   RË   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRÉ     s   	t   DummyTransactionc           B   s   e  Z d  „  Z RS(   c         S   s   d  S(   N(    (   R   RÏ   RÅ   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRÄ     s    (   R^   R_   RÄ   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRù     s   c         S   s   t  d ƒ ‚ d  S(   NRï   (   Rð   (   R\   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRñ     s    c            sG   ˆ  j  t ƒ } ˆ  j t | ƒ d ƒ ˆ  j | d j j d d ƒ d  S(   Ni   i    s   problem!(   R"   RÊ   RJ   RA   RÎ   R~   (   Rò   RÐ   (   R   (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRó   "  s    (   RÌ   RÞ   RÃ   t   transactionFactoryR8   Rô   Rð   R   (   R   RÉ   Rù   Rñ   RÏ   R   Ró   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt)   test_runWithInteractionRaiseOriginalError	  s    				c         C   s^   t  t ƒ } t d d | ƒ} |  j | j d d | j f g ƒ | j ƒ  |  j | j ƒ d S(   s™   
        If L{ConnectionPool.close} is called without L{ConnectionPool.start}
        having been called, the pool's startup event is cancelled.
        s   twisted.test.test_adbapit
   cp_reactorRä   RŒ   N(   Rà   RŠ   R   RJ   Râ   t   _startR   t   assertFalse(   R   R   RÏ   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   test_unstartedClose*  s
    "
c         C   s^   t  t ƒ } t d d | ƒ} |  j | j d d | j f g ƒ | j ƒ  |  j | j ƒ d S(   s   
        If L{ConnectionPool.close} is called after it has been started, but
        not by its shutdown trigger, the shutdown trigger is cancelled.
        s   twisted.test.test_adbapiRü   t   duringt   shutdownN(   Rà   R   R   RJ   Râ   t
   finalCloseR   Rþ   (   R   R   RÏ   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   test_startedClose8  s
    "
(   R^   R_   R`   Rõ   Rø   Rû   Rÿ   R  (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRî   Ù  s   			!	(    (    (    ()   R`   t   twisted.trialR    Rt   R©   R°   t   twisted.enterprise.adbapiR   R   R   R   R   R   t   twisted.internetR   R   R	   t   twisted.python.failureR
   R#   R   Rc   Rp   R‡   RŽ   R–   R   R    R¥   R»   R¶   R²   R¾   RÌ   RÂ   RÈ   RÒ   R×   RÞ   Rà   Rî   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt   <module>   s8   $ÝI>!,	!