Skip to content

Commit 5aa6d86

Browse files
authored
[SqlClient] Refactor tests enabling trace/metric instrumentation (#2715)
1 parent 9bb037d commit 5aa6d86

File tree

2 files changed

+112
-118
lines changed

2 files changed

+112
-118
lines changed

test/OpenTelemetry.Instrumentation.SqlClient.Tests/SqlClientTests.cs

Lines changed: 112 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -74,78 +74,51 @@ public void SqlClientCallsAreCollectedSuccessfully(
7474
string commandText,
7575
bool captureTextCommandContent,
7676
bool emitOldAttributes = true,
77-
bool emitNewAttributes = false,
78-
bool tracingEnabled = true,
79-
bool metricsEnabled = true)
77+
bool emitNewAttributes = false)
8078
{
8179
var activities = new List<Activity>();
8280
var metrics = new List<Metric>();
8381

84-
var traceProviderBuilder = Sdk.CreateTracerProviderBuilder();
85-
86-
if (tracingEnabled)
87-
{
88-
traceProviderBuilder.AddSqlClientInstrumentation(
89-
(opt) =>
82+
using var traceProvider = Sdk.CreateTracerProviderBuilder()
83+
.AddSqlClientInstrumentation(options =>
9084
{
91-
opt.SetDbStatementForText = captureTextCommandContent;
92-
opt.EmitOldAttributes = emitOldAttributes;
93-
opt.EmitNewAttributes = emitNewAttributes;
94-
});
95-
traceProviderBuilder.AddInMemoryExporter(activities);
96-
}
97-
98-
var meterProviderBuilder = Sdk.CreateMeterProviderBuilder();
85+
options.SetDbStatementForText = captureTextCommandContent;
86+
options.EmitOldAttributes = emitOldAttributes;
87+
options.EmitNewAttributes = emitNewAttributes;
88+
})
89+
.AddInMemoryExporter(activities)
90+
.Build();
9991

100-
if (metricsEnabled)
101-
{
102-
meterProviderBuilder.AddSqlClientInstrumentation();
103-
meterProviderBuilder.AddInMemoryExporter(metrics);
104-
}
92+
using var meterProvider = Sdk.CreateMeterProviderBuilder()
93+
.AddSqlClientInstrumentation()
94+
.AddInMemoryExporter(metrics)
95+
.Build();
10596

106-
var traceProvider = traceProviderBuilder.Build();
107-
var meterProvider = meterProviderBuilder.Build();
97+
this.ExecuteCommand(commandType, commandText, false, beforeCommand);
10898

109-
try
110-
{
111-
this.ExecuteCommand(commandType, commandText, false, beforeCommand);
112-
}
113-
finally
114-
{
115-
traceProvider.Dispose();
116-
meterProvider.Dispose();
117-
}
99+
traceProvider.ForceFlush();
100+
meterProvider.ForceFlush();
118101

119102
Activity? activity = null;
120103

121-
if (tracingEnabled)
122-
{
123-
activity = Assert.Single(activities);
124-
VerifyActivityData(
125-
commandType,
126-
commandText,
127-
captureTextCommandContent,
128-
false,
129-
false,
130-
false,
131-
activity,
132-
emitOldAttributes,
133-
emitNewAttributes);
134-
}
104+
activity = Assert.Single(activities);
105+
VerifyActivityData(
106+
commandType,
107+
commandText,
108+
captureTextCommandContent,
109+
false,
110+
false,
111+
false,
112+
activity,
113+
emitOldAttributes,
114+
emitNewAttributes);
135115

136116
var dbClientOperationDurationMetrics = metrics
137117
.Where(metric => metric.Name == "db.client.operation.duration")
138118
.ToArray();
139119

140-
if (metricsEnabled)
141-
{
142-
var metric = Assert.Single(dbClientOperationDurationMetrics);
143-
VerifyDurationMetricData(metric, activity);
144-
}
145-
else
146-
{
147-
Assert.Empty(dbClientOperationDurationMetrics);
148-
}
120+
var metric = Assert.Single(dbClientOperationDurationMetrics);
121+
VerifyDurationMetricData(metric, activity);
149122
}
150123

