]> xenbits.xensource.com Git - libvirt.git/commitdiff
sysinfotest: Move from custom dmidecode scripts to virCommandSetDryRun()
authorMichal Privoznik <mprivozn@redhat.com>
Mon, 8 Jun 2020 10:51:07 +0000 (12:51 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 10 Jun 2020 12:00:38 +0000 (14:00 +0200)
Problem with custom dmidecode scripts is that they are hard to
modify, especially if we will want them to act differently based
on passed arguments. So far, we have two scripts which do no more
than 'cat $sysinfo' where $sysinfo is saved dmidecode output.

The virCommandSetDryRun() can be used to trick
virSysinfoReadDMI() thinking it executed real dmidecode.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
src/util/virsysinfo.c
tests/sysinfodata/aarch64-gigabytedmidecode.sh [deleted file]
tests/sysinfodata/x86dmidecode.sh [deleted file]
tests/sysinfotest.c

index 0f1210ab374bef7e23d35374a40c0c321f11c38d..0bf80c339b8857029b66f492ae7273d1f22f674f 100644 (file)
@@ -60,7 +60,8 @@ virSysinfoSetup(const char *dmidecode,
                 const char *sysinfo,
                 const char *cpuinfo)
 {
-    sysinfoDmidecode = dmidecode;
+    if (dmidecode)
+        sysinfoDmidecode = dmidecode;
     sysinfoSysinfo = sysinfo;
     sysinfoCpuinfo = cpuinfo;
 }
diff --git a/tests/sysinfodata/aarch64-gigabytedmidecode.sh b/tests/sysinfodata/aarch64-gigabytedmidecode.sh
deleted file mode 100755 (executable)
index 2029181..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-DATAFILE=`dirname $0`/aarch64-gigabytesysinfo.data
-cat $DATAFILE
diff --git a/tests/sysinfodata/x86dmidecode.sh b/tests/sysinfodata/x86dmidecode.sh
deleted file mode 100755 (executable)
index 28aed61..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-DATAFILE=`dirname $0`/x86sysinfo.data
-cat $DATAFILE
index 558dd60294642b4b585c86557b68345fb17e2712..f0805697300129cce31bed066d914674f4dfcea0 100644 (file)
 #define LIBVIRT_VIRSYSINFOPRIV_H_ALLOW
 #include "virsysinfopriv.h"
 
+#define LIBVIRT_VIRCOMMANDPRIV_H_ALLOW
+#include "vircommandpriv.h"
+
 #define VIR_FROM_THIS VIR_FROM_NONE
 
 struct testSysinfoData {
     const char *name; /* test name, also base name for result files */
     virSysinfoDefPtr (*func)(void); /* sysinfo gathering function */
-    const char *decoder; /* name of dmi decoder binary/script */
 };
 
+
+static void
+testDMIDecodeDryRun(const char *const*args G_GNUC_UNUSED,
+                    const char *const*env G_GNUC_UNUSED,
+                    const char *input G_GNUC_UNUSED,
+                    char **output,
+                    char **error,
+                    int *status,
+                    void *opaque)
+{
+    const char *sysinfo = opaque;
+
+    if (virFileReadAll(sysinfo, 10 * 1024 * 1024, output) < 0) {
+        *error = g_strdup(virGetLastErrorMessage());
+        *status = EXIT_FAILURE;
+        return;
+    }
+
+    *error = g_strdup("");
+    *status = 0;
+}
+
+
 static int
 testSysinfo(const void *data)
 {
@@ -52,18 +77,19 @@ testSysinfo(const void *data)
     g_autofree char *sysinfo = NULL;
     g_autofree char *cpuinfo = NULL;
     g_autofree char *expected = NULL;
-    g_autofree char *decoder = NULL;
 
     sysinfo = g_strdup_printf("%s/sysinfodata/%ssysinfo.data", abs_srcdir, testdata->name);
     cpuinfo = g_strdup_printf("%s/sysinfodata/%scpuinfo.data", abs_srcdir, testdata->name);
     expected = g_strdup_printf("%s/sysinfodata/%ssysinfo.expect", abs_srcdir, testdata->name);
 
-    if (testdata->decoder)
-        decoder = g_strdup_printf("%s/%s", abs_srcdir, testdata->decoder);
+    virCommandSetDryRun(NULL, testDMIDecodeDryRun, sysinfo);
+
+    virSysinfoSetup(NULL, sysinfo, cpuinfo);
 
-    virSysinfoSetup(decoder, sysinfo, cpuinfo);
+    ret = testdata->func();
+    virCommandSetDryRun(NULL, NULL, NULL);
 
-    if (!(ret = testdata->func()))
+    if (!ret)
         return -1;
 
     if (virSysinfoFormat(&buf, ret) < 0)
@@ -76,17 +102,13 @@ testSysinfo(const void *data)
 }
 
 
-#define TEST_FULL(name, func, decoder) \
+#define TEST(name, func) \
     do { \
-        struct testSysinfoData data = { name, func, decoder }; \
+        struct testSysinfoData data = { name, func }; \
         if (virTestRun(name " sysinfo", testSysinfo, &data) < 0) \
             ret = EXIT_FAILURE; \
     } while (0)
 
-
-#define TEST(name, func) \
-        TEST_FULL(name, func, NULL)
-
 static int
 mymain(void)
 {
@@ -95,13 +117,12 @@ mymain(void)
     TEST("s390", virSysinfoReadS390);
     TEST("s390-freq", virSysinfoReadS390);
     TEST("ppc", virSysinfoReadPPC);
-    TEST_FULL("x86", virSysinfoReadDMI, "/sysinfodata/x86dmidecode.sh");
+    TEST("x86", virSysinfoReadDMI);
     TEST("arm", virSysinfoReadARM);
     TEST("arm-rpi2", virSysinfoReadARM);
     TEST("aarch64", virSysinfoReadARM);
     TEST("aarch64-moonshot", virSysinfoReadARM);
-    TEST_FULL("aarch64-gigabyte", virSysinfoReadARM,
-              "/sysinfodata/aarch64-gigabytedmidecode.sh");
+    TEST("aarch64-gigabyte", virSysinfoReadARM);
 
     return ret;
 }