@@ -28,6 +28,7 @@ import (
28
28
"gopkg.in/DataDog/dd-trace-go.v1/internal/appsec"
29
29
"gopkg.in/DataDog/dd-trace-go.v1/internal/appsec/emitter/waf/addresses"
30
30
"gopkg.in/DataDog/dd-trace-go.v1/internal/globalconfig"
31
+ internallog "gopkg.in/DataDog/dd-trace-go.v1/internal/log"
31
32
32
33
"github.com/stretchr/testify/assert"
33
34
"github.com/stretchr/testify/require"
@@ -830,3 +831,95 @@ func TestAppsec(t *testing.T) {
830
831
})
831
832
}
832
833
}
834
+
835
+ func TestIntegrationTags (t * testing.T ) {
836
+ srv1 := httptest .NewServer (nil )
837
+ defer srv1 .Close ()
838
+ srv1URL , err := url .Parse (srv1 .URL )
839
+ require .NoError (t , err )
840
+
841
+ srv2 := httptest .NewServer (nil )
842
+ defer srv2 .Close ()
843
+ srv2URL , err := url .Parse (srv2 .URL )
844
+ require .NoError (t , err )
845
+
846
+ integrationTagsEnv := `[
847
+ {
848
+ "component": "net/http",
849
+ "query": [
850
+ {"span.kind": "server", "server.port": "%s"},
851
+ {"span.kind": "client", "server.port": "%s", "http.request.method": "GET"}
852
+ ],
853
+ "tags": {
854
+ "tag1": "val1"
855
+ }
856
+ },
857
+ {
858
+ "component": "net/http",
859
+ "query": [
860
+ {"span.kind": "server", "server.port": "%s"}
861
+ ],
862
+ "tags": {
863
+ "tag2": "val2"
864
+ }
865
+ }
866
+ ]`
867
+ t .Setenv ("DD_TRACE_INTEGRATION_TAGS" , fmt .Sprintf (integrationTagsEnv , srv1URL .Port (), srv2URL .Port (), srv2URL .Port ()))
868
+
869
+ // force start-stop the real tracer to load the config
870
+ tracer .Start (tracer .WithLogger (internallog.DiscardLogger {}))
871
+ tracer .Stop ()
872
+
873
+ mt := mocktracer .Start ()
874
+ defer mt .Stop ()
875
+
876
+ mux := NewServeMux ()
877
+ mux .HandleFunc ("/200" , handler200 )
878
+ mux .HandleFunc ("/500" , handler500 )
879
+
880
+ srv1 .Config .Handler = mux
881
+ srv2 .Config .Handler = mux
882
+
883
+ client := WrapClient (& http.Client {})
884
+
885
+ req , err := http .NewRequest (http .MethodGet , srv1 .URL + "/200" , nil )
886
+ require .NoError (t , err )
887
+ resp , err := client .Do (req )
888
+ require .NoError (t , err )
889
+ defer resp .Body .Close ()
890
+
891
+ req , err = http .NewRequest (http .MethodGet , srv2 .URL + "/200" , nil )
892
+ require .NoError (t , err )
893
+ resp , err = client .Do (req )
894
+ require .NoError (t , err )
895
+ defer resp .Body .Close ()
896
+
897
+ spans := mt .FinishedSpans ()
898
+ require .Len (t , spans , 4 )
899
+
900
+ spanSrv1 := spans [0 ]
901
+ spanClient1 := spans [1 ]
902
+ spanSrv2 := spans [2 ]
903
+ spanClient2 := spans [3 ]
904
+
905
+ assert .Equal (t , "server" , spanSrv1 .Tag ("span.kind" ))
906
+ assert .Equal (t , "server" , spanSrv2 .Tag ("span.kind" ))
907
+ assert .Equal (t , "client" , spanClient1 .Tag ("span.kind" ))
908
+ assert .Equal (t , "client" , spanClient2 .Tag ("span.kind" ))
909
+
910
+ // server1
911
+ assert .Equal (t , "val1" , spanSrv1 .Tag ("tag1" ), "server1 missing tag1" )
912
+ assert .Nil (t , spanSrv1 .Tag ("tag2" ), "server1 should not have tag2" )
913
+
914
+ // client1
915
+ assert .Nil (t , spanClient1 .Tag ("tag1" ), "client should not have tag1" )
916
+ assert .Nil (t , spanClient1 .Tag ("tag2" ), "client should not have tag2" )
917
+
918
+ // server2
919
+ assert .Nil (t , spanSrv2 .Tag ("tag1" ), "server2 should not have tag1" )
920
+ assert .Equal (t , "val2" , spanSrv2 .Tag ("tag2" ), "server2 missing tag2" )
921
+
922
+ // client2
923
+ assert .Equal (t , "val1" , spanClient2 .Tag ("tag1" ), "client2 missing tag1" )
924
+ assert .Nil (t , spanClient2 .Tag ("tag2" ), "client2 should not have tag2" )
925
+ }
0 commit comments