1
1
import { beforeEach , describe , expect , it , vi } from 'vitest' ;
2
2
import { getCurrentScope } from '../../../../src/currentScopes' ;
3
- import {
4
- completeSpanFromToolResult ,
5
- storeSpanForRequest ,
6
- } from '../../../../src/integrations/mcp-server/correlation' ;
3
+ import { completeSpanFromToolResult , storeSpanForRequest } from '../../../../src/integrations/mcp-server/correlation' ;
7
4
import type { MCPTransport } from '../../../../src/integrations/mcp-server/types' ;
8
5
import { createMockTransport } from './testUtils' ;
9
6
@@ -22,7 +19,7 @@ describe('correlation edge cases', () => {
22
19
end : vi . fn ( ) ,
23
20
isRecording : vi . fn ( ) . mockReturnValue ( true ) ,
24
21
} ;
25
-
22
+
26
23
( getCurrentScope as any ) . mockReturnValue ( {
27
24
getSpan : vi . fn ( ) . mockReturnValue ( mockSpan ) ,
28
25
} ) ;
@@ -32,7 +29,7 @@ describe('correlation edge cases', () => {
32
29
it ( 'handles null transport gracefully' , ( ) => {
33
30
const transport = null as any ;
34
31
const requestId = 'test-request-1' ;
35
-
32
+
36
33
// Should not throw when storing span for null transport
37
34
expect ( ( ) => {
38
35
storeSpanForRequest ( transport , requestId , mockSpan , 'tools/call' ) ;
@@ -42,7 +39,7 @@ describe('correlation edge cases', () => {
42
39
it ( 'handles undefined transport gracefully' , ( ) => {
43
40
const transport = undefined as any ;
44
41
const requestId = 'test-request-2' ;
45
-
42
+
46
43
// Should not throw when storing span for undefined transport
47
44
expect ( ( ) => {
48
45
storeSpanForRequest ( transport , requestId , mockSpan , 'tools/call' ) ;
@@ -52,7 +49,7 @@ describe('correlation edge cases', () => {
52
49
it ( 'handles non-object transport gracefully' , ( ) => {
53
50
const transport = 'not-an-object' as any ;
54
51
const requestId = 'test-request-3' ;
55
-
52
+
56
53
// Should not throw when storing span for string transport
57
54
expect ( ( ) => {
58
55
storeSpanForRequest ( transport , requestId , mockSpan , 'tools/call' ) ;
@@ -62,7 +59,7 @@ describe('correlation edge cases', () => {
62
59
it ( 'handles number transport gracefully' , ( ) => {
63
60
const transport = 123 as any ;
64
61
const requestId = 'test-request-4' ;
65
-
62
+
66
63
// Should not throw when storing span for number transport
67
64
expect ( ( ) => {
68
65
storeSpanForRequest ( transport , requestId , mockSpan , 'tools/call' ) ;
@@ -72,7 +69,7 @@ describe('correlation edge cases', () => {
72
69
it ( 'handles boolean transport gracefully' , ( ) => {
73
70
const transport = true as any ;
74
71
const requestId = 'test-request-5' ;
75
-
72
+
76
73
// Should not throw when storing span for boolean transport
77
74
expect ( ( ) => {
78
75
storeSpanForRequest ( transport , requestId , mockSpan , 'tools/call' ) ;
@@ -83,10 +80,10 @@ describe('correlation edge cases', () => {
83
80
const invalidTransport1 = null as any ;
84
81
const invalidTransport2 = 'string-transport' as any ;
85
82
const requestId = 'test-request-6' ;
86
-
83
+
87
84
// Store span for first invalid transport
88
85
storeSpanForRequest ( invalidTransport1 , requestId , mockSpan , 'tools/call' ) ;
89
-
86
+
90
87
// Complete span from different invalid transport with same request ID
91
88
// This should work because they both use the fallback map
92
89
expect ( ( ) => {
@@ -99,35 +96,35 @@ describe('correlation edge cases', () => {
99
96
it ( 'works normally with valid transport objects' , ( ) => {
100
97
const transport = createMockTransport ( ) ;
101
98
const requestId = 'test-request-7' ;
102
-
99
+
103
100
// Should work normally with valid transport
104
101
expect ( ( ) => {
105
102
storeSpanForRequest ( transport , requestId , mockSpan , 'tools/call' ) ;
106
103
completeSpanFromToolResult ( transport , requestId , {
107
104
content : [ { type : 'text' , text : 'result' } ] ,
108
105
} ) ;
109
106
} ) . not . toThrow ( ) ;
110
-
107
+
111
108
expect ( mockSpan . end ) . toHaveBeenCalled ( ) ;
112
109
} ) ;
113
110
114
111
it ( 'maintains separate correlation for valid transports' , ( ) => {
115
112
const transport1 = createMockTransport ( ) ;
116
113
const transport2 = createMockTransport ( ) ;
117
114
const requestId = 'test-request-8' ;
118
-
115
+
119
116
const mockSpan1 = { ...mockSpan , id : 'span1' , end : vi . fn ( ) } ;
120
117
const mockSpan2 = { ...mockSpan , id : 'span2' , end : vi . fn ( ) } ;
121
-
118
+
122
119
// Store spans for different transports with same request ID
123
120
storeSpanForRequest ( transport1 , requestId , mockSpan1 , 'tools/call' ) ;
124
121
storeSpanForRequest ( transport2 , requestId , mockSpan2 , 'tools/call' ) ;
125
-
122
+
126
123
// Complete span for transport1 should only affect span1
127
124
completeSpanFromToolResult ( transport1 , requestId , {
128
125
content : [ { type : 'text' , text : 'result1' } ] ,
129
126
} ) ;
130
-
127
+
131
128
expect ( mockSpan1 . end ) . toHaveBeenCalled ( ) ;
132
129
expect ( mockSpan2 . end ) . not . toHaveBeenCalled ( ) ;
133
130
} ) ;
@@ -136,27 +133,27 @@ describe('correlation edge cases', () => {
136
133
const validTransport = createMockTransport ( ) ;
137
134
const invalidTransport = null as any ;
138
135
const requestId = 'test-request-9' ;
139
-
136
+
140
137
const mockSpan1 = { ...mockSpan , id : 'valid-span' , end : vi . fn ( ) } ;
141
138
const mockSpan2 = { ...mockSpan , id : 'fallback-span' , end : vi . fn ( ) } ;
142
-
139
+
143
140
// Store spans for both valid and invalid transports
144
141
storeSpanForRequest ( validTransport , requestId , mockSpan1 , 'tools/call' ) ;
145
142
storeSpanForRequest ( invalidTransport , requestId , mockSpan2 , 'tools/call' ) ;
146
-
143
+
147
144
// Complete span for valid transport should only affect valid span
148
145
completeSpanFromToolResult ( validTransport , requestId , {
149
146
content : [ { type : 'text' , text : 'valid-result' } ] ,
150
147
} ) ;
151
-
148
+
152
149
expect ( mockSpan1 . end ) . toHaveBeenCalled ( ) ;
153
150
expect ( mockSpan2 . end ) . not . toHaveBeenCalled ( ) ;
154
-
151
+
155
152
// Complete span for invalid transport should only affect fallback span
156
153
completeSpanFromToolResult ( invalidTransport , requestId , {
157
154
content : [ { type : 'text' , text : 'fallback-result' } ] ,
158
155
} ) ;
159
-
156
+
160
157
expect ( mockSpan2 . end ) . toHaveBeenCalled ( ) ;
161
158
} ) ;
162
159
} ) ;
@@ -165,7 +162,7 @@ describe('correlation edge cases', () => {
165
162
it ( 'handles transport with null prototype' , ( ) => {
166
163
const transport = Object . create ( null ) as MCPTransport ;
167
164
const requestId = 'test-request-10' ;
168
-
165
+
169
166
// Should not throw with null prototype object
170
167
expect ( ( ) => {
171
168
storeSpanForRequest ( transport , requestId , mockSpan , 'tools/call' ) ;
@@ -175,32 +172,32 @@ describe('correlation edge cases', () => {
175
172
it ( 'handles frozen transport object' , ( ) => {
176
173
const transport = Object . freeze ( createMockTransport ( ) ) ;
177
174
const requestId = 'test-request-11' ;
178
-
175
+
179
176
// Should work with frozen object
180
177
expect ( ( ) => {
181
178
storeSpanForRequest ( transport , requestId , mockSpan , 'tools/call' ) ;
182
179
completeSpanFromToolResult ( transport , requestId , {
183
180
content : [ { type : 'text' , text : 'result' } ] ,
184
181
} ) ;
185
182
} ) . not . toThrow ( ) ;
186
-
183
+
187
184
expect ( mockSpan . end ) . toHaveBeenCalled ( ) ;
188
185
} ) ;
189
186
190
187
it ( 'handles transport with circular references' , ( ) => {
191
188
const transport = createMockTransport ( ) as any ;
192
189
transport . self = transport ; // Create circular reference
193
190
const requestId = 'test-request-12' ;
194
-
191
+
195
192
// Should work with circular references
196
193
expect ( ( ) => {
197
194
storeSpanForRequest ( transport , requestId , mockSpan , 'tools/call' ) ;
198
195
completeSpanFromToolResult ( transport , requestId , {
199
196
content : [ { type : 'text' , text : 'result' } ] ,
200
197
} ) ;
201
198
} ) . not . toThrow ( ) ;
202
-
199
+
203
200
expect ( mockSpan . end ) . toHaveBeenCalled ( ) ;
204
201
} ) ;
205
202
} ) ;
206
- } ) ;
203
+ } ) ;
0 commit comments