summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorChris Jerdonek <chris.jerdonek@gmail.com>2016-08-19 09:47:41 -0700
committerTim Graham <timograham@gmail.com>2016-08-19 12:47:41 -0400
commitf6cd669ff203192c29495174e53da6b16883b039 (patch)
tree60a16de6590c6ee18e67470b49afab16b071d0f2 /tests
parent7b08e01c1358aedbd46fa26c91d4613d642ff609 (diff)
Fixed #22414 -- Ensured that LiveServerTestCase closes connections.
Diffstat (limited to 'tests')
-rw-r--r--tests/servers/test_liveserverthread.py28
-rw-r--r--tests/servers/tests.py3
2 files changed, 30 insertions, 1 deletions
diff --git a/tests/servers/test_liveserverthread.py b/tests/servers/test_liveserverthread.py
new file mode 100644
index 0000000000..d39aac8183
--- /dev/null
+++ b/tests/servers/test_liveserverthread.py
@@ -0,0 +1,28 @@
+from django.db import DEFAULT_DB_ALIAS, connections
+from django.test import LiveServerTestCase, TestCase
+
+
+class LiveServerThreadTest(TestCase):
+
+ def run_live_server_thread(self, connections_override=None):
+ thread = LiveServerTestCase._create_server_thread(connections_override)
+ thread.daemon = True
+ thread.start()
+ thread.is_ready.wait()
+ thread.terminate()
+
+ def test_closes_connections(self):
+ conn = connections[DEFAULT_DB_ALIAS]
+ if conn.vendor == 'sqlite' and conn.is_in_memory_db():
+ self.skipTest("the sqlite backend's close() method is a no-op when using an in-memory database")
+ # Pass a connection to the thread to check they are being closed.
+ connections_override = {DEFAULT_DB_ALIAS: conn}
+
+ saved_sharing = conn.allow_thread_sharing
+ try:
+ conn.allow_thread_sharing = True
+ self.assertTrue(conn.is_usable())
+ self.run_live_server_thread(connections_override)
+ self.assertFalse(conn.is_usable())
+ finally:
+ conn.allow_thread_sharing = saved_sharing
diff --git a/tests/servers/tests.py b/tests/servers/tests.py
index aeddf86f62..3d959b4b23 100644
--- a/tests/servers/tests.py
+++ b/tests/servers/tests.py
@@ -153,4 +153,5 @@ class LiveServerPort(LiveServerBase):
"Acquired duplicate server addresses for server threads: %s" % self.live_server_url
)
finally:
- TestCase.tearDownClass()
+ if hasattr(TestCase, 'server_thread'):
+ TestCase.server_thread.terminate()