(t *testing.T)
| 146 | } |
| 147 | |
| 148 | func TestPsyNetRPC_SendRequestAsync(t *testing.T) { |
| 149 | // Setup mock server |
| 150 | mockServer := NewMockWSServer() |
| 151 | defer mockServer.Close() |
| 152 | |
| 153 | // Create PsyNet instance and establish connection |
| 154 | psyNet := NewPsyNet() |
| 155 | rpc, err := psyNet.establishSocket(mockServer.URL(), "test-token", "test-session", "test-player") |
| 156 | if err != nil { |
| 157 | t.Fatalf("Failed to establish socket: %v", err) |
| 158 | } |
| 159 | |
| 160 | go rpc.readMessages() |
| 161 | rpc.schedulePing() |
| 162 | defer rpc.Close() |
| 163 | |
| 164 | // Setup expected response |
| 165 | expectedResponse := &PsyResponse{ |
| 166 | Result: json.RawMessage(`{"Result":{"async": "test"}}`), |
| 167 | } |
| 168 | mockServer.SetResponse("PsyNetMessage_X_0", expectedResponse) |
| 169 | |
| 170 | // Test async request |
| 171 | ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) |
| 172 | defer cancel() |
| 173 | |
| 174 | respCh, err := rpc.sendRequestAsync(ctx, "Test/AsyncService", map[string]interface{}{}) |
| 175 | if err != nil { |
| 176 | t.Fatalf("sendRequestAsync failed: %v", err) |
| 177 | } |
| 178 | |
| 179 | // Wait for response |
| 180 | var result map[string]interface{} |
| 181 | err = rpc.awaitResponse(ctx, respCh, &result) |
| 182 | if err != nil { |
| 183 | t.Fatalf("awaitResponse failed: %v", err) |
| 184 | } |
| 185 | |
| 186 | // Verify result |
| 187 | if async, ok := result["async"]; !ok || async != "test" { |
| 188 | t.Error("Expected 'async': 'test' in response") |
| 189 | } |
| 190 | } |
| 191 | |
| 192 | func TestPsyNetRPC_ConcurrentRequests(t *testing.T) { |
| 193 | // Setup mock server |
nothing calls this directly
no test coverage detected