ó
ê=Nc           @   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   0   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   3   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   checkOpenfunCalled6   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   C   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   P   s    c         S   s   d  S(   N(   t   None(   t   f(    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   Q   s    (   R   t   maybeDeferredR   t   runQueryt   addCallbacks(   R   R   R   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR%   N   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   W   s    c         S   s   d  S(   N(   R3   (   R4   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   X   s    (   R   R5   R   R   R7   (   R   R   R   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR&   T   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'   [   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   e   s    c         S   s   d  S(   N(   R3   (   R4   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR   f   s    (   R   R5   R   t   runWithConnectiont   bad_withConnectionR7   (   R   R   R   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR(   b   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   _checkm   s    $(   R   R6   R   (   R   R   t   sqlR   R>   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR)   i   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*   s   s    
c            s/   ˆ  j  j ˆ  j ƒ } | j ‡  f d †  ƒ | S(   Nc            s   ˆ  j  |  d ƒ S(   Nt   done(   t   assertEqual(   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   fetchallRJ   RA   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   RZ   R   RA   R   (   R   R   RY   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   RY   (    (    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.pyRi     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>   4  s    (   R   R6   R   (   R   R   R?   R   R>   (    (   R   s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyR+   1  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,   9  s    
N(   R]   R^   R_   R	   R`   R   R3   Ra   R   R   R1   Ri   R)   R*   R+   R,   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRb   ù   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    Rg   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.pyRu   f  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   k  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   o  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   s  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(   Rx   (   R   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRy   z  s    N(   R]   R^   R_   R3   Rv   t   DB_NAMEt   DB_USERt   DB_PASSRr   R   t   nulls_okt   trailing_spaces_okR\   R$   t   escape_slashesR   Rf   Rj   t	   can_clearRB   Rw   Ru   R   R   R   Ry   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRo   B  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.pyRu   Š  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   Rr   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   Rc   (   R   Rr   (   R   R}   R~   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRy   œ  s    (   R]   R^   Rv   R‰   R‚   R\   R„   Rf   RB   Ru   R   Ry   (    (    (    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.pyRu   ¨  s
      c         C   sJ   t  j j |  j |  j ƒ |  _ t  j j |  j ƒ rF t  j |  j ƒ n  d  S(   N(   Rs   t   patht   joinRr   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   Rc   (   s   sqlite(   R’   (   R   R}   R~   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRy   ²  s    (	   R]   R^   Rv   R‰   R„   RB   Ru   R   Ry   (    (    (    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.pyRu   º  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.pyRy   Å  s    (   R]   R^   Rv   Ru   Ry   (    (    (    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.pyRu   Î  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.pyRy   Ù  s    (   R]   R^   Rv   Ru   Ry   (    (    (    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.pyRu   æ  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.pyRy   ñ  s    $(	   R]   R^   Rv   R‰   Rƒ   R\   Rj   Ru   Ry   (    (    (    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.pyRu      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¦   Rs   R   R‘   Rr   Ro   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.pyRy     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^   Rv   R‰   R$   R„   R3   Rf   R…   RB   Ru   R   Ry   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¤   Rv   t   typest	   ClassTypeR    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   RJ   (   R   RO   (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyt	   test_safeB  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__Y  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.pyRX   d  s    (	   R]   R^   R_   R   t	   reconnectt   noisyRÂ   RT   RX   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRÀ   N  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   rollbackv  s    (   R]   R^   RÉ   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRÇ   u  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_rollbackErrorLoggedp  s    (   R]   R^   R_   RÏ   (    (    (    s<   /usr/lib/python2.7/dist-packages/twisted/test/test_adbapi.pyRÆ   k  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_startedClose:  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    Rs   R¨   R¯   t   twisted.enterprise.adbapiR   R   R   R   R   R   t   twisted.internetR   R   R	   t   twisted.python.failureR
   R#   R   Rb   Ro   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>   s:   ÝI>!,	!