t7527: test FS event reporing on MacOS WRT case and Unicode

Confirm that MacOS FS events are reported with a normalized spelling.

APFS (and/or HFS+) is case-insensitive.  This means that case-independent
lookups ( [ -d .git ] and [ -d .GIT ] ) should both succeed.  But that
doesn't tell us how FS events are reported if we try "rm -rf .git" versus
"rm -rf .GIT".  Are the events reported using the on-disk spelling of the
pathname or in the spelling used by the command.

NEEDSWORK: I was only able to test case.  It would be nice to add tests
that use different Unicode spellings/normalizations and understand the
differences between APFS and HFS+ in this area.  We should confirm that
the spelling of the workdir paths that the daemon sends to clients are
always properly normalized.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
This commit is contained in:
Jeff Hostetler
2021-06-30 09:30:20 -04:00
committed by Victoria Dye
parent 17cf5ec78f
commit b0952ae9ab

View File

@@ -188,6 +188,36 @@ test_expect_success MINGW,SHORTNAMES 'implicit daemon stop (rename GIT~2)' '
test_must_fail git -C test_implicit_1s2 fsmonitor--daemon status
'
# Confirm that MacOS hides all of the Unicode normalization and/or
# case folding from the FS events. That is, are the pathnames in the
# FS events reported using the spelling on the disk or in the spelling
# used by the other process.
#
# Note that we assume that the filesystem is set to case insensitive.
#
# NEEDSWORK: APFS handles Unicode and Unicode normalization
# differently than HFS+. I only have an APFS partition, so
# more testing here would be helpful.
#
# Rename .git using alternate spelling and confirm that the daemon
# sees the event using the correct spelling and shutdown.
test_expect_success UTF8_NFD_TO_NFC 'MacOS event spelling (rename .GIT)' '
test_when_finished "stop_daemon_delete_repo test_apfs" &&
git init test_apfs &&
start_daemon test_apfs &&
test_path_is_dir test_apfs/.git &&
test_path_is_dir test_apfs/.GIT &&
mv test_apfs/.GIT test_apfs/.FOO &&
sleep 1 &&
mv test_apfs/.FOO test_apfs/.git &&
test_must_fail git -C test_apfs fsmonitor--daemon status
'
test_expect_success 'cannot start multiple daemons' '
test_when_finished "stop_daemon_delete_repo test_multiple" &&