diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-08-26 01:33:51 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-08-26 01:33:51 -0400 |
| commit | 7d3a916fc3bc5d81b6b251a42f196793f5643b76 (patch) | |
| tree | f41fb3362d4a8fc10a0873ab76f848dcaff3f573 /test/engine/test_reconnect.py | |
| parent | 1402a608ebc28031ce11dec9ed6a90785f09294d (diff) | |
| download | sqlalchemy-7d3a916fc3bc5d81b6b251a42f196793f5643b76.tar.gz | |
- replaced all self.__connection.is_valid with
"safe" self._connection_is_valid.
- Fixed bug in Connection whereby if a "disconnect"
event occurred in the "initialize" phase of the
first connection pool connect, an AttributeError
would be raised when the Connection would attempt
to invalidate the DBAPI connection. [ticket:1894]
- Connection.invalidate() can be called more than
once and subsequent calls do nothing.
Diffstat (limited to 'test/engine/test_reconnect.py')
| -rw-r--r-- | test/engine/test_reconnect.py | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/test/engine/test_reconnect.py b/test/engine/test_reconnect.py index b92c88066..8ef851358 100644 --- a/test/engine/test_reconnect.py +++ b/test/engine/test_reconnect.py @@ -1,13 +1,12 @@ -from sqlalchemy.test.testing import eq_ +from sqlalchemy.test.testing import eq_, assert_raises import time import weakref from sqlalchemy import select, MetaData, Integer, String, pool -from sqlalchemy.test.schema import Table -from sqlalchemy.test.schema import Column +from sqlalchemy.test.schema import Table, Column import sqlalchemy as tsa from sqlalchemy.test import TestBase, testing, engines from sqlalchemy.test.util import gc_collect - +from sqlalchemy import exc class MockDisconnect(Exception): pass @@ -257,7 +256,39 @@ class RealReconnectTest(TestBase): assert not conn.invalidated conn.close() + + def test_invalidate_twice(self): + conn = engine.connect() + conn.invalidate() + conn.invalidate() + + def test_explode_in_initializer(self): + engine = engines.testing_engine() + def broken_initialize(connection): + connection.execute("select fake_stuff from _fake_table") + + engine.dialect.initialize = broken_initialize + + # raises a DBAPIError, not an AttributeError + assert_raises(exc.DBAPIError, engine.connect) + # dispose connections so we get a new one on + # next go + engine.dispose() + + p1 = engine.pool + + def is_disconnect(e): + return True + + engine.dialect.is_disconnect = is_disconnect + + # invalidate() also doesn't screw up + assert_raises(exc.DBAPIError, engine.connect) + + # pool was recreated + assert engine.pool is not p1 + def test_null_pool(self): engine = \ engines.reconnecting_engine(options=dict(poolclass=pool.NullPool)) |
