mirror of
				https://github.com/django/django.git
				synced 2025-10-29 00:26:07 +00:00 
			
		
		
		
	[1.6.x] Fixed #21553 -- Ensured unusable database connections get closed.
Backport of 5f2f47f from master
			
			
This commit is contained in:
		| @@ -612,6 +612,37 @@ class BackendTestCase(TestCase): | ||||
|             cursor.execute(query) | ||||
|  | ||||
|  | ||||
| class IsUsableTests(TransactionTestCase): | ||||
|     # Avoid using a regular TestCase because Django really dislikes closing | ||||
|     # the database connection inside a transaction at this point (#21202). | ||||
|  | ||||
|     available_apps = [] | ||||
|  | ||||
|     # Unfortunately with sqlite3 the in-memory test database cannot be closed. | ||||
|     @skipUnlessDBFeature('test_db_allows_multiple_connections') | ||||
|     def test_is_usable_after_database_disconnects(self): | ||||
|         """ | ||||
|         Test that is_usable() doesn't crash when the database disconnects. | ||||
|  | ||||
|         Regression for #21553. | ||||
|         """ | ||||
|         # Open a connection to the database. | ||||
|         with connection.cursor(): | ||||
|             pass | ||||
|         # Emulate a connection close by the database. | ||||
|         connection._close() | ||||
|         # Even then is_usable() should not raise an exception. | ||||
|         try: | ||||
|             self.assertFalse(connection.is_usable()) | ||||
|         finally: | ||||
|             # Clean up the mess created by connection._close(). Since the | ||||
|             # connection is already closed, this crashes on some backends. | ||||
|             try: | ||||
|                 connection.close() | ||||
|             except Exception: | ||||
|                 pass | ||||
|  | ||||
|  | ||||
| # We don't make these tests conditional because that means we would need to | ||||
| # check and differentiate between: | ||||
| # * MySQL+InnoDB, MySQL+MYISAM (something we currently can't do). | ||||
|   | ||||
		Reference in New Issue
	
	Block a user