summaryrefslogtreecommitdiff
path: root/test/testlib/engines.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/testlib/engines.py')
-rw-r--r--test/testlib/engines.py28
1 files changed, 27 insertions, 1 deletions
diff --git a/test/testlib/engines.py b/test/testlib/engines.py
index 56507618c..b576a1536 100644
--- a/test/testlib/engines.py
+++ b/test/testlib/engines.py
@@ -68,7 +68,31 @@ def close_open_connections(fn):
decorated.__name__ = fn.__name__
return decorated
-
+class ReconnectFixture(object):
+ def __init__(self, dbapi):
+ self.dbapi = dbapi
+ self.connections = []
+
+ def __getattr__(self, key):
+ return getattr(self.dbapi, key)
+
+ def connect(self, *args, **kwargs):
+ conn = self.dbapi.connect(*args, **kwargs)
+ self.connections.append(conn)
+ return conn
+
+ def shutdown(self):
+ for c in list(self.connections):
+ c.close()
+ self.connections = []
+
+def reconnecting_engine(url=None, options=None):
+ url = url or config.db_url
+ dbapi = config.db.dialect.dbapi
+ engine = testing_engine(url, {'module':ReconnectFixture(dbapi)})
+ engine.test_shutdown = engine.dialect.dbapi.shutdown
+ return engine
+
def testing_engine(url=None, options=None):
"""Produce an engine configured by --options with optional overrides."""
@@ -109,3 +133,5 @@ def utf8_engine(url=None, options=None):
url = str(url)
return testing_engine(url, options)
+
+