package org.openslx.firmware; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import java.nio.file.Paths; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.openslx.libvirt.domain.Domain; import org.openslx.libvirt.domain.DomainTest; public class QemuFirmwareUtilTest { @Test @DisplayName( "Test that lookup of OS loader from Libvirt domain file succeeds" ) public void testQemuFirmwareUtilLookupTargetOsLoaderValid() throws FirmwareException { final String fwSpecPath = QemuFirmwareTestResources.getQemuFirmwareSpecPath(); final Domain config = DomainTest .getDomain( "qemu-kvm_default-ubuntu-20-04-vm_transform-non-persistent_uefi.xml" ); final String targetOsLoader = QemuFirmwareUtil.lookupTargetOsLoader( fwSpecPath, config.getOsLoader(), config.getOsArch(), config.getOsMachine() ); assertEquals( Paths.get( "/usr/share/qemu/edk2-x86_64-code.fd" ).toString(), targetOsLoader ); } @Test @DisplayName( "Test that lookup of OS loader from Archlinux path succeeds" ) public void testQemuFirmwareUtilLookupTargetOsLoaderValidArchlinux() throws FirmwareException { final String fwSpecPath = QemuFirmwareTestResources.getQemuFirmwareSpecPath(); final String targetOsLoader = QemuFirmwareUtil.lookupTargetOsLoader( fwSpecPath, "/usr/share/edk2-ovmf/x64/OVMF_CODE.fd", "x86_64", "pc-q35-5.0" ); assertEquals( Paths.get( "/usr/share/qemu/edk2-x86_64-code.fd" ).toString(), targetOsLoader ); } @Test @DisplayName( "Test that lookup of OS loader from Debian path succeeds" ) public void testQemuFirmwareUtilLookupTargetOsLoaderValidDebian() throws FirmwareException { final String fwSpecPath = QemuFirmwareTestResources.getQemuFirmwareSpecPath(); final String targetOsLoader = QemuFirmwareUtil.lookupTargetOsLoader( fwSpecPath, "/usr/share/OVMF/OVMF_CODE.fd", "x86_64", "pc-q35-5.0" ); assertEquals( Paths.get( "/usr/share/qemu/edk2-x86_64-code.fd" ).toString(), targetOsLoader ); } @Test @DisplayName( "Test that lookup of OS loader from CentOS path succeeds" ) public void testQemuFirmwareUtilLookupTargetOsLoaderValidCentOs() throws FirmwareException { final String fwSpecPath = QemuFirmwareTestResources.getQemuFirmwareSpecPath(); final String targetOsLoader = QemuFirmwareUtil.lookupTargetOsLoader( fwSpecPath, "/usr/share/edk2/ovmf/OVMF_CODE.cc.fd", "x86_64", "pc-q35-5.0" ); assertEquals( Paths.get( "/usr/share/qemu/edk2-x86_64-code.fd" ).toString(), targetOsLoader ); } @Test @DisplayName( "Test that lookup of OS loader from OpenSUSE path succeeds" ) public void testQemuFirmwareUtilLookupTargetOsLoaderValidOpenSuse() throws FirmwareException { final String fwSpecPath = QemuFirmwareTestResources.getQemuFirmwareSpecPath(); final String targetOsLoader = QemuFirmwareUtil.lookupTargetOsLoader( fwSpecPath, "/usr/share/qemu/ovmf-x86_64-4m-code.bin", "x86_64", "pc-q35-5.0" ); assertEquals( Paths.get( "/usr/share/qemu/edk2-x86_64-code.fd" ).toString(), targetOsLoader ); } @Test @DisplayName( "Test that lookup of OS loader from Ubuntu path succeeds" ) public void testQemuFirmwareUtilLookupTargetOsLoaderValidUbuntu() throws FirmwareException { final String fwSpecPath = QemuFirmwareTestResources.getQemuFirmwareSpecPath(); final String targetOsLoader = QemuFirmwareUtil.lookupTargetOsLoader( fwSpecPath, "/usr/share/OVMF/OVMF_CODE_4M.fd", "x86_64", "pc-q35-5.0" ); assertEquals( Paths.get( "/usr/share/qemu/edk2-x86_64-code.fd" ).toString(), targetOsLoader ); } @Test @DisplayName( "Test that lookup of non-existent OS loader for non-existent architecture fails" ) public void testQemuFirmwareUtilLookupTargetOsLoaderInvalid() throws FirmwareException { final String fwSpecPath = QemuFirmwareTestResources.getQemuFirmwareSpecPath(); assertThrows( FirmwareException.class, () -> QemuFirmwareUtil.lookupTargetOsLoader( fwSpecPath, Paths.get( "/non/existent/loader.fd" ).toString(), "x87", "pc-q35-6.0" ) ); } }