1
2
3
4 package issue330
5
6 import (
7 fmt "fmt"
8 _ "github.com/gogo/protobuf/gogoproto"
9 github_com_gogo_protobuf_jsonpb "github.com/gogo/protobuf/jsonpb"
10 github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto"
11 proto "github.com/gogo/protobuf/proto"
12 math "math"
13 math_rand "math/rand"
14 testing "testing"
15 time "time"
16 )
17
18
19 var _ = proto.Marshal
20 var _ = fmt.Errorf
21 var _ = math.Inf
22
23 func TestObjectProto(t *testing.T) {
24 seed := time.Now().UnixNano()
25 popr := math_rand.New(math_rand.NewSource(seed))
26 p := NewPopulatedObject(popr, false)
27 dAtA, err := github_com_gogo_protobuf_proto.Marshal(p)
28 if err != nil {
29 t.Fatalf("seed = %d, err = %v", seed, err)
30 }
31 msg := &Object{}
32 if err := github_com_gogo_protobuf_proto.Unmarshal(dAtA, msg); err != nil {
33 t.Fatalf("seed = %d, err = %v", seed, err)
34 }
35 littlefuzz := make([]byte, len(dAtA))
36 copy(littlefuzz, dAtA)
37 for i := range dAtA {
38 dAtA[i] = byte(popr.Intn(256))
39 }
40 if !p.Equal(msg) {
41 t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p)
42 }
43 if len(littlefuzz) > 0 {
44 fuzzamount := 100
45 for i := 0; i < fuzzamount; i++ {
46 littlefuzz[popr.Intn(len(littlefuzz))] = byte(popr.Intn(256))
47 littlefuzz = append(littlefuzz, byte(popr.Intn(256)))
48 }
49
50 _ = github_com_gogo_protobuf_proto.Unmarshal(littlefuzz, msg)
51 }
52 }
53
54 func TestObjectMarshalTo(t *testing.T) {
55 seed := time.Now().UnixNano()
56 popr := math_rand.New(math_rand.NewSource(seed))
57 p := NewPopulatedObject(popr, false)
58 size := p.Size()
59 dAtA := make([]byte, size)
60 for i := range dAtA {
61 dAtA[i] = byte(popr.Intn(256))
62 }
63 _, err := p.MarshalTo(dAtA)
64 if err != nil {
65 t.Fatalf("seed = %d, err = %v", seed, err)
66 }
67 msg := &Object{}
68 if err := github_com_gogo_protobuf_proto.Unmarshal(dAtA, msg); err != nil {
69 t.Fatalf("seed = %d, err = %v", seed, err)
70 }
71 for i := range dAtA {
72 dAtA[i] = byte(popr.Intn(256))
73 }
74 if !p.Equal(msg) {
75 t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p)
76 }
77 }
78
79 func BenchmarkObjectProtoMarshal(b *testing.B) {
80 popr := math_rand.New(math_rand.NewSource(616))
81 total := 0
82 pops := make([]*Object, 10000)
83 for i := 0; i < 10000; i++ {
84 pops[i] = NewPopulatedObject(popr, false)
85 }
86 b.ResetTimer()
87 for i := 0; i < b.N; i++ {
88 dAtA, err := github_com_gogo_protobuf_proto.Marshal(pops[i%10000])
89 if err != nil {
90 panic(err)
91 }
92 total += len(dAtA)
93 }
94 b.SetBytes(int64(total / b.N))
95 }
96
97 func BenchmarkObjectProtoUnmarshal(b *testing.B) {
98 popr := math_rand.New(math_rand.NewSource(616))
99 total := 0
100 datas := make([][]byte, 10000)
101 for i := 0; i < 10000; i++ {
102 dAtA, err := github_com_gogo_protobuf_proto.Marshal(NewPopulatedObject(popr, false))
103 if err != nil {
104 panic(err)
105 }
106 datas[i] = dAtA
107 }
108 msg := &Object{}
109 b.ResetTimer()
110 for i := 0; i < b.N; i++ {
111 total += len(datas[i%10000])
112 if err := github_com_gogo_protobuf_proto.Unmarshal(datas[i%10000], msg); err != nil {
113 panic(err)
114 }
115 }
116 b.SetBytes(int64(total / b.N))
117 }
118
119 func TestObjectJSON(t *testing.T) {
120 seed := time.Now().UnixNano()
121 popr := math_rand.New(math_rand.NewSource(seed))
122 p := NewPopulatedObject(popr, true)
123 marshaler := github_com_gogo_protobuf_jsonpb.Marshaler{}
124 jsondata, err := marshaler.MarshalToString(p)
125 if err != nil {
126 t.Fatalf("seed = %d, err = %v", seed, err)
127 }
128 msg := &Object{}
129 err = github_com_gogo_protobuf_jsonpb.UnmarshalString(jsondata, msg)
130 if err != nil {
131 t.Fatalf("seed = %d, err = %v", seed, err)
132 }
133 if !p.Equal(msg) {
134 t.Fatalf("seed = %d, %#v !Json Equal %#v", seed, msg, p)
135 }
136 }
137 func TestObjectProtoText(t *testing.T) {
138 seed := time.Now().UnixNano()
139 popr := math_rand.New(math_rand.NewSource(seed))
140 p := NewPopulatedObject(popr, true)
141 dAtA := github_com_gogo_protobuf_proto.MarshalTextString(p)
142 msg := &Object{}
143 if err := github_com_gogo_protobuf_proto.UnmarshalText(dAtA, msg); err != nil {
144 t.Fatalf("seed = %d, err = %v", seed, err)
145 }
146 if !p.Equal(msg) {
147 t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p)
148 }
149 }
150
151 func TestObjectProtoCompactText(t *testing.T) {
152 seed := time.Now().UnixNano()
153 popr := math_rand.New(math_rand.NewSource(seed))
154 p := NewPopulatedObject(popr, true)
155 dAtA := github_com_gogo_protobuf_proto.CompactTextString(p)
156 msg := &Object{}
157 if err := github_com_gogo_protobuf_proto.UnmarshalText(dAtA, msg); err != nil {
158 t.Fatalf("seed = %d, err = %v", seed, err)
159 }
160 if !p.Equal(msg) {
161 t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p)
162 }
163 }
164
165 func TestObjectSize(t *testing.T) {
166 seed := time.Now().UnixNano()
167 popr := math_rand.New(math_rand.NewSource(seed))
168 p := NewPopulatedObject(popr, true)
169 size2 := github_com_gogo_protobuf_proto.Size(p)
170 dAtA, err := github_com_gogo_protobuf_proto.Marshal(p)
171 if err != nil {
172 t.Fatalf("seed = %d, err = %v", seed, err)
173 }
174 size := p.Size()
175 if len(dAtA) != size {
176 t.Errorf("seed = %d, size %v != marshalled size %v", seed, size, len(dAtA))
177 }
178 if size2 != size {
179 t.Errorf("seed = %d, size %v != before marshal proto.Size %v", seed, size, size2)
180 }
181 size3 := github_com_gogo_protobuf_proto.Size(p)
182 if size3 != size {
183 t.Errorf("seed = %d, size %v != after marshal proto.Size %v", seed, size, size3)
184 }
185 }
186
187 func BenchmarkObjectSize(b *testing.B) {
188 popr := math_rand.New(math_rand.NewSource(616))
189 total := 0
190 pops := make([]*Object, 1000)
191 for i := 0; i < 1000; i++ {
192 pops[i] = NewPopulatedObject(popr, false)
193 }
194 b.ResetTimer()
195 for i := 0; i < b.N; i++ {
196 total += pops[i%1000].Size()
197 }
198 b.SetBytes(int64(total / b.N))
199 }
200
201
202
View as plain text