diff --git a/packages/envd/internal/services/filesystem/watch.go b/packages/envd/internal/services/filesystem/watch.go index 8fe1820651..ebdde74ca9 100644 --- a/packages/envd/internal/services/filesystem/watch.go +++ b/packages/envd/internal/services/filesystem/watch.go @@ -41,7 +41,7 @@ func (s Service) watchHandler(ctx context.Context, req *connect.Request[rpc.Watc } if !info.IsDir() { - return connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("path %s not a directory: %w", watchPath, err)) + return connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("path %s is not a directory", watchPath)) } // Check if path is on a network filesystem mount diff --git a/packages/envd/internal/services/filesystem/watch_sync.go b/packages/envd/internal/services/filesystem/watch_sync.go index 0d3a37f0a0..3aa041030c 100644 --- a/packages/envd/internal/services/filesystem/watch_sync.go +++ b/packages/envd/internal/services/filesystem/watch_sync.go @@ -168,7 +168,7 @@ func (s Service) CreateWatcher(ctx context.Context, req *connect.Request[rpc.Cre } if !info.IsDir() { - return nil, connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("path %s not a directory: %w", watchPath, err)) + return nil, connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("path %s is not a directory", watchPath)) } // Check if path is on a network filesystem mount diff --git a/packages/envd/internal/services/filesystem/watch_test.go b/packages/envd/internal/services/filesystem/watch_test.go index fce316b35d..c057dc77f7 100644 --- a/packages/envd/internal/services/filesystem/watch_test.go +++ b/packages/envd/internal/services/filesystem/watch_test.go @@ -215,3 +215,25 @@ func TestCreateWatcherOnNetworkMount(t *testing.T) { }) assert.NotEmpty(t, watcherID) } + +func TestCreateWatcher_NotADirectory(t *testing.T) { + t.Parallel() + + u, err := user.Current() + require.NoError(t, err) + + filePath := filepath.Join(t.TempDir(), "file.txt") + require.NoError(t, os.WriteFile(filePath, []byte("content"), 0o644)) + + svc := mockService() + ctx := authn.SetInfo(t.Context(), u) + + _, err = svc.CreateWatcher(ctx, connect.NewRequest(&filesystem.CreateWatcherRequest{ + Path: filePath, + })) + require.Error(t, err) + assert.Equal(t, connect.CodeInvalidArgument, connect.CodeOf(err)) + assert.Contains(t, err.Error(), "is not a directory") + assert.NotContains(t, err.Error(), "%!w") +} +