Ensure tracer runs within a transaction. https://github.com/jackc/pgx/issues/2304
(t *testing.T)
| 571 | // |
| 572 | // https://github.com/jackc/pgx/issues/2304 |
| 573 | func TestTraceWithinTx(t *testing.T) { |
| 574 | t.Parallel() |
| 575 | |
| 576 | tracer := &testTracer{} |
| 577 | |
| 578 | ctr := defaultConnTestRunner |
| 579 | ctr.CreateConfig = func(ctx context.Context, t testing.TB) *pgx.ConnConfig { |
| 580 | config := defaultConnTestRunner.CreateConfig(ctx, t) |
| 581 | config.Tracer = tracer |
| 582 | return config |
| 583 | } |
| 584 | |
| 585 | ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second) |
| 586 | defer cancel() |
| 587 | |
| 588 | pgxtest.RunWithQueryExecModes(ctx, t, ctr, nil, func(ctx context.Context, t testing.TB, conn *pgx.Conn) { |
| 589 | var queries []string |
| 590 | tracer.traceQueryStart = func(ctx context.Context, conn *pgx.Conn, data pgx.TraceQueryStartData) context.Context { |
| 591 | queries = append(queries, data.SQL) |
| 592 | return ctx |
| 593 | } |
| 594 | |
| 595 | tx, err := conn.Begin(ctx) |
| 596 | require.NoError(t, err) |
| 597 | defer tx.Rollback(ctx) |
| 598 | _, err = tx.Exec(ctx, `select $1::text`, "testing") |
| 599 | require.NoError(t, err) |
| 600 | err = tx.Commit(ctx) |
| 601 | require.NoError(t, err) |
| 602 | |
| 603 | require.Len(t, queries, 3) |
| 604 | require.Equal(t, `begin`, queries[0]) |
| 605 | require.Equal(t, `select $1::text`, queries[1]) |
| 606 | require.Equal(t, `commit`, queries[2]) |
| 607 | }) |
| 608 | } |