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  }