Opened 7 years ago
Last modified 6 years ago
#30413 closed Bug
admin_views.test_multidb fails with persistent test SQLite database. — at Version 4
| Reported by: | Daniel Hahler | Owned by: | Ngalim Siregar |
|---|---|---|---|
| Component: | Testing framework | Version: | dev |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Ready for checkin | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
I've tried using persistent SQLite databases for the tests (to make use of
--keepdb), but at least some tsbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
+ export PATHest 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
Change History (4)
comment:1 by , 7 years ago
comment:2 by , 7 years ago
| Summary: | tests: admin_views.test_multidb fails with persistent sqlite: OperationalError: database is locked → admin_views.test_multidb fails with persistent test SQLite database. |
|---|---|
| Triage Stage: | Unreviewed → Accepted |
| Version: | 2.2 → master |
Reproduced at 0dd2308cf6f559a4f4b50edd7c005c7cf025d1aa.
comment:3 by , 6 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
Note:
See TracTickets
for help on using tickets.
This is only an issue when setting
TEST["NAME"], but notNAME.The following works:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'django_tests_default.sqlite3', }, 'other': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'django_tests_other.sqlite3', } }