(t *testing.T)
| 190 | } |
| 191 | |
| 192 | func 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) { |
nothing calls this directly
no test coverage detected