github.com/linuxboot/fiano@v1.2.0/pkg/intel/metadata/fit/get_entries_test.go (about) 1 // Copyright 2017-2021 the LinuxBoot Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package fit 6 7 import ( 8 "bytes" 9 "compress/bzip2" 10 "encoding/base64" 11 "fmt" 12 "io" 13 "testing" 14 15 "github.com/stretchr/testify/assert" 16 "github.com/stretchr/testify/require" 17 ) 18 19 var ( 20 fitHeadersSampleBZ2, _ = base64.StdEncoding.DecodeString( 21 "QlpoOTFBWSZTWeqFfFEBARl/z/6cAAhAEAJAISIUAMAAYADAABBMUgACAI4AAAiwANiQkhUepkNBk0A0Gj0nqGMmmQMmhkGRpgRgVJRHqBPUGmBPQQB6mu/KQvlYVFwVWSqIERBhUJJEkSR53rKJMcLkAQB4VEmzyuIBAGNSSaLY2elZ4gEAapJc7BvQ6GAOz3zzwaWQh1wYvXevCRHSI64eYVYAyTeHJJpz9TxxkkkkkgAA+ewChlSjX5WsDQH+LuSKcKEh1Qr4og==") 22 ) 23 24 func panicIfError(err error) { 25 if err != nil { 26 panic(err) 27 } 28 } 29 30 func TestGetEntries(t *testing.T) { 31 firmwareBytes, err := io.ReadAll(bzip2.NewReader(bytes.NewReader(fitHeadersSampleBZ2))) 32 panicIfError(err) 33 34 entries, err := GetEntries(firmwareBytes) 35 assert.NoError(t, err) 36 37 assert.Equal(t, 27, len(entries)) 38 } 39 40 func TestGetEntriesInvalidAddr(t *testing.T) { 41 sampleEntries := getSampleEntries(t) 42 for _, entry := range sampleEntries[1:] { 43 entry.GetEntryBase().Headers.Address = 2<<32 + 1 // overflow 44 entry.GetEntryBase().DataSegmentBytes = nil 45 } 46 47 dummyImage := make([]byte, 1024) 48 err := sampleEntries.Inject(dummyImage, 512) 49 require.NoError(t, err) 50 51 // There should be no panic, and the errors should be inside entry headers. 52 entries, err := GetEntries(dummyImage) 53 require.NoError(t, err) 54 for _, entry := range entries[1:] { 55 switch entry := entry.(type) { 56 case *EntrySkip: 57 continue 58 default: 59 require.Contains(t, fmt.Sprintf("%v", entry.GetEntryBase().HeadersErrors), "index") 60 } 61 } 62 } 63 64 // BenchmarkGetEntries-8 520621 2357 ns/op 2944 B/op 59 allocs/op 65 func BenchmarkGetEntries(b *testing.B) { 66 firmwareBytes, err := io.ReadAll(bzip2.NewReader(bytes.NewReader(fitHeadersSampleBZ2))) 67 panicIfError(err) 68 69 b.ReportAllocs() 70 b.ResetTimer() 71 for i := 0; i < b.N; i++ { 72 _, _ = GetEntries(firmwareBytes) 73 } 74 }