123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- // Copyright 2017, OpenCensus Authors
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- package propagation
- import (
- "bytes"
- "fmt"
- "testing"
- . "go.opencensus.io/trace"
- )
- func TestBinary(t *testing.T) {
- tid := TraceID{0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f}
- sid := SpanID{0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68}
- b := []byte{
- 0, 0, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1, 97, 98, 99, 100,
- 101, 102, 103, 104, 2, 1,
- }
- if b2 := Binary(SpanContext{
- TraceID: tid,
- SpanID: sid,
- TraceOptions: 1,
- }); !bytes.Equal(b2, b) {
- t.Errorf("Binary: got serialization %02x want %02x", b2, b)
- }
- sc, ok := FromBinary(b)
- if !ok {
- t.Errorf("FromBinary: got ok==%t, want true", ok)
- }
- if got := sc.TraceID; got != tid {
- t.Errorf("FromBinary: got trace ID %s want %s", got, tid)
- }
- if got := sc.SpanID; got != sid {
- t.Errorf("FromBinary: got span ID %s want %s", got, sid)
- }
- b[0] = 1
- sc, ok = FromBinary(b)
- if ok {
- t.Errorf("FromBinary: decoding bytes containing an unsupported version: got ok==%t want false", ok)
- }
- b = []byte{0, 1, 97, 98, 99, 100, 101, 102, 103, 104, 2, 1}
- sc, ok = FromBinary(b)
- if ok {
- t.Errorf("FromBinary: decoding bytes without a TraceID: got ok==%t want false", ok)
- }
- if b := Binary(SpanContext{}); b != nil {
- t.Errorf("Binary(SpanContext{}): got serialization %02x want nil", b)
- }
- }
- func TestFromBinary(t *testing.T) {
- validData := []byte{0, 0, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1, 97, 98, 99, 100, 101, 102, 103, 104, 2, 1}
- tests := []struct {
- name string
- data []byte
- wantTraceID TraceID
- wantSpanID SpanID
- wantOpts TraceOptions
- wantOk bool
- }{
- {
- name: "nil data",
- data: nil,
- wantOk: false,
- },
- {
- name: "short data",
- data: []byte{0, 0, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77},
- wantOk: false,
- },
- {
- name: "wrong field number",
- data: []byte{0, 1, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77},
- wantOk: false,
- },
- {
- name: "valid data",
- data: validData,
- wantTraceID: TraceID{64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79},
- wantSpanID: SpanID{97, 98, 99, 100, 101, 102, 103, 104},
- wantOpts: 1,
- wantOk: true,
- },
- }
- for _, tt := range tests {
- sc, gotOk := FromBinary(tt.data)
- gotTraceID, gotSpanID, gotOpts := sc.TraceID, sc.SpanID, sc.TraceOptions
- if gotTraceID != tt.wantTraceID {
- t.Errorf("%s: Decode() gotTraceID = %v, want %v", tt.name, gotTraceID, tt.wantTraceID)
- }
- if gotSpanID != tt.wantSpanID {
- t.Errorf("%s: Decode() gotSpanID = %v, want %v", tt.name, gotSpanID, tt.wantSpanID)
- }
- if gotOpts != tt.wantOpts {
- t.Errorf("%s: Decode() gotOpts = %v, want %v", tt.name, gotOpts, tt.wantOpts)
- }
- if gotOk != tt.wantOk {
- t.Errorf("%s: Decode() gotOk = %v, want %v", tt.name, gotOk, tt.wantOk)
- }
- }
- }
- func BenchmarkBinary(b *testing.B) {
- tid := TraceID{0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f}
- sid := SpanID{0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68}
- sc := SpanContext{
- TraceID: tid,
- SpanID: sid,
- }
- var x byte
- for i := 0; i < b.N; i++ {
- bin := Binary(sc)
- x += bin[0]
- }
- if x == 1 {
- fmt.Println(x) // try to prevent optimizing-out
- }
- }
- func BenchmarkFromBinary(b *testing.B) {
- bin := []byte{
- 0, 0, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 1, 97, 98, 99, 100,
- 101, 102, 103, 104, 2, 1,
- }
- var x byte
- for i := 0; i < b.N; i++ {
- sc, _ := FromBinary(bin)
- x += sc.TraceID[0]
- }
- if x == 1 {
- fmt.Println(x) // try to prevent optimizing-out
- }
- }
|