From 60474066427f18f6d8d20383488c9afd8a1a2ba7 Mon Sep 17 00:00:00 2001 From: Paolo Calao Date: Tue, 11 Jan 2022 15:38:25 +0100 Subject: [PATCH 1/5] Add tests --- internal/ota/encoder_test.go | 51 +++++++++++++++++++++++++++++-- internal/ota/testdata/blink.bin | Bin 0 -> 11424 bytes internal/ota/testdata/blink.ota | Bin 0 -> 9603 bytes internal/ota/testdata/cloud.bin | Bin 0 -> 92112 bytes internal/ota/testdata/cloud.ota | Bin 0 -> 74977 bytes internal/ota/testdata/lorem.lzss | Bin 1745 -> 0 bytes internal/ota/testdata/lorem.txt | 9 ------ 7 files changed, 49 insertions(+), 11 deletions(-) create mode 100755 internal/ota/testdata/blink.bin create mode 100644 internal/ota/testdata/blink.ota create mode 100755 internal/ota/testdata/cloud.bin create mode 100644 internal/ota/testdata/cloud.ota delete mode 100644 internal/ota/testdata/lorem.lzss delete mode 100644 internal/ota/testdata/lorem.txt diff --git a/internal/ota/encoder_test.go b/internal/ota/encoder_test.go index b4af65b6..910638a7 100644 --- a/internal/ota/encoder_test.go +++ b/internal/ota/encoder_test.go @@ -20,6 +20,7 @@ package ota import ( "bytes" "encoding/hex" + "io/ioutil" "log" "fmt" @@ -38,7 +39,6 @@ func TestComputeCrc32Checksum(t *testing.T) { } func TestEncoderWrite(t *testing.T) { - // Setup test data data, _ := hex.DecodeString("DEADBEEF") // uncompressed, or 'ef 6b 77 de f0' (compressed w/ LZSS) @@ -47,7 +47,7 @@ func TestEncoderWrite(t *testing.T) { productID := "8054" // MRK Wifi 1010 otaWriter := NewWriter(&w, vendorID, productID) - defer otaWriter.Close() + otaWriter.Close() n, err := otaWriter.Write(data) if err != nil { @@ -72,3 +72,50 @@ func TestEncoderWrite(t *testing.T) { assert.Assert(t, res == 0) // 0 means equal } + +func TestEncoderWriteFiles(t *testing.T) { + tests := []struct { + name string + infile string + outfile string + }{ + { + name: "blink", + infile: "testdata/blink.bin", + outfile: "testdata/blink.ota", + }, + { + name: "cloud sketch", + infile: "testdata/cloud.bin", + outfile: "testdata/cloud.ota", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + input, err := ioutil.ReadFile(tt.infile) + if err != nil { + t.Fatal("couldn't open test file") + } + + want, err := ioutil.ReadFile(tt.outfile) + if err != nil { + t.Fatal("couldn't open test file") + } + + var got bytes.Buffer + vendorID := "2341" // Arduino + productID := "8057" // Nano 33 IoT + otaWriter := NewWriter(&got, vendorID, productID) + _, err = otaWriter.Write(input) + if err != nil { + t.Error(err) + } + otaWriter.Close() + + if !bytes.Equal(want, got.Bytes()) { + t.Error("encoding failed") + } + }) + } +} diff --git a/internal/ota/testdata/blink.bin b/internal/ota/testdata/blink.bin new file mode 100755 index 0000000000000000000000000000000000000000..b3731ec4d007ce8cf0235293c6b84f995bfc8caf GIT binary patch literal 11424 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 literal 0 HcmV?d00001 diff --git a/internal/ota/testdata/blink.ota b/internal/ota/testdata/blink.ota new file mode 100644 index 0000000000000000000000000000000000000000..c0006864b99a47682322372758fb3cead09ebf15 GIT binary patch literal 9603 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 literal 0 HcmV?d00001 diff --git a/internal/ota/testdata/cloud.bin b/internal/ota/testdata/cloud.bin new file mode 100755 index 0000000000000000000000000000000000000000..0bf2398affb51fafc93d4692d8770d6b7e00e182 GIT binary patch literal 92112 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%0AEaTl5wGMpz64FzW=zHbU)Qg_Q3X)`apY1 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 literal 0 HcmV?d00001 diff --git a/internal/ota/testdata/cloud.ota b/internal/ota/testdata/cloud.ota new file mode 100644 index 0000000000000000000000000000000000000000..867ec1821619cc970a283d6f3f6eeb396e9bcdbd GIT binary patch literal 74977 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 diff --git a/internal/ota/testdata/lorem.txt b/internal/ota/testdata/lorem.txt deleted file mode 100644 index c942efc7..00000000 --- a/internal/ota/testdata/lorem.txt +++ /dev/null @@ -1,9 +0,0 @@ -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ligula dui, imperdiet ut vulputate semper, sollicitudin ut eros. Aliquam erat volutpat. In hac habitasse platea dictumst. Nam non tortor sit amet mauris rutrum eleifend. Pellentesque vel justo nibh. Vivamus sem risus, pharetra eget egestas eget, venenatis a ipsum. Cras ultrices aliquam sagittis. Donec lacinia urna ac orci congue ut adipiscing dolor fringilla. Nullam nibh magna, bibendum vulputate ornare id, hendrerit et metus. Nullam dapibus neque quis mi laoreet molestie. Mauris et dui lacus, sit amet egestas purus. - -Donec accumsan elementum accumsan. Nullam gravida dictum diam non semper. Curabitur vel magna in velit accumsan pulvinar eget in lorem. Duis vitae ante velit, at hendrerit nibh. Pellentesque lacus urna, cursus ac semper sagittis, viverra at sem. Quisque ullamcorper odio dolor. In quis pretium lacus. Maecenas lacinia urna id massa congue blandit. Suspendisse dapibus eros sit amet neque fermentum imperdiet. Cras interdum pulvinar eleifend. Suspendisse molestie neque a risus imperdiet convallis. In interdum dignissim pharetra. Morbi lectus tortor, pulvinar quis eleifend in, placerat at risus. Sed aliquam diam at metus adipiscing blandit. - -Integer tristique metus vel ipsum pulvinar dignissim quis vel quam. Donec auctor aliquet bibendum. Morbi aliquet malesuada ultrices. Vivamus ac leo odio. Nam tristique eros non arcu porttitor non volutpat mauris tempus. Proin vestibulum suscipit pretium. Etiam elit tortor, dictum a gravida porta, congue id dolor. Duis eget est vitae elit facilisis blandit. Proin tincidunt felis et ipsum pharetra tempor. Fusce imperdiet vulputate magna, vel lacinia neque volutpat a. Vivamus a elit dolor. Aliquam sollicitudin dui et leo elementum mattis. Quisque suscipit, lorem id eleifend imperdiet, ipsum lorem pharetra purus, vel tempus lectus ligula id tortor. Morbi eget eros vel sapien scelerisque aliquam pellentesque sed turpis. Duis vel lorem non eros semper fringilla vitae vitae erat. - -Vivamus porttitor pulvinar tristique. Proin sed elit ipsum. Phasellus faucibus pulvinar dapibus. Praesent quis sem in purus ultrices imperdiet. Aenean ut nulla urna. In tristique tincidunt urna, nec adipiscing velit laoreet ut. Curabitur et ante sed libero tristique pellentesque. Quisque porttitor sodales ipsum ut rhoncus. Nunc vitae diam gravida orci aliquam cursus vitae ut sapien. Proin ullamcorper felis eu nulla dapibus nec faucibus odio hendrerit. Aenean lorem magna, fermentum in tristique sit amet, accumsan ut massa. Fusce tristique, lectus rhoncus commodo sagittis, ligula felis consequat arcu, id pretium enim dolor id mi. Donec facilisis pulvinar luctus. Pellentesque vitae condimentum risus. Nam quis elit a orci adipiscing bibendum. - -Ut quis felis lorem, dignissim varius turpis. Sed convallis dui semper mauris fermentum porta. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam erat volutpat. Proin lorem felis, scelerisque nec commodo non, porta eu metus. Nulla id augue a turpis mollis pellentesque. Aenean in lectus et leo tincidunt auctor eu interdum est. Nulla varius, lorem congue laoreet laoreet, felis quam ullamcorper ligula, non pellentesque dui ipsum quis odio. Etiam sit amet blandit leo. Aenean venenatis molestie eros, in fermentum ipsum dictum eget. Donec ultricies feugiat nisl, non molestie mi congue quis. Quisque mattis augue nec neque fringilla varius. Proin sollicitudin risus et elit pretium congue. Sed consequat eros sit amet felis pulvinar pulvinar. Morbi in turpis eu nulla cursus venenatis at ut urna. Donec vel lectus quis nisi aliquam varius. \ No newline at end of file From dc24808933aeb6c2cfd6c346ca99c6ff271c7287 Mon Sep 17 00:00:00 2001 From: Paolo Calao Date: Tue, 11 Jan 2022 18:36:52 +0100 Subject: [PATCH 2/5] Rename AsBytes to standard Bytes --- internal/ota/version.go | 4 ++-- internal/ota/version_test.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/ota/version.go b/internal/ota/version.go index 18dd72e9..5a34e238 100644 --- a/internal/ota/version.go +++ b/internal/ota/version.go @@ -32,8 +32,8 @@ type Version struct { PayloadBuildNum uint32 } -// AsBytes builds a 8 byte length representation of the Version Struct for the OTA update. -func (v *Version) AsBytes() []byte { +// Bytes builds a 8 byte length representation of the Version Struct for the OTA update. +func (v *Version) Bytes() []byte { version := []byte{0, 0, 0, 0, 0, 0, 0, 0} // Set compression diff --git a/internal/ota/version_test.go b/internal/ota/version_test.go index d5b83d33..e5c900af 100644 --- a/internal/ota/version_test.go +++ b/internal/ota/version_test.go @@ -34,7 +34,7 @@ func TestVersionWithCompressionEnabled(t *testing.T) { } expected := []byte{0, 0, 0, 0, 0, 0, 0, 0x40} - actual := version.AsBytes() + actual := version.Bytes() // create a tabwriter for formatting the output w := new(tabwriter.Writer) From 31c8956fef8efd826204025eb643aa305123e532 Mon Sep 17 00:00:00 2001 From: Paolo Calao Date: Tue, 11 Jan 2022 18:37:34 +0100 Subject: [PATCH 3/5] Refactor writer into encoder --- command/ota/generate.go | 12 ++--- internal/ota/encoder.go | 102 +++++++++++++---------------------- internal/ota/encoder_test.go | 18 +++---- 3 files changed, 47 insertions(+), 85 deletions(-) diff --git a/command/ota/generate.go b/command/ota/generate.go index dba44309..0d12131c 100644 --- a/command/ota/generate.go +++ b/command/ota/generate.go @@ -18,8 +18,8 @@ package ota import ( - "bytes" "errors" + "fmt" "io/ioutil" "os" @@ -51,17 +51,15 @@ func Generate(binFile string, outFile string, fqbn string) error { return err } - var w bytes.Buffer - otaWriter := inota.NewWriter(&w, arduinoVendorID, productID) - _, err = otaWriter.Write(data) + out, err := os.Create(outFile) if err != nil { return err } - otaWriter.Close() - err = ioutil.WriteFile(outFile, w.Bytes(), os.FileMode(0644)) + enc := inota.NewEncoder(out, arduinoVendorID, productID) + err = enc.Encode(data) if err != nil { - return err + return fmt.Errorf("failed to encode binary file: %w", err) } return nil diff --git a/internal/ota/encoder.go b/internal/ota/encoder.go index a9ab891e..b921e968 100644 --- a/internal/ota/encoder.go +++ b/internal/ota/encoder.go @@ -18,60 +18,48 @@ package ota import ( - "bufio" "encoding/binary" + "fmt" "hash/crc32" "io" "strconv" "github.com/arduino/arduino-cloud-cli/internal/lzss" - "github.com/juju/errors" ) -// A writer is a buffered, flushable writer. -type writer interface { - io.Writer - Flush() error -} - -// encoder encodes a binary into an .ota file. -type encoder struct { - // w is the writer that compressed bytes are written to. - w writer +// Encoder writes a binary to an output stream in the ota format. +type Encoder struct { + // w is the stream where encoded bytes are written. + w io.Writer - // vendorID is the ID of the board vendor + // vendorID is the ID of the board vendor. vendorID string - // is the ID of the board vendor is the ID of the board model + // productID is the ID of the board model. productID string } -// NewWriter creates a new `WriteCloser` for the the given VID/PID. -func NewWriter(w io.Writer, vendorID, productID string) io.WriteCloser { - bw, ok := w.(writer) - if !ok { - bw = bufio.NewWriter(w) - } - return &encoder{ - w: bw, +// NewEncoder creates a new ota encoder. +func NewEncoder(w io.Writer, vendorID, productID string) *Encoder { + return &Encoder{ + w: w, vendorID: vendorID, productID: productID, } } -// Write writes a compressed representation of p to e's underlying writer. -func (e *encoder) Write(binaryData []byte) (int, error) { - //log.Println("original binaryData is", len(binaryData), "bytes length") - - // Magic number (VID/PID) +// Encode compresses data using a lzss algorithm, encodes the result +// in ota format and writes it to e's underlying writer. +func (e *Encoder) Encode(data []byte) error { + // Compute the magic number (VID/PID) magicNumber := make([]byte, 4) vid, err := strconv.ParseUint(e.vendorID, 16, 16) if err != nil { - return 0, errors.Annotate(err, "OTA encoder: failed to parse vendorID") + return fmt.Errorf("cannot parse vendorID: %w", err) } pid, err := strconv.ParseUint(e.productID, 16, 16) if err != nil { - return 0, errors.Annotate(err, "OTA encoder: failed to parse productID") + return fmt.Errorf("cannot parse productID: %w", err) } binary.LittleEndian.PutUint16(magicNumber[0:2], uint16(pid)) @@ -82,61 +70,43 @@ func (e *encoder) Write(binaryData []byte) (int, error) { Compression: true, } - // Compress the compiled binary - compressed := lzss.Encode(binaryData) - + compressed := lzss.Encode(data) // Prepend magic number and version field to payload - var binDataComplete []byte - binDataComplete = append(binDataComplete, magicNumber...) - binDataComplete = append(binDataComplete, version.AsBytes()...) - binDataComplete = append(binDataComplete, compressed...) - //log.Println("binDataComplete is", len(binDataComplete), "bytes length") + var outData []byte + outData = append(outData, magicNumber...) + outData = append(outData, version.Bytes()...) + outData = append(outData, compressed...) - headerSize, err := e.writeHeader(binDataComplete) + err = e.writeHeader(outData) if err != nil { - return headerSize, err + return fmt.Errorf("cannot write data header to output stream: %w", err) } - payloadSize, err := e.writePayload(binDataComplete) + _, err = e.w.Write(outData) if err != nil { - return payloadSize, err + return fmt.Errorf("cannot write encoded data to output stream: %w", err) } - return headerSize + payloadSize, nil -} - -// Close closes the encoder, flushing any pending output. It does not close or -// flush e's underlying writer. -func (e *encoder) Close() error { - return e.w.Flush() + return nil } -func (e *encoder) writeHeader(binDataComplete []byte) (int, error) { - +func (e *Encoder) writeHeader(data []byte) error { // Write the length of the content lengthAsBytes := make([]byte, 4) - binary.LittleEndian.PutUint32(lengthAsBytes, uint32(len(binDataComplete))) - - n, err := e.w.Write(lengthAsBytes) + binary.LittleEndian.PutUint32(lengthAsBytes, uint32(len(data))) + _, err := e.w.Write(lengthAsBytes) if err != nil { - return n, err + return err } - // Calculate the checksum for binDataComplete - crc := crc32.ChecksumIEEE(binDataComplete) - - // encode the checksum uint32 value as 4 bytes + // Write the checksum uint32 value as 4 bytes + crc := crc32.ChecksumIEEE(data) crcAsBytes := make([]byte, 4) binary.LittleEndian.PutUint32(crcAsBytes, crc) - - n, err = e.w.Write(crcAsBytes) + _, err = e.w.Write(crcAsBytes) if err != nil { - return n, err + return err } - return len(lengthAsBytes) + len(crcAsBytes), nil -} - -func (e *encoder) writePayload(data []byte) (int, error) { - return e.w.Write(data) + return nil } diff --git a/internal/ota/encoder_test.go b/internal/ota/encoder_test.go index 910638a7..a09f67fe 100644 --- a/internal/ota/encoder_test.go +++ b/internal/ota/encoder_test.go @@ -21,7 +21,6 @@ import ( "bytes" "encoding/hex" "io/ioutil" - "log" "fmt" "hash/crc32" @@ -38,7 +37,7 @@ func TestComputeCrc32Checksum(t *testing.T) { assert.Equal(t, crc, uint32(2090640218)) } -func TestEncoderWrite(t *testing.T) { +func TestEncode(t *testing.T) { // Setup test data data, _ := hex.DecodeString("DEADBEEF") // uncompressed, or 'ef 6b 77 de f0' (compressed w/ LZSS) @@ -46,17 +45,13 @@ func TestEncoderWrite(t *testing.T) { vendorID := "2341" // Arduino productID := "8054" // MRK Wifi 1010 - otaWriter := NewWriter(&w, vendorID, productID) - otaWriter.Close() + enc := NewEncoder(&w, vendorID, productID) - n, err := otaWriter.Write(data) + err := enc.Encode(data) if err != nil { t.Error(err) - t.Fail() } - log.Println("written ota of", n, "bytes length") - otaWriter.Close() actual := w.Bytes() // You can get the expected result creating an `.ota` file using Alex's tools: @@ -73,7 +68,7 @@ func TestEncoderWrite(t *testing.T) { assert.Assert(t, res == 0) // 0 means equal } -func TestEncoderWriteFiles(t *testing.T) { +func TestEncodeFiles(t *testing.T) { tests := []struct { name string infile string @@ -106,12 +101,11 @@ func TestEncoderWriteFiles(t *testing.T) { var got bytes.Buffer vendorID := "2341" // Arduino productID := "8057" // Nano 33 IoT - otaWriter := NewWriter(&got, vendorID, productID) - _, err = otaWriter.Write(input) + otaenc := NewEncoder(&got, vendorID, productID) + err = otaenc.Encode(input) if err != nil { t.Error(err) } - otaWriter.Close() if !bytes.Equal(want, got.Bytes()) { t.Error("encoding failed") From f36992bba18117a7c2c6f6e9c122bdd87c96fa7b Mon Sep 17 00:00:00 2001 From: Paolo Calao Date: Thu, 4 Aug 2022 11:35:52 +0200 Subject: [PATCH 4/5] Defer file close --- command/ota/generate.go | 1 + command/ota/massupload.go | 1 + command/ota/upload.go | 1 + 3 files changed, 3 insertions(+) diff --git a/command/ota/generate.go b/command/ota/generate.go index 0d12131c..653b9d2b 100644 --- a/command/ota/generate.go +++ b/command/ota/generate.go @@ -55,6 +55,7 @@ func Generate(binFile string, outFile string, fqbn string) error { if err != nil { return err } + defer out.Close() enc := inota.NewEncoder(out, arduinoVendorID, productID) err = enc.Encode(data) diff --git a/command/ota/massupload.go b/command/ota/massupload.go index 8bf6bc93..956cf991 100644 --- a/command/ota/massupload.go +++ b/command/ota/massupload.go @@ -171,6 +171,7 @@ func run(uploader otaUploader, ids []string, otaFile string, expiration int) []R results = append(results, r) continue } + defer file.Close() jobs <- job{id: id, file: file} } close(jobs) diff --git a/command/ota/upload.go b/command/ota/upload.go index cf3fd288..898dc83f 100644 --- a/command/ota/upload.go +++ b/command/ota/upload.go @@ -71,6 +71,7 @@ func Upload(params *UploadParams, cred *config.Credentials) error { if err != nil { return fmt.Errorf("%s: %w", "cannot open ota file", err) } + defer file.Close() expiration := otaExpirationMins if params.Deferred { From 47c292ed19bdd13d8c833a0c9bd75fe010abd121 Mon Sep 17 00:00:00 2001 From: Paolo Calao Date: Tue, 9 Aug 2022 15:54:18 +0200 Subject: [PATCH 5/5] Rephrase comments --- internal/ota/encoder_test.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/internal/ota/encoder_test.go b/internal/ota/encoder_test.go index a09f67fe..dbb88f1e 100644 --- a/internal/ota/encoder_test.go +++ b/internal/ota/encoder_test.go @@ -54,8 +54,8 @@ func TestEncode(t *testing.T) { actual := w.Bytes() - // You can get the expected result creating an `.ota` file using Alex's tools: - // https://github.com/arduino-libraries/ArduinoIoTCloud/tree/master/extras/tools + // Expected result has been computed with the following tool: + // https://github.com/arduino-libraries/ArduinoIoTCloud/tree/master/extras/tools . expected, _ := hex.DecodeString("11000000a1744bd4548041230000000000000040ef6b77def0") res := bytes.Compare(expected, actual) @@ -68,6 +68,8 @@ func TestEncode(t *testing.T) { assert.Assert(t, res == 0) // 0 means equal } +// Expected '.ota' files contained in testdata have been computed with the following tool: +// https://github.com/arduino-libraries/ArduinoIoTCloud/tree/master/extras/tools . func TestEncodeFiles(t *testing.T) { tests := []struct { name string