+
    Dfje                     P   R t ^ RIt^ RIt^ RIHtHt ^ RIHtHtH	t	H
t
 ^ RIHtHtHt ^ RIHt ^ RIHt ^ RIHt Rt ! R	 R
4      t ! R R4      t ! R R4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      tR t]! ]R] ! 4       4       ]! ]R] ! 4       4        ! R R4      t! ! R  R!]PD                  4      t# ! R" R#]PD                  4      t$ ! R$ R%4      t% ! R& R']	4      t& ! R( R)4      t' ! R* R+]PD                  4      t(R# ),z&
Tests for twisted.enterprise.adbapi.
N)DictOptional)
ConnectionConnectionLostConnectionPoolTransaction)defer
interfacesreactor)FailurerequireModule)unittestz%
CREATE TABLE simple (
  x integer
)
c                      a  ] tR t^t o Rt/ t]P                  ! ]R4      f   Rt	R t
R tR tRR ltR tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR t V 3R lt!Rt"V t#R# )ADBAPITestBasez$
Test the asynchronous DB-API code.
N5ADB-API requires threads, no way to test without themc                    V P                  4        V P                  V P                  R7      V n        V P                  P	                  4        R# )zB
Set up the database and create a connection pool pointing at it.
)
cp_openfunN)startDBmakePoolopenfundbpoolstartselfs   &:/usr/lib/python3/dist-packages/twisted/test/test_adbapi.py
extraSetUpADBAPITestBase.extraSetUp(   s3     	mmt||m<    c                   a  S P                   P                  R 4      pVP                  V 3R l4       VP                  V 3R l4       V# )DROP TABLE simplec                 8   < SP                   P                  4       # Nr   closeresr   s   &r   <lambda>)ADBAPITestBase.tearDown.<locals>.<lambda>2       $++"3"3"5r   c                 $   < SP                  4       # r"   stopDBr%   s   &r   r'   r(   3       $++-r   r   runOperationaddCallbackr   ds   f r   tearDownADBAPITestBase.tearDown0   7    KK$$%89	56	/0r   c                $    R V P                   V&   R# )TN)openfun_calledr   conns   &&r   r   ADBAPITestBase.openfun6   s    $(D!r   c                    V'       g   V P                  V P                  4       R # V P                  WP                  4       R # r"   )
assertTruer7   assertInr8   s   &&r   checkOpenfunCalled!ADBAPITestBase.checkOpenfunCalled9   s)    OOD//0MM$ 3 34r   c                  a  S P                   P                  \        4      pS P                  '       d   VP	                  S P
                  4       VP	                  S P                  4       VP	                  S P                  4       VP	                  S P                  4       VP	                  V 3R  l4       VP	                  S P                  4       VP	                  S P                  4       VP	                  S P                  4       VP	                  S P                  4       VP	                  S P                  4       VP	                  S P                  4       VP	                  S P                  4       VP	                  S P                   4       V# )c                 $   < SP                  4       # r"   )flushLoggedErrorsr%   s   &r   r'   *ADBAPITestBase.test_pool.<locals>.<lambda>F   s    d&<&<&>r   )r   r/   simple_table_schematest_failuresr0   _testPool_1_1_testPool_1_2_testPool_1_3_testPool_1_4_testPool_2_testPool_3_testPool_4_testPool_5_testPool_6_testPool_7_testPool_8_testPool_9r1   s   f r   	test_poolADBAPITestBase.test_pool?   s   KK$$%89MM$,,-MM$,,-MM$,,-MM$,,-MM>?	d&&'	d&&'	d&&'	d&&'	d&&'	d&&'	d&&'	d&&'r   c                   a  \         P                  ! S P                  P                  R 4      pVP	                  V 3R lR 4       V# )select * from NOTABLEc                 &   < SP                  R 4      # zno exceptionfailr%   s   &r   r'   .ADBAPITestBase._testPool_1_1.<locals>.<lambda>S       499^#<r   c                     R # r"    fs   &r   r'   rZ   S       r   r   maybeDeferredr   runQueryaddCallbacksr   r&   r2   s   f& r   rF   ADBAPITestBase._testPool_1_1Q   s4     4 46MN	<nMr   c                   a  \         P                  ! S P                  P                  R 4      pVP	                  V 3R lR 4       V# )zdeletexxx from NOTABLEc                 &   < SP                  R 4      # rW   rX   r%   s   &r   r'   .ADBAPITestBase._testPool_1_2.<locals>.<lambda>X   r[   r   c                     R # r"   r]   r^   s   &r   r'   ri   X   r`   r   )r   rb   r   r/   rd   re   s   f& r   rG   ADBAPITestBase._testPool_1_2V   s4     8 8:RS	<nMr   c                   a  \         P                  ! S P                  P                  S P                  4      pVP                  V 3R  lR 4       V# )c                 &   < SP                  R 4      # rW   rX   r%   s   &r   r'   .ADBAPITestBase._testPool_1_3.<locals>.<lambda>]   r[   r   c                     R # r"   r]   r^   s   &r   r'   rn   ]   r`   r   )r   rb   r   runInteractionbad_interactionrd   re   s   f& r   rH   ADBAPITestBase._testPool_1_3[   s9     : :D<P<PQ	<nMr   c                   a  \         P                  ! S P                  P                  S P                  4      pVP                  V 3R  lR 4       V# )c                 &   < SP                  R 4      # rW   rX   r%   s   &r   r'   .ADBAPITestBase._testPool_1_4.<locals>.<lambda>b   r[   r   c                     R # r"   r]   r^   s   &r   r'   ru   b   r`   r   )r   rb   r   runWithConnectionbad_withConnectionrd   re   s   f& r   rI   ADBAPITestBase._testPool_1_4`   s9     = =t?V?VW	<nMr   c                p   a  R pS P                   P                  V4      pV 3R lpVP                  V4       V# )select count(1) from simplec                    < SP                  \        V ^ ,          ^ ,          4      ^ 8H  R4       SP                  4        R# )    zInteraction not rolled backN)r<   intr>   rowr   s   &r   _check*ADBAPITestBase._testPool_2.<locals>._checkj   s/    OOCAq	Na/1NO##%r   r   rc   r0   r   r&   sqlr2   r   s   f&   r   rJ   ADBAPITestBase._testPool_2e   s4    +KK  %	& 	
