1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 package deterministic
30
31 import (
32 "bytes"
33 "github.com/gogo/protobuf/proto"
34 "testing"
35 )
36
37 func getTestMap() map[string]string {
38 return map[string]string{
39 "a": "1",
40 "b": "2",
41 "c": "3",
42 "d": "4",
43 "e": "5",
44 "f": "6",
45 "g": "7",
46 "h": "8",
47 "i": "9",
48 "j": "10",
49 "k": "11",
50 "l": "12",
51 "m": "13",
52 "n": "14",
53 }
54
55 }
56
57 func TestOrderedMap(t *testing.T) {
58 var b proto.Buffer
59 m := getTestMap()
60 in := &OrderedMap{
61 StringMap: m,
62 }
63 if err := b.Marshal(in); err != nil {
64 t.Fatalf("Marshal failed: %v", err)
65 }
66 data1 := b.Bytes()
67 out := &OrderedMap{}
68 if err := proto.Unmarshal(data1, out); err != nil {
69 t.Fatal(err)
70 }
71 if err := in.VerboseEqual(out); err != nil {
72 t.Fatal(err)
73 }
74 data2, err := proto.Marshal(in)
75 if err != nil {
76 t.Fatal(err)
77 }
78 if bytes.Compare(data1, data2) != 0 {
79 t.Fatal("byte arrays are not the same\n", data1, "\n", data2)
80 }
81 }
82
83 func TestUnorderedMap(t *testing.T) {
84 m := getTestMap()
85 in := &UnorderedMap{
86 StringMap: m,
87 }
88 var b proto.Buffer
89 b.SetDeterministic(true)
90 if err := b.Marshal(in); err == nil {
91 t.Fatalf("Expected Marshal to return error rejecting deterministic flag")
92 }
93 }
94
95 func TestMapNoMarshaler(t *testing.T) {
96 m := getTestMap()
97 in := &MapNoMarshaler{
98 StringMap: m,
99 }
100
101 var b1 proto.Buffer
102 b1.SetDeterministic(true)
103 if err := b1.Marshal(in); err != nil {
104 t.Fatalf("Marshal failed: %v", err)
105 }
106 data1 := b1.Bytes()
107
108 out := &MapNoMarshaler{}
109 err := proto.Unmarshal(data1, out)
110 if err != nil {
111 t.Fatal(err)
112 }
113 if err := in.VerboseEqual(out); err != nil {
114 t.Fatal(err)
115 }
116
117 var b2 proto.Buffer
118 b2.SetDeterministic(true)
119 if err := b2.Marshal(in); err != nil {
120 t.Fatalf("Marshal failed: %v", err)
121 }
122 data2 := b2.Bytes()
123
124 if bytes.Compare(data1, data2) != 0 {
125 t.Fatal("byte arrays are not the same:\n", data1, "\n", data2)
126 }
127 }
128
129 func TestOrderedNestedMap(t *testing.T) {
130 var b proto.Buffer
131 in := &NestedOrderedMap{
132 StringMap: getTestMap(),
133 NestedMap: &NestedMap1{
134 NestedStringMap: getTestMap(),
135 },
136 }
137 if err := b.Marshal(in); err != nil {
138 t.Fatalf("Marshal failed: %v", err)
139 }
140 data1 := b.Bytes()
141 out := &NestedOrderedMap{}
142 if err := proto.Unmarshal(data1, out); err != nil {
143 t.Fatal(err)
144 }
145 if err := in.VerboseEqual(out); err != nil {
146 t.Fatal(err)
147 }
148 data2, err := proto.Marshal(in)
149 if err != nil {
150 t.Fatal(err)
151 }
152 if bytes.Compare(data1, data2) != 0 {
153 t.Fatal("byte arrays are not the same\n", data1, "\n", data2)
154 }
155 }
156
157 func TestUnorderedNestedMap(t *testing.T) {
158 in := &NestedUnorderedMap{
159 StringMap: getTestMap(),
160 NestedMap: &NestedMap2{
161 NestedStringMap: getTestMap(),
162 },
163 }
164 var b proto.Buffer
165 b.SetDeterministic(true)
166 if err := b.Marshal(in); err == nil {
167 t.Fatalf("Expected Marshal to return error rejecting deterministic flag")
168 }
169 }
170
171 func TestOrderedNestedStructMap(t *testing.T) {
172 var b proto.Buffer
173 m := getTestMap()
174 in := &NestedMap1{
175 NestedStringMap: m,
176 }
177 if err := b.Marshal(in); err != nil {
178 t.Fatalf("Marshal failed: %v", err)
179 }
180 data1 := b.Bytes()
181 out := &NestedMap1{}
182 if err := proto.Unmarshal(data1, out); err != nil {
183 t.Fatal(err)
184 }
185 if err := in.VerboseEqual(out); err != nil {
186 t.Fatal(err)
187 }
188 data2, err := proto.Marshal(in)
189 if err != nil {
190 t.Fatal(err)
191 }
192 if bytes.Compare(data1, data2) != 0 {
193 t.Fatal("byte arrays are not the same\n", data1, "\n", data2)
194 }
195 }
196
197 func TestUnorderedNestedStructMap(t *testing.T) {
198 m := getTestMap()
199 in := &NestedMap2{
200 NestedStringMap: m,
201 }
202 var b proto.Buffer
203 b.SetDeterministic(true)
204 if err := b.Marshal(in); err == nil {
205 t.Fatalf("Expected Marshal to return error rejecting deterministic flag")
206 }
207 }
208
View as plain text