func newTestMessage() *pb.MyMessage { msg := &pb.MyMessage{ Count: proto.Int32(42), Name: proto.String("Dave"), Quote: proto.String(`"I didn't want to go."`), Pet: []string{"bunny", "kitty", "horsey"}, Inner: &pb.InnerMessage{ Host: proto.String("footrest.syd"), Port: proto.Int32(7001), Connected: proto.Bool(true), }, Others: []*pb.OtherMessage{ { Key: proto.Int64(0xdeadbeef), Value: []byte{1, 65, 7, 12}, }, { Weight: proto.Float32(6.022), Inner: &pb.InnerMessage{ Host: proto.String("lesha.mtv"), Port: proto.Int32(8002), }, }, }, Bikeshed: pb.MyMessage_BLUE.Enum(), Somegroup: &pb.MyMessage_SomeGroup{ GroupField: proto.Int32(8), }, // One normally wouldn't do this. // This is an undeclared tag 13, as a varint (wire type 0) with value 4. XXX_unrecognized: []byte{13<<3 | 0, 4}, } ext := &pb.Ext{ Data: proto.String("Big gobs for big rats"), } if err := proto.SetExtension(msg, pb.E_Ext_More, ext); err != nil { panic(err) } greetings := []string{"adg", "easy", "cow"} if err := proto.SetExtension(msg, pb.E_Greeting, greetings); err != nil { panic(err) } // Add an unknown extension. We marshal a pb.Ext, and fake the ID. b, err := proto.Marshal(&pb.Ext{Data: proto.String("3G skiing")}) if err != nil { panic(err) } b = append(proto.EncodeVarint(201<<3|proto.WireBytes), b...) proto.SetRawExtension(msg, 201, b) // Extensions can be plain fields, too, so let's test that. b = append(proto.EncodeVarint(202<<3|proto.WireVarint), 19) proto.SetRawExtension(msg, 202, b) return msg }
func TestPBNodeVerboseEqual(t *testing6.T) { popr := math_rand6.New(math_rand6.NewSource(time6.Now().UnixNano())) p := NewPopulatedPBNode(popr, false) data, err := code_google_com_p_gogoprotobuf_proto3.Marshal(p) if err != nil { panic(err) } msg := &PBNode{} if err := code_google_com_p_gogoprotobuf_proto3.Unmarshal(data, msg); err != nil { panic(err) } if err := p.VerboseEqual(msg); err != nil { t.Fatalf("%#v !VerboseEqual %#v, since %v", msg, p, err) } }
func BenchmarkPBLinkProtoMarshal(b *testing.B) { popr := math_rand.New(math_rand.NewSource(616)) total := 0 pops := make([]*PBLink, 10000) for i := 0; i < 10000; i++ { pops[i] = NewPopulatedPBLink(popr, false) } b.ResetTimer() for i := 0; i < b.N; i++ { data, err := code_google_com_p_gogoprotobuf_proto.Marshal(pops[i%10000]) if err != nil { panic(err) } total += len(data) } b.SetBytes(int64(total / b.N)) }
func TestPBNodeSize(t *testing4.T) { popr := math_rand4.New(math_rand4.NewSource(time4.Now().UnixNano())) p := NewPopulatedPBNode(popr, true) size2 := code_google_com_p_gogoprotobuf_proto2.Size(p) data, err := code_google_com_p_gogoprotobuf_proto2.Marshal(p) if err != nil { panic(err) } size := p.Size() if len(data) != size { t.Fatalf("size %v != marshalled size %v", size, len(data)) } if size2 != size { t.Fatalf("size %v != before marshal proto.Size %v", size, size2) } size3 := code_google_com_p_gogoprotobuf_proto2.Size(p) if size3 != size { t.Fatalf("size %v != after marshal proto.Size %v", size, size3) } }
func TestPBLinkProto(t *testing.T) { popr := math_rand.New(math_rand.NewSource(time.Now().UnixNano())) p := NewPopulatedPBLink(popr, false) data, err := code_google_com_p_gogoprotobuf_proto.Marshal(p) if err != nil { panic(err) } msg := &PBLink{} if err := code_google_com_p_gogoprotobuf_proto.Unmarshal(data, msg); err != nil { panic(err) } for i := range data { data[i] = byte(popr.Intn(256)) } if err := p.VerboseEqual(msg); err != nil { t.Fatalf("%#v !VerboseProto %#v, since %v", msg, p, err) } if !p.Equal(msg) { t.Fatalf("%#v !Proto %#v", msg, p) } }
func BenchmarkPBNodeProtoUnmarshal(b *testing.B) { popr := math_rand.New(math_rand.NewSource(616)) total := 0 datas := make([][]byte, 10000) for i := 0; i < 10000; i++ { data, err := code_google_com_p_gogoprotobuf_proto.Marshal(NewPopulatedPBNode(popr, false)) if err != nil { panic(err) } datas[i] = data } msg := &PBNode{} b.ResetTimer() for i := 0; i < b.N; i++ { total += len(datas[i%10000]) if err := code_google_com_p_gogoprotobuf_proto.Unmarshal(datas[i%10000], msg); err != nil { panic(err) } } b.SetBytes(int64(total / b.N)) }