|
8 | 8 | using Grpc.Core; |
9 | 9 | #endif |
10 | 10 | using Grpc.Net.Client; |
11 | | -using Microsoft.Extensions.Configuration; |
12 | 11 | using Microsoft.Extensions.DependencyInjection; |
13 | 12 | #if !NETFRAMEWORK |
14 | 13 | using OpenTelemetry.Context.Propagation; |
@@ -91,213 +90,16 @@ public void GrpcClientCallsAreCollectedSuccessfully(string baseAddress, bool sho |
91 | 90 |
|
92 | 91 | if (uriHostNameType == UriHostNameType.IPv4 || uriHostNameType == UriHostNameType.IPv6) |
93 | 92 | { |
94 | | - Assert.Equal(uri.Host, activity.GetTagValue(SemanticConventions.AttributeNetPeerIp)); |
95 | | - Assert.Null(activity.GetTagValue(SemanticConventions.AttributeNetPeerName)); |
96 | | - } |
97 | | - else |
98 | | - { |
99 | | - Assert.Null(activity.GetTagValue(SemanticConventions.AttributeNetPeerIp)); |
100 | | - Assert.Equal(uri.Host, activity.GetTagValue(SemanticConventions.AttributeNetPeerName)); |
101 | | - } |
102 | | - |
103 | | - Assert.Equal(uri.Port, activity.GetTagValue(SemanticConventions.AttributeNetPeerPort)); |
104 | | - Assert.Equal(Status.Unset, activity.GetStatus()); |
105 | | - |
106 | | - // Tags added by the library then removed from the instrumentation |
107 | | - Assert.Null(activity.GetTagValue(GrpcTagHelper.GrpcMethodTagName)); |
108 | | - Assert.Null(activity.GetTagValue(GrpcTagHelper.GrpcStatusCodeTagName)); |
109 | | - Assert.Equal(0, activity.GetTagValue(SemanticConventions.AttributeRpcGrpcStatusCode)); |
110 | | - |
111 | | - if (shouldEnrich) |
112 | | - { |
113 | | - Assert.True(enrichWithHttpRequestMessageCalled); |
114 | | - Assert.True(enrichWithHttpResponseMessageCalled); |
115 | | - } |
116 | | - } |
117 | | - |
118 | | - [Theory] |
119 | | - [InlineData("http://localhost")] |
120 | | - [InlineData("http://localhost", false)] |
121 | | - [InlineData("http://127.0.0.1")] |
122 | | - [InlineData("http://127.0.0.1", false)] |
123 | | - [InlineData("http://[::1]")] |
124 | | - [InlineData("http://[::1]", false)] |
125 | | - public void GrpcClientCallsAreCollectedSuccessfully_New(string baseAddress, bool shouldEnrich = true) |
126 | | - { |
127 | | - var config = new KeyValuePair<string, string>[] { new("OTEL_SEMCONV_STABILITY_OPT_IN", "http") }; |
128 | | - var configuration = new ConfigurationBuilder() |
129 | | - .AddInMemoryCollection(config) |
130 | | - .Build(); |
131 | | - |
132 | | - bool enrichWithHttpRequestMessageCalled = false; |
133 | | - bool enrichWithHttpResponseMessageCalled = false; |
134 | | - |
135 | | - var uri = new Uri($"{baseAddress}:1234"); |
136 | | - var uriHostNameType = Uri.CheckHostName(uri.Host); |
137 | | - |
138 | | - using var httpClient = ClientTestHelpers.CreateTestClient(async request => |
139 | | - { |
140 | | - var streamContent = await ClientTestHelpers.CreateResponseContent(new HelloReply()); |
141 | | - var response = ResponseUtils.CreateResponse(HttpStatusCode.OK, streamContent, grpcStatusCode: global::Grpc.Core.StatusCode.OK); |
142 | | - response.TrailingHeaders().Add("grpc-message", "value"); |
143 | | - return response; |
144 | | - }); |
145 | | - |
146 | | - var exportedItems = new List<Activity>(); |
147 | | - |
148 | | - using var parent = new Activity("parent") |
149 | | - .SetIdFormat(ActivityIdFormat.W3C) |
150 | | - .Start(); |
151 | | - |
152 | | - using (Sdk.CreateTracerProviderBuilder() |
153 | | - .SetSampler(new AlwaysOnSampler()) |
154 | | - .ConfigureServices(services => services.AddSingleton<IConfiguration>(configuration)) |
155 | | - .AddGrpcClientInstrumentation(options => |
156 | | - { |
157 | | - if (shouldEnrich) |
158 | | - { |
159 | | - options.EnrichWithHttpRequestMessage = (activity, httpRequestMessage) => { enrichWithHttpRequestMessageCalled = true; }; |
160 | | - options.EnrichWithHttpResponseMessage = (activity, httpResponseMessage) => { enrichWithHttpResponseMessageCalled = true; }; |
161 | | - } |
162 | | - }) |
163 | | - .AddInMemoryExporter(exportedItems) |
164 | | - .Build()) |
165 | | - { |
166 | | - var channel = GrpcChannel.ForAddress(uri, new GrpcChannelOptions |
167 | | - { |
168 | | - HttpClient = httpClient, |
169 | | - }); |
170 | | - var client = new Greeter.GreeterClient(channel); |
171 | | - var rs = client.SayHello(new HelloRequest()); |
172 | | - } |
173 | | - |
174 | | - Assert.Single(exportedItems); |
175 | | - var activity = exportedItems[0]; |
176 | | - |
177 | | - ValidateGrpcActivity(activity); |
178 | | - Assert.Equal(parent.TraceId, activity.Context.TraceId); |
179 | | - Assert.Equal(parent.SpanId, activity.ParentSpanId); |
180 | | - Assert.NotEqual(parent.SpanId, activity.Context.SpanId); |
181 | | - Assert.NotEqual(default, activity.Context.SpanId); |
182 | | - |
183 | | - Assert.Equal($"greet.Greeter/SayHello", activity.DisplayName); |
184 | | - Assert.Equal("grpc", activity.GetTagValue(SemanticConventions.AttributeRpcSystem)); |
185 | | - Assert.Equal("greet.Greeter", activity.GetTagValue(SemanticConventions.AttributeRpcService)); |
186 | | - Assert.Equal("SayHello", activity.GetTagValue(SemanticConventions.AttributeRpcMethod)); |
187 | | - |
188 | | - if (uriHostNameType == UriHostNameType.IPv4 || uriHostNameType == UriHostNameType.IPv6) |
189 | | - { |
190 | | - Assert.Equal(uri.Host, activity.GetTagValue(SemanticConventions.AttributeServerSocketAddress)); |
191 | | - Assert.Null(activity.GetTagValue(SemanticConventions.AttributeServerAddress)); |
192 | | - } |
193 | | - else |
194 | | - { |
195 | | - Assert.Null(activity.GetTagValue(SemanticConventions.AttributeServerSocketAddress)); |
196 | | - Assert.Equal(uri.Host, activity.GetTagValue(SemanticConventions.AttributeServerAddress)); |
197 | | - } |
198 | | - |
199 | | - Assert.Equal(uri.Port, activity.GetTagValue(SemanticConventions.AttributeServerPort)); |
200 | | - Assert.Equal(Status.Unset, activity.GetStatus()); |
201 | | - |
202 | | - // Tags added by the library then removed from the instrumentation |
203 | | - Assert.Null(activity.GetTagValue(GrpcTagHelper.GrpcMethodTagName)); |
204 | | - Assert.Null(activity.GetTagValue(GrpcTagHelper.GrpcStatusCodeTagName)); |
205 | | - Assert.Equal(0, activity.GetTagValue(SemanticConventions.AttributeRpcGrpcStatusCode)); |
206 | | - |
207 | | - if (shouldEnrich) |
208 | | - { |
209 | | - Assert.True(enrichWithHttpRequestMessageCalled); |
210 | | - Assert.True(enrichWithHttpResponseMessageCalled); |
211 | | - } |
212 | | - } |
213 | | - |
214 | | - [Theory] |
215 | | - [InlineData("http://localhost")] |
216 | | - [InlineData("http://localhost", false)] |
217 | | - [InlineData("http://127.0.0.1")] |
218 | | - [InlineData("http://127.0.0.1", false)] |
219 | | - [InlineData("http://[::1]")] |
220 | | - [InlineData("http://[::1]", false)] |
221 | | - public void GrpcClientCallsAreCollectedSuccessfully_Dupe(string baseAddress, bool shouldEnrich = true) |
222 | | - { |
223 | | - var config = new KeyValuePair<string, string>[] { new("OTEL_SEMCONV_STABILITY_OPT_IN", "http/dup") }; |
224 | | - var configuration = new ConfigurationBuilder() |
225 | | - .AddInMemoryCollection(config) |
226 | | - .Build(); |
227 | | - |
228 | | - bool enrichWithHttpRequestMessageCalled = false; |
229 | | - bool enrichWithHttpResponseMessageCalled = false; |
230 | | - |
231 | | - var uri = new Uri($"{baseAddress}:1234"); |
232 | | - var uriHostNameType = Uri.CheckHostName(uri.Host); |
233 | | - |
234 | | - using var httpClient = ClientTestHelpers.CreateTestClient(async request => |
235 | | - { |
236 | | - var streamContent = await ClientTestHelpers.CreateResponseContent(new HelloReply()); |
237 | | - var response = ResponseUtils.CreateResponse(HttpStatusCode.OK, streamContent, grpcStatusCode: global::Grpc.Core.StatusCode.OK); |
238 | | - response.TrailingHeaders().Add("grpc-message", "value"); |
239 | | - return response; |
240 | | - }); |
241 | | - |
242 | | - var exportedItems = new List<Activity>(); |
243 | | - |
244 | | - using var parent = new Activity("parent") |
245 | | - .SetIdFormat(ActivityIdFormat.W3C) |
246 | | - .Start(); |
247 | | - |
248 | | - using (Sdk.CreateTracerProviderBuilder() |
249 | | - .SetSampler(new AlwaysOnSampler()) |
250 | | - .ConfigureServices(services => services.AddSingleton<IConfiguration>(configuration)) |
251 | | - .AddGrpcClientInstrumentation(options => |
252 | | - { |
253 | | - if (shouldEnrich) |
254 | | - { |
255 | | - options.EnrichWithHttpRequestMessage = (activity, httpRequestMessage) => { enrichWithHttpRequestMessageCalled = true; }; |
256 | | - options.EnrichWithHttpResponseMessage = (activity, httpResponseMessage) => { enrichWithHttpResponseMessageCalled = true; }; |
257 | | - } |
258 | | - }) |
259 | | - .AddInMemoryExporter(exportedItems) |
260 | | - .Build()) |
261 | | - { |
262 | | - var channel = GrpcChannel.ForAddress(uri, new GrpcChannelOptions |
263 | | - { |
264 | | - HttpClient = httpClient, |
265 | | - }); |
266 | | - var client = new Greeter.GreeterClient(channel); |
267 | | - var rs = client.SayHello(new HelloRequest()); |
268 | | - } |
269 | | - |
270 | | - Assert.Single(exportedItems); |
271 | | - var activity = exportedItems[0]; |
272 | | - |
273 | | - ValidateGrpcActivity(activity); |
274 | | - Assert.Equal(parent.TraceId, activity.Context.TraceId); |
275 | | - Assert.Equal(parent.SpanId, activity.ParentSpanId); |
276 | | - Assert.NotEqual(parent.SpanId, activity.Context.SpanId); |
277 | | - Assert.NotEqual(default, activity.Context.SpanId); |
278 | | - |
279 | | - Assert.Equal($"greet.Greeter/SayHello", activity.DisplayName); |
280 | | - Assert.Equal("grpc", activity.GetTagValue(SemanticConventions.AttributeRpcSystem)); |
281 | | - Assert.Equal("greet.Greeter", activity.GetTagValue(SemanticConventions.AttributeRpcService)); |
282 | | - Assert.Equal("SayHello", activity.GetTagValue(SemanticConventions.AttributeRpcMethod)); |
283 | | - |
284 | | - if (uriHostNameType == UriHostNameType.IPv4 || uriHostNameType == UriHostNameType.IPv6) |
285 | | - { |
286 | | - Assert.Equal(uri.Host, activity.GetTagValue(SemanticConventions.AttributeNetPeerIp)); |
287 | | - Assert.Null(activity.GetTagValue(SemanticConventions.AttributeNetPeerName)); |
288 | 93 | Assert.Equal(uri.Host, activity.GetTagValue(SemanticConventions.AttributeServerSocketAddress)); |
289 | 94 | Assert.Null(activity.GetTagValue(SemanticConventions.AttributeServerAddress)); |
290 | 95 | } |
291 | 96 | else |
292 | 97 | { |
293 | | - Assert.Null(activity.GetTagValue(SemanticConventions.AttributeNetPeerIp)); |
294 | | - Assert.Equal(uri.Host, activity.GetTagValue(SemanticConventions.AttributeNetPeerName)); |
295 | 98 | Assert.Null(activity.GetTagValue(SemanticConventions.AttributeServerSocketAddress)); |
296 | 99 | Assert.Equal(uri.Host, activity.GetTagValue(SemanticConventions.AttributeServerAddress)); |
297 | 100 | } |
298 | 101 |
|
299 | 102 | Assert.Equal(uri.Port, activity.GetTagValue(SemanticConventions.AttributeServerPort)); |
300 | | - Assert.Equal(uri.Port, activity.GetTagValue(SemanticConventions.AttributeNetPeerPort)); |
301 | 103 | Assert.Equal(Status.Unset, activity.GetStatus()); |
302 | 104 |
|
303 | 105 | // Tags added by the library then removed from the instrumentation |
|
0 commit comments