|
From: | John Snow |
Subject: | Re: [Qemu-devel] [PATCH 7/8] qtest/ahci: add qcow2 support to ahci-test |
Date: | Wed, 25 Feb 2015 17:40:00 -0500 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 |
On 02/25/2015 10:27 AM, Stefan Hajnoczi wrote:
On Thu, Feb 19, 2015 at 05:30:02PM -0500, John Snow wrote:diff --git a/tests/libqos/libqos.c b/tests/libqos/libqos.c index bc8beb2..3577401 100644 --- a/tests/libqos/libqos.c +++ b/tests/libqos/libqos.c @@ -61,3 +61,33 @@ void qtest_shutdown(QOSState *qs) qtest_quit(qs->qts); g_free(qs); } + +int mkqcow2(const char *file, unsigned size_mb) +{ + pid_t pid; + int rc; + char buff[32]; + + snprintf(buff, 32, "%uM", size_mb); + + pid = fork(); + switch (pid) { + case -1: + perror("fork failed"); + return -1; + case 0: + close(fileno(stdout)); + rc = open("/dev/null", O_WRONLY); + g_assert_cmpint(rc, ==, fileno(stdout)); + execl("./qemu-img", "qemu-img", "create", "-f", "qcow2", + file, buff, NULL);Where is the current working directory set?
Nowhere in-program. We assume you are running this via `make check` which further assumes that qemu-img is in your build tree. We actually never set an explicit path for where the QEMU binary is either: it's set to e.g.:
QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 and then executed via execlp("exec QTEST_QEMU_BINARY", ...) This patch pulls a similar shortcut.The Makefile blob doesn't actually appear to really ever explicitly set a path for where the binaries should be; qemu-img is not defined to be in any sort of path, so we can assume that all paths are relative to the Makefile.
What I will do is set QTEST_QEMU_IMG to at least match the direct name of the QEMU_IMG we generated, so it will have $(EXESUF) attached to it, for instance.
Will this work for both in-tree and out-of-tree builds?
Yes. I usually run out of tree, but it works fine in-tree too. As long as relative to the Makefile ./qemu-img$(EXESUF) exists, you will be fine.
If you decide to run this outside of make check, you can always set QTEST_QEMU_IMG yourself.
BTW, glib abstracts process spawning, maybe all this can be done in a single function call: https://developer.gnome.org/glib/stable/glib-Spawning-Processes.html#g-spawn-sync
OK, I've implemented it with this call instead. Will send a V2.
+ perror("execl failed"); + exit(-1);EXIT_FAILURE is provided by the C standard for returning failure. (-1 is confusing because the shell exit code value cannot be negative.)+ default: + wait(&rc); + g_assert_cmpint(rc, ==, 0); + return rc; + } + + g_assert_not_reached(); +} diff --git a/tests/libqos/libqos.h b/tests/libqos/libqos.h index 612d41e..5abd2bd 100644 --- a/tests/libqos/libqos.h +++ b/tests/libqos/libqos.h @@ -19,6 +19,7 @@ typedef struct QOSState { QOSState *qtest_vboot(QOSOps *ops, const char *cmdline_fmt, va_list ap); QOSState *qtest_boot(QOSOps *ops, const char *cmdline_fmt, ...); void qtest_shutdown(QOSState *qs); +int mkqcow2(const char *file, unsigned size_mb); static inline uint64_t qmalloc(QOSState *q, size_t bytes) { -- 1.9.3
[Prev in Thread] | Current Thread | [Next in Thread] |