fr   c                6  a  R p. p\        S P                  4       F6  pRV,          pVP                  S P                  P	                  V4      4       K8  	  \
        P                  ! V4      pV 3R lpVP                  V4       V 3R lpVP                  V4       V# )r{   z insert into simple(x) values(%d)c                 B   < R pSP                   P                  V4      pV# )select x from simple order by x)r   rc   )r&   r   r2   r   s   &  r   _select+ADBAPITestBase._testPool_3.<locals>._selectz   s!    3C$$S)AHr   c                   < SP                  \        V 4      SP                  8H  R 4       \        SP                  4       FI  pSP                  \        W,          4      ^8H  R4       SP                  W,          ^ ,          V8H  R4       KK  	  R# )zWrong number of rowsWrong size rowzValues not returned.N)r<   lennum_iterationsrange)rowsir   s   & r   r   *ADBAPITestBase._testPool_3.<locals>._check   si    OOCI)<)<<>TU4../DG 13CD
a1GH 0r   )r   r   appendr   r/   r   gatherResultsr0   )r   r&   r   insertsr   r2   r   r   s   f&      r   rK   ADBAPITestBase._testPool_3q   s    +t**+A4q8CNN4;;33C89 , (	 	
g	I 	
fr   c                |   a  S P                   P                  S P                  4      pVP                  V 3R  l4       V# )c                 (   < SP                  V R 4      # doneassertEqualr%   s   &r   r'   ,ADBAPITestBase._testPool_4.<locals>.<lambda>       $"2"23"?r   )r   rp   interactionr0   re   s   f& r   rL   ADBAPITestBase._testPool_4   s/    KK&&t'7'78	?@r   c                |   a  S P                   P                  S P                  4      pVP                  V 3R  l4       V# )c                 (   < SP                  V R 4      # r   r   r%   s   &r   r'   ,ADBAPITestBase._testPool_5.<locals>.<lambda>   r   r   )r   rw   withConnectionr0   re   s   f& r   rM   ADBAPITestBase._testPool_5   s/    KK))$*=*=>	?@r   c                P    V P                   P                  V P                  4      pV# r"   )r   rw   close_withConnectionre   s   && r   rN   ADBAPITestBase._testPool_6   s!    KK))$*C*CDr   c                  a  . p\        S P                  4       F6  pR V,          pVP                  S P                  P	                  V4      4       K8  	  \
        P                  ! VRR7      pV 3R lpVP                  V4       V# )z!select x from simple where x = %dTfireOnOneErrbackc                    < \        SP                  4       F3  pSP                  W,          ^,          ^ ,          ^ ,          V8H  R4       K5  	  R# )   zValue not returnedN)r   r   r<   )resultr   r   s   & r   r   *ADBAPITestBase._testPool_7.<locals>._check   s;    4../	!Q 2a 79MN 0r   )r   r   r   r   rc   r   DeferredListr0   )r   r&   dsr   r   dlistr   s   f&     r   rO   ADBAPITestBase._testPool_7   sq    t**+A59CIIdkk**3/0 , ""2=	O 	&!r   c                    . p\        V P                  4       F6  pR V,          pVP                  V P                  P	                  V4      4       K8  	  \
        P                  ! VRR7      pV# )zdelete from simple where x = %dTr   )r   r   r   r   r/   r   r   )r   r&   r   r   r   r   s   &&    r   rP   ADBAPITestBase._testPool_8   sZ    t**+A3a7CIIdkk..s34 , ""2=r   c                p   a  R pS P                   P                  V4      pV 3R lpVP                  V4       V# )r{   c                    < SP                  \        V ^ ,          ^ ,          4      ^ 8H  R4       SP                  4        R# )r}   z)Didn't successfully delete table contentsN)r<   r~   checkConnectr   s   &r   r   *ADBAPITestBase._testPool_9.<locals>._check   s4    OOCF1I!#%P r   r   r   s   f&   r   rQ   ADBAPITestBase._testPool_9   s4    +KK  %	  	
fr   c                   V P                   P                  4       pV P                  V4       VP                  4       pVP	                  R4       VP	                  R4       VP                  4       pV P                  \        V4      ^4       V P                  \        V^ ,          4      ^4       V P                  V^ ,          ^ ,          ^4       VP	                  R4       VP	                  R4       V P                  \        VP                  4       4      ^ 4       VP                  4        V P                   P                  V4       R# )z/Check the connect/disconnect synchronous calls.zinsert into simple(x) values(1)zselect x from simplezdelete from simpleN)
r   connectr>   cursorexecutefetchallr   r   r$   
disconnect)r   r9   cursr&   s   &   r   r   ADBAPITestBase.checkConnect   s    {{""$%{{}67+,mmoS1%SVa(QA&)*+,T]]_-q1

t$r   c                4   VP                  R 4       \        V P                  4       FM  pVP                  4       pV P	                  \        V4      ^8H  R4       V P	                  V^ ,          V8H  R4       KO  	  V P                  VP                  4       R4       R# )r   r   Value not returned.zToo many rowsr   )r   r   r   fetchoner<   r   assertIsNone)r   transactionr   r   s   &&  r   r   ADBAPITestBase.interaction   s    =>t**+A&&(COOCHM+;<OOCFaK)>? , 	+..0/Br   c                n    V P                   '       d   VP                  R 4       VP                  R4       R# )zinsert into simple(x) values(0)rU   N)can_rollbackr   )r   r   s   &&r   rq   ADBAPITestBase.bad_interaction   s,     AB34r   c                `   VP                  4       p VP                  R 4       \        V P                  4       FM  pVP	                  4       pV P                  \        V4      ^8H  R4       V P                  V^ ,          V8H  R4       KO  	  VP                  4        R#   TP                  4        i ; i)r   r   r   r   )r   r   r   r   r   r<   r   r$   )r   r9   r   r   r   s   &&   r   r   ADBAPITestBase.withConnection   s    {{}	LL:;4../mmoCA/?@A!-BC 0
 JJL JJLs   A7B B-c                &    VP                  4        R # r"   )r$   r8   s   &&r   r   #ADBAPITestBase.close_withConnection   s    

r   c                    VP                  4       p VP                  R 4       VP                  4        R#   TP                  4        i ; i)rU   N)r   r   r$   )r   r9   r   s   && r   rx   !ADBAPITestBase.bad_withConnection   s2    {{}	LL01JJLDJJLs	   5 Ac                <   < V ^8  d   Qh/ S[ S[S[3,          ;R&   # )   r7   )r   objectbool)format__classdict__s   "r   __annotate__ADBAPITestBase.__annotate__   s     
 &+ r   r   r"   )$__name__
__module____qualname____firstlineno____doc__r7   r	   IReactorThreadsr
   skipr   r3   r   r>   rR   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   r   r   rq   r   r   rx   __annotate_func____static_attributes____classdictcell__r   s   @r   r   r      s      *,N!!'408F)5$




6
%"5
i  r   r   c                      a  ] tR t^t o Rt]P                  ! ]R4      f   RtR t	R t
R tR tR tR	 tR
 tR tRtV tR# )ReconnectTestBasez3
