@@ -39,7 +39,7 @@ struct ServerTests {
3939 try await server. start ( transport: transport)
4040
4141 // Wait for message processing and response
42- try await Task . sleep ( for: . milliseconds( 100 ) )
42+ try await Task . sleep ( for: . milliseconds( 200 ) )
4343
4444 #expect( await transport. sentMessages. count == 1 )
4545
@@ -143,49 +143,66 @@ struct ServerTests {
143143
144144 @Test ( " JSON-RPC batch processing " )
145145 func testJSONRPCBatchProcessing( ) async throws {
146- let transport = MockTransport ( )
146+ let ( clientTransport , serverTransport ) = await InMemoryTransport . createConnectedPair ( )
147147 let server = Server ( name: " TestServer " , version: " 1.0 " )
148148
149+ // Connect transports
150+ try await clientTransport. connect ( )
151+ try await serverTransport. connect ( )
152+
153+ // Start receiving messages on client side
154+ let receiveTask = Task {
155+ var responses : [ String ] = [ ]
156+ for try await data in await clientTransport. receive ( ) {
157+ if let response = String ( data: data, encoding: . utf8) {
158+ responses. append ( response)
159+ }
160+ // Stop after receiving 2 responses (initialize + batch)
161+ if responses. count == 2 {
162+ break
163+ }
164+ }
165+ return responses
166+ }
167+
149168 // Start the server
150- try await server. start ( transport: transport )
169+ try await server. start ( transport: serverTransport )
151170
152171 // Initialize the server first
153- try await transport. queue (
154- request: Initialize . request (
155- . init(
156- protocolVersion: Version . latest,
157- capabilities: . init( ) ,
158- clientInfo: . init( name: " TestClient " , version: " 1.0 " )
159- )
172+ let initRequest = Initialize . request (
173+ . init(
174+ protocolVersion: Version . latest,
175+ capabilities: . init( ) ,
176+ clientInfo: . init( name: " TestClient " , version: " 1.0 " )
160177 )
161178 )
179+ let initData = try JSONEncoder ( ) . encode ( AnyRequest ( initRequest) )
180+ try await clientTransport. send ( initData)
162181
163- // Wait for server to initialize and respond
182+ // Wait for initialization
164183 try await Task . sleep ( for: . milliseconds( 100 ) )
165184
166- // Clear sent messages
167- await transport. clearMessages ( )
168-
169185 // Create a batch with multiple requests
170186 let batchJSON = """
171187 [
172188 { " jsonrpc " : " 2.0 " , " id " :1, " method " : " ping " , " params " :{}},
173189 { " jsonrpc " : " 2.0 " , " id " :2, " method " : " ping " , " params " :{}}
174190 ]
175191 """
176- let batch = try JSONDecoder ( ) . decode ( [ AnyRequest ] . self, from: batchJSON. data ( using: . utf8) !)
177-
178- // Send the batch request
179- try await transport. queue ( batch: batch)
192+ let batchData = batchJSON. data ( using: . utf8) !
193+ try await clientTransport. send ( batchData)
180194
181195 // Wait for batch processing
182- try await Task . sleep ( for: . milliseconds( 100 ) )
196+ try await Task . sleep ( for: . milliseconds( 200 ) )
183197
184- // Verify response
185- let sentMessages = await transport. sentMessages
186- #expect( sentMessages. count == 1 )
198+ // Get responses
199+ let responses = try await receiveTask. value
200+ #expect( responses. count == 2 )
201+
202+ // Verify the batch response (second response)
203+ if responses. count >= 2 {
204+ let batchResponse = responses [ 1 ]
187205
188- if let batchResponse = sentMessages. first {
189206 // Should be an array
190207 #expect( batchResponse. hasPrefix ( " [ " ) )
191208 #expect( batchResponse. hasSuffix ( " ] " ) )
@@ -196,6 +213,7 @@ struct ServerTests {
196213 }
197214
198215 await server. stop ( )
199- await transport. disconnect ( )
216+ await clientTransport. disconnect ( )
217+ await serverTransport. disconnect ( )
200218 }
201219}
0 commit comments