summaryrefslogtreecommitdiff
path: root/test/engine/test_pool.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2015-04-30 19:44:16 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2015-04-30 19:55:28 -0400
commite0f9b279f43759886c61e6c82f97d95d0093fdf7 (patch)
tree30752e0689319850969ebd52174532afeab9980e /test/engine/test_pool.py
parent0e98795ff2c7a164b4da164d7b26af3faabf84d1 (diff)
downloadsqlalchemy-e0f9b279f43759886c61e6c82f97d95d0093fdf7.tar.gz
- work the wrapping of the "creator" to be as resilient to
old / new style, direct access, and ad-hoc patching and unpatching as possible
Diffstat (limited to 'test/engine/test_pool.py')
-rw-r--r--test/engine/test_pool.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/test/engine/test_pool.py b/test/engine/test_pool.py
index 3d93cda89..912c6c3fe 100644
--- a/test/engine/test_pool.py
+++ b/test/engine/test_pool.py
@@ -1807,3 +1807,58 @@ class StaticPoolTest(PoolTestBase):
p = pool.StaticPool(creator)
p2 = p.recreate()
assert p._creator is p2._creator
+
+
+class CreatorCompatibilityTest(PoolTestBase):
+ def test_creator_callable_outside_noarg(self):
+ e = testing_engine()
+
+ creator = e.pool._creator
+ try:
+ conn = creator()
+ finally:
+ conn.close()
+
+ def test_creator_callable_outside_witharg(self):
+ e = testing_engine()
+
+ creator = e.pool._creator
+ try:
+ conn = creator(Mock())
+ finally:
+ conn.close()
+
+ def test_creator_patching_arg_to_noarg(self):
+ e = testing_engine()
+ creator = e.pool._creator
+ try:
+ # the creator is the two-arg form
+ conn = creator(Mock())
+ finally:
+ conn.close()
+
+ def mock_create():
+ return creator()
+
+ conn = e.connect()
+ conn.invalidate()
+ conn.close()
+
+ # test that the 'should_wrap_creator' memoized attribute
+ # will dynamically switch if the _creator is monkeypatched.
+
+ is_(e.pool.__dict__.get("_should_wrap_creator")[0], False)
+
+ # patch it with a zero-arg form
+ with patch.object(e.pool, "_creator", mock_create):
+ conn = e.connect()
+ conn.invalidate()
+ conn.close()
+
+ is_(e.pool.__dict__.get("_should_wrap_creator")[0], True)
+
+ conn = e.connect()
+ conn.close()
+
+ is_(e.pool.__dict__.get("_should_wrap_creator")[0], False)
+