1
0
mirror of https://github.com/django/django.git synced 2025-10-09 14:59:24 +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:
Adam Zapletal 2025-01-18 16:22:10 -06:00 committed by Jacob Walls
parent 2063c88c34
commit 606fc35279
3 changed files with 16 additions and 1 deletions

View File

@ -439,7 +439,7 @@ def _init_worker(
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
requirements.
@ -463,6 +463,9 @@ def _init_worker(
process_setup(*process_setup_args)
django.setup()
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
for alias in db_aliases:

View File

@ -6,6 +6,13 @@ class Person(models.Model):
last_name = models.CharField(max_length=20)
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.
class ThroughBase(models.Model):

View File

@ -8,6 +8,8 @@ from unittest.suite import TestSuite, _ErrorHolder
from django.test import SimpleTestCase
from django.test.runner import ParallelTestSuite, RemoteTestResult
from . import models
try:
import tblib.pickling_support
except ImportError:
@ -48,6 +50,9 @@ class ParallelTestRunnerTest(SimpleTestCase):
with self.subTest(index=i):
self.assertEqual(i, i)
def test_system_checks(self):
self.assertEqual(models.Person.system_check_run_count, 1)
class SampleFailingSubtest(SimpleTestCase):
# This method name doesn't begin with "test" to prevent test discovery