Opened 7 years ago
Closed 7 years ago
#30366 closed Bug (fixed)
The StatReloaderTests will fail on Mac OSX when HFS+ is used as a filesystem
| Reported by: | Martijn Jacobs | Owned by: | Martijn Jacobs |
|---|---|---|---|
| Component: | Testing framework | Version: | dev |
| Severity: | Normal | Keywords: | HFS+ OSX Testing |
| Cc: | Martijn Jacobs | Triage Stage: | Ready for checkin |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
HFS+ is the default filesystem for Mac OSX Sierra (10.12.x) and below before it was replaced with APFS in High Sierra (10.13.x) and above.
HFS+ has the unfortunate disadvantage of having a timestamp resolution of 1 second.
In the StatReloaderTests class the reloader sleep time is set to 0.01 seconds to speed up the tests:
class StatReloaderTests(ReloaderTests, IntegrationTests): RELOADER_CLS = autoreload.StatReloader def setUp(self): super().setUp() # Shorten the sleep time to speed up tests. self.reloader.SLEEP_TIME = 0.01
This will result that these tests will fail when using HFS+ as a filesystem because it won't detect that files have been created or changed:
======================================================================
FAIL: test_glob_non_existing_directory (utils_tests.test_autoreload.StatReloaderTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/martijn/.pyenv/versions/3.7.2/lib/python3.7/unittest/case.py", line 59, in testPartExecutor
yield
File "/Users/martijn/.pyenv/versions/3.7.2/lib/python3.7/unittest/case.py", line 615, in run
testMethod()
File "/Users/martijn/.pyenv/versions/3.7.2/lib/python3.7/unittest/mock.py", line 1195, in patched
return func(*args, **keywargs)
File "/Users/martijn/Dev/oss/django/tests/utils_tests/test_autoreload.py", line 418, in test_glob_non_existing_directory
self.assertEqual(notify_mock.call_count, 1)
File "/Users/martijn/.pyenv/versions/3.7.2/lib/python3.7/unittest/case.py", line 839, in assertEqual
assertion_func(first, second, msg=msg)
File "/Users/martijn/.pyenv/versions/3.7.2/lib/python3.7/unittest/case.py", line 832, in _baseAssertEqual
raise self.failureException(msg)
AssertionError: 0 != 1
======================================================================
FAIL: test_nonexistent_file (utils_tests.test_autoreload.StatReloaderTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/martijn/.pyenv/versions/3.7.2/lib/python3.7/unittest/case.py", line 59, in testPartExecutor
yield
File "/Users/martijn/.pyenv/versions/3.7.2/lib/python3.7/unittest/case.py", line 615, in run
testMethod()
File "/Users/martijn/.pyenv/versions/3.7.2/lib/python3.7/unittest/mock.py", line 1195, in patched
return func(*args, **keywargs)
File "/Users/martijn/Dev/oss/django/tests/utils_tests/test_autoreload.py", line 384, in test_nonexistent_file
self.assertEqual(notify_mock.call_count, 1)
File "/Users/martijn/.pyenv/versions/3.7.2/lib/python3.7/unittest/case.py", line 839, in assertEqual
assertion_func(first, second, msg=msg)
File "/Users/martijn/.pyenv/versions/3.7.2/lib/python3.7/unittest/case.py", line 832, in _baseAssertEqual
raise self.failureException(msg)
AssertionError: 0 != 1
======================================================================
FAIL: test_nonexistent_file_in_non_existing_directory (utils_tests.test_autoreload.StatReloaderTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/martijn/.pyenv/versions/3.7.2/lib/python3.7/unittest/case.py", line 59, in testPartExecutor
yield
File "/Users/martijn/.pyenv/versions/3.7.2/lib/python3.7/unittest/case.py", line 615, in run
testMethod()
File "/Users/martijn/.pyenv/versions/3.7.2/lib/python3.7/unittest/mock.py", line 1195, in patched
return func(*args, **keywargs)
File "/Users/martijn/Dev/oss/django/tests/utils_tests/test_autoreload.py", line 395, in test_nonexistent_file_in_non_existing_directory
self.assertEqual(notify_mock.call_count, 1)
File "/Users/martijn/.pyenv/versions/3.7.2/lib/python3.7/unittest/case.py", line 839, in assertEqual
assertion_func(first, second, msg=msg)
File "/Users/martijn/.pyenv/versions/3.7.2/lib/python3.7/unittest/case.py", line 832, in _baseAssertEqual
raise self.failureException(msg)
AssertionError: 0 != 1
----------------------------------------------------------------------
How to reproduce:
./runtests.py utils_tests.test_autoreload
on a Mac OSX computer which (still) uses HFS+
Change History (4)
comment:1 by , 7 years ago
| Cc: | added |
|---|---|
| Owner: | changed from to |
comment:2 by , 7 years ago
| Has patch: | set |
|---|
comment:3 by , 7 years ago
| Triage Stage: | Unreviewed → Ready for checkin |
|---|---|
| Type: | Uncategorized → Bug |
After discussion on the PR, we'll got for skipping the few tests on earlier versions of macOS. Ready to go I think.
A possible solution can be found in the pull request here: https://github.com/django/django/pull/11228