@@ -19,6 +19,12 @@ import (
1919 "github.com/stretchr/testify/require"
2020)
2121
22+ type sqlCommentStringer string
23+
24+ func (s sqlCommentStringer ) String () string {
25+ return string (s )
26+ }
27+
2228func TestSQLCommentCarrier (t * testing.T ) {
2329 testCases := []struct {
2430 name string
@@ -353,6 +359,61 @@ func FuzzSpanContextFromTraceComment(f *testing.F) {
353359 })
354360}
355361
362+ // TestSQLCommentUsesUpdatedInheritedTags verifies that when env, version, and
363+ // peer.service are set on a span after creation, SQLCommentCarrier.Inject reads
364+ // the updated values from context.inherited rather than stale initial values.
365+ func TestSQLCommentUsesUpdatedInheritedTags (t * testing.T ) {
366+ trc , err := newTracer (WithService ("my-svc" ))
367+ require .NoError (t , err )
368+ defer globalconfig .SetServiceName ("" )
369+ defer trc .Stop ()
370+
371+ span := trc .StartSpan ("op" )
372+ defer span .Finish ()
373+
374+ span .SetTag (ext .Environment , "staging" )
375+ span .SetTag (ext .Version , "2.0" )
376+ span .SetTag (ext .PeerService , "peer-svc" )
377+
378+ carrier := SQLCommentCarrier {
379+ Query : "SELECT 1" ,
380+ Mode : DBMPropagationModeService ,
381+ DBServiceName : "mydb" ,
382+ }
383+ err = carrier .Inject (span .Context ())
384+ require .NoError (t , err )
385+
386+ assert .Contains (t , carrier .Query , "dde='staging'" )
387+ assert .Contains (t , carrier .Query , "ddpv='2.0'" )
388+ assert .Contains (t , carrier .Query , "ddprs='peer-svc'" )
389+ }
390+
391+ func TestSQLCommentUsesConvertedInheritedTags (t * testing.T ) {
392+ trc , err := newTracer (WithService ("my-svc" ))
393+ require .NoError (t , err )
394+ defer globalconfig .SetServiceName ("" )
395+ defer trc .Stop ()
396+
397+ span := trc .StartSpan ("op" )
398+ defer span .Finish ()
399+
400+ span .SetTag (ext .Environment , []byte ("staging" ))
401+ span .SetTag (ext .Version , sqlCommentStringer ("2.0" ))
402+ span .SetTag (ext .PeerService , true )
403+
404+ carrier := SQLCommentCarrier {
405+ Query : "SELECT 1" ,
406+ Mode : DBMPropagationModeService ,
407+ DBServiceName : "mydb" ,
408+ }
409+ err = carrier .Inject (span .Context ())
410+ require .NoError (t , err )
411+
412+ assert .Contains (t , carrier .Query , "dde='staging'" )
413+ assert .Contains (t , carrier .Query , "ddpv='2.0'" )
414+ assert .Contains (t , carrier .Query , "ddprs='true'" )
415+ }
416+
356417func BenchmarkSQLCommentInjection (b * testing.B ) {
357418 tracer , spanCtx , carrier := setupBenchmark ()
358419 defer tracer .Stop ()
0 commit comments