Test the asynchronous DB-API code with reconnect.
Nr   c                "   V P                   f   \        P                  ! R4      hV P                  4        V P	                  ^RV P                   R7      V n        V P
                  P                  4        V P
                  P                  \        4      # )z
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.
zno good sql for reconnect testT)cp_maxcp_reconnectcp_good_sql)	good_sqlr   SkipTestr   r   r   r   r/   rD   r   s   &r   r   ReconnectTestBase.extraSetUp  sq     == ##$DEEmm4T]] $ 
 	{{''(;<<r   c                   a  S P                   P                  R 4      pVP                  V 3R l4       VP                  V 3R l4       V# )r    c                 8   < SP                   P                  4       # r"   r#   r%   s   &r   r'   ,ReconnectTestBase.tearDown.<locals>.<lambda>  r)   r   c                 $   < SP                  4       # r"   r+   r%   s   &r   r'   r     r-   r   r.   r1   s   f r   r3   ReconnectTestBase.tearDown  r5   r   c                d   \         P                  ! R 4      pVP                  V P                  4       VP                  V P                  4       V P
                  '       g   VP                  V P                  4       VP                  V P                  4       VP                  V P                  4       V# r"   )	r   succeedr0   _testPool_1rJ   early_reconnectrK   rL   rM   r1   s   & r   rR   ReconnectTestBase.test_pool  s{    MM$	d&&'	d&&'###MM$**+	d&&'	d&&'r   c                p   a  R pS P                   P                  V4      pV 3R lpVP                  V4       V# )r{   c                 `   < SP                  \        V ^ ,          ^ ,          4      ^ 8H  R4       R# r}   zTable not emptyNr<   r~   r   s   &r   r   -ReconnectTestBase._testPool_1.<locals>._check%  #    OOCAq	Na/1BCr   r   r   s   f&   r   r   ReconnectTestBase._testPool_1!  5    +KK  %	D 	
fr   c                    \        V P                  P                  P                  4       4      ^ ,          P	                  4        R# )r}   N)listr   connectionsvaluesr$   )r   r&   s   &&r   rJ   ReconnectTestBase._testPool_2+  s+    T[[$$++-.q1779r   c                   a  R p\         P                  ! S P                  P                  V4      pVP	                  V 3R lR 4       V# )r{   c                 &   < SP                  R 4      # rW   rX   r%   s   &r   r'   /ReconnectTestBase._testPool_3.<locals>.<lambda>2  r[   r   c                     R # r"   r]   r^   s   &r   r'   r	  2  r`   r   ra   r   r&   r   r2   s   f&  r   rK   ReconnectTestBase._testPool_3/  s8    + 4 4c:	<nMr   c                p   a  R pS P                   P                  V4      pV 3R lpVP                  V4       V# )r{   c                 `   < SP                  \        V ^ ,          ^ ,          4      ^ 8H  R4       R# r   r   r   s   &r   r   -ReconnectTestBase._testPool_4.<locals>._check9  r   r   r   r   s   f&   r   rL   ReconnectTestBase._testPool_45  r  r   c                   a  S P                  4        R p\        P                  ! S P                  P                  V4      pVP                  V 3R lV 3R l4       V# )rU   c                 &   < SP                  R 4      # rW   rX   r%   s   &r   r'   /ReconnectTestBase._testPool_5.<locals>.<lambda>D  s    		.1r   c                 L   < SP                  V P                  \        4      4      # r"   )assertFalsecheckr   )r_   r   s   &r   r'   r  E  s    d&&qww~'>?r   )rB   r   rb   r   rc   rd   r  s   f&  r   rM   ReconnectTestBase._testPool_5?  sI     % 4 4c:	1?	
 r   r   )r   r   r   r   r   r	   r   r
   r   r   r3   rR   r   rJ   rK   rL   rM   r   r   r   s   @r   r   r      sQ      !!'408F=: r   r   c                      a  ] tR tRt o RtRtRtRtRtRt	Rt
RtRtRtRt]P                   tRtRt^2tR tR tR tR	 tR
 tR tV 3R ltRtV tR# )DBTestConnectoriJ  a&  
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.
Ntwisted_testTc                   V P                  4       V n        \        P                  ! V P                  4       V P	                  4       '       g(   \
        P                  ! R V P                  ,          4      hV P                  4       # )z%s: Cannot access db)	mktempDB_DIRosmkdircan_connectr   r   TEST_PREFIXr   r   s   &r   setUpDBTestConnector.setUpi  sX    kkm
!!##$:T=M=M$MNN  r   c                    \        4       h)zPReturn true if this database is present on the system
and can be used in a test.NotImplementedErrorr   s   &r   r   DBTestConnector.can_connectp  s     "##r   c                    R# )z+Take any steps needed to bring database up.Nr]   r   s   &r   r   DBTestConnector.startDBu      r   c                    R# )zBring database down, if needed.Nr]   r   s   &r   r,   DBTestConnector.stopDBy  r*  r   c                ~    V P                  4       w  r#VP                  4       pVP                  V4       \        V/ VB # )z;Create a connection pool with additional keyword arguments.)getPoolArgscopyupdater   )r   newkwargskws   &,  r   r   DBTestConnector.makePool}  s9    ##%WWY
		%t*r**r   c                    \        4       h)zReturn a tuple (args, kw) of list and keyword arguments
