| 32 | } |
| 33 | |
| 34 | func TestFileIdentityMismatch(t *testing.T) { |
| 35 | rootDir := t.TempDir() |
| 36 | require.NoError(t, os.WriteFile(filepath.Join(rootDir, "expected"), []byte("expected"), 0o644)) |
| 37 | require.NoError(t, os.WriteFile(filepath.Join(rootDir, "other"), []byte("other"), 0o644)) |
| 38 | |
| 39 | root, err := OpenRoot(rootDir) |
| 40 | require.NoError(t, err) |
| 41 | defer root.Close() |
| 42 | defaultOpenFile := root.openFile |
| 43 | root.openFile = func(parent *os.Root, name string, flag int, perm os.FileMode) (*os.File, error) { |
| 44 | if name == "expected" { |
| 45 | return defaultOpenFile(parent, "other", flag, perm) |
| 46 | } |
| 47 | return defaultOpenFile(parent, name, flag, perm) |
| 48 | } |
| 49 | |
| 50 | file, err := root.Create("expected", 0o644, 0o755, true) |
| 51 | assert.Nil(t, file) |
| 52 | require.ErrorContains(t, err, "changed while opening") |
| 53 | content, err := os.ReadFile(filepath.Join(rootDir, "other")) |
| 54 | require.NoError(t, err) |
| 55 | assert.Equal(t, "other", string(content)) |
| 56 | } |
| 57 | |
| 58 | func TestRedirectTargetClassificationError(t *testing.T) { |
| 59 | rootDir := t.TempDir() |