Blame SOURCES/qemuga-test-qga-add-test-for-guest-get-osinfo.patch

3f2699
From e3bfadeaac6a46966becef50302e2ad797c1977a Mon Sep 17 00:00:00 2001
3f2699
From: Miroslav Rezanina <mrezanin@redhat.com>
3f2699
Date: Thu, 19 Apr 2018 12:33:48 -0300
3f2699
Subject: [PATCH 7/7] test-qga: add test for guest-get-osinfo
3f2699
MIME-Version: 1.0
3f2699
Content-Type: text/plain; charset=UTF-8
3f2699
Content-Transfer-Encoding: 8bit
3f2699
3f2699
RH-Author: Miroslav Rezanina <mrezanin@redhat.com>
3f2699
Message-id: <4fbd9f39de7c623e464fe5a2fe36b6aa254218ac.1524139831.git.mrezanin@redhat.com>
3f2699
Patchwork-id: 79709
3f2699
O-Subject: [RHEL-7.5.z qemu-guest-agent PATCH 7/7] test-qga: add test for guest-get-osinfo
3f2699
Bugzilla: 1598210
3f2699
RH-Acked-by: Marc-André Lureau <marcandre.lureau@redhat.com>
3f2699
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
3f2699
RH-Acked-by: Tomáš Golembiovský <tgolembi@redhat.com>
3f2699
3f2699
From: Tomáš Golembiovský <tgolembi@redhat.com>
3f2699
3f2699
Add test for guest-get-osinfo command.
3f2699
3f2699
Qemu-ga was modified to accept QGA_OS_RELEASE environment variable. If
3f2699
the variable is defined it is interpreted as path to the os-release file
3f2699
and it is parsed instead of the default paths.
3f2699
3f2699
Signed-off-by: Tomáš Golembiovský <tgolembi@redhat.com>
3f2699
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
3f2699
* move declarations to beginning of functions
3f2699
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
3f2699
(cherry picked from commit 339ca68bef9f30dd18e84b7d92398327e3f819a3)
3f2699
Signed-off-by: Wainer dos Santos Moschetta <wainersm@redhat.com>
3f2699
---
3f2699
 qga/commands-posix.c           | 13 +++++++---
3f2699
 tests/data/test-qga-os-release |  7 ++++++
3f2699
 tests/test-qga.c               | 56 ++++++++++++++++++++++++++++++++++++++++++
3f2699
 3 files changed, 72 insertions(+), 4 deletions(-)
3f2699
 create mode 100644 tests/data/test-qga-os-release
3f2699
3f2699
diff --git a/qga/commands-posix.c b/qga/commands-posix.c
3f2699
index add8a51f2b..8c38dd3f0a 100644
3f2699
--- a/qga/commands-posix.c
3f2699
+++ b/qga/commands-posix.c
3f2699
@@ -2677,7 +2677,8 @@ GuestOSInfo *qmp_guest_get_osinfo(Error **errp)
3f2699
 {
3f2699
     GuestOSInfo *info = NULL;
3f2699
     struct utsname kinfo;
3f2699
-    GKeyFile *osrelease;
3f2699
+    GKeyFile *osrelease = NULL;
3f2699
+    const char *qga_os_release = g_getenv("QGA_OS_RELEASE");
3f2699
 
3f2699
     info = g_new0(GuestOSInfo, 1);
3f2699
 
3f2699
@@ -2692,9 +2693,13 @@ GuestOSInfo *qmp_guest_get_osinfo(Error **errp)
3f2699
         info->machine = g_strdup(kinfo.machine);
3f2699
     }
3f2699
 
