#30413: admin_views.test_multidb fails with persistent test SQLite database.
-------------------------------------+-------------------------------------
     Reporter:  Daniel Hahler        |                    Owner:  Ngalim
                                     |  Siregar
         Type:  Bug                  |                   Status:  assigned
    Component:  Testing framework    |                  Version:  master
     Severity:  Normal               |               Resolution:
     Keywords:                       |             Triage Stage:  Accepted
    Has patch:  1                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by felixxm:

Old description:

> I've tried using persistent SQLite databases for the tests (to make use
> of
> `--keepdb`), but at least some
> tsbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
> + export PATHest 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='[email protected]',
>   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
> }}}

New description:

 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='[email protected]',
   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
 }}}

--

-- 
Ticket URL: <https://code.djangoproject.com/ticket/30413#comment:5>
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/065.26078804ecf8c1201787578bc3e335dc%40djangoproject.com.

Reply via email to