From 27401b6ea459921a6152ab1744da1618358465f4 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sun, 10 Jul 2022 13:18:30 -0600 Subject: Rename the module, mv pkg lib --- lib/binstruct/binstruct_test.go | 60 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 lib/binstruct/binstruct_test.go (limited to 'lib/binstruct/binstruct_test.go') diff --git a/lib/binstruct/binstruct_test.go b/lib/binstruct/binstruct_test.go new file mode 100644 index 0000000..542746f --- /dev/null +++ b/lib/binstruct/binstruct_test.go @@ -0,0 +1,60 @@ +package binstruct_test + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "git.lukeshu.com/btrfs-progs-ng/lib/binstruct" +) + +func TestSmoke(t *testing.T) { + type UUID [16]byte + type PhysicalAddr int64 + type DevItem struct { + DeviceID uint64 `bin:"off=0x0, siz=0x8"` // device id + + NumBytes uint64 `bin:"off=0x8, siz=0x8"` // number of bytes + NumBytesUsed uint64 `bin:"off=0x10, siz=0x8"` // number of bytes used + + IOOptimalAlign uint32 `bin:"off=0x18, siz=0x4"` // optimal I/O align + IOOptimalWidth uint32 `bin:"off=0x1c, siz=0x4"` // optimal I/O width + IOMinSize uint32 `bin:"off=0x20, siz=0x4"` // minimal I/O size (sector size) + + Type uint64 `bin:"off=0x24, siz=0x8"` // type + Generation uint64 `bin:"off=0x2c, siz=0x8"` // generation + StartOffset uint64 `bin:"off=0x34, siz=0x8"` // start offset + DevGroup uint32 `bin:"off=0x3c, siz=0x4"` // dev group + SeekSpeed uint8 `bin:"off=0x40, siz=0x1"` // seek speed + Bandwidth uint8 `bin:"off=0x41, siz=0x1"` // bandwidth + + DevUUID UUID `bin:"off=0x42, siz=0x10"` // device UUID + FSUUID UUID `bin:"off=0x52, siz=0x10"` // FS UUID + + binstruct.End `bin:"off=0x62"` + } + type TestType struct { + Magic [5]byte `bin:"off=0x0,siz=0x5"` + Dev DevItem `bin:"off=0x5,siz=0x62"` + Addr PhysicalAddr `bin:"off=0x67, siz=0x8"` + + binstruct.End `bin:"off=0x6F"` + } + + assert.Equal(t, 0x6F, binstruct.StaticSize(TestType{})) + + input := TestType{} + copy(input.Magic[:], "mAgIc") + input.Dev.DeviceID = 12 + input.Addr = 0xBEEF + + bs, err := binstruct.Marshal(input) + assert.NoError(t, err) + assert.Equal(t, 0x6F, len(bs)) + + var output TestType + n, err := binstruct.Unmarshal(bs, &output) + assert.NoError(t, err) + assert.Equal(t, 0x6F, n) + assert.Equal(t, input, output) +} -- cgit v1.2.3-2-g168b