MCPcopy Create free account
hub / github.com/dank/rlapi / TestPsyNetRPC_ConcurrentRequests

Function TestPsyNetRPC_ConcurrentRequests

psynetrpc_test.go:192–258  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

190}
191
192func TestPsyNetRPC_ConcurrentRequests(t *testing.T) {
193 // Setup mock server
194 mockServer := NewMockWSServer()
195 defer mockServer.Close()
196
197 // Create PsyNet instance and establish connection
198 psyNet := NewPsyNet()
199 rpc, err := psyNet.establishSocket(mockServer.URL(), "test-token", "test-session", "test-player")
200 if err != nil {
201 t.Fatalf("Failed to establish socket: %v", err)
202 }
203
204 go rpc.readMessages()
205 rpc.schedulePing()
206 defer rpc.Close()
207
208 // Setup responses for multiple requests
209 for i := 1; i <= 3; i++ {
210 response := &PsyResponse{
211 Result: json.RawMessage(fmt.Sprintf(`{"Result":{"request": %d}}`, i)),
212 }
213 mockServer.SetResponse(fmt.Sprintf("PsyNetMessage_X_%d", i-1), response)
214 }
215
216 // Send multiple concurrent requests
217 ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
218 defer cancel()
219
220 respCh1, err := rpc.sendRequestAsync(ctx, "Test/Service1", map[string]interface{}{})
221 if err != nil {
222 t.Fatalf("sendRequestAsync 1 failed: %v", err)
223 }
224
225 respCh2, err := rpc.sendRequestAsync(ctx, "Test/Service2", map[string]interface{}{})
226 if err != nil {
227 t.Fatalf("sendRequestAsync 2 failed: %v", err)
228 }
229
230 respCh3, err := rpc.sendRequestAsync(ctx, "Test/Service3", map[string]interface{}{})
231 if err != nil {
232 t.Fatalf("sendRequestAsync 3 failed: %v", err)
233 }
234
235 // Await all responses
236 var result1, result2, result3 map[string]interface{}
237
238 if err := rpc.awaitResponse(ctx, respCh1, &result1); err != nil {
239 t.Fatalf("awaitResponse 1 failed: %v", err)
240 }
241 if err := rpc.awaitResponse(ctx, respCh2, &result2); err != nil {
242 t.Fatalf("awaitResponse 2 failed: %v", err)
243 }
244 if err := rpc.awaitResponse(ctx, respCh3, &result3); err != nil {
245 t.Fatalf("awaitResponse 3 failed: %v", err)
246 }
247
248 // Verify responses match expected values
249 if result1["request"] != float64(1) {

Callers

nothing calls this directly

Calls 10

CloseMethod · 0.95
establishSocketMethod · 0.95
URLMethod · 0.95
SetResponseMethod · 0.95
NewMockWSServerFunction · 0.85
NewPsyNetFunction · 0.85
readMessagesMethod · 0.80
schedulePingMethod · 0.80
sendRequestAsyncMethod · 0.80
awaitResponseMethod · 0.80

Tested by

no test coverage detected