[#91] protogen: Support unpacked repeated uint64 fields
All checks were successful
DCO action / DCO (pull_request) Successful in 1m18s
Tests and linters / Lint (pull_request) Successful in 1m31s
Tests and linters / Tests (1.20) (pull_request) Successful in 1m39s
Tests and linters / Tests (1.19) (pull_request) Successful in 1m45s
Tests and linters / Tests with -race (pull_request) Successful in 2m21s
All checks were successful
DCO action / DCO (pull_request) Successful in 1m18s
Tests and linters / Lint (pull_request) Successful in 1m31s
Tests and linters / Tests (1.20) (pull_request) Successful in 1m39s
Tests and linters / Tests (1.19) (pull_request) Successful in 1m45s
Tests and linters / Tests with -race (pull_request) Successful in 2m21s
Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
parent
3639563d80
commit
f517e39491
4 changed files with 113 additions and 17 deletions
|
@ -1,12 +1,14 @@
|
|||
package proto_test
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"math"
|
||||
"testing"
|
||||
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/proto"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/util/proto/test"
|
||||
"github.com/stretchr/testify/require"
|
||||
"google.golang.org/protobuf/encoding/protowire"
|
||||
goproto "google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
|
@ -33,6 +35,8 @@ type stableRepPrimitives struct {
|
|||
FieldD []uint32
|
||||
FieldE []int64
|
||||
FieldF []uint64
|
||||
|
||||
FieldFu []uint64
|
||||
}
|
||||
|
||||
const (
|
||||
|
@ -185,6 +189,20 @@ func (s *stableRepPrimitives) stableMarshal(buf []byte, wrongField bool) ([]byte
|
|||
}
|
||||
i += proto.RepeatedUInt64Marshal(fieldNum, buf, s.FieldF)
|
||||
|
||||
fieldNum = 7
|
||||
if wrongField {
|
||||
fieldNum++
|
||||
}
|
||||
for j := range s.FieldFu {
|
||||
{
|
||||
prefix := protowire.EncodeTag(
|
||||
protowire.Number(fieldNum),
|
||||
protowire.VarintType)
|
||||
i += binary.PutUvarint(buf[i:], uint64(prefix))
|
||||
i += binary.PutUvarint(buf[i:], s.FieldFu[j])
|
||||
}
|
||||
}
|
||||
|
||||
return buf, nil
|
||||
}
|
||||
|
||||
|
@ -196,7 +214,12 @@ func (s *stableRepPrimitives) stableSize() int {
|
|||
f5, _ := proto.RepeatedInt64Size(5, s.FieldE)
|
||||
f6, _ := proto.RepeatedUInt64Size(6, s.FieldF)
|
||||
|
||||
return f1 + f2 + f3 + f4 + f5 + f6
|
||||
var f7 int
|
||||
for i := range s.FieldFu {
|
||||
f7 += protowire.SizeGroup(protowire.Number(7), protowire.SizeVarint(s.FieldFu[i]))
|
||||
}
|
||||
|
||||
return f1 + f2 + f3 + f4 + f5 + f6 + f7
|
||||
}
|
||||
|
||||
func TestBytesMarshal(t *testing.T) {
|
||||
|
@ -404,6 +427,22 @@ func TestRepeatedUInt64Marshal(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestRepeatedUInt64MarshalUnpacked(t *testing.T) {
|
||||
t.Run("not empty", func(t *testing.T) {
|
||||
data := []uint64{0, 1, 2, 3, 4, 5}
|
||||
testRepeatedUInt64MarshalUnpacked(t, data, false)
|
||||
testRepeatedUInt64MarshalUnpacked(t, data, true)
|
||||
})
|
||||
|
||||
t.Run("empty", func(t *testing.T) {
|
||||
testRepeatedUInt64MarshalUnpacked(t, []uint64{}, false)
|
||||
})
|
||||
|
||||
t.Run("nil", func(t *testing.T) {
|
||||
testRepeatedUInt64MarshalUnpacked(t, nil, false)
|
||||
})
|
||||
}
|
||||
|
||||
func TestFixed64Marshal(t *testing.T) {
|
||||
t.Run("zero", func(t *testing.T) {
|
||||
testFixed64Marshal(t, 0, false)
|
||||
|
@ -738,6 +777,24 @@ func testRepeatedUInt64Marshal(t *testing.T, n []uint64, wrongField bool) {
|
|||
}
|
||||
}
|
||||
|
||||
func testRepeatedUInt64MarshalUnpacked(t *testing.T, n []uint64, wrongField bool) {
|
||||
var (
|
||||
custom = stableRepPrimitives{FieldFu: n}
|
||||
transport = test.RepPrimitives{FieldFu: n}
|
||||
)
|
||||
|
||||
result := testRepMarshal(t, custom, &transport, wrongField)
|
||||
|
||||
if !wrongField {
|
||||
require.Len(t, result.FieldFu, len(n))
|
||||
if len(n) > 0 {
|
||||
require.Equal(t, n, result.FieldFu)
|
||||
}
|
||||
} else {
|
||||
require.Len(t, result.FieldFu, 0)
|
||||
}
|
||||
}
|
||||
|
||||
func testFixed64Marshal(t *testing.T, n uint64, wrongField bool) {
|
||||
var (
|
||||
custom = stablePrimitives{FieldI: n}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue