refactor
This commit is contained in:
155
varn/buffer_test.go
Normal file
155
varn/buffer_test.go
Normal file
@@ -0,0 +1,155 @@
|
||||
package varn_test
|
||||
|
||||
import (
|
||||
"io"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"git.intruders.space/public/opentimestamps/varn"
|
||||
)
|
||||
|
||||
func TestNewBuffer(t *testing.T) {
|
||||
data := []byte{0x01, 0x02, 0x03}
|
||||
buf := varn.NewBuffer(data)
|
||||
|
||||
// Test the first byte to verify initialization
|
||||
b, err := buf.ReadByte()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, byte(0x01), b)
|
||||
|
||||
// Test reading the second byte
|
||||
b, err = buf.ReadByte()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, byte(0x02), b)
|
||||
|
||||
// Test reading the third byte
|
||||
b, err = buf.ReadByte()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, byte(0x03), b)
|
||||
|
||||
// Test reading beyond the buffer
|
||||
_, err = buf.ReadByte()
|
||||
assert.ErrorIs(t, err, io.EOF)
|
||||
|
||||
// Test reading from an empty buffer
|
||||
emptyBuf := varn.NewBuffer([]byte{})
|
||||
_, err = emptyBuf.ReadByte()
|
||||
assert.ErrorIs(t, err, io.EOF)
|
||||
|
||||
// Test reading from a nil buffer
|
||||
nilBuf := varn.NewBuffer(nil)
|
||||
_, err = nilBuf.ReadByte()
|
||||
assert.ErrorIs(t, err, io.EOF)
|
||||
|
||||
// Test reading from a buffer with a single byte
|
||||
singleByteBuf := varn.NewBuffer([]byte{0xFF})
|
||||
b, err = singleByteBuf.ReadByte()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, byte(0xFF), b)
|
||||
}
|
||||
|
||||
func TestReadBytes(t *testing.T) {
|
||||
data := []byte{0x01, 0x02, 0x03, 0x04, 0x05}
|
||||
buf := varn.NewBuffer(data)
|
||||
|
||||
// Read 3 bytes
|
||||
bytes, err := buf.ReadBytes(3)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, []byte{0x01, 0x02, 0x03}, bytes)
|
||||
|
||||
// Read 2 more bytes
|
||||
bytes, err = buf.ReadBytes(2)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, []byte{0x04, 0x05}, bytes)
|
||||
|
||||
// Try to read beyond the buffer
|
||||
_, err = buf.ReadBytes(1)
|
||||
assert.ErrorIs(t, err, io.EOF)
|
||||
}
|
||||
|
||||
func TestReadByte(t *testing.T) {
|
||||
data := []byte{0x0A, 0x0B}
|
||||
buf := varn.NewBuffer(data)
|
||||
|
||||
// Read first byte
|
||||
b, err := buf.ReadByte()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, byte(0x0A), b)
|
||||
|
||||
// Read second byte
|
||||
b, err = buf.ReadByte()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, byte(0x0B), b)
|
||||
|
||||
// Try to read beyond the buffer
|
||||
_, err = buf.ReadByte()
|
||||
assert.ErrorIs(t, err, io.EOF)
|
||||
}
|
||||
|
||||
func TestReadVarUint(t *testing.T) {
|
||||
testCases := []struct {
|
||||
name string
|
||||
input []byte
|
||||
expected uint64
|
||||
}{
|
||||
{
|
||||
name: "Single byte",
|
||||
input: []byte{0x01},
|
||||
expected: 1,
|
||||
},
|
||||
{
|
||||
name: "Two bytes",
|
||||
input: []byte{0x81, 0x01}, // 129 in varint encoding
|
||||
expected: 129,
|
||||
},
|
||||
{
|
||||
name: "Large number",
|
||||
input: []byte{0xFF, 0xFF, 0xFF, 0xFF, 0x01}, // 536870911 in varint encoding
|
||||
expected: 536870911,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
buf := varn.NewBuffer(tc.input)
|
||||
val, err := buf.ReadVarUint()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, tc.expected, val)
|
||||
})
|
||||
}
|
||||
|
||||
// Test EOF
|
||||
buf := varn.NewBuffer([]byte{0x81}) // Incomplete varint
|
||||
_, err := buf.ReadVarUint()
|
||||
assert.ErrorIs(t, err, io.EOF)
|
||||
}
|
||||
|
||||
func TestReadVarBytes(t *testing.T) {
|
||||
// Test normal case: length followed by data
|
||||
data := []byte{0x03, 0x0A, 0x0B, 0x0C, 0x0D}
|
||||
buf := varn.NewBuffer(data)
|
||||
|
||||
bytes, err := buf.ReadVarBytes()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, []byte{0x0A, 0x0B, 0x0C}, bytes)
|
||||
|
||||
// Test empty array
|
||||
data = []byte{0x00, 0x01}
|
||||
buf = varn.NewBuffer(data)
|
||||
|
||||
bytes, err = buf.ReadVarBytes()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, []byte{}, bytes)
|
||||
|
||||
// Test EOF during length read
|
||||
buf = varn.NewBuffer([]byte{})
|
||||
_, err = buf.ReadVarBytes()
|
||||
assert.ErrorIs(t, err, io.EOF)
|
||||
|
||||
// Test error during data read (insufficient bytes)
|
||||
data = []byte{0x03, 0x01}
|
||||
buf = varn.NewBuffer(data)
|
||||
_, err = buf.ReadVarBytes()
|
||||
assert.ErrorIs(t, err, io.ErrUnexpectedEOF)
|
||||
}
|
||||
Reference in New Issue
Block a user