added flashpart unit test

master
cheetah 1 month ago
parent cd14f2e2ee
commit ac7580e620

@ -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,

@ -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
}

@ -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)
}

@ -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
)

@ -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=

@ -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

Loading…
Cancel
Save