unknownproto: recognize packed and repeated primitive types (#7225)

* Fix canEncodeType for repeated fields

* Fix tests

* Remove duplicate tests

* Don't remove tests

Co-authored-by: Jack Zampolin <jack.zampolin@gmail.com>
This commit is contained in:
Amaury Martiny
2020-09-02 20:29:53 +00:00
committed by GitHub
co-authored by Jack Zampolin
parent da7a8e603f
commit cf394edabd
4 changed files with 403 additions and 159 deletions
+27 -34
View File
@@ -446,9 +446,9 @@ func TestRejectUnknownFieldsNested(t *testing.T) {
recv: new(testdata.TestVersion1),
wantErr: &errMismatchedWireType{
Type: "*testdata.TestVersion3",
TagNum: 1,
GotWireType: 2,
WantWireType: 0,
TagNum: 8,
GotWireType: 7,
WantWireType: 2,
},
},
{
@@ -463,13 +463,8 @@ func TestRejectUnknownFieldsNested(t *testing.T) {
},
},
},
recv: new(testdata.TestVersion4LoneNesting),
wantErr: &errMismatchedWireType{
Type: "*testdata.TestVersion4LoneNesting_Inner1_InnerInner",
TagNum: 1,
GotWireType: 2,
WantWireType: 0,
},
recv: new(testdata.TestVersion4LoneNesting),
wantErr: nil,
},
{
name: "From nested proto message, message index 1",
@@ -483,13 +478,8 @@ func TestRejectUnknownFieldsNested(t *testing.T) {
},
},
},
recv: new(testdata.TestVersion4LoneNesting),
wantErr: &errMismatchedWireType{
Type: "*testdata.TestVersion4LoneNesting_Inner2_InnerInner",
TagNum: 2,
GotWireType: 2,
WantWireType: 0,
},
recv: new(testdata.TestVersion4LoneNesting),
wantErr: nil,
},
}
@@ -684,9 +674,9 @@ func TestMismatchedTypes_Nested(t *testing.T) {
recv: new(testdata.TestVersion1),
wantErr: &errMismatchedWireType{
Type: "*testdata.TestVersion3",
TagNum: 1,
GotWireType: 2,
WantWireType: 0,
TagNum: 8,
GotWireType: 7,
WantWireType: 2,
},
},
{
@@ -701,13 +691,8 @@ func TestMismatchedTypes_Nested(t *testing.T) {
},
},
},
recv: new(testdata.TestVersion4LoneNesting),
wantErr: &errMismatchedWireType{
Type: "*testdata.TestVersion4LoneNesting_Inner1_InnerInner",
TagNum: 1,
GotWireType: 2,
WantWireType: 0,
},
recv: new(testdata.TestVersion4LoneNesting),
wantErr: nil,
},
{
name: "From nested proto message, message index 1",
@@ -721,13 +706,8 @@ func TestMismatchedTypes_Nested(t *testing.T) {
},
},
},
recv: new(testdata.TestVersion4LoneNesting),
wantErr: &errMismatchedWireType{
Type: "*testdata.TestVersion4LoneNesting_Inner2_InnerInner",
TagNum: 2,
GotWireType: 2,
WantWireType: 0,
},
recv: new(testdata.TestVersion4LoneNesting),
wantErr: nil,
},
}
@@ -746,6 +726,19 @@ func TestMismatchedTypes_Nested(t *testing.T) {
}
}
// Issue https://github.com/cosmos/cosmos-sdk/issues/7222, we need to ensure that repeated
// uint64 are recognized as packed.
func TestPackedEncoding(t *testing.T) {
data := testdata.TestRepeatedUints{Nums: []uint64{12, 13}}
marshalled, err := data.Marshal()
require.NoError(t, err)
unmarshalled := &testdata.TestRepeatedUints{}
_, err = RejectUnknownFields(marshalled, unmarshalled, false)
require.NoError(t, err)
}
func mustMarshal(msg proto.Message) []byte {
blob, err := proto.Marshal(msg)
if err != nil {