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>
diff --git a/encoding/textpb/decode_test.go b/encoding/textpb/decode_test.go
index 14b7c7c..b463023 100644
--- a/encoding/textpb/decode_test.go
+++ b/encoding/textpb/decode_test.go
@@ -57,7 +57,7 @@
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 @@
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,59 +1263,41 @@
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{
- TypeUrl: "pb2.Nested",
- Value: []byte("some bytes"),
- },
+ 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{
- TypeUrl: "pb2.Nested",
- },
+ 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{
- Value: []byte("some bytes"),
- },
+ 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: {
- [foobar/pb2.Nested]: {
- opt_string: "embedded inside Any"
- opt_nested: {
- opt_string: "inception"
- }
+ 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"
}
}
`,
@@ -1331,110 +1312,82 @@
if err != nil {
t.Fatalf("error in binary marshaling message for Any.value: %v", err)
}
- return &pb2.KnownTypes{
- OptAny: &knownpb.Any{
- TypeUrl: "foobar/pb2.Nested",
- Value: b,
- },
+ 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: {
- [pb2.PartialRequired]: {
- opt_string: "embedded inside 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{
- TypeUrl: "pb2.PartialRequired",
- Value: b,
- },
+ 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]: {}
-}
-`,
- wantErr: true,
+ 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
-}
-`,
- wantErr: true,
+ 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,
}}
diff --git a/encoding/textpb/encode_test.go b/encoding/textpb/encode_test.go
index b2fed47..2d7b7de 100644
--- a/encoding/textpb/encode_test.go
+++ b/encoding/textpb/encode_test.go
@@ -10,13 +10,11 @@
"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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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"
`,