@@ -27,6 +27,7 @@ import (
2727 "time"
2828
2929 openzipkin "github.com/openzipkin/zipkin-go"
30+ zipkinmodel "github.com/openzipkin/zipkin-go/model"
3031 zhttp "github.com/openzipkin/zipkin-go/reporter/http"
3132 "go.opencensus.io/exporter/zipkin"
3233
@@ -40,6 +41,75 @@ import (
4041 "github.com/census-instrumentation/opencensus-service/translator/trace"
4142)
4243
44+ func TestTraceIDConversion (t * testing.T ) {
45+ longID , _ := zipkinmodel .TraceIDFromHex ("01020304050607080102030405060708" )
46+ shortID , _ := zipkinmodel .TraceIDFromHex ("0102030405060708" )
47+ zeroID , _ := zipkinmodel .TraceIDFromHex ("0000000000000000" )
48+ tests := []struct {
49+ name string
50+ id zipkinmodel.TraceID
51+ want []byte
52+ wantErr error
53+ }{
54+ {
55+ name : "128bit traceID" ,
56+ id : longID ,
57+ want : []byte {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 },
58+ wantErr : nil ,
59+ },
60+ {
61+ name : "64bit traceID" ,
62+ id : shortID ,
63+ want : []byte {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 },
64+ wantErr : nil ,
65+ },
66+ {
67+ name : "zero traceID" ,
68+ id : zeroID ,
69+ want : nil ,
70+ wantErr : errZeroTraceID ,
71+ },
72+ }
73+
74+ for _ , tc := range tests {
75+ got , gotErr := zTraceIDToOCProtoTraceID (tc .id )
76+ if tc .wantErr != gotErr {
77+ t .Errorf ("gotErr=%v wantErr=%v" , gotErr , tc .wantErr )
78+ }
79+ if ! reflect .DeepEqual (got , tc .want ) {
80+ t .Errorf ("got=%v want=%v" , got , tc .want )
81+ }
82+ }
83+ }
84+
85+ func TestShortIDSpanConversion (t * testing.T ) {
86+ shortID , _ := zipkinmodel .TraceIDFromHex ("0102030405060708" )
87+ if shortID .High != 0 {
88+ t .Errorf ("wanted 64bit traceID, so TraceID.High must be zero" )
89+ }
90+
91+ zc := zipkinmodel.SpanContext {
92+ TraceID : shortID ,
93+ ID : zipkinmodel .ID (shortID .Low ),
94+ }
95+ zs := zipkinmodel.SpanModel {
96+ SpanContext : zc ,
97+ }
98+
99+ ocSpan , _ , err := zipkinSpanToTraceSpan (& zs )
100+ if err != nil {
101+ t .Fatalf ("unexpected error %v" , err )
102+ }
103+ if len (ocSpan .TraceId ) != 16 {
104+ t .Fatalf ("incorrect OC proto trace id length" )
105+ }
106+
107+ want := []byte {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 }
108+ if ! reflect .DeepEqual (ocSpan .TraceId , want ) {
109+ t .Errorf ("got=%v want=%v" , ocSpan .TraceId , want )
110+ }
111+ }
112+
43113func TestConvertSpansToTraceSpans_json (t * testing.T ) {
44114 // Using Adrian Cole's sample at https://gist.github.com/adriancole/e8823c19dfed64e2eb71
45115 blob , err := ioutil .ReadFile ("./testdata/sample1.json" )
0 commit comments