From 1b9c1a2ecf549c54dbf0414fdf4ea197d4ba6dbd Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 18 Apr 2013 12:01:16 -0400 Subject: [PATCH] - test + changelog for [ticket:2691] --- doc/build/changelog/changelog_08.rst | 9 +++++++++ test/engine/test_reconnect.py | 24 +++++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst index a23d05fe79..224690cc29 100644 --- a/doc/build/changelog/changelog_08.rst +++ b/doc/build/changelog/changelog_08.rst @@ -6,6 +6,15 @@ .. changelog:: :version: 0.8.1 + .. change:: + :tags: bug, sql + :tickets: 2691 + + Fixed bug where disconnect detect on error would + raise an attribute error if the error were being + raised after the Connection object had already + been closed. + .. change:: :tags: bug, sql :tickets: 2703 diff --git a/test/engine/test_reconnect.py b/test/engine/test_reconnect.py index 86f646f33c..9aecb81a99 100644 --- a/test/engine/test_reconnect.py +++ b/test/engine/test_reconnect.py @@ -51,6 +51,7 @@ class MockCursor(object): def __init__(self, parent): self.explode = parent.explode self.description = () + self.closed = False def execute(self, *args, **kwargs): if self.explode == 'execute': raise MockDisconnect("Lost the DB connection on execute") @@ -60,10 +61,20 @@ class MockCursor(object): elif self.explode in ('rollback', 'rollback_no_disconnect'): raise MockError( "something broke on execute but we didn't lose the connection") + elif args and "select" in args[0]: + self.description = [('foo', None, None, None, None, None)] else: return + def fetchall(self): + if self.closed: + raise MockError("cursor closed") + return [] + def fetchone(self): + if self.closed: + raise MockError("cursor closed") + return None def close(self): - pass + self.closed = True db, dbapi = None, None class MockReconnectTest(fixtures.TestBase): @@ -294,6 +305,17 @@ class MockReconnectTest(fixtures.TestBase): conn.execute, select([1]) ) + def test_check_disconnect_no_cursor(self): + conn = db.connect() + result = conn.execute("select 1") + result.cursor.close() + conn.close() + assert_raises_message( + tsa.exc.DBAPIError, + "cursor closed", + list, result + ) + class CursorErrTest(fixtures.TestBase): def setup(self): -- 2.47.2