Skip to content

Commit ac53b88

Browse files
committed
test: properly validate global+session resource merging
- Exercise server's ListResources and ReadResource handlers with session context - Assert global resources appear in merged list - Verify session resource overrides global resource with same URI - Confirm ReadResource uses session handler for overridden resources - Test that non-overridden global resources still use global handlers
1 parent c2ece3c commit ac53b88

File tree

1 file changed

+53
-11
lines changed

1 file changed

+53
-11
lines changed

server/session_resource_helpers_test.go

Lines changed: 53 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -260,20 +260,62 @@ func TestSessionResourcesWithGlobalResources(t *testing.T) {
260260
)
261261
require.NoError(t, err)
262262

263-
// Get effective resources (global + session)
264-
sessionResources := session.GetSessionResources()
263+
// Create a context with the session for server operations
264+
sessionCtx := server.WithContext(ctx, session)
265265

266-
// Session should have 2 session-specific resources
267-
assert.Len(t, sessionResources, 2)
266+
// Test ListResources to verify merge behavior
267+
listResult, rerr := server.handleListResources(sessionCtx, "test-id", mcp.ListResourcesRequest{})
268+
require.Nil(t, rerr)
269+
require.NotNil(t, listResult)
268270

269-
// Verify that session resource overrides work correctly
270-
overriddenResource := sessionResources["test://global1"]
271-
assert.Equal(t, "Session Override Resource", overriddenResource.Resource.Name)
271+
// Should have 3 resources: global2, session-overridden global1, and session1
272+
assert.Len(t, listResult.Resources, 3)
272273

273-
// Test read operations use correct handlers
274-
contents, err := sessionResources["test://global1"].Handler(ctx, mcp.ReadResourceRequest{Params: mcp.ReadResourceParams{URI: "test://global1"}})
275-
require.NoError(t, err)
276-
assert.Equal(t, "session override content", contents[0].(mcp.TextResourceContents).Text)
274+
// Verify all expected resources are present
275+
resourceMap := make(map[string]mcp.Resource)
276+
for _, r := range listResult.Resources {
277+
resourceMap[r.URI] = r
278+
}
279+
280+
// Global resource 2 should appear unchanged
281+
assert.Contains(t, resourceMap, "test://global2")
282+
assert.Equal(t, "Global Resource 2", resourceMap["test://global2"].Name)
283+
284+
// Global resource 1 should be overridden by session resource
285+
assert.Contains(t, resourceMap, "test://global1")
286+
assert.Equal(t, "Session Override Resource", resourceMap["test://global1"].Name)
287+
288+
// Session-only resource should appear
289+
assert.Contains(t, resourceMap, "test://session1")
290+
assert.Equal(t, "Session Resource 1", resourceMap["test://session1"].Name)
291+
292+
// Test ReadResource to verify handlers are correctly resolved
293+
// Test reading the overridden resource - should use session handler
294+
readResult1, rerr := server.handleReadResource(sessionCtx, "test-id", mcp.ReadResourceRequest{
295+
Params: mcp.ReadResourceParams{URI: "test://global1"},
296+
})
297+
require.Nil(t, rerr)
298+
require.NotNil(t, readResult1)
299+
assert.Len(t, readResult1.Contents, 1)
300+
assert.Equal(t, "session override content", readResult1.Contents[0].(mcp.TextResourceContents).Text)
301+
302+
// Test reading global resource that wasn't overridden
303+
readResult2, rerr := server.handleReadResource(sessionCtx, "test-id", mcp.ReadResourceRequest{
304+
Params: mcp.ReadResourceParams{URI: "test://global2"},
305+
})
306+
require.Nil(t, rerr)
307+
require.NotNil(t, readResult2)
308+
assert.Len(t, readResult2.Contents, 1)
309+
assert.Equal(t, "global content 2", readResult2.Contents[0].(mcp.TextResourceContents).Text)
310+
311+
// Test reading session-only resource
312+
readResult3, rerr := server.handleReadResource(sessionCtx, "test-id", mcp.ReadResourceRequest{
313+
Params: mcp.ReadResourceParams{URI: "test://session1"},
314+
})
315+
require.Nil(t, rerr)
316+
require.NotNil(t, readResult3)
317+
assert.Len(t, readResult3.Contents, 1)
318+
assert.Equal(t, "session content 1", readResult3.Contents[0].(mcp.TextResourceContents).Text)
277319
}
278320

279321
// TestAddSessionResourcesUninitialized tests adding resources to uninitialized session

0 commit comments

Comments
 (0)