3f2699
-    osrelease = ga_parse_osrelease("/etc/os-release");
3f2699
-    if (osrelease == NULL) {
3f2699
-        osrelease = ga_parse_osrelease("/usr/lib/os-release");
3f2699
+    if (qga_os_release != NULL) {
3f2699
+        osrelease = ga_parse_osrelease(qga_os_release);
3f2699
+    } else {
3f2699
+        osrelease = ga_parse_osrelease("/etc/os-release");
3f2699
+        if (osrelease == NULL) {
3f2699
+            osrelease = ga_parse_osrelease("/usr/lib/os-release");
3f2699
+        }
3f2699
     }
3f2699
 
3f2699
     if (osrelease != NULL) {
3f2699
diff --git a/tests/data/test-qga-os-release b/tests/data/test-qga-os-release
3f2699
new file mode 100644
3f2699
index 0000000000..70664eb6ec
3f2699
--- /dev/null
3f2699
+++ b/tests/data/test-qga-os-release
3f2699
@@ -0,0 +1,7 @@
3f2699
+ID=qemu-ga-test
3f2699
+NAME=QEMU-GA
3f2699
+PRETTY_NAME="QEMU Guest Agent test"
3f2699
+VERSION="Test 1"
3f2699
+VERSION_ID=1
3f2699
+VARIANT="Unit test \"\'\$\`\\ and \\\\ etc."
3f2699
+VARIANT_ID=unit-test
3f2699
diff --git a/tests/test-qga.c b/tests/test-qga.c
3f2699
index ef8616f89d..3542a015a5 100644
3f2699
--- a/tests/test-qga.c
3f2699
+++ b/tests/test-qga.c
3f2699
@@ -909,6 +909,60 @@ static void test_qga_guest_exec_invalid(gconstpointer fix)
3f2699
     QDECREF(ret);
3f2699
 }
3f2699
 
3f2699
+static void test_qga_guest_get_osinfo(gconstpointer data)
3f2699
+{
3f2699
+    TestFixture fixture;
3f2699
+    const gchar *str;
3f2699
+    gchar *cwd, *env[2];
3f2699
+    QDict *ret, *val;
3f2699
+
3f2699
+    cwd = g_get_current_dir();
3f2699
+    env[0] = g_strdup_printf(
3f2699
+        "QGA_OS_RELEASE=%s%ctests%cdata%ctest-qga-os-release",
3f2699
+        cwd, G_DIR_SEPARATOR, G_DIR_SEPARATOR, G_DIR_SEPARATOR);
3f2699
+    env[1] = NULL;
3f2699
+    g_free(cwd);
3f2699
+    fixture_setup(&fixture, NULL, env);
3f2699
+
3f2699
+    ret = qmp_fd(fixture.fd, "{'execute': 'guest-get-osinfo'}");
3f2699
+    g_assert_nonnull(ret);
3f2699
+    qmp_assert_no_error(ret);
3f2699
+
3f2699
+    val = qdict_get_qdict(ret, "return");
3f2699
+
3f2699
+    str = qdict_get_try_str(val, "id");
3f2699
+    g_assert_nonnull(str);
3f2699
+    g_assert_cmpstr(str, ==, "qemu-ga-test");
3f2699
+
3f2699
+    str = qdict_get_try_str(val, "name");
3f2699
+    g_assert_nonnull(str);
3f2699
+    g_assert_cmpstr(str, ==, "QEMU-GA");
3f2699
+
3f2699
+    str = qdict_get_try_str(val, "pretty-name");
3f2699
+    g_assert_nonnull(str);
3f2699
+    g_assert_cmpstr(str, ==, "QEMU Guest Agent test");
3f2699
+
3f2699
+    str = qdict_get_try_str(val, "version");
3f2699
+    g_assert_nonnull(str);
3f2699
+    g_assert_cmpstr(str, ==, "Test 1");
3f2699
+
3f2699
+    str = qdict_get_try_str(val, "version-id");
3f2699
+    g_assert_nonnull(str);
3f2699
+    g_assert_cmpstr(str, ==, "1");
3f2699
+
3f2699
+    str = qdict_get_try_str(val, "variant");
3f2699
+    g_assert_nonnull(str);
3f2699
+    g_assert_cmpstr(str, ==, "Unit test \"'$`\\ and \\\\ etc.");
3f2699
+
3f2699
+    str = qdict_get_try_str(val, "variant-id");
3f2699
+    g_assert_nonnull(str);
3f2699
+    g_assert_cmpstr(str, ==, "unit-test");
3f2699
+
3f2699
+    QDECREF(ret);
3f2699
+    g_free(env[0]);
3f2699
+    fixture_tear_down(&fixture, NULL);
3f2699
+}
3f2699
+
3f2699
 int main(int argc, char **argv)
3f2699
 {
3f2699
     TestFixture fix;
3f2699
@@ -943,6 +997,8 @@ int main(int argc, char **argv)
3f2699
     g_test_add_data_func("/qga/guest-exec", &fix, test_qga_guest_exec);
3f2699
     g_test_add_data_func("/qga/guest-exec-invalid", &fix,
3f2699
                          test_qga_guest_exec_invalid);
3f2699
+    g_test_add_data_func("/qga/guest-get-osinfo", &fix,
3f2699
+                         test_qga_guest_get_osinfo);
3f2699
 
3f2699
     if (g_getenv("QGA_TEST_SIDE_EFFECTING")) {
3f2699
         g_test_add_data_func("/qga/fsfreeze-and-thaw", &fix,
3f2699
-- 
3f2699
2.13.6
3f2699