github.com/cilium/cilium@v1.16.2/pkg/hubble/parser/seven/tracing_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Hubble 3 4 package seven 5 6 import ( 7 "net/http" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 12 flowpb "github.com/cilium/cilium/api/v1/flow" 13 "github.com/cilium/cilium/pkg/proxy/accesslog" 14 ) 15 16 func TestExtractTraceContext(t *testing.T) { 17 tests := []struct { 18 name string 19 record *accesslog.LogRecord 20 want *flowpb.TraceContext 21 }{ 22 { 23 name: "nil log record", 24 record: nil, 25 want: nil, 26 }, { 27 name: "http log record without trace", 28 record: &accesslog.LogRecord{ 29 HTTP: &accesslog.LogRecordHTTP{}, 30 }, 31 want: nil, 32 }, { 33 name: "http log record with trace", 34 record: &accesslog.LogRecord{ 35 HTTP: &accesslog.LogRecordHTTP{ 36 Headers: http.Header{ 37 "Traceparent": []string{"00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01"}, 38 }, 39 }, 40 }, 41 want: &flowpb.TraceContext{ 42 Parent: &flowpb.TraceParent{ 43 TraceId: "4bf92f3577b34da6a3ce929d0e0e4736", 44 }, 45 }, 46 }, 47 } 48 for _, tt := range tests { 49 t.Run(tt.name, func(t *testing.T) { 50 got := extractTraceContext(tt.record) 51 assert.Equal(t, tt.want, got) 52 }) 53 } 54 } 55 56 func TestTraceIDFromHTTPHeader(t *testing.T) { 57 tests := []struct { 58 name string 59 header http.Header 60 want string 61 }{ 62 { 63 name: "no trace", 64 want: "", 65 }, { 66 name: "example traceparent", 67 header: http.Header{ 68 "Traceparent": []string{"00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01"}, 69 }, 70 want: "4bf92f3577b34da6a3ce929d0e0e4736", 71 }, { 72 name: "invalid trace", 73 header: http.Header{ 74 "Traceparent": []string{"not-an-actual-traceparent"}, 75 }, 76 want: "", 77 }, 78 } 79 for _, tt := range tests { 80 t.Run(tt.name, func(t *testing.T) { 81 got := traceIDFromHTTPHeader(tt.header) 82 assert.Equal(t, tt.want, got) 83 }) 84 } 85 }