@@ -19,7 +19,7 @@ func TestReadfile_Valid(t *testing.T) {
1919 err := os .WriteFile (filepath .Join (dir , "test" ), []byte (content ), 0644 )
2020 require .NoError (t , err )
2121
22- handler , err := NewFilesystemHandler ([] string { dir } )
22+ handler , err := NewFilesystemHandler (resolveAllowedDirs ( t , dir ) )
2323 require .NoError (t , err )
2424 request := mcp.CallToolRequest {}
2525 request .Params .Name = "read_file"
@@ -35,7 +35,7 @@ func TestReadfile_Valid(t *testing.T) {
3535
3636func TestReadfile_Invalid (t * testing.T ) {
3737 dir := t .TempDir ()
38- handler , err := NewFilesystemHandler ([] string { dir } )
38+ handler , err := NewFilesystemHandler (resolveAllowedDirs ( t , dir ) )
3939 require .NoError (t , err )
4040
4141 request := mcp.CallToolRequest {}
@@ -54,7 +54,7 @@ func TestReadfile_NoAccess(t *testing.T) {
5454 dir1 := t .TempDir ()
5555 dir2 := t .TempDir ()
5656
57- handler , err := NewFilesystemHandler ([] string { dir1 } )
57+ handler , err := NewFilesystemHandler (resolveAllowedDirs ( t , dir1 ) )
5858 require .NoError (t , err )
5959
6060 request := mcp.CallToolRequest {}
@@ -100,7 +100,7 @@ func TestSearchFiles_Pattern(t *testing.T) {
100100 err = os .WriteFile (foo_test_c , []byte ("foo" ), 0644 )
101101 require .NoError (t , err )
102102
103- handler , err := NewFilesystemHandler ([] string { dir } )
103+ handler , err := NewFilesystemHandler (resolveAllowedDirs ( t , dir ) )
104104 require .NoError (t , err )
105105
106106 tests := []struct {
@@ -133,3 +133,22 @@ func TestSearchFiles_Pattern(t *testing.T) {
133133 })
134134 }
135135}
136+
137+ // resolveAllowedDirs generates a list of allowed paths, including their resolved symlinks.
138+ // This ensures both the original paths and their symlink-resolved counterparts are included,
139+ // which is useful when paths may be symlinks (e.g., t.TempDir() on some Unix systems).
140+ func resolveAllowedDirs (t * testing.T , dirs ... string ) []string {
141+ t .Helper ()
142+ allowedDirs := make ([]string , 0 )
143+ for _ , dir := range dirs {
144+ allowedDirs = append (allowedDirs , dir )
145+
146+ resolvedPath , err := filepath .EvalSymlinks (dir )
147+ require .NoError (t , err , "Failed to resolve symlinks for directory: %s" , dir )
148+
149+ if resolvedPath != dir {
150+ allowedDirs = append (allowedDirs , resolvedPath )
151+ }
152+ }
153+ return allowedDirs
154+ }
0 commit comments