MCPcopy Create free account
hub / github.com/PostHog/duckgres / TestReadStartupWithGSSFallback

Function TestReadStartupWithGSSFallback

controlplane/control_startup_test.go:18–64  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

16}
17
18func TestReadStartupWithGSSFallback(t *testing.T) {
19 serverConn, clientConn := net.Pipe()
20 defer func() { _ = serverConn.Close() }()
21 defer func() { _ = clientConn.Close() }()
22
23 errCh := make(chan error, 1)
24 go func() {
25 // Send GSSENCRequest first.
26 if _, err := clientConn.Write(startupPacket(80877104)); err != nil {
27 errCh <- err
28 return
29 }
30
31 // Server should reject GSS with a single 'N' byte.
32 resp := make([]byte, 1)
33 if _, err := clientConn.Read(resp); err != nil {
34 errCh <- err
35 return
36 }
37 if resp[0] != 'N' {
38 errCh <- net.InvalidAddrError("expected GSS rejection byte 'N'")
39 return
40 }
41
42 // Continue negotiation on the same connection with SSLRequest.
43 if _, err := clientConn.Write(startupPacket(80877103)); err != nil {
44 errCh <- err
45 return
46 }
47 errCh <- nil
48 }()
49
50 params, err := readStartupWithGSSFallback(serverConn)
51 if err != nil {
52 t.Fatalf("readStartupWithGSSFallback returned error: %v", err)
53 }
54 if !params.sslRequest {
55 t.Fatalf("expected sslRequest=true after GSS fallback, got %+v", params)
56 }
57 if params.gssRequest {
58 t.Fatalf("expected gssRequest=false final result, got %+v", params)
59 }
60
61 if err := <-errCh; err != nil {
62 t.Fatalf("client side negotiation failed: %v", err)
63 }
64}

Callers

nothing calls this directly

Calls 5

startupPacketFunction · 0.85
CloseMethod · 0.65
WriteMethod · 0.45
ReadMethod · 0.45

Tested by

no test coverage detected