github.com/insolar/vanilla@v0.0.0-20201023172447-248fdf805322/protokit/binary_test.go (about) 1 // Copyright 2020 Insolar Network Ltd. 2 // All rights reserved. 3 // This material is licensed under the Insolar License version 1.0, 4 // available at https://github.com/insolar/assured-ledger/blob/master/LICENSE.md. 5 6 package protokit 7 8 import ( 9 "errors" 10 "io" 11 "testing" 12 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestBinaryProtoSize(t *testing.T) { 17 require.Zero(t, BinaryProtoSize(0)) 18 require.Equal(t, 2, BinaryProtoSize(1)) 19 } 20 21 func TestBinaryMarshalTo(t *testing.T) { 22 var b [3]byte 23 24 n, err := BinaryMarshalTo(b[:], false, func(b []byte) (int, error) { 25 return 0, nil 26 }) 27 require.NoError(t, err) 28 require.Zero(t, n) 29 30 n, err = BinaryMarshalTo(b[:], true, func(b []byte) (int, error) { 31 return 0, nil 32 }) 33 require.NoError(t, err) 34 require.Equal(t, 1, n) 35 36 n, err = BinaryMarshalTo(b[:], false, func(b []byte) (int, error) { 37 b[0] = 99 38 return 1, nil 39 }) 40 require.NoError(t, err) 41 require.Equal(t, 2, n) 42 require.Equal(t, [...]byte{BinaryMarker, 99, 0}, b) 43 44 n, err = BinaryMarshalTo(b[:], true, func(b []byte) (int, error) { 45 b[0] = 99 46 return 1, nil 47 }) 48 require.NoError(t, err) 49 require.Equal(t, 2, n) 50 require.Equal(t, [...]byte{BinaryMarker, 99, 0}, b) 51 52 n, err = BinaryMarshalTo(b[:], false, func(b []byte) (int, error) { 53 return 1, errors.New("stub") 54 }) 55 require.Error(t, err) 56 require.Zero(t, n) 57 } 58 59 func TestBinaryMarshalToSizedBuffer(t *testing.T) { 60 var b [3]byte 61 62 n, err := BinaryMarshalToSizedBuffer(b[:], false, func(b []byte) (int, error) { 63 return 0, nil 64 }) 65 require.NoError(t, err) 66 require.Zero(t, n) 67 68 n, err = BinaryMarshalToSizedBuffer(b[:], true, func(b []byte) (int, error) { 69 return 0, nil 70 }) 71 require.NoError(t, err) 72 require.Equal(t, 1, n) 73 74 n, err = BinaryMarshalToSizedBuffer(b[:], false, func(b []byte) (int, error) { 75 require.Equal(t, 2, len(b)) 76 b[1] = 99 77 return 1, nil 78 }) 79 require.NoError(t, err) 80 require.Equal(t, 2, n) 81 require.Equal(t, [...]byte{0, BinaryMarker, 99}, b) 82 83 n, err = BinaryMarshalToSizedBuffer(b[:], true, func(b []byte) (int, error) { 84 require.Equal(t, 2, len(b)) 85 b[1] = 99 86 return 1, nil 87 }) 88 require.NoError(t, err) 89 require.Equal(t, 2, n) 90 require.Equal(t, [...]byte{0, BinaryMarker, 99}, b) 91 92 n, err = BinaryMarshalToSizedBuffer(b[:], false, func(b []byte) (int, error) { 93 return 1, errors.New("stub") 94 }) 95 require.Error(t, err) 96 require.Zero(t, n) 97 98 n, err = BinaryMarshalToSizedBuffer(b[:], false, func(b []byte) (int, error) { 99 return 3, nil 100 }) 101 require.Error(t, io.ErrShortBuffer) 102 require.Zero(t, n) 103 } 104 105 func TestBinaryUnmarshal(t *testing.T) { 106 err := BinaryUnmarshal(nil, func(b []byte) error { 107 require.Nil(t, b) 108 return nil 109 }) 110 require.NoError(t, err) 111 112 err = BinaryUnmarshal(make([]byte, 0, 1), func(b []byte) error { 113 require.Nil(t, b) 114 return nil 115 }) 116 require.NoError(t, err) 117 118 err = BinaryUnmarshal([]byte{BinaryMarker}, func(b []byte) error { 119 require.NotNil(t, b) 120 require.Zero(t, len(b)) 121 return nil 122 }) 123 require.NoError(t, err) 124 125 err = BinaryUnmarshal([]byte{BinaryMarker, 99, 0}, func(b []byte) error { 126 require.Equal(t, 2, len(b)) 127 require.Equal(t, []byte{99, 0}, b) 128 return nil 129 }) 130 require.NoError(t, err) 131 132 err = BinaryUnmarshal([]byte{BinaryMarker, 99, 0}, func(b []byte) error { 133 require.Equal(t, 2, len(b)) 134 return errors.New("stub") 135 }) 136 require.Error(t, err) 137 138 err = BinaryUnmarshal([]byte{11, 99, 0}, func(b []byte) error { 139 t.FailNow() 140 return nil 141 }) 142 require.Error(t, err) 143 }