opentelemetry-collector/pdata/internal/unpacked_unmarshal_test.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)
}