64 lines
1.9 KiB
Go
64 lines
1.9 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package internal
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"math"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
otlpmetrics "go.opentelemetry.io/collector/pdata/internal/data/protogen/metrics/v1"
|
|
"go.opentelemetry.io/collector/pdata/internal/proto"
|
|
)
|
|
|
|
// For each repeated field in the OTLP proto that should be packed, check that we can unmarshal
|
|
// payloads where it is encoded as unpacked.
|
|
// The Protobuf spec recommends this for backwards compatibility purposes.
|
|
// We do not test profiles payloads since their proto definition is currently in development.
|
|
|
|
func appendTag(buf []byte, fieldNo byte, wireType proto.WireType) []byte {
|
|
return append(buf, (fieldNo<<3)|byte(wireType))
|
|
}
|
|
|
|
func appendVarint(buf []byte, v uint64) []byte {
|
|
n := proto.Sov(v)
|
|
for range n {
|
|
buf = append(buf, 0)
|
|
}
|
|
_ = proto.EncodeVarint(buf, len(buf), v)
|
|
return buf
|
|
}
|
|
|
|
func TestUnmarshalUnpackedHistogramDataPoint(t *testing.T) {
|
|
var pb []byte
|
|
pb = appendTag(pb, 6, proto.WireTypeI64) // bucket_counts
|
|
pb = binary.LittleEndian.AppendUint64(pb, 42)
|
|
pb = appendTag(pb, 7, proto.WireTypeI64) // explicit_bounds
|
|
pb = binary.LittleEndian.AppendUint64(pb, math.Float64bits(42.0))
|
|
|
|
var hdp otlpmetrics.HistogramDataPoint
|
|
err := UnmarshalProtoOrigHistogramDataPoint(&hdp, pb)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, otlpmetrics.HistogramDataPoint{
|
|
BucketCounts: []uint64{42},
|
|
ExplicitBounds: []float64{42.0},
|
|
}, hdp)
|
|
}
|
|
|
|
func TestUnmarshalUnpackedExponentialHistogramDataPoint_Buckets(t *testing.T) {
|
|
var pb []byte
|
|
pb = appendTag(pb, 2, proto.WireTypeVarint) // bucket_counts
|
|
pb = appendVarint(pb, 42)
|
|
|
|
var ehdpb otlpmetrics.ExponentialHistogramDataPoint_Buckets
|
|
err := UnmarshalProtoOrigExponentialHistogramDataPoint_Buckets(&ehdpb, pb)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, otlpmetrics.ExponentialHistogramDataPoint_Buckets{
|
|
BucketCounts: []uint64{42},
|
|
}, ehdpb)
|
|
}
|