summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorRamiro Morales <cramm0@gmail.com>2011-02-02 14:02:14 +0000
committerRamiro Morales <cramm0@gmail.com>2011-02-02 14:02:14 +0000
commitdc5f2607deb35022523fef17dcd8479ca812e887 (patch)
tree88c1a08c9b1c0a8d5763f4a8412f3d15d7f47c7c /django
parent77030ccc1ea4e1df04540e4d4594cb0d741fa2b4 (diff)
Fixed #15029 -- Moved to database backends the ability to decide if two DATABASES items are different when creating temporary databases for tests.
hG: Enter commit message. Lines beginning with 'HG:' are removed. git-svn-id: http://code.djangoproject.com/svn/django/trunk@15392 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
-rw-r--r--django/db/backends/creation.py14
-rw-r--r--django/db/backends/oracle/creation.py10
-rw-r--r--django/test/simple.py22
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))