Skip to content

Commit 4198153

Browse files
committed
Add integration tests for Activity.
1 parent 9257a4b commit 4198153

File tree

1 file changed

+107
-0
lines changed

1 file changed

+107
-0
lines changed

tests/SideBySide/ActivityTests.cs

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
#if !BASELINE
2+
#if NET5_0_OR_GREATER
3+
using System.Diagnostics;
4+
using System.Globalization;
5+
6+
namespace SideBySide;
7+
8+
public class ActivityTests : IClassFixture<DatabaseFixture>
9+
{
10+
public ActivityTests(DatabaseFixture database)
11+
{
12+
}
13+
14+
[Fact]
15+
public void OpenTags()
16+
{
17+
using var parentActivity = new Activity(nameof(OpenTags));
18+
parentActivity.Start();
19+
20+
Activity activity = null;
21+
using var listener = new ActivityListener
22+
{
23+
ShouldListenTo = x => x.Name == "MySqlConnector",
24+
Sample = (ref ActivityCreationOptions<ActivityContext> options) =>
25+
options.TraceId == parentActivity.TraceId ? ActivitySamplingResult.AllData : ActivitySamplingResult.None,
26+
ActivityStopped = x => activity = x,
27+
};
28+
ActivitySource.AddActivityListener(listener);
29+
30+
string connectionString;
31+
using (var connection = new MySqlConnection(AppConfig.ConnectionString))
32+
{
33+
connection.Open();
34+
connectionString = connection.ConnectionString;
35+
}
36+
var csb = new MySqlConnectionStringBuilder(connectionString);
37+
38+
Assert.NotNull(activity);
39+
Assert.Equal(ActivityKind.Client, activity.Kind);
40+
Assert.Equal("Open", activity.OperationName);
41+
#if NET6_0_OR_GREATER
42+
Assert.Equal(ActivityStatusCode.Ok, activity.Status);
43+
#endif
44+
45+
AssertTags(activity.Tags, csb);
46+
AssertTag(activity.Tags, "otel.status_code", "OK");
47+
}
48+
49+
[Fact]
50+
public void SelectTags()
51+
{
52+
using var connection = new MySqlConnection(AppConfig.ConnectionString);
53+
connection.Open();
54+
var csb = new MySqlConnectionStringBuilder(connection.ConnectionString);
55+
56+
using var parentActivity = new Activity(nameof(OpenTags));
57+
parentActivity.Start();
58+
59+
Activity activity = null;
60+
using var listener = new ActivityListener
61+
{
62+
ShouldListenTo = x => x.Name == "MySqlConnector",
63+
Sample = (ref ActivityCreationOptions<ActivityContext> options) =>
64+
options.TraceId == parentActivity.TraceId ? ActivitySamplingResult.AllData : ActivitySamplingResult.None,
65+
ActivityStopped = x => activity = x,
66+
};
67+
ActivitySource.AddActivityListener(listener);
68+
69+
using (var command = new MySqlCommand("SELECT 1;", connection))
70+
{
71+
command.ExecuteScalar();
72+
}
73+
74+
Assert.NotNull(activity);
75+
Assert.Equal(ActivityKind.Client, activity.Kind);
76+
Assert.Equal("Execute", activity.OperationName);
77+
#if NET6_0_OR_GREATER
78+
Assert.Equal(ActivityStatusCode.Ok, activity.Status);
79+
#endif
80+
81+
AssertTags(activity.Tags, csb);
82+
AssertTag(activity.Tags, "db.connection_id", connection.ServerThread.ToString(CultureInfo.InvariantCulture));
83+
AssertTag(activity.Tags, "db.statement", "SELECT 1;");
84+
AssertTag(activity.Tags, "otel.status_code", "OK");
85+
}
86+
87+
private void AssertTags(IEnumerable<KeyValuePair<string, string>> tags, MySqlConnectionStringBuilder csb)
88+
{
89+
AssertTag(tags, "db.system", "mysql");
90+
AssertTag(tags, "db.connection_string", csb.ConnectionString);
91+
AssertTag(tags, "db.user", csb.UserID);
92+
if (csb.Server[0] is >= 'a' and <= 'z' or >= 'A' and <= 'Z')
93+
AssertTag(tags, "net.peer.name", csb.Server);
94+
AssertTag(tags, "net.transport", "ip_tcp");
95+
AssertTag(tags, "db.name", csb.Database);
96+
}
97+
98+
private void AssertTag(IEnumerable<KeyValuePair<string, string>> tags, string expectedTag, string expectedValue)
99+
{
100+
var tag = tags.SingleOrDefault(x => x.Key == expectedTag);
101+
if (tag.Key is null)
102+
Assert.True(false, $"tags did not contain '{expectedTag}'");
103+
Assert.Equal(expectedValue, tag.Value);
104+
}
105+
}
106+
#endif
107+
#endif

0 commit comments

Comments
 (0)