Fixed #30366 -- Skipped StatReloaderTests on HFS+ filesystems.

When on MacOS High Sierra or below (<=10.13) it could be that a HFS+
filesystem is used. HFS+ has a time resolution of only one second
which can be too low for some of the tests.
This commit is contained in:
Martijn Jacobs 2019-04-24 11:46:55 +02:00 committed by Carlton Gibson
parent 8b3f1c35dd
commit 9141da1a80
2 changed files with 18 additions and 1 deletions

View File

@ -11,7 +11,7 @@ import weakref
import zipfile import zipfile
from importlib import import_module from importlib import import_module
from pathlib import Path from pathlib import Path
from unittest import mock, skip from unittest import mock, skip, skipIf
from django.apps.registry import Apps from django.apps.registry import Apps
from django.test import SimpleTestCase from django.test import SimpleTestCase
@ -19,6 +19,8 @@ from django.test.utils import extend_sys_path
from django.utils import autoreload from django.utils import autoreload
from django.utils.autoreload import WatchmanUnavailable from django.utils.autoreload import WatchmanUnavailable
from .utils import on_macos_with_hfs
class TestIterModulesAndFiles(SimpleTestCase): class TestIterModulesAndFiles(SimpleTestCase):
def import_and_cleanup(self, name): def import_and_cleanup(self, name):
@ -637,6 +639,7 @@ class WatchmanReloaderTests(ReloaderTests, IntegrationTests):
self.assertIsInstance(mocked_server_status.call_args[0][0], TestException) self.assertIsInstance(mocked_server_status.call_args[0][0], TestException)
@skipIf(on_macos_with_hfs(), "These tests do not work with HFS+ as a filesystem")
class StatReloaderTests(ReloaderTests, IntegrationTests): class StatReloaderTests(ReloaderTests, IntegrationTests):
RELOADER_CLS = autoreload.StatReloader RELOADER_CLS = autoreload.StatReloader

View File

@ -0,0 +1,14 @@
import platform
def on_macos_with_hfs():
"""
MacOS 10.13 (High Sierra) and lower can use HFS+ as a filesystem.
HFS+ has a time resolution of only one second which can be too low for
some of the tests.
"""
macos_version = platform.mac_ver()[0]
if macos_version != '':
parsed_macos_version = tuple(int(x) for x in macos_version.split('.'))
return parsed_macos_version < (10, 14)
return False