@@ -1031,6 +1031,55 @@ public void TraceIdShouldBeSameForAllSpansWhenNoTraceIdReceived()
1031
1031
1032
1032
#endregion TraceID Tests
1033
1033
1034
+ [ TestCase ( true ) ]
1035
+ [ TestCase ( true , "" ) ]
1036
+ [ TestCase ( true , "k1=v1" , "k2=v2" ) ]
1037
+ [ TestCase ( false ) ]
1038
+ [ TestCase ( false , "" ) ]
1039
+ [ TestCase ( false , "k1=v1" , "k2=v2" ) ]
1040
+ public void W3C_BuildTracestate_EmptyVendors_NoCommas ( bool hasIncomingPayload , params string [ ] vendorState )
1041
+ {
1042
+ // Arrange
1043
+ Mock . Arrange ( ( ) => _configuration . SpanEventsEnabled ) . Returns ( true ) ;
1044
+ Mock . Arrange ( ( ) => _configuration . PayloadSuccessMetricsEnabled ) . Returns ( true ) ;
1045
+
1046
+ var transaction = BuildMockTransaction ( hasIncomingPayload : hasIncomingPayload , sampled : true ) ;
1047
+
1048
+ var transactionGuid = GuidGenerator . GenerateNewRelicGuid ( ) ;
1049
+ Mock . Arrange ( ( ) => transaction . Guid ) . Returns ( transactionGuid ) ;
1050
+
1051
+ var expectedSpanGuid = GuidGenerator . GenerateNewRelicGuid ( ) ;
1052
+ var segment = Mock . Create < ISegment > ( ) ;
1053
+ Mock . Arrange ( ( ) => segment . SpanId ) . Returns ( expectedSpanGuid ) ;
1054
+
1055
+ Mock . Arrange ( ( ) => transaction . CurrentSegment ) . Returns ( segment ) ;
1056
+
1057
+ var headers = new List < KeyValuePair < string , string > > ( ) ;
1058
+ var setHeaders = new Action < List < KeyValuePair < string , string > > , string , string > ( ( carrier , key , value ) =>
1059
+ {
1060
+ carrier . Add ( new KeyValuePair < string , string > ( key , value ) ) ;
1061
+ } ) ;
1062
+
1063
+ var tracingState = Mock . Create < ITracingState > ( ) ;
1064
+
1065
+ var vendorStateEntries = vendorState . ToList ( ) ;
1066
+
1067
+ Mock . Arrange ( ( ) => tracingState . VendorStateEntries ) . Returns ( vendorStateEntries ) ;
1068
+ Mock . Arrange ( ( ) => transaction . TracingState ) . Returns ( tracingState ) ;
1069
+
1070
+ Mock . Arrange ( ( ) => transaction . InsertDistributedTraceHeaders (
1071
+ Arg . IsAny < List < KeyValuePair < string , string > > > ( ) ,
1072
+ Arg . IsAny < Action < List < KeyValuePair < string , string > > , string , string > > ( ) ) )
1073
+ . DoInstead ( ( ) => _distributedTracePayloadHandler . InsertDistributedTraceHeaders ( transaction , headers , setHeaders ) ) ;
1074
+
1075
+ // Act
1076
+ transaction . InsertDistributedTraceHeaders ( headers , setHeaders ) ;
1077
+
1078
+ var tracestateHeaderValue = headers . Where ( header => header . Key == TracestateHeaderName ) . Select ( header => header . Value ) . FirstOrDefault ( ) ;
1079
+
1080
+ Assert . That ( ! tracestateHeaderValue . EndsWith ( "," ) , "W3C Tracestate string has a trailing comma." ) ;
1081
+ }
1082
+
1034
1083
#endregion
1035
1084
1036
1085
#region Supportability Metrics
0 commit comments