pgx/pgproto3/trace_test.go

57 lines
1.3 KiB
Go

package pgproto3_test
import (
"bytes"
"context"
"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(), 120*time.Second)
defer cancel()
conn, err := pgconn.Connect(ctx, os.Getenv("PGX_TEST_DATABASE"))
require.NoError(t, err)
defer conn.Close(ctx)
if conn.ParameterStatus("crdb_version") != "" {
t.Skip("Skipping message trace on CockroachDB as it varies slightly from PostgreSQL")
}
traceOutput := &bytes.Buffer{}
conn.Frontend().Trace(traceOutput, pgproto3.TracerOptions{
SuppressTimestamps: true,
RegressMode: true,
})
result := conn.ExecParams(ctx, "select n from generate_series(1,5) n", nil, nil, nil, nil).Read()
require.NoError(t, result.Err)
expected := `F Parse 45 "" "select n from generate_series(1,5) n" 0
F Bind 13 "" "" 0 0 0
F Describe 7 P ""
F Execute 10 "" 0
F Sync 5
B ParseComplete 5
B BindComplete 5
B RowDescription 27 1 "n" 0 0 23 4 -1 0
B DataRow 12 1 1 '1'
B DataRow 12 1 1 '2'
B DataRow 12 1 1 '3'
B DataRow 12 1 1 '4'
B DataRow 12 1 1 '5'
B CommandComplete 14 "SELECT 5"
B ReadyForQuery 6 I
`
require.Equal(t, expected, traceOutput.String())
}