diff options
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/backends/creation.py | 14 | ||||
| -rw-r--r-- | django/db/backends/oracle/creation.py | 10 | ||||
| -rw-r--r-- | django/test/simple.py | 22 |
3 files changed, 33 insertions, 13 deletions
diff --git a/django/db/backends/creation.py b/django/db/backends/creation.py index b92412abe4..ef594b7bfc 100644 --- a/django/db/backends/creation.py +++ b/django/db/backends/creation.py @@ -476,3 +476,17 @@ class BaseDatabaseCreation(object): def sql_table_creation_suffix(self): "SQL to append to the end of the test table creation statements" return '' + + def test_db_signature(self): + """ + Returns a tuple with elements of self.connection.settings_dict (a + DATABASES setting value) that uniquely identify a database + accordingly to the RDBMS particularities. + """ + settings_dict = self.connection.settings_dict + return ( + settings_dict['HOST'], + settings_dict['PORT'], + settings_dict['ENGINE'], + settings_dict['NAME'] + ) diff --git a/django/db/backends/oracle/creation.py b/django/db/backends/oracle/creation.py index bda70397c2..08b130229f 100644 --- a/django/db/backends/oracle/creation.py +++ b/django/db/backends/oracle/creation.py @@ -259,3 +259,13 @@ class DatabaseCreation(BaseDatabaseCreation): names as handled by Django haven't real counterparts in Oracle. """ return self.connection.settings_dict['NAME'] + + def test_db_signature(self): + settings_dict = self.connection.settings_dict + return ( + settings_dict['HOST'], + settings_dict['PORT'], + settings_dict['ENGINE'], + settings_dict['NAME'], + settings_dict['TEST_USER'], + ) diff --git a/django/test/simple.py b/django/test/simple.py index 1b26ebbe74..c1230678a7 100644 --- a/django/test/simple.py +++ b/django/test/simple.py @@ -1,6 +1,3 @@ -import sys -import signal - from django.conf import settings from django.core.exceptions import ImproperlyConfigured from django.db.models import get_app, get_apps @@ -203,7 +200,7 @@ def dependency_ordered(test_databases, dependencies): deferred = [] while test_databases: - signature, aliases = test_databases.pop() + signature, (db_name, aliases) = test_databases.pop() dependencies_satisfied = True for alias in aliases: if alias in dependencies: @@ -217,10 +214,10 @@ def dependency_ordered(test_databases, dependencies): resolved_databases.add(alias) if dependencies_satisfied: - ordered_test_databases.append((signature, aliases)) + ordered_test_databases.append((signature, (db_name, aliases))) changed = True else: - deferred.append((signature, aliases)) + deferred.append((signature, (db_name, aliases))) if not changed: raise ImproperlyConfigured("Circular dependency in TEST_DEPENDENCIES") @@ -276,12 +273,11 @@ class DjangoTestSuiteRunner(object): # Store a tuple with DB parameters that uniquely identify it. # If we have two aliases with the same values for that tuple, # we only need to create the test database once. - test_databases.setdefault(( - connection.settings_dict['HOST'], - connection.settings_dict['PORT'], - connection.settings_dict['ENGINE'], - connection.settings_dict['NAME'], - ), []).append(alias) + item = test_databases.setdefault( + connection.creation.test_db_signature(), + (connection.settings_dict['NAME'], []) + ) + item[1].append(alias) if 'TEST_DEPENDENCIES' in connection.settings_dict: dependencies[alias] = connection.settings_dict['TEST_DEPENDENCIES'] @@ -292,7 +288,7 @@ class DjangoTestSuiteRunner(object): # Second pass -- actually create the databases. old_names = [] mirrors = [] - for (host, port, engine, db_name), aliases in dependency_ordered(test_databases.items(), dependencies): + for signature, (db_name, aliases) in dependency_ordered(test_databases.items(), dependencies): # Actually create the database for the first connection connection = connections[aliases[0]] old_names.append((connection, db_name, True)) |
