summaryrefslogtreecommitdiff
path: root/test/base
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-01-12 17:21:35 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2013-01-12 17:21:35 -0500
commit576224edd01f96bb505f9162282cfa9ba6efcb46 (patch)
tree80606787b39fd81dea233a197f655277c6a246d5 /test/base
parent56b1f4c8845373b6680d6ab09dcefe36eaeb12fb (diff)
downloadsqlalchemy-576224edd01f96bb505f9162282cfa9ba6efcb46.tar.gz
- add workaround for sqlite memusage tests, so no longer need to count to 220/skip tests
- Fixed potential memory leak which could occur if an arbitrary number of :class:`.sessionmaker` objects were created. The anonymous subclass created by the sessionmaker, when dereferenced, would not be garbage collected due to remaining class-level references from the event package. This issue also applies to any custom system that made use of ad-hoc subclasses in conjunction with an event dispatcher. Also in 0.7.10. [ticket:2650]
Diffstat (limited to 'test/base')
-rw-r--r--test/base/test_events.py28
1 files changed, 27 insertions, 1 deletions
diff --git a/test/base/test_events.py b/test/base/test_events.py
index eb58f5183..4efb30aba 100644
--- a/test/base/test_events.py
+++ b/test/base/test_events.py
@@ -2,8 +2,9 @@
from sqlalchemy.testing import eq_, assert_raises, assert_raises_message, \
is_, is_not_
-from sqlalchemy import event, exc, util
+from sqlalchemy import event, exc
from sqlalchemy.testing import fixtures
+from sqlalchemy.testing.util import gc_collect
class EventsTest(fixtures.TestBase):
"""Test class- and instance-level event registration."""
@@ -359,6 +360,31 @@ class CustomTargetsTest(fixtures.TestBase):
listen, "event_one", self.Target
)
+class SubclassGrowthTest(fixtures.TestBase):
+ """test that ad-hoc subclasses are garbage collected."""
+
+ def setUp(self):
+ class TargetEvents(event.Events):
+ def some_event(self, x, y):
+ pass
+
+ class Target(object):
+ dispatch = event.dispatcher(TargetEvents)
+
+ self.Target = Target
+
+ def test_subclass(self):
+ class SubTarget(self.Target):
+ pass
+
+ st = SubTarget()
+ st.dispatch.some_event(1, 2)
+ del st
+ del SubTarget
+ gc_collect()
+ eq_(self.Target.__subclasses__(), [])
+
+
class ListenOverrideTest(fixtures.TestBase):
"""Test custom listen functions which change the listener function signature."""