Permalink
Browse files

[1.7.x] Fixed #23421 -- Corrected TEST SERIALIZE setting.

Thanks gkoller for the report and Markus Holtermann for review.
  • Loading branch information...
timgraham committed Sep 15, 2014
1 parent 5356183 commit 02aa3e30e9cb8e5be5c33082c3548e2a6e1b91cb
Showing with 90 additions and 33 deletions.
  1. +1 −1 django/test/runner.py
  2. +13 −0 docs/ref/settings.txt
  3. +3 −0 docs/releases/1.7.1.txt
  4. +8 −2 docs/topics/testing/advanced.txt
  5. +65 −30 tests/test_runner/tests.py
View
@@ -296,7 +296,7 @@ def setup_databases(verbosity, interactive, **kwargs):
test_db_name = connection.creation.create_test_db(
verbosity,
autoclobber=not interactive,
- serialize=connection.settings_dict.get("TEST_SERIALIZE", True),
+ serialize=connection.settings_dict.get("TEST", {}).get("SERIALIZE", True),
)
destroy = True
else:
View
@@ -704,6 +704,19 @@ test database will use the name ``'test_' + DATABASE_NAME``.
See :ref:`the-test-database`.
+.. setting:: TEST_SERIALIZE
+
+SERIALIZE
+^^^^^^^^^
+
+.. versionadded:: 1.7.1
+
+Boolean value to control whether or not the default test runnner serializes the
+database into an in-memory JSON string before running tests (used to restore
+the database state between tests if you don't have transactions). You can set
+this to ``False`` to speed up creation time if you don't have any test classes
+with :ref:`serialized_rollback=True <test-case-serialized-rollback>`.
+
.. setting:: TEST_CREATE
CREATE_DB
View
@@ -70,3 +70,6 @@ Bugfixes
* Made ``migrations.RunSQL`` no longer require percent sign escaping. This is
now consistent with ``cursor.execute()`` (:ticket:`23426`).
+
+* Made the :setting:`SERIALIZE <TEST_SERIALIZE>` entry in the
+ :setting:`TEST <DATABASE-TEST>` dictionary usable (:ticket:`23421`).
@@ -507,8 +507,14 @@ can be useful during testing.
``serialize`` determines if Django serializes the database into an
in-memory JSON string before running tests (used to restore the database
state between tests if you don't have transactions). You can set this to
- False to significantly speed up creation time if you know you don't need
- data persistence outside of test fixtures.
+ ``False`` to speed up creation time if you don't have any test classes
+ with :ref:`serialized_rollback=True <test-case-serialized-rollback>`.
+
+ .. versionadded:: 1.7.1
+
+ If you are using the default test runner, you can control this with the
+ the :setting:`SERIALIZE <TEST_SERIALIZE>` entry in the
+ :setting:`TEST <DATABASE-TEST>` dictionary
Returns the name of the test database that it created.
View
@@ -7,9 +7,10 @@
import types
import unittest
+from django import db
from django.core.exceptions import ImproperlyConfigured
from django.core.management import call_command
-from django import db
+from django.db.backends.dummy.base import DatabaseCreation
from django.test import runner, TestCase, TransactionTestCase, skipUnlessDBFeature
from django.test.testcases import connections_support_transactions
from django.test.utils import (
@@ -339,38 +340,72 @@ def test_setup_aliased_default_database(self):
db.connections = old_db_connections
-class AliasedDatabaseTeardownTest(unittest.TestCase):
- def test_setup_aliased_databases(self):
- from django.db.backends.dummy.base import DatabaseCreation
-
- runner_instance = runner.DiscoverRunner(verbosity=0)
- old_db_connections = db.connections
- old_destroy_test_db = DatabaseCreation.destroy_test_db
- old_create_test_db = DatabaseCreation.create_test_db
- try:
- destroyed_names = []
- DatabaseCreation.destroy_test_db = lambda self, old_database_name, verbosity=1, serialize=True: destroyed_names.append(old_database_name)
- DatabaseCreation.create_test_db = lambda self, verbosity=1, autoclobber=False, serialize=True: self._get_test_db_name()
+class SetupDatabasesTests(unittest.TestCase):
- db.connections = db.ConnectionHandler({
- 'default': {
- 'ENGINE': 'django.db.backends.dummy',
- 'NAME': 'dbname',
- },
- 'other': {
- 'ENGINE': 'django.db.backends.dummy',
- 'NAME': 'dbname',
- }
- })
+ def setUp(self):
+ self._old_db_connections = db.connections
+ self._old_destroy_test_db = DatabaseCreation.destroy_test_db
+ self._old_create_test_db = DatabaseCreation.create_test_db
+ self.runner_instance = runner.DiscoverRunner(verbosity=0)
- old_config = runner_instance.setup_databases()
- runner_instance.teardown_databases(old_config)
+ def tearDown(self):
+ DatabaseCreation.create_test_db = self._old_create_test_db
+ DatabaseCreation.destroy_test_db = self._old_destroy_test_db
+ db.connections = self._old_db_connections
- self.assertEqual(destroyed_names.count('dbname'), 1)
- finally:
- DatabaseCreation.create_test_db = old_create_test_db
- DatabaseCreation.destroy_test_db = old_destroy_test_db
- db.connections = old_db_connections
+ def test_setup_aliased_databases(self):
+ destroyed_names = []
+ DatabaseCreation.destroy_test_db = (
+ lambda self, old_database_name, verbosity=1, keepdb=False, serialize=True:
+ destroyed_names.append(old_database_name)
+ )
+ DatabaseCreation.create_test_db = (
+ lambda self, verbosity=1, autoclobber=False, keepdb=False, serialize=True:
+ self._get_test_db_name()
+ )
+
+ db.connections = db.ConnectionHandler({
+ 'default': {
+ 'ENGINE': 'django.db.backends.dummy',
+ 'NAME': 'dbname',
+ },
+ 'other': {
+ 'ENGINE': 'django.db.backends.dummy',
+ 'NAME': 'dbname',
+ }
+ })
+
+ old_config = self.runner_instance.setup_databases()
+ self.runner_instance.teardown_databases(old_config)
+
+ self.assertEqual(destroyed_names.count('dbname'), 1)
+
+ def test_serialization(self):
+ serialize = []
+ DatabaseCreation.create_test_db = (
+ lambda *args, **kwargs: serialize.append(kwargs.get('serialize'))
+ )
+ db.connections = db.ConnectionHandler({
+ 'default': {
+ 'ENGINE': 'django.db.backends.dummy',
+ },
+ })
+ self.runner_instance.setup_databases()
+ self.assertEqual(serialize, [True])
+
+ def test_serialized_off(self):
+ serialize = []
+ DatabaseCreation.create_test_db = (
+ lambda *args, **kwargs: serialize.append(kwargs.get('serialize'))
+ )
+ db.connections = db.ConnectionHandler({
+ 'default': {
+ 'ENGINE': 'django.db.backends.dummy',
+ 'TEST': {'SERIALIZE': False},
+ },
+ })
+ self.runner_instance.setup_databases()
+ self.assertEqual(serialize, [False])
class DeprecationDisplayTest(AdminScriptTestCase):

0 comments on commit 02aa3e3

Please sign in to comment.