b74c109f61
The addition of tracing caused messages to escape to the heap. By avoiding interfaces the messages no longer escape.
79 lines
2.0 KiB
Go
79 lines
2.0 KiB
Go
package pgproto3_test
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"io"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/jackc/pgx/v5/pgconn"
|
|
"github.com/jackc/pgx/v5/pgproto3"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestTrace(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
|
defer cancel()
|
|
|
|
config, err := pgconn.ParseConfig(os.Getenv("PGX_TEST_CONN_STRING"))
|
|
require.NoError(t, err)
|
|
|
|
traceOutput := &bytes.Buffer{}
|
|
|
|
config.BuildFrontend = func(r io.Reader, w io.Writer) *pgproto3.Frontend {
|
|
f := pgproto3.NewFrontend(r, w)
|
|
f.Trace(traceOutput, pgproto3.TracerOptions{
|
|
SuppressTimestamps: true,
|
|
RegressMode: true,
|
|
})
|
|
return f
|
|
}
|
|
|
|
conn, err := pgconn.ConnectConfig(ctx, config)
|
|
require.NoError(t, err)
|
|
defer conn.Close(ctx)
|
|
|
|
result := conn.ExecParams(ctx, "select n from generate_series(1,5) n", nil, nil, nil, nil).Read()
|
|
require.NoError(t, result.Err)
|
|
|
|
expected := `F StartupMessage
|
|
B AuthenticationOk
|
|
B ParameterStatus "application_name" ""
|
|
B ParameterStatus "client_encoding" "UTF8"
|
|
B ParameterStatus "DateStyle" "ISO, MDY"
|
|
B ParameterStatus "default_transaction_read_only" "off"
|
|
B ParameterStatus "in_hot_standby" "off"
|
|
B ParameterStatus "integer_datetimes" "on"
|
|
B ParameterStatus "IntervalStyle" "postgres"
|
|
B ParameterStatus "is_superuser" "on"
|
|
B ParameterStatus "server_encoding" "UTF8"
|
|
B ParameterStatus "server_version" "14.3"
|
|
B ParameterStatus "session_authorization" "jack"
|
|
B ParameterStatus "standard_conforming_strings" "on"
|
|
B ParameterStatus "TimeZone" "America/Chicago"
|
|
B BackendKeyData NNNN NNNN
|
|
B ReadyForQuery I
|
|
F Parse "" "select n from generate_series(1,5) n" 0
|
|
F Bind "" "" 0 0 0
|
|
F Describe P ""
|
|
F Execute "" 0
|
|
F Sync
|
|
B ParseComplete
|
|
B BindComplete
|
|
B RowDescription 1 "n" 0 0 23 4 -1 0
|
|
B DataRow 1 1 '1'
|
|
B DataRow 1 1 '2'
|
|
B DataRow 1 1 '3'
|
|
B DataRow 1 1 '4'
|
|
B DataRow 1 1 '5'
|
|
B CommandComplete "SELECT 5"
|
|
B ReadyForQuery I
|
|
`
|
|
|
|
require.Equal(t, expected, traceOutput.String())
|
|
}
|