github.com/mvdan/u-root-coreutils@v0.0.0-20230122170626-c2eef2898555/pkg/boot/zbi/zbi_test.go (about)

     1  // Copyright 2022 the u-root 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  package zbi
     5  
     6  import (
     7  	"fmt"
     8  	"reflect"
     9  	"testing"
    10  )
    11  
    12  var testData = map[string]*Image{
    13  	"chain-load-test.zbi": {
    14  		Header: NewContainerHeader(203560),
    15  		BootItems: []BootItem{
    16  			{
    17  				Header:         NewDefaultHeader(ZBITypeKernelX64, 203528),
    18  				PayloadAddress: 0x40,
    19  			},
    20  		},
    21  		Bootable: true,
    22  	},
    23  	"x86-boot-shim-tests.zbi": {
    24  
    25  		Header: NewContainerHeader(264008),
    26  		BootItems: []BootItem{
    27  			{
    28  				Header:         NewDefaultHeader(ZBITypeKernelX64, 106520),
    29  				PayloadAddress: 0x40,
    30  			},
    31  			{
    32  				Header:         NewDefaultHeader(ZBITypeKernelX64, 101248),
    33  				PayloadAddress: 0x1a078,
    34  			},
    35  			{
    36  				Header:         NewDefaultHeader(ZBITypeKernelX64, 56144),
    37  				PayloadAddress: 0x32c18,
    38  			},
    39  		},
    40  		Bootable: true,
    41  	},
    42  	"zbi-chain-load-hello-world-test.zbi": {
    43  		Header: NewContainerHeader(228064),
    44  		BootItems: []BootItem{
    45  			{
    46  				Header:         NewDefaultHeader(ZBITypeKernelX64, 203528),
    47  				PayloadAddress: 0x40,
    48  			},
    49  			{
    50  				Header: Header{
    51  					Type:      ZBITypeStorageKernel,
    52  					Length:    24467,
    53  					Extra:     0xdb90,
    54  					Flags:     0x30001,
    55  					Reserved0: 0,
    56  					Reserved1: 0,
    57  					Magic:     ItemMagic,
    58  					CRC32:     0x9d0920d0,
    59  				},
    60  				PayloadAddress: 0x31b68,
    61  			},
    62  		},
    63  		Bootable: true,
    64  	},
    65  }
    66  
    67  func TestLoad(t *testing.T) {
    68  	for filename, expected := range testData {
    69  		actual, err := Load(fmt.Sprintf("testdata/%s", filename))
    70  		if err != nil {
    71  			t.Fatalf("Failed to load %s: %s", filename, err)
    72  		}
    73  		if !reflect.DeepEqual(actual, expected) {
    74  			t.Errorf(`Parse("testdata/%s") = %#v; want %#v`, filename, actual, expected)
    75  		}
    76  	}
    77  }
    78  
    79  func NewDefaultHeader(itemType ZBIType, length uint32) Header {
    80  	return Header{
    81  		Type:      itemType,
    82  		Length:    length,
    83  		Extra:     0,
    84  		Flags:     VersionFlag,
    85  		Reserved0: 0,
    86  		Reserved1: 0,
    87  		Magic:     ItemMagic,
    88  		CRC32:     NoCRC32Flag,
    89  	}
    90  }