that need to be passed to ConnectionPool to create a connection
to this database.r%  r   s   &r   r.  DBTestConnector.getPoolArgs  s     "##r   c                R   < V ^8  d   Qh/ S[ S[,          ;R&   S[ S[,          ;R&   # )r   r!  r   )r   str)r   r   s   "r   r   DBTestConnector.__annotate__J  s'      #% 0 sm51 r   )r  )r   r   r   r   r   r!  DB_NAMEDB_USERDB_PASSr  nulls_oktrailing_spaces_okr   rE   escape_slashesr   r   r   	can_clearr   r"  r   r   r,   r   r.  r   r   r   r   s   @r   r  r  J  s      "&KGGGFHLMN,55HOI N!$
+$u  r   r  c                   B   a  ] tR tRt o RtRtRt^tR tR t	R t
RtV tR	# )
SQLite3Connectori  z:
Connector that uses the stdlib SQLite3 database support.
SQLite3Fc                $    \        R 4      f   R# R# )sqlite3FTr   r   s   &r   r   SQLite3Connector.can_connect  s    #+r   c                   \         P                  P                  V P                  V P                  4      V n        \         P                  P                  V P
                  4      '       d#   \         P                  ! V P
                  4       R # R # r"   r  pathjoinr  r:  databaseexistsunlinkr   s   &r   r   SQLite3Connector.startDB  L    T[[$,,?77>>$--((IIdmm$ )r   c                0    RpRV P                   R^RR/pW3# )rE  rK  r   check_same_threadF)rE  rK  r   r2  r3  s   &  r   r.  SQLite3Connector.getPoolArgs  s%    $--16I5Qxr   rR  Nr   r   r   r   r   r!  r?  r   r   r   r.  r   r   r   s   @r   rB  rB    s/      KNN%
 r   rB  c                   B   a  ] tR tRt o RtRtRt^tR tR t	R t
