返回 DeepSeek-Reasonix
sdk_session_shutdown_test.go
根目录 / internal / plugin / sdk_session_shutdown_test.go
1 package plugin
2
3 import (
4 "context"
5 "testing"
6
7 mcpsdk "github.com/modelcontextprotocol/go-sdk/mcp"
8 )
9
10 func TestSDKSessionRetiresEndpointBeforeCancellingProcessContext(t *testing.T) {
11 for _, shutdown := range []string{"close", "invalidate"} {
12 t.Run(shutdown, func(t *testing.T) {
13 transport := newInMemorySDKTransport(t, func() *mcpsdk.Server {
14 return mcpsdk.NewServer(&mcpsdk.Implementation{Name: "shutdown", Version: "1"}, nil)
15 })
16 factory := transport.endpointFactory
17 retired := make(chan error, 1)
18 transport.endpointFactory = func(ctx context.Context) (sdkEndpoint, error) {
19 endpoint, err := factory(ctx)
20 endpoint.close = func() { retired <- ctx.Err() }
21 return endpoint, err
22 }
23 managed, err := transport.acquire(t.Context())
24 if err != nil {
25 t.Fatal(err)
26 }
27 if shutdown == "close" {
28 transport.close()
29 } else {
30 transport.invalidate(managed)
31 }
32 if err := <-retired; err != nil {
33 t.Fatalf("process context cancelled before endpoint could perform graceful retirement: %v", err)
34 }
35 })
36 }
37 }
38
38 lines GO