(t *testing.T)
| 451 | } |
| 452 | |
| 453 | func (s) TestClientCredsHandshakeTimeout(t *testing.T) { |
| 454 | clientDone := make(chan struct{}) |
| 455 | ctx, sCancel := context.WithTimeout(context.Background(), defaultTestTimeout) |
| 456 | defer sCancel() |
| 457 | // A handshake function which simulates a handshake timeout from the |
| 458 | // server-side by simply blocking on the client-side handshake to timeout |
| 459 | // and not writing any handshake data. |
| 460 | hErr := errors.New("server handshake error") |
| 461 | ts := newTestServerWithHandshakeFunc(ctx, func(net.Conn) handshakeResult { |
| 462 | <-clientDone |
| 463 | return handshakeResult{err: hErr} |
| 464 | }) |
| 465 | defer ts.stop() |
| 466 | |
| 467 | opts := ClientOptions{FallbackCreds: makeFallbackClientCreds(t)} |
| 468 | creds, err := NewClientCredentials(opts) |
| 469 | if err != nil { |
| 470 | t.Fatalf("NewClientCredentials(%v) failed: %v", opts, err) |
| 471 | } |
| 472 | |
| 473 | conn, err := net.Dial("tcp", ts.address) |
| 474 | if err != nil { |
| 475 | t.Fatalf("net.Dial(%s) failed: %v", ts.address, err) |
| 476 | } |
| 477 | defer conn.Close() |
| 478 | |
| 479 | sCtx, sCancel := context.WithTimeout(context.Background(), defaultTestShortTimeout) |
| 480 | defer sCancel() |
| 481 | ctx = newTestContextWithHandshakeInfo(sCtx, makeRootProvider(t, "x509/server_ca_cert.pem"), nil, defaultTestCertSAN, "", false) |
| 482 | if _, _, err := creds.ClientHandshake(ctx, authority, conn); err == nil { |
| 483 | t.Fatal("ClientHandshake() succeeded when expected to timeout") |
| 484 | } |
| 485 | close(clientDone) |
| 486 | |
| 487 | // Read the handshake result from the testServer and make sure the expected |
| 488 | // error is returned. |
| 489 | ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout) |
| 490 | defer cancel() |
| 491 | val, err := ts.hsResult.Receive(ctx) |
| 492 | if err != nil { |
| 493 | t.Fatalf("testServer failed to return handshake result: %v", err) |
| 494 | } |
| 495 | hsr := val.(handshakeResult) |
| 496 | if hsr.err != hErr { |
| 497 | t.Fatalf("testServer handshake returned error: %v, want: %v", hsr.err, hErr) |
| 498 | } |
| 499 | } |
| 500 | |
| 501 | // TestClientCredsHandshakeFailure verifies different handshake failure cases. |
| 502 | func (s) TestClientCredsHandshakeFailure(t *testing.T) { |
nothing calls this directly
no test coverage detected