← All challenges
easydjango/django · v3.1

admin_views.test_multidb fails with persistent test SQLite database.

webormbase 62254c5202
Mode

60 minutes, the full token budget.

  • Time limit60 min
  • Token budgetup to 1M
  • Worth up to135 XP

Opens VS Code with an AI agent in a new tab. Prompts, tokens, tool calls and test runs are recorded and scored.

Problem statement

Description

	(last modified by Mariusz Felisiak)

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

The environment starts at commit 62254c5202e8 (django/django 3.1), dependencies installed and tests runnable from the first minute. You are graded by hidden tests taken from the fix that was actually merged upstream.