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