RtV tR	# )
PySQLite2Connectori  z9
Connector that uses pysqlite's SQLite database support.
	pysqlite2Fc                $    \        R 4      f   R# R# )pysqlite2.dbapi2FTr   r   s   &r   r   PySQLite2Connector.can_connect  s    +,4r   c                   \         P                  P                  V P                  V P                  4      V n        \         P                  P                  V P
                  4      '       d#   \         P                  ! V P
                  4       R # R # r"   rH  r   s   &r   r   PySQLite2Connector.startDB  rO  r   c                0    RpRV P                   R^RR/pW3# )rZ  rK  r   rQ  F)rZ  rR  rS  s   &  r   r.  PySQLite2Connector.getPoolArgs  s%    $$--16I5Qxr   rR  NrU  r   s   @r   rW  rW    s/      KNN%
 r   rW  c                   0   a  ] tR tRt o RtR tR tRtV tR# )PyPgSQLConnectori  PyPgSQLc                     ^ RI Hp  TP                  T P                  T P
                  T P                  R7      pTP                  4        R#   \         d     R# i ; i  \         d     R# i ; i)r}   )PgSQLFrK  userpasswordT)pyPgSQLrd  BaseExceptionr   r:  r;  r<  r$   )r   rd  r9   s   &  r   r   PyPgSQLConnector.can_connect  sj    	%	==DLL4<< ! D JJL  		  		s#   A AA AAA.-A.c                \    RpRV P                   RV P                  RV P                  R^ /pW3# )pyPgSQL.PgSQLrK  rf  rg  cp_min)rl  r:  r;  r<  rS  s   &  r   r.  PyPgSQLConnector.getPoolArgs  s7    !DLLa	
 xr   r]   N	r   r   r   r   r!  r   r.  r   r   r   s   @r   ra  ra         K r   ra  c                   0   a  ] tR tRt o RtR tR tRtV tR# )PsycopgConnectori  Psycopgc                     ^ RI p TP                  T P                  T P                  T P
                  R7      pTP                  4        R#   \         d     R# i ; i  \         d     R# i ; i)r}   NFre  T)psycopgri  r   r:  r;  r<  r$   )r   rv  r9   s   &  r   r   PsycopgConnector.can_connect  sj    		??DLL4<< # D JJL  		  		#   A AA AAA,+A,c                \    RpRV P                   RV P                  RV P                  R^ /pW3# )rv  rK  rf  rg  rm  )rv  rn  rS  s   &  r   r.  PsycopgConnector.getPoolArgs  s7    DLLa	
 xr   r]   Nrp  r   s   @r   rs  rs    rq  r   rs  c                   <   a  ] tR tRt o RtRtRtRtR tR t	Rt
V tR# )MySQLConnectori  MySQLFc                     ^ RI p TP                  T P                  T P                  T P
                  R7      pTP                  4        R#   \         d     R# i ; i  \         d     R# i ; i)r}   NF)dbrf  passwdT)MySQLdbri  r   r:  r;  r<  r$   )r   r  r9   s   &  r   r   MySQLConnector.can_connect  sj    		??<<dll4<< # D JJL  		  		rx  c                X    RpRV P                   RV P                  RV P                  /pW3# )r  r  rf  r  )r  rn  rS  s   &  r   r.  MySQLConnector.getPoolArgs  s,    DLL&$,,$,,Oxr   r]   N)r   r   r   r   r!  r>  r   r   r   r.  r   r   r   s   @r   r|  r|    s)     KLO r   r|  c                   P   a  ] tR tRt o RtRtRtRtRt^t	R t
