opentelemetry-collector/pdata/pprofile/pb_test.go

78 lines
2.0 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package pprofile
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestProtoProfilesUnmarshalerError(t *testing.T) {
p := &ProtoUnmarshaler{}
_, err := p.UnmarshalProfiles([]byte("+$%"))
assert.Error(t, err)
}
func TestProtoSizer(t *testing.T) {
marshaler := &ProtoMarshaler{}
td := NewProfiles()
td.ResourceProfiles().AppendEmpty().
ScopeProfiles().AppendEmpty().
Profiles().AppendEmpty()
td.ProfilesDictionary().
StringTable().Append("foobar")
size := marshaler.ProfilesSize(td)
bytes, err := marshaler.MarshalProfiles(td)
require.NoError(t, err)
assert.Equal(t, len(bytes), size)
}
func TestProtoSizerEmptyProfiles(t *testing.T) {
sizer := &ProtoMarshaler{}
assert.Equal(t, 2, sizer.ProfilesSize(NewProfiles()))
}
func BenchmarkProfilesToProto(b *testing.B) {
marshaler := &ProtoMarshaler{}
profiles := generateBenchmarkProfiles(128)
b.ResetTimer()
for n := 0; n < b.N; n++ {
buf, err := marshaler.MarshalProfiles(profiles)
require.NoError(b, err)
assert.NotEmpty(b, buf)
}
}
func BenchmarkProfilesFromProto(b *testing.B) {
marshaler := &ProtoMarshaler{}
unmarshaler := &ProtoUnmarshaler{}
baseProfiles := generateBenchmarkProfiles(128)
buf, err := marshaler.MarshalProfiles(baseProfiles)
require.NoError(b, err)
assert.NotEmpty(b, buf)
b.ResetTimer()
b.ReportAllocs()
for n := 0; n < b.N; n++ {
profiles, err := unmarshaler.UnmarshalProfiles(buf)
require.NoError(b, err)
assert.Equal(b, baseProfiles.ResourceProfiles().Len(), profiles.ResourceProfiles().Len())
}
}
func generateBenchmarkProfiles(samplesCount int) Profiles {
md := NewProfiles()
ilm := md.ResourceProfiles().AppendEmpty().ScopeProfiles().AppendEmpty().Profiles().AppendEmpty()
ilm.Sample().EnsureCapacity(samplesCount)
for i := 0; i < samplesCount; i++ {
im := ilm.Sample().AppendEmpty()
im.SetLocationsStartIndex(2)
im.SetLocationsLength(10)
}
return md
}