summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2017-03-06 19:12:40 -0500
committerGerrit Code Review <gerrit@awstats.zzzcomputing.com>2017-03-06 19:12:40 -0500
commitb54cefc379dcb99bcaf39094b29093f1e4be9b2b (patch)
tree10b6ae1745498360705e9b79fd3aea16121e2bca /test
parent3a6b75870bdc7aa8fe70296cc3fc94ea06f16417 (diff)
parentf4c4f784cde8e51301b09f187d2f086bfae47453 (diff)
downloadsqlalchemy-b54cefc379dcb99bcaf39094b29093f1e4be9b2b.tar.gz
Merge "Don't cache savepoint identifiers"
Diffstat (limited to 'test')
-rw-r--r--test/aaa_profiling/test_memusage.py50
1 files changed, 46 insertions, 4 deletions
diff --git a/test/aaa_profiling/test_memusage.py b/test/aaa_profiling/test_memusage.py
index 7013159dd..53f118e15 100644
--- a/test/aaa_profiling/test_memusage.py
+++ b/test/aaa_profiling/test_memusage.py
@@ -34,7 +34,8 @@ class ASub(A):
pass
-def profile_memory(maxtimes=50):
+def profile_memory(maxtimes=50,
+ assert_no_sessions=True, get_num_objects=None):
def decorate(func):
# run the test N times. if length of gc.get_objects()
# keeps growing, assert false
@@ -56,15 +57,19 @@ def profile_memory(maxtimes=50):
samples = []
success = False
- for y in range(maxtimes // 5):
+ for y in range(100 // 5):
for x in range(5):
func(*args)
gc_collect()
- samples.append(len(get_objects_skipping_sqlite_issue()))
+ samples.append(
+ get_num_objects() if get_num_objects is not None
+ else len(get_objects_skipping_sqlite_issue())
+ )
print("sample gc sizes:", samples)
- assert len(_sessions) == 0
+ if assert_no_sessions:
+ assert len(_sessions) == 0
# check for "flatline" - size is constant for
# 5 iterations
@@ -341,6 +346,43 @@ class MemUsageTest(EnsureZeroed):
finally:
metadata.drop_all()
+ @testing.requires.savepoints
+ @testing.provide_metadata
+ def test_savepoints(self):
+ metadata = self.metadata
+
+ some_table = Table(
+ 't', metadata,
+ Column('id', Integer, primary_key=True,
+ test_needs_autoincrement=True)
+ )
+
+ class SomeClass(object):
+ pass
+
+ mapper(SomeClass, some_table)
+
+ metadata.create_all()
+
+ session = Session(testing.db)
+
+ target_strings = session.connection().\
+ dialect.identifier_preparer._strings
+
+ with session.transaction:
+ @profile_memory(
+ assert_no_sessions=False,
+ get_num_objects=lambda: len(target_strings))
+ def go():
+
+ sc = SomeClass()
+ session.add(sc)
+
+ with session.begin_nested():
+ session.query(SomeClass).first()
+
+ go()
+
@testing.crashes('mysql+cymysql', 'blocking')
def test_unicode_warnings(self):
metadata = MetaData(self.engine)