prometheus/prompb/custom_test.go

90 lines
2.1 KiB
Go
Raw Permalink Normal View History

// Copyright 2023 The Prometheus Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package prompb
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestOptimizedMarshal(t *testing.T) {
var got []byte
tests := []struct {
name string
m *MinimizedWriteRequest
}{
// {
// name: "empty",
// m: &MinimizedWriteRequest{},
// },
{
name: "simple",
m: &MinimizedWriteRequest{
Timeseries: []MinimizedTimeSeries{
{
LabelSymbols: []uint32{
0, 10,
10, 3,
13, 3,
16, 6,
22, 3,
25, 5,
30, 3,
33, 7,
},
Samples: []Sample{{Value: 1, Timestamp: 0}},
Exemplars: []Exemplar{{Labels: []Label{{Name: "f", Value: "g"}}, Value: 1, Timestamp: 0}},
Histograms: nil,
},
{
LabelSymbols: []uint32{
0, 10,
10, 3,
13, 3,
16, 6,
22, 3,
25, 5,
30, 3,
33, 7,
},
Samples: []Sample{{Value: 2, Timestamp: 1}},
Exemplars: []Exemplar{{Labels: []Label{{Name: "h", Value: "i"}}, Value: 2, Timestamp: 1}},
Histograms: nil,
},
},
// 40 chars
Symbols: "abcdefghijabcdefghijabcdefghijabcdefghij",
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got = got[:0]
// should be the same as the standard marshal
expected, err := tt.m.Marshal()
require.NoError(t, err)
got, err = tt.m.OptimizedMarshal(got)
require.NoError(t, err)
require.Equal(t, expected, got)
// round trip
m := &MinimizedWriteRequest{}
require.NoError(t, m.Unmarshal(got))
require.Equal(t, tt.m, m)
})
}
}