(t *testing.T)
| 2434 | } |
| 2435 | |
| 2436 | func (s) TestWriteHeaderConnectionError(t *testing.T) { |
| 2437 | server, client, cancel := setUp(t, 0, notifyCall) |
| 2438 | defer cancel() |
| 2439 | defer server.stop() |
| 2440 | |
| 2441 | waitWhileTrue(t, func() (bool, error) { |
| 2442 | server.mu.Lock() |
| 2443 | defer server.mu.Unlock() |
| 2444 | |
| 2445 | if len(server.conns) == 0 { |
| 2446 | return true, fmt.Errorf("timed-out while waiting for connection to be created on the server") |
| 2447 | } |
| 2448 | return false, nil |
| 2449 | }) |
| 2450 | |
| 2451 | server.mu.Lock() |
| 2452 | |
| 2453 | if len(server.conns) != 1 { |
| 2454 | t.Fatalf("Server has %d connections from the client, want 1", len(server.conns)) |
| 2455 | } |
| 2456 | |
| 2457 | // Get the server transport for the connection to the client. |
| 2458 | var serverTransport *http2Server |
| 2459 | for k := range server.conns { |
| 2460 | serverTransport = k.(*http2Server) |
| 2461 | } |
| 2462 | notifyChan := make(chan struct{}) |
| 2463 | server.h.notify = notifyChan |
| 2464 | server.mu.Unlock() |
| 2465 | |
| 2466 | ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout) |
| 2467 | defer cancel() |
| 2468 | cstream, err := client.NewStream(ctx, &CallHdr{}, nil) |
| 2469 | if err != nil { |
| 2470 | t.Fatalf("Client failed to create first stream. Err: %v", err) |
| 2471 | } |
| 2472 | |
| 2473 | <-notifyChan // Wait for server stream to be established. |
| 2474 | var sstream *ServerStream |
| 2475 | // Access stream on the server. |
| 2476 | serverTransport.mu.Lock() |
| 2477 | for _, v := range serverTransport.activeStreams { |
| 2478 | if v.id == cstream.id { |
| 2479 | sstream = v |
| 2480 | } |
| 2481 | } |
| 2482 | serverTransport.mu.Unlock() |
| 2483 | if sstream == nil { |
| 2484 | t.Fatalf("Didn't find stream corresponding to client cstream.id: %v on the server", cstream.id) |
| 2485 | } |
| 2486 | |
| 2487 | client.Close(fmt.Errorf("closed manually by test")) |
| 2488 | |
| 2489 | // Wait for server transport to be closed. |
| 2490 | <-serverTransport.done |
| 2491 | |
| 2492 | // Write header on a closed server transport. |
| 2493 | err = sstream.SendHeader(metadata.MD{}) |
nothing calls this directly
no test coverage detected