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:
parent
c28afa76c0
commit
339ca68bef
@ -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;
|
||||
|
7
tests/data/test-qga-os-release
Normal file
7
tests/data/test-qga-os-release
Normal 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
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user