From ac7580e6205012010c265cbd4b5f5c1aea67cb2b Mon Sep 17 00:00:00 2001 From: cheetah Date: Mon, 20 Jan 2025 13:30:17 +0100 Subject: [PATCH] added flashpart unit test --- commands/s19-tree.go | 2 +- flashpart/flashpart.go | 29 +++++++++++++++++++++++------ flashpart/flashpart_test.go | 22 ++++++++++++++++++++++ go.mod | 6 +++++- go.sum | 9 +++++++++ s19/reader.go | 2 +- 6 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 flashpart/flashpart_test.go diff --git a/commands/s19-tree.go b/commands/s19-tree.go index 5faf54d..2bbf7ec 100644 --- a/commands/s19-tree.go +++ b/commands/s19-tree.go @@ -42,7 +42,7 @@ func (command *S19TreeCommand) Execute(args []string) error { // fpHeader := flashpart.ParseFlashPartHeader(records[segment.SliceStart].Data) log.Info().Msg( - fmt.Sprintf("Index: %d, Media-ID: 0x%02X, Partition Size: 0x%08X / %d bytes, Partition Tag: %s", + fmt.Sprintf("Index: %d, Media-ID: 0x%02X, Partition Size: 0x%08X / %d bytes, Partition Tag: '%s'", index, fpHeader.MediaID, fpHeader.TotalSize, diff --git a/flashpart/flashpart.go b/flashpart/flashpart.go index 238ff97..a951fed 100644 --- a/flashpart/flashpart.go +++ b/flashpart/flashpart.go @@ -3,12 +3,13 @@ package flashpart import "encoding/binary" type FlashPartHeader struct { - MediaID byte - Byte1 byte - Byte2 byte - Byte3 byte + MediaID byte + Byte1 byte + Byte2 byte + Byte3 byte + TotalSize uint32 - RawSize uint32 + RawSize uint32 // total - 32 VersionText string // 16byte raw []byte @@ -25,7 +26,7 @@ func ParseFlashPartHeader(data []byte) (fph *FlashPartHeader) { Byte3: data[3], TotalSize: binary.LittleEndian.Uint32(data[4:8]), - VersionText: string(data[15:]), + VersionText: string(data[16:]), raw: data, } @@ -53,6 +54,22 @@ func (fph *FlashPartHeader) AdjustTotalSize(size uint32) { fph.raw[4+i] = b } } +func (fph *FlashPartHeader) AdjustName(name string) { + // truncate if too long + if len(name) > 16 { + name = name[:16] + } + + for i := 16; i < 32; i++ { // copy version string + charIndex := i - 16 + if charIndex > len(name)-1 { + fph.raw[i] = 0x20 + } else { + fph.raw[i] = name[charIndex] + } + } + fph.VersionText = string(fph.raw[16:]) +} func (fph *FlashPartHeader) GetBytes() []byte { return fph.raw } diff --git a/flashpart/flashpart_test.go b/flashpart/flashpart_test.go new file mode 100644 index 0000000..6173b3c --- /dev/null +++ b/flashpart/flashpart_test.go @@ -0,0 +1,22 @@ +package flashpart_test + +import ( + "encoding/hex" + "testing" + + "git.cheetah.cat/cheetah/moto-flash-data/flashpart" + "github.com/stretchr/testify/assert" +) + +func Test1(t *testing.T) { + bytes, _ := hex.DecodeString("8032f60c2028140000000000000000006933342e3030302e3934323630202020") + res := flashpart.ParseFlashPartHeader(bytes) + + assert.Equal(t, uint8(0x80), res.MediaID) + assert.Equal(t, uint32(0x142820), res.TotalSize) + assert.Equal(t, "i34.000.94260 ", res.VersionText) + + res.AdjustName("test") + assert.Equal(t, "test ", res.VersionText) + +} diff --git a/go.mod b/go.mod index 8f042d8..87d9d65 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module git.cheetah.cat/cheetah/moto-flash-data -go 1.20 +go 1.22.5 require ( github.com/jessevdk/go-flags v1.5.0 @@ -8,7 +8,11 @@ require ( ) require ( + github.com/davecgh/go-spew v1.1.1 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/stretchr/testify v1.10.0 // indirect golang.org/x/sys v0.29.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index b3f7c37..08725cc 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,6 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= @@ -10,12 +12,19 @@ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/s19/reader.go b/s19/reader.go index a89409c..a95a342 100644 --- a/s19/reader.go +++ b/s19/reader.go @@ -122,7 +122,7 @@ func (fr *S19Reader) Close() error { return fr.File.Close() } -func (_ *S19Reader) DetectAddressRanges(records []*SRecord) []AddressRange { +func (*S19Reader) DetectAddressRanges(records []*SRecord) []AddressRange { // Sort records by address sort.Slice(records, func(i, j int) bool { return records[i].Address < records[j].Address