]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemufirmwaretest: Test qemuFirmwareFetchConfigs()
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 21 Feb 2019 14:24:00 +0000 (15:24 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 12 Mar 2019 14:29:44 +0000 (15:29 +0100)
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
tests/Makefile.am
tests/qemufirmwaredata/etc/qemu/firmware/40-ovmf-sb-keys.json [new symlink]
tests/qemufirmwaredata/etc/qemu/firmware/60-ovmf-sb.json [new file with mode: 0644]
tests/qemufirmwaredata/home/user/.config/qemu/firmware/10-bios.json [new file with mode: 0644]
tests/qemufirmwaredata/usr/share/qemu/firmware/40-bios.json [moved from tests/qemufirmwaredata/bios.json with 100% similarity]
tests/qemufirmwaredata/usr/share/qemu/firmware/50-ovmf-sb-keys.json [moved from tests/qemufirmwaredata/ovmf-sb-keys.json with 100% similarity]
tests/qemufirmwaredata/usr/share/qemu/firmware/60-ovmf-sb.json [moved from tests/qemufirmwaredata/ovmf-sb.json with 100% similarity]
tests/qemufirmwaredata/usr/share/qemu/firmware/61-ovmf.json [moved from tests/qemufirmwaredata/ovmf.json with 100% similarity]
tests/qemufirmwaredata/usr/share/qemu/firmware/70-aavmf.json [moved from tests/qemufirmwaredata/aavmf.json with 100% similarity]
tests/qemufirmwaretest.c

index 22e2d86e04764614b34a216681a336add10b3809..d9b23e7a57308d2a5f0b09b6ef41028b50c77d08 100644 (file)
@@ -705,6 +705,7 @@ qemusecuritytest_LDADD = $(qemu_LDADDS) $(LDADDS)
 qemufirmwaretest_SOURCES = \
        qemufirmwaretest.c \
        testutils.h testutils.c \
+       virfilewrapper.c virfilewrapper.h \
        $(NULL)
 qemufirmwaretest_LDADD = $(qemu_LDADDS) $(LDADDS)
 
diff --git a/tests/qemufirmwaredata/etc/qemu/firmware/40-ovmf-sb-keys.json b/tests/qemufirmwaredata/etc/qemu/firmware/40-ovmf-sb-keys.json
new file mode 120000 (symlink)
index 0000000..68e8cbb
--- /dev/null
@@ -0,0 +1 @@
+../../../usr/share/qemu/firmware/50-ovmf-sb-keys.json
\ No newline at end of file
diff --git a/tests/qemufirmwaredata/etc/qemu/firmware/60-ovmf-sb.json b/tests/qemufirmwaredata/etc/qemu/firmware/60-ovmf-sb.json
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/qemufirmwaredata/home/user/.config/qemu/firmware/10-bios.json b/tests/qemufirmwaredata/home/user/.config/qemu/firmware/10-bios.json
new file mode 100644 (file)
index 0000000..e69de29
index a7e9d19fc2f368edf0055332dfb5720b1c39ecb7..3fbeb2b852b676fde69eb7b239859977fbaee657 100644 (file)
@@ -1,7 +1,9 @@
 #include <config.h>
 
 #include "testutils.h"
+#include "virfilewrapper.h"
 #include "qemu/qemu_firmware.h"
+#include "configmake.h"
 
 #define VIR_FROM_THIS VIR_FROM_QEMU
 
@@ -50,11 +52,66 @@ testParseFormatFW(const void *opaque)
 }
 
 
+static int
+testFWPrecedence(const void *opaque ATTRIBUTE_UNUSED)
+{
+    VIR_AUTOFREE(char *) fakehome = NULL;
+    VIR_AUTOSTRINGLIST fwList = NULL;
+    size_t nfwList;
+    size_t i;
+    const char *expected[] = {
+        PREFIX "/share/qemu/firmware/40-bios.json",
+        SYSCONFDIR "/qemu/firmware/40-ovmf-sb-keys.json",
+        PREFIX "/share/qemu/firmware/50-ovmf-sb-keys.json",
+        PREFIX "/share/qemu/firmware/61-ovmf.json",
+        PREFIX "/share/qemu/firmware/70-aavmf.json",
+    };
+
+    if (VIR_STRDUP(fakehome, abs_srcdir "/qemufirmwaredata/home/user/.config") < 0)
+        return -1;
+
+    setenv("XDG_CONFIG_HOME", fakehome, 1);
+
+    if (qemuFirmwareFetchConfigs(&fwList, false) < 0)
+        return -1;
+
+    if (!fwList) {
+        fprintf(stderr, "Expected a non-NULL result, but got a NULL result\n");
+        return -1;
+    }
+
+    nfwList = virStringListLength((const char **)fwList);
+    if (nfwList != ARRAY_CARDINALITY(expected)) {
+        fprintf(stderr, "Expected %zu paths, got %zu\n",
+                ARRAY_CARDINALITY(expected), nfwList);
+        return -1;
+    }
+
+    for (i = 0; i < ARRAY_CARDINALITY(expected); i++) {
+        if (STRNEQ_NULLABLE(expected[i], fwList[i])) {
+            fprintf(stderr,
+                    "Unexpected path (i=%zu). Expected %s got %s \n",
+                    i, expected[i], NULLSTR(fwList[i]));
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+
 static int
 mymain(void)
 {
     int ret = 0;
 
+    virFileWrapperAddPrefix(SYSCONFDIR "/qemu/firmware",
+                            abs_srcdir "/qemufirmwaredata/etc/qemu/firmware");
+    virFileWrapperAddPrefix(PREFIX "/share/qemu/firmware",
+                            abs_srcdir "/qemufirmwaredata/usr/share/qemu/firmware");
+    virFileWrapperAddPrefix("/home/user/.config/qemu/firmware",
+                            abs_srcdir "/qemufirmwaredata/home/user/.config/qemu/firmware");
+
 #define DO_PARSE_TEST(filename) \
     do { \
         if (virTestRun("QEMU FW " filename, \
@@ -62,11 +119,14 @@ mymain(void)
             ret = -1; \
     } while (0)
 
-    DO_PARSE_TEST("bios.json");
-    DO_PARSE_TEST("ovmf-sb-keys.json");
-    DO_PARSE_TEST("ovmf-sb.json");
-    DO_PARSE_TEST("ovmf.json");
-    DO_PARSE_TEST("aavmf.json");
+    DO_PARSE_TEST("usr/share/qemu/firmware/40-bios.json");
+    DO_PARSE_TEST("usr/share/qemu/firmware/50-ovmf-sb-keys.json");
+    DO_PARSE_TEST("usr/share/qemu/firmware/60-ovmf-sb.json");
+    DO_PARSE_TEST("usr/share/qemu/firmware/61-ovmf.json");
+    DO_PARSE_TEST("usr/share/qemu/firmware/70-aavmf.json");
+
+    if (virTestRun("QEMU FW precedence test", testFWPrecedence, NULL) < 0)
+        ret = -1;
 
     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }