﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
32582	Extra dot in cloned test database file names on SQLite when using --parallel.	Christian Abbott	Girish Sontakke	"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
}}}"	Cleanup/optimization	closed	Testing framework	3.1	Normal	fixed	sqlite test clone database parallel		Ready for checkin	1	0	0	0	1	0
