Skip to content

Commit 8bcd100

Browse files
committed
test(handler): add some test cases for the read_file tool
1 parent e16db3f commit 8bcd100

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

filesystemserver/handler_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package filesystemserver
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"os"
7+
"path/filepath"
8+
"testing"
9+
10+
"github.com/mark3labs/mcp-go/mcp"
11+
"github.com/stretchr/testify/assert"
12+
"github.com/stretchr/testify/require"
13+
)
14+
15+
func TestReadfile_Valid(t *testing.T) {
16+
// prepare temp directory
17+
dir := t.TempDir()
18+
content := "test-content"
19+
err := os.WriteFile(filepath.Join(dir, "test"), []byte(content), 0644)
20+
require.NoError(t, err)
21+
22+
handler, err := NewFilesystemHandler([]string{dir})
23+
require.NoError(t, err)
24+
request := mcp.CallToolRequest{}
25+
request.Params.Name = "read_file"
26+
request.Params.Arguments = map[string]any{
27+
"path": filepath.Join(dir, "test"),
28+
}
29+
30+
result, err := handler.handleReadFile(context.Background(), request)
31+
require.NoError(t, err)
32+
assert.Len(t, result.Content, 1)
33+
assert.Equal(t, content, result.Content[0].(mcp.TextContent).Text)
34+
}
35+
36+
func TestReadfile_Invalid(t *testing.T) {
37+
dir := t.TempDir()
38+
handler, err := NewFilesystemHandler([]string{dir})
39+
require.NoError(t, err)
40+
41+
request := mcp.CallToolRequest{}
42+
request.Params.Name = "read_file"
43+
request.Params.Arguments = map[string]any{
44+
"path": filepath.Join(dir, "test"),
45+
}
46+
47+
result, err := handler.handleReadFile(context.Background(), request)
48+
require.NoError(t, err)
49+
assert.True(t, result.IsError)
50+
assert.Contains(t, fmt.Sprint(result.Content[0]), "no such file or directory")
51+
}
52+
53+
func TestReadfile_NoAccess(t *testing.T) {
54+
dir1 := t.TempDir()
55+
dir2 := t.TempDir()
56+
57+
handler, err := NewFilesystemHandler([]string{dir1})
58+
require.NoError(t, err)
59+
60+
request := mcp.CallToolRequest{}
61+
request.Params.Name = "read_file"
62+
request.Params.Arguments = map[string]any{
63+
"path": filepath.Join(dir2, "test"),
64+
}
65+
66+
result, err := handler.handleReadFile(context.Background(), request)
67+
require.NoError(t, err)
68+
assert.True(t, result.IsError)
69+
assert.Contains(t, fmt.Sprint(result.Content[0]), "access denied - path outside allowed directories")
70+
}

0 commit comments

Comments
 (0)