﻿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
30413	admin_views.test_multidb fails with persistent test SQLite database.	Daniel Hahler	Farhaan Bukhsh	"I've tried using persistent SQLite databases for the tests (to make use of
`--keepdb`), but at least some test fails with:

> sqlite3.OperationalError: database is locked

This is not an issue when only using `TEST[""NAME""]` with ""default"" (which is good enough in terms of performance).

{{{
diff --git i/tests/test_sqlite.py w/tests/test_sqlite.py
index f1b65f7d01..9ce4e32e14 100644
--- i/tests/test_sqlite.py
+++ w/tests/test_sqlite.py
@@ -15,9 +15,15 @@
 DATABASES = {
     'default': {
         'ENGINE': 'django.db.backends.sqlite3',
+        'TEST': {
+            'NAME': 'test_default.sqlite3'
+        },
     },
     'other': {
         'ENGINE': 'django.db.backends.sqlite3',
+        'TEST': {
+            'NAME': 'test_other.sqlite3'
+        },
     }
 }
}}}

{{{
% tests/runtests.py admin_views.test_multidb -v 3 --keepdb --parallel 1
…
Operations to perform:
  Synchronize unmigrated apps: admin_views, auth, contenttypes, messages, sessions, staticfiles
  Apply all migrations: admin, sites
Running pre-migrate handlers for application contenttypes
Running pre-migrate handlers for application auth
Running pre-migrate handlers for application sites
Running pre-migrate handlers for application sessions
Running pre-migrate handlers for application admin
Running pre-migrate handlers for application admin_views
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
Running migrations:
  No migrations to apply.
Running post-migrate handlers for application contenttypes
Running post-migrate handlers for application auth
Running post-migrate handlers for application sites
Running post-migrate handlers for application sessions
Running post-migrate handlers for application admin
Running post-migrate handlers for application admin_views
System check identified no issues (0 silenced).
ERROR

======================================================================
ERROR: setUpClass (admin_views.test_multidb.MultiDatabaseTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ""…/Vcs/django/django/db/backends/utils.py"", line 84, in _execute
    return self.cursor.execute(sql, params)
  File ""…/Vcs/django/django/db/backends/sqlite3/base.py"", line 391, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: database is locked

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File ""…/Vcs/django/django/test/testcases.py"", line 1137, in setUpClass
    cls.setUpTestData()
  File ""…/Vcs/django/tests/admin_views/test_multidb.py"", line 40, in setUpTestData
    username='admin', password='something', email='test@test.org',
  File ""…/Vcs/django/django/contrib/auth/models.py"", line 158, in create_superuser
    return self._create_user(username, email, password, **extra_fields)
  File ""…/Vcs/django/django/contrib/auth/models.py"", line 141, in _create_user
    user.save(using=self._db)
  File ""…/Vcs/django/django/contrib/auth/base_user.py"", line 66, in save
    super().save(*args, **kwargs)
  File ""…/Vcs/django/django/db/models/base.py"", line 741, in save
    force_update=force_update, update_fields=update_fields)
  File ""…/Vcs/django/django/db/models/base.py"", line 779, in save_base
    force_update, using, update_fields,
  File ""…/Vcs/django/django/db/models/base.py"", line 870, in _save_table
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File ""…/Vcs/django/django/db/models/base.py"", line 908, in _do_insert
    using=using, raw=raw)
  File ""…/Vcs/django/django/db/models/manager.py"", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File ""…/Vcs/django/django/db/models/query.py"", line 1175, in _insert
    return query.get_compiler(using=using).execute_sql(return_id)
  File ""…/Vcs/django/django/db/models/sql/compiler.py"", line 1321, in execute_sql
    cursor.execute(sql, params)
  File ""…/Vcs/django/django/db/backends/utils.py"", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File ""…/Vcs/django/django/db/backends/utils.py"", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File ""…/Vcs/django/django/db/backends/utils.py"", line 84, in _execute
    return self.cursor.execute(sql, params)
  File ""…/Vcs/django/django/db/utils.py"", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File ""…/Vcs/django/django/db/backends/utils.py"", line 84, in _execute
    return self.cursor.execute(sql, params)
  File ""…/Vcs/django/django/db/backends/sqlite3/base.py"", line 391, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: database is locked
}}}
"	Bug	closed	Testing framework	dev	Normal	fixed			Ready for checkin	1	0	0	0	0	0