R tR tR tR	tV tR# )
FirebirdConnectori  FirebirdFNc                    \        R 4      f   R#  V P                  4        V P                  4        R#   \         d     R# i ; i)kinterbasdbFT)r   r   r,   ri  r   s   &r   r   FirebirdConnector.can_connect  s<    '/	LLNKKM 		s    3 AAc                   ^ RI p\        P                  P                  V P                  \
        P                  4      V n        \        P                  ! V P                  \        P                  \        P                  ,           \        P                  ,           4       RpW P                  V P                  V P                  3,          pVP                  V4      pVP                  4        R# )r}   Nz,create database "%s" user "%s" password "%s")r  r  rI  rJ  r  r  r:  chmodstatS_IRWXUS_IRWXGS_IRWXOr;  r<  create_databaser$   )r   r  r   r9   s   &   r   r   FirebirdConnector.startDB&  s    ww||DKK1H1HI
dllT\\9DLLHI<dllDLL99**3/

r   c                \    RpRV P                   RRRV P                  RV P                  /pW3# )r  rK  host	127.0.0.1rf  rg  )r  rn  rS  s   &  r   r.  FirebirdConnector.getPoolArgs0  s7    KDLL	
 xr   c                    ^ RI pVP                  V P                  RV P                  V P                  R7      pVP                  4        R# )r}   Nr  )rK  r  rf  rg  )r  r   r:  r;  r<  drop_database)r   r  r9   s   &  r   r,   FirebirdConnector.stopDB:  s@    ""\\\\	 # 
 	r   )r:  )r   r   r   r   r!  rE   r?  r   r@  r   r   r   r.  r,   r   r   r   s   @r   r  r    s<     KMNHIN	 	r   r  c                  a \         \        \        \        \        \
        .p/ pV F  oSP                  V,           p ! V3R lRSV \        P                  4      pWVn	        \        SR4      '       d:   RP                  SP                  P                  4       ^ R V.,           4      Vn        WdV&   K  	  VP                  V4       R# )a9  
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.
c                   2   < ] tR tRt Z P                  tRtR# )makeSQLTests.<locals>.testcasei[  r]   N)r   r   r   r   r   )	connclasss   r   testcaser  [  s    "--Jr   r  r   .N)rW  rB  ra  rs  r|  r  r!  r   TestCaser   hasattrrJ  r   splitr0  )basesuffixglobals
connectorstestsnamer  r  s   &&&    @r   makeSQLTestsr  F  s     	J E	$$v-	.y$(9(9 	. !9n--$'HH&&,,.q4v=%H! d   NN5r   ADBAPITestsReconnectTestsc                   >   a  ] tR tRt o RtRtRtR tR tR t	Rt
V tR# )	FakePooliq  z
A fake L{ConnectionPool} for tests.

@ivar connectionFactory: factory for making connections returned by the
    C{connect} method.
@type connectionFactory: any callable
Tc                    Wn         R # r"   connectionFactory)r   r  s   &&r   __init__FakePool.__init__}  s    !2r   c                "    V P                  4       # )z2
Return an instance of C{self.connectionFactory}.
r  r   s   &r   r   FakePool.connect  s     %%''r   c                    R# )z
Do nothing.
Nr]   )r   
connections   &&r   r   FakePool.disconnect  s    r   r  N)r   r   r   r   r   	reconnectnoisyr  r   r   r   r   r   s   @r   r  r  q  s*      IE3( r   r  c                   *   a  ] tR tRt o RtR tRtV tR# )ConnectionTestsi  z$
Tests for the L{Connection} class.
c                N    ! R R4      p\        V4      p\        V4      pV P                  \        VP                  4       V P                  \        4      pV P                  \        V4      ^4       V P                  V^ ,          P                  P                  ^ ,          R4       R# )zd
If an error happens during rollback, L{ConnectionLost} is raised but
the original error is logged.
c                   &   a  ] tR tRt o R tRtV tR# )IConnectionTests.test_rollbackErrorLogged.<locals>.ConnectionRollbackRaisei  c                    \        R 4      hproblem!RuntimeErrorr   s   &r   rollbackRConnectionTests.test_rollbackErrorLogged.<locals>.ConnectionRollbackRaise.rollback      ":..r   r]   N)r   r   r   r   r  r   r   r   s   @r   ConnectionRollbackRaiser         / /r   r  r  N)r  r   assertRaisesr   r  rB   r  r   r   valuer2  )r   r  poolr  errorss   &    r   test_rollbackErrorLogged(ConnectionTests.test_rollbackErrorLogged  s    	/ 	/ /0%
.**=*=>''5Va(--a0*=r   r]   N)r   r   r   r   r   r  r   r   r   s   @r   r  r    s     > >r   r  c                   *   a  ] tR tRt o RtR tRtV tR# )TransactionTestsi  z%
Tests for the L{Transaction} class.
c                8    ! R R4      p\        R4      p\        W!! 4       4      pVP                  4        V P                  \        4      pV P                  \        V4      ^4       V P                  V^ ,          P                  P                  ^ ,          R4       R# )zl
If the cursor creation raises an error in L{Transaction.reopen}, it
reconnects but log the error occurred.
c                   0   a  ] tR tRt o ^ tR tR tRtV tR# )NTransactionTests.test_reopenLogErrorIfReconnect.<locals>.ConnectionCursorRaisei  c                    R # r"   r]   r   s   &r   r  XTransactionTests.test_reopenLogErrorIfReconnect.<locals>.ConnectionCursorRaise.reconnect      r   c                p    V P                   ^ 8X  d%   V ;P                   ^,          un         \        R4      hR# )r}   r  N)countr  r   s   &r   r   UTransactionTests.test_reopenLogErrorIfReconnect.<locals>.ConnectionCursorRaise.cursor  s*    ::?JJ!OJ&z22 #r   r]   N)	r   r   r   r   r  r  r   r   r   r   s   @r   ConnectionCursorRaiser    s     E3 3r   r  Nr  )	r  r   reopenrB   r  r   r   r  r2  )r   r  r  r   r  s   &    r   test_reopenLogErrorIfReconnect/TransactionTests.test_reopenLogErrorIfReconnect  sz    		3 		3 ~!$(=(?@''5Va(--a0*=r   r]   N)r   r   r   r   r   r  r   r   r   s   @r   r  r    s     > >r   r  c                   &   a  ] tR tRt o R tRtV tR# )NonThreadPooli  c                f    R p V! V/ VB pV! WV4       R#   \          d    Rp\        4       p L#i ; i)TFN)	Exceptionr   )r   onResultr_   ar3  successr   s   &&&*,  r   callInThreadWithCallback&NonThreadPool.callInThreadWithCallback  s@    	[R[F 	!  	GYF	s    00r]   N)r   r   r   r   r  r   r   r   s   @r   r  r    s     " "r   r  c                   8   a  ] tR tRt o Rt]! 4       tR tRtV t	R# )DummyConnectionPooli  z
A testable L{ConnectionPool};
c                    \         V n        R# )z
Don't forward init call.
N)r
   _reactorr   s   &r   r  DummyConnectionPool.__init__  s      r   )r  N)
