Am 09.03.2015 um 21:34 hat John Snow geschrieben: > > > On 03/09/2015 10:27 AM, Kevin Wolf wrote: > >Am 26.02.2015 um 00:06 hat John Snow geschrieben: > >>This will enable the testing of high offsets without > >>wasting a lot of disk space, and does not impact the > >>previous tests. > >> > >>mkimg and mkqcow2 are added to libqos for other tests. > >> > >>Signed-off-by: John Snow <js...@redhat.com> > >>--- > >> tests/Makefile | 1 + > >> tests/ahci-test.c | 16 ++++++---------- > >> tests/libqos/libqos.c | 37 +++++++++++++++++++++++++++++++++++++ > >> tests/libqos/libqos.h | 2 ++ > >> 4 files changed, 46 insertions(+), 10 deletions(-) > >> > >>diff --git a/tests/Makefile b/tests/Makefile > >>index 307035c..09ecb66 100644 > >>--- a/tests/Makefile > >>+++ b/tests/Makefile > >>@@ -413,6 +413,7 @@ GCOV_OPTIONS = -n $(if $(V),-f,) > >> $(patsubst %, check-qtest-%, $(QTEST_TARGETS)): check-qtest-%: > >> $(check-qtest-y) > >> $(if $(CONFIG_GCOV),@rm -f *.gcda */*.gcda */*/*.gcda */*/*/*.gcda,) > >> $(call quiet-command,QTEST_QEMU_BINARY=$*-softmmu/qemu-system-$* \ > >>+ QTEST_QEMU_IMG=qemu-img$(EXESUF) \ > >> MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$((RANDOM % 255 + 1))} \ > >> gtester $(GTESTER_OPTIONS) -m=$(SPEED) > >> $(check-qtest-$*-y),"GTESTER $@") > >> $(if $(CONFIG_GCOV),@for f in $(gcov-files-$*-y); do \ > >>diff --git a/tests/ahci-test.c b/tests/ahci-test.c > >>index cf0b98b..3f93c15 100644 > >>--- a/tests/ahci-test.c > >>+++ b/tests/ahci-test.c > >>@@ -39,8 +39,8 @@ > >> #include "hw/pci/pci_ids.h" > >> #include "hw/pci/pci_regs.h" > >> > >>-/* Test-specific defines. */ > >>-#define TEST_IMAGE_SIZE (64 * 1024 * 1024) > >>+/* Test-specific defines -- in MiB */ > >>+#define TEST_IMAGE_SIZE_MB (200 * 1024) > >> > >> /*** Globals ***/ > >> static char tmp_path[] = "/tmp/qtest.XXXXXX"; > >>@@ -81,7 +81,7 @@ static AHCIQState *ahci_boot(void) > >> s = g_malloc0(sizeof(AHCIQState)); > >> > >> cli = "-drive if=none,id=drive0,file=%s,cache=writeback,serial=%s" > >>- ",format=raw" > >>+ ",format=qcow2" > >> " -M q35 " > >> "-device ide-hd,drive=drive0 " > >> "-global ide-hd.ver=%s"; > >>@@ -1051,7 +1051,6 @@ static void create_ahci_io_test(enum IOMode type, > >>enum AddrMode addr, > >> int main(int argc, char **argv) > >> { > >> const char *arch; > >>- int fd; > >> int ret; > >> int c; > >> int i, j, k; > >>@@ -1088,12 +1087,9 @@ int main(int argc, char **argv) > >> return 0; > >> } > >> > >>- /* Create a temporary raw image */ > >>- fd = mkstemp(tmp_path); > >>- g_assert(fd >= 0); > >>- ret = ftruncate(fd, TEST_IMAGE_SIZE); > >>- g_assert(ret == 0); > >>- close(fd); > >>+ /* Create a temporary qcow2 image */ > >>+ close(mkstemp(tmp_path)); > >>+ mkqcow2(tmp_path, TEST_IMAGE_SIZE_MB); > >> > >> /* Run the tests */ > >> qtest_add_func("/ahci/sanity", test_sanity); > >>diff --git a/tests/libqos/libqos.c b/tests/libqos/libqos.c > >>index bc8beb2..c825486 100644 > >>--- a/tests/libqos/libqos.c > >>+++ b/tests/libqos/libqos.c > >>@@ -61,3 +61,40 @@ void qtest_shutdown(QOSState *qs) > >> qtest_quit(qs->qts); > >> g_free(qs); > >> } > >>+ > >>+void mkimg(const char *file, const char *fmt, unsigned size_mb) > >>+{ > >>+ gchar *cli; > >>+ bool ret; > >>+ int rc; > >>+ GError *err = NULL; > >>+ char *qemu_img_path; > >>+ gchar *out, *out2; > >>+ > >>+ qemu_img_path = getenv("QTEST_QEMU_IMG"); > >>+ assert(qemu_img_path); > >>+ > >>+ cli = g_strdup_printf("./%s create -f %s %s %uM", qemu_img_path, > >>+ fmt, file, size_mb); > >>+ ret = g_spawn_command_line_sync(cli, &out, &out2, &rc, &err); > >>+ if (err) { > >>+ fprintf(stderr, "%s\n", err->message); > >>+ g_error_free(err); > >>+ } > >>+ g_assert(ret && !err); > >>+ > >>+ ret = g_spawn_check_exit_status(rc, &err); > > > >This function only exists since glib 2.34. Dropping the following > >patches from the queue: > > > > I'm looking at this some more. The glib code basically does this: > > If windows: Set an error if rc is nonzero. > If linux: use the WIFEXITED, WIFSIGNALED or WIFSTOPPED macros to > determine the domain of the error code. If WIFEXITED, check for > nonzero status. if WIFSIGNALED, WIFSTOPPED or !WIFEXITED, return an > error. > > I *think* I can just generalize this all, if I am not interested in > *why* we failed, to just checking rc to be nonzero. That should be > adequately multiplatform. > > Agree?
I would think so, yes. Kevin