138 lines
4.1 KiB
Go
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))
|
|
}
|