virtfw-libefi 0.6.3

library to read + write efi data structures
Documentation
#![cfg(feature = "std")]
use std::io::Cursor;

use virtfw_libefi::efivar::io::ReadEfiExt;
use virtfw_libefi::efivar::io::WriteEfiExt;

const DATA_EMPTY: [u8; 0] = [];
const DATA_BOOTORDER_2: &[u8] = include_bytes!("data/bootorder_2");
const DATA_BOOTENTRY_USB: &[u8] = include_bytes!("data/bootentry_usb");
const DATA_BOOTENTRY_SATA: &[u8] = include_bytes!("data/bootentry_sata");
const DATA_BOOTENTRY_SCSI: &[u8] = include_bytes!("data/bootentry_scsi");
const DATA_BOOTENTRY_PXE_V4: &[u8] = include_bytes!("data/bootentry_pxe_v4");
const DATA_BOOTENTRY_HTTP_V6: &[u8] = include_bytes!("data/bootentry_http_v6");
const DATA_BOOTENTRY_RHEL_GRUB: &[u8] = include_bytes!("data/bootentry_rhel_grub");
const DATA_BOOTENTRY_FWSETUP: &[u8] = include_bytes!("data/bootentry_fwsetup");

#[test]
fn bootorder_empty() {
    let mut rd = Cursor::new(DATA_EMPTY);
    let order = rd.read_boot_order().unwrap();
    assert!(order.0.is_empty())
}

#[test]
fn bootorder_2() {
    let mut rd = Cursor::new(DATA_BOOTORDER_2);
    let order = rd.read_boot_order().unwrap();
    assert_eq!(format!("{}", order), "0001,0002");
    let bytes = Vec::from(&order);
    assert_eq!(bytes, DATA_BOOTORDER_2);
}

#[test]
fn bootentry_usb() {
    let mut rd = Cursor::new(DATA_BOOTENTRY_USB);
    let entry = rd.read_boot_entry().unwrap();
    assert_eq!(
        format!("{}", entry.devpath),
        "PciRoot()/Pci(02.1)/Pci(00.0)/Usb(port=1,if=0)"
    );
    let mut wr = Cursor::new(Vec::new());
    wr.write_boot_entry(&entry).unwrap();
    assert_eq!(wr.into_inner(), DATA_BOOTENTRY_USB);
}

#[test]
fn bootentry_sata() {
    let mut rd = Cursor::new(DATA_BOOTENTRY_SATA);
    let entry = rd.read_boot_entry().unwrap();
    assert_eq!(
        format!("{}", entry.devpath),
        "PciRoot()/Pci(1f.2)/SATA(port=1)"
    );
    let mut wr = Cursor::new(Vec::new());
    wr.write_boot_entry(&entry).unwrap();
    assert_eq!(wr.into_inner(), DATA_BOOTENTRY_SATA);
}

#[test]
fn bootentry_scsi() {
    let mut rd = Cursor::new(DATA_BOOTENTRY_SCSI);
    let entry = rd.read_boot_entry().unwrap();
    assert_eq!(
        format!("{}", entry.devpath),
        "PciRoot()/Pci(02.2)/Pci(00.0)/Scsi(target=0,lun=0)"
    );
    let mut wr = Cursor::new(Vec::new());
    wr.write_boot_entry(&entry).unwrap();
    assert_eq!(wr.into_inner(), DATA_BOOTENTRY_SCSI);
}

#[test]
fn bootentry_pxe_v4() {
    let mut rd = Cursor::new(DATA_BOOTENTRY_PXE_V4);
    let entry = rd.read_boot_entry().unwrap();
    let mut wr = Cursor::new(Vec::new());
    wr.write_boot_entry(&entry).unwrap();
    assert_eq!(wr.into_inner(), DATA_BOOTENTRY_PXE_V4);
}

#[test]
fn bootentry_http_v6() {
    let mut rd = Cursor::new(DATA_BOOTENTRY_HTTP_V6);
    let entry = rd.read_boot_entry().unwrap();
    let mut wr = Cursor::new(Vec::new());
    wr.write_boot_entry(&entry).unwrap();
    assert_eq!(wr.into_inner(), DATA_BOOTENTRY_HTTP_V6);
}

#[test]
fn bootentry_rhel_grub() {
    let mut rd = Cursor::new(DATA_BOOTENTRY_RHEL_GRUB);
    let entry = rd.read_boot_entry().unwrap();
    assert_eq!(
        format!("{}", entry.devpath),
        "HD(1)/File(\"\\EFI\\redhat\\shimx64.efi\")"
    );
    let mut wr = Cursor::new(Vec::new());
    wr.write_boot_entry(&entry).unwrap();
    assert_eq!(wr.into_inner(), DATA_BOOTENTRY_RHEL_GRUB);
}

#[test]
fn bootentry_fwsetup() {
    let mut rd = Cursor::new(DATA_BOOTENTRY_FWSETUP);
    let entry = rd.read_boot_entry().unwrap();
    assert_eq!(
        format!("{}", entry.devpath),
        "FwVol(7cb8bdc9-f8eb-4f34-aaea-3ee4af6516a1)/FwFile(462caa21-7614-4503-836e-8ab6f4662331)"
    );
    let mut wr = Cursor::new(Vec::new());
    wr.write_boot_entry(&entry).unwrap();
    assert_eq!(wr.into_inner(), DATA_BOOTENTRY_FWSETUP);
}