Skip to content

Commit b6f19ca

Browse files
committed
Session data tests
1 parent 01e1149 commit b6f19ca

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed

packages/core/test/lib/integrations/mcp-server/transportInstrumentation.test.ts

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
11
import { beforeEach, describe, expect, it, vi } from 'vitest';
22
import * as currentScopes from '../../../../src/currentScopes';
33
import { wrapMcpServerWithSentry } from '../../../../src/integrations/mcp-server';
4+
import {
5+
extractSessionDataFromInitializeRequest,
6+
extractSessionDataFromInitializeResponse,
7+
} from '../../../../src/integrations/mcp-server/attributeExtraction';
8+
import {
9+
cleanupSessionDataForTransport,
10+
getClientInfoForTransport,
11+
getProtocolVersionForTransport,
12+
getSessionDataForTransport,
13+
storeSessionDataForTransport,
14+
updateSessionDataForTransport,
15+
} from '../../../../src/integrations/mcp-server/sessionManagement';
416
import { buildMcpServerSpanConfig } from '../../../../src/integrations/mcp-server/spans';
517
import {
618
wrapTransportError,
@@ -360,4 +372,132 @@ describe('MCP Server Transport Instrumentation', () => {
360372
});
361373
});
362374
});
375+
376+
describe('Session Management', () => {
377+
let mockTransport: ReturnType<typeof createMockTransport>;
378+
379+
beforeEach(() => {
380+
mockTransport = createMockTransport();
381+
mockTransport.sessionId = 'test-session-123';
382+
});
383+
384+
it('should extract session data from initialize request', () => {
385+
const initializeRequest = {
386+
jsonrpc: '2.0' as const,
387+
method: 'initialize',
388+
id: 'init-1',
389+
params: {
390+
protocolVersion: '2025-06-18',
391+
clientInfo: {
392+
name: 'test-client',
393+
title: 'Test Client',
394+
version: '1.0.0',
395+
},
396+
},
397+
};
398+
399+
const sessionData = extractSessionDataFromInitializeRequest(initializeRequest);
400+
401+
expect(sessionData).toEqual({
402+
protocolVersion: '2025-06-18',
403+
clientInfo: {
404+
name: 'test-client',
405+
title: 'Test Client',
406+
version: '1.0.0',
407+
},
408+
});
409+
});
410+
411+
it('should extract session data from initialize response', () => {
412+
const initializeResponse = {
413+
protocolVersion: '2025-06-18',
414+
serverInfo: {
415+
name: 'test-server',
416+
title: 'Test Server',
417+
version: '2.0.0',
418+
},
419+
capabilities: {},
420+
};
421+
422+
const sessionData = extractSessionDataFromInitializeResponse(initializeResponse);
423+
424+
expect(sessionData).toEqual({
425+
protocolVersion: '2025-06-18',
426+
serverInfo: {
427+
name: 'test-server',
428+
title: 'Test Server',
429+
version: '2.0.0',
430+
},
431+
});
432+
});
433+
434+
it('should store and retrieve session data', () => {
435+
const sessionData = {
436+
protocolVersion: '2025-06-18',
437+
clientInfo: {
438+
name: 'test-client',
439+
version: '1.0.0',
440+
},
441+
};
442+
443+
storeSessionDataForTransport(mockTransport, sessionData);
444+
445+
expect(getSessionDataForTransport(mockTransport)).toEqual(sessionData);
446+
expect(getProtocolVersionForTransport(mockTransport)).toBe('2025-06-18');
447+
expect(getClientInfoForTransport(mockTransport)).toEqual({
448+
name: 'test-client',
449+
version: '1.0.0',
450+
});
451+
});
452+
453+
it('should update existing session data', () => {
454+
const initialData = {
455+
protocolVersion: '2025-06-18',
456+
clientInfo: { name: 'test-client' },
457+
};
458+
459+
storeSessionDataForTransport(mockTransport, initialData);
460+
461+
const serverData = {
462+
serverInfo: { name: 'test-server', version: '2.0.0' },
463+
};
464+
465+
updateSessionDataForTransport(mockTransport, serverData);
466+
467+
const updatedData = getSessionDataForTransport(mockTransport);
468+
expect(updatedData).toEqual({
469+
protocolVersion: '2025-06-18',
470+
clientInfo: { name: 'test-client' },
471+
serverInfo: { name: 'test-server', version: '2.0.0' },
472+
});
473+
});
474+
475+
it('should clean up session data', () => {
476+
const sessionData = {
477+
protocolVersion: '2025-06-18',
478+
clientInfo: { name: 'test-client' },
479+
};
480+
481+
storeSessionDataForTransport(mockTransport, sessionData);
482+
expect(getSessionDataForTransport(mockTransport)).toEqual(sessionData);
483+
484+
cleanupSessionDataForTransport(mockTransport);
485+
expect(getSessionDataForTransport(mockTransport)).toBeUndefined();
486+
});
487+
488+
it('should only store data for transports with sessionId', () => {
489+
const transportWithoutSession = {
490+
onmessage: vi.fn(),
491+
onclose: vi.fn(),
492+
onerror: vi.fn(),
493+
send: vi.fn().mockResolvedValue(undefined),
494+
protocolVersion: '2025-06-18',
495+
};
496+
497+
const sessionData = { protocolVersion: '2025-06-18' };
498+
499+
storeSessionDataForTransport(transportWithoutSession, sessionData);
500+
expect(getSessionDataForTransport(transportWithoutSession)).toBeUndefined();
501+
});
502+
});
363503
});

0 commit comments

Comments
 (0)