#30413: admin_views.test_multidb fails with persistent test SQLite database. -------------------------------------+------------------------------------- Reporter: Daniel Hahler | Owner: Ngalim | Siregar Type: Bug | Status: assigned Component: Testing framework | Version: master Severity: Normal | Resolution: Keywords: | Triage Stage: Accepted Has patch: 1 | Needs documentation: 0 Needs tests: 0 | Patch needs improvement: 0 Easy pickings: 0 | UI/UX: 0 -------------------------------------+------------------------------------- Changes (by Ngalim Siregar):
* has_patch: 0 => 1 Old description: > 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='t...@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 > }}} New description: 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='t...@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 }}} -- Comment: Created [https://github.com/django/django/pull/11678 PR] -- Ticket URL: <https://code.djangoproject.com/ticket/30413#comment:4> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/065.e5789fd6af07ab425b2cb2533af2d074%40djangoproject.com.