mirror of
https://github.com/protocolbuffers/protobuf-go.git
synced 2025-02-04 03:39:48 +00:00
encoding/textpb: clean up tests on Any
Remove unnecessary v1 wrapping. Change most tests to operate on message Any directly. Change-Id: I19bbca6c1af72894f6a292aab8ebd09e0301a260 Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/168517 Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
This commit is contained in:
parent
ca46d8c924
commit
300cff08c7
@ -57,7 +57,7 @@ func TestUnmarshal(t *testing.T) {
|
||||
inputMessage proto.Message
|
||||
inputText string
|
||||
wantMessage proto.Message
|
||||
wantErr bool
|
||||
wantErr bool // TODO: Verify error message content.
|
||||
}{{
|
||||
desc: "proto2 empty message",
|
||||
inputMessage: &pb2.Scalars{},
|
||||
@ -1254,8 +1254,7 @@ opt_int32: 42
|
||||
inputText: `
|
||||
[pb2.message_set_extension]: {
|
||||
opt_string: "another not a messageset extension"
|
||||
}
|
||||
`,
|
||||
}`,
|
||||
wantMessage: func() proto.Message {
|
||||
m := &pb2.MessageSet{}
|
||||
setExtension(m, pb2.E_MessageSetExtension, &pb2.FakeMessageSetExtension{
|
||||
@ -1264,61 +1263,43 @@ opt_int32: 42
|
||||
return m
|
||||
}(),
|
||||
}, {
|
||||
// TODO: Change these tests to directly use knownpb.Any type instead once
|
||||
// type has been regenerated with V2 compiler.
|
||||
desc: "Any not expanded",
|
||||
inputMessage: &pb2.KnownTypes{},
|
||||
inputText: `opt_any: {
|
||||
inputMessage: &knownpb.Any{},
|
||||
inputText: `
|
||||
type_url: "pb2.Nested"
|
||||
value: "some bytes"
|
||||
}
|
||||
`,
|
||||
wantMessage: &pb2.KnownTypes{
|
||||
OptAny: &knownpb.Any{
|
||||
wantMessage: &knownpb.Any{
|
||||
TypeUrl: "pb2.Nested",
|
||||
Value: []byte("some bytes"),
|
||||
},
|
||||
},
|
||||
}, {
|
||||
desc: "Any not expanded missing value",
|
||||
inputMessage: &pb2.KnownTypes{},
|
||||
inputText: `opt_any: {
|
||||
type_url: "pb2.Nested"
|
||||
}
|
||||
`,
|
||||
wantMessage: &pb2.KnownTypes{
|
||||
OptAny: &knownpb.Any{
|
||||
inputMessage: &knownpb.Any{},
|
||||
inputText: `type_url: "pb2.Nested"`,
|
||||
wantMessage: &knownpb.Any{
|
||||
TypeUrl: "pb2.Nested",
|
||||
},
|
||||
},
|
||||
}, {
|
||||
desc: "Any not expanded missing type_url",
|
||||
inputMessage: &pb2.KnownTypes{},
|
||||
inputText: `opt_any: {
|
||||
value: "some bytes"
|
||||
}
|
||||
`,
|
||||
wantMessage: &pb2.KnownTypes{
|
||||
OptAny: &knownpb.Any{
|
||||
inputMessage: &knownpb.Any{},
|
||||
inputText: `value: "some bytes"`,
|
||||
wantMessage: &knownpb.Any{
|
||||
Value: []byte("some bytes"),
|
||||
},
|
||||
},
|
||||
}, {
|
||||
desc: "Any expanded",
|
||||
umo: func() textpb.UnmarshalOptions {
|
||||
m := &pb2.Nested{}
|
||||
resolver := preg.NewTypes(m.ProtoReflect().Type())
|
||||
return textpb.UnmarshalOptions{Resolver: resolver}
|
||||
}(),
|
||||
inputMessage: &pb2.KnownTypes{},
|
||||
inputText: `opt_any: {
|
||||
umo: textpb.UnmarshalOptions{
|
||||
Resolver: preg.NewTypes((&pb2.Nested{}).ProtoReflect().Type()),
|
||||
},
|
||||
inputMessage: &knownpb.Any{},
|
||||
inputText: `
|
||||
[foobar/pb2.Nested]: {
|
||||
opt_string: "embedded inside Any"
|
||||
opt_nested: {
|
||||
opt_string: "inception"
|
||||
}
|
||||
}
|
||||
}
|
||||
`,
|
||||
wantMessage: func() proto.Message {
|
||||
m := &pb2.Nested{
|
||||
@ -1331,110 +1312,82 @@ value: "some bytes"
|
||||
if err != nil {
|
||||
t.Fatalf("error in binary marshaling message for Any.value: %v", err)
|
||||
}
|
||||
return &pb2.KnownTypes{
|
||||
OptAny: &knownpb.Any{
|
||||
return &knownpb.Any{
|
||||
TypeUrl: "foobar/pb2.Nested",
|
||||
Value: b,
|
||||
},
|
||||
}
|
||||
}(),
|
||||
}, {
|
||||
desc: "Any expanded with empty value",
|
||||
umo: func() textpb.UnmarshalOptions {
|
||||
m := &pb2.Nested{}
|
||||
resolver := preg.NewTypes(m.ProtoReflect().Type())
|
||||
return textpb.UnmarshalOptions{Resolver: resolver}
|
||||
}(),
|
||||
inputMessage: &pb2.KnownTypes{},
|
||||
inputText: `opt_any: {
|
||||
[foo.com/pb2.Nested]: {}
|
||||
}
|
||||
`,
|
||||
wantMessage: &pb2.KnownTypes{
|
||||
OptAny: &knownpb.Any{
|
||||
TypeUrl: "foo.com/pb2.Nested",
|
||||
umo: textpb.UnmarshalOptions{
|
||||
Resolver: preg.NewTypes((&pb2.Nested{}).ProtoReflect().Type()),
|
||||
},
|
||||
inputMessage: &knownpb.Any{},
|
||||
inputText: `[foo.com/pb2.Nested]: {}`,
|
||||
wantMessage: &knownpb.Any{
|
||||
TypeUrl: "foo.com/pb2.Nested",
|
||||
},
|
||||
}, {
|
||||
desc: "Any expanded with missing required error",
|
||||
umo: func() textpb.UnmarshalOptions {
|
||||
m := &pb2.PartialRequired{}
|
||||
resolver := preg.NewTypes(m.ProtoReflect().Type())
|
||||
return textpb.UnmarshalOptions{Resolver: resolver}
|
||||
}(),
|
||||
inputMessage: &pb2.KnownTypes{},
|
||||
inputText: `opt_any: {
|
||||
umo: textpb.UnmarshalOptions{
|
||||
Resolver: preg.NewTypes((&pb2.PartialRequired{}).ProtoReflect().Type()),
|
||||
},
|
||||
inputMessage: &knownpb.Any{},
|
||||
inputText: `
|
||||
[pb2.PartialRequired]: {
|
||||
opt_string: "embedded inside Any"
|
||||
}
|
||||
}
|
||||
`,
|
||||
wantMessage: func() proto.Message {
|
||||
m := &pb2.PartialRequired{
|
||||
OptString: scalar.String("embedded inside Any"),
|
||||
}
|
||||
// TODO: Switch to V2 marshal when ready.
|
||||
b, err := protoV1.Marshal(m)
|
||||
// Ignore required not set error.
|
||||
if _, ok := err.(*protoV1.RequiredNotSetError); !ok {
|
||||
b, err := proto.MarshalOptions{Deterministic: true}.Marshal(m)
|
||||
// TODO: Marshal may fail due to required field not set at some
|
||||
// point. Need to ignore required not set error here.
|
||||
if err != nil {
|
||||
t.Fatalf("error in binary marshaling message for Any.value: %v", err)
|
||||
}
|
||||
return &pb2.KnownTypes{
|
||||
OptAny: &knownpb.Any{
|
||||
return &knownpb.Any{
|
||||
TypeUrl: "pb2.PartialRequired",
|
||||
Value: b,
|
||||
},
|
||||
}
|
||||
}(),
|
||||
wantErr: true,
|
||||
}, {
|
||||
desc: "Any expanded with unregistered type",
|
||||
umo: textpb.UnmarshalOptions{Resolver: preg.NewTypes()},
|
||||
inputMessage: &pb2.KnownTypes{},
|
||||
inputText: `opt_any: {
|
||||
[SomeMessage]: {}
|
||||
}
|
||||
`,
|
||||
inputMessage: &knownpb.Any{},
|
||||
inputText: `[SomeMessage]: {}`,
|
||||
wantErr: true,
|
||||
}, {
|
||||
desc: "Any expanded with invalid value",
|
||||
umo: func() textpb.UnmarshalOptions {
|
||||
m := &pb2.Nested{}
|
||||
resolver := preg.NewTypes(m.ProtoReflect().Type())
|
||||
return textpb.UnmarshalOptions{Resolver: resolver}
|
||||
}(),
|
||||
inputMessage: &pb2.KnownTypes{},
|
||||
inputText: `opt_any: {
|
||||
[pb2.Nested]: 123
|
||||
}
|
||||
`,
|
||||
umo: textpb.UnmarshalOptions{
|
||||
Resolver: preg.NewTypes((&pb2.Nested{}).ProtoReflect().Type()),
|
||||
},
|
||||
inputMessage: &knownpb.Any{},
|
||||
inputText: `[pb2.Nested]: 123`,
|
||||
wantErr: true,
|
||||
}, {
|
||||
desc: "Any expanded with unknown fields",
|
||||
umo: func() textpb.UnmarshalOptions {
|
||||
m := &pb2.Nested{}
|
||||
resolver := preg.NewTypes(m.ProtoReflect().Type())
|
||||
return textpb.UnmarshalOptions{Resolver: resolver}
|
||||
}(),
|
||||
inputMessage: &pb2.KnownTypes{},
|
||||
inputText: `opt_any: {
|
||||
umo: textpb.UnmarshalOptions{
|
||||
Resolver: preg.NewTypes((&pb2.Nested{}).ProtoReflect().Type()),
|
||||
},
|
||||
inputMessage: &knownpb.Any{},
|
||||
inputText: `
|
||||
[pb2.Nested]: {}
|
||||
unknown: ""
|
||||
}
|
||||
`,
|
||||
wantErr: true,
|
||||
}, {
|
||||
desc: "Any contains expanded and unexpanded fields",
|
||||
umo: func() textpb.UnmarshalOptions {
|
||||
m := &pb2.Nested{}
|
||||
resolver := preg.NewTypes(m.ProtoReflect().Type())
|
||||
return textpb.UnmarshalOptions{Resolver: resolver}
|
||||
}(),
|
||||
inputMessage: &pb2.KnownTypes{},
|
||||
inputText: `opt_any: {
|
||||
umo: textpb.UnmarshalOptions{
|
||||
Resolver: preg.NewTypes((&pb2.Nested{}).ProtoReflect().Type()),
|
||||
},
|
||||
inputMessage: &knownpb.Any{},
|
||||
inputText: `
|
||||
[pb2.Nested]: {}
|
||||
type_url: "pb2.Nested"
|
||||
}
|
||||
`,
|
||||
wantErr: true,
|
||||
}}
|
||||
|
@ -10,13 +10,11 @@ import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
protoV1 "github.com/golang/protobuf/proto"
|
||||
"github.com/golang/protobuf/protoapi"
|
||||
"github.com/golang/protobuf/v2/encoding/textpb"
|
||||
"github.com/golang/protobuf/v2/internal/detrand"
|
||||
"github.com/golang/protobuf/v2/internal/encoding/pack"
|
||||
"github.com/golang/protobuf/v2/internal/encoding/wire"
|
||||
"github.com/golang/protobuf/v2/internal/impl"
|
||||
"github.com/golang/protobuf/v2/internal/scalar"
|
||||
"github.com/golang/protobuf/v2/proto"
|
||||
preg "github.com/golang/protobuf/v2/reflect/protoregistry"
|
||||
@ -61,10 +59,6 @@ func setExtension(m proto.Message, xd *protoapi.ExtensionDesc, val interface{})
|
||||
knownFields.Set(wire.Number(xd.Field), pval)
|
||||
}
|
||||
|
||||
func wrapV1Message(any *knownpb.Any) proto.Message {
|
||||
return impl.Export{}.MessageOf(any).Interface()
|
||||
}
|
||||
|
||||
// dhex decodes a hex-string and returns the bytes and panics if s is invalid.
|
||||
func dhex(s string) []byte {
|
||||
b, err := hex.DecodeString(s)
|
||||
@ -80,7 +74,7 @@ func TestMarshal(t *testing.T) {
|
||||
mo textpb.MarshalOptions
|
||||
input proto.Message
|
||||
want string
|
||||
wantErr bool
|
||||
wantErr bool // TODO: Verify error message content.
|
||||
}{{
|
||||
desc: "proto2 optional scalars not set",
|
||||
input: &pb2.Scalars{},
|
||||
@ -1033,10 +1027,10 @@ opt_int32: 42
|
||||
if err != nil {
|
||||
t.Fatalf("error in binary marshaling message for Any.value: %v", err)
|
||||
}
|
||||
return wrapV1Message(&knownpb.Any{
|
||||
return &knownpb.Any{
|
||||
TypeUrl: "pb2.Nested",
|
||||
Value: b,
|
||||
})
|
||||
}
|
||||
}(),
|
||||
want: `type_url: "pb2.Nested"
|
||||
value: "\n\x13embedded inside Any\x12\x0b\n\tinception"
|
||||
@ -1057,10 +1051,10 @@ value: "\n\x13embedded inside Any\x12\x0b\n\tinception"
|
||||
if err != nil {
|
||||
t.Fatalf("error in binary marshaling message for Any.value: %v", err)
|
||||
}
|
||||
return wrapV1Message(&knownpb.Any{
|
||||
return &knownpb.Any{
|
||||
TypeUrl: "foo/pb2.Nested",
|
||||
Value: b,
|
||||
})
|
||||
}
|
||||
}(),
|
||||
want: `[foo/pb2.Nested]: {
|
||||
opt_string: "embedded inside Any"
|
||||
@ -1078,16 +1072,16 @@ value: "\n\x13embedded inside Any\x12\x0b\n\tinception"
|
||||
m := &pb2.PartialRequired{
|
||||
OptString: scalar.String("embedded inside Any"),
|
||||
}
|
||||
// TODO: Switch to V2 marshal when ready.
|
||||
b, err := protoV1.Marshal(m)
|
||||
// Ignore required not set error.
|
||||
if _, ok := err.(*protoV1.RequiredNotSetError); !ok {
|
||||
b, err := proto.MarshalOptions{Deterministic: true}.Marshal(m)
|
||||
// TODO: Marshal may fail due to required field not set at some
|
||||
// point. Need to ignore required not set error here.
|
||||
if err != nil {
|
||||
t.Fatalf("error in binary marshaling message for Any.value: %v", err)
|
||||
}
|
||||
return wrapV1Message(&knownpb.Any{
|
||||
return &knownpb.Any{
|
||||
TypeUrl: string(m.ProtoReflect().Type().FullName()),
|
||||
Value: b,
|
||||
})
|
||||
}
|
||||
}(),
|
||||
want: `[pb2.PartialRequired]: {
|
||||
opt_string: "embedded inside Any"
|
||||
@ -1099,10 +1093,10 @@ value: "\n\x13embedded inside Any\x12\x0b\n\tinception"
|
||||
mo: textpb.MarshalOptions{
|
||||
Resolver: preg.NewTypes((&pb2.Nested{}).ProtoReflect().Type()),
|
||||
},
|
||||
input: wrapV1Message(&knownpb.Any{
|
||||
input: &knownpb.Any{
|
||||
TypeUrl: "foo/pb2.Nested",
|
||||
Value: dhex("80"),
|
||||
}),
|
||||
},
|
||||
want: `type_url: "foo/pb2.Nested"
|
||||
value: "\x80"
|
||||
`,
|
||||
|
Loading…
x
Reference in New Issue
Block a user