diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.include | 52 | ||||
-rw-r--r-- | tests/boot-serial-test.c | 110 | ||||
-rw-r--r-- | tests/check-qom-interface.c | 1 | ||||
-rw-r--r-- | tests/check-qom-proplist.c | 16 | ||||
-rw-r--r-- | tests/hd-geo-test.c | 4 | ||||
-rw-r--r-- | tests/libqtest.c | 19 | ||||
-rw-r--r-- | tests/libqtest.h | 17 | ||||
-rw-r--r-- | tests/pc-cpu-test.c | 24 | ||||
-rw-r--r-- | tests/postcopy-test.c | 7 | ||||
-rw-r--r-- | tests/qom-test.c | 5 | ||||
-rw-r--r-- | tests/test-cutils.c | 24 | ||||
-rw-r--r-- | tests/test-iov.c | 7 | ||||
-rw-r--r-- | tests/test-qga.c | 5 | ||||
-rw-r--r-- | tests/test-string-input-visitor.c | 1 | ||||
-rw-r--r-- | tests/test-vmstate.c | 8 |
15 files changed, 264 insertions, 36 deletions
diff --git a/tests/Makefile.include b/tests/Makefile.include index 03382b5fe7..e3a3266370 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -195,6 +195,7 @@ check-qtest-i386-y += tests/hd-geo-test$(EXESUF) gcov-files-i386-y += hw/block/hd-geometry.c check-qtest-i386-y += tests/boot-order-test$(EXESUF) check-qtest-i386-y += tests/bios-tables-test$(EXESUF) +check-qtest-i386-y += tests/boot-serial-test$(EXESUF) check-qtest-i386-y += tests/pxe-test$(EXESUF) check-qtest-i386-y += tests/rtc-test$(EXESUF) check-qtest-i386-y += tests/ipmi-kcs-test$(EXESUF) @@ -241,37 +242,55 @@ check-qtest-i386-y += tests/postcopy-test$(EXESUF) check-qtest-x86_64-y += $(check-qtest-i386-y) gcov-files-i386-y += i386-softmmu/hw/timer/mc146818rtc.c gcov-files-x86_64-y = $(subst i386-softmmu/,x86_64-softmmu/,$(gcov-files-i386-y)) + +check-qtest-alpha-y = tests/boot-serial-test$(EXESUF) + check-qtest-mips-y = tests/endianness-test$(EXESUF) + check-qtest-mips64-y = tests/endianness-test$(EXESUF) + check-qtest-mips64el-y = tests/endianness-test$(EXESUF) + check-qtest-ppc-y = tests/endianness-test$(EXESUF) -check-qtest-ppc64-y = tests/endianness-test$(EXESUF) +check-qtest-ppc-y += tests/boot-order-test$(EXESUF) +check-qtest-ppc-y += tests/prom-env-test$(EXESUF) +check-qtest-ppc-y += tests/drive_del-test$(EXESUF) +check-qtest-ppc-y += tests/boot-serial-test$(EXESUF) + +check-qtest-ppc64-y = tests/spapr-phb-test$(EXESUF) +gcov-files-ppc64-y = ppc64-softmmu/hw/ppc/spapr_pci.c +check-qtest-ppc64-y += tests/endianness-test$(EXESUF) +check-qtest-ppc64-y += tests/boot-order-test$(EXESUF) +check-qtest-ppc64-y += tests/prom-env-test$(EXESUF) +check-qtest-ppc64-y += tests/drive_del-test$(EXESUF) +check-qtest-ppc64-y += tests/postcopy-test$(EXESUF) +check-qtest-ppc64-y += tests/boot-serial-test$(EXESUF) + check-qtest-sh4-y = tests/endianness-test$(EXESUF) + check-qtest-sh4eb-y = tests/endianness-test$(EXESUF) + +check-qtest-sparc-y = tests/prom-env-test$(EXESUF) +#check-qtest-sparc-y += tests/m48t59-test$(EXESUF) +#gcov-files-sparc-y = hw/timer/m48t59.c + check-qtest-sparc64-y = tests/endianness-test$(EXESUF) -#check-qtest-sparc-y = tests/m48t59-test$(EXESUF) #check-qtest-sparc64-y += tests/m48t59-test$(EXESUF) -gcov-files-sparc-y += hw/timer/m48t59.c -gcov-files-sparc64-y += hw/timer/m48t59.c +#gcov-files-sparc64-y += hw/timer/m48t59.c +#Disabled for now, triggers a TCG bug on 32-bit hosts +#check-qtest-sparc64-y += tests/prom-env-test$(EXESUF) + check-qtest-arm-y = tests/tmp105-test$(EXESUF) check-qtest-arm-y += tests/ds1338-test$(EXESUF) gcov-files-arm-y += hw/misc/tmp105.c check-qtest-arm-y += tests/virtio-blk-test$(EXESUF) gcov-files-arm-y += arm-softmmu/hw/block/virtio-blk.c -check-qtest-ppc-y += tests/boot-order-test$(EXESUF) -check-qtest-ppc64-y += tests/boot-order-test$(EXESUF) -check-qtest-ppc-y += tests/drive_del-test$(EXESUF) -check-qtest-ppc64-y += tests/drive_del-test$(EXESUF) -check-qtest-ppc64-y += tests/spapr-phb-test$(EXESUF) -gcov-files-ppc64-y += ppc64-softmmu/hw/ppc/spapr_pci.c -check-qtest-ppc-y += tests/prom-env-test$(EXESUF) -check-qtest-ppc64-y += tests/prom-env-test$(EXESUF) -check-qtest-sparc-y += tests/prom-env-test$(EXESUF) -#Disabled for now, triggers a TCG bug on 32-bit hosts -#check-qtest-sparc64-y += tests/prom-env-test$(EXESUF) + check-qtest-microblazeel-y = $(check-qtest-microblaze-y) + check-qtest-xtensaeb-y = $(check-qtest-xtensa-y) -check-qtest-ppc64-y += tests/postcopy-test$(EXESUF) + +check-qtest-s390x-y = tests/boot-serial-test$(EXESUF) check-qtest-generic-y += tests/qom-test$(EXESUF) @@ -578,6 +597,7 @@ tests/ipmi-kcs-test$(EXESUF): tests/ipmi-kcs-test.o tests/ipmi-bt-test$(EXESUF): tests/ipmi-bt-test.o tests/hd-geo-test$(EXESUF): tests/hd-geo-test.o tests/boot-order-test$(EXESUF): tests/boot-order-test.o $(libqos-obj-y) +tests/boot-serial-test$(EXESUF): tests/boot-serial-test.o $(libqos-obj-y) tests/bios-tables-test$(EXESUF): tests/bios-tables-test.o \ tests/boot-sector.o $(libqos-obj-y) tests/pxe-test$(EXESUF): tests/pxe-test.o tests/boot-sector.o $(libqos-obj-y) diff --git a/tests/boot-serial-test.c b/tests/boot-serial-test.c new file mode 100644 index 0000000000..d98c564a35 --- /dev/null +++ b/tests/boot-serial-test.c @@ -0,0 +1,110 @@ +/* + * Test serial output of some machines. + * + * Copyright 2016 Thomas Huth, Red Hat Inc. + * + * This work is licensed under the terms of the GNU GPL, version 2 + * or later. See the COPYING file in the top-level directory. + * + * This test is used to check that the serial output of the firmware + * (that we provide for some machines) contains an expected string. + * Thus we check that the firmware still boots at least to a certain + * point and so we know that the machine is not completely broken. + */ + +#include "qemu/osdep.h" +#include "libqtest.h" + +typedef struct testdef { + const char *arch; /* Target architecture */ + const char *machine; /* Name of the machine */ + const char *extra; /* Additional parameters */ + const char *expect; /* Expected string in the serial output */ +} testdef_t; + +static testdef_t tests[] = { + { "alpha", "clipper", "", "PCI:" }, + { "ppc", "ppce500", "", "U-Boot" }, + { "ppc", "prep", "", "Open Hack'Ware BIOS" }, + { "ppc64", "ppce500", "", "U-Boot" }, + { "ppc64", "prep", "", "Open Hack'Ware BIOS" }, + { "ppc64", "pseries", "", "Open Firmware" }, + { "i386", "isapc", "-cpu qemu32 -device sga", "SGABIOS" }, + { "i386", "pc", "-device sga", "SGABIOS" }, + { "i386", "q35", "-device sga", "SGABIOS" }, + { "x86_64", "isapc", "-cpu qemu32 -device sga", "SGABIOS" }, + { "x86_64", "q35", "-device sga", "SGABIOS" }, + { "s390x", "s390-ccw-virtio", + "-nodefaults -device sclpconsole,chardev=serial0", "virtio device" }, + { NULL } +}; + +static void check_guest_output(const testdef_t *test, int fd) +{ + bool output_ok = false; + int i, nbr, pos = 0; + char ch; + + /* Poll serial output... Wait at most 60 seconds */ + for (i = 0; i < 6000; ++i) { + while ((nbr = read(fd, &ch, 1)) == 1) { + if (ch == test->expect[pos]) { + pos += 1; + if (test->expect[pos] == '\0') { + /* We've reached the end of the expected string! */ + output_ok = true; + goto done; + } + } else { + pos = 0; + } + } + g_assert(nbr >= 0); + g_usleep(10000); + } + +done: + g_assert(output_ok); +} + +static void test_machine(const void *data) +{ + const testdef_t *test = data; + char *args; + char tmpname[] = "/tmp/qtest-boot-serial-XXXXXX"; + int fd; + + fd = mkstemp(tmpname); + g_assert(fd != -1); + + args = g_strdup_printf("-M %s,accel=tcg -chardev file,id=serial0,path=%s" + " -serial chardev:serial0 %s", test->machine, + tmpname, test->extra); + + qtest_start(args); + unlink(tmpname); + + check_guest_output(test, fd); + qtest_quit(global_qtest); + + g_free(args); + close(fd); +} + +int main(int argc, char *argv[]) +{ + const char *arch = qtest_get_arch(); + int i; + + g_test_init(&argc, &argv, NULL); + + for (i = 0; tests[i].arch != NULL; i++) { + if (strcmp(arch, tests[i].arch) == 0) { + char *name = g_strdup_printf("boot-serial/%s", tests[i].machine); + qtest_add_data_func(name, &tests[i], test_machine); + g_free(name); + } + } + + return g_test_run(); +} diff --git a/tests/check-qom-interface.c b/tests/check-qom-interface.c index 719ddcf2e0..f87c9aaa8a 100644 --- a/tests/check-qom-interface.c +++ b/tests/check-qom-interface.c @@ -76,6 +76,7 @@ static void test_interface_impl(const char *type) g_assert(iobj); g_assert(ioc->test == PATTERN); + object_unref(obj); } static void interface_direct_test(void) diff --git a/tests/check-qom-proplist.c b/tests/check-qom-proplist.c index 42defe7128..a16cefca73 100644 --- a/tests/check-qom-proplist.c +++ b/tests/check-qom-proplist.c @@ -230,6 +230,13 @@ struct DummyBackendClass { }; +static void dummy_dev_finalize(Object *obj) +{ + DummyDev *dev = DUMMY_DEV(obj); + + object_unref(OBJECT(dev->bus)); +} + static void dummy_dev_init(Object *obj) { DummyDev *dev = DUMMY_DEV(obj); @@ -257,6 +264,13 @@ static void dummy_dev_class_init(ObjectClass *klass, void *opaque) } +static void dummy_bus_finalize(Object *obj) +{ + DummyBus *bus = DUMMY_BUS(obj); + + object_unref(OBJECT(bus->backend)); +} + static void dummy_bus_init(Object *obj) { } @@ -283,6 +297,7 @@ static const TypeInfo dummy_dev_info = { .parent = TYPE_OBJECT, .instance_size = sizeof(DummyDev), .instance_init = dummy_dev_init, + .instance_finalize = dummy_dev_finalize, .class_size = sizeof(DummyDevClass), .class_init = dummy_dev_class_init, }; @@ -292,6 +307,7 @@ static const TypeInfo dummy_bus_info = { .parent = TYPE_OBJECT, .instance_size = sizeof(DummyBus), .instance_init = dummy_bus_init, + .instance_finalize = dummy_bus_finalize, .class_size = sizeof(DummyBusClass), .class_init = dummy_bus_class_init, }; diff --git a/tests/hd-geo-test.c b/tests/hd-geo-test.c index 12ee3929da..6176e81ab2 100644 --- a/tests/hd-geo-test.c +++ b/tests/hd-geo-test.c @@ -416,7 +416,9 @@ int main(int argc, char **argv) ret = g_test_run(); for (i = 0; i < backend_last; i++) { - unlink(img_file_name[i]); + if (img_file_name[i]) { + unlink(img_file_name[i]); + } } return ret; diff --git a/tests/libqtest.c b/tests/libqtest.c index eb00f1392b..42ccb62f80 100644 --- a/tests/libqtest.c +++ b/tests/libqtest.c @@ -758,6 +758,25 @@ void qtest_add_func(const char *str, void (*fn)(void)) g_free(path); } +void qtest_add_data_func_full(const char *str, void *data, + void (*fn)(const void *), + GDestroyNotify data_free_func) +{ + gchar *path = g_strdup_printf("/%s/%s", qtest_get_arch(), str); +#if GLIB_CHECK_VERSION(2, 34, 0) + g_test_add_data_func_full(path, data, fn, data_free_func); +#elif GLIB_CHECK_VERSION(2, 26, 0) + /* back-compat casts, remove this once we can require new-enough glib */ + g_test_add_vtable(path, 0, data, NULL, + (GTestFixtureFunc)fn, (GTestFixtureFunc) data_free_func); +#else + /* back-compat casts, remove this once we can require new-enough glib */ + g_test_add_vtable(path, 0, data, NULL, + (void (*)(void)) fn, (void (*)(void)) data_free_func); +#endif + g_free(path); +} + void qtest_add_data_func(const char *str, const void *data, void (*fn)(const void *)) { diff --git a/tests/libqtest.h b/tests/libqtest.h index 37f37adbf7..d2b48535a6 100644 --- a/tests/libqtest.h +++ b/tests/libqtest.h @@ -426,6 +426,23 @@ void qtest_add_data_func(const char *str, const void *data, void (*fn)(const void *)); /** + * qtest_add_data_func_full: + * @str: Test case path. + * @data: Test case data + * @fn: Test case function + * @data_free_func: GDestroyNotify for data + * + * Add a GTester testcase with the given name, data and function. + * The path is prefixed with the architecture under test, as + * returned by qtest_get_arch(). + * + * @data is passed to @data_free_func() on test completion. + */ +void qtest_add_data_func_full(const char *str, void *data, + void (*fn)(const void *), + GDestroyNotify data_free_func); + +/** * qtest_add: * @testpath: Test case path * @Fixture: Fixture type diff --git a/tests/pc-cpu-test.c b/tests/pc-cpu-test.c index 4428cea5f1..c3a2633d3c 100644 --- a/tests/pc-cpu-test.c +++ b/tests/pc-cpu-test.c @@ -14,7 +14,7 @@ #include "qapi/qmp/types.h" struct PCTestData { - const char *machine; + char *machine; const char *cpu_model; unsigned sockets; unsigned cores; @@ -71,6 +71,14 @@ static void test_pc_without_cpu_add(gconstpointer data) g_free(args); } +static void test_data_free(gpointer data) +{ + PCTestData *pc = data; + + g_free(pc->machine); + g_free(pc); +} + static void add_pc_test_cases(void) { QDict *response, *minfo; @@ -78,7 +86,8 @@ static void add_pc_test_cases(void) const QListEntry *p; QObject *qobj; QString *qstr; - const char *mname, *path; + const char *mname; + char *path; PCTestData *data; qtest_start("-machine none"); @@ -99,7 +108,7 @@ static void add_pc_test_cases(void) continue; } data = g_malloc(sizeof(PCTestData)); - data->machine = mname; + data->machine = g_strdup(mname); data->cpu_model = "Haswell"; /* 1.3+ theoretically */ data->sockets = 1; data->cores = 3; @@ -119,14 +128,19 @@ static void add_pc_test_cases(void) path = g_strdup_printf("cpu/%s/init/%ux%ux%u&maxcpus=%u", mname, data->sockets, data->cores, data->threads, data->maxcpus); - qtest_add_data_func(path, data, test_pc_without_cpu_add); + qtest_add_data_func_full(path, data, test_pc_without_cpu_add, + test_data_free); + g_free(path); } else { path = g_strdup_printf("cpu/%s/add/%ux%ux%u&maxcpus=%u", mname, data->sockets, data->cores, data->threads, data->maxcpus); - qtest_add_data_func(path, data, test_pc_with_cpu_add); + qtest_add_data_func_full(path, data, test_pc_with_cpu_add, + test_data_free); + g_free(path); } } + QDECREF(response); qtest_end(); } diff --git a/tests/postcopy-test.c b/tests/postcopy-test.c index 229e9e901a..41ed1a976f 100644 --- a/tests/postcopy-test.c +++ b/tests/postcopy-test.c @@ -176,6 +176,7 @@ static void wait_for_serial(const char *side) int started = (strcmp(side, "src_serial") == 0 && strcmp(arch, "ppc64") == 0) ? 0 : 1; + g_free(serialpath); do { int readvalue = fgetc(serialfile); @@ -203,7 +204,6 @@ static void wait_for_serial(const char *side) case 'B': /* It's alive! */ fclose(serialfile); - g_free(serialpath); return; case EOF: @@ -260,8 +260,8 @@ static uint64_t get_migration_pass(void) } else { rsp_ram = qdict_get_qdict(rsp_return, "ram"); result = qdict_get_try_int(rsp_ram, "dirty-sync-count", 0); - QDECREF(rsp); } + QDECREF(rsp); return result; } @@ -350,6 +350,7 @@ static void cleanup(const char *filename) char *path = g_strdup_printf("%s/%s", tmpfs, filename); unlink(path); + g_free(path); } static void test_migrate(void) @@ -394,6 +395,8 @@ static void test_migrate(void) g_assert_not_reached(); } + g_free(bootpath); + from = qtest_start(cmd_src); g_free(cmd_src); diff --git a/tests/qom-test.c b/tests/qom-test.c index 23493a2b0a..d48f890e84 100644 --- a/tests/qom-test.c +++ b/tests/qom-test.c @@ -115,7 +115,7 @@ static void add_machine_test_cases(void) const QListEntry *p; QObject *qobj; QString *qstr; - const char *mname, *path; + const char *mname; qtest_start("-machine none"); response = qmp("{ 'execute': 'query-machines' }"); @@ -132,8 +132,9 @@ static void add_machine_test_cases(void) g_assert(qstr); mname = qstring_get_str(qstr); if (!is_blacklisted(arch, mname)) { - path = g_strdup_printf("qom/%s", mname); + char *path = g_strdup_printf("qom/%s", mname); qtest_add_data_func(path, g_strdup(mname), test_machine); + g_free(path); } } diff --git a/tests/test-cutils.c b/tests/test-cutils.c index 64e3e95ce2..20b0f59ba2 100644 --- a/tests/test-cutils.c +++ b/tests/test-cutils.c @@ -378,7 +378,7 @@ static void test_qemu_strtol_hex(void) static void test_qemu_strtol_max(void) { - const char *str = g_strdup_printf("%ld", LONG_MAX); + char *str = g_strdup_printf("%ld", LONG_MAX); char f = 'X'; const char *endptr = &f; long res = 999; @@ -389,6 +389,7 @@ static void test_qemu_strtol_max(void) g_assert_cmpint(err, ==, 0); g_assert_cmpint(res, ==, LONG_MAX); g_assert(endptr == str + strlen(str)); + g_free(str); } static void test_qemu_strtol_overflow(void) @@ -497,7 +498,7 @@ static void test_qemu_strtol_full_trailing(void) static void test_qemu_strtol_full_max(void) { - const char *str = g_strdup_printf("%ld", LONG_MAX); + char *str = g_strdup_printf("%ld", LONG_MAX); long res; int err; @@ -505,6 +506,7 @@ static void test_qemu_strtol_full_max(void) g_assert_cmpint(err, ==, 0); g_assert_cmpint(res, ==, LONG_MAX); + g_free(str); } static void test_qemu_strtoul_correct(void) @@ -662,7 +664,7 @@ static void test_qemu_strtoul_hex(void) static void test_qemu_strtoul_max(void) { - const char *str = g_strdup_printf("%lu", ULONG_MAX); + char *str = g_strdup_printf("%lu", ULONG_MAX); char f = 'X'; const char *endptr = &f; unsigned long res = 999; @@ -673,6 +675,7 @@ static void test_qemu_strtoul_max(void) g_assert_cmpint(err, ==, 0); g_assert_cmpint(res, ==, ULONG_MAX); g_assert(endptr == str + strlen(str)); + g_free(str); } static void test_qemu_strtoul_overflow(void) @@ -776,7 +779,7 @@ static void test_qemu_strtoul_full_trailing(void) static void test_qemu_strtoul_full_max(void) { - const char *str = g_strdup_printf("%lu", ULONG_MAX); + char *str = g_strdup_printf("%lu", ULONG_MAX); unsigned long res = 999; int err; @@ -784,6 +787,7 @@ static void test_qemu_strtoul_full_max(void) g_assert_cmpint(err, ==, 0); g_assert_cmpint(res, ==, ULONG_MAX); + g_free(str); } static void test_qemu_strtoll_correct(void) @@ -941,7 +945,7 @@ static void test_qemu_strtoll_hex(void) static void test_qemu_strtoll_max(void) { - const char *str = g_strdup_printf("%lld", LLONG_MAX); + char *str = g_strdup_printf("%lld", LLONG_MAX); char f = 'X'; const char *endptr = &f; int64_t res = 999; @@ -952,6 +956,7 @@ static void test_qemu_strtoll_max(void) g_assert_cmpint(err, ==, 0); g_assert_cmpint(res, ==, LLONG_MAX); g_assert(endptr == str + strlen(str)); + g_free(str); } static void test_qemu_strtoll_overflow(void) @@ -1058,7 +1063,7 @@ static void test_qemu_strtoll_full_trailing(void) static void test_qemu_strtoll_full_max(void) { - const char *str = g_strdup_printf("%lld", LLONG_MAX); + char *str = g_strdup_printf("%lld", LLONG_MAX); int64_t res; int err; @@ -1066,6 +1071,7 @@ static void test_qemu_strtoll_full_max(void) g_assert_cmpint(err, ==, 0); g_assert_cmpint(res, ==, LLONG_MAX); + g_free(str); } static void test_qemu_strtoull_correct(void) @@ -1223,7 +1229,7 @@ static void test_qemu_strtoull_hex(void) static void test_qemu_strtoull_max(void) { - const char *str = g_strdup_printf("%llu", ULLONG_MAX); + char *str = g_strdup_printf("%llu", ULLONG_MAX); char f = 'X'; const char *endptr = &f; uint64_t res = 999; @@ -1234,6 +1240,7 @@ static void test_qemu_strtoull_max(void) g_assert_cmpint(err, ==, 0); g_assert_cmpint(res, ==, ULLONG_MAX); g_assert(endptr == str + strlen(str)); + g_free(str); } static void test_qemu_strtoull_overflow(void) @@ -1339,7 +1346,7 @@ static void test_qemu_strtoull_full_trailing(void) static void test_qemu_strtoull_full_max(void) { - const char *str = g_strdup_printf("%lld", ULLONG_MAX); + char *str = g_strdup_printf("%lld", ULLONG_MAX); uint64_t res = 999; int err; @@ -1347,6 +1354,7 @@ static void test_qemu_strtoull_full_max(void) g_assert_cmpint(err, ==, 0); g_assert_cmpint(res, ==, ULLONG_MAX); + g_free(str); } static void test_qemu_strtosz_simple(void) diff --git a/tests/test-iov.c b/tests/test-iov.c index 46ae25efd6..a22d71fd2c 100644 --- a/tests/test-iov.c +++ b/tests/test-iov.c @@ -208,6 +208,9 @@ static void test_io(void) } while(k < j); } } + iov_free(iov, niov); + g_free(buf); + g_free(siov); exit(0); } else { @@ -246,6 +249,10 @@ static void test_io(void) test_iov_bytes(iov, niov, i, j - i); } } + + iov_free(iov, niov); + g_free(buf); + g_free(siov); } #endif } diff --git a/tests/test-qga.c b/tests/test-qga.c index dac8fb8c0a..21f44f8915 100644 --- a/tests/test-qga.c +++ b/tests/test-qga.c @@ -398,6 +398,7 @@ static void test_qga_file_ops(gconstpointer fix) /* check content */ path = g_build_filename(fixture->test_dir, "foo", NULL); f = fopen(path, "r"); + g_free(path); g_assert_nonnull(f); count = fread(tmp, 1, sizeof(tmp), f); g_assert_cmpint(count, ==, sizeof(helloworld)); @@ -700,7 +701,9 @@ static void test_qga_config(gconstpointer data) cwd = g_get_current_dir(); cmd = g_strdup_printf("%s%cqemu-ga -D", cwd, G_DIR_SEPARATOR); + g_free(cwd); g_shell_parse_argv(cmd, NULL, &argv, &error); + g_free(cmd); g_assert_no_error(error); env[0] = g_strdup_printf("QGA_CONF=tests%cdata%ctest-qga-config", @@ -708,6 +711,8 @@ static void test_qga_config(gconstpointer data) env[1] = NULL; g_spawn_sync(NULL, argv, env, 0, NULL, NULL, &out, &err, &status, &error); + g_strfreev(argv); + g_assert_no_error(error); g_assert_cmpstr(err, ==, ""); g_assert_cmpint(status, ==, 0); diff --git a/tests/test-string-input-visitor.c b/tests/test-string-input-visitor.c index d837ebedad..a679fbc678 100644 --- a/tests/test-string-input-visitor.c +++ b/tests/test-string-input-visitor.c @@ -228,6 +228,7 @@ static void test_visitor_in_fuzz(TestInputVisitorData *data, v = visitor_input_test_init(data, buf); visit_type_intList(v, NULL, &ilres, NULL); + qapi_free_intList(ilres); visitor_input_teardown(data, NULL); v = visitor_input_test_init(data, buf); diff --git a/tests/test-vmstate.c b/tests/test-vmstate.c index 41fd841aed..d8da26f974 100644 --- a/tests/test-vmstate.c +++ b/tests/test-vmstate.c @@ -50,16 +50,20 @@ static QEMUFile *open_test_file(bool write) { int fd = dup(temp_fd); QIOChannel *ioc; + QEMUFile *f; + lseek(fd, 0, SEEK_SET); if (write) { g_assert_cmpint(ftruncate(fd, 0), ==, 0); } ioc = QIO_CHANNEL(qio_channel_file_new_fd(fd)); if (write) { - return qemu_fopen_channel_output(ioc); + f = qemu_fopen_channel_output(ioc); } else { - return qemu_fopen_channel_input(ioc); + f = qemu_fopen_channel_input(ioc); } + object_unref(OBJECT(ioc)); + return f; } #define SUCCESS(val) \ |