Add additional symlink tests for Stat Adds additional symlink-related tests for FSTestOSWrapper's Stat(). Bug: 436025865 Change-Id: I7c645319873e0f1fe19ede8dd1c3e934d9febf66 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/276883 Reviewed-by: Ryan Harrison <rharrison@chromium.org> Commit-Queue: Brian Sheedy <bsheedy@google.com>
diff --git a/tools/src/oswrapper/fstestoswrapper_stat_test.go b/tools/src/oswrapper/fstestoswrapper_stat_test.go index df1b441..c8c4156 100644 --- a/tools/src/oswrapper/fstestoswrapper_stat_test.go +++ b/tools/src/oswrapper/fstestoswrapper_stat_test.go
@@ -152,6 +152,53 @@ wantErrIs: syscall.ELOOP, }, }, + { + name: "Stat absolute symlink", + path: filepath.Join(root, "abs_link"), + setup: unittestSetup{ + initialFiles: map[string]string{filepath.Join(root, "file.txt"): "content"}, + initialSymlinks: map[string]string{ + filepath.Join(root, "abs_link"): filepath.Join(root, "file.txt"), + }, + }, + verify: func(t *testing.T, info os.FileInfo) { + require.False(t, info.IsDir()) + require.Equal(t, "abs_link", info.Name()) + require.Equal(t, int64(7), info.Size()) + }, + }, + { + name: "Stat symlink to parent", + path: filepath.Join(root, "subdir", "link"), + setup: unittestSetup{ + initialFiles: map[string]string{filepath.Join(root, "file.txt"): "content"}, + initialDirs: []string{filepath.Join(root, "subdir")}, + initialSymlinks: map[string]string{ + filepath.Join(root, "subdir", "link"): "../file.txt", + }, + }, + verify: func(t *testing.T, info os.FileInfo) { + require.False(t, info.IsDir()) + require.Equal(t, "link", info.Name()) + require.Equal(t, int64(7), info.Size()) + }, + }, + { + name: "Stat through symlink path component", + path: filepath.Join(root, "link_dir", "file.txt"), + setup: unittestSetup{ + initialFiles: map[string]string{filepath.Join(root, "subdir", "file.txt"): "content"}, + initialDirs: []string{filepath.Join(root, "subdir")}, + initialSymlinks: map[string]string{ + filepath.Join(root, "link_dir"): "subdir", + }, + }, + verify: func(t *testing.T, info os.FileInfo) { + require.False(t, info.IsDir()) + require.Equal(t, "file.txt", info.Name()) + require.Equal(t, int64(7), info.Size()) + }, + }, } for _, tc := range tests { @@ -241,6 +288,39 @@ }}, path: "loop1", }, + { + name: "Stat symlink chain", + setup: matchesRealSetup{unittestSetup{ + initialFiles: map[string]string{"file.txt": "content"}, + initialSymlinks: map[string]string{ + "link1": "link2", + "link2": "file.txt", + }, + }}, + path: "link1", + }, + { + name: "Stat symlink to parent", + setup: matchesRealSetup{unittestSetup{ + initialFiles: map[string]string{"file.txt": "content"}, + initialDirs: []string{"subdir"}, + initialSymlinks: map[string]string{ + "subdir/link": "../file.txt", + }, + }}, + path: "subdir/link", + }, + { + name: "Stat through symlink path component", + setup: matchesRealSetup{unittestSetup{ + initialFiles: map[string]string{"subdir/file.txt": "content"}, + initialDirs: []string{"subdir"}, + initialSymlinks: map[string]string{ + "link_dir": "subdir", + }, + }}, + path: "link_dir/file.txt", + }, } for _, tc := range tests {