mirror of
https://github.com/Luzifer/nginx-sso.git
synced 2024-12-30 01:31:18 +00:00
150 lines
4.2 KiB
Go
150 lines
4.2 KiB
Go
// 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
|
|
}
|
|
}
|