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.
* type: Bug => Cleanup/optimization
* stage: Unreviewed => Accepted
Comment:
Good catch, would you like to prepare a patch? (tests are required)
--
Ticket URL: <https://code.djangoproject.com/ticket/32582#comment:1>
Comment (by Girish Sontakke):
Replying to [comment:1 Mariusz Felisiak]:
> Good catch, would you like to prepare a patch? (tests are required)
May I work on this patch.
--
Ticket URL: <https://code.djangoproject.com/ticket/32582#comment:2>
* owner: nobody => Girish Sontakke
* status: new => assigned
--
Ticket URL: <https://code.djangoproject.com/ticket/32582#comment:3>
Comment (by Girish Sontakke):
[https://github.com/django/django/pull/14169]
--
Ticket URL: <https://code.djangoproject.com/ticket/32582#comment:4>
* has_patch: 0 => 1
* needs_tests: 0 => 1
--
Ticket URL: <https://code.djangoproject.com/ticket/32582#comment:5>
* needs_tests: 1 => 0
* stage: Accepted => Ready for checkin
--
Ticket URL: <https://code.djangoproject.com/ticket/32582#comment:6>
* status: assigned => closed
* resolution: => fixed
Comment:
In [changeset:"5388ff2a52ec87dae6638f5c1b85d1580f02a526" 5388ff2a]:
{{{
#!CommitTicketReference repository=""
revision="5388ff2a52ec87dae6638f5c1b85d1580f02a526"
Fixed #32582 -- Removed unnecessary dot in names of cloned test databases
on SQLite.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/32582#comment:7>