r   r   r   r   r   r  
threadpoolr  r   r   r   s   @r   r  r    s      J   r   r  c                   <   a  ] tR tRt o RtR tR tR tR tRt	V t
R# )	EventReactori  z
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                     Wn         . V n        R # r"   _runningtriggers)r   runnings   &&r   r  EventReactor.__init__  s    r   c                ^    V P                   '       d
   V! 4        R# V P                  R RV4      # )afterstartupN)r  addSystemEventTrigger)r   functions   &&r   callWhenRunningEventReactor.callWhenRunning  s%    ===J--gy(KKr   c                D    WV3pV P                   P                  V4       V# r"   )r  r   )r   phaseeventtriggerhandles   &&&& r   r  "EventReactor.addSystemEventTrigger  s#    (V$r   c                <    V P                   P                  V4       R # r"   )r  remove)r   r  s   &&r   removeSystemEventTrigger%EventReactor.removeSystemEventTrigger  s    V$r   r  N)r   r   r   r   r   r  r  r  r  r   r   r   s   @r   r  r    s$     L
% %r   r  c                   B   a  ] tR tRt o RtR tR tR tR tR t	Rt
V tR	# )
ConnectionPoolTestsi  z#
Unit tests for L{ConnectionPool}.
c                   a   ! R R4      pR p\        4       pWn        VP                  V4      pS P                  V\        4      pV 3R lpVP                  V4       V# )zy
If rollback fails, L{ConnectionPool.runWithConnection} raises the
original exception and log the error of the rollback.
c                   ,   a  ] tR tRt o R tR tRtV tR# )]ConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.ConnectionRollbackRaisei  c                    R # r"   r]   r   r  s   &&r   r  fConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.ConnectionRollbackRaise.__init__  r  r   c                    \        R 4      hr  r  r   s   &r   r  fConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.ConnectionRollbackRaise.rollback  r  r   r]   Nr   r   r   r   r  r  r   r   r   s   @r   r  r         / /r   r  c                     \        R 4      hfoo
ValueError)r  s   &r   raisingFunctionUConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.raisingFunction
      U##r   c                    < SP                  \        4      pSP                  \        V4      ^4       SP                  V^ ,          P                  P
                  ^ ,          R4       R# r   r  NrB   r  r   r   r  r2  ignoredr  r   s   & r   cbFailedNConnectionPoolTests.test_runWithConnectionRaiseOriginalError.<locals>.cbFailed  J    ++L9FS[!,VAY__11!4jAr   )r  r  rw   assertFailurer  r0   )r   r  r  r  r2   r   s   f     r   (test_runWithConnectionRaiseOriginalError<ConnectionPoolTests.test_runWithConnectionRaiseOriginalError  s]    	/ 	/	$ #$!8""?3q*-	B
 	
