Skip to content

Commit fec0cd0

Browse files
authored
Merge pull request #674 from onflow/petera/export-converts
Export grpc and http convert methods and cleanup event encoding code
2 parents 5a1fc9c + 2cd9452 commit fec0cd0

13 files changed

Lines changed: 488 additions & 443 deletions

File tree

Lines changed: 105 additions & 100 deletions
Large diffs are not rendered by default.
Lines changed: 82 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,13 @@
1616
* limitations under the License.
1717
*/
1818

19-
package grpc
19+
package convert
2020

2121
import (
2222
"testing"
2323
"time"
2424

2525
"github.com/onflow/cadence"
26-
"github.com/onflow/cadence/encoding/ccf"
27-
"github.com/onflow/flow/protobuf/go/flow/entities"
2826
"github.com/stretchr/testify/assert"
2927
"github.com/stretchr/testify/require"
3028

@@ -35,9 +33,9 @@ import (
3533
func TestConvert_Account(t *testing.T) {
3634
accountA := test.AccountGenerator().New()
3735

38-
msg := accountToMessage(*accountA)
36+
msg := AccountToMessage(*accountA)
3937

40-
accountB, err := messageToAccount(msg)
38+
accountB, err := MessageToAccount(msg)
4139
require.NoError(t, err)
4240

4341
assert.Equal(t, *accountA, accountB)
@@ -46,9 +44,9 @@ func TestConvert_Account(t *testing.T) {
4644
func TestConvert_AccountKey(t *testing.T) {
4745
keyA := test.AccountKeyGenerator().New()
4846

49-
msg := accountKeyToMessage(keyA)
47+
msg := AccountKeyToMessage(keyA)
5048

51-
keyB, err := messageToAccountKey(msg)
49+
keyB, err := MessageToAccountKey(msg)
5250
require.NoError(t, err)
5351

5452
assert.Equal(t, keyA, keyB)
@@ -57,23 +55,23 @@ func TestConvert_AccountKey(t *testing.T) {
5755
func TestConvert_Block(t *testing.T) {
5856
blockA := test.BlockGenerator().New()
5957

60-
msg, err := blockToMessage(*blockA)
58+
msg, err := BlockToMessage(*blockA)
6159
require.NoError(t, err)
6260

63-
blockB, err := messageToBlock(msg)
61+
blockB, err := MessageToBlock(msg)
6462
require.NoError(t, err)
6563

6664
assert.Equal(t, *blockA, blockB)
6765

6866
t.Run("Without timestamp", func(t *testing.T) {
6967
blockA := test.BlockGenerator().New()
7068

71-
msg, err := blockToMessage(*blockA)
69+
msg, err := BlockToMessage(*blockA)
7270
require.NoError(t, err)
7371

7472
msg.Timestamp = nil
7573

76-
blockB, err = messageToBlock(msg)
74+
blockB, err = MessageToBlock(msg)
7775
require.NoError(t, err)
7876

7977
assert.Equal(t, time.Time{}, blockB.Timestamp)
@@ -83,69 +81,69 @@ func TestConvert_Block(t *testing.T) {
8381
func TestConvert_BlockHeader(t *testing.T) {
8482
headerA := test.BlockHeaderGenerator().New()
8583

86-
msg, err := blockHeaderToMessage(headerA)
84+
msg, err := BlockHeaderToMessage(headerA)
8785
require.NoError(t, err)
8886

89-
headerB, err := messageToBlockHeader(msg)
87+
headerB, err := MessageToBlockHeader(msg)
9088
require.NoError(t, err)
9189

9290
assert.Equal(t, headerA, headerB)
9391

9492
t.Run("Without timestamp", func(t *testing.T) {
9593
headerA := test.BlockHeaderGenerator().New()
9694

97-
msg, err := blockHeaderToMessage(headerA)
95+
msg, err := BlockHeaderToMessage(headerA)
9896
require.NoError(t, err)
9997

10098
msg.Timestamp = nil
10199

102-
headerB, err = messageToBlockHeader(msg)
100+
headerB, err = MessageToBlockHeader(msg)
103101
require.NoError(t, err)
104102

105103
assert.Equal(t, time.Time{}, headerB.Timestamp)
106104
})
107105
}
108106

109107
func TestConvert_CadenceValue(t *testing.T) {
110-
t.Run("Valid value", func(t *testing.T) {
108+
t.Run("Valid jsoncdc encoded value", func(t *testing.T) {
111109
valueA := cadence.NewInt(42)
112110

113-
msg, err := cadenceValueToMessage(valueA)
111+
msg, err := CadenceValueToMessage(valueA, flow.EventEncodingVersionJSONCDC)
114112
require.NoError(t, err)
115113

116-
valueB, err := messageToCadenceValue(msg, nil)
114+
valueB, err := MessageToCadenceValue(msg, nil)
117115
require.NoError(t, err)
118116

119117
assert.Equal(t, valueA, valueB)
120118
})
121119

122-
t.Run("Invalid message", func(t *testing.T) {
123-
msg := []byte("invalid JSON-CDC bytes")
124-
125-
value, err := messageToCadenceValue(msg, nil)
126-
assert.Error(t, err)
127-
assert.Nil(t, value)
128-
})
129-
130-
t.Run("CCF encoded value", func(t *testing.T) {
120+
t.Run("Valid CCF encoded value", func(t *testing.T) {
131121
valueA := cadence.NewInt(42)
132122

133-
msg, err := ccf.Encode(valueA)
123+
msg, err := CadenceValueToMessage(valueA, flow.EventEncodingVersionCCF)
134124
require.NoError(t, err)
135125

136-
valueB, err := messageToCadenceValue(msg, nil)
126+
valueB, err := MessageToCadenceValue(msg, nil)
137127
require.NoError(t, err)
138128

139129
assert.Equal(t, valueA, valueB)
140130
})
131+
132+
t.Run("Invalid message", func(t *testing.T) {
133+
msg := []byte("invalid JSON-CDC bytes")
134+
135+
value, err := MessageToCadenceValue(msg, nil)
136+
assert.Error(t, err)
137+
assert.Nil(t, value)
138+
})
141139
}
142140

143141
func TestConvert_Collection(t *testing.T) {
144142
colA := test.CollectionGenerator().New()
145143

146-
msg := collectionToMessage(*colA)
144+
msg := CollectionToMessage(*colA)
147145

148-
colB, err := messageToCollection(msg)
146+
colB, err := MessageToCollection(msg)
149147
require.NoError(t, err)
150148

151149
assert.Equal(t, *colA, colB)
@@ -154,9 +152,9 @@ func TestConvert_Collection(t *testing.T) {
154152
func TestConvert_CollectionGuarantee(t *testing.T) {
155153
cgA := test.CollectionGuaranteeGenerator().New()
156154

157-
msg := collectionGuaranteeToMessage(*cgA)
155+
msg := CollectionGuaranteeToMessage(*cgA)
158156

159-
cgB, err := messageToCollectionGuarantee(msg)
157+
cgB, err := MessageToCollectionGuarantee(msg)
160158
require.NoError(t, err)
161159

162160
assert.Equal(t, *cgA, cgB)
@@ -165,9 +163,9 @@ func TestConvert_CollectionGuarantee(t *testing.T) {
165163
func TestConvert_BlockSeal(t *testing.T) {
166164
bsA := test.BlockSealGenerator().New()
167165

168-
msg := blockSealToMessage(*bsA)
166+
msg := BlockSealToMessage(*bsA)
169167

170-
bsB, err := messageToBlockSeal(msg)
168+
bsB, err := MessageToBlockSeal(msg)
171169
require.NoError(t, err)
172170

173171
assert.Equal(t, *bsA, bsB)
@@ -182,9 +180,9 @@ func TestConvert_CollectionGuarantees(t *testing.T) {
182180
cgs.New(),
183181
}
184182

185-
msg := collectionGuaranteesToMessages(cgsA)
183+
msg := CollectionGuaranteesToMessages(cgsA)
186184

187-
cgsB, err := messagesToCollectionGuarantees(msg)
185+
cgsB, err := MessagesToCollectionGuarantees(msg)
188186
require.NoError(t, err)
189187

190188
assert.Equal(t, cgsA, cgsB)
@@ -199,9 +197,9 @@ func TestConvert_BlockSeals(t *testing.T) {
199197
bss.New(),
200198
}
201199

202-
msg := blockSealsToMessages(bssA)
200+
msg := BlockSealsToMessages(bssA)
203201

204-
bssB, err := messagesToBlockSeals(msg)
202+
bssB, err := MessagesToBlockSeals(msg)
205203
require.NoError(t, err)
206204

207205
assert.Equal(t, bssA, bssB)
@@ -210,13 +208,11 @@ func TestConvert_BlockSeals(t *testing.T) {
210208
func TestConvert_Event(t *testing.T) {
211209

212210
t.Run("JSON-CDC encoded payload", func(t *testing.T) {
213-
eventA := test.EventGenerator().
214-
WithEncoding(entities.EventEncodingVersion_JSON_CDC_V0).
215-
New()
216-
msg, err := eventToMessage(eventA)
211+
eventA := test.EventGenerator(flow.EventEncodingVersionJSONCDC).New()
212+
msg, err := EventToMessage(eventA, flow.EventEncodingVersionJSONCDC)
217213
require.NoError(t, err)
218214

219-
eventB, err := messageToEvent(msg, nil)
215+
eventB, err := MessageToEvent(msg, nil)
220216
require.NoError(t, err)
221217

222218
// Force evaluation of type ID, which is cached in type.
@@ -227,18 +223,12 @@ func TestConvert_Event(t *testing.T) {
227223
})
228224

229225
t.Run("CCF encoded payload", func(t *testing.T) {
230-
eventA := test.EventGenerator().
231-
WithEncoding(entities.EventEncodingVersion_CCF_V0).
232-
New()
226+
eventA := test.EventGenerator(flow.EventEncodingVersionCCF).New()
233227

234-
msg, err := eventToMessage(eventA)
228+
msg, err := EventToMessage(eventA, flow.EventEncodingVersionCCF)
235229
require.NoError(t, err)
236230

237-
// explicitly re-encode the payload using CCF
238-
msg.Payload, err = ccf.Encode(eventA.Value)
239-
require.NoError(t, err)
240-
241-
eventB, err := messageToEvent(msg, nil)
231+
eventB, err := MessageToEvent(msg, nil)
242232
require.NoError(t, err)
243233

244234
// Force evaluation of type ID, which is cached in type.
@@ -252,8 +242,8 @@ func TestConvert_Event(t *testing.T) {
252242
func TestConvert_Identifier(t *testing.T) {
253243
idA := test.IdentifierGenerator().New()
254244

255-
msg := identifierToMessage(idA)
256-
idB := messageToIdentifier(msg)
245+
msg := IdentifierToMessage(idA)
246+
idB := MessageToIdentifier(msg)
257247

258248
assert.Equal(t, idA, idB)
259249
}
@@ -267,8 +257,8 @@ func TestConvert_Identifiers(t *testing.T) {
267257
ids.New(),
268258
}
269259

270-
msg := identifiersToMessages(idsA)
271-
idsB := messagesToIdentifiers(msg)
260+
msg := IdentifiersToMessages(idsA)
261+
idsB := MessagesToIdentifiers(msg)
272262

273263
assert.Equal(t, idsA, idsB)
274264
}
@@ -278,10 +268,10 @@ func TestConvert_Transaction(t *testing.T) {
278268
txA := test.TransactionGenerator().New()
279269
txA.Arguments = nil
280270

281-
msg, err := transactionToMessage(*txA)
271+
msg, err := TransactionToMessage(*txA)
282272
require.NoError(t, err)
283273

284-
txB, err := messageToTransaction(msg)
274+
txB, err := MessageToTransaction(msg)
285275
require.NoError(t, err)
286276

287277
assert.Equal(t, txA.ID(), txB.ID())
@@ -290,40 +280,59 @@ func TestConvert_Transaction(t *testing.T) {
290280
t.Run("With arguments", func(t *testing.T) {
291281
txA := test.TransactionGenerator().New()
292282

293-
msg, err := transactionToMessage(*txA)
283+
msg, err := TransactionToMessage(*txA)
294284
require.NoError(t, err)
295285

296-
txB, err := messageToTransaction(msg)
286+
txB, err := MessageToTransaction(msg)
297287
require.NoError(t, err)
298288

299289
assert.Equal(t, txA.ID(), txB.ID())
300290
})
301291
}
302292

303293
func TestConvert_TransactionResult(t *testing.T) {
304-
resultA := test.TransactionResultGenerator().New()
294+
t.Run("with JSON-CDC encoded events", func(t *testing.T) {
295+
resultA := test.TransactionResultGenerator(flow.EventEncodingVersionJSONCDC).New()
305296

306-
msg, err := transactionResultToMessage(resultA)
297+
msg, err := TransactionResultToMessage(resultA, flow.EventEncodingVersionJSONCDC)
307298

308-
resultB, err := messageToTransactionResult(msg, nil)
309-
require.NoError(t, err)
299+
resultB, err := MessageToTransactionResult(msg, nil)
300+
require.NoError(t, err)
310301

311-
// Force evaluation of type ID, which is cached in type.
312-
// Necessary for equality check below
313-
for _, event := range resultB.Events {
314-
_ = event.Value.Type().ID()
315-
}
302+
// Force evaluation of type ID, which is cached in type.
303+
// Necessary for equality check below
304+
for _, event := range resultB.Events {
305+
_ = event.Value.Type().ID()
306+
}
307+
308+
assert.Equal(t, resultA, resultB)
309+
})
310+
311+
t.Run("with CCF encoded events", func(t *testing.T) {
312+
resultA := test.TransactionResultGenerator(flow.EventEncodingVersionCCF).New()
316313

317-
assert.Equal(t, resultA, resultB)
314+
msg, err := TransactionResultToMessage(resultA, flow.EventEncodingVersionCCF)
315+
316+
resultB, err := MessageToTransactionResult(msg, nil)
317+
require.NoError(t, err)
318+
319+
// Force evaluation of type ID, which is cached in type.
320+
// Necessary for equality check below
321+
for _, event := range resultB.Events {
322+
_ = event.Value.Type().ID()
323+
}
324+
325+
assert.Equal(t, resultA, resultB)
326+
})
318327
}
319328

320329
func TestConvert_ExecutionData(t *testing.T) {
321330
executionDataA := test.ExecutionDataGenerator().New()
322331

323-
msg, err := blockExecutionDataToMessage(executionDataA)
332+
msg, err := BlockExecutionDataToMessage(executionDataA)
324333
require.NoError(t, err)
325334

326-
executionDataB, err := messageToBlockExecutionData(msg)
335+
executionDataB, err := MessageToBlockExecutionData(msg)
327336
require.NoError(t, err)
328337

329338
assert.Equal(t, executionDataA.BlockID[:], executionDataB.BlockID[:])

0 commit comments

Comments
 (0)