grafana_bak/pkg/tsdb/tempo/traceql/exemplars_test.go
2025-04-01 10:38:02 +09:00

138 lines
4.1 KiB
Go

package traceql
import (
"testing"
"time"
"github.com/grafana/tempo/pkg/tempopb"
v1 "github.com/grafana/tempo/pkg/tempopb/common/v1"
"github.com/stretchr/testify/assert"
)
func TestTransformExemplarToFrame_EmptyExemplars(t *testing.T) {
frame := transformExemplarToFrame("test", &tempopb.TimeSeries{
Labels: nil,
Samples: nil,
PromLabels: "",
Exemplars: make([]tempopb.Exemplar, 0),
})
assert.NotNil(t, frame)
assert.Equal(t, "test", frame.RefID)
assert.Equal(t, "exemplar", frame.Name)
assert.Len(t, frame.Fields, 3)
assert.Empty(t, frame.Fields[0].Len())
assert.Empty(t, frame.Fields[1].Len())
assert.Empty(t, frame.Fields[2].Len())
}
func TestTransformExemplarToFrame_SingleExemplar(t *testing.T) {
exemplars := []tempopb.Exemplar{
{
TimestampMs: 1638316800000,
Value: 1.23,
Labels: []v1.KeyValue{
{Key: "trace:id", Value: &v1.AnyValue{Value: &v1.AnyValue_StringValue{StringValue: "trace-123"}}},
},
},
}
frame := transformExemplarToFrame("test", &tempopb.TimeSeries{
Labels: nil,
Samples: nil,
PromLabels: "",
Exemplars: exemplars,
})
assert.NotNil(t, frame)
assert.Equal(t, "test", frame.RefID)
assert.Equal(t, "exemplar", frame.Name)
assert.Len(t, frame.Fields, 3)
assert.Equal(t, time.UnixMilli(1638316800000), frame.Fields[0].At(0))
assert.Equal(t, 1.23, frame.Fields[1].At(0))
assert.Equal(t, "trace-123", frame.Fields[2].At(0))
}
func TestTransformExemplarToFrame_SingleExemplarHistogram(t *testing.T) {
exemplars := []tempopb.Exemplar{
{
TimestampMs: 1638316800000,
Value: 1.23,
Labels: []v1.KeyValue{
{Key: "trace:id", Value: &v1.AnyValue{Value: &v1.AnyValue_StringValue{StringValue: "trace-123"}}},
{Key: "__bucket", Value: &v1.AnyValue{Value: &v1.AnyValue_DoubleValue{DoubleValue: 1.23}}},
},
},
}
frame := transformExemplarToFrame("test", &tempopb.TimeSeries{
Labels: []v1.KeyValue{
{Key: "__bucket", Value: &v1.AnyValue{Value: &v1.AnyValue_DoubleValue{DoubleValue: 1.23}}},
},
Samples: nil,
PromLabels: "",
Exemplars: exemplars,
})
assert.NotNil(t, frame)
assert.Equal(t, "test", frame.RefID)
assert.Equal(t, "exemplar", frame.Name)
assert.Len(t, frame.Fields, 4)
assert.Equal(t, time.UnixMilli(1638316800000), frame.Fields[0].At(0))
assert.Equal(t, 1.23, frame.Fields[1].At(0))
assert.Equal(t, "trace-123", frame.Fields[2].At(0))
}
func TestTransformExemplarToFrame_MultipleExemplars(t *testing.T) {
exemplars := []tempopb.Exemplar{
{
TimestampMs: 1638316800000,
Value: 1.23,
Labels: []v1.KeyValue{
{Key: "trace:id", Value: &v1.AnyValue{Value: &v1.AnyValue_StringValue{StringValue: "trace-123"}}},
},
},
{
TimestampMs: 1638316801000,
Value: 4.56,
Labels: []v1.KeyValue{
{Key: "trace:id", Value: &v1.AnyValue{Value: &v1.AnyValue_StringValue{StringValue: "trace-456"}}},
},
},
}
frame := transformExemplarToFrame("test", &tempopb.TimeSeries{
Labels: nil,
Samples: nil,
PromLabels: "",
Exemplars: exemplars,
})
assert.NotNil(t, frame)
assert.Equal(t, "test", frame.RefID)
assert.Equal(t, "exemplar", frame.Name)
assert.Len(t, frame.Fields, 3)
assert.Equal(t, time.UnixMilli(1638316800000), frame.Fields[0].At(0))
assert.Equal(t, 1.23, frame.Fields[1].At(0))
assert.Equal(t, "trace-123", frame.Fields[2].At(0))
assert.Equal(t, time.UnixMilli(1638316801000), frame.Fields[0].At(1))
assert.Equal(t, 4.56, frame.Fields[1].At(1))
assert.Equal(t, "trace-456", frame.Fields[2].At(1))
}
func TestTransformExemplarToFrame_ExemplarWithoutTraceId(t *testing.T) {
exemplars := []tempopb.Exemplar{
{
TimestampMs: 1638316800000,
Value: 1.23,
Labels: []v1.KeyValue{},
},
}
frame := transformExemplarToFrame("test", &tempopb.TimeSeries{
Labels: nil,
Samples: nil,
PromLabels: "",
Exemplars: exemplars,
})
assert.NotNil(t, frame)
assert.Equal(t, "test", frame.RefID)
assert.Equal(t, "exemplar", frame.Name)
assert.Len(t, frame.Fields, 3)
assert.Equal(t, time.UnixMilli(1638316800000), frame.Fields[0].At(0))
assert.Equal(t, 1.23, frame.Fields[1].At(0))
assert.Equal(t, "", frame.Fields[2].At(0))
}