mirror of
https://github.com/django/django.git
synced 2025-10-15 09:49:21 +00:00
Fixed #36083 -- Ran system checks in ParallelTestSuite workers.
Workers created by ParallelTestSuite were not running system checks in the spawn multiprocessing mode. In general this is fine, but system checks can have side effects expected by tests. This patch runs system checks inside of _init_worker, which is only called by ParallelTestSuite.
This commit is contained in:
parent
2063c88c34
commit
606fc35279
@ -439,7 +439,7 @@ def _init_worker(
|
|||||||
used_aliases=None,
|
used_aliases=None,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Switch to databases dedicated to this worker.
|
Switch to databases dedicated to this worker and run system checks.
|
||||||
|
|
||||||
This helper lives at module-level because of the multiprocessing module's
|
This helper lives at module-level because of the multiprocessing module's
|
||||||
requirements.
|
requirements.
|
||||||
@ -463,6 +463,9 @@ def _init_worker(
|
|||||||
process_setup(*process_setup_args)
|
process_setup(*process_setup_args)
|
||||||
django.setup()
|
django.setup()
|
||||||
setup_test_environment(debug=debug_mode)
|
setup_test_environment(debug=debug_mode)
|
||||||
|
call_command(
|
||||||
|
"check", stdout=io.StringIO(), stderr=io.StringIO(), databases=used_aliases
|
||||||
|
)
|
||||||
|
|
||||||
db_aliases = used_aliases if used_aliases is not None else connections
|
db_aliases = used_aliases if used_aliases is not None else connections
|
||||||
for alias in db_aliases:
|
for alias in db_aliases:
|
||||||
|
@ -6,6 +6,13 @@ class Person(models.Model):
|
|||||||
last_name = models.CharField(max_length=20)
|
last_name = models.CharField(max_length=20)
|
||||||
friends = models.ManyToManyField("self")
|
friends = models.ManyToManyField("self")
|
||||||
|
|
||||||
|
system_check_run_count = 0
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def check(cls, *args, **kwargs):
|
||||||
|
cls.system_check_run_count += 1
|
||||||
|
return super().check(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
# A set of models that use a non-abstract inherited 'through' model.
|
# A set of models that use a non-abstract inherited 'through' model.
|
||||||
class ThroughBase(models.Model):
|
class ThroughBase(models.Model):
|
||||||
|
@ -8,6 +8,8 @@ from unittest.suite import TestSuite, _ErrorHolder
|
|||||||
from django.test import SimpleTestCase
|
from django.test import SimpleTestCase
|
||||||
from django.test.runner import ParallelTestSuite, RemoteTestResult
|
from django.test.runner import ParallelTestSuite, RemoteTestResult
|
||||||
|
|
||||||
|
from . import models
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import tblib.pickling_support
|
import tblib.pickling_support
|
||||||
except ImportError:
|
except ImportError:
|
||||||
@ -48,6 +50,9 @@ class ParallelTestRunnerTest(SimpleTestCase):
|
|||||||
with self.subTest(index=i):
|
with self.subTest(index=i):
|
||||||
self.assertEqual(i, i)
|
self.assertEqual(i, i)
|
||||||
|
|
||||||
|
def test_system_checks(self):
|
||||||
|
self.assertEqual(models.Person.system_check_run_count, 1)
|
||||||
|
|
||||||
|
|
||||||
class SampleFailingSubtest(SimpleTestCase):
|
class SampleFailingSubtest(SimpleTestCase):
|
||||||
# This method name doesn't begin with "test" to prevent test discovery
|
# This method name doesn't begin with "test" to prevent test discovery
|
||||||
|
Loading…
x
Reference in New Issue
Block a user