151124
[Theory]
@@ -200,78 +173,47 @@ public void SqlClientAddsConnectionLevelAttributes(
200173
[MemberData(nameof(SqlTestData.SqlClientErrorsAreCollectedSuccessfullyCases), MemberType = typeof(SqlTestData))]
201174
public void SqlClientErrorsAreCollectedSuccessfully(
202175
string beforeCommand,
203-
bool recordException = false,
204-
bool tracingEnabled = true,
205-
bool metricsEnabled = true)
176+
bool recordException = false)
206177
{
207178
var activities = new List<Activity>();
208179
var metrics = new List<Metric>();
209-
var traceProviderBuilder = Sdk.CreateTracerProviderBuilder();
210180

211-
if (tracingEnabled)
212-
{
213-
traceProviderBuilder.AddSqlClientInstrumentation(options =>
181+
using var traceProvider = Sdk.CreateTracerProviderBuilder()
182+
.AddSqlClientInstrumentation(options =>
214183
{
215184
options.RecordException = recordException;
216185
})
217-
.AddInMemoryExporter(activities);
218-
}
219-
220-
var traceProvider = traceProviderBuilder.Build();
221-
222-
var meterProviderBuilder = Sdk.CreateMeterProviderBuilder();
186+
.AddInMemoryExporter(activities)
187+
.Build();
223188

224-
if (metricsEnabled)
225-
{
226-
meterProviderBuilder
227-
.AddSqlClientInstrumentation()
228-
.AddInMemoryExporter(metrics);
229-
}
189+
using var meterProvider = Sdk.CreateMeterProviderBuilder()
190+
.AddSqlClientInstrumentation()
191+
.AddInMemoryExporter(metrics)
192+
.Build();
230193

231-
var meterProvider = meterProviderBuilder.Build();
194+
this.ExecuteCommand(CommandType.StoredProcedure, "SP_GetOrders", true, beforeCommand);
232195

233-
try
234-
{
235-
this.ExecuteCommand(CommandType.StoredProcedure, "SP_GetOrders", true, beforeCommand);
236-
}
237-
finally
238-
{
239-
traceProvider.Dispose();
240-
meterProvider.Dispose();
241-
}
196+
traceProvider.ForceFlush();
197+
meterProvider.ForceFlush();
242198

243199
Activity? activity = null;
244200

245-
if (tracingEnabled)
246-
{
247-
activity = Assert.Single(activities);
248-
VerifyActivityData(
249-
CommandType.StoredProcedure,
250-
"SP_GetOrders",
251-
false,
252-
true,
253-
recordException,
254-
false,
255-
activity);
256-
}
257-
else
258-
{
259-
Assert.Empty(activities);
260-
}
201+
activity = Assert.Single(activities);
202+
VerifyActivityData(
203+
CommandType.StoredProcedure,
204+
"SP_GetOrders",
205+
false,
206+
true,
207+
recordException,
208+
false,
209+
activity);
261210

262211
var dbClientOperationDurationMetrics = metrics
263212
.Where(metric => metric.Name == "db.client.operation.duration")
264213
.ToArray();
265214

266-
if (metricsEnabled)
267-
{
268-
var metric = Assert.Single(dbClientOperationDurationMetrics);
269-
VerifyDurationMetricData(metric, activity);
270-
}
271-
else
272-
{
273-
Assert.Empty(dbClientOperationDurationMetrics);
274-
}
215+
var metric = Assert.Single(dbClientOperationDurationMetrics);
216+
VerifyDurationMetricData(metric, activity);
275217
}
276218

277219
[Theory]
@@ -288,6 +230,66 @@ public void MicrosoftDataStartsActivityWithExpectedAttributes(SqlClientTestCase
288230
this.RunSqlClientTestCase(testCase, SqlClientDiagnosticListener.SqlMicrosoftBeforeExecuteCommand, SqlClientDiagnosticListener.SqlMicrosoftAfterExecuteCommand);
289231
}
290232

233+
[Theory]
234+
[InlineData(true, false)]
235+
[InlineData(false, false)]
236+
[InlineData(true, true)]
237+
[InlineData(false, true)]
238+
public void SpansAndMetricsGeneratedOnlyWhenEnabled(bool tracesEnabled, bool metricsEnabled)
239+
{
240+
var activities = new List<Activity>();
241+
var metrics = new List<Metric>();
242+
243+
var tracerProviderBuilder = Sdk.CreateTracerProviderBuilder();
244+
if (tracesEnabled)
245+
{
246+
tracerProviderBuilder
247+
.AddSqlClientInstrumentation(options =>
248+
{
249+
options.SetDbStatementForText = true;
250+
options.RecordException = true;
251+
})
252+
.AddInMemoryExporter(activities);
253+
}
254+
255+
var meterProviderBuilder = Sdk.CreateMeterProviderBuilder();
256+
if (metricsEnabled)
257+
{
258+
meterProviderBuilder = Sdk.CreateMeterProviderBuilder()
259+
.AddSqlClientInstrumentation()
260+
.AddInMemoryExporter(metrics);
261+
}
262+
263+
using var tracerProvider = tracerProviderBuilder.Build();
264+
using var meterProvider = meterProviderBuilder.Build();
265+
266+
this.ExecuteCommand(CommandType.StoredProcedure, "SP_GetOrders", false, SqlClientDiagnosticListener.SqlDataBeforeExecuteCommand);
267+
this.ExecuteCommand(CommandType.StoredProcedure, "SP_GetOrders", false, SqlClientDiagnosticListener.SqlMicrosoftBeforeExecuteCommand);
268+
269+
tracerProvider.ForceFlush();
270+
meterProvider.ForceFlush();
271+
272+
Assert.Equal(tracesEnabled ? 2 : 0, activities.Count);
273+
274+
if (metricsEnabled)
275+
{
276+
var metric = Assert.Single(metrics, m => m.Name == "db.client.operation.duration");
277+
var metricPoints = new List<MetricPoint>();
278+
foreach (var p in metric.GetMetricPoints())
279+
{
280+
metricPoints.Add(p);
281+
}
282+
283+
var metricPoint = Assert.Single(metricPoints);
284+
var measurementCount = metricPoint.GetHistogramCount();
285+
Assert.Equal(2, measurementCount);
286+
}
287+
else
288+
{
289+
Assert.Empty(metrics);
290+
}
291+
}
292+
291293
[Theory]
292294
[InlineData(true, false)]
293295
[InlineData(false, false)]

test/OpenTelemetry.Instrumentation.SqlClient.Tests/SqlTestData.cs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ public static IEnumerable<object[]> SqlClientCallsAreCollectedSuccessfullyCases(
1919
from captureTextCommandContent in bools
2020
from emitOldAttributes in bools
2121
from emitNewAttributes in bools
22-
from tracingEnabled in bools
23-
from metricsEnabled in bools
2422
where emitOldAttributes && emitNewAttributes
2523
let commandText = commandType == CommandType.Text
2624
? "select * from sys.databases"
@@ -33,8 +31,6 @@ where emitOldAttributes && emitNewAttributes
3331
captureTextCommandContent,
3432
emitOldAttributes,
3533
emitNewAttributes,
36-
tracingEnabled,
37-
metricsEnabled,
3834
};
3935
}
4036

@@ -44,14 +40,10 @@ public static IEnumerable<object[]> SqlClientErrorsAreCollectedSuccessfullyCases
4440
return from beforeCommand in new[] { SqlClientDiagnosticListener.SqlDataBeforeExecuteCommand, SqlClientDiagnosticListener.SqlMicrosoftBeforeExecuteCommand }
4541
from shouldEnrich in bools
4642
from recordException in bools
47-
from tracingEnabled in bools
48-
from metricsEnabled in bools
4943
select new object[]
5044
{
5145
beforeCommand,
5246
recordException,
53-
tracingEnabled,
54-
metricsEnabled,
5547
};
5648
}
5749
#endif

0 commit comments

Comments
 (0)