Skip to content

Commit

Permalink
test-qga: add test for guest-get-osinfo
Browse files Browse the repository at this point in the history
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ý <[email protected]>
Reviewed-by: Marc-André Lureau <[email protected]>
* move declarations to beginning of functions
Signed-off-by: Michael Roth <[email protected]>
  • Loading branch information
nyoxi authored and mdroth committed Jul 18, 2017
1 parent c28afa7 commit 339ca68
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 4 deletions.
13 changes: 9 additions & 4 deletions qga/commands-posix.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand All @@ -2697,9 +2698,13 @@ GuestOSInfo *qmp_guest_get_osinfo(Error **errp)
info->machine = g_strdup(kinfo.machine);
}

osrelease = ga_parse_osrelease("/etc/os-release");
if (osrelease == NULL) {
osrelease = ga_parse_osrelease("/usr/lib/os-release");
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) {
Expand Down
7 changes: 7 additions & 0 deletions tests/data/test-qga-os-release
Original file line number Diff line number Diff line change
@@ -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
56 changes: 56 additions & 0 deletions tests/test-qga.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand Down

0 comments on commit 339ca68

Please sign in to comment.