hr   c                "    ! R R4      p\        4       pVP                  V! 4       4       V P                  \        4      pV P	                  \        V4      ^4       V P	                  V^ ,          P                  P                  ^ ,          R4       R# )z+
L{ConnectionPool._close} logs exceptions.
c                   &   a  ] tR tRt o R tRtV tR# )DConnectionPoolTests.test_closeLogError.<locals>.ConnectionCloseRaisei  c                    \        R 4      hr  r  r   s   &r   r$   JConnectionPoolTests.test_closeLogError.<locals>.ConnectionCloseRaise.close   r  r   r]   N)r   r   r   r   r$   r   r   r   s   @r   ConnectionCloseRaiser(    r  r   r+  r  N)r  _closerB   r  r   r   r  r2  )r   r+  r  r  s   &   r   test_closeLogError&ConnectionPoolTests.test_closeLogError  sm    
	/ 	/ #$(*+''5Va(--a0*=r   c                   a   ! R R4      p ! R R4      pR p\        4       pWn        W$n        VP                  V4      pS P	                  V\
        4      pV 3R lpVP                  V4       V# )zv
If rollback fails, L{ConnectionPool.runInteraction} raises the
original exception and log the error of the rollback.
c                   ,   a  ] tR tRt o R tR tRtV tR# )^ConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.ConnectionRollbackRaisei0  c                    R # r"   r]   r  s   &&r   r  gConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.ConnectionRollbackRaise.__init__1  r  r   c                    \        R 4      hr  r  r   s   &r   r  gConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.ConnectionRollbackRaise.rollback4  r  r   r]   Nr  r   s   @r   r  r1  0  r  r   r  c                   &   a  ] tR tRt o R tRtV tR# )WConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.DummyTransactioni7  c                    R # r"   r]   )r   r  r  s   &&&r   r  `ConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.DummyTransaction.__init__8  r  r   r]   N)r   r   r   r   r  r   r   r   s   @r   DummyTransactionr7  7  s      r   r:  c                     \        R 4      hr  r  )r   s   &r   r  VConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.raisingFunction;  r  r   c                    < SP                  \        4      pSP                  \        V4      ^4       SP                  V^ ,          P                  P
                  ^ ,          R4       R# r  r  r  s   & r   r   OConnectionPoolTests.test_runWithInteractionRaiseOriginalError.<locals>.cbFailedE  r"  r   )r  r  transactionFactoryrp   r#  r  r0   )r   r  r:  r  r  r2   r   s   f      r   )test_runWithInteractionRaiseOriginalError=ConnectionPoolTests.test_runWithInteractionRaiseOriginalError*  sm    	/ 	/	 		$ #$!8"20q*-	B
 	
hr   c                    \        R4      p\        RVR7      pV P                  VP                  RRVP                  3.4       VP                  4        V P                  VP                  4       R# )z
If L{ConnectionPool.close} is called without L{ConnectionPool.start}
having been called, the pool's startup event is cancelled.
Ftwisted.test.test_adbapi
cp_reactorr  r  N)r  r   r   r  _startr$   r  r   r
   r  s   &  r   test_unstartedClose'ConnectionPoolTests.test_unstartedCloseM  s\    
 u%8WM))Wi,M+NO

))*r   c                    \        R4      p\        RVR7      pV P                  VP                  RRVP                  3.4       VP                  4        V P                  VP                  4       R# )z
If L{ConnectionPool.close} is called after it has been started, but
not by its shutdown trigger, the shutdown trigger is cancelled.
TrC  rD  duringshutdownN)r  r   r   r  
finalCloser$   r  rG  s   &  r   test_startedClose%ConnectionPoolTests.test_startedCloseZ  s\    
 t$8WM))Xz4??,S+TU

))*r   r]   N)r   r   r   r   r   r$  r-  r@  rH  rN  r   r   r   s   @r   r  r    s)     :> !F++ +r   r  ))r   r  r  typingr   r   twisted.enterprise.adbapir   r   r   r   twisted.internetr   r	   r
   twisted.python.failurer   twisted.python.reflectr   twisted.trialr   rD   r   r   r  rB  rW  ra  rs  r|  r  r  r  r  r  r  r  r  r  r  r  r]   r   r   <module>rV     s0   
  !  8 7 * 0 " Y YxM M`>$ >$B 4 4 8 8_ 61 1hH ^]GI 6  0') < 6>h'' >.>x(( ><" " .  % %<m+(++ m+r   