https://github.com/jackc/pgx/issues/800
(t *testing.T)
| 3023 | |
| 3024 | // https://github.com/jackc/pgx/issues/800 |
| 3025 | func 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 |
nothing calls this directly
no test coverage detected