(t *testing.T)
| 4343 | } |
| 4344 | |
| 4345 | func TestConnectWithDirectSSLNegotiation(t *testing.T) { |
| 4346 | t.Parallel() |
| 4347 | |
| 4348 | tests := []struct { |
| 4349 | name string |
| 4350 | connString string |
| 4351 | expectDirectNego bool |
| 4352 | }{ |
| 4353 | { |
| 4354 | name: "Default negotiation (postgres)", |
| 4355 | connString: "sslmode=require", |
| 4356 | expectDirectNego: false, |
| 4357 | }, |
| 4358 | { |
| 4359 | name: "Direct negotiation", |
| 4360 | connString: "sslmode=require sslnegotiation=direct", |
| 4361 | expectDirectNego: true, |
| 4362 | }, |
| 4363 | { |
| 4364 | name: "Explicit postgres negotiation", |
| 4365 | connString: "sslmode=require sslnegotiation=postgres", |
| 4366 | expectDirectNego: false, |
| 4367 | }, |
| 4368 | } |
| 4369 | |
| 4370 | for _, tt := range tests { |
| 4371 | t.Run(tt.name, func(t *testing.T) { |
| 4372 | t.Parallel() |
| 4373 | |
| 4374 | script := &pgmock.Script{ |
| 4375 | Steps: pgmock.AcceptUnauthenticatedConnRequestSteps(), |
| 4376 | } |
| 4377 | |
| 4378 | ln, err := net.Listen("tcp", "127.0.0.1:") |
| 4379 | require.NoError(t, err) |
| 4380 | defer ln.Close() |
| 4381 | |
| 4382 | _, port, err := net.SplitHostPort(ln.Addr().String()) |
| 4383 | require.NoError(t, err) |
| 4384 | |
| 4385 | var directNegoObserved atomic.Bool |
| 4386 | |
| 4387 | serverErrCh := make(chan error, 1) |
| 4388 | go func() { |
| 4389 | defer close(serverErrCh) |
| 4390 | |
| 4391 | conn, err := ln.Accept() |
| 4392 | if err != nil { |
| 4393 | serverErrCh <- fmt.Errorf("accept error: %w", err) |
| 4394 | return |
| 4395 | } |
| 4396 | defer conn.Close() |
| 4397 | |
| 4398 | conn.SetDeadline(time.Now().Add(5 * time.Second)) |
| 4399 | |
| 4400 | firstByte := make([]byte, 1) |
| 4401 | _, err = conn.Read(firstByte) |
| 4402 | if err != nil { |
nothing calls this directly
no test coverage detected