From 8bc9a9a9f561cfadcd855cabe950354c7ffbc80e Mon Sep 17 00:00:00 2001 From: Rob Findley Date: Thu, 19 Jun 2025 00:29:02 +0000 Subject: [PATCH] internal/jsonrpc2_v2,mcp: remove unneeded dependencies Remove dependencies on the eventtest and testenv packages from jsonrpc2_v2 and mcp packages, in preparation for forking. Change-Id: Id0efb0c3187629f6fb1822cc853ec52acea41b0d Reviewed-on: https://go-review.googlesource.com/c/tools/+/682696 Reviewed-by: Jonathan Amsterdam Auto-Submit: Robert Findley LUCI-TryBot-Result: Go LUCI --- internal/jsonrpc2/jsonrpc2_test.go | 6 +----- internal/jsonrpc2/serve_test.go | 19 +++++++++++++------ mcp/cmd_test.go | 10 ++++++++-- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/internal/jsonrpc2/jsonrpc2_test.go b/internal/jsonrpc2/jsonrpc2_test.go index 75124cd..35f4e7f 100644 --- a/internal/jsonrpc2/jsonrpc2_test.go +++ b/internal/jsonrpc2/jsonrpc2_test.go @@ -12,9 +12,7 @@ import ( "reflect" "testing" - "golang.org/x/tools/internal/event/export/eventtest" "github.com/modelcontextprotocol/go-sdk/internal/jsonrpc2" - "golang.org/x/tools/internal/stack/stacktest" ) var callTests = []invoker{ @@ -130,8 +128,7 @@ func TestConnectionHeader(t *testing.T) { } func testConnection(t *testing.T, framer jsonrpc2.Framer) { - stacktest.NoLeak(t) - ctx := eventtest.NewContext(context.Background(), t) + ctx := context.Background() listener, err := jsonrpc2.NetPipeListener(ctx) if err != nil { t.Fatal(err) @@ -147,7 +144,6 @@ func testConnection(t *testing.T, framer jsonrpc2.Framer) { client, err := jsonrpc2.Dial(ctx, listener.Dialer(), binder{framer, func(h *handler) { defer h.conn.Close() - ctx := eventtest.NewContext(ctx, t) test.Invoke(t, ctx, h) if call, ok := test.(*call); ok { // also run all simple call tests in echo mode diff --git a/internal/jsonrpc2/serve_test.go b/internal/jsonrpc2/serve_test.go index 31f2c16..282a684 100644 --- a/internal/jsonrpc2/serve_test.go +++ b/internal/jsonrpc2/serve_test.go @@ -8,18 +8,26 @@ import ( "context" "errors" "fmt" + "runtime" "runtime/debug" "testing" "time" "github.com/modelcontextprotocol/go-sdk/internal/jsonrpc2" - "golang.org/x/tools/internal/stack/stacktest" - "golang.org/x/tools/internal/testenv" ) +// needsLocalhostNet skips t if networking does not work for ports opened +// with "localhost". +// forked from golang.org/x/tools/internal/testenv. +func needsLocalhostNet(t testing.TB) { + switch runtime.GOOS { + case "js", "wasip1": + t.Skipf(`Listening on "localhost" fails on %s; see https://go.dev/issue/59718`, runtime.GOOS) + } +} + func TestIdleTimeout(t *testing.T) { - testenv.NeedsLocalhostNet(t) - stacktest.NoLeak(t) + needsLocalhostNet(t) // Use a panicking time.AfterFunc instead of context.WithTimeout so that we // get a goroutine dump on failure. We expect the test to take on the order of @@ -158,7 +166,6 @@ func (fakeHandler) Handle(ctx context.Context, req *jsonrpc2.Request) (any, erro } func TestServe(t *testing.T) { - stacktest.NoLeak(t) ctx := context.Background() tests := []struct { @@ -166,7 +173,7 @@ func TestServe(t *testing.T) { factory func(context.Context, testing.TB) (jsonrpc2.Listener, error) }{ {"tcp", func(ctx context.Context, t testing.TB) (jsonrpc2.Listener, error) { - testenv.NeedsLocalhostNet(t) + needsLocalhostNet(t) return jsonrpc2.NetListener(ctx, "tcp", "localhost:0", jsonrpc2.NetListenOptions{}) }}, {"pipe", func(ctx context.Context, t testing.TB) (jsonrpc2.Listener, error) { diff --git a/mcp/cmd_test.go b/mcp/cmd_test.go index cde70ff..7ff1573 100644 --- a/mcp/cmd_test.go +++ b/mcp/cmd_test.go @@ -9,11 +9,11 @@ import ( "log" "os" "os/exec" + "runtime" "testing" "github.com/google/go-cmp/cmp" "github.com/modelcontextprotocol/go-sdk/mcp" - "golang.org/x/tools/internal/testenv" ) const runAsServer = "_MCP_RUN_AS_SERVER" @@ -39,7 +39,13 @@ func runServer() { } func TestCmdTransport(t *testing.T) { - testenv.NeedsExec(t) + // Conservatively, limit to major OS where we know that os.Exec is + // supported. + switch runtime.GOOS { + case "darwin", "linux", "windows": + default: + t.Skip("unsupported OS") + } ctx, cancel := context.WithCancel(context.Background()) defer cancel()