mcp: export session missing error (#771)

Fix: #715

- export session missing error
- modify `errSessionMissing` to `ErrSessionMissing`
- add unit test about session missing error
This commit is contained in:
FanOne 2026-02-03 22:46:49 +08:00 • committed by GitHub
commit 7ecd8049c6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -2280,3 +2280,47 @@ data: {"jsonrpc":"2.0","method":"test2","params":{}}
}
}
}
func Test_ExportErrSessionMissing(t *testing.T) {
ctx := context.Background()
// 1. Setup server
impl := &Implementation{Name: "test", Version: "1.0.0"}
server := NewServer(impl, nil)
handler := NewStreamableHTTPHandler(func(r *http.Request) *Server { return server }, nil)
ts := httptest.NewServer(handler)
defer ts.Close()
// 2. Setup client
clientTransport := &StreamableClientTransport{
Endpoint: ts.URL,
}
client := NewClient(impl, nil)
session, err := client.Connect(ctx, clientTransport, nil)
if err != nil {
t.Fatalf("Connect failed: %v", err)
}
defer session.Close()
// 3. Manually invalidate session on server
handler.mu.Lock()
if len(handler.sessions) != 1 {
handler.mu.Unlock()
t.Fatalf("expected 1 session, got %d", len(handler.sessions))
}
for id := range handler.sessions {
delete(handler.sessions, id)
}
handler.mu.Unlock()
// 4. Try to call a tool (or any request)
_, err = session.ListTools(ctx, nil)
if err == nil {
t.Fatal("expected error, got nil")
}
// 5. Verify it's ErrSessionMissing
if !errors.Is(err, ErrSessionMissing) {
t.Errorf("expected error to wrap ErrSessionMissing, got: %v", err)
}
}