test-qga: add test for guest-get-osinfo

Add test for guest-get-osinfo command.

Qemu-ga was modified to accept QGA_OS_RELEASE environment variable. If
the variable is defined it is interpreted as path to the os-release file
and it is parsed instead of the default paths.

Signed-off-by: Tomáš Golembiovský <tgolembi@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
* move declarations to beginning of functions
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
Tomáš Golembiovský 2017-07-14 16:28:58 +02:00 committed by Michael Roth
parent c28afa76c0
commit 339ca68bef
3 changed files with 72 additions and 4 deletions

View File

@ -2682,7 +2682,8 @@ GuestOSInfo *qmp_guest_get_osinfo(Error **errp)
{
GuestOSInfo *info = NULL;
struct utsname kinfo;
GKeyFile *osrelease;
GKeyFile *osrelease = NULL;
const char *qga_os_release = g_getenv("QGA_OS_RELEASE");
info = g_new0(GuestOSInfo, 1);
@ -2697,10 +2698,14 @@ GuestOSInfo *qmp_guest_get_osinfo(Error **errp)
info->machine = g_strdup(kinfo.machine);
}
if (qga_os_release != NULL) {
osrelease = ga_parse_osrelease(qga_os_release);
} else {
osrelease = ga_parse_osrelease("/etc/os-release");
if (osrelease == NULL) {
osrelease = ga_parse_osrelease("/usr/lib/os-release");
}
}
if (osrelease != NULL) {
char *value;

View File

@ -0,0 +1,7 @@
ID=qemu-ga-test
NAME=QEMU-GA
PRETTY_NAME="QEMU Guest Agent test"
VERSION="Test 1"
VERSION_ID=1
VARIANT="Unit test \"\'\$\`\\ and \\\\ etc."
VARIANT_ID=unit-test

View File

@ -936,6 +936,60 @@ static void test_qga_guest_exec_invalid(gconstpointer fix)
QDECREF(ret);
}
static void test_qga_guest_get_osinfo(gconstpointer data)
{
TestFixture fixture;
const gchar *str;
gchar *cwd, *env[2];
QDict *ret, *val;
cwd = g_get_current_dir();
env[0] = g_strdup_printf(
"QGA_OS_RELEASE=%s%ctests%cdata%ctest-qga-os-release",
cwd, G_DIR_SEPARATOR, G_DIR_SEPARATOR, G_DIR_SEPARATOR);
env[1] = NULL;
g_free(cwd);
fixture_setup(&fixture, NULL, env);
ret = qmp_fd(fixture.fd, "{'execute': 'guest-get-osinfo'}");
g_assert_nonnull(ret);
qmp_assert_no_error(ret);
val = qdict_get_qdict(ret, "return");
str = qdict_get_try_str(val, "id");
g_assert_nonnull(str);
g_assert_cmpstr(str, ==, "qemu-ga-test");
str = qdict_get_try_str(val, "name");
g_assert_nonnull(str);
g_assert_cmpstr(str, ==, "QEMU-GA");
str = qdict_get_try_str(val, "pretty-name");
g_assert_nonnull(str);
g_assert_cmpstr(str, ==, "QEMU Guest Agent test");
str = qdict_get_try_str(val, "version");
g_assert_nonnull(str);
g_assert_cmpstr(str, ==, "Test 1");
str = qdict_get_try_str(val, "version-id");
g_assert_nonnull(str);
g_assert_cmpstr(str, ==, "1");
str = qdict_get_try_str(val, "variant");
g_assert_nonnull(str);
g_assert_cmpstr(str, ==, "Unit test \"'$`\\ and \\\\ etc.");
str = qdict_get_try_str(val, "variant-id");
g_assert_nonnull(str);
g_assert_cmpstr(str, ==, "unit-test");
QDECREF(ret);
g_free(env[0]);
fixture_tear_down(&fixture, NULL);
}
int main(int argc, char **argv)
{
TestFixture fix;
@ -972,6 +1026,8 @@ int main(int argc, char **argv)
g_test_add_data_func("/qga/guest-exec", &fix, test_qga_guest_exec);
g_test_add_data_func("/qga/guest-exec-invalid", &fix,
test_qga_guest_exec_invalid);
g_test_add_data_func("/qga/guest-get-osinfo", &fix,
test_qga_guest_get_osinfo);
if (g_getenv("QGA_TEST_SIDE_EFFECTING")) {
g_test_add_data_func("/qga/fsfreeze-and-thaw", &fix,