github.com/koko1123/flow-go-1@v0.29.6/network/codec/cbor/codec_test.go (about) 1 package cbor_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 "github.com/stretchr/testify/require" 8 9 "github.com/koko1123/flow-go-1/network/codec" 10 "github.com/koko1123/flow-go-1/network/codec/cbor" 11 "github.com/koko1123/flow-go-1/utils/unittest" 12 ) 13 14 func TestCodec_Decode(t *testing.T) { 15 t.Parallel() 16 17 c := cbor.NewCodec() 18 19 t.Run("decodes message successfully", func(t *testing.T) { 20 t.Parallel() 21 22 data := unittest.ProposalFixture() 23 encoded, err := c.Encode(data) 24 require.NoError(t, err) 25 26 decoded, err := c.Decode(encoded) 27 require.NoError(t, err) 28 require.Equal(t, data, decoded) 29 }) 30 31 t.Run("returns error when data is empty", func(t *testing.T) { 32 t.Parallel() 33 34 decoded, err := c.Decode(nil) 35 assert.Nil(t, decoded) 36 assert.True(t, codec.IsErrInvalidEncoding(err)) 37 38 decoded, err = c.Decode([]byte{}) 39 assert.Nil(t, decoded) 40 assert.True(t, codec.IsErrInvalidEncoding(err)) 41 }) 42 43 t.Run("returns error when message code is invalid", func(t *testing.T) { 44 t.Parallel() 45 46 decoded, err := c.Decode([]byte{codec.CodeMin}) 47 assert.Nil(t, decoded) 48 assert.True(t, codec.IsErrUnknownMsgCode(err)) 49 50 decoded, err = c.Decode([]byte{codec.CodeMax}) 51 assert.Nil(t, decoded) 52 assert.True(t, codec.IsErrUnknownMsgCode(err)) 53 54 decoded, err = c.Decode([]byte{codec.CodeMin - 1}) 55 assert.Nil(t, decoded) 56 assert.True(t, codec.IsErrUnknownMsgCode(err)) 57 58 decoded, err = c.Decode([]byte{codec.CodeMax + 1}) 59 assert.Nil(t, decoded) 60 assert.True(t, codec.IsErrUnknownMsgCode(err)) 61 }) 62 63 t.Run("returns error when unmarshalling fails - empty", func(t *testing.T) { 64 t.Parallel() 65 66 decoded, err := c.Decode([]byte{codec.CodeBlockProposal}) 67 assert.Nil(t, decoded) 68 assert.True(t, codec.IsErrMsgUnmarshal(err)) 69 }) 70 71 t.Run("returns error when unmarshalling fails - wrong type", func(t *testing.T) { 72 t.Parallel() 73 74 data := unittest.ProposalFixture() 75 encoded, err := c.Encode(data) 76 require.NoError(t, err) 77 78 encoded[0] = codec.CodeCollectionGuarantee 79 80 decoded, err := c.Decode(encoded) 81 assert.Nil(t, decoded) 82 assert.True(t, codec.IsErrMsgUnmarshal(err)) 83 }) 84 85 t.Run("returns error when unmarshalling fails - corrupt", func(t *testing.T) { 86 t.Parallel() 87 88 data := unittest.ProposalFixture() 89 encoded, err := c.Encode(data) 90 require.NoError(t, err) 91 92 encoded[2] = 0x20 // corrupt payload 93 94 decoded, err := c.Decode(encoded) 95 assert.Nil(t, decoded) 96 assert.True(t, codec.IsErrMsgUnmarshal(err)) 97 }) 98 }