github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/uefivars/boot/efiDppMedia_test.go (about)

     1  // Copyright 2020 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  //
     5  // SPDX-License-Identifier: BSD-3-Clause
     6  //
     7  
     8  package boot
     9  
    10  import (
    11  	"strings"
    12  	"testing"
    13  	"unicode/utf16"
    14  )
    15  
    16  //func ParseDppMediaHdd(h EfiDevicePathProtocolHdr, b []byte) (*DppMediaHDD, error)
    17  func TestParseDppMediaHdd(t *testing.T) {
    18  	in := []byte{
    19  		0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
    20  		0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
    21  		0x20, 0x21, 0x22, 0x23, 0x02, 0x02,
    22  	}
    23  	hdr := EfiDevicePathProtocolHdr{
    24  		ProtoType:    4,
    25  		ProtoSubType: 1,
    26  		Length:       uint16(len(in) + 4),
    27  	}
    28  	p, err := ParseDppMediaHdd(hdr, in)
    29  	if err != nil {
    30  		t.Fatal(err)
    31  	}
    32  	want := "HD(50462976,GPT,17161514-1918-1b1a-1c1d-1e1f20212223,0xb0a090807060504,0x131211100f0e0d0c)"
    33  	got := p.String()
    34  	if want != got {
    35  		t.Errorf("\nwant %s\n got %s", want, got)
    36  	}
    37  	wantp := "HDD"
    38  	gotp := p.ProtoSubTypeStr()
    39  	if wantp != gotp {
    40  		t.Errorf("want %s got %s", wantp, gotp)
    41  	}
    42  }
    43  
    44  //func ParseDppMediaFilePath(h EfiDevicePathProtocolHdr, b []byte) (*DppMediaFilePath, error)
    45  func TestParseDppMediaFilePath(t *testing.T) {
    46  	str := `blah\blah\blah.efi`
    47  	//convert to utf16 ([]uint16)
    48  	u16 := utf16.Encode([]rune(str))
    49  	//...and then to []byte
    50  	var in []byte
    51  	for _, u := range u16 {
    52  		in = append(in, byte(u&0xff), byte(u>>8&0xff))
    53  	}
    54  	hdr := EfiDevicePathProtocolHdr{
    55  		ProtoType:    4,
    56  		ProtoSubType: 4,
    57  		Length:       uint16(len(in) + 4),
    58  	}
    59  	p, err := ParseDppMediaFilePath(hdr, in)
    60  	if err != nil {
    61  		t.Fatal(err)
    62  	}
    63  	want := "File(" + strings.ReplaceAll(str, "\\", "/") + ")"
    64  	got := p.String()
    65  	if want != got {
    66  		t.Errorf("\nwant %s\n got %s", want, got)
    67  	}
    68  	wantp := "FilePath"
    69  	gotp := p.ProtoSubTypeStr()
    70  	if wantp != gotp {
    71  		t.Errorf("want %s got %s", wantp, gotp)
    72  	}
    73  }
    74  
    75  //func ParseDppMediaPIWGFV(h EfiDevicePathProtocolHdr, b []byte) (*DppMediaPIWGFV, error)
    76  func TestParseDppMediaPIWGFV(t *testing.T) {
    77  	in := []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}
    78  	hdr := EfiDevicePathProtocolHdr{
    79  		ProtoType:    4,
    80  		ProtoSubType: 7,
    81  		Length:       uint16(len(in) + 4),
    82  	}
    83  	p, err := ParseDppMediaPIWGFV(hdr, in)
    84  	if err != nil {
    85  		t.Fatal(err)
    86  	}
    87  	want := "Fv(03020100-0504-0706-0809-0a0b0c0d0e0f)"
    88  	got := p.String()
    89  	if want != got {
    90  		t.Errorf("\nwant %s\n got %s", want, got)
    91  	}
    92  	wantp := "PIWG Firmware Volume"
    93  	gotp := p.ProtoSubTypeStr()
    94  	if wantp != gotp {
    95  		t.Errorf("want %s got %s", wantp, gotp)
    96  	}
    97  }
    98  
    99  //func ParseDppMediaPIWGFF(h EfiDevicePathProtocolHdr, b []byte) (*DppMediaPIWGFF, error)
   100  func TestParseDppMediaPIWGFF(t *testing.T) {
   101  	in := []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}
   102  	hdr := EfiDevicePathProtocolHdr{
   103  		ProtoType:    4,
   104  		ProtoSubType: 6,
   105  		Length:       uint16(len(in) + 4),
   106  	}
   107  	p, err := ParseDppMediaPIWGFF(hdr, in)
   108  	if err != nil {
   109  		t.Fatal(err)
   110  	}
   111  	want := "FvFile(03020100-0504-0706-0809-0a0b0c0d0e0f)"
   112  	got := p.String()
   113  	if want != got {
   114  		t.Errorf("\nwant %s\n got %s", want, got)
   115  	}
   116  	wantp := "PIWG Firmware File"
   117  	gotp := p.ProtoSubTypeStr()
   118  	if wantp != gotp {
   119  		t.Errorf("want %s got %s", wantp, gotp)
   120  	}
   121  }