﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
16828	Upgrade from 1.3 to 1.3.1 breaks manage.py test with multiple databases	Aymeric Augustin	nobody	"To reproduce this problem:

* `django-admin.py startproject regrtest && cd regrtest`
* create a file called `routers.py` with this content (this is a dummy router that puts everything in the ""default"" database):
{{{
class TestRouter(object):

    def db_for_read(self, model, **hints):
        return 'default'

    def db_for_write(self, model, **hints):
        return 'default'

    def allow_relation(self, obj1, obj2, **hints):
        return True

    def allow_syncdb(self, db, model):
        return db == 'default'
}}}
* in `settings.py`, replace the default value of `DATABASES` with this content:
{{{
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'default.sqlite3',
    },
    'other': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'other.sqlite3',
    },
}

DATABASE_ROUTERS = ['routers.TestRouter']
}}}
* `python manage.py test auth` works under 1.3 but not under 1.3.1:
{{{

aaugustin@aaugustin regrtest % . ../dj13_venv/bin/activate
(dj13_venv)aaugustin@aaugustin regrtest % python manage.py test auth
Creating test database for alias 'default'...
Creating test database for alias 'other'...
..................................................................................................
----------------------------------------------------------------------
Ran 98 tests in 1.745s

OK
Destroying test database for alias 'default'...
Destroying test database for alias 'other'...
(dj13_venv)aaugustin@aaugustin regrtest % . ../dj131_venv/bin/activate
(dj131_venv)aaugustin@aaugustin regrtest % python manage.py test auth
Creating test database for alias 'default'...
Creating test database for alias 'other'...
Traceback (most recent call last):
  File ""manage.py"", line 14, in <module>
    execute_manager(settings)
  File ""/Users/aaugustin/Documents/dev/dj131_venv/lib/python2.6/site-packages/django/core/management/__init__.py"", line 438, in execute_manager
    utility.execute()
  File ""/Users/aaugustin/Documents/dev/dj131_venv/lib/python2.6/site-packages/django/core/management/__init__.py"", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File ""/Users/aaugustin/Documents/dev/dj131_venv/lib/python2.6/site-packages/django/core/management/base.py"", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File ""/Users/aaugustin/Documents/dev/dj131_venv/lib/python2.6/site-packages/django/core/management/base.py"", line 220, in execute
    output = self.handle(*args, **options)
  File ""/Users/aaugustin/Documents/dev/dj131_venv/lib/python2.6/site-packages/django/core/management/commands/test.py"", line 37, in handle
    failures = test_runner.run_tests(test_labels)
  File ""/Users/aaugustin/Documents/dev/dj131_venv/lib/python2.6/site-packages/django/test/simple.py"", line 359, in run_tests
    old_config = self.setup_databases()
  File ""/Users/aaugustin/Documents/dev/dj131_venv/lib/python2.6/site-packages/django/test/simple.py"", line 296, in setup_databases
    test_db_name = connection.creation.create_test_db(self.verbosity, autoclobber=not self.interactive)
  File ""/Users/aaugustin/Documents/dev/dj131_venv/lib/python2.6/site-packages/django/db/backends/creation.py"", line 384, in create_test_db
    if Site is not None and Site.objects.using(self.connection.alias).count() == 1:
  File ""/Users/aaugustin/Documents/dev/dj131_venv/lib/python2.6/site-packages/django/db/models/query.py"", line 334, in count
    return self.query.get_count(using=self.db)
  File ""/Users/aaugustin/Documents/dev/dj131_venv/lib/python2.6/site-packages/django/db/models/sql/query.py"", line 401, in get_count
    number = obj.get_aggregation(using=using)[None]
  File ""/Users/aaugustin/Documents/dev/dj131_venv/lib/python2.6/site-packages/django/db/models/sql/query.py"", line 367, in get_aggregation
    result = query.get_compiler(using).execute_sql(SINGLE)
  File ""/Users/aaugustin/Documents/dev/dj131_venv/lib/python2.6/site-packages/django/db/models/sql/compiler.py"", line 735, in execute_sql
    cursor.execute(sql, params)
  File ""/Users/aaugustin/Documents/dev/dj131_venv/lib/python2.6/site-packages/django/db/backends/sqlite3/base.py"", line 234, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.DatabaseError: no such table: django_site
}}}

Apparently, the origin of the problem is that Django attempts to create a default site object in the ""other"" database.

----

NB: for this test, I created two virtualenvs, `dj13_venv` and `dj131_venv`, with a fresh copy of Django 1.3 and 1.3.1 respectively:
{{{
aaugustin@aaugustin dev % virtualenv-2.6 --no-site-packages dj13_venv
New python executable in dj13_venv/bin/python
Installing setuptools............done.
Installing pip...............done.
aaugustin@aaugustin dev % . ./dj13_venv/bin/activate
(dj13_venv)aaugustin@aaugustin dev % pip install django==1.3
Downloading/unpacking django==1.3
  Downloading Django-1.3.tar.gz (6.5Mb): 6.5Mb downloaded
  Running setup.py egg_info for package django
Installing collected packages: django
  Running setup.py install for django
    changing mode of build/scripts-2.6/django-admin.py from 644 to 755
    changing mode of /Users/aaugustin/Documents/dev/dj13_venv/bin/django-admin.py to 755
Successfully installed django
Cleaning up...
}}}"	Bug	closed	Testing framework	1.3	Release blocker	duplicate			Unreviewed	1	0	1	0	0	0
