#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.

Reply via email to