MCPcopy
hub / github.com/jackc/pgx / TestFatalErrorReceivedAfterCommandComplete

Function TestFatalErrorReceivedAfterCommandComplete

pgconn/pgconn_test.go:3025–3088  ·  view source on GitHub ↗

https://github.com/jackc/pgx/issues/800

(t *testing.T)

Source from the content-addressed store, hash-verified

3023
3024// https://github.com/jackc/pgx/issues/800
3025func TestFatalErrorReceivedAfterCommandComplete(t *testing.T) {
3026 t.Parallel()
3027
3028 ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second)
3029 defer cancel()
3030
3031 steps := pgmock.AcceptUnauthenticatedConnRequestSteps()
3032 steps = append(steps, pgmock.ExpectAnyMessage(&pgproto3.Parse{}))
3033 steps = append(steps, pgmock.ExpectAnyMessage(&pgproto3.Bind{}))
3034 steps = append(steps, pgmock.ExpectAnyMessage(&pgproto3.Describe{}))
3035 steps = append(steps, pgmock.ExpectAnyMessage(&pgproto3.Execute{}))
3036 steps = append(steps, pgmock.ExpectAnyMessage(&pgproto3.Sync{}))
3037 steps = append(steps, pgmock.SendMessage(&pgproto3.RowDescription{Fields: []pgproto3.FieldDescription{
3038 {Name: []byte("mock")},
3039 }}))
3040 steps = append(steps, pgmock.SendMessage(&pgproto3.CommandComplete{CommandTag: []byte("SELECT 0")}))
3041 steps = append(steps, pgmock.SendMessage(&pgproto3.ErrorResponse{Severity: "FATAL", Code: "57P01"}))
3042
3043 script := &pgmock.Script{Steps: steps}
3044
3045 ln, err := net.Listen("tcp", "127.0.0.1:")
3046 require.NoError(t, err)
3047 defer ln.Close()
3048
3049 serverErrChan := make(chan error, 1)
3050 go func() {
3051 defer close(serverErrChan)
3052
3053 conn, err := ln.Accept()
3054 if err != nil {
3055 serverErrChan <- err
3056 return
3057 }
3058 defer conn.Close()
3059
3060 err = conn.SetDeadline(time.Now().Add(5 * time.Second))
3061 if err != nil {
3062 serverErrChan <- err
3063 return
3064 }
3065
3066 err = script.Run(pgproto3.NewBackend(conn, conn))
3067 if err != nil {
3068 serverErrChan <- err
3069 return
3070 }
3071 }()
3072
3073 host, port, _ := strings.Cut(ln.Addr().String(), ":")
3074 connStr := fmt.Sprintf("sslmode=disable host=%s port=%s", host, port)
3075
3076 ctx, cancel = context.WithTimeout(ctx, 5*time.Second)
3077 defer cancel()
3078 conn, err := pgconn.Connect(ctx, connStr)
3079 require.NoError(t, err)
3080
3081 rr := conn.ExecParams(ctx, "mocked...", nil, nil, nil, nil)
3082

Callers

nothing calls this directly

Calls 12

RunMethod · 0.95
ExpectAnyMessageFunction · 0.92
SendMessageFunction · 0.92
NewBackendFunction · 0.92
ConnectFunction · 0.92
NextRowMethod · 0.80
CloseMethod · 0.65
SetDeadlineMethod · 0.45
StringMethod · 0.45
ExecParamsMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected