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;
|
GuestOSInfo *info = NULL;
|
||||||
struct utsname kinfo;
|
struct utsname kinfo;
|
||||||
GKeyFile *osrelease;
|
GKeyFile *osrelease = NULL;
|
||||||
|
const char *qga_os_release = g_getenv("QGA_OS_RELEASE");
|
||||||
|
|
||||||
info = g_new0(GuestOSInfo, 1);
|
info = g_new0(GuestOSInfo, 1);
|
||||||
|
|
||||||
@ -2697,9 +2698,13 @@ GuestOSInfo *qmp_guest_get_osinfo(Error **errp)
|
|||||||
info->machine = g_strdup(kinfo.machine);
|
info->machine = g_strdup(kinfo.machine);
|
||||||
}
|
}
|
||||||
|
|
||||||
osrelease = ga_parse_osrelease("/etc/os-release");
|
if (qga_os_release != NULL) {
|
||||||
if (osrelease == NULL) {
|
osrelease = ga_parse_osrelease(qga_os_release);
|
||||||
osrelease = ga_parse_osrelease("/usr/lib/os-release");
|
} else {
|
||||||
|
osrelease = ga_parse_osrelease("/etc/os-release");
|
||||||
|
if (osrelease == NULL) {
|
||||||
|
osrelease = ga_parse_osrelease("/usr/lib/os-release");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (osrelease != NULL) {
|
if (osrelease != NULL) {
|
||||||
|
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);
|
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)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
TestFixture fix;
|
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", &fix, test_qga_guest_exec);
|
||||||
g_test_add_data_func("/qga/guest-exec-invalid", &fix,
|
g_test_add_data_func("/qga/guest-exec-invalid", &fix,
|
||||||
test_qga_guest_exec_invalid);
|
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")) {
|
if (g_getenv("QGA_TEST_SIDE_EFFECTING")) {
|
||||||
g_test_add_data_func("/qga/fsfreeze-and-thaw", &fix,
|
g_test_add_data_func("/qga/fsfreeze-and-thaw", &fix,
|
||||||
|
Loading…
Reference in New Issue
Block a user