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

Function TestTraceAcquire

pgxpool/tracer_test.go:48–101  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

46}
47
48func TestTraceAcquire(t *testing.T) {
49 t.Parallel()
50
51 tracer := &testTracer{}
52
53 ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second)
54 defer cancel()
55
56 config, err := pgxpool.ParseConfig(os.Getenv("PGX_TEST_DATABASE"))
57 require.NoError(t, err)
58 config.ConnConfig.Tracer = tracer
59
60 pool, err := pgxpool.NewWithConfig(ctx, config)
61 require.NoError(t, err)
62 defer pool.Close()
63
64 traceAcquireStartCalled := false
65 tracer.traceAcquireStart = func(ctx context.Context, pool *pgxpool.Pool, data pgxpool.TraceAcquireStartData) context.Context {
66 traceAcquireStartCalled = true
67 require.NotNil(t, pool)
68 return context.WithValue(ctx, ctxKey("fromTraceAcquireStart"), "foo")
69 }
70
71 traceAcquireEndCalled := false
72 tracer.traceAcquireEnd = func(ctx context.Context, pool *pgxpool.Pool, data pgxpool.TraceAcquireEndData) {
73 traceAcquireEndCalled = true
74 require.Equal(t, "foo", ctx.Value(ctxKey("fromTraceAcquireStart")))
75 require.NotNil(t, pool)
76 require.NotNil(t, data.Conn)
77 require.NoError(t, data.Err)
78 }
79
80 c, err := pool.Acquire(ctx)
81 require.NoError(t, err)
82 defer c.Release()
83 require.True(t, traceAcquireStartCalled)
84 require.True(t, traceAcquireEndCalled)
85
86 traceAcquireStartCalled = false
87 traceAcquireEndCalled = false
88 tracer.traceAcquireEnd = func(ctx context.Context, pool *pgxpool.Pool, data pgxpool.TraceAcquireEndData) {
89 traceAcquireEndCalled = true
90 require.NotNil(t, pool)
91 require.Nil(t, data.Conn)
92 require.Error(t, data.Err)
93 }
94
95 ctx, cancel = context.WithCancel(ctx)
96 cancel()
97 _, err = pool.Acquire(ctx)
98 require.ErrorIs(t, err, context.Canceled)
99 require.True(t, traceAcquireStartCalled)
100 require.True(t, traceAcquireEndCalled)
101}
102
103func TestTraceRelease(t *testing.T) {
104 t.Parallel()

Callers

nothing calls this directly

Calls 8

ParseConfigFunction · 0.92
NewWithConfigFunction · 0.92
AcquireMethod · 0.80
ReleaseMethod · 0.80
ctxKeyTypeAlias · 0.70
CloseMethod · 0.65
ValueMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected