gopls/internal/cmd: set timeout for mcp server start Change-Id: Ic1852d20f8fa58fbac2d957c1022f2bbfd9ef9de Reviewed-on: https://go-review.googlesource.com/c/tools/+/802760 Reviewed-by: Madeline Kalil <mkalil@google.com> LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
diff --git a/gopls/internal/cmd/mcp_test.go b/gopls/internal/cmd/mcp_test.go index 2b1c63c..bfb9c86 100644 --- a/gopls/internal/cmd/mcp_test.go +++ b/gopls/internal/cmd/mcp_test.go
@@ -235,8 +235,9 @@ // Wait for the MCP server to start listening. The referenced log occurs // after the connection is opened via net.Listen and the HTTP handlers are // set up. - ready := make(chan bool) + ready := make(chan bool, 1) go func() { + defer close(ready) // Copy from the pipe to stderr, keeping an eye out for the "mcp http // server listening" string. scan := bufio.NewScanner(stderr) @@ -252,7 +253,15 @@ } }() - <-ready + select { + case ok := <-ready: + if !ok { + t.Fatalf("gopls mcp server exited without starting") + } + case <-time.After(60 * time.Second): + t.Fatalf("timed out waiting for gopls mcp server to start") + } + client := mcp.NewClient(&mcp.Implementation{Name: "client", Version: "v0.0.1"}, nil) ctx := t.Context() mcpSession, err := client.Connect(ctx, &mcp.SSEClientTransport{Endpoint: "http://" + addr}, nil)