1package binary
2
3import (
4 "bufio"
5 "bytes"
6 "encoding/binary"
7 "testing"
8
9 "github.com/go-git/go-git/v5/plumbing"
10 "github.com/stretchr/testify/suite"
11)
12
13type BinarySuite struct {
14 suite.Suite
15}
16
17func TestBinarySuite(t *testing.T) {
18 suite.Run(t, new(BinarySuite))
19}
20
21func (s *BinarySuite) TestRead() {
22 buf := bytes.NewBuffer(nil)
23 err := binary.Write(buf, binary.BigEndian, int64(42))
24 s.NoError(err)
25 err = binary.Write(buf, binary.BigEndian, int32(42))
26 s.NoError(err)
27
28 var i64 int64
29 var i32 int32
30 err = Read(buf, &i64, &i32)
31 s.NoError(err)
32 s.Equal(int64(42), i64)
33 s.Equal(int32(42), i32)
34}
35
36func (s *BinarySuite) TestReadUntil() {
37 buf := bytes.NewBuffer([]byte("foo bar"))
38
39 b, err := ReadUntil(buf, ' ')
40 s.NoError(err)
41 s.Len(b, 3)
42 s.Equal("foo", string(b))
43}
44
45func (s *BinarySuite) TestReadUntilFromBufioReader() {
46 buf := bufio.NewReader(bytes.NewBuffer([]byte("foo bar")))
47
48 b, err := ReadUntilFromBufioReader(buf, ' ')
49 s.NoError(err)
50 s.Len(b, 3)
51 s.Equal("foo", string(b))
52}
53
54func (s *BinarySuite) TestReadVariableWidthInt() {
55 buf := bytes.NewBuffer([]byte{129, 110})
56
57 i, err := ReadVariableWidthInt(buf)
58 s.NoError(err)
59 s.Equal(int64(366), i)
60}
61
62func (s *BinarySuite) TestReadVariableWidthIntShort() {
63 buf := bytes.NewBuffer([]byte{19})
64
65 i, err := ReadVariableWidthInt(buf)
66 s.NoError(err)
67 s.Equal(int64(19), i)
68}
69
70func (s *BinarySuite) TestReadUint32() {
71 buf := bytes.NewBuffer(nil)
72 err := binary.Write(buf, binary.BigEndian, uint32(42))
73 s.NoError(err)
74
75 i32, err := ReadUint32(buf)
76 s.NoError(err)
77 s.Equal(uint32(42), i32)
78}
79
80func (s *BinarySuite) TestReadUint16() {
81 buf := bytes.NewBuffer(nil)
82 err := binary.Write(buf, binary.BigEndian, uint16(42))
83 s.NoError(err)
84
85 i32, err := ReadUint16(buf)
86 s.NoError(err)
87 s.Equal(uint16(42), i32)
88}
89
90func (s *BinarySuite) TestReadHash() {
91 expected := plumbing.NewHash("43aec75c611f22c73b27ece2841e6ccca592f285")
92 buf := bytes.NewBuffer(nil)
93 err := binary.Write(buf, binary.BigEndian, expected)
94 s.NoError(err)
95
96 hash, err := ReadHash(buf)
97 s.NoError(err)
98 s.Equal(expected.String(), hash.String())
99}
100
101func (s *BinarySuite) TestIsBinary() {
102 buf := bytes.NewBuffer(nil)
103 buf.Write(bytes.Repeat([]byte{'A'}, sniffLen))
104 buf.Write([]byte{0})
105 ok, err := IsBinary(buf)
106 s.NoError(err)
107 s.False(ok)
108
109 buf.Reset()
110
111 buf.Write(bytes.Repeat([]byte{'A'}, sniffLen-1))
112 buf.Write([]byte{0})
113 ok, err = IsBinary(buf)
114 s.NoError(err)
115 s.True(ok)
116
117 buf.Reset()
118
119 buf.Write(bytes.Repeat([]byte{'A'}, 10))
120 ok, err = IsBinary(buf)
121 s.NoError(err)
122 s.False(ok)
123}