#32582: Extra dot between file name and extension on sqlite cloned test
databases
when using --parallel flag
-------------------------------------+-------------------------------------
Reporter: Christian | Owner: nobody
Abbott |
Type: Bug | Status: new
Component: Testing | Version: 3.1
framework | Keywords: sqlite test clone
Severity: Normal | database parallel
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 1
UI/UX: 0 |
-------------------------------------+-------------------------------------
When asking Django to create on-disk (instead of in-memory) sqlite cloned
test databases by using the --parallel flag, the cloned file names are
created as, e.g., "test_db_1..sqlite3", "test_db_2..sqlite3", etc. (with
two dots instead of one).
If the specified test database name lacks any extension, e.g. just
'test_db', then the cloned file names have a trailing dot: "test_db_1.",
"test_db_2.", "test_db_3.", etc.
This is due to this line:
https://github.com/django/django/blob/main/django/db/backends/sqlite3/creation.py#L58
...in get_test_db_clone_settings() which constructs the file name using
the string:
{{{
'{}_{}.{}'.format(root, suffix, ext)
}}}
However, os.path.splitext() already includes the dot in the returned
extension ('ext'). Removing the dot from the format string seems the only
change needed to fix it:
{{{
'{}_{}{}'.format(root, suffix, ext)
}}}
From the github file history it looks like this quirk has been there since
the --parallel flag was first introduced (commit
0586c061f0b857e2259bea48e21ebb69a7878d13 in Sep 2015).
To reproduce the issue:
In settings.py, force on-disk instead of in-memory test databases by
specifying any test db name:
{{{
DATABASES = {
'default': {
ENGINE: 'django.db.backends.sqlite3',
NAME: 'db.sqlite3',
TEST: {
'NAME': test_db.sqlite3',
}
}
}
}}}
Create any model with migrations, and more than one TestCase class (to
ensure --parallel creates clones of the test database).
And on the command line, run tests with --parallel and --keepdb to see the
db files generated. This should be run on a multi-core processor.
{{{
manage.py test --parallel --keepdb
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/32582>
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/050.5b796a8fa09e493d35f7f7ae1c790a65%40djangoproject.com.