@@ -50,7 +50,6 @@ public void ValidateRequestDurationMetric()
5050
5151 standardMetricCustomProcessor . _meterProvider ? . ForceFlush ( ) ;
5252
53- // Standard Metrics + Resource Metrics.
5453 Assert . Single ( metricTelemetryItems ) ;
5554
5655 var metricTelemetry = metricTelemetryItems . Last ( ) ! ;
@@ -102,7 +101,6 @@ public void ValidateDependencyDurationMetric()
102101
103102 standardMetricCustomProcessor . _meterProvider ? . ForceFlush ( ) ;
104103
105- // Standard Metrics + Resource Metrics.
106104 Assert . Single ( metricTelemetryItems ) ;
107105
108106 var metricTelemetry = metricTelemetryItems . Last ( ) ! ;
@@ -125,6 +123,54 @@ public void ValidateDependencyDurationMetric()
125123 Assert . Equal ( "www.foo.com" , dependencyTarget ) ;
126124 }
127125
126+ [ Theory ]
127+ [ InlineData ( ActivityKind . Server ) ]
128+ [ InlineData ( ActivityKind . Client ) ]
129+ public void ValidateNullStatusCode ( ActivityKind kind )
130+ {
131+ var activitySource = new ActivitySource ( nameof ( StandardMetricTests . ValidateNullStatusCode ) ) ;
132+ var traceTelemetryItems = new List < TelemetryItem > ( ) ;
133+ var metricTelemetryItems = new List < TelemetryItem > ( ) ;
134+
135+ var standardMetricCustomProcessor = new StandardMetricsExtractionProcessor ( new AzureMonitorMetricExporter ( new MockTransmitter ( metricTelemetryItems ) ) ) ;
136+
137+ using var tracerProvider = Sdk . CreateTracerProviderBuilder ( )
138+ . SetSampler ( new AlwaysOnSampler ( ) )
139+ . AddSource ( nameof ( StandardMetricTests . ValidateNullStatusCode ) )
140+ . AddProcessor ( standardMetricCustomProcessor )
141+ . AddProcessor ( new BatchActivityExportProcessor ( new AzureMonitorTraceExporter ( new MockTransmitter ( traceTelemetryItems ) ) ) )
142+ . Build ( ) ;
143+
144+ using ( var activity = activitySource . StartActivity ( "Test" , kind ) )
145+ {
146+ activity ? . SetTag ( SemanticConventions . AttributeHttpMethod , "Get" ) ;
147+ activity ? . SetTag ( SemanticConventions . AttributeHttpUrl , "https://www.foo.com" ) ;
148+ }
149+
150+ tracerProvider ? . ForceFlush ( ) ;
151+
152+ WaitForActivityExport ( traceTelemetryItems ) ;
153+
154+ standardMetricCustomProcessor . _meterProvider ? . ForceFlush ( ) ;
155+
156+ // Standard Metrics + Resource Metrics.
157+ Assert . Single ( metricTelemetryItems ) ;
158+ var metricTelemetry = metricTelemetryItems . Last ( ) ! ;
159+ Assert . Equal ( "MetricData" , metricTelemetry . Data . BaseType ) ;
160+ var metricData = ( MetricsData ) metricTelemetry . Data . BaseData ;
161+
162+ if ( kind == ActivityKind . Client )
163+ {
164+ Assert . True ( metricData . Properties . TryGetValue ( StandardMetricConstants . DependencyResultCodeKey , out var resultCode ) ) ;
165+ Assert . Equal ( "0" , resultCode ) ;
166+ }
167+ else
168+ {
169+ Assert . True ( metricData . Properties . TryGetValue ( StandardMetricConstants . RequestResultCodeKey , out var resultCode ) ) ;
170+ Assert . Equal ( "0" , resultCode ) ;
171+ }
172+ }
173+
128174 private void WaitForActivityExport ( List < TelemetryItem > traceTelemetryItems )
129175 {
130176 var result = SpinWait . SpinUntil (
0 commit comments