mirror of https://github.com/poanetwork/gecko.git
154 lines
3.0 KiB
Go
154 lines
3.0 KiB
Go
|
// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
|
||
|
// See the file LICENSE for licensing terms.
|
||
|
|
||
|
package wrappers
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestPackerByte(t *testing.T) {
|
||
|
p := Packer{MaxSize: 1}
|
||
|
|
||
|
p.PackByte(0x01)
|
||
|
|
||
|
if p.Errored() {
|
||
|
t.Fatal(p.Err)
|
||
|
}
|
||
|
|
||
|
if size := len(p.Bytes); size != 1 {
|
||
|
t.Fatalf("Packer.PackByte wrote %d byte(s) but expected %d byte(s)", size, 1)
|
||
|
}
|
||
|
|
||
|
expected := []byte{0x01}
|
||
|
if !bytes.Equal(p.Bytes, expected) {
|
||
|
t.Fatalf("Packer.PackByte wrote:\n%v\nExpected:\n%v", p.Bytes, expected)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestPackerShort(t *testing.T) {
|
||
|
p := Packer{MaxSize: 2}
|
||
|
|
||
|
p.PackShort(0x0102)
|
||
|
|
||
|
if p.Errored() {
|
||
|
t.Fatal(p.Err)
|
||
|
}
|
||
|
|
||
|
if size := len(p.Bytes); size != 2 {
|
||
|
t.Fatalf("Packer.PackShort wrote %d byte(s) but expected %d byte(s)", size, 2)
|
||
|
}
|
||
|
|
||
|
expected := []byte{0x01, 0x02}
|
||
|
if !bytes.Equal(p.Bytes, expected) {
|
||
|
t.Fatalf("Packer.PackShort wrote:\n%v\nExpected:\n%v", p.Bytes, expected)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestPackerInt(t *testing.T) {
|
||
|
p := Packer{MaxSize: 4}
|
||
|
|
||
|
p.PackInt(0x01020304)
|
||
|
|
||
|
if p.Errored() {
|
||
|
t.Fatal(p.Err)
|
||
|
}
|
||
|
|
||
|
if size := len(p.Bytes); size != 4 {
|
||
|
t.Fatalf("Packer.PackInt wrote %d byte(s) but expected %d byte(s)", size, 4)
|
||
|
}
|
||
|
|
||
|
expected := []byte{0x01, 0x02, 0x03, 0x04}
|
||
|
if !bytes.Equal(p.Bytes, expected) {
|
||
|
t.Fatalf("Packer.PackInt wrote:\n%v\nExpected:\n%v", p.Bytes, expected)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestPackerLong(t *testing.T) {
|
||
|
p := Packer{MaxSize: 8}
|
||
|
|
||
|
p.PackLong(0x0102030405060708)
|
||
|
|
||
|
if p.Errored() {
|
||
|
t.Fatal(p.Err)
|
||
|
}
|
||
|
|
||
|
if size := len(p.Bytes); size != 8 {
|
||
|
t.Fatalf("Packer.PackLong wrote %d byte(s) but expected %d byte(s)", size, 8)
|
||
|
}
|
||
|
|
||
|
expected := []byte{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}
|
||
|
if !bytes.Equal(p.Bytes, expected) {
|
||
|
t.Fatalf("Packer.PackLong wrote:\n%v\nExpected:\n%v", p.Bytes, expected)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestPackerString(t *testing.T) {
|
||
|
p := Packer{MaxSize: 5}
|
||
|
|
||
|
p.PackStr("Ava")
|
||
|
|
||
|
if p.Errored() {
|
||
|
t.Fatal(p.Err)
|
||
|
}
|
||
|
|
||
|
if size := len(p.Bytes); size != 5 {
|
||
|
t.Fatalf("Packer.PackStr wrote %d byte(s) but expected %d byte(s)", size, 5)
|
||
|
}
|
||
|
|
||
|
expected := []byte{0x00, 0x03, 0x41, 0x76, 0x61}
|
||
|
if !bytes.Equal(p.Bytes, expected) {
|
||
|
t.Fatalf("Packer.PackStr wrote:\n%v\nExpected:\n%v", p.Bytes, expected)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestPacker(t *testing.T) {
|
||
|
packer := Packer{
|
||
|
MaxSize: 3,
|
||
|
}
|
||
|
|
||
|
if packer.Errored() {
|
||
|
t.Fatalf("Packer has error %s", packer.Err)
|
||
|
}
|
||
|
|
||
|
packer.PackShort(17)
|
||
|
if len(packer.Bytes) != 2 {
|
||
|
t.Fatalf("Wrong byte length")
|
||
|
}
|
||
|
|
||
|
packer.PackShort(1)
|
||
|
if !packer.Errored() {
|
||
|
t.Fatalf("Packer should have error")
|
||
|
}
|
||
|
|
||
|
newPacker := Packer{
|
||
|
Bytes: packer.Bytes,
|
||
|
}
|
||
|
|
||
|
if newPacker.UnpackShort() != 17 {
|
||
|
t.Fatalf("Unpacked wrong value")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestPackBool(t *testing.T) {
|
||
|
p := Packer{MaxSize: 3}
|
||
|
p.PackBool(false)
|
||
|
p.PackBool(true)
|
||
|
p.PackBool(false)
|
||
|
if p.Errored() {
|
||
|
t.Fatal("should have been able to pack 3 bools")
|
||
|
}
|
||
|
|
||
|
p2 := Packer{Bytes: p.Bytes}
|
||
|
bool1, bool2, bool3 := p2.UnpackBool(), p2.UnpackBool(), p2.UnpackBool()
|
||
|
|
||
|
if p.Errored() {
|
||
|
t.Fatalf("errors while unpacking bools: %v", p.Errs)
|
||
|
}
|
||
|
|
||
|
if bool1 || !bool2 || bool3 {
|
||
|
t.Fatal("got back wrong values")
|
||
|
}
|
||
|
}
|